
***format:***
*file-name: line number on pr: `function name`*
*- message*
1. test-ui.ts: 448: `updateWordsInputPosition` & ui.ts: 109:
`debouncedEvent`
- calculate #wordsInput left position in tape mode same way when
tapeMode is off (because tape mode can have zen mode and will accept RTL
later. Also, now tape mode can have 3 lines, and #wordsInput needs to go
down to the 2nd line).
- call updateWordsInputPosition() on window resize which solves #6093 in
a simpler way than a2f6c1f.
2. test-ui.ts: 551: `updateWordsWrapperHeight`
- on zen mode make wrapper height 2 lines, and move conditions around.
- on tape mode make wrapper height min(#words.Height, .word.Height * 3)
because #words now have some padding to prevent hints from being cut off
in 1-line tap mode.
3. test-ui.ts: 285: `updateActiveElement`
- don't call scrollTape() on initial call of updateActiveElement()
because it'll be called by other functions (i.e, showWords() and
updateActiveWordLetters()).
4. test-ui.ts: 796: `updateActiveWordLetters`
- move activeWord definition to the top of the function to return if
it's not defined, and use type argument instead of "as".
5. test-ui.ts: 356: `getWordHTML` & test-ui.ts: 945:
`updateActiveWordLetters`
- add .beforeNewline and .afterNewline elements with each added .newline
element.
- the point of .afterNewline is to indent the next line, and the point
of .beforeNewline is to act as a filler for the top line when the words
of that line get removed in scrollTape() because they were overflown
horizontally.
6. test.scss: 176+188+279: `#words`+`#words.tape`
- change #words display from flex to block and make .word, .afterNewline
and .beforeNewline elements display: inline-block (but keep .newline as
block) in order to use white-space: nowrap, but still be able to break
on demand with block elements .newline.
- also, make default .word margin-bottom in tape mode 0.25em just like
in non-tape mode, since they are now practically similar.
- make the height of .beforeNewline identical to the height of .word so
that when all top-line-words are removed, the user won't feel a vertical
shift in lines.
- use vertical-align: top in .word and .beforeNewline, because in
lineJump(), we rely on their offsetTop to be the same if they are on the
same line.
- add padding-bottom: 0.5em to #words to prevent hints from being
cut-off in the last line of test when showAllLines= on and in 1-line
tape mode.
7. input-controller: 169: `backspaceToPrevious`
- remove .beforeNewline and .afterNewline elements with .newline
elements when backspacing to a higher line in zen mode.
8. test-ui.ts: 590: `updateWordsMargin`
- when tape mode is turned on, first adjust the margins and then remove
overflown elements (this is what passing true to scrollTape() does), and
when it's turned off unset the margins of both #words and .afterNewline.
9. test-ui.ts: 1168: `removeElementsBeforeWord`
- add a new helper function that removes all elements (except
.smoothScroller), before (and including) the input element and returns
the removed .word elements (removes
.newline/.afterNewline/.beforeNewline/.word elements, but returns number
of removed .words only)
10. test-ui.ts: 1191: `lineJump`
- some refactoring: save HTMLelements in const instead of repeatedly
querying the DOM.
- allow lineJump() to be called in force (even when currentTestLine ===
0), which is useful when changing Config.showAllLines to off
(currentTestLine stays at zero in showAllLines=on), in order to lineJump
and keep the active word on the 2nd line.
- make the conditions to run lineJump() similar in tapeMode on and off
(currentTestLine > 0, hideBound = currentTop - 10).
- when determining the elements to hide, save the index of the last
element to hide in a const and then remove it and everything before it
when the animation completes. It is done like this instead of saving
what needs to be hidden in an array, because .afterNewline elements have
offsetTops that cannot be relied upon to determine if they need to be
hidden or not. The new function removeElementsBeforeWord() does that.
- last element to hide is now the last .word or .newline that is higher
than the hideBound.
- #words margin-top animation is done in its own queue so that we only
.stop() margin-top animation without affecting margin-left animation.
11. test-logic.ts: 1434: `ConfigEvent.subscribe`
- remove the restriction to allow changing showAllLines without
restarting the test.
12. test-ui.ts: 492: `centerActiveLine` & ui.ts: 107: `debouncedEvent`
- add a function centerActiveLine() that finds the top of the previous
line and calls lineJump() passing that top to it. If the active word is
on the 1st line it does nothing.
- this is useful on window resize because it used to call lineJump()
passing the top of the previous word to it, causing unnecessary line
jumping if the active word was in the middle of the 2nd line (see gif
below).
- this is also useful when turning ShowAllLines off to hide (remove) all
lines higher than the previous line.

13. test-ui.ts: 190: `ConfigEvent.subscribe()`
- call updateWordsWrapperHeight() on showAllLines change, and if the
change was to 'off' call centerActiveLine() in order to keep the active
word in the middle line.
14. test-ui.ts: 954: `getNlCharWidth`
- add a new helper function that calculates the width of the nlChar
letter that is in the last .word element before the input element, and
check if the nlChar placeholder was incorrectly typed, if so return a
width of 0. This last check is to minimize next line shifting behavior,
see
[video](https://discord.com/channels/713194177403420752/713196019206324306/1283880903382274119)
15. test-ui.ts: 978: `scrollTape`
- remove leading .afterNewline elements.
- get last element to loop over which is the 2nd .afterNewline after
active word, or else the 1st one after active, or else stop at the
active word.
- in the main loop sum the widths of words before new line then add it
to the left margin of the next .afterNewline, while also determining the
widths of words before the active word (which will be in the new
margin-left of #words), and determine what words have overflown the
wrapper and need to be hidden.
- if there is anything to remove, remove the overflown elements, and
adjust margin-left of #words and .afterNewline by the width of what was
removed.
- calculate the width of the current word in tape=letter just like
before then animate the new #words margin-left and .afterNewline
elements' margin-left.
- #words margin-left animation is done in its own queue so that when we
use .stop() before the animation we'll only be stopping the margin-left
animation and not the margin-top animation which is performed in
lineJump().
16. test-ui.ts: 492: `centerActiveLine`
- scrollTape now awaits the promise centeringActiveLine which is always
resolved except if showAllLines was on and tape mode was turned on
through the commandline mid-test. In that case centeringActiveLine won't
be resolved until lineJump completes its animation/style-change, so that
scrollTape removing words won't conflict with lineJump removing words.
Closes#3907
---------
Co-authored-by: Miodec <jack@monkeytype.com>
Translations:
Lithuanian: `Pelėsiais ir kerpe apaugus aukštai Trakų štai garbinga
pilis! Jos aukštus valdovus užmigdė kapai, O ji tebestovi dar vis.`
English: `Overgrown with mold and lichen, the high and venerable castle
of Trakai is here! Its high rulers have fallen asleep in tombs, And it
still stands.`
Lithuanian: `Ko ko, bet kvailių visur yra daugiau, negu reikia.
Kiekviena tauta jų turi ir sau, ir eksportui pakankamai, lygiai kaip
kiekviena tauta turi nuosavus latrus ir šventuosius.`
English: `Whatever, there are more fools everywhere than necessary.
Every nation has enough of them for itself and for export, just as every
nation has its own saints and saints.`
Lithuanian: `Lietuva, Tėvyne mūsų Tu didvyrių žeme, Iš praeities Tavo
sūnūs Te stiprybę semia.`
English: `Lithuania, our homeland, you are the land of heroes, From the
past your sons draw strength.`
Lithuanian: `Katorgininkas privalo sau vinimi įsikalti į kaktą: lageryje
visuomet kaltas yra nuskriaustasis, o ne skriaudėjas.`
English: `A convict must drive a nail into his own head: in a camp, the
wronged is always to blame, not the wrongdoer.`
Lithuanian: `Kai angelas atsisveikina su naujai gimusiuoju, jis paliečia
pirštu jo veidą, kad atvykėlis į žemę neprisimintų dangaus. Štai kodėl
tarp nosies ir viršutinės lūpos įspaustas griovelis.`
English: `When the angel says goodbye to the newborn, he touches his
face with his finger so that the newcomer to earth will not remember
heaven. That is why a groove is imprinted between the nose and the upper
lip.`
Lithuanian: `Juo labiau persekiojama idėja, juo brangesnė ir juo giliau
leidžia šaknis į žmogaus širdį.`
English: `The more an idea is pursued, the more precious it is and the
deeper it takes root in the human heart.`
Lithuanian: `Gyvenimas yra įvairus, reikia stengtis jį suprasti.`
English: `Life is diverse, you need to try to understand it.`
Lithuanian: `Nes ir miškas lietuvį, kaip tik galėjęs, Taip visados
raminęs, visados mylėjęs.`
English: `Because the forest, as best it could, has always soothed and
always loved the Lithuanian.`
Lithuanian: `Eik į gyvenimą pakelta galva ir atvira širdžia. Savo
širdies vis tiek nenumarinsi. Priimk gyvenimą kaip būtinybę, bet manyk,
kad geriau nė negalėjo būti. Nieko nesibijok, nieko nesigailėk ir dėl
nieko nesisielok.`
English: `Go through life with your head held high and your heart open.
You can't kill your heart anyway. Accept life as a necessity, but think
that it couldn't be better. Fear nothing, regret nothing, and grieve for
nothing.`
Lithuanian: `Dabartis savaime kuria ateitį. Jeigu mes visi norėtume
numatyti, įspėti ateitį ir pagal ją formuoti dabartį, mes rizikuotume
žiauriai apsirikti: prasilenkti su ateitim ir nieko gero neduoti
dabarčiai.`
English: `The present itself creates the future. If we all wanted to
predict, warn about the future, and shape the present according to it,
we would risk making a terrible mistake: getting ahead of the future and
doing nothing good for the present.`
Lithuanian: `Lygiam gyvenime siela apmiršta ir žmogus nebežino, ko jis
vertas.`
English: `In a life of equality, the soul becomes forgetful and a person
no longer knows what he is worth.`
Lithuanian: `Toks jau lietuvių būdas: kai du vaidijasi, nors
užsimuštinai mušasi, trečias bėga šalin, kad jam iš abiejų nekliūtų
arba, vienam negyvam likus, kad liudytoju nereiktų būti.`
English: `This is the Lithuanian way: when two people are fighting, even
if they are fighting to the death, the third one runs away so that he
doesn't get in the way of either of them or, if one of them is left
dead, so that he doesn't have to be a witness.`
### Description
Added quotes from Russian classics.
### Translations
1058: A drowning man, they say, grabs a small splinter, and he has no
reason to think that a fly can ride on a splinter, and his weight is
almost four poods, if not even five whole poods; but it does not come to
his mind at that time, and he grabs the splinter.
1059: The current generation now sees everything clearly, marvelling at
the misconceptions, laughing at the unreasonableness of their ancestors,
not for nothing, that this chronicle is scrawled with heavenly fire,
that every letter screams in it, that a piercing finger is everywhere
directed at them, at them, at the current generation; but the current
generation laughs and presumptuously, proudly begins a series of new
misconceptions, which will also be laughed at later by their
descendants.
1060: Everything quickly turns in a man; before you know it, a terrible
worm has grown inside, self-possessedly turning to itself all the vital
juices. And many times not only a broad passion, but a petty passion for
something petty grew in him who was born for the best feats, made him
forget his great and holy duties and see the great and holy in
insignificant trinkets.
1061: All life is thought and labour, labour though obscure, dark, but
continuous, and to die with the consciousness that one has done one's
work.
1062: As soon as he woke up, he immediately resolved to get up, wash his
face, and, having drunk tea, to think hard, to think of something, to
write it down, and generally to do it properly. For half an hour he lay
there, tormented by this intention, but then he reasoned that he would
have time to do it after tea, and tea could be drunk in bed, as usual,
especially as there was nothing to prevent him from thinking while lying
down.
1063: The fact was that Tarantiev was a master only of speaking; he
decided everything clearly and easily in words, especially what
concerned others; but as soon as it was necessary to move a finger, to
move from a place - in a word, to apply his own theory to a case and to
give it a practical course, to give it disposition and speed - he was
quite a different man: Suddenly he was not enough - he was suddenly
heavy, or unwell, or awkward, or another matter would come up, which he
would not take up, and even if he did, God forbid what would happen.
1064: He was not frightened, for instance, by the cracked ceiling in his
bedroom: he was accustomed to it; nor did it occur to him that the
perpetually stale air in the room and the constant sitting locked up
were almost more ruinous to health than the dampness of the night; that
to overfill the stomach daily was a kind of gradual self-destruction;
but he was accustomed to it and was not frightened.
1065: He unfurled his umbrella while it rained, that is, he suffered
while the grief lasted, and he suffered without timid submission, but
more with vexation, with pride, and he bore it patiently only because he
attributed the cause of every suffering to himself, and did not hang it,
like a caftan, on someone else's nail. And he enjoyed joy like a flower
plucked on the road, until it wilted in his hands, without ever
finishing the cup to that drop of bitterness which lies at the end of
every pleasure.
1066: When all the forces in your organism play, then life will play
around you, and you will see what your eyes are closed to now, you will
hear what you cannot hear: the music of the nerves will play, you will
hear the noise of the spheres, you will listen to the growth of grass.
Wait, do not hurry, it will come!
1067: It often happens to fall asleep in summer on a quiet, cloudless
evening, with twinkling stars, and think how good the field will be
tomorrow in the morning's bright colours! How cheerful it is to go deep
into the thicket of the woods and hide from the heat! And suddenly one
wakes up to the pounding of rain, to grey sad clouds; cold, damp....
1068: He had never clearly grasped the weight of a word of goodness,
truth, purity, thrown into the stream of people's speech, the deep
windings it breaks through; he had never thought that if spoken
cheerfully and loudly, without the colour of false shame, but with
courage, it would not sink into the ugly cries of the secular satyrs,
but would sink like a pearl into the abyss of social life, and there
would always be a shell for it.
1069: Many hesitate at a good word, weeping with shame, and boldly,
loudly utter a frivolous word, not realising that it too, unfortunately,
does not go to waste, leaving a long trail of evil, sometimes
ineradicable.
1070: Life flashes by like an instant, and he would lie down and sleep!
Let it be a constant burning! Oh, if I could live two hundred, three
hundred years! How many things could be done!
1071: Human beings are created to organise themselves and even to change
their nature, but they grow a paunch and think that nature has sent them
this burden! You had wings, but you cut them off.
1072: I know that love is less exacting than friendship, it is even
often blind, love is not for merit - that's true. But love requires
something, sometimes trifles, which can neither be defined nor named,
and which is absent in my incomparable but clumsy Ilya.
1073: Reach out to a fallen man to lift him up, or weep bitterly over
him if he perishes, rather than mock him. Love him, remember yourself in
him, and treat him as yourself - then I will read you and bow my head to
you...
1074: A short, daily rapprochement between man and man does not cost
either of them for nothing: a lot is needed on both sides of life
experience, logic and warmth of heart, that, enjoying only the
advantages, not to stab and not stab mutual shortcomings.
1075: Friendship is a good thing when it is a love between a young man
and woman or a remembrance of love between old men. But God forbid if it
is friendship on one side and love on the other.
1076: When you don't know what you live for, so you live somehow, day by
day; you rejoice that the day has passed, that the night has come, and
in your sleep you plunge the dull question of why you lived this day,
why you will live tomorrow.
1077: Some people have nothing better to do than talk. It's a calling.
1078: And the night was the darkest you can imagine. In summer, you
know, we have such dark nights near Kursk, but warm and mild: the stars
are hung like lamps across the sky, and the darkness underneath is so
thick that it is as if someone were fumbling and touching you in it...
1079: These astronomers are the worst, and especially in the drawbar
they are the most dangerous; a postilion always has to watch a horse
with such a habit, because the astronomer himself does not see how he
pokes his feet, and God knows where he ends up.
1080: Who knows what I'll find when I return? And how much I may lose!
1081: When you have travelled and returned home, and the smoke of the
Fatherland is sweet and pleasant to us!
1082: Have you ever, laughing or in sorrow, by mistake, said a kind word
about someone? Though not now, but perhaps when you were a child.
1083: What a trick you pulled! I haven't written two words for three
years! And then suddenly it came out of nowhere.
1084: How marvellous is the light created! If you philosophise, your
mind will be dizzy; If you take care, then dinner: Eat for three hours,
but in three days it will not be digested!
1085: There are on earth such transformations of governments, climates,
and manners, and minds; there are people important, heard for fools:
another in the army, another a bad poet, another ... I am afraid to
name, but recognised by the whole world, especially in recent years,
that they have become clever as anything.
1086: When in business I hide from mirth, when to fool, I fool; and to
mix these two trades there are a darkness of artisans, I am not of their
number.
1087: I was blind! In whom I sought the reward of all my labours! In a
hurry! Flying! I was trembling! I thought happiness was at hand. Before
whom I was so passionate and so low a waster of tender words! And you!
Oh, my God! Whom have you chosen? When I think who you have chosen! Why
did you entice me with hope? Why did you not tell me that you have
turned the past into laughter?! That the memory of those feelings, of
those movements of the heart in both of us, which neither distance, nor
amusement, nor change of place has cooled in me. I breathed them, and
lived them, and was occupied with them without ceasing! If you had been
told that my sudden arrival, my appearance, my words, my actions -
everything disgusts you - I would have cut off all communication with
you at once, and before parting for ever I would not have tried to find
out who this amiable man is?
1088: So! I have sobered up completely, dreams are out of sight - and
the veil has fallen;
1089: Who are the judges? - Beyond the antiquity of years. Their enmity
to free life is irreconcilable; their judgements are drawn from
forgotten newspapers of the times of Ochakovsk and the conquest of the
Crimea; always ready for a fight, they all sing the same song, not
noticing about themselves: what is older, is worse. Where are the
fathers of the fatherland, whom we should take as models? Are not these,
rich in robbery? They have found protection from judgement in friends,
in kinship, in splendid chambers, where feasts and debauchery spill
over, and where foreign clients will not resurrect the meanest features
of their past lives.
### Checks
- [ ] Adding quotes?
- [ ] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [ ] Adding a language or a theme?
- [ ] If is a language, did you edit `_list.json`, `_groups.json` and
add `languages.json`?
- [ ] If is a theme, did you add the theme.css?
- Also please add a screenshot of the theme, it would be extra awesome
if you do so!
- [ ] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [ ] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [ ] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.
<!-- label(optional scope): pull request title (@your_github_username)
-->
<!-- I know I know they seem boring but please do them, they help us and
you will find out it also helps you.-->
Closes #
<!-- the issue(s) your PR resolves if any (delete if that is not the
case) -->
<!-- please also reference any issues and or PRs related to your pull
request -->
<!-- Also remove it if you are not following any issues. -->
<!-- pro tip: you can mention an issue, PR, or discussion on GitHub by
referencing its hash number e.g:
[#1234](https://github.com/monkeytypegame/monkeytype/pull/1234) -->
<!-- pro tip: you can press . (dot or period) in the code tab of any
GitHub repo to get access to GitHub's VS Code web editor Enjoy! :) -->
### Description
add bosnian_4k
### Checks
- [x] Adding a language or a theme?
- [x] If is a language, did you edit `_list.json`, `_groups.json` and
add `languages.json`?
- [x] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.
---------
Co-authored-by: Miodec <jack@monkeytype.com>
### Description
<!-- Please describe the change(s) made in your PR -->
### Checks
- [ ] Adding quotes?
- [ ] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [ ] Adding a language or a theme?
- [ ] If is a language, did you edit `_list.json`, `_groups.json` and
add `languages.json`?
--> I only updated words in the existing "spanish_1k.json"
- [ ] If is a theme, did you add the theme.css?
- Also please add a screenshot of the theme, it would be extra awesome
if you do so!
- [ ] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [ ] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [ ] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.
<!-- label(optional scope): pull request title (@your_github_username)
-->
<!-- I know I know they seem boring but please do them, they help us and
you will find out it also helps you.-->
Closes #
I updated the "Spanish _1k.json" list because it was based on an old
study from 1975 to 2004 and there was too many political/legal words
that are not used often today (not at least in the 1k most used words)
and also updated some old words with more modern ones.
There was a lot of basic words missing: there were words like
"gastropod" or "triphthong" but "hello" or "yes" weren't there.
After doing my research I found out there isn't any other modern study
so I had to manually select the outdated words and manually change them
for basic missing words, so this is not perfect but it's better than
what there was before. Someone could still filter it a little bit more
by changing rare words for more normal ones that better fit the "1k"
list (Maybe I'll do it in the future).
Thanks and happy typing!
Optimize results endpoint by removing heavy or unused data.
We load the whole result chart data for up to 1000 results each time,
but it is very unlikely the user will view the charts for all old
results. By removing the size in my tests went down from 1152kb to
276kb.
---------
Co-authored-by: Miodec <jack@monkeytype.com>
### Description
I added 4 quotes from Doctor Who. (There are a few unnecessary commits
that were just updating my fork.)
### Checks
- [ ] Adding quotes?
- [ ] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [ ] Adding a language or a theme?
- [ ] If is a language, did you edit `_list.json`, `_groups.json` and
add `languages.json`?
- [ ] If is a theme, did you add the theme.css?
- Also please add a screenshot of the theme, it would be extra awesome
if you do so!
- [x] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.
<!-- label(optional scope): pull request title (@your_github_username)
-->
<!-- I know I know they seem boring but please do them, they help us and
you will find out it also helps you.-->
Closes #
<!-- pro tip: you can mention an issue, PR, or discussion on GitHub by
referencing its hash number e.g:
[#1234](https://github.com/monkeytypegame/monkeytype/pull/1234) -->
<!-- pro tip: you can press . (dot or period) in the code tab of any
GitHub repo to get access to GitHub's VS Code web editor Enjoy! :) -->
- bump the `vite` version that `vitest` uses from 5.2.14 to 5.4.17 to
get the fix vitejs/vite@14b5ced for this warning when running multiple
tests simultaneously (as in `pnpm test-pkg` or `pnpm test`):
> WebSocket server error: Port is already in use
### Description
In this pull request, I have added a set of Urdu quotes to contribute to
the collection of quotes in Monkeytype.
### Translation
- **ID 21**: When man attains self-knowledge, he is able to understand
the realities of the world. Real humanity is to recognize the light
within and use that light for the benefit of others. This world is a
mirror that shows us the reflection of our mistakes and weaknesses so
that we can improve ourselves. Those who adjust their thinking and
actions according to higher principles, those are the ones who are truly
successful in life. Knowledge and character are two treasures that never
expire, and these two things take a man to the heights of greatness.
- **ID 22**: The greatest obstacle in the way of success is man himself.
If man recognizes his weaknesses and overcomes them, nothing can stop
him from becoming successful. Always remember that the acquisition of
knowledge and its Action is the real success. Those who limit knowledge
only to themselves, they cannot bring any positive change in the world
are successful.
### Checks
- [x] Adding quotes?
- [x] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [x] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.
### Description
Added quote in English: "Some words are spelt correctly only when the
proper ink is used."
Spanish translation: "Algunas palabras sólo se escriben correctamente
cuando se utiliza la tinta adecuada."
German translation: "Manche Wörter sind nur dann richtig geschrieben,
wenn die richtige Tinte zum Einsatz kommt."
Chinese translation: "只有使用了适当的墨水,一些字词才能拼写正确。"
### Checks
- [x] Adding quotes?
- [x] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [ ] Adding a language or a theme?
- [ ] If is a language, did you edit `_list.json`, `_groups.json` and
add `languages.json`?
- [ ] If is a theme, did you add the theme.css?
- Also please add a screenshot of the theme, it would be extra awesome
if you do so!
- [x] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.
---------
Co-authored-by: Miodec <jack@monkeytype.com>
### Description
I added a quote from the Eleventh Doctor from Doctor Who. ([Tardis Guide
Link](https://tardis.guide/quote/what-fresh-hope-the-future-may-bring/))
### Checks
- [x] Adding quotes?
- [x] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [x] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.
<!-- impr(quote): add english quote (@scarcekoi) -->
<!-- I know I know they seem boring but please do them, they help us and
you will find out it also helps you.-->
Closes #
<!-- Also remove it if you are not following any issues. -->
<!-- pro tip: you can mention an issue, PR, or discussion on GitHub by
referencing its hash number e.g:
[#1234](https://github.com/monkeytypegame/monkeytype/pull/1234) -->
<!-- pro tip: you can press . (dot or period) in the code tab of any
GitHub repo to get access to GitHub's VS Code web editor Enjoy! :) -->
### Description
This PR adds the [Hands Down Promethium
layout](https://www.reddit.com/r/KeyboardLayouts/comments/1g66ivi/hands_down_promethium_snth_meets_hd_silverengram/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button).
### Checks
- [ ] Adding quotes?
- [ ] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [ ] Adding a language or a theme?
- [ ] If is a language, did you edit `_list.json`, `_groups.json` and
add `languages.json`?
- [ ] If is a theme, did you add the theme.css?
- Also please add a screenshot of the theme, it would be extra awesome
if you do so!
- [x] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.
<!-- label(optional scope): pull request title (@your_github_username)
-->
<!-- I know I know they seem boring but please do them, they help us and
you will find out it also helps you.-->
### Description
This PR updates the Ergopti layout to add the symbols of the AltGr layer
### Checks
- [ ] Adding quotes?
- [ ] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [ ] Adding a language or a theme?
- [ ] If is a language, did you edit `_list.json`, `_groups.json` and
add `languages.json`?
- [ ] If is a theme, did you add the theme.css?
- Also please add a screenshot of the theme, it would be extra awesome
if you do so!
- [x] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.
### Description
Updates the English quotes file by correcting some quote sources/text to
ensure accuracy.
### Checks
- [ ] Adding quotes?
- [ ] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [ ] Adding a language or a theme?
- [ ] If is a language, did you edit `_list.json`, `_groups.json` and
add `languages.json`?
- [ ] If is a theme, did you add the theme.css?
- Also please add a screenshot of the theme, it would be extra awesome
if you do so!
- [ ] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.
<!-- label(optional scope): pull request title (@your_github_username)
-->
<!-- I know I know they seem boring but please do them, they help us and
you will find out it also helps you.-->
Closes #
<!-- the issue(s) your PR resolves if any (delete if that is not the
case) -->
<!-- please also reference any issues and or PRs related to your pull
request -->
<!-- Also remove it if you are not following any issues. -->
<!-- pro tip: you can mention an issue, PR, or discussion on GitHub by
referencing its hash number e.g:
[#1234](https://github.com/monkeytypegame/monkeytype/pull/1234) -->
<!-- pro tip: you can press . (dot or period) in the code tab of any
GitHub repo to get access to GitHub's VS Code web editor Enjoy! :) -->
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite)
from 6.0.11 to 6.0.12.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/releases">vite's
releases</a>.</em></p>
<blockquote>
<h2>v6.0.12</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v6.0.12/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/blob/v6.0.12/packages/vite/CHANGELOG.md">vite's
changelog</a>.</em></p>
<blockquote>
<h2><!-- raw HTML omitted -->6.0.12 (2025-03-24)<!-- raw HTML omitted
--></h2>
<ul>
<li>fix: fs raw query with query separators (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19702">#19702</a>)
(<a
href="92ca12dc79">92ca12d</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/19702">#19702</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="9d981f9d38"><code>9d981f9</code></a>
release: v6.0.12</li>
<li><a
href="92ca12dc79"><code>92ca12d</code></a>
fix: fs raw query with query separators (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19702">#19702</a>)</li>
<li>See full diff in <a
href="https://github.com/vitejs/vite/commits/v6.0.12/packages/vite">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/monkeytypegame/monkeytype/network/alerts).
</details>
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Miodec <jack@monkeytype.com>
### Description
This PR introduces a new language variation to MonkeyType: Bitoduc, a
French variation that exclusively contains words from
[bitoduc.fr](http://bitoduc.fr/). Bitoduc is a humorous project that
maps English tech terms to French alternatives, often with a creative or
amusing twist.
#### Changes
Added bitoduc as a new language variation.
Included a word list sourced from [bitoduc.fr](http://bitoduc.fr/).
Updated language selection to include bitoduc.
<img width="1347" alt="Screenshot 2025-03-24 at 09 41 15"
src="https://github.com/user-attachments/assets/13be87e1-5363-4dd2-adf4-bf002a1e1170"
/>
### Checks
- [x] Adding a language or a theme?
- [x] If is a language, did you edit `_list.json`, `_groups.json` and
add `languages.json`?
- [x] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.
<!-- label(optional scope): pull request title (@your_github_username)
-->
<!-- I know I know they seem boring but please do them, they help us and
you will find out it also helps you.-->
<!-- the issue(s) your PR resolves if any (delete if that is not the
case) -->
<!-- please also reference any issues and or PRs related to your pull
request -->
<!-- Also remove it if you are not following any issues. -->
<!-- pro tip: you can mention an issue, PR, or discussion on GitHub by
referencing its hash number e.g:
[#1234](https://github.com/monkeytypegame/monkeytype/pull/1234) -->
<!-- pro tip: you can press . (dot or period) in the code tab of any
GitHub repo to get access to GitHub's VS Code web editor Enjoy! :) -->
### Description
Right now, the Marathi language should exist on Monkeytype (there is a
`marathi.json` file in both `frontend/static/quotes` and
`frontend/static/languages`) but it doesn't. This is probably because it
isn't in the `_list.json` and `_groups.json` file, so I added it to
those files.
This is related to #4174.
---------
Co-authored-by: Atharv Gokule <106445077+username121546434@users.noreply.github.com>