If frontend and backend are deployed with a new COMPATABILITY_CHECK
header frontend might show the backend version is lower because of the
http header of a cached response.
Adding the COMPATABILITY_CHECK version as part of the etag fixes this.
Add Open Graph meta tags to user profile pages to improve how they
appear when shared on social media platforms. This includes title,
description and URL meta tags.
Closes#6597
### Description
This PR adds Open Graph Protocol (OGP) meta tags to user profile pages
to fix the issue with LinkedIn and other social media platforms
incorrectly redirecting profile links to the homepage. The
implementation:
- Adds dynamic Open Graph meta tags for title, description and URL
- Updates tags whenever a profile page is loaded
- Uses the user's name in the title tag for better personalization
### Checks
- [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.
- [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)
-->
Closes#6597
<!-- 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
The tarmak layout(s) is a set of transition layouts for qwerty user
switching to colemak, it changes only about 3-4 keys for every stage.
[More about tarmak](https://dreymar.colemak.org/tarmak-intro.html)
### 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?
- Make sure to follow the [languages
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LANGUAGES.md)
- [ ] Add language to `packages/contracts/src/schemas/languages.ts`
- [ ] Add language to exactly one group in
`frontend/src/ts/constants/languages.ts`
- [ ] Add language json file to `frontend/static/languages`
- [ ] Adding a theme?
- Make sure to follow the [themes
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/THEMES.md)
- [ ] Add theme to `packages/contracts/src/schemas/themes.ts`
- [ ] Add theme to `frontend/src/ts/constants/themes.ts`
- [ ] Add theme css file to `frontend/static/themes`
- [x] Adding a layout?
- [x] Make sure to follow the [layouts
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LAYOUTS.md)
- [x] Add layout to `packages/contracts/src/schemas/layouts.ts`
- [x] Add layout json file to `frontend/static/layouts`
- [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.
During e.g. time 60 tests the CustomText.getLimitValue was called each
second which is not needed.
Refactor the checkIfTimeIsUp to only use the correct limit, either
Config.time if mode is time or CustomText.getLimitValue if mode is
custom and limited by time.
### Description
In short, this PR is based on Ukraine's national standard [DSTU
9112:2021 (A)](https://en.wikipedia.org/wiki/DSTU_9112:2021), and
replaces non-standard transliteration originally submitted.
- Updates #3855
### Context
Unfortunately, this topic has been a bit toxic in Ukraine, I am sorry to
bring this on the developers of this popular tool. I am trying to stay
neutral [¹](https://paiv.github.io/blog/2024/11/26/ukrainian-latin.html
"The state of Ukrainian Latin"), with Ukraine's ultimate benefits in
mind.
At the moment, there is no definite Ukrainian Latin script. The state
standard (KMU 55) is a lossy transliteration, not useable for general
writing, only applied to personal names and places.
Practitioners of Latin script for the Ukrainian language is still only a
marginal group, without a unifying movement. Until 2021 basically
everyone had their own transliteration method, derived from two dozen
historical schemes.
In 2021 comes Ukraine's national standard DSTU 9112:2021, and
objectively is good enough for general writing among alternatives. It
does not prescribe transition from Cyrillic. Its future is in
integration with European languages, gradually replacing legacy KMU 55.
Thus my argument for the practitioners of Ukrainian Latin script is to
adopt DSTU standard, given its perspective and unifying power, and phase
out non-standard schemes, of which #3855 is only one.
I hope @tymof1j as the original contributor could critically review
these notes, with the two year perspective.
The script used for conversion from Cyrillic:
https://gist.github.com/paiv/df2f38ed86a103471a49cfa8064d0d2e
----
To reiterate, Ukrainian Latin script is not established, and people are
coming here to not only train keyboard but also to get used to the
concept of Ukrainian Latin. Hosting one of dozens unofficial
alternatives of Ukrainian Latin without giving wider context is not
appropriate. People should start with Ukraine's national standard, then
learn of alternatives, if interested.
The problem of the national standard is that it is young, and has little
adoption and tooling. Those will come in time. I have posted examples of
possible keyboard setups here: https://paiv.github.io/latynka-keyboard/
I used system A of the national standard, with diacritics. An
alternative would be to use system B, which only needs basic Latin. It
is more verbose, but is more accessible to type. I believe system A is
preferable for general text.
If this is too much for this project, I would rather remove Ukrainian
Latin than host one non-standard variant, until it is established in
Ukraine. But it is nice to keep this platform to teach the concept of
Ukrainian Latin script.
### Description
This adds Viosssa as a language to Monkeytype.
Viossa is a constructed language and has even been added to Minecraft
Java Edition, and has also been assigned an ISO-639-3 Code by the
ConLang Code Registry (https://www.kreativekorp.com/clcr/)
### Checks
- [X] Adding a language
- [X] Added language to `packages/contracts/src/schemas/languages.ts`
- [X] Added language to exactly one group in
`frontend/src/ts/constants/languages.ts`
- [X] Added language json file to `frontend/static/languages`
- [X] Checked if there are any open issues are related to this PR.
- [X] PR title follows Conventional Commits standard.
- [X] Included GitHub username prefixed with @ inside parentheses at the
end of the PR title.
### Description
<!-- Please describe the change(s) made in your PR -->
### Checks
- [x] 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! :) -->
---------
Co-authored-by: Lavanya Ananthan <lavanya.ananthan.763@gmail.com>
### Description
This Pull Request introduces the functionality to download the result
screenshot directly as a PNG file, in addition to the existing option to
copy it to the clipboard.
This is achieved by:
1. Refactoring the screenshot logic in `test-ui.ts`.
2. Adding a new `Download screenshot` command to the result screen
command list.
**Changes Made:**
* **`frontend/src/ts/test/test-ui.ts`**:
* Created an internal function `generateScreenshotCanvas` that
encapsulates UI preparation, canvas generation with `html2canvas`, and
UI restoration.
* Modified the exported `screenshot` function to use
`generateScreenshotCanvas` and **only** handle copying the resulting
Blob to the clipboard (with the fallback of opening in a new tab).
* Added a new exported function `getScreenshotBlob` that uses
`generateScreenshotCanvas` and returns the resulting image Blob.
* **`frontend/src/ts/commandline/lists/result-screen.ts`**:
* Renamed the `saveScreenshot` command to `copyScreenshot` (updating
`id`, `icon`, and `alias`) to more accurately reflect its action. It
still uses `TestUI.screenshot()`.
* Added a new `downloadScreenshot` command (`id`, `display`, `icon`,
`alias`) that:
* Calls `TestUI.getScreenshotBlob()` to get the image data.
* If a Blob is obtained, creates a temporary object URL.
* Creates a temporary `<a>` element, sets the `href` to the object URL,
and the `download` attribute with a filename (e.g.,
`monkeytype-result-TIMESTAMP.png`).
* Simulates a click on the link to initiate the file download.
* Revokes the object URL.
* Displays success or error notifications.
### 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)
- [ ] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title. <!-- Remember to add your
username here! -->
---------
Co-authored-by: fehmer <3728838+fehmer@users.noreply.github.com>
Co-authored-by: Miodec <jack@monkeytype.com>
### Description
<!-- Please describe the change(s) made in your PR -->
- Imported `Kanit-Regular.woff2` and `Sarabun-Bold.woff` into the
project’s webfonts directory.
- Updated `frontend/static/fonts/_list.json` to register the new fonts
under “availableFonts.”
- Modified `frontend/src/styles/fonts.scss` to include `@font-face`
declarations for both Kanit Regular and Sarabun Bold, with appropriate
`font-family`, `font-weight`, and `font-style` settings.
---
### 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 it’s a language, did you edit `_list.json`, `_groups.json` and
add `languages.json`?
- [ ] If it’s 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.
---------
Co-authored-by: Miodec <jack@monkeytype.com>
### Description
Added 50 quotes from books in polish
### Checks
Translations:
And believe me, although you will see many wonders while wandering
around the world, you will not find a river like the Vistula or a city
like Warsaw anywhere. - "id":151
Above all, however, one must be able to win people's hearts.
Understanding and tolerance are the best way to do this. - "id":152
Don't laugh, my friend, at someone else's downfall, because then no one
will regret you either! - "id":153
In a distant and wild land you will find what others will search for in
vain. When you do, you will gain a best friend who will never say a
word... - "id":154
He does not deserve pity who has no pity himself. - "id":155
However, you must understand that obedience does not mean limiting your
independence. - "id":156
The mind needs books just as a sword needs a whetstone if it is to
remain sharp. - "id":157
Treason… is just a word. When two princes fight over a chair that only
one of them can sit in, both the great lords and the common folk must
choose. After the battle, the victors are hailed as faithful and loyal
men. Those who lose will henceforth be known as rebels and traitors. -
"id":158
He who dances with dragons must expect to burn. - "id":159
Aerion is a real monster. You know, he thinks he's a dragon in human
form. That's why he's so mad at the show. It's a shame he wasn't born a
Fossoway. Then he'd think he was an apple, and we'd all be a lot safer.
-"id":160
Words are wind, Egg. Let them flow past you. - "id":161
I fought for Prince Rhaegar, though he didn't even know my name. I can't
tell you why for him. The lord I served served a lord who served a lord
who chose to support a dragon over a stag. If he had chosen differently,
I might have found myself on the other side of the river. - "id":162
Men are such awful fools. Even those who are born once in a thousand
years. - "id":163
Never forget who you are, because the world will certainly not forget
it. Make it your strength, and then it will no longer be your weakness.
Make it your armor, and no one will use it against you. - "id":164
Girls get coats of arms, but no swords. Bastards get swords, but no
coats of arms. That's just the way it is, little sister, but I didn't
make up those rules.- "id":165
The left believes that the crew is more important, the right that the
ship is more important.- "id":166
If you want to know what the dominant ideology is, don't read
philosophers or political scientists. Watch commercials.-"id":167
The problem is not the lust for power of a few people, but the
willingness of the broad masses to submit.-"id":168
An Inuit gave a hungry European explorer some seal meat on a frosty
night. The explorer reflexively thanked him. The Inuit was outraged. He
said, "I did it because you are a human being." We must aspire to such
ethics.-"id":169
In times of the cult of the "Self" the only true individualists are
anti-individualists.-"id":170
I know that you are almost forty, you look almost thirty, you imagine
that you are a little over twenty, and you act as if you were not even
ten.-"id":171
Evil is evil, Stregobor. Smaller, greater, average, it doesn't matter,
proportions are conventional and boundaries are blurred. I am not a
pious hermit, I have not done only good in my life. But if I have to
choose between one evil and another, I prefer not to choose at
all."-"id":172
Dragon, you dirty dragon! Listen to what the herald will tell you! I
mean me! The first to honorably take on you will be the mad knight Eyck
of Denesle! And he will thrust a lance into your belly, according to
holy custom, to your ruin, and to the joy of poor maidens and King
Niedamir! The fight must be honorable and according to the law, not to
breathe fire, but only to confessionally rob one another, until the
other gives up the ghost or dies! What do we wish you from our souls,
from our hearts! Do you understand, dragon?-"id":173
Verily, I say unto you, behold, the age of the sword and the axe is
coming, the age of the wolf's blizzard. The time of the White Cold and
the White Light is coming, the time of Madness and the time of
Contempt... the time of the End.- "id":174
I've got a company... Brothers in arms! A team of heroes! Nothing but
wring your hands. A rhymer with a lute. A wild and sassy half-dryad,
half-woman. A vampire who's about to get his fiftieth cross. And a
bloody Nilfgaardian who insists he's not Nilfgaardian.-"id":175
Lord Witcher, horses are like fish. I offer you pikes like they're big
pikes, and you choose a roach. What are you laughing at? Did I say
something funny?- "id":176
We are proper thieves, not some political ones. We did not attempt to
take power. We only stole.- "id":177
Adventures! That means: unpleasantness, disturbed peace, lack of
comfort. Things like that can make you late for dinner. -"id":178
It cannot be seen or touched with fingers, It cannot be smelled or heard
with ears; It is under the mountains, it is above the stars, It does not
avoid the empty cave, It will remain after us, it was before us, Life
extinguishes and laughter kills.-"id":179
Let's break glasses, saucers, bowls, Long live our host! And though
Bilbo is close to tears, Let splinters fly from the bottles!-"id":180
Three Rings for the Elven-kings under the sky, Seven for the Dwarf-lords
in their halls of stone, Nine for mortals doomed to death, One for the
Dark Lord on his dark throne.-"id":181
Many of those who live deserve death. And many of those who die deserve
life. Can you give it to them? So do not be so hasty in pronouncing
death sentences, for even the wisest do not know everything.-"id":182
What do you mean by that? Are you wishing me a good morning, or are you
saying that it is a good day, regardless of what I think of it; are you
feeling good this morning, or do you think that today is the time to be
good? All of them. And, in addition, that it is good to smoke a pipe in
the open air on such a beautiful day.-"id":183
A wizard is never late, nor is he too early, he arrives when he feels
like it.-"id":184
Don't regret, never regret that you could have done something in life,
but you didn't. You didn't do it because you couldn't.-"id":185
We do not want to conquer space at all, we only want to expand the Earth
to its limits. Some planets are to be desert like the Sahara, others icy
like the poles or tropical like the Brazilian jungle. We are
humanitarian and noble, we do not want to conquer other races, we only
want to pass on our values to them and in return take over their
heritage. We consider ourselves knights of the holy Contact. This is the
second falsehood. We are not looking for anyone but people. We do not
need other worlds. We need mirrors. We do not know what to do with other
worlds. This one is enough and we are already choking on it.-"id":186
It can be assumed that all people have consciousness, but generally not
all are aware of it.-"id":187
Dreams always triumph over reality when they are allowed to.- "id":188
He was undoubtedly an educated man, but his intelligence was like a
Japanese garden - a small bridge, paths, everything beautiful, but very
limited and good for nothing.-"id":189
Society, or at least civilized society, is not inclined to believe
anything bad about rich and delightful people. People instinctively feel
that forms are more important than morals, and in their opinion the
utmost honesty is worth less than having a good cook.-"id":190
The sickle may imagine that it is cutting the grain, and the hammer that
it is driving the nail. But both are just tools.- "id":191
It is a disgrace to submit to evil, to bow your head before it, to fall
on your knees, hiding behind an aversion to violence. Because the evil
that you do not oppose will grow, become more powerful and go out into
the world to harm others. And their harm will be your fault.- "id":192
Hope does not die last, after it come madness and desperation.-"id":193
The Rat said this in the smooth, sincere tone with which people always
lie to others.- "id":194
You see, Harry, it's our choices that show who we really are, far more
than our abilities.- "id":195
It takes a lot of courage to stand up to your enemies, but it takes just
as much courage to be loyal to your friends.- "id":196
The one with the power to vanquish the Dark Lord approaches... Born of
those who have thrice defied him. And he will be born as the seventh
month draws to a close... And though the Dark Lord marks him as his
equal, he will have power the Dark Lord knows not... And one must die at
the hand of the other, for neither can live while the other survives...
The one with the power to vanquish the Dark Lord will be born as the
seventh month draws to a close...- "id":197
We will be as strong as we are united and as weak as we are divided.
Lord Voldemort has a great talent for sowing discord and hostility. We
can only oppose him with equally strong bonds of friendship and trust.-
"id":198
Deep in the human subconscious lies an overwhelming need for a logical,
meaningful universe. But the real universe is always one step beyond
logic.-"id":199
When religion and politics are in the same car, the drivers believe that
nothing can stand in their way. They start to rush headlong... and they
don't remember that the man rushing headlong only sees the abyss when
it's too late.-"id": 200
---------
Co-authored-by: sobczaktm <sobczakt@G02PLXN06023.g02.fujitsu.local>
Co-authored-by: fehmer <3728838+fehmer@users.noreply.github.com>