A lot of these properties were planned to be used five years ago, but
it just never happened...
As a side effect, Chrome's Inspector should now be a lot nicer to use.
This handles the remaining case for Illusion tracking.
If a Pokemon fainted from residual damage retroactively turns out to
be an Illusion, the client will now correctly mark the Zoroark as
fainted.
If there is no Zoroark (because Hackmons), the client will now mark
a random unfainted Pokemon as fainted. This guess may be wrong, but
will keep the fainted Pokemon count correct, and will eventually be
correct as incorrect guesses are switched in and reguessed.
Now, whenever an Illusion clears, the previously illusioned Pokemon
has its HP and status set to "???"
In addition to being generally more accurate, this fixes a bug where
the team tracker would display the Illusioned Pokemon as fainted when
it's actually still alive.
`e.setSelectionRange` is a typo, `setSelectionRange` is a property of the textbox element.
Results in `Uncaught TypeError: e.setSelectionRange is not a function` when the user types in ``"/r "``.
This doesn't support setting accounts up for Google login: that still
has to be manually done via the database by setting the email field to
`username@gmail.com@`, where the second `@` denotes that it's using
Gmail login.
If the email field does end in `@`, `getassertion` will note this by
sending `;;@gmail`, to convey that the server is expecting a Google
login token rather than a password.
Upon receiving `;;@gmail`, the client will replace the password box will
with a Google login button, and then send the resulting Google login
token to the server in the `password` field. The server will validate
the "password" using the Google server libraries, and otherwise handle
the login as normal.
Note that Google login requires various features that a paranoid person
might disable; most notably 3rd-party cookies.
FixesZarel/Pokemon-Showdown#3394