The most customizable typing website with a minimalistic design and a ton of features. Test yourself in various modes, track your progress and improve your speed.
Find a file
SeerLite c323efea26
Rewrite input system to use <input> content (#1325)
* Rewrite input system to use <input> content

* Tab/Escape, Backspace and Enter are always handled by
  $(document).keydown.
* The rest of characters are handled by either $("#wordsInput").on("input")
  (default) or $(document).keydown (layout emulation).
* New special handling for dead keys, compose keys and diacritics in
  general with the new regex Misc.trailingComposeChars.

input-controller.js has been updated to use the above changes:
* handleBackspace() replaced with simplified backspaceToPrevious().
  On PC, a space is immediately re-added to the end of the input to make
  use of the browser/OS's Backspace. This lets the browser handle input-
  specific things like ctrl+backspace.
* handleSpace() refactored a bit to repeat less logic when word is correct
  or incorrect.

* test-ui.js updated to highlight the Misc.trailingComposeChars
correctly, and also refactored a bit to make logic easier to follow.

* AFK checking has also been simplified, now just set with a boolean
flag (TestStats.) setKeypressNotAfk() instead of checking every key and
modifier press (so incrementKeypressMod() was removed as it wasn't used
for anything else).

* Refactor input controller

New function isCharCorrect().

* Remove caps lock backspace setting

Not supported with the input rewrite anymore because we're relying on the
browser's/OS's actual backspace effects. There's no way to emulate this
keypress.

* Refactor input controller

* Reimplement opposite shift mode

* Reimplement the layout emulator

* Fix replay events for input rewrite

Now it's more flexible for a variable amount of backspacing or letter
replacing.

* Pad input with space to handle backspace on mobile

Backspace isn't fired as an event on current mobile browsers, so I worked
around that by adding a permanent space at the start of the input and
treating its removal as a fallback to Backspace to the previous word.

* Force caret to end of input on focus

Fixes initial selection on iOS.

* Use offsetTop from the DOM instead of TestUI

I didn't wanna mess too much with what happens in test-ui.js. Basically,
on a restart after having completed a test, TestUI.activeWordTop is always
wrong for some reason. This caused swipe/instant input after a restart to
always drop the first few characters.

* Prevent pasting on the input

* Revert "Reimplement opposite shift mode"

This reverts commit 9a716ad39b004f0719b05f486465ea03060430ca.

* Use key code to check opposite shift usage

Today I learned what closure actually meant.

* Accept all whitespace as word space
2021-09-30 00:22:38 +01:00
.github Added a delimiter switch (#1754) by pran01 2021-08-25 14:46:37 +01:00
backend marking all results coming from the input rewrite 2021-09-29 14:21:35 +01:00
src Rewrite input system to use <input> content (#1325) 2021-09-30 00:22:38 +01:00
static Rewrite input system to use <input> content (#1325) 2021-09-30 00:22:38 +01:00
.gitignore Merge branch 'mongo' 2021-08-17 18:13:04 +01:00
.prettierignore ignoring quote files in prettyifying 2021-02-13 19:01:05 +00:00
.prettierrc actually using prettier now 2020-08-11 22:02:25 +01:00
CODE_OF_CONDUCT.md Merge branch 'master' into mongo 2021-07-24 23:17:58 +01:00
CONTRIBUTING.md Update CONTRIBUTING.md (#1915) 2021-09-29 23:25:58 +01:00
firebase.json made gulp output to dist/ 2020-11-02 03:19:24 -08:00
gulpfile.js added popup to view all personal bests 2021-09-24 20:22:08 +01:00
LICENSE Create LICENSE 2020-05-30 00:30:54 +01:00
package-lock.json better agent log 2021-09-25 13:49:46 +01:00
package.json better agent log 2021-09-25 13:49:46 +01:00
README.md Update README.md (#1912) 2021-09-29 17:04:10 +01:00


JavaScript HTML5 CSS3 CSS3

About

Monkeytype is a minimalistic and customizable typing test. It features many test modes, an account system to save your typing speed history, and user-configurable features like themes, sounds, a smooth caret, and more.

Features

  • minimalistic design with no ads
  • look at what you are typing
  • focus mode
  • different test modes
  • punctuation mode
  • themes
  • quotes
  • live wpm
  • smooth caret
  • account system
  • command line
  • and much more

Discord bot

On the Monkeytype Discord server, we added a Discord bot to auto-assign roles on our server. You can find its code over at https://github.com/Miodec/monkey-bot

Bug report or Feature request

If you encounter a bug or have a feature request, send me a message on Reddit, create an issue, create a discussion thread, or join the Discord server.

Want to Contribute?

Refer to CONTRIBUTING.md.

Code of Conduct

Before contributing to this repository, please read the code of conduct.

Credits

Montydrei for the name suggestion.

Everyone who provided valuable feedback on the original Reddit post for the prototype of this website.

All of the contributors that have helped with implementing various features, adding themes, fixing bugs, and more.

Support

If you wish to support further development and feel extra awesome, you can do so here.