Add atoms
621
atoms/LICENSE
Normal file
@ -0,0 +1,621 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
8
atoms/README.md
Normal file
@ -0,0 +1,8 @@
|
||||
# Atoms
|
||||
Atoms is a web app that displays atoms and simple bonding in a cute and fun way
|
||||
|
||||
A live demo is available at: http://atoms.cf
|
||||
|
||||
# License
|
||||
GNU GPL V3
|
||||
See LICENSE for more details.
|
||||
495
atoms/index.css
Normal file
@ -0,0 +1,495 @@
|
||||
@import url(https://fonts.googleapis.com/css?family=Oswald);
|
||||
|
||||
/* Let's get this party started */
|
||||
::-webkit-scrollbar {
|
||||
width: 12px;
|
||||
}
|
||||
|
||||
/* Track */
|
||||
::-webkit-scrollbar-track {
|
||||
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
|
||||
-webkit-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
/* Handle */
|
||||
::-webkit-scrollbar-thumb {
|
||||
-webkit-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
background: rgba(0,0,0,0.7);
|
||||
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);
|
||||
}
|
||||
::-webkit-scrollbar-thumb:window-inactive {
|
||||
background: rgba(0,0,0,0.4);
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
body {
|
||||
background-image: url("./resources/static/light.png");
|
||||
overflow: hidden;
|
||||
font-family: Oswald;
|
||||
font-size: 100%;
|
||||
margin: 0;
|
||||
cursor: default;
|
||||
|
||||
-webkit-transition: background-image ease-in 0.5s;
|
||||
-moz-transition: background-image ease-in 0.5s;
|
||||
-ms-transition: background-image ease-in 0.5s;
|
||||
transition: background-image ease-in 0.5s;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 1%;
|
||||
}
|
||||
|
||||
input {
|
||||
font-family: Oswald;
|
||||
}
|
||||
|
||||
.periodictable {
|
||||
color: #000;
|
||||
width:50px;
|
||||
height: 65px;
|
||||
padding:0;
|
||||
margin:0;
|
||||
text-align: center;
|
||||
-webkit-transition: box-shadow 0.3s ease;
|
||||
-moz-transition: box-shadow 0.3s ease;
|
||||
-ms-transition: box-shadow 0.3s ease;
|
||||
transition: box-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
.atom:hover {
|
||||
box-shadow:inset 0 0 0 99999px rgba(0,0,0,0.2);
|
||||
}
|
||||
|
||||
.atomvalue {
|
||||
font-size: 65%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.oxid {
|
||||
margin: 0;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.oxidStat {
|
||||
margin-top: 0;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.oxid:first-letter {
|
||||
font-size: 175% !important;
|
||||
}
|
||||
|
||||
.common {
|
||||
-webkit-filter: drop-shadow(4px 4px 3px #010);
|
||||
filter: drop-shadow(4px 4px 3px #010);
|
||||
}
|
||||
|
||||
img {
|
||||
-webkit-filter: drop-shadow(4px 4px 3px #444);
|
||||
filter: drop-shadow(4px 4px 3px #444);
|
||||
}
|
||||
|
||||
.desc {
|
||||
font-size:110%;
|
||||
display: inline-block;
|
||||
margin-right: 3%;
|
||||
margin-top: 0;
|
||||
height:10%;
|
||||
}
|
||||
|
||||
.setting {
|
||||
display: flex;
|
||||
position: relative;
|
||||
height:100%;
|
||||
width:100%;
|
||||
margin-left: 4%;
|
||||
margin-bottom: 10%;
|
||||
}
|
||||
|
||||
.option {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
font-size: 130%;
|
||||
margin-top : -2%;
|
||||
}
|
||||
|
||||
.selection {
|
||||
margin-top: -5%;
|
||||
padding: 4px;
|
||||
box-shadow:inset 0 0 0 99999px rgba(0,0,0,0.2);
|
||||
margin-top: 0;
|
||||
|
||||
-webkit-transition: box-shadow 0.3s ease, color 0.7s ease;
|
||||
-moz-transition: box-shadow 0.3s ease, color 0.7s ease;
|
||||
-ms-transition: box-shadow 0.3s ease, color 0.7s ease;
|
||||
transition: box-shadow 0.3s ease, color 0.7s ease;
|
||||
}
|
||||
|
||||
.selection:hover {
|
||||
cursor: pointer;
|
||||
box-shadow: inset 0 0 0 99999px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
.dropdown {
|
||||
display: none;
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
box-shadow: 4px 4px 3px #444;
|
||||
z-index: 50;
|
||||
|
||||
-webkit-transition: opacity 0.3s ease;
|
||||
-moz-transition: opacity 0.3s ease;
|
||||
-ms-transition: opacity 0.3s ease;
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
|
||||
.dropdown p {
|
||||
color: black;
|
||||
margin:0;
|
||||
background-color:#fff;
|
||||
padding: 12px 16px;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
|
||||
-webkit-transition: background-color 0.3s ease, opacity 0.3s ease;
|
||||
-moz-transition: background-color 0.3s ease, opacity 0.3s ease;
|
||||
-ms-transition: background-color 0.3s ease, opacity 0.3s ease;
|
||||
transition: background-color 0.3s ease, opacity 0.3s ease;
|
||||
}
|
||||
|
||||
.dropdown p:hover {
|
||||
background-color:#CECDCD;
|
||||
}
|
||||
|
||||
.tDesc {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
font-size: 150%;
|
||||
}
|
||||
|
||||
.pulltab {
|
||||
position: fixed;
|
||||
margin-left: -6%;
|
||||
padding: 0.5%;
|
||||
width: 6.2%;
|
||||
height: 4%;
|
||||
background-color: #b3daff;
|
||||
box-shadow: 2px 2px 5px 3px #333;
|
||||
cursor: pointer;
|
||||
|
||||
-webkit-transition: transform 0.2s ease, margin 0.3s ease, color 0.4s ease;
|
||||
-moz-transition: transform 0.2s ease, margin 0.3s ease, color 0.4s ease;
|
||||
-ms-transition: transform 0.2s ease, margin 0.3s ease ,color 0.4s ease;
|
||||
transition: transform 0.2s ease, margin 0.3s ease, color 0.4s ease;
|
||||
}
|
||||
|
||||
.pulltab:hover {
|
||||
margin-left: 0%;
|
||||
}
|
||||
|
||||
.first {
|
||||
margin-top:5%;
|
||||
|
||||
}
|
||||
.second {
|
||||
margin-top: 12%;
|
||||
}
|
||||
|
||||
.third {
|
||||
margin-top: 19%;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
position: absolute;
|
||||
background-color: #e6f5ff;
|
||||
min-height: 100%;
|
||||
padding: 15px 20px 15px 15px;
|
||||
box-shadow: 2px 2px 5px 3px #333;
|
||||
z-index:5;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
|
||||
-webkit-transition: margin 0.5s ease, background-color 0.5s ease;
|
||||
-moz-transition: margin 0.5s ease, background-color 0.5s ease;
|
||||
-ms-transition: margin 0.5s ease, background-color 0.5s ease;
|
||||
transition: margin 0.5s ease, background-color 0.5s ease;
|
||||
}
|
||||
|
||||
.elements {
|
||||
margin-left: -150%;
|
||||
height:100%;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.settings {
|
||||
margin-left: -40%;
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
.tools {
|
||||
margin-left: -170%;
|
||||
height: 100%;
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
.atom {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.fa {
|
||||
float: right;
|
||||
font-size: 250% !important;
|
||||
color: #585858;
|
||||
margin: 0 1% 3% 1%;
|
||||
cursor: pointer;
|
||||
|
||||
-webkit-transition: color 0.5s ease;
|
||||
-moz-transition: color 0.5s ease;
|
||||
-ms-transition: color 0.5s ease;
|
||||
transition: color 0.5s ease;
|
||||
}
|
||||
|
||||
.fa:hover {
|
||||
color: #FF746B;
|
||||
}
|
||||
|
||||
.tabletitle {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.key {
|
||||
margin-left: 18%;
|
||||
margin-bottom: -20%;
|
||||
margin-top: 15%;
|
||||
}
|
||||
|
||||
.keycolor {
|
||||
width: 20px;
|
||||
height: 25px;
|
||||
}
|
||||
|
||||
.keyvalue {
|
||||
line-height: 1em;
|
||||
height: 5%;
|
||||
padding-right: 2.5%;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#keylegend {
|
||||
position: absolute;
|
||||
top: 16%;
|
||||
}
|
||||
|
||||
.legendholder {
|
||||
position:absolute;
|
||||
top: 16%;
|
||||
left: 35%;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.legend {
|
||||
border-collapse: collapse;
|
||||
max-width: 55%;
|
||||
}
|
||||
|
||||
.legendcell {
|
||||
width: 2px;
|
||||
height: 25px !important;
|
||||
}
|
||||
|
||||
.legendrangeval {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.minlegend {
|
||||
position: relative;
|
||||
right:3%;
|
||||
bottom:10;
|
||||
}
|
||||
|
||||
.maxlegend {
|
||||
position: relative;
|
||||
left: 43%;
|
||||
bottom:50;
|
||||
}
|
||||
|
||||
.normal {
|
||||
border: 1px hidden;
|
||||
margin: 3%;
|
||||
}
|
||||
.extension {
|
||||
border: 1px hidden;
|
||||
margin-top:3%;
|
||||
margin-left: 10%;
|
||||
}
|
||||
|
||||
.infoBox {
|
||||
margin-bottom: 5%;
|
||||
display: flex;
|
||||
cursor: text;
|
||||
-webkit-touch-callout: text;
|
||||
-webkit-user-select: text;
|
||||
-moz-user-select: text;
|
||||
-ms-user-select: text;
|
||||
user-select: text;
|
||||
}
|
||||
|
||||
.preview {
|
||||
margin: 3%;
|
||||
}
|
||||
|
||||
.info1, .info2 {
|
||||
margin: 3%;
|
||||
}
|
||||
.info1 {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
.info2 {
|
||||
width: 33%;
|
||||
}
|
||||
|
||||
.sh {
|
||||
margin-top: 32%;
|
||||
text-align:center;
|
||||
font-size:300%;
|
||||
color:#fff;
|
||||
text-shadow: 4px 4px 5px #444;
|
||||
}
|
||||
|
||||
.help {
|
||||
padding: 1px 1px 5px 2px;
|
||||
margin-right: 3%;
|
||||
text-align:center;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
box-shadow:inset 0 0 0 99999px rgba(0,0,0,0.2);
|
||||
|
||||
-webkit-transition: box-shadow 0.3s ease;
|
||||
-moz-transition: box-shadow 0.3s ease;
|
||||
-ms-transition: box-shadow 0.3s ease;
|
||||
transition: box-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
.help:hover {
|
||||
box-shadow: inset 0 0 0 99999px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
.helptab {
|
||||
position:absolute;
|
||||
display: none;
|
||||
opacity: 0;
|
||||
top: 80%;
|
||||
margin-left: -8%;
|
||||
border-left: 10px solid transparent;
|
||||
border-right: 10px solid transparent;
|
||||
border-bottom: 17px solid #fefefe;
|
||||
|
||||
-webkit-filter: drop-shadow(4px 0px 3px #444);
|
||||
filter: drop-shadow(4px 0px 3px #444);
|
||||
|
||||
-webkit-transition: opacity 0.3s ease;
|
||||
-moz-transition: opacity 0.3s ease;
|
||||
-ms-transition: opacity 0.3s ease;
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
|
||||
.helptext {
|
||||
position:absolute;
|
||||
display: none;
|
||||
opacity: 0;
|
||||
border-radius: 7px;
|
||||
top: 102%;
|
||||
margin-left: -12%;
|
||||
padding: 5px;
|
||||
font-size: 90%;
|
||||
color: #000;
|
||||
background-color: #fefefe;
|
||||
box-shadow: 4px 4px 3px #444;
|
||||
z-index:60;
|
||||
|
||||
-webkit-transition: opacity 0.3s ease;
|
||||
-moz-transition: opacity 0.3s ease;
|
||||
-ms-transition: opacity 0.3s ease;
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
|
||||
.about {
|
||||
position: absolute;
|
||||
bottom: 3%;
|
||||
max-width: 70%;
|
||||
margin-left: 3.5%;
|
||||
font-size: 110%;
|
||||
}
|
||||
|
||||
.github {
|
||||
font-size: 120%;
|
||||
color: #23527C;
|
||||
text-decoration: none;
|
||||
|
||||
-webkit-transition: color 0.3s ease;
|
||||
-moz-transition: color 0.3s ease;
|
||||
-ms-transition: color 0.3s ease;
|
||||
transition: color 0.3s ease;
|
||||
|
||||
}
|
||||
.github:hover {
|
||||
text-decoration: none;
|
||||
color: #69CBE4;
|
||||
}
|
||||
|
||||
.realAtom {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.eye {
|
||||
-webkit-animation: updown 1.3s infinite alternate ease;
|
||||
animation: updown 1.3s infinite alternate ease;
|
||||
}
|
||||
|
||||
#balancebutton {
|
||||
width: 10%;
|
||||
font-size: 175%;
|
||||
margin-right: 3%;
|
||||
padding: .5%;
|
||||
text-align:center;
|
||||
box-shadow:inset 0 0 0 99999px rgba(0,0,0,0.2);
|
||||
|
||||
-webkit-transition: box-shadow 0.3s ease;
|
||||
-moz-transition: box-shadow 0.3s ease;
|
||||
-ms-transition: box-shadow 0.3s ease;
|
||||
transition: box-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
#balancebutton:hover {
|
||||
box-shadow: inset 0 0 0 99999px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
.balanceout {
|
||||
text-align: center;
|
||||
width: 15%;
|
||||
height: 4%;
|
||||
font-size: 110%;
|
||||
}
|
||||
|
||||
@-webkit-keyframes updown {
|
||||
0% { transform: translateY(0px); }
|
||||
100% { transform: translateY(-4px); }
|
||||
}
|
||||
|
||||
@keyframes updown {
|
||||
0% { transform: translateY(0px); }
|
||||
100% { transform: translateY(-4px); }
|
||||
}
|
||||
132
atoms/index.html
Normal file
@ -0,0 +1,132 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||
<title>Atoms</title>
|
||||
<link rel="icon" href="./resources/static/favicon.ico">
|
||||
<link rel="stylesheet" href="./index.css">
|
||||
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
||||
</head>
|
||||
<body>
|
||||
<div class="pulltab first"><p class="tDesc">Elements</p></div>
|
||||
<div class="sidebar elements">
|
||||
<i class="fa fa-close"></i>
|
||||
<div class="titleholder"></div>
|
||||
<div class="key">
|
||||
<div class="legendholder"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pulltab second"><p class="tDesc">Tools</p></div>
|
||||
<div class="sidebar tools">
|
||||
<i class="fa fa-close"></i>
|
||||
<form>
|
||||
Reactants:
|
||||
<input type="text" class="reactant">
|
||||
Products:
|
||||
<input type="test" class="product">
|
||||
</form>
|
||||
<p id="balancebutton">Balance!</p>
|
||||
<div class="balanceholder"><input type="text" class="balanceout" readonly></div>
|
||||
</div>
|
||||
|
||||
<div class="pulltab third"><p class="tDesc">Settings</p></div>
|
||||
<div class="sidebar settings">
|
||||
<i class="fa fa-close"></i>
|
||||
<div class="setting">
|
||||
<div class="help">?</div>
|
||||
<div class="helptab"></div>
|
||||
<div class="helptext">Change the color scheme</div>
|
||||
<p class="desc">Background Theme:</p>
|
||||
<div class=option id="theme"></div>
|
||||
</div>
|
||||
<div class="setting">
|
||||
<div class="help">?</div>
|
||||
<div class="helptab"></div>
|
||||
<div class="helptext">Change the colors of the Periodic Table and the Atoms</div>
|
||||
<p class="desc">Display Theme:</p>
|
||||
<div class=option id="displayTheme"></div>
|
||||
</div>
|
||||
<div class="setting">
|
||||
<div class="help">?</div>
|
||||
<div class="helptab"></div>
|
||||
<div class="helptext">Change the style of electron configuration</div>
|
||||
<p class="desc">Electron Configuration:</p>
|
||||
<div class=option id="elecConf"></div>
|
||||
</div>
|
||||
<div class="setting">
|
||||
<div class="help">?</div>
|
||||
<div class="helptab"></div>
|
||||
<div class="helptext">Change the units for temperature</div>
|
||||
<p class="desc">Units:</p>
|
||||
<div class=option id="unit"></div>
|
||||
</div>
|
||||
<div class='about'>
|
||||
<p>Developed by Kenneth Jao and Yaman Qalieh</p>
|
||||
<a class="github" target="_blank" href="https://github.com/ksjdragon/atoms">Github</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="workspace"></div>
|
||||
</body>
|
||||
<script type='text/javascript'>
|
||||
var settings = {}; //settings[theme] will return the current setting
|
||||
var info; // JSON file
|
||||
var options = ["theme","displayTheme","elecConf","unit"];
|
||||
var ranges = {}; //ranges[theme][0] is min [1] is max [2] is range
|
||||
var elementCount = 118; // Number of elements
|
||||
var lastElement;
|
||||
|
||||
var choices = [ //Keep these in the same order as options
|
||||
["light","dark"],
|
||||
["category", "atomRadi", "moleWeig", "ioniEner", "elecAffi", "elecNega", "density", "melting", "boiling"],
|
||||
["abr","norm"],
|
||||
["K","C","F"]
|
||||
];
|
||||
|
||||
var choicesDisplay = [ // Keep these in the same order as options
|
||||
["Light","Dark"],
|
||||
["Region", "Atomic Radius", "Molecular Mass", "Ionization Energy", "Electron Affinity", "Electronegativity", "Density", "Melting Point", "Boiling Point"],
|
||||
["Abbreviated","Full"],
|
||||
["Kelvin","Celsius","Fahrenheit"]
|
||||
];
|
||||
|
||||
var keyColors = [
|
||||
{"Alkali Metals":'#8EF02B',"Alkali Earth Metals":"#D77A1D","Metalloids":"#387290","Non-metals":"#52BFF6","Halogens":"#4842E9","Noble Gases":"#7B1AE9","Transition Metals":"#E5D439","Post Transition Metals":"#2ADEA8","Lanthanides":"#F02BBC","Actinides":"#D78A8A"},
|
||||
{"Unknown": "#41464d"},
|
||||
{},
|
||||
{"Unknown": "#41464d"},
|
||||
{"Unknown": "#41464d"},
|
||||
{"Unknown": "#41464d"},
|
||||
{"Unknown": "#41464d"},
|
||||
{"Unknown": "#41464d"},
|
||||
{"Unknown": "#41464d"}
|
||||
];
|
||||
|
||||
var colorChart = { //colorChart[theme][0] = most [1] = least
|
||||
"category": {"al":'#8EF02B',"ae":"#D77A1D","md":"#387290","nm":"#52BFF6","ha":"#4842E9","ng":"#7B1AE9","tm":"#E5D439","bm":"#2ADEA8","lh":"#F02BBC","ac":"#D78A8A"},
|
||||
"atomRadi": ["#151618", "#2C7BF2"],
|
||||
"moleWeig": ["#151618", "#2C7BF2"],
|
||||
"ioniEner": ["#E2DC27", "#5535D4"],
|
||||
"elecAffi": ["#E2DC27", "#5535D4"],
|
||||
"elecNega": ["#E2DC27","#5535D4"],
|
||||
"density": ["#151618", "#2C7BF2"],
|
||||
"melting": ["#D7301E", "#69F2F2"],
|
||||
"boiling": ["#D7301E", "#69F2F2"]
|
||||
};
|
||||
|
||||
var themeChart = { //themeChart[element][theme]
|
||||
"pulltab": {'light': '#B3DAFF','dark': '#779550'},
|
||||
"sidebar": {'light':'#E6F5FF','dark': '#7b925d'},
|
||||
"font": {'light': 'rgb(0,0,0)', 'dark': 'rgb(254,254,254)'}
|
||||
};
|
||||
</script>
|
||||
|
||||
<script src="./js/tools.js"></script>
|
||||
<script src="./js/onload.js"></script>
|
||||
<script src="./js/update.js"></script>
|
||||
<script src="./js/atom.js"></script>
|
||||
<script src="./js/buttons.js"></script>
|
||||
<script src="./js/main.js"></script>
|
||||
</html>
|
||||
265
atoms/js/atom.js
Normal file
@ -0,0 +1,265 @@
|
||||
function tableDesc() {
|
||||
var p = ["element","atomRadi","moleWeig","ioniEner","elecAffi","elecNega","phase","density","melting","boiling",
|
||||
"oxidStat","elecConf"];
|
||||
var unit = [""," pm"," g/mol", " kJ/mol"," kJ/mol", " eV", "", " g/mL", "",""];
|
||||
var prefix = ["Element Name: ", "Atomic Radius: ", "Molecular Mass: ", "Ionization Energy: ", "Electron Affinity: ",
|
||||
"Electronegativity: ", "Phase/State: ", "Density: ", "Melting Point: ", "Boiling Point: ",
|
||||
"Oxidation State(s): ", "Electron Configuration: "];
|
||||
var states = {"g":"Gas","l":"Liquid","s":"Solid","Unknown":"Unknown"};
|
||||
|
||||
// Setting up divs for organization
|
||||
var infoBox = document.createElement("div");
|
||||
infoBox.className = "infoBox";
|
||||
|
||||
get("elements").appendChild(infoBox);
|
||||
var div = document.createElement("div");
|
||||
div.className = "info1";
|
||||
get("infoBox").appendChild(div);
|
||||
var div2 = document.createElement("div");
|
||||
div2.className = "info2";
|
||||
get("infoBox").appendChild(div2);
|
||||
|
||||
for(var i = 0;i < p.length; i++) { // For all possible data types
|
||||
elem = document.createElement("p");
|
||||
elem.className = "eDesc " + p[i];
|
||||
if(i <= 5) {
|
||||
get("info1").appendChild(elem);
|
||||
} else {
|
||||
get("info2").appendChild(elem);
|
||||
}
|
||||
}
|
||||
get("info2").appendChild(document.createElement("br"));
|
||||
|
||||
box = document.createElement("div");
|
||||
box.className = "preview";
|
||||
get("infoBox").appendChild(box);
|
||||
|
||||
var trans1 = get("periodictable")[92];
|
||||
var trans2 = get("periodictable")[110];
|
||||
|
||||
trans1.style.backgroundColor = "#41484D";
|
||||
trans2.style.backgroundColor = "#41484D";
|
||||
trans1.appendChild(document.createTextNode("57 - 71"));
|
||||
trans2.appendChild(document.createTextNode("89 - 103"));
|
||||
trans1.style.fontSize = "90%";
|
||||
trans2.style.fontSize = "90%";
|
||||
|
||||
// Creates 'reactivity' for each cell
|
||||
for(var i = 0;i < elementCount;i++) {
|
||||
var cell = get("td")[info["location"][i]]; // Gets location of each atom in order
|
||||
|
||||
cell.onclick = function() {
|
||||
lastElement = this;
|
||||
var index = parseInt(this.childNodes[0].childNodes[0].nodeValue-1);
|
||||
for(var i = 0;i < p.length; i++) { // Loop through all data types to be displayed
|
||||
if(i == 8 || i == 9) { // If data type is melting or boiling
|
||||
if(info[p[i]][settings["unit"]][index] !== null) {
|
||||
// Get prefix ex. Melting: + actual value + unit
|
||||
if(settings["unit"] != "K") {
|
||||
changeText(p[i],prefix[i] + info[p[i]][settings["unit"]][index] + "° " + settings["unit"]);
|
||||
} else {
|
||||
changeText(p[i],prefix[i] + info[p[i]][settings["unit"]][index] + " " + settings["unit"]);
|
||||
}
|
||||
} else { // If null
|
||||
changeText(p[i],prefix[i] + "Unknown"); // Make unknown
|
||||
}
|
||||
} else {
|
||||
if(info[p[i]][index] != null) { // If data type value isn't null
|
||||
if(i == 6) { // If data type is phase/state
|
||||
// Get prefix + value reference ex. 'g' -> 'Gas' + unit
|
||||
changeText(p[i],prefix[i] + states[info[p[i]][index]] + unit[i]);
|
||||
} else if(i == 10) { // If data type is oxidation states
|
||||
var para = get("oxidStat");
|
||||
|
||||
// Remove all childs in oxidation state div
|
||||
while (para.firstChild) {
|
||||
para.removeChild(para.firstChild);
|
||||
}
|
||||
|
||||
var allStates = info[p[i]][index];
|
||||
var para1 = document.createElement("span");
|
||||
para1.appendChild(document.createTextNode(prefix[i]));
|
||||
para.appendChild(para1);
|
||||
|
||||
for(var j = 0;j < allStates.length; j++) { // For all states in array
|
||||
oxidStat = allStates[j];
|
||||
if(j == 6) { // Add new line to prevent overflow
|
||||
para.appendChild(document.createElement("br"))
|
||||
}
|
||||
if(allStates[j].includes("b")) { // If value has b, make value different
|
||||
oxidStat = allStates[j].substring(1);
|
||||
var par = document.createElement("p");
|
||||
par.appendChild(document.createTextNode(oxidStat));
|
||||
par.className = "oxid common";
|
||||
para.appendChild(par);
|
||||
var par = document.createElement("span"); // Spans use inline block
|
||||
par.className = "comma"
|
||||
par.appendChild(document.createTextNode(", "))
|
||||
para.appendChild(par);
|
||||
} else {
|
||||
var pa = document.createElement("p");
|
||||
pa.appendChild(document.createTextNode(oxidStat));
|
||||
pa.className = "oxid";
|
||||
para.appendChild(pa);
|
||||
pa = document.createElement("span"); // Spans use inline block
|
||||
pa.className = "comma"
|
||||
pa.appendChild(document.createTextNode(", "))
|
||||
para.appendChild(pa);
|
||||
}
|
||||
}
|
||||
para.removeChild(para.lastChild); // Remove last comma
|
||||
} else if(i == 11) { // If data type is electron configuration
|
||||
var para = get("elecConf");
|
||||
|
||||
// Remove all childs in electron configuration div
|
||||
while (para.firstChild) {
|
||||
para.removeChild(para.firstChild);
|
||||
}
|
||||
|
||||
var elecConf = info[p[i]][index].split("."); // Ex. ["1s", "2", "2s", "2"]
|
||||
para.appendChild(document.createTextNode(prefix[i]));
|
||||
|
||||
if(settings["elecConf"] == "abr") {
|
||||
// Add 2 to get to next non superscript and subtract one to prevent undefined
|
||||
for(var j = 0;j < elecConf.length-1; j+=2) {
|
||||
para.appendChild(document.createTextNode(elecConf[j])); // Append electron level
|
||||
// Append value for level in superscript
|
||||
var sup = document.createElement("sup");
|
||||
sup.appendChild(document.createTextNode(elecConf[j+1]));
|
||||
para.appendChild(sup);
|
||||
}
|
||||
|
||||
} else if(settings["elecConf"] == "norm") {
|
||||
while(elecConf[0].includes("[")) { // Ex: [Xe]5s2
|
||||
// Get ex. [Xe] configuration
|
||||
otherConf = info[p[i]][info["shorthand"].indexOf(elecConf[0].substring(1,3))].split(".");
|
||||
elecConf[0] = elecConf[0].substring(4); // [Xe]5s2 = 5s2
|
||||
for(var j = otherConf.length-1; j >= 0; j--) {
|
||||
// Put configuration of abbreviation in front of last configuration
|
||||
elecConf.unshift(otherConf[j]);
|
||||
}
|
||||
}
|
||||
|
||||
// Add 2 to get to next non superscript and subtract one to prevent undefined
|
||||
for(var j = 0;j < elecConf.length-1; j+=2) {
|
||||
if(j == 20) { // Add new line to prevent overflow
|
||||
para.appendChild(document.createElement("br"))
|
||||
}
|
||||
para.appendChild(document.createTextNode(elecConf[j])); // Append electron level
|
||||
var sup = document.createElement("sup");
|
||||
// Append value for level in superscript
|
||||
sup.appendChild(document.createTextNode(elecConf[j+1]));
|
||||
para.appendChild(sup);
|
||||
}
|
||||
}
|
||||
} else { // If not special data type
|
||||
changeText(p[i],prefix[i] + info[p[i]][index] + unit[i]);
|
||||
}
|
||||
|
||||
} else { // If null
|
||||
changeText(p[i],prefix[i] + "Unknown");
|
||||
}
|
||||
}
|
||||
} // Remove all childs in preview, then get new atom div
|
||||
try {
|
||||
get("preview").removeChild(get("preview").firstChild);
|
||||
} catch(err){}
|
||||
get("preview").appendChild(getAtomDOM(index,window.innerHeight/3.8));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function changeText(dom,text) {
|
||||
var dom = get(dom);
|
||||
// Remove all childs in div
|
||||
while (dom.firstChild) {
|
||||
dom.removeChild(dom.firstChild);
|
||||
}
|
||||
|
||||
dom.appendChild(document.createTextNode(" "));
|
||||
dom.childNodes[0].nodeValue = text;
|
||||
}
|
||||
|
||||
function getAtomDOM(atomNum, size) {
|
||||
var holder = document.createElement("div");
|
||||
holder.style.position = "relative";
|
||||
holder.style.height = size;
|
||||
holder.style.width = size;
|
||||
holder.className = "realAtom";
|
||||
|
||||
var atom = document.createElement("img");
|
||||
atom.ondragstart = function(){return false;} // Disables image dragging
|
||||
atom.src = "./resources/reactive/Ring" + info["valeElec"][atomNum] + ".gif";
|
||||
atom.style.height = size;
|
||||
atom.style.width = size;
|
||||
atom.style.position = "absolute";
|
||||
atom.style.top = "0";
|
||||
atom.style.left = "0";
|
||||
|
||||
var circle = document.createElement("div");
|
||||
circle.className = "innerAtom";
|
||||
circle.style.borderRadius = "50%"; // Creates circle
|
||||
circle.style.height = size*0.85;
|
||||
circle.style.width = size*0.85;
|
||||
circle.style.margin = "0 auto";
|
||||
circle.style.position = "absolute";
|
||||
circle.style.top = size*0.075;
|
||||
circle.style.left = size*0.075;
|
||||
var bgColor = getColor(settings["displayTheme"],atomNum);
|
||||
circle.style.backgroundColor = bgColor;
|
||||
circle.style.boxShadow = "inset 0 0 0 15px " + changeColor(bgColor,20) + ", inset 0 0 10px 30px " + changeColor(bgColor,-20) + ", 1px 4px 16px 6px #444";
|
||||
|
||||
var eyes = document.createElement("div");
|
||||
eyes.style.display = "flex";
|
||||
eyes.style.position = "absolute";
|
||||
var eyesWidth = size*0.17;
|
||||
var eyesHeight = size*0.15;
|
||||
eyes.style.top = size*0.425 - eyesHeight/2;
|
||||
eyes.style.left = size*0.67 - eyesWidth/2;
|
||||
var eye = document.createElement("div");
|
||||
eye.style.backgroundColor = changeColor(bgColor,-20);
|
||||
eye.style.borderRadius = "100px / 240px";
|
||||
eye.style.boxShadow = "inset 0 0 0 4px #fff";
|
||||
eye.style.width = size*0.06;
|
||||
eye.style.height = size*0.15;
|
||||
eye.className = "eye";
|
||||
eyes.appendChild(eye);
|
||||
var eye2 = eye.cloneNode(true);
|
||||
eye2.style.marginLeft = "5px";
|
||||
eyes.appendChild(eye2);
|
||||
|
||||
var sh = document.createElement("p");
|
||||
sh.appendChild(document.createTextNode(info["shorthand"][atomNum]));
|
||||
sh.className = "sh";
|
||||
|
||||
circle.appendChild(sh);
|
||||
circle.appendChild(eyes);
|
||||
holder.appendChild(circle)
|
||||
holder.appendChild(atom);
|
||||
|
||||
return holder;
|
||||
}
|
||||
|
||||
get("body").onmousemove = function(event) {
|
||||
// Makes eyes point at mouse
|
||||
try {
|
||||
var a = event.clientX;
|
||||
var b = event.clientY;
|
||||
for(var i = 0; i < document.getElementsByClassName("innerAtom").length; i++) {
|
||||
var atom = document.getElementsByClassName("innerAtom")[i];
|
||||
var x = (atom.getBoundingClientRect()["left"] + atom.getBoundingClientRect()["right"])/2; // X coord
|
||||
var y = (atom.getBoundingClientRect()["top"] + atom.getBoundingClientRect()["bottom"])/2; // Y coord
|
||||
var width = atom.getBoundingClientRect()["width"]; // Width and length are same because circle
|
||||
|
||||
var r = width/4;
|
||||
var vect = [a-x, b-y];
|
||||
var magn = Math.sqrt(Math.pow(vect[0],2) + Math.pow(vect[1],2))
|
||||
var eyePos = [vect[0]*r/magn, vect[1]*r/magn];
|
||||
|
||||
var eyes = atom.childNodes[1];
|
||||
eyes.style.left = width/2 + eyePos[0] - eyes.getBoundingClientRect()["width"]/2;
|
||||
eyes.style.top = width/2 + eyePos[1] - eyes.getBoundingClientRect()["height"]/2;
|
||||
}
|
||||
} catch(err) {}
|
||||
}
|
||||
57
atoms/js/buttons.js
Normal file
@ -0,0 +1,57 @@
|
||||
get("pulltab")[0].onclick = function(){open(get("elements"));}
|
||||
get("pulltab")[1].onclick = function(){open(get("tools"));}
|
||||
get("pulltab")[2].onclick = function(){open(get("settings"));}
|
||||
get("fa")[0].onclick = function() {
|
||||
get("elements").style.marginLeft = "-150%";
|
||||
}
|
||||
get("fa")[1].onclick = function() {
|
||||
get("tools").style.marginLeft = "-170%";
|
||||
}
|
||||
get("fa")[2].onclick = function() {
|
||||
get("settings").style.marginLeft = "-40%";
|
||||
}
|
||||
|
||||
function open(dom) {
|
||||
dom.style.marginLeft = "0%";
|
||||
}
|
||||
|
||||
for(var i = 0; i < options.length; i++) {
|
||||
get("help")[i].onclick = function() {
|
||||
var index = options.indexOf(this.parentNode.childNodes[9].id);
|
||||
get("helptext")[index].style.display = "block";
|
||||
get("helptab")[index].style.display = "block";
|
||||
setTimeout(function() {
|
||||
get("helptab")[index].style.opacity = "1";
|
||||
get("helptext")[index].style.opacity = "1";
|
||||
}, 1)
|
||||
}
|
||||
|
||||
get("help")[i].onmouseleave = function() {
|
||||
var index = options.indexOf(this.parentNode.childNodes[9].id);
|
||||
get("helptab")[index].style.opacity = "0";
|
||||
setTimeout(function(){get("helptext")[index].style.opacity = "0";},100);
|
||||
setTimeout(function() {
|
||||
get("helptab")[index].style.display = "none";
|
||||
get("helptext")[index].style.display = "none";
|
||||
}, 300);
|
||||
}
|
||||
}
|
||||
|
||||
get("balancebutton").onclick = function() {
|
||||
//Invalid form handling
|
||||
var reactants = get("reactant").value;
|
||||
var products = get("products").value;
|
||||
var reacNum = reactants.split("+").length-1;
|
||||
var final = "";
|
||||
var balanced = balanceEquation(get("reactant").value,get("product").value);
|
||||
|
||||
for(var i = 0; i < balanced.length; i++) {
|
||||
if(i == reacNum) {
|
||||
final += balanced[i] + " -> ";
|
||||
} else {
|
||||
final += balanced[i] + " + ";
|
||||
}
|
||||
}
|
||||
final = final.substring(0,final.length-3);
|
||||
get("balanceout").value = final;
|
||||
}
|
||||
50
atoms/js/main.js
Normal file
@ -0,0 +1,50 @@
|
||||
function getJSON() {
|
||||
xhr.open("GET","./resources/static/info.json", true);
|
||||
xhr.onreadystatechange = function() {
|
||||
if (xhr.readyState == 4) {
|
||||
info = JSON.parse(xhr.responseText);
|
||||
}
|
||||
}
|
||||
xhr.send(null);
|
||||
}
|
||||
|
||||
function update() {
|
||||
var cookie = document.cookie;
|
||||
var cookieArray = cookie.split(";");
|
||||
|
||||
// For all settings, append into object format
|
||||
|
||||
for(var i = 0; i < cookieArray.length; i++) {
|
||||
var set = cookieArray[i].split("=");
|
||||
settings[set[0].replace(" ","")] = set[1];
|
||||
}
|
||||
|
||||
// Below are settings applied based
|
||||
var dispTheme = settings["displayTheme"];
|
||||
changeTheme(settings["theme"]);
|
||||
tableTheme(dispTheme);
|
||||
legendChange(dispTheme);
|
||||
keyChange(dispTheme)
|
||||
}
|
||||
|
||||
var reader = new FileReader();
|
||||
var xhr = new XMLHttpRequest();
|
||||
|
||||
if(document.cookie == "") { // Set defaults if no cookie
|
||||
document.cookie = "theme=light";
|
||||
document.cookie = "displayTheme=category;";
|
||||
document.cookie = "elecConf=abr;";
|
||||
document.cookie = "unit=K;"
|
||||
}
|
||||
|
||||
getJSON();
|
||||
|
||||
setTimeout(function mainFunc() {
|
||||
getRanges();
|
||||
createTable();
|
||||
update();
|
||||
makeSettings();
|
||||
tableDesc();
|
||||
keyLegend();
|
||||
createGradientLegend();
|
||||
}, 600);
|
||||
224
atoms/js/onload.js
Normal file
@ -0,0 +1,224 @@
|
||||
function createTable() {
|
||||
var tbl = document.createElement('table');
|
||||
tbl.style.border = "1px hidden";
|
||||
tbl.className = "normal";
|
||||
|
||||
// Creates table width j, height i
|
||||
for(var i = 0; i < 7; i++) {
|
||||
var tr = tbl.insertRow();
|
||||
for(var j = 0; j < 18; j++) {
|
||||
td = tr.insertCell();
|
||||
td.className = "periodictable";
|
||||
}
|
||||
}
|
||||
get("sidebar")[0].appendChild(tbl);
|
||||
|
||||
// Repeat of process above for Lanthanides and Actinides
|
||||
tbl = document.createElement('table');
|
||||
tbl.className = "extension";
|
||||
for(var i = 0; i < 2; i++) {
|
||||
var tr = tbl.insertRow();
|
||||
for(var j = 0; j < 15; j++) {
|
||||
var td = tr.insertCell();
|
||||
td.className = "periodictable";
|
||||
}
|
||||
}
|
||||
get("sidebar")[0].appendChild(tbl);
|
||||
|
||||
// Creates text for the periodic table
|
||||
cells = get("td");
|
||||
for(var i = 0;i < elementCount;i++) {
|
||||
ele = document.createElement("p");
|
||||
text = document.createTextNode(i+1); // i+1 to offset 0
|
||||
ele.appendChild(text);
|
||||
cells[info["location"][i]].appendChild(ele);
|
||||
text = document.createTextNode(info["shorthand"][i]);
|
||||
value = document.createElement("p");
|
||||
value.appendChild(document.createTextNode(""));
|
||||
value.className = "atomvalue";
|
||||
cells[info["location"][i]].appendChild(text);
|
||||
cells[info["location"][i]].appendChild(value);
|
||||
cells[info["location"][i]].className = cells[info["location"][i]].className +" atom"; // Adds class to prevent hover animation on blank cells
|
||||
}
|
||||
}
|
||||
|
||||
function keyLegend() {
|
||||
var rowlength = 3;
|
||||
|
||||
// Get theme
|
||||
var theme = settings["displayTheme"];
|
||||
var index = choices[1].indexOf(theme);
|
||||
// Create Table
|
||||
var tbl = document.createElement('table');
|
||||
// id for CSS
|
||||
tbl.id = "keylegend";
|
||||
if(theme == "category") {
|
||||
tbl.style.top = "10%";
|
||||
tbl.style.left = "16.5%";
|
||||
}
|
||||
for (var i = 0; i < Object.keys(keyColors[index]).length; i+=rowlength) {
|
||||
var tr = tbl.insertRow();
|
||||
for (var x = 0; x < rowlength; x++) {
|
||||
if ((i + x) < Object.keys(keyColors[index]).length) {
|
||||
var keycolor = tr.insertCell();
|
||||
keycolor.className = "keycolor";
|
||||
keycolor.style.backgroundColor = keyColors[index][Object.keys(keyColors[index])[i + x]];
|
||||
|
||||
var keyname = tr.insertCell();
|
||||
keyvalue = document.createTextNode(Object.keys(keyColors[index])[i + x]);
|
||||
keyname.appendChild(keyvalue);
|
||||
keyname.className = "keyvalue";
|
||||
}
|
||||
}
|
||||
};
|
||||
get("key").appendChild(tbl);
|
||||
}
|
||||
|
||||
function createGradientLegend() {
|
||||
|
||||
var units = [""," pm"," g/mol", " kJ/mol"," kJ/mol", " eV", " g/mL", "", ""];
|
||||
|
||||
// Create Table element
|
||||
var tbl = document.createElement('table');
|
||||
|
||||
// Adds Class for styling
|
||||
tbl.className = "legend";
|
||||
|
||||
// Gets theme then makes vars for hexes so that repeated table access not necessary
|
||||
var theme = settings["displayTheme"];
|
||||
var index = choices[1].indexOf(theme);
|
||||
var unit = settings["unit"];
|
||||
|
||||
// Filter out non-gradient layouts
|
||||
if (colorChart[theme].length === 2) {
|
||||
var color1 = colorChart[theme][0];
|
||||
var color2 = colorChart[theme][1];
|
||||
}
|
||||
|
||||
|
||||
// Creates a gradient of 101 values wide (j) for good transition
|
||||
var tr = tbl.insertRow();
|
||||
for(var j = 0; j <= 1; j += 0.01) {
|
||||
var td = tr.insertCell();
|
||||
td.className = "legendcell";
|
||||
if (colorChart[theme].length === 2) {
|
||||
td.style.backgroundColor = gradientColor(color1, color2 , j);
|
||||
}
|
||||
}
|
||||
|
||||
// Adds table to key area
|
||||
get("legendholder").appendChild(tbl);
|
||||
|
||||
// Create Key
|
||||
|
||||
var min = document.createElement("p");
|
||||
min.className = "legendrangeval minlegend";
|
||||
var max = document.createElement("p");
|
||||
max.className = "legendrangeval maxlegend"
|
||||
|
||||
if (colorChart[theme].length != 2) {
|
||||
var minval = document.createTextNode("");
|
||||
var maxval = document.createTextNode("");
|
||||
|
||||
} else if (theme === "melting" || theme === "boiling") {
|
||||
if (unit === "K") {
|
||||
var extra = " " + unit;
|
||||
} else {
|
||||
var extra = " °" + unit;
|
||||
}
|
||||
var minval = document.createTextNode(ranges[theme][unit][0] + extra);
|
||||
var maxval = document.createTextNode(ranges[theme][unit][1] + extra);
|
||||
|
||||
|
||||
} else {
|
||||
var minval = document.createTextNode(ranges[theme][0] + " " + units[index]);
|
||||
var maxval = document.createTextNode(ranges[theme][1] + " " + units[index]);
|
||||
|
||||
}
|
||||
min.appendChild(minval);
|
||||
max.appendChild(maxval);
|
||||
|
||||
get("legendholder").appendChild(min);
|
||||
get("legendholder").appendChild(max);
|
||||
|
||||
// Create Title
|
||||
|
||||
var title = document.createElement("h1");
|
||||
title.className = "tabletitle";
|
||||
if (units[index] != "") {
|
||||
var end = choicesDisplay[1][index] + " (" + units[index] + " )";
|
||||
} else {
|
||||
var end = choicesDisplay[1][index];
|
||||
}
|
||||
title.innerHTML = end;
|
||||
get("titleholder").appendChild(title);
|
||||
|
||||
}
|
||||
|
||||
function makeSettings() {
|
||||
for(var i = 0; i < options.length;i++) {
|
||||
var parent = get("option")[i];
|
||||
var text = document.createElement("p");
|
||||
// Create text of current settings choice for this option
|
||||
text.appendChild(document.createTextNode(choicesDisplay[i][choices[i].indexOf(settings[parent.id])]))
|
||||
text.className = "selection";
|
||||
|
||||
parent.appendChild(text);
|
||||
var holder = document.createElement("div"); //Dropdown choice holder div
|
||||
holder.className = "dropdown";
|
||||
parent.appendChild(holder);
|
||||
|
||||
// On mouse functions
|
||||
parent.onclick = function() {
|
||||
// Make visible
|
||||
var k = this;
|
||||
this.childNodes[1].style.display = "inline";
|
||||
// Needs delay in between to execute transition properly, do not remove.
|
||||
setTimeout(function(){k.childNodes[1].style.opacity = "1";},1);
|
||||
}
|
||||
parent.onmouseleave = function() {
|
||||
// Make invisible
|
||||
var k = this;
|
||||
this.childNodes[1].style.opacity = "0";
|
||||
setTimeout(function(){k.childNodes[1].display = "none";},300); //Time for opacity change
|
||||
}
|
||||
holder.onmouseleave = function() {
|
||||
// Make invisible
|
||||
var k = this;
|
||||
this.style.opacity = "0";
|
||||
setTimeout(function(){k.style.display = "none";},300); //Time for opacity change
|
||||
}
|
||||
|
||||
for(var j = 0;j < choices[i].length;j++) { // For all choices, append div for choice selection
|
||||
var p = document.createElement("p");
|
||||
p.className = i.toString() + j.toString();
|
||||
p.appendChild(document.createTextNode(choicesDisplay[i][j]))
|
||||
holder.appendChild(p);
|
||||
|
||||
p.onclick = function(event) {
|
||||
event.stopPropagation(); // Parent onclick doesn't occur when child gets clicked
|
||||
var value = this.innerHTML;
|
||||
var k = this;
|
||||
var setting = this.parentNode.parentNode.id;
|
||||
var textDiv = this.parentNode.parentNode.childNodes[0].childNodes[0];
|
||||
// Only if different value
|
||||
if(value !== textDiv.nodeValue) {
|
||||
this.parentNode.style.opacity = "0";
|
||||
setTimeout(function(){k.parentNode.style.display = "none";},300);
|
||||
// Text transition: opacity 0
|
||||
textDiv.parentNode.style.color = themeChart["font"][settings["theme"]].replace(")",",0)").replace("b","ba");
|
||||
// Update settings through cookie
|
||||
deleteCookie(setting);
|
||||
document.cookie = setting+"="+choices[parseInt(this.className[0])][parseInt(this.className[1])];
|
||||
// Text transition: opacity 1
|
||||
setTimeout(function() {
|
||||
textDiv.nodeValue = value;
|
||||
textDiv.parentNode.style.color = themeChart["font"][settings["theme"]].replace(")",",1)").replace("b","ba");
|
||||
update();
|
||||
}, 650)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
393
atoms/js/tools.js
Normal file
@ -0,0 +1,393 @@
|
||||
function getColor(theme, atomNum) {
|
||||
if(theme == "category") {
|
||||
var color = colorChart[theme][info[theme][atomNum]];
|
||||
} else if(theme == "melting" || theme == "boiling") {
|
||||
if(info[theme]["K"][atomNum] == null) { // if value is null
|
||||
color = "#41484D";
|
||||
} else {
|
||||
// Value - Min(all values) / Max(all values) - Min(all values)
|
||||
var ratio = (info[theme]["K"][atomNum] - ranges[theme]["K"][0]) / ranges[theme]["K"][2];
|
||||
var color = gradientColor(colorChart[theme][0],colorChart[theme][1], ratio); // high, low, ratio
|
||||
}
|
||||
} else {
|
||||
if(info[theme][atomNum] == null) { // if value is null
|
||||
color = "#41484D";
|
||||
} else {
|
||||
// Value - Min(all values) / Max(all values) - Min(all values)
|
||||
var ratio = (info[theme][atomNum] - ranges[theme][0]) / ranges[theme][2];
|
||||
var color = gradientColor(colorChart[theme][0],colorChart[theme][1], ratio);
|
||||
}
|
||||
}
|
||||
|
||||
return color;
|
||||
}
|
||||
|
||||
function changeColor(hex, amt) {
|
||||
|
||||
hex = hex.slice(1);
|
||||
var num = parseInt(hex,16);
|
||||
var r = (num >> 16) + amt;
|
||||
|
||||
if (r > 255) r = 255;
|
||||
else if (r < 0) r = 0;
|
||||
|
||||
var b = ((num >> 8) & 0x00FF) + amt;
|
||||
|
||||
if (b > 255) b = 255;
|
||||
else if (b < 0) b = 0;
|
||||
|
||||
var g = (num & 0x0000FF) + amt;
|
||||
|
||||
if (g > 255) g = 255;
|
||||
else if (g < 0) g = 0;
|
||||
|
||||
var final = (g | (b << 8) | (r << 16)).toString(16);
|
||||
|
||||
// Adds preceeding zeros
|
||||
while (final.length < 6) {final = "0" + final};
|
||||
return "#" + final;
|
||||
}
|
||||
|
||||
function gradientColor(hex1, hex2, ratio) {
|
||||
|
||||
// Splits hex1 into 3 pieces (2 char each)
|
||||
var hex1 = hex1.replace("#", "").match(/.{1,2}/g);
|
||||
// Converts each one into int
|
||||
|
||||
for (var i = 0; i <= 2; i++) {
|
||||
hex1[i] = parseInt(hex1[i], 16);
|
||||
}
|
||||
|
||||
// Does above process for hex2
|
||||
var hex2 = hex2.replace("#", "").match(/.{1,2}/g);
|
||||
for (var i = 0; i <= 2; i++) {
|
||||
hex2[i] = parseInt(hex2[i], 16);
|
||||
}
|
||||
|
||||
// Creates end table for finished hex parts
|
||||
var donetable = [];
|
||||
// Averages each of the three parts between hex1 and hex2
|
||||
for (var i = 0; i <= 2; i++) {
|
||||
// Weighted average to get exact gradient necessary and not average
|
||||
// Round to prevent weird hex decimal shenanigans
|
||||
var val = Math.round((ratio) * hex1[i] + (1 - ratio) * hex2[i]);
|
||||
val = val.toString(16);
|
||||
|
||||
// Adds 0 to solve math automatically removing preceeding zeroes
|
||||
if (val.length === 1) {
|
||||
val = "0" + val;
|
||||
}
|
||||
donetable[i] = val;
|
||||
}
|
||||
|
||||
// Rejoins hex and adds #
|
||||
done = "#" + donetable.join("");
|
||||
|
||||
return done;
|
||||
}
|
||||
|
||||
function get(name) {
|
||||
// Condensed format for document.getX
|
||||
var elements = [];
|
||||
if(document.getElementsByClassName(name).length > 0) {
|
||||
elements = document.getElementsByClassName(name);
|
||||
}
|
||||
else if(document.getElementsByTagName(name).length > 0) {
|
||||
for(var a = 0; a < document.getElementsByTagName(name).length; a++) {
|
||||
elements.push(document.getElementsByTagName(name)[a]);
|
||||
}
|
||||
}
|
||||
else if(document.getElementById(name) != null) {
|
||||
elements.push(document.getElementById(name));
|
||||
}
|
||||
|
||||
if(elements.length == 1) {
|
||||
return elements[0];
|
||||
} else { return elements; }
|
||||
}
|
||||
|
||||
function deleteElem (id) {
|
||||
var element = document.getElementById(id);
|
||||
elem.parentNode.removeChild(element);
|
||||
|
||||
}
|
||||
|
||||
function deleteCookie(setting) {
|
||||
// Sets expiration date to past date, deleting cookie automatically
|
||||
document.cookie = setting+"=; expires=Thu, 01 Jan 2000 00:00:00 GMT";
|
||||
}
|
||||
|
||||
function getRanges() {
|
||||
// Format of ranges is [Min, Max, Range]
|
||||
for(var i = 1; i < choices[1].length; i++) { // Possible data types are options except for category
|
||||
var option = choices[1][i];
|
||||
if(i == 7 || i == 8) {
|
||||
ranges[option] = {};
|
||||
for(var j = 0; j < 3; j++) { // Units for temperatures
|
||||
var unit = choices[3][j];
|
||||
var min = Math.min.apply(null,info[option][unit]);
|
||||
var max = Math.max.apply(null,info[option][unit]);
|
||||
var range = max - min;
|
||||
ranges[option][unit] = [min,max,range];
|
||||
}
|
||||
} else {
|
||||
var min = Math.min.apply(null,info[option]);
|
||||
var max = Math.max.apply(null,info[option]);
|
||||
var range = max - min;
|
||||
ranges[option] = [min,max,range];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function balanceEquation(reactant, product) {
|
||||
var compounds = [];
|
||||
var vary = [];
|
||||
var matrix = [];
|
||||
var freeMatrix = [];
|
||||
var finalMatrix = [];
|
||||
|
||||
// Create array from inputs.
|
||||
formulaStr = reactant + "+" + product;
|
||||
compounds = formulaStr.replace(/\s/g,"").split("+");
|
||||
|
||||
// Create element matrix list.
|
||||
for(var i = 0; i < compounds.length; i++) {
|
||||
var counter = 0;
|
||||
var indexes = [];
|
||||
|
||||
currString = compounds[i];
|
||||
compounds[i] = [compounds[i]];
|
||||
|
||||
while(counter < currString.length) {
|
||||
if(currString[counter] == currString[counter].toUpperCase() && isNaN(currString[counter])) {
|
||||
indexes.push(counter);
|
||||
}
|
||||
counter += 1;
|
||||
}
|
||||
|
||||
indexes.push(currString.length);
|
||||
|
||||
for(var j = 0; j < indexes.length-1; j++) {
|
||||
element = currString.substring(indexes[j],indexes[j+1]);
|
||||
elementNoNum = element.replace(/[0-9]/g,"");
|
||||
|
||||
if(vary.indexOf(elementNoNum) == -1 && elementNoNum != '(' && elementNoNum != ')') {
|
||||
vary.push(elementNoNum);
|
||||
}
|
||||
|
||||
if(element.search(/[0-9]/g) != -1) {
|
||||
compounds[i].push([elementNoNum,parseInt(element.replace(/\D/g,""))]);
|
||||
} else {
|
||||
compounds[i].push([elementNoNum,1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Parenthesis handling.
|
||||
for(var r = 0; r < compounds.length; r++) {
|
||||
var s = 1;
|
||||
while(s < compounds[r].length) {
|
||||
if(compounds[r][s][0] == "(") {
|
||||
var count = 1;
|
||||
var v = s;
|
||||
|
||||
while(count > 0) {
|
||||
v++;
|
||||
if(compounds[r][v][0] == "(") count++;
|
||||
if(compounds[r][v][0] == ")") count--;
|
||||
}
|
||||
|
||||
var curr = compounds[r];
|
||||
var times = curr[v][1];
|
||||
var before = curr.splice(0,s);
|
||||
var mid = curr.splice(1,v-1-before.length);
|
||||
|
||||
var ae = 0;
|
||||
var open = 0;
|
||||
|
||||
while(ae < curr.length) {
|
||||
if(curr[ae][0] == "(") {
|
||||
open++;
|
||||
if(open == 1) curr.splice(ae,ae+1);
|
||||
} else if(curr[ae][0] == ")") {
|
||||
open--;
|
||||
if(open === 0) curr.splice(ae,ae+1);
|
||||
break;
|
||||
} else {
|
||||
ae++;
|
||||
}
|
||||
}
|
||||
var after = curr;
|
||||
for(var ab = 0; ab < mid.length; ab++) {
|
||||
if(times > 1) {
|
||||
mid[ab][1] *= times;
|
||||
before.push(mid[ab]);
|
||||
} else {
|
||||
before.push(mid[ab]);
|
||||
}
|
||||
}
|
||||
if(after !== 0) {
|
||||
for(var ac = 0; ac < after.length; ac++) {
|
||||
before.push(after[ac]);
|
||||
}
|
||||
}
|
||||
compounds[r] = before;
|
||||
s=0;
|
||||
}
|
||||
s++;
|
||||
}
|
||||
}
|
||||
|
||||
// Create matrix.
|
||||
for(var x = 0; x < vary.length; x++) {
|
||||
matrix[x] = [];
|
||||
for(var y = 0; y < compounds.length; y++) {
|
||||
var pushed = false;
|
||||
for(var z = 1; z < compounds[y].length; z++) {
|
||||
if(compounds[y][z][0] == vary[x]) {
|
||||
matrix[x].push(compounds[y][z][1]);
|
||||
pushed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!pushed) {
|
||||
matrix[x].push(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get Reduced Row Echelon Form.
|
||||
var lead = 0;
|
||||
var rows = matrix.length;
|
||||
var columns = matrix[0].length;
|
||||
|
||||
for(var a = 0; a < rows; a++) {
|
||||
var breakOut = false;
|
||||
if(columns <= lead) {
|
||||
break;
|
||||
}
|
||||
var e = a;
|
||||
while(matrix[e][lead] === 0) {
|
||||
e++;
|
||||
if(rows == e) {
|
||||
e = a;
|
||||
lead++;
|
||||
if(columns == lead) {
|
||||
breakOut = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(breakOut) break;
|
||||
|
||||
var tmp = matrix[e];
|
||||
matrix[e] = matrix[a];
|
||||
matrix[a] = tmp;
|
||||
|
||||
var val = matrix[a][lead];
|
||||
for(var b = 0; b < columns; b++) {
|
||||
matrix[a][b] /= val;
|
||||
}
|
||||
|
||||
for(var c = 0; c < rows; c++) {
|
||||
if (c == a) continue;
|
||||
val = matrix[c][lead];
|
||||
for(var d = 0; d < columns; d++) {
|
||||
matrix[c][d] -= val * matrix[a][d];
|
||||
}
|
||||
}
|
||||
lead++;
|
||||
}
|
||||
|
||||
// Remove redundant lines.
|
||||
for(var r = 0; r < matrix.length; r++) {
|
||||
var splice = true;
|
||||
for(var q = 0; q < matrix[0].length; q++) {
|
||||
if(matrix[r][q] === 0 && splice === false) {
|
||||
splice = true;
|
||||
} else {
|
||||
splice = false;
|
||||
}
|
||||
}
|
||||
if(splice) {
|
||||
matrix.splice(r,r+1);
|
||||
r = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Extract free matrix.
|
||||
var rank = matrix.length;
|
||||
for(var m = 0; m < rank; m++) {
|
||||
freeMatrix[m] = [];
|
||||
for(var n = rank; n < matrix[0].length; n++) {
|
||||
freeMatrix[m].push(-1*matrix[m][n]);
|
||||
}
|
||||
}
|
||||
|
||||
// Adding identity matrix.
|
||||
for(var e = 0; e < compounds.length-freeMatrix.length; e++) {
|
||||
freeMatrix.push([]);
|
||||
for(var f = 0; f < compounds.length-rank; f++) {
|
||||
if((f/2) == parseInt(f/2)) {
|
||||
freeMatrix[e+rank].push(1);
|
||||
} else {
|
||||
freeMatrix[e+rank].push(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Adding and converting into 1 column/row.
|
||||
for(var o = 0; o < freeMatrix.length; o++) {
|
||||
var value = 0;
|
||||
for(var p = 0; p< freeMatrix[0].length; p++) {
|
||||
value += freeMatrix[o][p];
|
||||
}
|
||||
finalMatrix.push(value);
|
||||
}
|
||||
|
||||
// Multiply all to integers.
|
||||
var mul = 1;
|
||||
var testMul = 1;
|
||||
|
||||
for(var g = 0; g < finalMatrix.length; g++) {
|
||||
var testInt = finalMatrix[g] * testMul;
|
||||
while(testInt != parseInt(testInt)) {
|
||||
testMul += 1;
|
||||
testInt = finalMatrix[g] * testMul;
|
||||
}
|
||||
if(testMul < mul) {
|
||||
mul = testMul;
|
||||
}
|
||||
}
|
||||
|
||||
for(var h = 0; h < finalMatrix.length; h++) {
|
||||
finalMatrix[h] *= testMul;
|
||||
}
|
||||
|
||||
// Get GCD.
|
||||
var gcd;
|
||||
|
||||
for(var u = 0; u < finalMatrix.length-1; u++) {
|
||||
gcd = getGCD(finalMatrix[u], finalMatrix[u+1]);
|
||||
|
||||
}
|
||||
|
||||
// Get final answers.
|
||||
for(var w = 0; w < finalMatrix.length; w++) {
|
||||
finalMatrix[w] /= gcd;
|
||||
finalMatrix[w] = Math.abs(finalMatrix[w]);
|
||||
if(finalMatrix[w] != 1) {
|
||||
finalMatrix[w] += compounds[w][0];
|
||||
} else {
|
||||
finalMatrix[w] = compounds[w][0];
|
||||
}
|
||||
}
|
||||
|
||||
return finalMatrix;
|
||||
}
|
||||
|
||||
function getGCD(a,b) {
|
||||
if(!b) return a;
|
||||
return getGCD(b, a % b);
|
||||
}
|
||||
129
atoms/js/update.js
Normal file
@ -0,0 +1,129 @@
|
||||
function changeTheme(type) {
|
||||
// Changes background image
|
||||
get("body").style.backgroundImage = "url('./resources/static/" + type +".png')";
|
||||
get("body").style.color = themeChart["font"][type];
|
||||
// Changes interface element colors
|
||||
for(var i = 0; i < get("pulltab").length; i++) {
|
||||
get("pulltab")[i].style.backgroundColor = themeChart["pulltab"][type];
|
||||
get("pulltab")[i].style.color = themeChart["font"][type].replace(")",",0)");
|
||||
get("pulltab")[i].onmouseover = function() {
|
||||
this.style.color = themeChart["font"][type].replace(")",",1)").replace("b","ba");
|
||||
}
|
||||
get("pulltab")[i].onmouseleave = function() {
|
||||
this.style.color = themeChart["font"][type].replace(")",",0)").replace("b","ba");
|
||||
}
|
||||
get("sidebar")[i].style.backgroundColor = themeChart["sidebar"][type];
|
||||
}
|
||||
|
||||
for(var i = 0; i < get("selection").length; i++) {
|
||||
get("selection")[i].style.color = themeChart["font"][type];
|
||||
}
|
||||
}
|
||||
|
||||
function tableTheme(theme) {
|
||||
for(var i = 0;i < elementCount;i++) {
|
||||
// Changes background color of each cell
|
||||
if (document.getElementsByClassName("periodictable").length != 0) {
|
||||
var index = get("periodictable")[info["location"][i]];
|
||||
index.style.backgroundColor = getColor(theme, i);
|
||||
|
||||
if(theme == "category") {
|
||||
index.childNodes[2].childNodes[0].nodeValue = "";
|
||||
} else if(theme == "melting" || theme == "boiling") {
|
||||
temperatureValue = info[theme][settings["unit"]][i];
|
||||
if(temperatureValue != null) {
|
||||
index.childNodes[2].childNodes[0].nodeValue = temperatureValue + "°";
|
||||
}
|
||||
|
||||
} else {
|
||||
index.childNodes[2].childNodes[0].nodeValue = info[theme][i];
|
||||
}
|
||||
}
|
||||
}
|
||||
try {lastElement.click();} catch(err){} // Last selection still selected when changing themes
|
||||
}
|
||||
|
||||
function keyChange(theme) {
|
||||
if (document.getElementById("keylegend") != null) {
|
||||
var rowlength = 3;
|
||||
|
||||
document.getElementsByClassName("key")[0].removeChild(document.getElementById("keylegend"));
|
||||
|
||||
var index = choices[1].indexOf(theme);
|
||||
// Create Table
|
||||
var tbl = document.createElement('table');
|
||||
// id for CSS
|
||||
tbl.id = "keylegend";
|
||||
if(theme == "category") {
|
||||
tbl.style.top = "10%";
|
||||
tbl.style.left = "16.5%";
|
||||
}
|
||||
for (var i = 0; i < Object.keys(keyColors[index]).length; i+=rowlength) {
|
||||
var tr = tbl.insertRow();
|
||||
for (var x = 0; x < rowlength; x++) {
|
||||
if ((i + x) < Object.keys(keyColors[index]).length) {
|
||||
var keycolor = tr.insertCell();
|
||||
keycolor.className = "keycolor";
|
||||
keycolor.style.backgroundColor = keyColors[index][Object.keys(keyColors[index])[i + x]];
|
||||
|
||||
var keyname = tr.insertCell();
|
||||
keyvalue = document.createTextNode(Object.keys(keyColors[index])[i + x]);
|
||||
keyname.appendChild(keyvalue);
|
||||
keyname.className = "keyvalue";
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
get("key").appendChild(tbl);
|
||||
}
|
||||
}
|
||||
|
||||
function legendChange(theme) {
|
||||
var units = [""," pm"," g/mol", " kJ/mol"," kJ/mol", " eV", " g/mL", "", ""];
|
||||
|
||||
// Title
|
||||
if (get("tabletitle").length != 0) {
|
||||
var index = choices[1].indexOf(theme);
|
||||
if (units[index] != "") {
|
||||
var end = choicesDisplay[1][index] + " (" + units[index] + " )";
|
||||
} else {
|
||||
var end = choicesDisplay[1][index];
|
||||
}
|
||||
get("tabletitle").innerHTML = end;
|
||||
}
|
||||
|
||||
if (colorChart[theme].length != 2) {
|
||||
get("legendholder").style.display = "none";
|
||||
} else {
|
||||
get("legendholder").style.display = "";
|
||||
var color1 = colorChart[theme][0];
|
||||
var color2 = colorChart[theme][1];
|
||||
|
||||
if (theme === "melting" && "boiling") {
|
||||
var unit = settings["unit"];
|
||||
var newmin = ranges[theme][unit][0];
|
||||
var newmax = ranges[theme][unit][1];
|
||||
|
||||
if (unit != "K") {
|
||||
unit = "°" + unit;
|
||||
}
|
||||
newmin = newmin + " " + unit;
|
||||
newmax = newmax + " " + unit;
|
||||
|
||||
|
||||
} else {
|
||||
var newmin = ranges[theme][0] + " " + units[index];
|
||||
var newmax = ranges[theme][1] + " " + units[index];
|
||||
}
|
||||
|
||||
if (get("legend").length != 0) {
|
||||
|
||||
for(var j = 0; j <= 99; j ++) {
|
||||
get("legendcell")[j].style.backgroundColor = gradientColor(color1, color2 , j/100);
|
||||
}
|
||||
|
||||
get("minlegend").innerHTML = newmin;
|
||||
get("maxlegend").innerHTML = newmax;
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
atoms/resources/reactive/Ring1.gif
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
atoms/resources/reactive/Ring2.gif
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
atoms/resources/reactive/Ring3.gif
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
atoms/resources/reactive/Ring4.gif
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
atoms/resources/reactive/Ring5.gif
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
atoms/resources/reactive/Ring6.gif
Normal file
|
After Width: | Height: | Size: 90 KiB |
BIN
atoms/resources/reactive/Ring7.gif
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
atoms/resources/reactive/Ring8.gif
Normal file
|
After Width: | Height: | Size: 129 KiB |
BIN
atoms/resources/reactive/StableRing1.gif
Normal file
|
After Width: | Height: | Size: 110 KiB |
BIN
atoms/resources/reactive/StableRing2.gif
Normal file
|
After Width: | Height: | Size: 120 KiB |
BIN
atoms/resources/reactive/StableRing3.gif
Normal file
|
After Width: | Height: | Size: 114 KiB |
BIN
atoms/resources/reactive/StableRing4.gif
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
atoms/resources/reactive/StableRing5.gif
Normal file
|
After Width: | Height: | Size: 131 KiB |
BIN
atoms/resources/reactive/StableRing6.gif
Normal file
|
After Width: | Height: | Size: 147 KiB |
BIN
atoms/resources/reactive/StableRing7.gif
Normal file
|
After Width: | Height: | Size: 180 KiB |
BIN
atoms/resources/reactive/StableRing8.gif
Normal file
|
After Width: | Height: | Size: 183 KiB |
BIN
atoms/resources/static/dark.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
atoms/resources/static/favicon.ico
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
168
atoms/resources/static/info.json
Normal file
@ -0,0 +1,168 @@
|
||||
{
|
||||
"element": ["Hydrogen","Helium","Lithium","Beryllium","Boron","Carbon","Nitrogen","Oxygen","Fluorine","Neon",
|
||||
"Sodium","Magnesium","Aluminum","Silicon","Phosphorus","Sulfur","Chlorine","Argon","Potassium",
|
||||
"Calcium","Scandium","Titanium","Vanadium","Chromium","Manganese","Iron","Cobalt","Nickel","Copper",
|
||||
"Zinc","Gallium","Germanium","Arsenic","Selenium","Bromine","Krypton","Rubidium","Strontium","Yttrium",
|
||||
"Zirconium","Niobium","Molybdenum","Technetium","Ruthenium","Rhodium","Palladium","Silver","Cadmium",
|
||||
"Indium","Tin","Antimony","Tellurium","Iodine","Xenon","Cesium","Barium","Lanthanum","Cerium",
|
||||
"Praseodymium","Neodymium","Promethium","Samarium","Europium","Gadolinium","Terbium","Dysprosium",
|
||||
"Holmium","Erbium","Thulium","Ytterbium","Lutetium","Hafnium","Tantalum","Tungsten","Rhenium","Osmium",
|
||||
"Iridium","Platinum","Gold","Mercury","Thallium","Lead","Bismuth","Polonium","Astatine","Radon",
|
||||
"Francium","Radium","Actinium","Thorium","Protactinium","Uranium","Neptunium","Plutonium","Americium",
|
||||
"Curium","Berkelium","Californium","Einsteinium","Fermium","Mendelevium","Nobelium","Lawrencium",
|
||||
"Rutherfordium","Dubnium","Seaborgium","Bohrium","Hassium","Meitnerium","Darmstadtium","Roentgenium",
|
||||
"Copernicium","Ununtrium","Flerovium","Ununpentium","Livermorium","Ununseptium","Ununoctium"],
|
||||
"location":[0,17,18,19,30,31,32,33,34,35,36,37,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,
|
||||
72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,126,127,128,129,130,131,132,133,134,135,136,
|
||||
137,138,139,140,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,141,142,143,144,145,146,147,
|
||||
148,149,150,151,152,153,154,155,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125],
|
||||
"shorthand": ["H","He","Li","Be","B","C","N","O","F","Ne","Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca","Sc","Ti","V",
|
||||
"Cr","Mn","Fe","Co","Ni","Cu","Zn","Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr","Nb","Mo","Tc",
|
||||
"Ru","Rh","Pd","Ag","Cd","In","Sn","Sb","Te","I","Xe","Cs","Ba","La","Ce","Pr","Nd","Pm","Sm","Eu","Gd",
|
||||
"Tb","Dy","Ho","Er","Tm","Yb","Lu","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg","Tl","Pb","Bi","Po","At",
|
||||
"Rn","Fr","Ra","Ac","Th","Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm","Md","No","Lr","Rf","Db","Sg",
|
||||
"Bh","Hs","Mt","Ds","Rg","Cn","Uut","Fl","Uup","Lv","Uus","Uuo"],
|
||||
|
||||
"atomRadi": [53,31,167,112,87,67,56,48,42,38,190,145,118,111,98,88,79,71,243,194,184,176,171,166,161,156,152,149,
|
||||
145,142,136,125,114,103,94,88,265,219,212,206,198,190,183,178,173,168,165,161,156,145,133,123,115,108,
|
||||
298,253,null,null,247,206,205,238,231,233,225,228,226,226,222,222,217,208,200,193,188,185,180,177,174,
|
||||
171,156,154,143,135,127,120,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
|
||||
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],
|
||||
"moleWeig": [1.008,4.00026,6.94,9.0122,10.81,12.011,14.007,15.999,18.998,20.180,22.990,24.305,26.982,28.085,30.974,
|
||||
32.06,35.45,39.948,39.098,40.078,44.956,47.867,50.942,51.996,54.938,55.845,58.993,58.693,63.546,65.38,69.723,
|
||||
72.630,74.922,78.97,79.904,83.798,85.468,87.62,88.906,91.224,92.906,95.95,98,101.07,102.91,106.42,107.87,
|
||||
112.41,114.82,118.71,121.76,127.60,126.90,131.29,132.91,137.33,138.91,140.12,140.91,144.24,145,150.36,
|
||||
151.96,157.25,158.93,162.50,164.93,167.26,168.93,173.05,174.97,178.49,180.95,183.84,186.21,190.23,192.22,
|
||||
195.08,196.97,200.59,204.38,207.2,208.98,209,210,222,223,226,227,232.04,231.04,238.03,237,244,243,247,247,
|
||||
251,252,257,258,259,262,265,268,271,270,277,276,281,280,285,286,289,289,293,294,294],
|
||||
"ioniEner": [1312.0,2372.3,520.2,899.5,800.6,1086.5,1402.3,1313.9,1681.0,2080.7,495.8,737.7,577.5,786.5,1011.8,999.6,
|
||||
1251.2,1520.6,418.8,589.8,633.1,658.8,650.9,652.9,717.3,762.5,760.4,737.1,745.5,906.4,578.8,762.2,944.5,
|
||||
941.0,1139.9,1350.8,403.0,549.5,599.9,640.1,652.1,684.3,702,710.2,719.7,804.4,731.0,867.8,558.3,708.6,
|
||||
830.6,869.3,1008.4,1170.3,375.7,502.9,538.1,534.4,528.1,533.1,538.6,544.5,547.1,593.4,565.8,573.0,581.0,
|
||||
589.3,596.7,603.4,523.5,658.5,728.4,758.8,755.8,814.2,865.2,864.4,890.1,1007.1,589.4,715.6,703.0,812.1,null,
|
||||
1037.1,393.0,509.3,498.8,608.5,568,597.6,604.5,581.5,576.4,578.1,598.0,606.1,619,627,635,642,472.8,580,
|
||||
null,null,null,null,null,null,null,null,null,null,null,null,null,null],
|
||||
"elecAffi": [72.8,0,59.6,0,27.0,121.8,0,141.0,328.2,0,52.9,0,41.8,134.1,72.0,200.4,348.6,0,48.4,2.4,18,8,51,65.2,0,
|
||||
15,64,111.7,119.2,0,40,118.9,78,195.0,324.5,0,46.9,5.0,30,41,86,72.1,60,101.0,110.3,54.2,125.9,0,39,
|
||||
107.3,101.1,190.2,295.2,0,45.5,14.0,45,null,null,null,null,null,null,null,null,null,null,null,null,null
|
||||
,null,0,31,79,20,104.0,150.9,205.0,222.7,0,37,35,90.9,180,270,0,null,null,null,null,null,null,null,null,
|
||||
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
|
||||
null,null,null],
|
||||
"elecNega": [2.20,null,0.98,1.57,2.04,2.55,3.04,3.44,3.98,null,0.93,1.31,1.61,1.90,2.19,2.58,3.16,null,0.82,1.00,1.36,
|
||||
1.54,1.63,1.66,1.55,1.83,1.88,1.91,1.90,1.65,1.81,2.01,2.18,2.55,2.96,3.00,0.82,0.95,1.22,1.33,1.6,2.16,
|
||||
1.9,2.2,2.28,2.20,1.93,1.69,1.78,1.96,2.05,2.1,2.66,2.60,0.79,0.89,1.1,1.12,1.13,1.14,1.13,1.17,1.2,1.2,
|
||||
1.1,1.22,1.23,1.24,1.25,1.1,1.27,1.3,1.5,2.36,1.9,2.2,2.20,2.28,2.54,2.00,1.62,2.33,2.02,2.0,2.2,2.2,0.7,
|
||||
0.9,1.1,1.3,1.5,1.38,1.36,1.28,1.13,1.28,1.3,1.3,1.3,1.3,1.3,1.3,1.291,null,null,null,null,null,null,null,
|
||||
null,null,null,null,null,null,null,null],
|
||||
"phase" : ["g","g","s","s","s","s","g","g","g","g","s","s","s","s","s","s","g","g","s","s","s","s","s","s","s","s","s",
|
||||
"s","s","s","s","s","s","s","l","g","s","s","s","s","s","s","s","s","s","s","s","s","s","s","s","s","s","g",
|
||||
"s","s","s","s","s","s","s","s","s","s","s","s","s","s","s","s","s","s","s","s","s","s","s","s","s","l","s","s",
|
||||
"s","s","s","g","s","s","s","s","s","s","s","s","s","s","s","s","s",null,null,null,null,null,null,null,null,
|
||||
null,null,null,null,null,null,null,null,null,null,null],
|
||||
"density" : [0.0000899,0.0001785,0.535,1.848,2.46,2.26,0.001251,0.001429,0.001696,0.9,0.968,1.738,2.7,2.33,1.823,1.96,
|
||||
0.003214,0.001784,0.856,1.55,2.985,4.507,6.11,7.14,7.47,7.874,8.9,8.908,8.92,7.14,5.904,5.323,5.727,4.819,
|
||||
3.12,0.00375,1.532,2.63,4.472,6.511,8.57,10.28,11.5,12.37,12.45,12.023,10.49,8.65,7.31,7.31,6.697,6.24,4.94,0.0059,
|
||||
1.879,3.51,6.146,6.689,6.64,7.01,7.264,7.353,5.244,7.901,8.219,8.551,8.795,9.066,9.321,6.57,9.841,13.31,16.65,
|
||||
19.25,21.02,22.61,22.65,21.09,19.3,13.534,11.85,11.34,9.78,9.196,null,0.00973,null,5,10.07,11.724,15.37,19.05,
|
||||
20.45,19.816,null,13.51,14.78,15.1,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
|
||||
null,null,null,null,null],
|
||||
"melting": {
|
||||
"K": [14.01,0.95,453.65,1560,2348,3823,63.15,54.36,53.53,24.56,370.95,923,933.437,1687,317.3,388.36,171.65,
|
||||
83.8,336.53,1115,1814,1941,2183,2180,1519,1811,1768,1728,1357.77,692.68,302.9146,1211.4,1090,494,265.95,
|
||||
115.79,312.46,1050,1799,2128,2750,2896,2430,2607,2237,1828.05,1234.93,594.22,429.75,505.08,903.78,722.66,
|
||||
386.85,161.4,301.59,1000,1193,1071,1208,1297,1315,1345,1095,1585,1629,1685,1734,1802,1818,1097,1936,2506,
|
||||
3290,3695,3459,3306,2719,2041.4,1337.33,234.32,577,600.61,544.55,527,575,202,null,973,1323,2115,1841,1405.3,
|
||||
null,912.5,1449,1613,1323,1173,1133,1800,1100,1100,1900,null,null,null,null,null,null,null,null,null,null,
|
||||
null,null,null,null,null],
|
||||
"C": [-259.14,-272.2,180.5,1287,2075,3550,-210,-218.79,-219.62,-248.59,97.8,650,660.323,1414,44.2,115.21,-101.5,
|
||||
-189.35,63.38,842,1541,1668,1910,1907,1246,1538,1495,1455,1084.62,419.53,29.7646,938.25,817,221,-7.2,-157.36,
|
||||
39.31,777,1526,1855,2477,2623,2157,2334,1964,1554.9,961.78,321.07,156.6,231.93,630.63,449.51,113.7,-111.7,
|
||||
28.44,727,920,798,935,1024,1042,1072,822,1312,1356,1412,1461,1529,1545,824,1663,2233,3017,3422,3186,3033,
|
||||
2446,1768.3,1064.18,-38.83,304,327.46,271.4,254,302,-71.15,null,700,1050,1842,1568,1132.2,null,639.4,1176,
|
||||
1340,1050,900,860,1527,827,827,1627,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
|
||||
null],
|
||||
"F": [-434.45203,-458,356.9,2349,3767,6422,-346,-361.82,-363.32,-415.46,208.04,1202,1220.581,2577,111.6,239.38,-150.7,
|
||||
-308.83,146.08,1548,2806,3034,3470,3465,2275,2800,2723,2651,1984.32,787.15,85.5763,1720.85,1503,430,19,-251.25,
|
||||
102.76,1431,2779,3371,4491,4753,3915,4233,3567,2830.82,1763.2,609.93,313.88,449.47,1167.13,841.12,236.66,-169.1,
|
||||
83.19,1341,1688,1468,1715,1875,1908,1962,1512,2394,2473,2574,2662,2784,2813,1515,3025,4051,5463,6192,5767,5491,
|
||||
4435,3214.9,1947.52,-37.89,579,621.43,520.52,489,576,-96,null,1292,1922,3348,2854,2070,null,1182.9,2149,2444,
|
||||
1922,1652,1580,2781,1521,1521,2961,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]
|
||||
},
|
||||
"boiling": {
|
||||
"K": [20.28,4.22,1615,2744,4273,4098,77.36,90.2,85.03,27.07,1156,1363,2792,3538,550,717.8,239.11,87.3,1032,1757,3109,
|
||||
3560,3680,2944,2334,3134,3200,3186,2835,1180,2477,3106,887,958,331.95,119.93,961,1655,3609,4682,5017,4912,4538,
|
||||
4423,3968,3236,2435,1040,2345,2875,1860,1261,457.4,165.03,944,2170,3737,3697,3793,3347,3273,2067,1802,3546,3503,
|
||||
2840,2993,3141,2223,1469,3675,4876,5731,5828,5869,5285,4701,4098,3129,629.88,1746,2022,1837,1235,null,211.3,null,
|
||||
2010,3471,5061,null,4404,null,3505,2284,3383,null,null,null,null,null,null,null,null,null,null,null,null,null,
|
||||
null,null,null,null,null,null,null,null,null],
|
||||
"C": [-252.87,-268.93,1342,2471,4000,3825,-195.79,-182.95,-188.12,-246.08,883,1090,2519,3265,277,444.6,-34.04,-185.85,
|
||||
759,1484,2836,3287,3407,2671,2061,2861,2927,2913,2562,907,2204,2833,614,685,58.8,-153.22,688,1382,3336,4409,4744,
|
||||
4639,4265,4150,3695,2963,2162,767,2072,2602,1587,988,184.3,-108.12,671,1897,3464,3424,3520,3074,3000,1794,1529,
|
||||
3273,3230,2567,2720,2868,1950,1196,3402,4603,5458,5555,5596,5012,4428,3825,2856,356.73,1473,1749,1564,962,null,
|
||||
-61.85,null,1737,3198,4788,null,4131,null,3228,2011,3110,null,null,null,null,null,null,null,null,null,null,null,
|
||||
null,null,null,null,null,null,null,null,null,null,null],
|
||||
"F":[-423.17,-452.07,2448,4480,7232,6917,-320.42,-297.31,-306.62,-410.94,1621,1994,4566,5909,531,832.3,-29.27,-302.53,
|
||||
1398,2703,5136,5949,6165,4840,3742,5182,5301,5275,4644,907,3999,5131,1137,1265,137.8,-243.8,1270,2520,6037,7968,
|
||||
8571,8382,7709,7502,6683,5365,3924,1413,3762,4716,2889,1810,363.7,-162.62,1240,3447,6267,6195,6368,5565,5432,3261,
|
||||
2784,5923,5846,4653,4928,5194,3542,2185,6156,8317,9856,10031,10105,9054,8002,6917,5173,674.11,2683,3180,2847,1764,
|
||||
null,-79.1,null,3159,5788,8650,null,7468,null,5842,3652,5630,null,null,null,null,null,null,null,null,null,null,null,
|
||||
null,null,null,null,null,null,null,null,null,null,null]
|
||||
},
|
||||
"color": ["c","c","s","sg","b","b","c","c","c","c","s","s","s","g","c","y","y","c","s","s","s","s","s","s","s","g","g",
|
||||
"g","Copper","sg","s","g","s","g","Red","c","s","s","s","s","g","g","s","s","s","s","s","s","s","s","s","s","sg",
|
||||
"c","s","s","s","s","s","s","s","s","s","s","s","s","s","s","s","s","s","g","g","g","g","sg","s","g","Gold","s","s","sg",
|
||||
"g","s","s","c","s","s","s","s","s","s","s","s","s","s",null,null,null,null,null,null,null,null,null,null,
|
||||
null,null,null,null,null,null,null,null,null,null,null,null],
|
||||
"oxidStat": [["-1","b+1"],null,["b+1"],["+1","b+2"],["-5,","-1","+1","+2","b+3"],["b-4","b-3","b-2","b-1","b+1","b+2","b+3","b+4"],["b-3","-2","-1","+1","+2","b+3","+4","b+5"],
|
||||
["b-2","-1","+1","+2"],["b-1"],null,["-1","b+1"],["+1","b+2"],["-2","-1","+1","+2","b+3"],["b-4","-3","-2","-1","+1","+2","+3","b+4"],["b-3","-2","-1","+1","+2","b+3","+4","b+5"],
|
||||
["b-2","-1","+1","b+2","+3","b+4","+5","b+6"],["b-1","b+1","+2","b+3","+4","b+5","+6","b+7"],null,["-1","b+1"],["-1","+1","b+2"],
|
||||
["+1","+2","b+3"],["-2","-1","+1","+2","+3","b+4"],["-3","-1","+1","+2","+3","+4","b+5"],["-4","-2","-1","+1","+2","b+3","+4","+5","b+6"],
|
||||
["-3","-2","-1","+1","b+2","+3","b+4","+5","+6","b+7"],["-4","-2","-1","+1","b+2","b+3","+4","+5","b+6"],["-3","-1","+1","b+2","b+3","+4","+5"],
|
||||
["-2","-1","+1","b+2","+3","+4"],["-2","+1","b+2","+3","+4"],["-2","+1","b+2"],["-5","-4","-2","-1","+1","+2","b+3"],["b-4","-3","-2","-1","+1","b+2","+3","b+4"],
|
||||
["b-3","-2","-1","+1","+2","b+3","+4","b+5"],["b-2","-1","+1","b+2","+3","b+4","+5","b+6"],["b-1","b+1","b+3","+4","b+5","b+7"],["b+2"],
|
||||
["-1","b+1"],["+1","b+2"],["+1","+2","b+3"],["-2","+1","+2","+3","b+4"],["-3","-1","+1","+2","+3","+4","b+5"],
|
||||
["-4","-2","-1","+1","+2","+3","b+4","+5","b+6"],["-3","-1","+1","+2","+3","b+4","+5","+6","b+7"],["-4","-2","+1","+2","b+3","b+4","+5","+6","+7","+8"],
|
||||
["-3","-1","+1","+2","b+3","+4","+5","+6"],["+1","b+2","+3","b+4","+5","+6"],["-2","-1","b+1","+2","+3","+4"],["-2","+1","b+2"],
|
||||
["-5","-2","-1","+1","+2","b+3"],["b-4","-3","-2","-1","+1","b+2","+3","b+4"],["b-3","-2","-1","+1","+2","b+3","+4","b+5"],["b-2","-1","+1","b+2","+3","b+4","+5","b+6"],
|
||||
["b-1","b+1","b+3","+4","b+5","+6","b+7"],["b+2","b+4","b+6","+8"],["-1","b+1"],["+1","b+2"],["+1","+2","b+3"],
|
||||
["+2","b+3","b+4"],["+2","b+3","+4"],["+2","b+3","+4"],["+2","b+3"],["+2","b+3"],["b+2","b+3"],["+1","+2","b+3"],
|
||||
["+1","+2","b+3","+4"],["+2","b+3","+4"],["+2","b+3"],["+2","b+3"],["+2","b+3"],["+2","b+3"],["+2","b+3"],
|
||||
["-2","+1","+2","+3","b+4"],["-3","-1","+1","+2","+3","+4","b+5"],["-4","-2","-1","+1","+2","+3","b+4","+5","b+6"],
|
||||
["-3","-1","+1","+2","+3","b+4","+5","+6","+7"],["-4","-2","-1","+1","+2","+3","b+4","+5","+6","+7","+8"],
|
||||
["-3","-1","+1","+2","b+3","b+4","+5","+6","+7","+8"],["-3","-2","-1","+1","b+2","+3","b+4","+5","+6"],
|
||||
["-3","-2","-1","+1","+2","b+3","+5"],["-2","b+1","b+2","+4"],["-5","-2","-1","b+1","+2","b+3"],["-4","-2","-1","+1","b+2","+3","b+4"],
|
||||
["-3","-2","-1","+1","+2","b+3","+4","+5"],["b-2","b+2","b+4","+5","+6"],["b-1","b+1","+3","+5","+7"],["b+2","+6"],["b+1"],
|
||||
["b+2"],["+2","b+3"],["+1","+2","+3","b+4"],["+2","+3","+4","b+5"],["+1","+2","+3","+4","+5","b+6"],
|
||||
["+2","+3","+4","b+5","+6","+7"],["+1","+2","+3","b+4","+5","+6","+7","+8"],["+2","b+3","+4","+5","+6","+7","+8"],
|
||||
["+2","b+3","+4","+6"],["+2","b+3","+4"],["+2","b+3","+4"],["+2","b+3","+4"],["+2","b+3"],["+2","b+3"],["b+2","+3"],
|
||||
["b+3"],["b+4"],["b+5"],["b+6"],["b+7"],["b+8"],null,null,null,null,null,null,null,null,null,null],
|
||||
"category": ["nm","ng","al","ae","md","nm","nm","nm","ha","ng","al","ae","bm","md","nm","nm","ha","ng","al","ae","tm",
|
||||
"tm","tm","tm","tm","tm","tm","tm","tm","tm","bm","md","md","nm","ha","ng","al","ae","tm","tm","tm","tm",
|
||||
"tm","tm","tm","tm","tm","tm","bm","bm","md","md","ha","ng","al","ae","tm","lh","lh","lh","lh","lh","lh",
|
||||
"lh","lh","lh","lh","lh","lh","lh","lh","tm","tm","tm","tm","tm","tm","tm","tm","tm","bm","bm","bm","md",
|
||||
"ha","ng","al","ae","tm","ac","ac","ac","ac","ac","ac","ac","ac","ac","ac","ac","ac","ac","ac","tm","tm",
|
||||
"tm","tm","tm","tm","tm","tm","tm","bm","bm","bm","bm","ha","ng"],
|
||||
"valeElec": [1,2,1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,2,2,2,2,2,2,2,2,2,2,3,4,5,6,7,8,1,2,2,2,2,2,2,2,2,2,2,2,3,4,5,
|
||||
6,7,8,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,6,7,8,1,2,2,2,2,2,2,2,2,2,2,2,2,2,
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,3,4,5,6,7,8],
|
||||
"elecConf": ["1s.1","1s.2","[He]2s.1","[He]2s.2","[He]2s.2.2p.1","[He]2s.2.2p.2","[He]2s.2.2p.3","[He]2s.2.2p.4",
|
||||
"[He]2s.2.2p.5","[He]2s.2.2p.6","[Ne]3s.1","[Ne]3s.2","[Ne]3s.2.3p.1","[Ne]3s.2.3p.2","[Ne]3s.2.3p.3",
|
||||
"[Ne]3s.2.3p.4","[Ne]3s.2.3p.5","[Ne]3s.2.3p.6","[Ar]4s.1","[Ar]4s.2","[Ar]3d.1.4s.2","[Ar]3d.2.4s.2",
|
||||
"[Ar]3d.3.4s.2","[Ar]3d.5.4s.1","[Ar]3d.5.4s.2","[Ar]3d.6.4s.2","[Ar]3d.7.4s.2","[Ar]3d.8.4s.2","[Ar]3d.10.4s.1",
|
||||
"[Ar]3d.10.4s.2","[Ar]3d.10.4s.2.4p.1","[Ar]3d.10.4s.2.4p.2","[Ar]3d.10.4s.2.4p.3","[Ar]3d.10.4s.2.4p.4",
|
||||
"[Ar]3d.10.4s.2.4p.5","[Ar]3d.10.4s.2.4p.6","[Kr]5s.1","[Kr]5s.2","[Kr]4d.1.5s.2","[Kr]4d.2.5s.2","[Kr]4d.4.5s.1",
|
||||
"[Kr]4d.5.5s.1","[Kr]4d.5.5s.2","[Kr]4d.7.5s.1","[Kr]4d.8.5s.1","[Kr]4d.10","[Kr]4d.10.5s.1","[Kr]4d.10.5s.2",
|
||||
"[Kr]4d.10.5s.2.5p.1","[Kr]4d.10.5s.2.5p.2","[Kr]4d.10.5s.2.5p.3","[Kr]4d.10.5s.2.5p.4","[Kr]4d.10.5s.2.5p.5",
|
||||
"[Kr]4d.10.5s.2.5p.6","[Xe]6s.1","[Xe]6s.2","[Xe]5d.1.6s.2","[Xe]4f.1.5d.1.6s.2","[Xe]4f.3.6s.2","[Xe]4f.4.6s.2",
|
||||
"[Xe]4f.5.6s.2","[Xe]4f.6.6s.2","[Xe]4f.7.6s.2","[Xe]4f.7.5d.1.6s.2","[Xe]4f.9.6s.2","[Xe]4f.10.6s.2",
|
||||
"[Xe]4f.11.6s.2","[Xe]4f.12.6s.2","[Xe]4f.13.6s.2","[Xe]4f.14.6s.2","[Xe]4f.14.5d.1.6s.2","[Xe]4f.14.5d.2.6s.2",
|
||||
"[Xe]4f.14.5d.3.6s.2","[Xe]4f.14.5d.4.6s.2","[Xe]4f.14.5d.5.6s.2","[Xe]4f.14.5d.6.6s.2","[Xe]4f.14.5d.7.6s.2","[Xe]4f.14.5d.9.6s.1","[Xe]4f.14.5d.10.6s.1","[Xe]4f.14.5d.10.6s.2","[Xe]4f.14.5d.10.6s.2.6p.1",
|
||||
"[Xe]4f.14.5d.10.6s.2.6p.2","[Xe]4f.14.5d.10.6s.2.6p.3","[Xe]4f.14.5d.10.6s.2.6p.4","[Xe]4f.14.5d.10.6s.2.6p.5",
|
||||
"[Xe]4f.14.5d.10.6s.2.6p.6","[Rn]7s.1","[Rn]7s.2","[Rn]6d.1.7s.2","[Rn]6d.2.7s.2","[Rn]5f.2.6d.1.7s.2",
|
||||
"[Rn]5f.3.6d.1.7s.2","[Rn]5f.4.6d.1.7s.2","[Rn]5f.6.7s.2","[Rn]5f.7.7s.2","[Rn]5f.7.6d.1.7s.2","[Rn]5f.9.7s.2",
|
||||
"[Rn]5f.10.7s.2","[Rn]5f.11.7s.2","[Rn]5f.12.7s.2","[Rn]5f.13.7s.2","[Rn]5f.14.7s.2","[Rn]5f.14.7s.2.7p.1",
|
||||
"[Rn]5f.14.6d.2.7s.2","[Rn]5f.14.6d.3.7s.2","[Rn]5f.14.6d.4.7s.2","[Rn]5f.14.6d.5.7s.2","[Rn]5f.14.6d.6.7s.2",
|
||||
"[Rn]5f.14.6d.7.7s.2","[Rn]5f.14.6d.9.7s.1","[Rn]5f.14.6d.10.7s.1","[Rn]5f.14.6d.10.7s.2","[Rn]5f.14.6d.10.7s.2.7p.1",
|
||||
"[Rn]5f.14.6d.10.7s.2.7p.2","[Rn]5f.14.6d.10.7s.2.7p.3","[Rn]5f.14.6d.10.7s.2.7p.4","[Rn]5f.14.6d.10.7s.2.7p.5",
|
||||
"[Rn]5f.14.6d.10.7s.2.7p.6"]
|
||||
}
|
||||
BIN
atoms/resources/static/light.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |