feature: add circuitjs
@@ -0,0 +1,339 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) 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
|
||||
this service 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 make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. 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.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
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
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the 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 a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE 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.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
||||
@@ -0,0 +1,233 @@
|
||||
# CircuitJS1
|
||||
|
||||
<p align="center">
|
||||
<img src="war/icon128.png" alt="CircuitJS1 logo" width="128" height="128">
|
||||
<br>
|
||||
<em>Electronic Circuit Simulator in the Browser</em>
|
||||
</p>
|
||||
|
||||
## Introduction
|
||||
|
||||
CircuitJS1 is an electronic circuit simulator that runs in the browser. It was originally written by Paul Falstad as a Java Applet. It was adapted by Iain Sharp to run in the browser using GWT.
|
||||
|
||||
For a hosted version of the application see:
|
||||
|
||||
* Paul's Page: [http://www.falstad.com/circuit/](http://www.falstad.com/circuit/)
|
||||
* Iain's Page: [http://lushprojects.com/circuitjs/](http://lushprojects.com/circuitjs/)
|
||||
* Development Branch Version: [https://pfalstad.github.io/circuitjs1/circuitjs.html](https://pfalstad.github.io/circuitjs1/circuitjs.html)
|
||||
|
||||
Thanks to: Edward Calver for 15 new components and other improvements; Rodrigo Hausen for file import/export and many other UI improvements; J. Mike Rollins for the Zener diode code; Julius Schmidt for the spark gap code and some examples; Dustin Soodak for help with the user interface improvements; Jacob Calvert for the T Flip Flop; Ben Hayden for scope spectrum; Thomas Reitinger, Krystian Sławiński, Usevalad Khatkevich, Lucio Sciamanna, Mauro Hemerly Gazzani, J. Miguel Silva, and Franck Viard for translations; Andre Adrian for improved emitter coupled oscillator; Felthry for many examples; Colin Howell for code improvements. LZString (c) 2013 pieroxy.
|
||||
|
||||
## Building the web application
|
||||
|
||||
The web application can be compiled and run locally using Eclipse, or in a cloud development container like Github Codespaces or gitpod.io. Both of these services provide a number of free usage hours every month. You can also use the cloud tools from `./dev.sh` on your local Linux machine or in a local docker container.
|
||||
|
||||
### Development using Eclipse
|
||||
|
||||
The tools you will need to build the project are:
|
||||
|
||||
* Eclipse, Oxygen version.
|
||||
* GWT plugin for Eclipse.
|
||||
|
||||
Install "Eclipse for Java developers" from [here](https://www.eclipse.org/downloads/packages/). To add the GWT plugin for Eclipse follow the instructions [here](https://gwt-plugins.github.io/documentation/gwt-eclipse-plugin/Download.html).
|
||||
|
||||
This repository is a project folder for your Eclipse project space. Once you have a local copy you can then build and run in development mode or build for deployment. Running in super development mode is done by clicking on the "run" icon on the toolbar and choosing http://127.0.0.1:8888/circuitjs.html from the "Development Mode" tab which appears. Building for deployment is done by selecting the project root node and using the GWT button on the Eclipse taskbar and choosing "GWT Compile Project...".
|
||||
|
||||
GWT will build its output in to the "war" directory. In the "war" directory the file "iframe.html" is loaded as an iFrame in to the spare space at the bottom of the right hand pannel. It can be used for branding etc.
|
||||
|
||||
### Development using cloud containers
|
||||
|
||||
1. Install [Visual Studio Code](https://code.visualstudio.com/) and the appropriate remote extension: either [Gitpod Extension](https://marketplace.visualstudio.com/items?itemName=gitpod.gitpod-desktop) or [Codespaces Extension](https://marketplace.visualstudio.com/items?itemName=GitHub.codespaces).
|
||||
2. Open your fork of the `circuitjs1` repository in your chosen provider's dev container.
|
||||
3. This should open a new tab in your browser showing VS Code. Click in the green button in the bottom left corner, then select "Open in VS Code Desktop" in the popup menu that opened. Click "Allow" in all URL popups and authenticate using github if asked.
|
||||
|
||||
Once you have successfully connected your local VS Code to the remote workspace, you should be able to see the content of the remote container in your local VS Code. You can now continue with the setup:
|
||||
|
||||
4. Open a shell inside the dev container by pressing `Ctrl+Backtick` or pressing `F1` and typing "Create new Terminal".
|
||||
5. Make sure you are in the folder `/workspaces/circuitjs1` inside the container (necessary only once per newly created container).
|
||||
6. Run `./dev.sh setup` to install all development dependencies, including GWT and Java.
|
||||
7. Run `./dev.sh start` to start the web server and the GWT code server. This will start two services: http://localhost:8000 and http://localhost:9876.
|
||||
8. Make sure both port and 8000 and 9876 are forwarded in the "Ports" tab (next to "Terminal").
|
||||
9. If you edit a Java file in VS Code and reload http://localhost:8000, it should recompile the file automatically. It will then load the compiled JavaScript and the corresponding source map from the code server running on http://localhost:9876. You should be able to see the your changes in the web application.
|
||||
|
||||
> ***Note:*** When running the web application server inside a remote dev container, port forwarding is necessary in order to access the remote server from your own computer. This port forwarding is provided by Visual Studio Code running on your local computer.
|
||||
>
|
||||
> Theoretically, it would be possible to use the browser-based VS Code interface. However, both Gitpod and Codespaces map forwarded ports to different domain names instead of different ports, which confuses the GWT code loader. It is possible to fix this by live-patching the `serverUrl` variable in `circuitjs1.nocache.js` using a custom HTTP server, but it also requires setting the port visibility to "Public" to avoid CORS errors due to redirects. Using a local installation of VS Code is much simpler.
|
||||
|
||||
### Development using Gradle
|
||||
|
||||
To build the application using gradle, do the following:
|
||||
|
||||
```bash
|
||||
# 1. Run Gradle build with verbose output:
|
||||
gradle compileGwt --console verbose --info
|
||||
# 2. Create the web-site directory from the build files:
|
||||
gradle makeSite --console verbose --info
|
||||
```
|
||||
|
||||
Now, just open `site/circuitjs.html` with your browser and enjoy!
|
||||
|
||||
You can do the same thing inside GitHub Codespaces. Then after creating the site directory, you can create a web server using:
|
||||
|
||||
```bash
|
||||
cd site
|
||||
python3 -m http.server
|
||||
```
|
||||
|
||||
Then go to the Ports tab, hover over the "Forwarded Address" and click "Follow Link". Then click `circuitjs.html` to view the application.
|
||||
|
||||
### Quick local test
|
||||
|
||||
The included `test.sh` script compiles, builds the site, and starts a local server in one step:
|
||||
|
||||
```bash
|
||||
./test.sh # builds and serves on port 8000
|
||||
./test.sh 9000 # use a custom port
|
||||
```
|
||||
|
||||
This opens `http://localhost:8000/circuitjs.html` in your browser automatically (macOS). The script finds Gradle via the wrapper (`./gradlew`), the system PATH, or `/tmp/gradle-8.7/`. Requires Python 3 for the HTTP server.
|
||||
|
||||
> **Note:** Gradle 8.7 is required (GWT plugin is incompatible with Gradle 9.x). If you don't have it installed, you can download it with:
|
||||
> ```bash
|
||||
> curl -sL https://services.gradle.org/distributions/gradle-8.7-bin.zip -o /tmp/g.zip && unzip -qo /tmp/g.zip -d /tmp
|
||||
> ```
|
||||
|
||||
## Deployment of the web application
|
||||
|
||||
* "GWT Compile Project..." as explained above or run `./dev.sh compile`. This will put the outputs in to the "war" directory in the Eclipse project folder. You then need to copy everything in the "war" directory, except the "WEB-INF" directory, on to your web server.
|
||||
* Customize the header of the file "circuitjs1.html" to include your tracking, favicon etc.
|
||||
* Customize the "iframe.html" file to include any branding you want in the right hand panel of the application
|
||||
* The optional file "shortrelay.php" is a server-side script to act as a relay to a URL shortening service to avoid cross-origin problems with a purely client solution. You may want to customize this for your site. If you don't want to use this feature edit the circuitjs1.java file before compiling.
|
||||
* If you wish to enable dropbox loading and saving a dropbox API app-key is needed. This should be edited in to the circuitjs.html file where needed. If this is not included the relevant features will be disabled.
|
||||
|
||||
|
||||
The link for the full-page version of the application is now:
|
||||
`http://<your host>/<your path>/circuitjs1.html`
|
||||
(you can rename the "circuitjs1.html" file if you want too though you should also update "shortrelay.php" if you do).
|
||||
|
||||
Just for reference the files should look like this
|
||||
|
||||
```
|
||||
-+ Directory containing the front page (eg "circuitjs")
|
||||
+- circuitjs.html - full page version of application
|
||||
+- iframe.html - see notes above
|
||||
+- shortrelay.php - see notes above
|
||||
++ circuitjs1 (directory)
|
||||
+- various files built by GWT
|
||||
+- circuits (directory, containing example circuits)
|
||||
+- setuplist.txt (index in to example circuit directory)
|
||||
```
|
||||
|
||||
## Docker/podman containers
|
||||
|
||||
### Building and Running Circuitjs in docker containers
|
||||
|
||||
*(replace the podman command with docker if you prefere docker)*
|
||||
|
||||
- To build Docker image using podman:
|
||||
|
||||
```
|
||||
podman build -f circuitjs1.Containerfile -t circuitjs1:latest
|
||||
```
|
||||
|
||||
- To then run Docker image using podman:
|
||||
|
||||
```
|
||||
podman run --name=circuitjs1 --rm -d -p 8000:8000 circuitjs1:latest
|
||||
```
|
||||
|
||||
CircuitJS1 should be accessable at: http://localhost:8000/circuitjs.html
|
||||
|
||||
|
||||
### Development using docker containers
|
||||
|
||||
(replace the podman command with docker if you prefere docker)
|
||||
|
||||
- To build the development Docker image using podman:
|
||||
|
||||
```
|
||||
podman build -f dev-start.Containerfile -t circuitjs1-dev:latest
|
||||
```
|
||||
|
||||
- To then run the development Docker image using podman:
|
||||
|
||||
```
|
||||
podman run --rm -it -p 127.0.0.1:8000:8000/tcp -p 127.0.0.1:9876:9876/tcp circuitjs1-dev:latest
|
||||
```
|
||||
|
||||
CircuitJS1 should be accessable at: http://localhost:8000/circuitjs.html
|
||||
|
||||
If you need to modify the files while the container is running (using the gwt auto-build method):
|
||||
|
||||
```
|
||||
podman run --rm -it -v $(pwd):/src:Z -p 127.0.0.1:8000:8000/tcp -p 127.0.0.1:9876:9876/tcp circuitjs1-dev:latest
|
||||
```
|
||||
|
||||
This will use the current directory inside the container.
|
||||
|
||||
|
||||
|
||||
## Embedding
|
||||
|
||||
You can link to the full page version of the application using the link shown above.
|
||||
|
||||
If you want to embed the application in another page then use an iframe with the src being the full-page version.
|
||||
|
||||
You can add query parameters to link to change the applications startup behaviour. The following are supported:
|
||||
```
|
||||
.../circuitjs.html?cct=<string> // Load the circuit from the URL (like the # in the Java version)
|
||||
.../circuitjs.html?ctz=<string> // Load the circuit from compressed data in the URL
|
||||
.../circuitjs.html?startCircuit=<filename> // Loads the circuit named "filename" from the "Circuits" directory
|
||||
.../circuitjs.html?startCircuitLink=<URL> // Loads the circuit from the specified URL. CURRENTLY THE URL MUST BE A DROPBOX SHARED FILE OR ANOTHER URL THAT SUPPORTS CORS ACCESS FROM THE CLIENT
|
||||
.../circuitjs.html?euroResistors=true // Set to true to force "Euro" style resistors. If not specified the resistor style will be based on the user's browser's language preferences
|
||||
.../circuitjs.html?IECGates=true // Set to true to force IEC logic gates. If not specified the gate style will be based on the user's browser's language preferences
|
||||
.../circuitjs.html?usResistors=true // Set to true to force "US" style resistors. If not specified the resistor style will be based on the user's browser's language preferences
|
||||
.../circuitjs.html?whiteBackground=<true|false>
|
||||
.../circuitjs.html?conventionalCurrent=<true|false>
|
||||
.../circuitjs.html?running=<true|false> // Start the app without the simulation running, default true
|
||||
.../circuitjs.html?hideSidebar=<true|false> // Hide the sidebar, default false
|
||||
.../circuitjs.html?hideMenu=<true|false> // Hide the menu, default false
|
||||
.../circuitjs.html?editable=<true|false> // Allow circuit editing, default true
|
||||
.../circuitjs.html?positiveColor=%2300ff00 // change positive voltage color (rrggbb)
|
||||
.../circuitjs.html?negativeColor=%23ff0000 // change negative voltage color
|
||||
.../circuitjs.html?selectColor=%2300ffff // change selection color
|
||||
.../circuitjs.html?currentColor=%23ffff00 // change current color
|
||||
.../circuitjs.html?mouseWheelEdit=<true|false> // allow changing of values by mouse wheel
|
||||
.../circuitjs.html?mouseMode=<item> // set the initial mouse mode. can also initially perform other UI actions, such as opening the 'about' menu, running 'importfromlocalfile', etc.
|
||||
.../circuitjs.html?hideInfoBox=<true|false>
|
||||
```
|
||||
The simulator can also interface with your javascript code. See [war/jsinterface.html](http://www.falstad.com/circuit/jsinterface.html) for an example.
|
||||
|
||||
## Building an Electron application
|
||||
|
||||
The [Electron](https://electronjs.org/) project allows web applications to be distributed as local executables for a variety of platforms. This repository contains the additional files needed to build circuitJS1 as an Electron application.
|
||||
|
||||
The general approach to building an Electron application for a particular platform is documented [here](https://electronjs.org/docs/tutorial/application-distribution). The following instructions apply this approach to circuit JS.
|
||||
|
||||
To build the Electron application:
|
||||
* Compile the application using GWT, as above.
|
||||
* Download and unpack a [pre-built Electron binary directory](https://github.com/electron/electron/releases) version 9.3.2 for the target platform.
|
||||
* Copy the "app" directory from this repository to the location specified [here](https://electronjs.org/docs/tutorial/application-distribution) in the Electron binary directory structure.
|
||||
* Copy the "war" directory, containing the compiled CircuitJS1 application, in to the "app" directory the Electron binary directory structure.
|
||||
* Run the "Electron" executable file. It should automatically load CircuitJS1.
|
||||
|
||||
Known limitations of the Electron application:
|
||||
* "Create short URL" on "Export as URL" doesn't work as it relies on server support.
|
||||
|
||||
Thanks to @Immortalin for the initial work in applying Electron to CircuitJS1.
|
||||
|
||||
## License
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
@@ -0,0 +1,63 @@
|
||||
<meta charset="UTF-8">
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial Unicode MS, Arial, sans-serif;
|
||||
font-size: small;
|
||||
}
|
||||
</style>
|
||||
<div>
|
||||
<p>Circuit Simulator version <span class="ver"></span>.</p>
|
||||
<p>Original by Paul Falstad.<br><a href="http://www.falstad.com/" target="_blank">http://www.falstad.com/</a></p>
|
||||
<p>JavaScript conversion by Iain Sharp.<br><a href="http://lushprojects.com/" target="_blank">http://lushprojects.com/</a></p>
|
||||
<p>GitHub link to report issues and view source code: <a href="https://github.com/pfalstad/circuitjs1" target="_blank">https://github.com/pfalstad/circuitjs1</a></p>
|
||||
<p>Thanks to: Edward Calver for 15 new components and other improvements;
|
||||
Rodrigo Hausen for file import/export and many other UI improvements;
|
||||
J. Mike Rollins for the Zener diode code;
|
||||
Julius Schmidt for the spark gap code and some examples;
|
||||
Dustin Soodak for help with the user interface improvements;
|
||||
Jacob Calvert for the T Flip Flop; Ben Hayden for scope spectrum;
|
||||
Francisco Campos for the DC Motor;
|
||||
Bill Collis for the thermistor and LDR;
|
||||
Mark McGarry for AVR8js support; Uri Shaked for AVR8js;
|
||||
Johannes Bauer for WebSocket support;
|
||||
Thomas Reitinger, Krystian Sławiński, Usevalad Khatkevich, Lucio Sciamanna, Mauro Hemerly Gazzani, J. Miguel Silva, Kristian Keilen, Linhart Jiří, Karel Kupa, Franck Viard, David Chen, Taisuke Fukuno, 肖国栋 (Gordon Shaw), 王逸伦, Pablo Sanz Martin for translations;
|
||||
Andre Adrian for improved emitter coupled oscillator; Felthry for many examples; Colin Howell for code improvements. LZString (c) 2013 pieroxy.</p>
|
||||
<p style="font-size:9px">This program uses free icons. For more information, please read the <a href="font/webfontlicense.html" target="_self">list of authors and licenses of these icons and webfonts</a>.</p>
|
||||
<p style="font-size:9px">This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.</p>
|
||||
<p style="font-size:9px">This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.</p>
|
||||
<p style="font-size:9px">For details of licensing see <a href="http://www.gnu.org/licenses/" target="_blank">http://www.gnu.org/licenses/</a>.</p>
|
||||
<p style="font-size:9px">Source code (Paul):<a href="https://github.com/pfalstad/circuitjs1" target="_blank">https://github.com/pfalstad/circuitjs1</a></p>
|
||||
<p style="font-size:9px">Source code (Iain):<a href="https://github.com/sharpie7/circuitjs1" target="_blank">https://github.com/sharpie7/circuitjs1</a></p>
|
||||
<p style="font-size:9px">
|
||||
Copyright (c) 1985-1991 The Regents of the University of California.
|
||||
All rights reserved.</p>
|
||||
<p style="font-size:9px">IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
|
||||
DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
|
||||
OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
|
||||
CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
|
||||
<p style="font-size:9px">THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
|
||||
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN
|
||||
"AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO PROVIDE
|
||||
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
|
||||
<p>canvas2svg: Copyright (c) 2014 Gliffy Inc.</p>
|
||||
|
||||
<p style="font-size:9px">
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</p>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
// Add version from versionString variable
|
||||
let versionString = document.querySelector('.ver');
|
||||
let verStr = sessionStorage.getItem('versionString');
|
||||
if (verStr == null) {
|
||||
versionString.textContent = "... ";
|
||||
} else {
|
||||
versionString.textContent = verStr;
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,183 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="manifest" href="/circuit/manifest.json">
|
||||
|
||||
<!-- Properties can be specified to influence deferred binding -->
|
||||
<meta name='gwt:property' content='locale=en_UK'>
|
||||
|
||||
|
||||
<!-- Titles are optional, but useful -->
|
||||
<title></title>
|
||||
|
||||
<style>
|
||||
.disabled {
|
||||
color: lightgray
|
||||
}
|
||||
.topSpace {
|
||||
margin-top: 12px;
|
||||
}
|
||||
.cursorPointer {
|
||||
cursor: default;
|
||||
}
|
||||
.cursorCross {
|
||||
cursor: crosshair;
|
||||
}
|
||||
|
||||
.cursorSplitter {
|
||||
cursor: row-resize;
|
||||
}
|
||||
|
||||
.gwt-MenuItem-disabled {
|
||||
color: lightgray;
|
||||
}
|
||||
.offScreen {
|
||||
position: absolute;
|
||||
right: 101%;
|
||||
overflow: hidden;
|
||||
}
|
||||
.gwt-Frame{
|
||||
scrolling="no";
|
||||
border: 0px !important;
|
||||
}
|
||||
|
||||
.gwt-MenuItem {
|
||||
font-size: 12px !important;
|
||||
}
|
||||
|
||||
.gwt-MenuBar-horizontal {
|
||||
font-size: 12px !important;
|
||||
}
|
||||
|
||||
.gwt-Label-selected {
|
||||
font-size: 1.3em;
|
||||
font-weight: 700;
|
||||
border-top: 1px solid black;
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
.gwt-Label-1off {
|
||||
color: DarkGray;
|
||||
}
|
||||
|
||||
.gwt-Label-2off {
|
||||
font-size:0.8em;
|
||||
color: LightGray;
|
||||
}
|
||||
|
||||
.gwt-Label-current {
|
||||
}
|
||||
|
||||
.gwt-Button.chbut {
|
||||
padding:3px;
|
||||
margin: 3px;
|
||||
}
|
||||
|
||||
.gwt-Button.chbut.chsel {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.gwt-Button.chbut-black {
|
||||
background: black;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.gwt-Button.chbut-white {
|
||||
background: white;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.gwt-TextBox.scalebox {
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
.gwt-Button.expand-but {
|
||||
line-height: 0;
|
||||
font-size: 13px;
|
||||
margin-right: 5px;
|
||||
border-radius:0px;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-bottom:1px;
|
||||
padding-top:0;
|
||||
margin-bottom:1px;
|
||||
background:gray;
|
||||
color:white;
|
||||
}
|
||||
|
||||
|
||||
.topButton-red {
|
||||
margin-top: 5px;
|
||||
margin-bottom: 5px;
|
||||
margin-left:5px;
|
||||
padding: 5px 7px;
|
||||
text-decoration: none;
|
||||
color: #ffffff;
|
||||
cursor: pointer;
|
||||
cursor: hand;
|
||||
font-size: small;
|
||||
background-color: #ff0000;
|
||||
border: 1px solid #bbb;
|
||||
border-bottom: 1px solid #a0a0a0;
|
||||
border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
}
|
||||
|
||||
.topButton {
|
||||
margin-top: 5px;
|
||||
margin-bottom: 5px;
|
||||
margin-left:5px;
|
||||
padding: 5px 7px;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
cursor: hand;
|
||||
font-size: small;
|
||||
background-color: #e7e7e7;
|
||||
border: 1px solid #bbb;
|
||||
border-bottom: 1px solid #a0a0a0;
|
||||
border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
}
|
||||
|
||||
.radioPanel label {
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<link rel="stylesheet" href="font/fontello.css">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<!-- Include the next line to allow support for dropbox import/export. You will need your own app key. -->
|
||||
<!--<script type="text/javascript" src="https://www.dropbox.com/static/api/2/dropins.js" id="dropboxjs" data-app-key="YOUR_KEY"></script>-->
|
||||
|
||||
<script language="javascript" src="lz-string.min.js"></script>
|
||||
|
||||
<!-- This script tag is what actually loads the GWT module. The -->
|
||||
<!-- 'nocache.js' file (also called a "selection script") is -->
|
||||
<!-- produced by the GWT compiler in the module output directory -->
|
||||
<!-- or generated automatically in development mode. -->
|
||||
<script language="javascript" src="circuitjs1/circuitjs1.nocache.js"></script>
|
||||
|
||||
<!-- Include a history iframe to enable full GWT history support -->
|
||||
<!-- (the id must be exactly as shown) -->
|
||||
<iframe src="javascript:''" id="__gwt_historyFrame" style="width:0;height:0;border:0"></iframe>
|
||||
|
||||
<script>
|
||||
if ('serviceWorker' in navigator) {
|
||||
window.addEventListener('load', () => {
|
||||
navigator.serviceWorker.register('service-worker.js').then(registration => {
|
||||
console.log('Service Worker registered with scope:', registration.scope);
|
||||
}).catch(error => {
|
||||
console.error('Service Worker registration failed:', error);
|
||||
});
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,427 @@
|
||||
var $wnd = $wnd || window.parent;
|
||||
var __gwtModuleFunction = $wnd.circuitjs1;
|
||||
var $sendStats = __gwtModuleFunction.__sendStats;
|
||||
$sendStats('moduleStartup', 'moduleEvalStart');
|
||||
var $gwt_version = "2.8.2";
|
||||
var $strongName = '';
|
||||
var $gwt = {};
|
||||
var $doc = $wnd.document;
|
||||
var $moduleName, $moduleBase;
|
||||
function __gwtStartLoadingFragment(frag) {
|
||||
var fragFile = 'deferredjs/' + $strongName + '/' + frag + '.cache.js';
|
||||
return __gwtModuleFunction.__startLoadingFragment(fragFile);
|
||||
}
|
||||
function __gwtInstallCode(code) {return __gwtModuleFunction.__installRunAsyncCode(code);}
|
||||
function __gwt_isKnownPropertyValue(propName, propValue) {
|
||||
return __gwtModuleFunction.__gwt_isKnownPropertyValue(propName, propValue);
|
||||
}
|
||||
function __gwt_getMetaProperty(name) {
|
||||
return __gwtModuleFunction.__gwt_getMetaProperty(name);
|
||||
}
|
||||
var $stats = $wnd.__gwtStatsEvent ? function(a) {
|
||||
return $wnd.__gwtStatsEvent && $wnd.__gwtStatsEvent(a);
|
||||
} : null;
|
||||
var $sessionId = $wnd.__gwtStatsSessionId ? $wnd.__gwtStatsSessionId : null;
|
||||
/******************************************************************************
|
||||
* Variables used by the Plugin
|
||||
*****************************************************************************/
|
||||
var $entry;
|
||||
var $hostedHtmlVersion="2.1";
|
||||
|
||||
var $errFn;
|
||||
var $moduleName;
|
||||
var $moduleBase;
|
||||
var __gwt_getProperty;
|
||||
|
||||
/******************************************************************************
|
||||
* WRITE ME - what does this invokes stuff do??? Probably related to invoking
|
||||
* calls...
|
||||
*****************************************************************************/
|
||||
var __gwt_javaInvokes = [];
|
||||
|
||||
// Wrapper to call JS methods, which we need both to be able to supply a
|
||||
// different this for method lookup and to get the exception back
|
||||
function __gwt_jsInvoke(thisObj, methodName) {
|
||||
try {
|
||||
var args = Array.prototype.slice.call(arguments, 2);
|
||||
return [0, window[methodName].apply(thisObj, args)];
|
||||
} catch (e) {
|
||||
return [1, e];
|
||||
}
|
||||
}
|
||||
|
||||
function __gwt_makeJavaInvoke(argCount) {
|
||||
return __gwt_javaInvokes[argCount] || __gwt_doMakeJavaInvoke(argCount);
|
||||
}
|
||||
|
||||
function __gwt_doMakeJavaInvoke(argCount) {
|
||||
// IE6 won't eval() anonymous functions except as r-values
|
||||
var argList = "";
|
||||
for (var i = 0; i < argCount; i++) {
|
||||
argList += ",p" + i;
|
||||
}
|
||||
var argListNoComma = argList.substring(1);
|
||||
|
||||
return eval(
|
||||
"__gwt_javaInvokes[" + argCount + "] =\n" +
|
||||
" function(thisObj, dispId" + argList + ") {\n" +
|
||||
" var result = __static(dispId, thisObj" + argList + ");\n" +
|
||||
" if (result[0]) {\n" +
|
||||
" throw result[1];\n" +
|
||||
" } else {\n" +
|
||||
" return result[1];\n" +
|
||||
" }\n" +
|
||||
" }\n"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* Functions used to create tear-offs of Java methods. Each function corresponds
|
||||
* to exactly one dispId, and also embeds the argument count. We get the "this"
|
||||
* value from the context in which the function is being executed.
|
||||
* Function-object identity is preserved by caching in a sparse array.
|
||||
*****************************************************************************/
|
||||
var __gwt_tearOffs = [];
|
||||
var __gwt_tearOffGenerators = [];
|
||||
function __gwt_makeTearOff(proxy, dispId, argCount) {
|
||||
return __gwt_tearOffs[dispId] || __gwt_doMakeTearOff(dispId, argCount);
|
||||
}
|
||||
|
||||
function __gwt_doMakeTearOff(dispId, argCount) {
|
||||
return __gwt_tearOffs[dispId] =
|
||||
(__gwt_tearOffGenerators[argCount] || __gwt_doMakeTearOffGenerator(argCount))(dispId);
|
||||
}
|
||||
|
||||
function __gwt_doMakeTearOffGenerator(argCount) {
|
||||
// IE6 won't eval() anonymous functions except as r-values
|
||||
var argList = "";
|
||||
for (var i = 0; i < argCount; i++) {
|
||||
argList += ",p" + i;
|
||||
}
|
||||
var argListNoComma = argList.substring(1);
|
||||
|
||||
return eval(
|
||||
"__gwt_tearOffGenerators[" + argCount + "] =\n" +
|
||||
" function(dispId) {\n" +
|
||||
" return function(" + argListNoComma + ") {\n" +
|
||||
" var result = __static(dispId, this" + argList + ");\n" +
|
||||
" if (result[0]) {\n" +
|
||||
" throw result[1];\n" +
|
||||
" } else {\n" +
|
||||
" return result[1];\n" +
|
||||
" }\n" +
|
||||
" }\n" +
|
||||
" }\n"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
*Code to give visual feedback when something goes wrong in Dev Mode
|
||||
*****************************************************************************/
|
||||
function __gwt_disconnected() {
|
||||
// Prevent double-invocation.
|
||||
window.__gwt_disconnected = new Function();
|
||||
// Do it in a timeout so we can be sure we have a clean stack.
|
||||
window.setTimeout(__gwt_disconnected_impl, 1);
|
||||
}
|
||||
|
||||
function __gwt_disconnected_impl() {
|
||||
__gwt_displayGlassMessage('GWT Code Server Disconnected',
|
||||
'Most likely, you closed GWT Development Mode. Or, you might have lost '
|
||||
+ 'network connectivity. To fix this, try restarting GWT Development Mode and '
|
||||
+ 'refresh this page.');
|
||||
}
|
||||
|
||||
// Keep track of z-index to allow layering of multiple glass messages
|
||||
var __gwt_glassMessageZIndex = 2147483647;
|
||||
|
||||
// Note this method is also used by ModuleSpace.java
|
||||
function __gwt_displayGlassMessage(summary, details) {
|
||||
var topWin = window.top;
|
||||
var topDoc = topWin.document;
|
||||
var outer = topDoc.createElement("div");
|
||||
// Do not insert whitespace or outer.firstChild will get a text node.
|
||||
outer.innerHTML =
|
||||
'<div style="position:absolute;z-index:' + __gwt_glassMessageZIndex-- +
|
||||
';left:50px;top:50px;width:600px;color:#FFF;font-family:verdana;text-align:left;">' +
|
||||
'<div style="font-size:30px;font-weight:bold;">' + summary + '</div>' +
|
||||
'<div style="font-size:15px;">' + details + '</div>' +
|
||||
'</div>' +
|
||||
'<div style="position:absolute;z-index:' + __gwt_glassMessageZIndex-- +
|
||||
';left:0px;top:0px;right:0px;bottom:0px;filter:alpha(opacity=60);opacity:0.6;background-color:#000;"></div>'
|
||||
;
|
||||
topDoc.body.appendChild(outer);
|
||||
var glass = outer.firstChild;
|
||||
var glassStyle = glass.style;
|
||||
|
||||
// Scroll to the top and remove scrollbars.
|
||||
topWin.scrollTo(0, 0);
|
||||
if (topDoc.compatMode == "BackCompat") {
|
||||
topDoc.body.style["overflow"] = "hidden";
|
||||
} else {
|
||||
topDoc.documentElement.style["overflow"] = "hidden";
|
||||
}
|
||||
|
||||
// Steal focus.
|
||||
glass.focus();
|
||||
|
||||
if ((navigator.userAgent.indexOf("MSIE") >= 0) && (topDoc.compatMode == "BackCompat")) {
|
||||
// IE quirks mode doesn't support right/bottom, but does support this.
|
||||
glassStyle.width = "125%";
|
||||
glassStyle.height = "100%";
|
||||
} else if (navigator.userAgent.indexOf("MSIE 6") >= 0) {
|
||||
// IE6 doesn't have a real standards mode, so we have to use hacks.
|
||||
glassStyle.width = "125%"; // Get past scroll bar area.
|
||||
// Nasty CSS; onresize would be better but the outer window won't let us add a listener IE.
|
||||
glassStyle.setExpression("height", "document.documentElement.clientHeight");
|
||||
}
|
||||
|
||||
$doc.title = summary + " [" + $doc.title + "]";
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* Other functions called by the Plugin
|
||||
*****************************************************************************/
|
||||
function __gwt_makeResult(isException, result) {
|
||||
return [isException, result];
|
||||
}
|
||||
|
||||
//should be prefixed with "__gwt_"
|
||||
function fireOnModuleLoadStart(className) {
|
||||
$sendStats("moduleStartup", "onModuleLoadStart");
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* Helper functions for the Development Mode startup code. Listed alphabetically
|
||||
*****************************************************************************/
|
||||
function doBrowserSpecificFixes() {
|
||||
var ua = navigator.userAgent.toLowerCase();
|
||||
if (ua.indexOf("gecko") != -1) {
|
||||
// install eval wrapper on FF to avoid EvalError problem
|
||||
var __eval = window.eval;
|
||||
window.eval = function(s) {
|
||||
return __eval(s);
|
||||
}
|
||||
}
|
||||
if (ua.indexOf("chrome") != -1) {
|
||||
// work around __gwt_ObjectId appearing in JS objects
|
||||
var hop = window.Object.prototype.hasOwnProperty;
|
||||
window.Object.prototype.hasOwnProperty = function(prop) {
|
||||
return prop != "__gwt_ObjectId" && hop.call(this, prop);
|
||||
};
|
||||
var hop2 = window.Object.prototype.propertyIsEnumerable;
|
||||
window.Object.prototype.propertyIsEnumerable = function(prop) {
|
||||
return prop != "__gwt_ObjectId" && hop2.call(this, prop);
|
||||
};
|
||||
// do the same in the main window if it is different from our window
|
||||
if ($wnd != window) {
|
||||
var hop3 = $wnd.Object.prototype.hasOwnProperty;
|
||||
$wnd.Object.prototype.hasOwnProperty = function(prop) {
|
||||
return prop != "__gwt_ObjectId" && hop3.call(this, prop);
|
||||
};
|
||||
var hop4 = $wnd.Object.prototype.propertyIsEnumerable;
|
||||
$wnd.Object.prototype.propertyIsEnumerable = function(prop) {
|
||||
return prop != "__gwt_ObjectId" && hop4.call(this, prop);
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function embedPlugin() {
|
||||
var embed = document.createElement('embed');
|
||||
embed.id = 'pluginEmbed';
|
||||
embed.type = 'application/x-gwt-hosted-mode';
|
||||
embed.width = '10';
|
||||
embed.height = '20';
|
||||
|
||||
var obj = document.createElement('object');
|
||||
obj.id = 'pluginObject';
|
||||
obj.classid = 'clsid:1D6156B6-002B-49E7-B5CA-C138FB843B4E';
|
||||
|
||||
document.body.appendChild(embed);
|
||||
document.body.appendChild(obj);
|
||||
}
|
||||
|
||||
function findPluginObject() {
|
||||
try {
|
||||
return document.getElementById('pluginObject');
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function findPluginEmbed() {
|
||||
try {
|
||||
return document.getElementById('pluginEmbed')
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function findPluginXPCOM() {
|
||||
try {
|
||||
return __gwt_HostedModePlugin;
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function getCodeServer() {
|
||||
var server = "localhost:9997";
|
||||
var query = $wnd.location.search;
|
||||
var idx = query.indexOf("gwt.codesvr=");
|
||||
if (idx >= 0) {
|
||||
idx += 12; // "gwt.codesvr=".length == 12
|
||||
} else {
|
||||
idx = query.indexOf("gwt.codesvr.circuitjs1=");
|
||||
idx += (13 + "circuitjs1".length); //
|
||||
}
|
||||
if (idx >= 0) {
|
||||
var amp = query.indexOf("&", idx);
|
||||
if (amp >= 0) {
|
||||
server = query.substring(idx, amp);
|
||||
} else {
|
||||
server = query.substring(idx);
|
||||
}
|
||||
// According to RFC 3986, some of this component's characters (e.g., ':')
|
||||
// are reserved and *may* be escaped.
|
||||
return decodeURIComponent(server);
|
||||
}
|
||||
}
|
||||
|
||||
function generateSessionId() {
|
||||
var ASCII_EXCLAMATION = 33;
|
||||
var ASCII_TILDE = 126;
|
||||
var chars = [];
|
||||
for (var i = 0; i < 16; ++i) {
|
||||
chars.push(Math.floor(ASCII_EXCLAMATION
|
||||
+ Math.random() * (ASCII_TILDE - ASCII_EXCLAMATION + 1)));
|
||||
}
|
||||
return String.fromCharCode.apply(null, chars);
|
||||
}
|
||||
|
||||
function loadIframe(url) {
|
||||
var topDoc = window.top.document;
|
||||
|
||||
// create an iframe
|
||||
var iframeDiv = topDoc.createElement("div");
|
||||
iframeDiv.innerHTML = "<iframe scrolling=no frameborder=0 src='" + url + "'>";
|
||||
var iframe = iframeDiv.firstChild;
|
||||
|
||||
// mess with the iframe style a little
|
||||
var iframeStyle = iframe.style;
|
||||
iframeStyle.position = "absolute";
|
||||
iframeStyle.borderWidth = "0";
|
||||
iframeStyle.left = "0";
|
||||
iframeStyle.top = "0";
|
||||
iframeStyle.width = "100%";
|
||||
iframeStyle.backgroundColor = "#ffffff";
|
||||
iframeStyle.zIndex = "1";
|
||||
iframeStyle.height = "100%";
|
||||
|
||||
// update the top window's document's body's style
|
||||
var hostBodyStyle = window.top.document.body.style;
|
||||
hostBodyStyle.margin = "0";
|
||||
hostBodyStyle.height = iframeStyle.height;
|
||||
hostBodyStyle.overflow = "hidden";
|
||||
|
||||
// insert the iframe
|
||||
topDoc.body.insertBefore(iframe, topDoc.body.firstChild);
|
||||
}
|
||||
|
||||
function pluginConnectionError(codeServer) {
|
||||
__gwt_displayGlassMessage(
|
||||
"Plugin failed to connect to Development Mode server at " + simpleEscape(codeServer),
|
||||
"Follow the troubleshooting instructions at "
|
||||
+ "<a href='http://code.google.com/p/google-web-toolkit/wiki/TroubleshootingOOPHM'>"
|
||||
+ "http://code.google.com/p/google-web-toolkit/wiki/TroubleshootingOOPHM</a>");
|
||||
if ($errFn) {
|
||||
$errFn($moduleName);
|
||||
}
|
||||
}
|
||||
|
||||
function simpleEscape(originalString) {
|
||||
return originalString.replace(/&/g,"&")
|
||||
.replace(/</g,"<")
|
||||
.replace(/>/g,">")
|
||||
.replace(/\'/g, "'")
|
||||
.replace(/\"/g,""");
|
||||
}
|
||||
|
||||
function tryConnectingToPlugin(sessionId, url) {
|
||||
// Note that the order is important
|
||||
var pluginFinders = [findPluginXPCOM, findPluginObject, findPluginEmbed];
|
||||
var codeServer = getCodeServer();
|
||||
var plugin = null;
|
||||
for (var i = 0; i < pluginFinders.length; ++i) {
|
||||
try {
|
||||
var maybePlugin = pluginFinders[i]();
|
||||
if (maybePlugin != null && maybePlugin.init(window)) {
|
||||
plugin = maybePlugin;
|
||||
break;
|
||||
}
|
||||
} catch (e) {
|
||||
}
|
||||
}
|
||||
|
||||
if (plugin == null) {
|
||||
// Plugin initialization failed. Show the missing-plugin page.
|
||||
return null;
|
||||
}
|
||||
if (!plugin.connect(url, sessionId, codeServer, $moduleName,
|
||||
$hostedHtmlVersion)) {
|
||||
// Connection failed. Show the error alert and troubleshooting page.
|
||||
pluginConnectionError(codeServer);
|
||||
}
|
||||
|
||||
return plugin;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* Development Mode startup code
|
||||
*****************************************************************************/
|
||||
function gwtOnLoad(errFn, moduleName, moduleBase, softPermutationId, computePropValue) {
|
||||
$errFn = errFn;
|
||||
$moduleName = moduleName;
|
||||
$moduleBase = moduleBase;
|
||||
__gwt_getProperty = computePropValue;
|
||||
|
||||
doBrowserSpecificFixes();
|
||||
|
||||
if (!findPluginXPCOM()) {
|
||||
embedPlugin();
|
||||
}
|
||||
|
||||
var topWin = window.top;
|
||||
if (!topWin.__gwt_SessionID) {
|
||||
topWin.__gwt_SessionID = generateSessionId();
|
||||
}
|
||||
|
||||
var plugin = tryConnectingToPlugin(topWin.__gwt_SessionID, topWin.location.href);
|
||||
if (plugin == null) {
|
||||
loadIframe("http://www.gwtproject.org/missing-plugin/");
|
||||
} else {
|
||||
// take over the onunload function, wrapping any existing call if it exists
|
||||
var oldUnload = window.onunload;
|
||||
window.onunload = function() {
|
||||
// run wrapped unload first in case it is running gwt code
|
||||
!!oldUnload && oldUnload();
|
||||
try {
|
||||
// wrap in try/catch since plugins are not required to supply this
|
||||
plugin.disconnect();
|
||||
} catch (e) {
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
$sendStats('moduleStartup', 'moduleEvalEnd');
|
||||
gwtOnLoad(__gwtModuleFunction.__errFn, __gwtModuleFunction.__moduleName, __gwtModuleFunction.__moduleBase, __gwtModuleFunction.__softPermutationId,__gwtModuleFunction.__computePropValue);
|
||||
$sendStats('moduleStartup', 'end');
|
||||
$gwt && $gwt.permProps && __gwtModuleFunction.__moduleStartupDone($gwt.permProps);
|
||||
//# sourceURL=circuitjs1-0.js
|
||||
|
||||
@@ -0,0 +1,457 @@
|
||||
function circuitjs1(){
|
||||
var $wnd_0 = window;
|
||||
var $doc_0 = document;
|
||||
sendStats('bootstrap', 'begin');
|
||||
function isHostedMode(){
|
||||
var query = $wnd_0.location.search;
|
||||
return query.indexOf('gwt.codesvr.circuitjs1=') != -1 || query.indexOf('gwt.codesvr=') != -1;
|
||||
}
|
||||
|
||||
function sendStats(evtGroupString, typeString){
|
||||
if ($wnd_0.__gwtStatsEvent) {
|
||||
$wnd_0.__gwtStatsEvent({moduleName:'circuitjs1', sessionId:$wnd_0.__gwtStatsSessionId, subSystem:'startup', evtGroup:evtGroupString, millis:(new Date).getTime(), type:typeString});
|
||||
}
|
||||
}
|
||||
|
||||
circuitjs1.__sendStats = sendStats;
|
||||
circuitjs1.__moduleName = 'circuitjs1';
|
||||
circuitjs1.__errFn = null;
|
||||
circuitjs1.__moduleBase = 'DUMMY';
|
||||
circuitjs1.__softPermutationId = 0;
|
||||
circuitjs1.__computePropValue = null;
|
||||
circuitjs1.__getPropMap = null;
|
||||
circuitjs1.__installRunAsyncCode = function(){
|
||||
}
|
||||
;
|
||||
circuitjs1.__gwtStartLoadingFragment = function(){
|
||||
return null;
|
||||
}
|
||||
;
|
||||
circuitjs1.__gwt_isKnownPropertyValue = function(){
|
||||
return false;
|
||||
}
|
||||
;
|
||||
circuitjs1.__gwt_getMetaProperty = function(){
|
||||
return null;
|
||||
}
|
||||
;
|
||||
var __propertyErrorFunction = null;
|
||||
var activeModules = $wnd_0.__gwt_activeModules = $wnd_0.__gwt_activeModules || {};
|
||||
activeModules['circuitjs1'] = {moduleName:'circuitjs1'};
|
||||
circuitjs1.__moduleStartupDone = function(permProps){
|
||||
var oldBindings = activeModules['circuitjs1'].bindings;
|
||||
activeModules['circuitjs1'].bindings = function(){
|
||||
var props = oldBindings?oldBindings():{};
|
||||
var embeddedProps = permProps[circuitjs1.__softPermutationId];
|
||||
for (var i = 0; i < embeddedProps.length; i++) {
|
||||
var pair = embeddedProps[i];
|
||||
props[pair[0]] = pair[1];
|
||||
}
|
||||
return props;
|
||||
}
|
||||
;
|
||||
}
|
||||
;
|
||||
var frameDoc;
|
||||
function getInstallLocationDoc(){
|
||||
setupInstallLocation();
|
||||
return frameDoc;
|
||||
}
|
||||
|
||||
function setupInstallLocation(){
|
||||
if (frameDoc) {
|
||||
return;
|
||||
}
|
||||
var scriptFrame = $doc_0.createElement('iframe');
|
||||
scriptFrame.id = 'circuitjs1';
|
||||
scriptFrame.style.cssText = 'position:absolute; width:0; height:0; border:none; left: -1000px;' + ' top: -1000px;';
|
||||
scriptFrame.tabIndex = -1;
|
||||
$doc_0.body.appendChild(scriptFrame);
|
||||
frameDoc = scriptFrame.contentWindow.document;
|
||||
frameDoc.open();
|
||||
var doctype = document.compatMode == 'CSS1Compat'?'<!doctype html>':'';
|
||||
frameDoc.write(doctype + '<html><head><\/head><body><\/body><\/html>');
|
||||
frameDoc.close();
|
||||
}
|
||||
|
||||
function installScript(filename){
|
||||
function setupWaitForBodyLoad(callback){
|
||||
function isBodyLoaded(){
|
||||
if (typeof $doc_0.readyState == 'undefined') {
|
||||
return typeof $doc_0.body != 'undefined' && $doc_0.body != null;
|
||||
}
|
||||
return /loaded|complete/.test($doc_0.readyState);
|
||||
}
|
||||
|
||||
var bodyDone = isBodyLoaded();
|
||||
if (bodyDone) {
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
function checkBodyDone(){
|
||||
if (!bodyDone) {
|
||||
if (!isBodyLoaded()) {
|
||||
return;
|
||||
}
|
||||
bodyDone = true;
|
||||
callback();
|
||||
if ($doc_0.removeEventListener) {
|
||||
$doc_0.removeEventListener('readystatechange', checkBodyDone, false);
|
||||
}
|
||||
if (onBodyDoneTimerId) {
|
||||
clearInterval(onBodyDoneTimerId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($doc_0.addEventListener) {
|
||||
$doc_0.addEventListener('readystatechange', checkBodyDone, false);
|
||||
}
|
||||
var onBodyDoneTimerId = setInterval(function(){
|
||||
checkBodyDone();
|
||||
}
|
||||
, 10);
|
||||
}
|
||||
|
||||
function installCode(code_0){
|
||||
var doc = getInstallLocationDoc();
|
||||
var docbody = doc.body;
|
||||
var script = doc.createElement('script');
|
||||
script.language = 'javascript';
|
||||
script.src = code_0;
|
||||
if (circuitjs1.__errFn) {
|
||||
script.onerror = function(){
|
||||
circuitjs1.__errFn('circuitjs1', new Error('Failed to load ' + code_0));
|
||||
}
|
||||
;
|
||||
}
|
||||
docbody.appendChild(script);
|
||||
sendStats('moduleStartup', 'scriptTagAdded');
|
||||
}
|
||||
|
||||
sendStats('moduleStartup', 'moduleRequested');
|
||||
setupWaitForBodyLoad(function(){
|
||||
installCode(filename);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
circuitjs1.__startLoadingFragment = function(fragmentFile){
|
||||
return computeUrlForResource(fragmentFile);
|
||||
}
|
||||
;
|
||||
circuitjs1.__installRunAsyncCode = function(code_0){
|
||||
var doc = getInstallLocationDoc();
|
||||
var docbody = doc.body;
|
||||
var script = doc.createElement('script');
|
||||
script.language = 'javascript';
|
||||
script.text = code_0;
|
||||
docbody.appendChild(script);
|
||||
}
|
||||
;
|
||||
function processMetas(){
|
||||
var metaProps = {};
|
||||
var propertyErrorFunc;
|
||||
var onLoadErrorFunc;
|
||||
var metas = $doc_0.getElementsByTagName('meta');
|
||||
for (var i = 0, n = metas.length; i < n; ++i) {
|
||||
var meta = metas[i], name_1 = meta.getAttribute('name'), content_0;
|
||||
if (name_1) {
|
||||
name_1 = name_1.replace('circuitjs1::', '');
|
||||
if (name_1.indexOf('::') >= 0) {
|
||||
continue;
|
||||
}
|
||||
if (name_1 == 'gwt:property') {
|
||||
content_0 = meta.getAttribute('content');
|
||||
if (content_0) {
|
||||
var value_1, eq = content_0.indexOf('=');
|
||||
if (eq >= 0) {
|
||||
name_1 = content_0.substring(0, eq);
|
||||
value_1 = content_0.substring(eq + 1);
|
||||
}
|
||||
else {
|
||||
name_1 = content_0;
|
||||
value_1 = '';
|
||||
}
|
||||
metaProps[name_1] = value_1;
|
||||
}
|
||||
}
|
||||
else if (name_1 == 'gwt:onPropertyErrorFn') {
|
||||
content_0 = meta.getAttribute('content');
|
||||
if (content_0) {
|
||||
try {
|
||||
propertyErrorFunc = eval(content_0);
|
||||
}
|
||||
catch (e) {
|
||||
alert('Bad handler "' + content_0 + '" for "gwt:onPropertyErrorFn"');
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (name_1 == 'gwt:onLoadErrorFn') {
|
||||
content_0 = meta.getAttribute('content');
|
||||
if (content_0) {
|
||||
try {
|
||||
onLoadErrorFunc = eval(content_0);
|
||||
}
|
||||
catch (e) {
|
||||
alert('Bad handler "' + content_0 + '" for "gwt:onLoadErrorFn"');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
__gwt_getMetaProperty = function(name_0){
|
||||
var value_0 = metaProps[name_0];
|
||||
return value_0 == null?null:value_0;
|
||||
}
|
||||
;
|
||||
__propertyErrorFunction = propertyErrorFunc;
|
||||
circuitjs1.__errFn = onLoadErrorFunc;
|
||||
}
|
||||
|
||||
function computeScriptBase(){
|
||||
function getDirectoryOfFile(path){
|
||||
var hashIndex = path.lastIndexOf('#');
|
||||
if (hashIndex == -1) {
|
||||
hashIndex = path.length;
|
||||
}
|
||||
var queryIndex = path.indexOf('?');
|
||||
if (queryIndex == -1) {
|
||||
queryIndex = path.length;
|
||||
}
|
||||
var slashIndex = path.lastIndexOf('/', Math.min(queryIndex, hashIndex));
|
||||
return slashIndex >= 0?path.substring(0, slashIndex + 1):'';
|
||||
}
|
||||
|
||||
function ensureAbsoluteUrl(url_0){
|
||||
if (url_0.match(/^\w+:\/\//)) {
|
||||
}
|
||||
else {
|
||||
var img = $doc_0.createElement('img');
|
||||
img.src = url_0 + 'clear.cache.gif';
|
||||
url_0 = getDirectoryOfFile(img.src);
|
||||
}
|
||||
return url_0;
|
||||
}
|
||||
|
||||
function tryMetaTag(){
|
||||
var metaVal = __gwt_getMetaProperty('baseUrl');
|
||||
if (metaVal != null) {
|
||||
return metaVal;
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
function tryNocacheJsTag(){
|
||||
var scriptTags = $doc_0.getElementsByTagName('script');
|
||||
for (var i = 0; i < scriptTags.length; ++i) {
|
||||
if (scriptTags[i].src.indexOf('circuitjs1.nocache.js') != -1) {
|
||||
return getDirectoryOfFile(scriptTags[i].src);
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
function tryBaseTag(){
|
||||
var baseElements = $doc_0.getElementsByTagName('base');
|
||||
if (baseElements.length > 0) {
|
||||
return baseElements[baseElements.length - 1].href;
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
function isLocationOk(){
|
||||
var loc = $doc_0.location;
|
||||
return loc.href == loc.protocol + '//' + loc.host + loc.pathname + loc.search + loc.hash;
|
||||
}
|
||||
|
||||
var tempBase = tryMetaTag();
|
||||
if (tempBase == '') {
|
||||
tempBase = tryNocacheJsTag();
|
||||
}
|
||||
if (tempBase == '') {
|
||||
tempBase = tryBaseTag();
|
||||
}
|
||||
if (tempBase == '' && isLocationOk()) {
|
||||
tempBase = getDirectoryOfFile($doc_0.location.href);
|
||||
}
|
||||
tempBase = ensureAbsoluteUrl(tempBase);
|
||||
return tempBase;
|
||||
}
|
||||
|
||||
function computeUrlForResource(resource){
|
||||
if (resource.match(/^\//)) {
|
||||
return resource;
|
||||
}
|
||||
if (resource.match(/^[a-zA-Z]+:\/\//)) {
|
||||
return resource;
|
||||
}
|
||||
return circuitjs1.__moduleBase + resource;
|
||||
}
|
||||
|
||||
function getCompiledCodeFilename(){
|
||||
var answers = [];
|
||||
var softPermutationId = 0;
|
||||
function unflattenKeylistIntoAnswers(propValArray, value_0){
|
||||
var answer = answers;
|
||||
for (var i = 0, n = propValArray.length - 1; i < n; ++i) {
|
||||
answer = answer[propValArray[i]] || (answer[propValArray[i]] = []);
|
||||
}
|
||||
answer[propValArray[n]] = value_0;
|
||||
}
|
||||
|
||||
var values = [];
|
||||
var providers = [];
|
||||
function computePropValue(propName){
|
||||
var value_0 = providers[propName](), allowedValuesMap = values[propName];
|
||||
if (value_0 in allowedValuesMap) {
|
||||
return value_0;
|
||||
}
|
||||
var allowedValuesList = [];
|
||||
for (var k in allowedValuesMap) {
|
||||
allowedValuesList[allowedValuesMap[k]] = k;
|
||||
}
|
||||
if (__propertyErrorFunction) {
|
||||
__propertyErrorFunction(propName, allowedValuesList, value_0);
|
||||
}
|
||||
throw null;
|
||||
}
|
||||
|
||||
providers['user.agent'] = function(){
|
||||
var ua = navigator.userAgent.toLowerCase();
|
||||
var docMode = $doc_0.documentMode;
|
||||
if (function(){
|
||||
return ua.indexOf('webkit') != -1;
|
||||
}
|
||||
())
|
||||
return 'safari';
|
||||
if (function(){
|
||||
return ua.indexOf('msie') != -1 && (docMode >= 10 && docMode < 11);
|
||||
}
|
||||
())
|
||||
return 'ie10';
|
||||
if (function(){
|
||||
return ua.indexOf('msie') != -1 && (docMode >= 9 && docMode < 11);
|
||||
}
|
||||
())
|
||||
return 'ie9';
|
||||
if (function(){
|
||||
return ua.indexOf('msie') != -1 && (docMode >= 8 && docMode < 11);
|
||||
}
|
||||
())
|
||||
return 'ie8';
|
||||
if (function(){
|
||||
return ua.indexOf('gecko') != -1 || docMode >= 11;
|
||||
}
|
||||
())
|
||||
return 'gecko1_8';
|
||||
return '';
|
||||
}
|
||||
;
|
||||
values['user.agent'] = {'gecko1_8':0, 'ie10':1, 'ie8':2, 'ie9':3, 'safari':4};
|
||||
__gwt_isKnownPropertyValue = function(propName, propValue){
|
||||
return propValue in values[propName];
|
||||
}
|
||||
;
|
||||
circuitjs1.__getPropMap = function(){
|
||||
var result = {};
|
||||
for (var key in values) {
|
||||
if (values.hasOwnProperty(key)) {
|
||||
result[key] = computePropValue(key);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
;
|
||||
circuitjs1.__computePropValue = computePropValue;
|
||||
$wnd_0.__gwt_activeModules['circuitjs1'].bindings = circuitjs1.__getPropMap;
|
||||
sendStats('bootstrap', 'selectingPermutation');
|
||||
if (isHostedMode()) {
|
||||
return computeUrlForResource('circuitjs1.devmode.js');
|
||||
}
|
||||
var strongName;
|
||||
try {
|
||||
unflattenKeylistIntoAnswers(['ie8'], '51DA24461737C50588189FA6B0A94F38');
|
||||
unflattenKeylistIntoAnswers(['safari'], '6E2C3288080E47155F0CB57AC9BEE7D4');
|
||||
unflattenKeylistIntoAnswers(['gecko1_8'], 'BC742D0F75A0DDA72202A7CE15FFB7F2');
|
||||
unflattenKeylistIntoAnswers(['ie9'], 'D0183F5867CEFCD814BA38DEE299D197');
|
||||
unflattenKeylistIntoAnswers(['ie10'], 'D4B0A4D2B21470577B4DC7B4A8A76F45');
|
||||
strongName = answers[computePropValue('user.agent')];
|
||||
var idx = strongName.indexOf(':');
|
||||
if (idx != -1) {
|
||||
softPermutationId = parseInt(strongName.substring(idx + 1), 10);
|
||||
strongName = strongName.substring(0, idx);
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
}
|
||||
circuitjs1.__softPermutationId = softPermutationId;
|
||||
return computeUrlForResource(strongName + '.cache.js');
|
||||
}
|
||||
|
||||
function loadExternalStylesheets(){
|
||||
if (!$wnd_0.__gwt_stylesLoaded) {
|
||||
$wnd_0.__gwt_stylesLoaded = {};
|
||||
}
|
||||
function installOneStylesheet(stylesheetUrl){
|
||||
if (!__gwt_stylesLoaded[stylesheetUrl]) {
|
||||
var l = $doc_0.createElement('link');
|
||||
l.setAttribute('rel', 'stylesheet');
|
||||
l.setAttribute('href', computeUrlForResource(stylesheetUrl));
|
||||
$doc_0.getElementsByTagName('head')[0].appendChild(l);
|
||||
__gwt_stylesLoaded[stylesheetUrl] = true;
|
||||
}
|
||||
}
|
||||
|
||||
sendStats('loadExternalRefs', 'begin');
|
||||
installOneStylesheet('gwt/clean/clean.css');
|
||||
installOneStylesheet('style.css');
|
||||
sendStats('loadExternalRefs', 'end');
|
||||
}
|
||||
|
||||
processMetas();
|
||||
circuitjs1.__moduleBase = computeScriptBase();
|
||||
activeModules['circuitjs1'].moduleBase = circuitjs1.__moduleBase;
|
||||
var filename_0 = getCompiledCodeFilename();
|
||||
if ($wnd_0) {
|
||||
var devModePermitted = !!($wnd_0.location.protocol == 'http:' || $wnd_0.location.protocol == 'file:');
|
||||
$wnd_0.__gwt_activeModules['circuitjs1'].canRedirect = devModePermitted;
|
||||
function supportsSessionStorage(){
|
||||
var key = '_gwt_dummy_';
|
||||
try {
|
||||
$wnd_0.sessionStorage.setItem(key, key);
|
||||
$wnd_0.sessionStorage.removeItem(key);
|
||||
return true;
|
||||
}
|
||||
catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (devModePermitted && supportsSessionStorage()) {
|
||||
var devModeKey = '__gwtDevModeHook:circuitjs1';
|
||||
var devModeUrl = $wnd_0.sessionStorage[devModeKey];
|
||||
if (!/^http:\/\/(localhost|127\.0\.0\.1)(:\d+)?\/.*$/.test(devModeUrl)) {
|
||||
if (devModeUrl && (window.console && console.log)) {
|
||||
console.log('Ignoring non-whitelisted Dev Mode URL: ' + devModeUrl);
|
||||
}
|
||||
devModeUrl = '';
|
||||
}
|
||||
if (devModeUrl && !$wnd_0[devModeKey]) {
|
||||
$wnd_0[devModeKey] = true;
|
||||
$wnd_0[devModeKey + ':moduleBase'] = computeScriptBase();
|
||||
var devModeScript = $doc_0.createElement('script');
|
||||
devModeScript.src = devModeUrl;
|
||||
var head = $doc_0.getElementsByTagName('head')[0];
|
||||
head.insertBefore(devModeScript, head.firstElementChild || head.children[0]);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
loadExternalStylesheets();
|
||||
sendStats('bootstrap', 'end');
|
||||
installScript(filename_0);
|
||||
return true;
|
||||
}
|
||||
|
||||
circuitjs1.succeeded = circuitjs1();
|
||||
|
After Width: | Height: | Size: 43 B |
@@ -0,0 +1,16 @@
|
||||
51DA24461737C50588189FA6B0A94F38.cache.js
|
||||
user.agent ie8
|
||||
|
||||
6E2C3288080E47155F0CB57AC9BEE7D4.cache.js
|
||||
user.agent safari
|
||||
|
||||
BC742D0F75A0DDA72202A7CE15FFB7F2.cache.js
|
||||
user.agent gecko1_8
|
||||
|
||||
D0183F5867CEFCD814BA38DEE299D197.cache.js
|
||||
user.agent ie9
|
||||
|
||||
D4B0A4D2B21470577B4DC7B4A8A76F45.cache.js
|
||||
user.agent ie10
|
||||
|
||||
Devmode:devmode.js
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 222 B |
|
After Width: | Height: | Size: 231 B |
|
After Width: | Height: | Size: 298 B |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 5.5 KiB |
@@ -0,0 +1,482 @@
|
||||
### setuplist.txt first line must be a comment
|
||||
+Basics
|
||||
ohms.txt Ohm's Law
|
||||
resistors.txt Resistors
|
||||
cap.txt Capacitor
|
||||
induct.txt Inductor
|
||||
>lrc.txt LRC Circuit
|
||||
voltdivide.txt Voltage Divider
|
||||
pot.txt Potentiometer
|
||||
potdivide.txt Potentiometer Divider
|
||||
thevenin.txt Thevenin's Theorem
|
||||
norton.txt Norton's Theorem
|
||||
-
|
||||
+A/C Circuits
|
||||
capac.txt Capacitor
|
||||
inductac.txt Inductor
|
||||
capmultcaps.txt Caps of Various Capacitances
|
||||
capmultfreq.txt Caps w/ Various Frequencies
|
||||
indmultind.txt Inductors of Various Inductances
|
||||
indmultfreq.txt Inductors w/ Various Frequencies
|
||||
impedance.txt Impedances of Same Magnitude
|
||||
res-series.txt Series Resonance
|
||||
res-par.txt Parallel Resonance
|
||||
-
|
||||
+Passive Filters
|
||||
filt-hipass.txt High-Pass Filter (RC)
|
||||
filt-lopass.txt Low-Pass Filter (RC)
|
||||
filt-hipass-l.txt High-Pass Filter (RL)
|
||||
filt-lopass-l.txt Low-Pass Filter (RL)
|
||||
bandpass.txt Band-pass Filter
|
||||
bandnoise.txt Band-pass w/ Noise
|
||||
notch.txt Notch Filter
|
||||
twint.txt Twin-T Filter
|
||||
crossover.txt Crossover
|
||||
butter10lo.txt Butterworth Low-Pass (10 pole)
|
||||
butter10hi.txt Butterworth High-Pass (10 pole)
|
||||
butter10loaud.txt Butterworth Low-Pass w/ Noise
|
||||
butter10hiaud.txt Butterworth High-Pass w/ Noise
|
||||
butterbandstop.txt Butterworth Band-Stop
|
||||
besselbutter.txt Bessel vs Butterworth
|
||||
ringing.txt Band-pass with Ringing
|
||||
comb.txt Comb Filter
|
||||
-
|
||||
+Other Passive Circuits
|
||||
+Series/Parallel
|
||||
indseries.txt Inductors in Series
|
||||
indpar.txt Inductors in Parallel
|
||||
capseries.txt Caps in Series
|
||||
cappar.txt Caps in Parallel
|
||||
-
|
||||
+Transformers
|
||||
transformer.txt Transformer
|
||||
transformerdc.txt Transformer w/ DC
|
||||
transformerup.txt Step-Up Transformer
|
||||
transformerdown.txt Step-Down Transformer
|
||||
longdist.txt Long-Distance Power Transmission
|
||||
+Saturable Core
|
||||
satcore-inductor.txt Saturable vs Linear Inductor (DC)
|
||||
satcore-comparison.txt Low vs High Drive (AC Saturation)
|
||||
satcore-transformer.txt Transformer with Saturable Core
|
||||
-
|
||||
-
|
||||
+Relays
|
||||
relay.txt Relay
|
||||
relayand.txt Relay AND
|
||||
relayor.txt Relay OR
|
||||
relayxor.txt Relay XOR
|
||||
relaymux.txt Relay Mux
|
||||
relayff.txt Relay Flip-Flop
|
||||
relaytff.txt Relay Toggle Flip-Flop
|
||||
relayosc.txt Relay Oscillator
|
||||
relayctr.txt Relay Counter
|
||||
-
|
||||
3way.txt 3-Way Light Switches
|
||||
4way.txt 3- and 4-Way Light Switches
|
||||
diff.txt Differentiator
|
||||
wheatstone.txt Wheatstone Bridge
|
||||
lrc-critical.txt Critically Damped LRC
|
||||
currentsrcelm.txt Current Source
|
||||
inductkick.txt Inductive Kickback
|
||||
inductkick-snub.txt Blocking Inductive Kickback
|
||||
powerfactor1.txt Power Factor
|
||||
powerfactor2.txt Power Factor Correction
|
||||
grid.txt Resistor Grid
|
||||
grid2.txt Resistor Grid 2
|
||||
cube.txt Resistor Cube
|
||||
+Coupled LC's
|
||||
coupled1.txt LC Modes (2)
|
||||
coupled2.txt Weak Coupling
|
||||
coupled3.txt LC Modes (3)
|
||||
ladder.txt LC Ladder
|
||||
-
|
||||
phaseseq.txt Phase-Sequence Network
|
||||
3phasewye.txt 3-Phase Wye-Wye Balanced Load
|
||||
-
|
||||
+Diodes
|
||||
diodevar.txt Diode
|
||||
diodecurve.txt Diode I/V Curve
|
||||
rectify.txt Half-Wave Rectifier
|
||||
fullrect.txt Full-Wave Rectifier
|
||||
fullrectf.txt Full-Wave Rectifier w/ Filter
|
||||
diodelimit.txt Diode Limiter
|
||||
+Zener Diodes
|
||||
zeneriv.txt I/V Curve
|
||||
zenerref.txt Voltage Reference
|
||||
zenerreffollow.txt Voltage Reference w/ Follower
|
||||
-
|
||||
dcrestoration.txt DC Restoration
|
||||
inductkick-block.txt Blocking Inductive Kickback
|
||||
spikegen.txt Spike Generator
|
||||
+Voltage Multipliers
|
||||
voltdouble.txt Voltage Doubler
|
||||
voltdouble2.txt Voltage Doubler 2
|
||||
volttriple.txt Voltage Tripler
|
||||
voltquad.txt Voltage Quadrupler
|
||||
-
|
||||
amdetect.txt AM Detector
|
||||
diodeclip.txt Waveform Clipper
|
||||
sinediode.txt Triangle-to-Sine Converter
|
||||
ringmod.txt Ring Modulator
|
||||
-
|
||||
+Op-Amps
|
||||
opamp.txt Op-Amp
|
||||
opampfeedback.txt Op-Amp Feedback
|
||||
+Amplifiers
|
||||
amp-invert.txt Inverting Amplifier
|
||||
amp-noninvert.txt Noninverting Amplifier
|
||||
amp-follower.txt Follower
|
||||
amp-diff.txt Differential Amplifier
|
||||
amp-sum.txt Summing Amplifier
|
||||
logconvert.txt Log Amplifier
|
||||
classd.txt Class-D Amplifier
|
||||
-
|
||||
+Oscillators
|
||||
relaxosc.txt Relaxation Oscillator
|
||||
phaseshiftosc.txt Phase-Shift Oscillator
|
||||
triangle.txt Triangle Wave Generator
|
||||
sine.txt Sine Wave Generator
|
||||
sawtooth.txt Sawtooth Wave Generator
|
||||
vco.txt Voltage-Controlled Oscillator
|
||||
trianglevco.txt Triangle VCO
|
||||
-
|
||||
amp-rect.txt Half-Wave Rectifier (inverting)
|
||||
amp-fullrect.txt Full-Wave Rectifier
|
||||
peak-detect.txt Peak Detector
|
||||
amp-integ.txt Integrator
|
||||
amp-dfdx.txt Differentiator (inverting)
|
||||
amp-schmitt.txt Schmitt Trigger
|
||||
nic-r.txt Negative Impedance Converter
|
||||
gyrator.txt Gyrator
|
||||
capmult.txt Capacitance Multiplier
|
||||
howland.txt Howland Current Source
|
||||
itov.txt I-to-V Converter
|
||||
delta-pwm.txt Delta PWM Encoder
|
||||
opamp-regulator.txt Voltage Regulator
|
||||
opint.txt 741 Internals
|
||||
opint-invert-amp.txt 741 (inverting amplifier)
|
||||
opint-slew.txt 741 Slew Rate
|
||||
opint-current.txt 741 Current Limits
|
||||
+Chaotic Circuits
|
||||
rossler.txt Rossler
|
||||
vilnius.txt Vilnius
|
||||
chua.txt Chua
|
||||
chaos1.txt Chaos 1
|
||||
chaos2.txt Chaos 2
|
||||
jerk.txt Jerk
|
||||
-
|
||||
-
|
||||
+Transistors
|
||||
npn.txt NPN Transistor
|
||||
pnp.txt PNP Transistor
|
||||
transswitch.txt Switch
|
||||
follower.txt Emitter Follower
|
||||
+Multivibrators
|
||||
multivib-a.txt Astable Multivib
|
||||
multivib-bi.txt Bistable Multivib (Flip-Flop)
|
||||
multivib-mono.txt Monostable Multivib (One-Shot)
|
||||
-
|
||||
ceamp.txt Common-Emitter Amplifier
|
||||
phasesplit.txt Unity-Gain Phase Splitter
|
||||
schmitt.txt Schmitt Trigger
|
||||
currentsrc.txt Current Source
|
||||
currentsrcramp.txt Current Source Ramp
|
||||
mirror.txt Current Mirror
|
||||
darlington.txt Darlington Pair
|
||||
+Differential Amplifiers
|
||||
trans-diffamp.txt Differential Input
|
||||
trans-diffamp-common.txt Common-Mode Input
|
||||
trans-diffamp-cursrc.txt Common-Mode w/Current Source
|
||||
-
|
||||
+Push-Pull Follower
|
||||
pushpullxover.txt Simple, with distortion
|
||||
pushpull.txt Improved
|
||||
-
|
||||
+Oscillators
|
||||
colpitts.txt Colpitts Oscillator
|
||||
hartley.txt Hartley Oscillator
|
||||
eclosc.txt Emitter-Coupled LC Oscillator
|
||||
crystalosc2.txt Crystal Oscillator
|
||||
-
|
||||
gilbertcell.txt Gilbert Cell Multiplier
|
||||
rmsconverter.txt True RMS Converter
|
||||
joule-thief.txt Joule Thief
|
||||
transrectifier.txt Full-Wave Rectifier
|
||||
early.txt Early Effect
|
||||
-
|
||||
+MOSFETs
|
||||
nmosfet.txt n-MOSFET
|
||||
pmosfet.txt p-MOSFET
|
||||
mosswitch.txt Switch
|
||||
mosfollower.txt Source Follower
|
||||
moscurrentsrc.txt Current Source
|
||||
moscurrentramp.txt Current Ramp
|
||||
mosmirror.txt Current Mirror
|
||||
mosfetamp.txt Common-Source Amplifier
|
||||
cmosinverter.txt CMOS Inverter
|
||||
cmosinvertercap.txt CMOS Inverter (w/capacitance)
|
||||
cmosinverterslow.txt CMOS Inverter (slow transition)
|
||||
cmostransgate.txt CMOS Transmission Gate
|
||||
mux.txt CMOS Multiplexer
|
||||
samplenhold.txt Sample-and-Hold
|
||||
delayrc.txt Delayed Buffer
|
||||
leadingedge.txt Leading-Edge Detector
|
||||
switchfilter.txt Switchable Filter
|
||||
voltinvert.txt Voltage Inverter
|
||||
invertamp.txt Inverter Amplifier
|
||||
inv-osc.txt Inverter Oscillator
|
||||
crystalosc.txt CMOS Crystal Oscillator
|
||||
-
|
||||
+555 Timer Chip
|
||||
555square.txt Square Wave Generator
|
||||
555int.txt Internals
|
||||
555saw.txt Sawtooth Oscillator
|
||||
555lowduty.txt Low-duty-cycle Oscillator
|
||||
555monostable.txt Monostable Multivibrator
|
||||
555pulsemod.txt Pulse Width Modulator
|
||||
555sequencer.txt Pulse Sequencer
|
||||
555schmitt.txt Schmitt Trigger (inverting)
|
||||
555missing.txt Missing Pulse Detector
|
||||
555dutycycle.txt Adjustable Duty Cycle Oscillator
|
||||
-
|
||||
+Active Filters
|
||||
filt-vcvs-lopass.txt VCVS Low-Pass Filter
|
||||
filt-vcvs-hipass.txt VCVS High-Pass Filter
|
||||
switchedcap.txt Switched-Capacitor Filter
|
||||
allpass1.txt Allpass
|
||||
allpass2.txt Allpass w/ Square
|
||||
actbutterlo.txt Butterworth Low-Pass
|
||||
actbutterhi.txt Butterworth High-Pass
|
||||
actbutterband.txt Butterworth Band-Pass
|
||||
-
|
||||
+Logic Families
|
||||
+RTL
|
||||
rtlinverter.txt RTL Inverter
|
||||
rtlnor.txt RTL NOR
|
||||
rtlnand.txt RTL NAND
|
||||
-
|
||||
+DTL
|
||||
dtlinverter.txt DTL Inverter
|
||||
dtlnand.txt DTL NAND
|
||||
dtlnor.txt DTL NOR
|
||||
-
|
||||
+TTL
|
||||
ttlinverter.txt TTL Inverter
|
||||
ttlnand.txt TTL NAND
|
||||
ttlnor.txt TTL NOR
|
||||
fanout.txt Fan-Out
|
||||
-
|
||||
+NMOS
|
||||
nmosinverter.txt NMOS Inverter
|
||||
nmosinverter2.txt Inverter with only MOSFETs
|
||||
nmosinverter3.txt Depletion-load NMOS Inverter
|
||||
nmosnand.txt NMOS NAND
|
||||
-
|
||||
+CMOS
|
||||
cmosinverter.txt CMOS Inverter
|
||||
cmosnand.txt CMOS NAND
|
||||
cmosnor.txt CMOS NOR
|
||||
cmosxor.txt CMOS XOR
|
||||
cmosff.txt CMOS Flip-Flop
|
||||
cmosmsff.txt CMOS Master-Slave Flip-Flop
|
||||
-
|
||||
+ECL
|
||||
eclnor.txt ECL NOR/OR
|
||||
-
|
||||
+Ternary
|
||||
3-cgand.txt CGAND
|
||||
3-cgor.txt CGOR
|
||||
3-invert.txt Complement (F210)
|
||||
3-f211.txt F211
|
||||
3-f220.txt F220
|
||||
3-f221.txt F221
|
||||
-
|
||||
-
|
||||
+Combinational Logic
|
||||
xor.txt Exclusive OR
|
||||
halfadd.txt Half Adder
|
||||
fulladd.txt Full Adder
|
||||
decoder.txt 1-of-4 Decoder
|
||||
priencoder.txt Priority Encoder
|
||||
mux3state.txt 2-to-1 Mux
|
||||
majority.txt Majority Logic
|
||||
digcompare.txt 2-Bit Comparator
|
||||
7segdecoder.txt 7-Segment LED Decoder
|
||||
brentkung.txt Brent-Kung Adder
|
||||
alu74181.txt 74181 ALU
|
||||
-
|
||||
+Sequential Logic
|
||||
+Flip-Flops
|
||||
nandff.txt SR Flip-Flop
|
||||
clockedsrff.txt Clocked SR Flip-Flop
|
||||
masterslaveff.txt Master-Slave Flip-Flop
|
||||
edgedff.txt Edge-Triggered D Flip-Flop
|
||||
jkff.txt JK Flip-Flop
|
||||
-
|
||||
+Counters
|
||||
counter.txt 4-Bit Ripple Counter
|
||||
counter8.txt 8-Bit Ripple Counter
|
||||
synccounter.txt Synchronous Counter
|
||||
updownctr.txt Up/Down Counter
|
||||
deccounter.txt Decimal Counter
|
||||
graycode.txt Gray Code Counter
|
||||
johnsonctr.txt Johnson Counter
|
||||
ringcascade.txt Cascading Ring Counters
|
||||
-
|
||||
+Shift Registers
|
||||
sipo-sr.txt Serial-In Parallel-Out
|
||||
piso-sr.txt Parallel-In Serial-Out
|
||||
unishiftreg.txt Universal
|
||||
-
|
||||
divideby2.txt Divide-by-2
|
||||
divideby3.txt Divide-by-3
|
||||
ledflasher.txt LED Flasher
|
||||
traffic.txt Traffic Light
|
||||
sram.txt Static RAM
|
||||
dram.txt Dynamic RAM
|
||||
+TD4 CPU
|
||||
td4.txt TD4 LED Strobe
|
||||
td4-ctr.txt TD4 Counter
|
||||
td4-ctr-dn.txt TD4 Down Counter
|
||||
td4-ctr-up-dn.txt TD4 Up-Down Counter
|
||||
td4-add2.txt TD4 Add 2
|
||||
-
|
||||
-
|
||||
+Analog/Digital
|
||||
flashadc.txt Flash ADC
|
||||
deltasigma.txt Delta-Sigma ADC
|
||||
hfadc.txt Half-Flash (Subranging) ADC
|
||||
dac.txt Binary-Weighted DAC
|
||||
r2rladder.txt R-2R Ladder DAC
|
||||
swtreedac.txt Switch-Tree DAC
|
||||
digsine.txt Digital Sine Wave
|
||||
qam-256.txt QAM-256 Modulator/Demodulator
|
||||
-
|
||||
+Power Converters
|
||||
conv-boost.txt Boost Converter
|
||||
conv-buck.txt Buck Converter
|
||||
conv-buckboost.txt Buck-Boost Converter
|
||||
conv-cuk.txt Ćuk Converter
|
||||
conv-sepic.txt SEPIC Converter
|
||||
-
|
||||
+Phase-Locked Loops
|
||||
xorphasedet.txt XOR Phase Detector
|
||||
pll.txt Type I PLL
|
||||
phasecomp.txt Phase Comparator (Type II)
|
||||
phasecompint.txt Phase Comparator Internals
|
||||
pll2.txt Type II PLL
|
||||
pll2a.txt Type II PLL (fast)
|
||||
freqdouble.txt Frequency Doubler
|
||||
-
|
||||
+Transmission Lines
|
||||
tl.txt Simple TL
|
||||
tlstand.txt Standing Wave
|
||||
tlterm.txt Termination
|
||||
tlmismatch.txt Mismatched lines (Pulse)
|
||||
tlmis1.txt Mismatched lines (Standing Wave)
|
||||
tlmatch1.txt Impedance Matching (L-Section)
|
||||
tlmatch2.txt Impedance Matching (Shunt Stub)
|
||||
tlfreq.txt Stub Frequency Response
|
||||
tllopass.txt Low-Pass Filter
|
||||
tllight.txt Light Switch
|
||||
-
|
||||
+Controlled Sources
|
||||
cs-resistor.txt VCCS Resistor
|
||||
cs-varyresistor.txt VCCS Varying Resistor
|
||||
cs-opamp.txt VCVS Op-Amp
|
||||
cs-opamprail.txt VCVS Op-Amp With Rails
|
||||
cs-multiplier.txt VCVS Multiplier
|
||||
cs-fullrectifier.txt VCVS Full Rectifier
|
||||
cs-ramp.txt VCVS Voltage Ramp
|
||||
cs-currentadder.txt Current Adder
|
||||
cs-integrator.txt VCVS Integrator
|
||||
cs-diff.txt VCVS Differentiator
|
||||
cs-varinduct.txt CCVS Variable Inductor
|
||||
cs-varicap.txt VCCS Variable Capacitor
|
||||
-
|
||||
+Subcircuits
|
||||
fullrect-sc.txt Full Rectifier
|
||||
adder4-sc.txt Full Adder (nested)
|
||||
-
|
||||
+Misc Devices
|
||||
+JFETs
|
||||
jfetcurrentsrc.txt JFET Current Source
|
||||
jfetfollower.txt JFET Follower
|
||||
jfetfollower-nooff.txt JFET Follower w/zero offset
|
||||
jfetamp.txt Common-Source Amplifier
|
||||
volume.txt Volume Control
|
||||
lambda-diode.txt Lambda Diode
|
||||
lambda-diode-osc.txt Lambda Diode Oscillator
|
||||
-
|
||||
+Tunnel Diodes
|
||||
tdiode.txt I/V Curve
|
||||
tdosc.txt LC Oscillator
|
||||
tdrelax.txt Relaxation Oscillator
|
||||
-
|
||||
+Memristors
|
||||
mr.txt Memristor
|
||||
mr-sine.txt Sine Wave
|
||||
mr-square.txt Square Wave
|
||||
mr-triangle.txt Triangle Wave
|
||||
mr-sine2.txt Hard-Switching 1
|
||||
mr-sine3.txt Hard-Switching 2
|
||||
mr-crossbar.txt Crossbar Memory
|
||||
-
|
||||
+Triodes
|
||||
triode.txt Triode
|
||||
triodeamp.txt Amplifier
|
||||
-
|
||||
+Silicon-Controlled Rectifiers
|
||||
scr.txt SCR
|
||||
scractrig.txt AC Trigger
|
||||
-
|
||||
+Current Conveyor
|
||||
cc2.txt CCII+
|
||||
cc2n.txt CCII-
|
||||
ccinductor.txt Inductor Simulator
|
||||
cc2imp.txt CCII+ Implementation
|
||||
cc2impn.txt CCII- Implementation
|
||||
cciamp.txt Current Amplifier
|
||||
ccvccs.txt VCCS
|
||||
ccdiff.txt Current Differentiator
|
||||
ccint.txt Current Integrator
|
||||
ccitov.txt Current-Controlled Voltage Source
|
||||
-
|
||||
+Spark Gap
|
||||
spark-sawtooth.txt Sawtooth Generator
|
||||
tesla.txt Tesla Coil
|
||||
spark-marx.txt Marx Generator
|
||||
-
|
||||
+Operational Transconductance Amplifier (OTA)
|
||||
ota-vca.txt OTA Voltage Controlled Amplifier (VCA)
|
||||
ota-vcf-single.txt OTA Single Stage VCF (low pass)
|
||||
ota-ringmod.txt OTA Ring Modulator
|
||||
ota-gain.txt LM137000 Gain Oddity
|
||||
-
|
||||
+Light Bulb
|
||||
lightbulb.txt Light Bulb
|
||||
wienbridge.txt Wien Bridge Oscillator
|
||||
-
|
||||
+Varactor
|
||||
varactor.txt Varactor
|
||||
varactorvco.txt VCO
|
||||
-
|
||||
+Norton Amplifier
|
||||
norton-invert.txt Norton Inverting Amplifier
|
||||
norton-noninvert.txt Norton Noninverting Amplifier
|
||||
norton-saw.txt Norton Sawtooth Oscillator
|
||||
-
|
||||
ledarray.txt LED Array
|
||||
triacdimmer.txt DIAC/TRIAC Dimmer
|
||||
ujtosc.txt Unijunction Oscillator
|
||||
3motor.txt 3-Phase Motor
|
||||
latchingrelay.txt Latching Relay
|
||||
gyratorelm.txt Gyrator
|
||||
-
|
||||
+2-D Scope
|
||||
lissa.txt Lissajous Figures
|
||||
plot2d-checker.txt Checkerboard
|
||||
plot2d-color.txt Color Checkerboard
|
||||
plot2d-smile.txt Smiley
|
||||
-
|
||||
blank.txt Blank Circuit
|
||||
@@ -0,0 +1,127 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
/*Hide all mobile elements when in desktop usage*/
|
||||
.trigger, .toptrigger, .triggerLabel, toptriggerlabel {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 600px) {
|
||||
.triggerLabel {
|
||||
display: initial;
|
||||
border-radius: 10px 0px 0px 10px;
|
||||
background: white;
|
||||
width: 20px;
|
||||
height: 50px;
|
||||
position: absolute;
|
||||
top: 50px;
|
||||
right: 0;
|
||||
z-index: 1;
|
||||
transition: right 1s;
|
||||
}
|
||||
.triggerLabel:before {
|
||||
content: "‖";
|
||||
font-size: 32px;
|
||||
padding-left: 3px;
|
||||
position: absolute;
|
||||
padding-top: 5px;
|
||||
}
|
||||
.toptriggerlabel {
|
||||
z-index: 1;
|
||||
top: 5px;
|
||||
right: 5px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
position: absolute;
|
||||
}
|
||||
.toptriggerlabel:before {
|
||||
content: "☰";
|
||||
font-size: 16px;
|
||||
padding-left: 2px;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/*Trick to hide the menu when the user taps out of the menu*/
|
||||
.toptrigger:checked {
|
||||
display: block;
|
||||
opacity: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 2;
|
||||
position: absolute;
|
||||
}
|
||||
.trigger:checked+.triggerLabel {
|
||||
right: 128px;
|
||||
}
|
||||
|
||||
/* selects the top panel */
|
||||
.gwt-MenuBar-horizontal>table {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* shows the top menu when the user taps the menu icon */
|
||||
.toptrigger:checked+label+div>div>table {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
/* selects the side panel */
|
||||
.trigger+.triggerLabel+div {
|
||||
width: 0 !important;
|
||||
background: white;
|
||||
z-index: 1;
|
||||
transition: width 1s;
|
||||
}
|
||||
.trigger:checked+.triggerLabel+div {
|
||||
width: 128px !important;
|
||||
}
|
||||
|
||||
/* selects the top menu */
|
||||
.gwt-MenuBar-horizontal>table {
|
||||
height: auto;
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
top: 30px;
|
||||
background: white;
|
||||
z-index: 2;
|
||||
}
|
||||
.gwt-MenuBar-horizontal * {
|
||||
display: block;
|
||||
}
|
||||
.gwt-MenuBarPopup {
|
||||
z-index: 2;
|
||||
width: 100%;
|
||||
left: 0 !important;
|
||||
}
|
||||
.gwt-MenuBarPopup>div {
|
||||
overflow: scroll;
|
||||
z-index: 2;
|
||||
width: 100%;
|
||||
height: 300px;
|
||||
position: fixed;
|
||||
top: 30px;
|
||||
/* trick to prevent sub menus from opening in the same touch */
|
||||
transition:all 0.1s;
|
||||
}
|
||||
.gwt-MenuBarPopup>div>table {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.menuPopupMiddleCenterInner>div>table {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
.menuPopupTopLeft, .menuPopupTopCenter, .menuPopupTopRight,
|
||||
.menuPopupMiddleLeft, .menuPopupMiddleRight, .menuPopupMiddleCenter,
|
||||
.menuPopupBottomLeft, .menuPopupBottomCenter, .menuPopupBottomRight {
|
||||
background: white !important;
|
||||
}
|
||||
|
||||
/* selects the div containing the canvas */
|
||||
.trigger+.triggerLabel+div+div {
|
||||
width: 100% !important;
|
||||
}
|
||||
/* added extra div for toolbar */
|
||||
.trigger+.triggerLabel+div+div+div {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
Font license info
|
||||
|
||||
|
||||
## Font Awesome
|
||||
|
||||
Copyright (C) 2016 by Dave Gandy
|
||||
|
||||
Author: Dave Gandy
|
||||
License: SIL (http://scripts.sil.org/OFL)
|
||||
Homepage: http://fortawesome.github.com/Font-Awesome/
|
||||
|
||||
|
||||
## Entypo
|
||||
|
||||
Copyright (C) 2012 by Daniel Bruce
|
||||
|
||||
Author: Daniel Bruce
|
||||
License: SIL (http://scripts.sil.org/OFL)
|
||||
Homepage: http://www.entypo.com
|
||||
|
||||
|
||||
## Modern Pictograms
|
||||
|
||||
Copyright (c) 2012 by John Caserta. All rights reserved.
|
||||
|
||||
Author: John Caserta
|
||||
License: SIL (http://scripts.sil.org/OFL)
|
||||
Homepage: http://thedesignoffice.org/project/modern-pictograms/
|
||||
|
||||
|
||||
## Elusive
|
||||
|
||||
Copyright (C) 2013 by Aristeides Stathopoulos
|
||||
|
||||
Author: Aristeides Stathopoulos
|
||||
License: SIL (http://scripts.sil.org/OFL)
|
||||
Homepage: http://aristeides.com/
|
||||
|
||||
|
||||
|
||||
Icon license info
|
||||
|
||||
Authors:
|
||||
Creaticca Creative Agency (https://www.flaticon.com/authors/creaticca-creative-agency) from www.flaticon.com
|
||||
Pixel perfect (https://www.flaticon.com/authors/pixel-perfect) from www.flaticon.com
|
||||
Freepik (https://www.flaticon.com/authors/freepik) from www.flaticon.com
|
||||
License: Flaticon License (https://www.freepikcompany.com/legal#nav-flaticon).
|
||||
|
||||
Author: Google (https://www.flaticon.com/authors/google) from www.flaticon.com
|
||||
License: CC 3.0 BY (https://creativecommons.org/licenses/by/3.0/).
|
||||
|
||||
@@ -0,0 +1,294 @@
|
||||
{
|
||||
"name": "",
|
||||
"css_prefix_text": "cirjsicon-",
|
||||
"css_use_suffix": false,
|
||||
"hinting": true,
|
||||
"units_per_em": 1000,
|
||||
"ascent": 850,
|
||||
"glyphs": [
|
||||
{
|
||||
"uid": "6533bdc16ab201eb3f3b27ce989cab33",
|
||||
"css": "folder",
|
||||
"code": 61717,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "5408be43f7c42bccee419c6be53fdef5",
|
||||
"css": "doc-text",
|
||||
"code": 61686,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "b22fdf6cbaa9c54fbb0bc9abb0ed4098",
|
||||
"css": "dropbox",
|
||||
"code": 62256,
|
||||
"src": "entypo"
|
||||
},
|
||||
{
|
||||
"uid": "f4445feb55521283572ee88bc304f928",
|
||||
"css": "floppy",
|
||||
"code": 59392,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "895405dfac8a3b7b2f23b183c6608ee6",
|
||||
"css": "export",
|
||||
"code": 59395,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "1cb3652ffb3492344fa3a675c3ff3290",
|
||||
"css": "microchip",
|
||||
"code": 62171,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "ff70f7b3228702e0d590e60ed3b90bea",
|
||||
"css": "magic",
|
||||
"code": 61648,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "89eb512cb82a1c3fe83cb16134f9876c",
|
||||
"css": "back-in-time",
|
||||
"code": 59393,
|
||||
"src": "entypo"
|
||||
},
|
||||
{
|
||||
"uid": "7ssl5z5jrhu13tb13cd3gb4bdfkzbfzw",
|
||||
"css": "print",
|
||||
"code": 59396,
|
||||
"src": "modernpics"
|
||||
},
|
||||
{
|
||||
"uid": "7e4164950ffa4990961958b2d6318658",
|
||||
"css": "info-circled",
|
||||
"code": 59401,
|
||||
"src": "entypo"
|
||||
},
|
||||
{
|
||||
"uid": "f9c3205df26e7778abac86183aefdc99",
|
||||
"css": "ccw",
|
||||
"code": 59394,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "bc71f4c6e53394d5ba46b063040014f1",
|
||||
"css": "cw",
|
||||
"code": 59397,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "8772331a9fec983cdb5d72902a6f9e0e",
|
||||
"css": "scissors",
|
||||
"code": 59398,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "c8585e1e5b0467f28b70bce765d5840c",
|
||||
"css": "copy",
|
||||
"code": 61637,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "b429436ec5a518c78479d44ef18dbd60",
|
||||
"css": "paste",
|
||||
"code": 61674,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "6846d155ad5bda456569df81f3057faa",
|
||||
"css": "clone",
|
||||
"code": 62029,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "9f23eb7958809a08586817a99f6a6feb",
|
||||
"css": "select-all",
|
||||
"code": 59408,
|
||||
"src": "custom_icons",
|
||||
"selected": true,
|
||||
"svg": {
|
||||
"path": "M983.3 483.3H516.7V16.7C516.7 7.5 509.2 0 500 0S483.3 7.5 483.3 16.7V483.3H16.7C7.4 483.3 0 490.8 0 500S7.4 516.7 16.7 516.7H483.3V983.3C483.3 992.5 490.8 1000 500 1000S516.7 992.5 516.7 983.3V516.7H983.3C992.5 516.7 1000 509.2 1000 500S992.6 483.3 983.3 483.3ZM750 550H566.7C557.4 550 550 557.5 550 566.7V750C550 759.2 557.4 766.7 566.7 766.7H750C759.2 766.7 766.7 759.2 766.7 750V566.7C766.7 557.5 759.2 550 750 550ZM433.3 550H250C240.8 550 233.3 557.5 233.3 566.7V750C233.3 759.2 240.8 766.7 250 766.7H433.3C442.6 766.7 450 759.2 450 750V566.7C450 557.5 442.6 550 433.3 550ZM433.3 233.3H250C240.8 233.3 233.3 240.8 233.3 250V433.3C233.3 442.5 240.8 450 250 450H433.3C442.6 450 450 442.5 450 433.3V250C450 240.8 442.6 233.3 433.3 233.3ZM750 233.3H566.7C557.4 233.3 550 240.8 550 250V433.3C550 442.5 557.4 450 566.7 450H750C759.2 450 766.7 442.5 766.7 433.3V250C766.7 240.8 759.2 233.3 750 233.3Z",
|
||||
"width": 1000
|
||||
},
|
||||
"search": [
|
||||
"select-all"
|
||||
]
|
||||
},
|
||||
{
|
||||
"uid": "0b2b66e526028a6972d51a6f10281b4b",
|
||||
"css": "zoom-in",
|
||||
"code": 59402,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "d25d10efa900f529ad1d275657cfd30e",
|
||||
"css": "zoom-out",
|
||||
"code": 59403,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "9cbd6e00a68a821d63f64db616672087",
|
||||
"css": "zoom-11",
|
||||
"code": 59399,
|
||||
"src": "custom_icons",
|
||||
"selected": true,
|
||||
"svg": {
|
||||
"path": "M405.2 0.4C345.8 4.5 291.2 19.1 239.8 44.6 112.7 107.4 24.2 229.4 4.2 369.5 0.7 393.8 0.3 400.3 0.3 432.1 0.3 463.3 0.7 469.7 3.9 493 25.4 648.3 131.2 780.9 278.2 836.4 316.1 850.8 354.4 859.3 398.2 863.1 410.4 864.2 452.6 864.2 464.8 863.1 503.2 859.7 534.3 853.5 568.2 842.2 609.8 828.4 645.6 810.4 680.7 785.8L688.2 780.5 790.1 882.9C864.5 957.6 893.3 986.2 896.7 988.5 902.6 992.6 910.5 996.3 917.1 998.1 924.3 1000.1 939.4 1000.6 946.8 999.1 971.3 994.1 989.9 977.1 997.2 952.9 998.8 947.6 999 946.4 999 935.3 999 924.9 998.8 922.9 997.6 918.1 995.8 911.5 991.5 902.5 987.8 897.1 986.2 895 939 847 882.7 790.5L780.5 687.8 782.5 685.3C783.5 683.9 787.3 678.5 790.8 673.2 831.8 612.3 855.7 544.1 862.8 468.6 864.1 453.8 864.3 412.3 863.1 398.2 859.8 360.6 853.5 329.3 842.7 296.2 815 211.7 761.5 137.6 689.5 84.2 633.2 42.5 567.1 15.1 497.4 4.5 475.5 1.2 465.2 0.5 436.3 0.3 421.2 0.3 407.2 0.3 405.2 0.4ZM465.1 132.2C519.6 138.6 569.3 158.2 612.4 190.1 634.1 206.2 658.1 230.2 674.1 251.9 702.9 290.6 722 335.7 729.8 382.8 732.8 401.7 733.4 408.5 733.4 431.8 733.4 454.5 733 459.2 730.5 476.6 723.2 525.7 703.8 572.3 674.1 612.4 658.1 634.1 634 658.1 612.4 674.1 539.8 727.9 448.1 746.4 360.1 725.1 321.6 715.7 284.2 698.1 251.9 674.1 235.3 661.8 213.8 641.5 200.8 625.8 162.2 579.3 139.4 525.9 132.1 464.5 130.5 450.8 130.5 413.5 132.1 399.8 136.5 363.1 145.7 331.3 161.3 299.3 176.1 269 194.6 243.3 218.9 218.9 249 188.9 282.3 166.9 321.4 151.5 350.3 140.1 377.5 134 412.3 131 419.8 130.3 456.6 131.2 465.1 132.2ZM256.2 293.9C242.4 303.8 231.1 312.2 231.1 312.6 231.1 313.1 233.6 323.2 236.6 335.3 240.7 351.1 242.4 357.2 243 357 243.5 356.8 250.1 351.7 257.6 345.8L271.4 334.8 271.4 427 271.4 519.2 261.2 519.2 251 519.2 251 541 251 562.7 295.5 562.7 339.9 562.7 339.9 541 339.9 519.2 331.3 519.2 322.7 519.2 322.7 397.6 322.7 275.9 302 275.9 281.4 275.9 256.2 293.9ZM550.4 293.8C536.8 303.5 525.5 311.7 525.3 311.9 524.8 312.3 535.8 356 536.6 356.9 536.8 357.2 543 352.7 550.4 346.9 557.7 341.1 564.1 336.2 564.5 335.9 565.1 335.5 565.3 354 565.3 427.3L565.3 519.2 556 519.2 546.7 519.2 546.7 541 546.7 562.7 591.5 562.7 636.4 562.7 636.4 541 636.4 519.2 626.8 519.2 617.2 519.2 617.2 397.6 617.2 275.9 596.2 276 575.2 276 550.4 293.8ZM431.1 351.7C419 354.5 409.7 363.8 406.9 375.9 404.9 384.3 405.9 393.9 409.5 401.3 411.8 406 417.9 412.3 422.4 414.7 432.4 420 444.7 420 454.7 414.7 459.3 412.3 465.4 406 467.6 401.2 475.2 385.3 470.1 364.7 456.6 356 449.7 351.7 439.2 349.9 431.1 351.7ZM432.1 495.6C423.4 497.1 414.2 503.8 409.9 511.9 402.8 525.4 405.2 543.4 415.4 553.6 421.7 559.9 428.9 562.7 438.7 562.7 454.1 562.7 466.1 553.5 469.9 538.7 474.1 522.2 467 504.9 453.2 498.4 446.4 495.2 439.9 494.4 432.1 495.6Z",
|
||||
"width": 999
|
||||
},
|
||||
"search": [
|
||||
"zoom-11"
|
||||
]
|
||||
},
|
||||
{
|
||||
"uid": "cf772d9d1eca484c9772a98045dd39d6",
|
||||
"css": "target",
|
||||
"code": 59400,
|
||||
"src": "elusive"
|
||||
},
|
||||
{
|
||||
"uid": "543093d4fa683d47a9d0ae7e1c261359",
|
||||
"css": "lines",
|
||||
"code": 59406,
|
||||
"src": "custom_icons",
|
||||
"selected": true,
|
||||
"svg": {
|
||||
"path": "M944.4 0H55.6C24.9 0 0 24.9 0 55.6V166.7C0 197.3 24.9 222.2 55.6 222.2H944.4C975.1 222.2 1000 197.3 1000 166.7V55.6C1000 24.9 975.1 0 944.4 0ZM944.4 0M944.4 333.3H55.6C24.9 333.3 0 358.3 0 388.9V500C0 530.6 24.9 555.6 55.6 555.6H944.4C975.1 555.6 1000 530.6 1000 500V388.9C1000 358.3 975.1 333.3 944.4 333.3ZM944.4 333.3M944.4 666.7H55.6C24.9 666.7 0 691.6 0 722.2V833.3C0 863.9 24.9 888.9 55.6 888.9H944.4C975.1 888.9 1000 863.9 1000 833.3V722.2C1000 691.6 975.1 666.7 944.4 666.7ZM944.4 666.7",
|
||||
"width": 1000
|
||||
},
|
||||
"search": [
|
||||
"menu"
|
||||
]
|
||||
},
|
||||
{
|
||||
"uid": "0751e9283287ec810f337df91f232374",
|
||||
"css": "columns",
|
||||
"code": 59405,
|
||||
"src": "custom_icons",
|
||||
"selected": true,
|
||||
"svg": {
|
||||
"path": "M210.5 131.6H52.6C23.7 131.6 0 155.3 0 184.2V815.8C0 844.7 23.7 868.4 52.6 868.4H210.5C239.5 868.4 263.2 844.7 263.2 815.8V184.2C263.2 155.3 239.5 131.6 210.5 131.6ZM578.9 131.6H421.1C392.1 131.6 368.4 155.3 368.4 184.2V815.8C368.4 844.7 392.1 868.4 421.1 868.4H578.9C607.9 868.4 631.6 844.7 631.6 815.8V184.2C631.6 155.3 607.9 131.6 578.9 131.6ZM947.4 131.6H789.5C760.5 131.6 736.8 155.3 736.8 184.2V815.8C736.8 844.7 760.5 868.4 789.5 868.4H947.4C976.3 868.4 1000 844.7 1000 815.8V184.2C1000 155.3 976.3 131.6 947.4 131.6Z",
|
||||
"width": 1000
|
||||
},
|
||||
"search": [
|
||||
"columns-(1)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"uid": "7aa8cc552d9d6d19815750fc339cf090",
|
||||
"css": "object-group",
|
||||
"code": 62023,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "d4edf8563d5cb3b5f654808aa4fe438a",
|
||||
"css": "object-ungroup",
|
||||
"code": 62024,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "7184d8171b6a9b18eabbace94cca21db",
|
||||
"css": "chart-line",
|
||||
"code": 59404,
|
||||
"src": "entypo"
|
||||
},
|
||||
{
|
||||
"uid": "922ab2cb66943a83de969990289ef1dc",
|
||||
"css": "docsx",
|
||||
"code": 59407,
|
||||
"src": "entypo"
|
||||
},
|
||||
{
|
||||
"uid": "b013f6403e5ab0326614e68d1850fd6b",
|
||||
"css": "resize-full-alt",
|
||||
"code": 61618,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "744a71fe4b5ab7c4f4b7cd598e9bf75a",
|
||||
"css": "window",
|
||||
"code": 59409,
|
||||
"src": "entypo"
|
||||
},
|
||||
{
|
||||
"uid": "2d60c785d26bf9c685424dd64248aaee",
|
||||
"css": "none",
|
||||
"code": 59410,
|
||||
"src": "custom_icons",
|
||||
"selected": true,
|
||||
"svg": {
|
||||
"path": "",
|
||||
"width": 1000
|
||||
},
|
||||
"search": [
|
||||
"none"
|
||||
]
|
||||
},
|
||||
{
|
||||
"uid": "9e0404ba55575a540164db9a5ad511df",
|
||||
"css": "doc-new",
|
||||
"code": 59411,
|
||||
"src": "elusive"
|
||||
},
|
||||
{
|
||||
"uid": "9dd9e835aebe1060ba7190ad2b2ed951",
|
||||
"css": "search",
|
||||
"code": 59412,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "3c961c1a8d874815856fc6637dc5a13c",
|
||||
"css": "image",
|
||||
"code": 61893,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "d3b3f17bc3eb7cd809a07bbd4d178bee",
|
||||
"css": "flip-y",
|
||||
"code": 59413,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "3c73d058e4589b65a8d959c0fc8f153d",
|
||||
"css": "flip-x",
|
||||
"code": 59414,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "e594fc6e5870b4ab7e49f52571d52577",
|
||||
"css": "flip-x-y",
|
||||
"code": 59415,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "500f9108bd1bad36bbe1a4cef7828974",
|
||||
"css": "folder",
|
||||
"code": 59408,
|
||||
"src": "custom_icons",
|
||||
"selected": false,
|
||||
"svg": {
|
||||
"path": "M958.2 358.3H900V253.9C900 228.8 879.6 208.3 854.5 208.3H441.9L358.6 91.7H45.5C20.4 91.7 0 112.1 0 137.2V865.3L0.1 865.3C0 874.7 2.9 883.9 8.8 891.6 17 902.2 29.3 908.3 42.8 908.3H788.7C808 908.3 825 895.4 829.6 878.1L1000 410.8V407.9C1000 379.2 982.4 358.3 958.2 358.3ZM33.3 137.2C33.3 130.5 38.8 125 45.5 125H341.4L424.8 241.7H854.5C861.2 241.7 866.6 247.1 866.6 253.9V358.3H212.2C209.8 358.3 207.4 358.5 205.1 358.9 188.9 361.7 175.4 373.5 171.4 388.5L33.3 765V137.2ZM797.8 868.1C796.7 872.1 793 875 788.7 875H42.8C38.7 875 36.3 872.7 35.3 871.3 34.2 869.9 32.6 867 33.2 864.5L203.1 398.6C204.2 394.5 207.9 391.7 212.2 391.7H900 958.2C964.5 391.7 966.1 400.8 966.5 405.3L797.8 868.1Z",
|
||||
"width": 1000
|
||||
},
|
||||
"search": [
|
||||
"folder"
|
||||
]
|
||||
},
|
||||
{
|
||||
"uid": "ff6c7d2e5cc1d08e8edb96d215b287de",
|
||||
"css": "quote",
|
||||
"code": 59409,
|
||||
"src": "custom_icons",
|
||||
"selected": false,
|
||||
"svg": {
|
||||
"path": "M261.6 292.5H226C231.4 252.9 253.3 251 263.3 250 273.4 249.1 281.1 240.7 281.1 230.6V172.1C281.1 166.8 278.9 161.6 275 157.9 271.1 154.3 265.8 152.4 260.5 152.6 198.7 156.1 125.1 187.3 125.1 316.1V417.7C125.1 434.7 138.9 448.5 155.9 448.5H261.6C278.5 448.5 292.3 434.7 292.3 417.7V323.3C292.3 306.3 278.5 292.5 261.6 292.5ZM253.3 409.4H164.2V316.1C164.2 226.2 204.2 201.1 242 194V214.6C215.9 222.5 185.8 246 185.8 312 185.8 322.8 194.5 331.6 205.3 331.6H253.3V409.4ZM868.7 500H773.6C757.3 500 744 513.3 744 529.6V614.6C744 631 757.3 644.3 773.6 644.3H803.4C798.4 676.2 780.9 677.8 771.8 678.6 761.8 679.5 754.1 687.9 754.1 698V750.7C754.1 756 756.3 761.2 760.2 764.8 763.8 768.3 768.6 770.2 773.6 770.2 774 770.2 774.3 770.2 774.7 770.2 831.1 767 898.3 738.5 898.3 621.1V529.6C898.3 513.3 885 500 868.7 500ZM859.3 621.1C859.3 698.7 825.8 721.7 793.1 728.6V713.9H793.1C817 706.2 843.8 684.3 843.8 624.7 843.8 613.9 835 605.2 824.2 605.2H783V539.1H859.3V621.1ZM687.3 500H592.2C575.9 500 562.6 513.3 562.6 529.6V614.6C562.6 631 575.9 644.3 592.2 644.3H622C617 676.2 599.6 677.8 590.5 678.6 580.4 679.5 572.7 687.9 572.7 698V750.7C572.7 756 574.9 761.2 578.8 764.8 582.5 768.3 587.3 770.2 592.3 770.2 592.6 770.2 593 770.2 593.3 770.2 649.8 767 717 738.5 717 621.1V529.6C717 513.3 703.7 500 687.3 500ZM677.9 621.1C677.9 698.7 644.4 721.7 611.8 728.6V713.9C635.6 706.2 662.4 684.3 662.4 624.7 662.4 613.9 653.7 605.2 642.9 605.2H601.7V539.1H677.9V621.1ZM883.5 372.1H821.1C810.4 372.1 801.6 380.8 801.6 391.6S810.4 411.1 821.1 411.1H883.5C926.2 411.1 960.9 445.9 960.9 488.6V779C960.9 821.7 926.2 856.4 883.5 856.4H733.1C727.9 856.4 722.9 858.5 719.3 862.2L649.1 932.3V876C649.1 865.2 640.3 856.4 629.6 856.4H577.5C534.8 856.4 500 821.7 500 779V488.6C500 445.9 534.8 411.1 577.5 411.1H650.4C661.2 411.1 669.9 402.4 669.9 391.6 669.9 380.8 661.2 372.1 650.4 372.1H577.5C543.7 372.1 513.3 386.5 492 409.5V323.3C492 306.3 478.2 292.5 461.3 292.5H425.7C431.1 252.9 452.9 251 463 250 473.1 249.1 480.8 240.7 480.8 230.6V172.1C480.8 166.8 478.6 161.6 474.7 157.9 470.8 154.3 465.5 152.3 460.1 152.6 398.4 156.1 324.8 187.3 324.8 316.1V417.7C324.8 434.7 338.6 448.5 355.6 448.5H461.3C463.7 448.5 466.1 448.2 468.4 447.6 463.6 460.4 460.9 474.2 460.9 488.6V779C460.9 843.2 513.2 895.5 577.5 895.5H610V979.5C610 987.4 614.8 994.5 622.1 997.5 624.5 998.5 627 999 629.6 999 634.6 999 639.6 997 643.4 993.3L741.2 895.5H883.5C947.7 895.5 1000 843.2 1000 779V488.6C1000 424.3 947.7 372.1 883.5 372.1ZM453 409.4H363.9V316.1C363.9 226.2 403.8 201.1 441.7 194V214.6C415.6 222.5 385.5 246 385.5 312 385.5 322.8 394.2 331.6 405 331.6H453V409.4ZM754 377.8C750.4 374.2 745.4 372.1 740.2 372.1S730.1 374.2 726.4 377.8C722.8 381.4 720.7 386.5 720.7 391.6S722.8 401.8 726.4 405.4C730.1 409 735.1 411.1 740.2 411.1S750.4 409 754 405.4C757.7 401.8 759.8 396.7 759.8 391.6S757.7 381.4 754 377.8ZM611.5 308.8C607.8 305.1 602.8 303.1 597.7 303.1 592.5 303.1 587.5 305.1 583.8 308.8 580.2 312.4 578.1 317.4 578.1 322.6 578.1 327.7 580.2 332.8 583.8 336.4 587.5 340 592.5 342.1 597.7 342.1 602.8 342.1 607.8 340 611.5 336.4 615.1 332.8 617.2 327.7 617.2 322.6 617.2 317.4 615.1 312.4 611.5 308.8ZM485.5 1H131.7C59.1 1 0 60.1 0 132.7V468.4C0 541 59.1 600.1 131.7 600.1H172.9L286.9 714.1C290.6 717.8 295.6 719.8 300.7 719.8 303.2 719.8 305.8 719.3 308.2 718.3 315.5 715.3 320.3 708.2 320.3 700.3V600.1H388.7C399.5 600.1 408.2 591.4 408.2 580.6S399.5 561 388.7 561H300.7C289.9 561 281.2 569.8 281.2 580.6V653.1L194.8 566.8C191.2 563.1 186.2 561 181 561H131.7C80.6 561 39.1 519.5 39.1 468.4V132.7C39.1 81.6 80.6 40 131.7 40H485.5C536.6 40 578.1 81.6 578.1 132.7V248.4C578.1 259.2 586.9 267.9 597.7 267.9 608.4 267.9 617.2 259.2 617.2 248.4V132.7C617.2 60.1 558.1 1 485.5 1Z",
|
||||
"width": 1000
|
||||
},
|
||||
"search": [
|
||||
"quote"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
@font-face {
|
||||
font-family: 'fontello';
|
||||
src: url('../font/fontello.eot?11951332');
|
||||
src: url('../font/fontello.eot?11951332#iefix') format('embedded-opentype'),
|
||||
url('../font/fontello.woff2?11951332') format('woff2'),
|
||||
url('../font/fontello.woff?11951332') format('woff'),
|
||||
url('../font/fontello.ttf?11951332') format('truetype'),
|
||||
url('../font/fontello.svg?11951332#fontello') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
|
||||
/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
|
||||
/*
|
||||
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
||||
@font-face {
|
||||
font-family: 'fontello';
|
||||
src: url('../font/fontello.svg?11951332#fontello') format('svg');
|
||||
}
|
||||
}
|
||||
*/
|
||||
[class^="cirjsicon-"]:before, [class*=" cirjsicon-"]:before {
|
||||
font-family: "fontello";
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
speak: never;
|
||||
|
||||
display: inline-block;
|
||||
text-decoration: inherit;
|
||||
width: 1em;
|
||||
margin-right: .2em;
|
||||
text-align: center;
|
||||
/* opacity: .8; */
|
||||
|
||||
/* For safety - reset parent styles, that can break glyph codes*/
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
|
||||
/* fix buttons height, for twitter bootstrap */
|
||||
line-height: 1em;
|
||||
|
||||
/* Animation center compensation - margins should be symmetric */
|
||||
/* remove if not needed */
|
||||
margin-left: .2em;
|
||||
|
||||
/* you can be more comfortable with increased icons size */
|
||||
/* font-size: 120%; */
|
||||
|
||||
/* Font smoothing. That was taken from TWBS */
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
|
||||
/* Uncomment for 3D effect */
|
||||
/* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
|
||||
}
|
||||
|
||||
.cirjsicon-floppy:before { content: '\e800'; } /* '' */
|
||||
.cirjsicon-back-in-time:before { content: '\e801'; } /* '' */
|
||||
.cirjsicon-ccw:before { content: '\e802'; } /* '' */
|
||||
.cirjsicon-export:before { content: '\e803'; } /* '' */
|
||||
.cirjsicon-print:before { content: '\e804'; } /* '' */
|
||||
.cirjsicon-cw:before { content: '\e805'; } /* '' */
|
||||
.cirjsicon-scissors:before { content: '\e806'; } /* '' */
|
||||
.cirjsicon-zoom-11:before { content: '\e807'; } /* '' */
|
||||
.cirjsicon-target:before { content: '\e808'; } /* '' */
|
||||
.cirjsicon-info-circled:before { content: '\e809'; } /* '' */
|
||||
.cirjsicon-zoom-in:before { content: '\e80a'; } /* '' */
|
||||
.cirjsicon-zoom-out:before { content: '\e80b'; } /* '' */
|
||||
.cirjsicon-chart-line:before { content: '\e80c'; } /* '' */
|
||||
.cirjsicon-columns:before { content: '\e80d'; } /* '' */
|
||||
.cirjsicon-lines:before { content: '\e80e'; } /* '' */
|
||||
.cirjsicon-docsx:before { content: '\e80f'; } /* '' */
|
||||
.cirjsicon-select-all:before { content: '\e810'; } /* '' */
|
||||
.cirjsicon-window:before { content: '\e811'; } /* '' */
|
||||
.cirjsicon-none:before { content: '\e812'; } /* '' */
|
||||
.cirjsicon-doc-new:before { content: '\e813'; } /* '' */
|
||||
.cirjsicon-search:before { content: '\e814'; } /* '' */
|
||||
.cirjsicon-flip-y:before { content: '\e815'; } /* '' */
|
||||
.cirjsicon-flip-x:before { content: '\e816'; } /* '' */
|
||||
.cirjsicon-flip-x-y:before { content: '\e817'; } /* '' */
|
||||
.cirjsicon-resize-full-alt:before { content: '\f0b2'; } /* '' */
|
||||
.cirjsicon-copy:before { content: '\f0c5'; } /* '' */
|
||||
.cirjsicon-magic:before { content: '\f0d0'; } /* '' */
|
||||
.cirjsicon-paste:before { content: '\f0ea'; } /* '' */
|
||||
.cirjsicon-doc-text:before { content: '\f0f6'; } /* '' */
|
||||
.cirjsicon-folder:before { content: '\f115'; } /* '' */
|
||||
.cirjsicon-image:before { content: '\f1c5'; } /* '' */
|
||||
.cirjsicon-object-group:before { content: '\f247'; } /* '' */
|
||||
.cirjsicon-object-ungroup:before { content: '\f248'; } /* '' */
|
||||
.cirjsicon-clone:before { content: '\f24d'; } /* '' */
|
||||
.cirjsicon-microchip:before { content: '\f2db'; } /* '' */
|
||||
.cirjsicon-dropbox:before { content: '\f330'; } /* '' */
|
||||
@@ -0,0 +1,82 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Copyright (C) 2024 by original authors @ fontello.com</metadata>
|
||||
<defs>
|
||||
<font id="fontello" horiz-adv-x="1000" >
|
||||
<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
|
||||
<missing-glyph horiz-adv-x="1000" />
|
||||
<glyph glyph-name="floppy" unicode="" d="M214-7h429v214h-429v-214z m500 0h72v500q0 8-6 21t-11 20l-157 156q-5 6-19 12t-22 5v-232q0-22-15-38t-38-16h-322q-22 0-37 16t-16 38v232h-72v-714h72v232q0 22 16 38t37 16h465q22 0 38-16t15-38v-232z m-214 518v178q0 8-5 13t-13 5h-107q-7 0-13-5t-5-13v-178q0-7 5-13t13-5h107q7 0 13 5t5 13z m357-18v-518q0-22-15-38t-38-16h-750q-23 0-38 16t-16 38v750q0 22 16 38t38 16h517q23 0 50-12t42-26l156-157q16-15 27-42t11-49z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="back-in-time" unicode="" d="M532 760q170 0 289-120t119-290-119-290-289-120q-138 0-252 88l70 76q82-60 182-60 126 0 216 90t90 216q0 128-90 218t-216 90q-124 0-213-86t-93-210l142 0-184-206-184 206 124 0q4 166 123 282t285 116z m-36-190l70 0 0-204 130-130-50-50-150 150 0 234z" horiz-adv-x="940" />
|
||||
|
||||
<glyph glyph-name="ccw" unicode="" d="M857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="export" unicode="" d="M786 298v-144q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h142q7 0 13-6t5-12q0-15-15-18-43-15-74-34-5-2-9-2h-62q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v119q0 11 10 16 16 7 31 21 8 9 19 4 12-5 12-16z m132 277l-214-214q-10-11-25-11-7 0-14 3-22 9-22 33v107h-89q-181 0-245-73-66-77-41-264 2-13-11-19-5-1-7-1-9 0-14 7-6 8-12 17t-22 39-28 55-21 64-10 68q0 27 2 51t8 50 15 49 27 45 38 42 52 34 70 27 89 17 110 6h89v107q0 24 22 33 7 3 14 3 14 0 25-11l214-214q11-10 11-25t-11-25z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="print" unicode="" d="M866 564c40 0 75-35 75-78l0-366c0-42-35-77-75-77l-76 0 34-153-691 0 27 153-82 0c-45 0-78 35-78 77l0 366c0 43 33 78 78 78l96 0 0 117 34 0 0 129 527 0 0-129 34 0 0-117 97 0z m-623 199l0-292 457 0 0 292-457 0z m-113-389c30 0 55 24 55 54 0 28-25 53-55 53-29 0-54-25-54-53 0-30 25-54 54-54z m63-438l567 0-47 242-484 0z m252 113l-139 0 0 35 139 0 0-35z m198 0l-139 0 0 35 139 0 0-35z" horiz-adv-x="941" />
|
||||
|
||||
<glyph glyph-name="cw" unicode="" d="M857 707v-250q0-14-10-25t-26-11h-250q-23 0-32 23-10 22 7 38l77 77q-82 77-194 77-58 0-111-23t-91-61-61-91-23-111 23-111 61-91 91-61 111-23q66 0 125 29t100 82q4 6 13 7 8 0 14-5l76-77q5-4 6-11t-5-13q-60-74-147-114t-182-41q-87 0-167 34t-136 92-92 137-34 166 34 166 92 137 136 92 167 34q82 0 158-31t137-88l72 72q17 18 39 8 22-9 22-33z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="scissors" unicode="" d="M536 350q14 0 25-11t10-25-10-25-25-10-25 10-11 25 11 25 25 11z m167-36l283-222q16-11 14-31-3-20-19-28l-72-36q-7-4-16-4-10 0-17 4l-385 216-62-36q-4-3-7-3 8-28 6-54-4-43-31-83t-74-69q-74-47-154-47-76 0-124 44-51 47-44 116 4 42 31 82t73 69q74 47 155 47 46 0 84-18 5 8 13 13l68 40-68 41q-8 5-13 12-38-17-84-17-81 0-155 47-46 30-73 69t-31 82q-3 33 8 63t36 52q47 44 124 44 80 0 154-47 46-29 74-68t31-83q2-27-6-54 3-1 7-3l62-37 385 216q7 5 17 5 9 0 16-4l72-36q16-9 19-28 2-20-14-32z m-380 145q26 24 12 61t-59 65q-52 33-107 33-42 0-63-20-26-24-12-60t59-66q51-33 107-33 41 0 63 20z m-47-415q45 28 59 65t-12 60q-22 20-63 20-56 0-107-33-45-28-59-65t12-60q21-20 63-20 55 0 107 33z m99 342l54-33v7q0 20 18 31l8 4-44 26-15-14q-1-2-5-6t-7-7q-1-1-2-2t-2-1z m125-125l54-18 410 321-71 36-429-240v-64l-89-53 5-5q1-1 4-3 2-2 6-7t6-6l15-15z m393-232l71 35-290 228-99-77q-1-2-7-4z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="zoom-11" unicode="" d="M405 850c-59-4-114-19-165-45-127-62-216-184-236-324-3-25-4-31-4-63 0-31 1-38 4-61 21-155 127-288 274-343 38-15 76-23 120-27 12-1 55-1 67 0 38 3 69 9 103 21 42 14 78 32 113 56l7 6 102-103c75-75 103-103 107-106 6-4 14-7 20-9 7-2 22-3 30-1 24 5 43 22 50 46 2 5 2 7 2 18 0 10 0 12-1 17-2 6-6 15-10 21-2 2-49 50-105 107l-102 102 2 3c1 1 4 7 8 12 41 61 65 129 72 204 1 15 1 57 0 71-3 37-9 69-20 102-28 84-81 158-153 212-57 42-123 69-193 80-21 3-32 4-61 4-15 0-29 0-31 0z m60-132c55-7 104-26 147-58 22-16 46-40 62-62 29-39 48-84 56-131 3-19 3-25 3-49 0-22 0-27-2-45-8-49-27-95-57-135-16-22-40-46-62-62-72-54-164-72-252-51-38 9-76 27-108 51-17 12-38 33-51 48-39 47-62 100-69 162-1 13-1 51 0 64 5 37 14 69 29 101 15 30 34 56 58 80 30 30 63 52 102 68 29 11 57 17 91 20 8 1 45 0 53-1z m-209-162c-14-10-25-18-25-19 0 0 3-10 6-22 4-16 5-22 6-22 1 0 7 5 15 11l13 11 0-92 0-92-10 0-10 0 0-22 0-22 45 0 44 0 0 22 0 22-9 0-8 0 0 121 0 122-21 0-21 0-25-18z m294 0c-13-9-24-18-25-18 0 0 11-44 12-45 0 0 6 4 13 10 8 6 14 11 15 11 0 1 0-18 0-91l0-92-9 0-9 0 0-22 0-22 45 0 44 0 0 22 0 22-9 0-10 0 0 121 0 122-21 0-21 0-25-18z m-119-58c-12-2-21-12-24-24-2-8-1-18 3-25 2-5 8-11 12-14 10-5 23-5 33 0 4 3 10 9 13 14 7 16 2 36-11 45-7 4-18 6-26 4z m1-144c-9-1-18-8-22-16-7-13-5-31 5-42 7-6 14-9 24-9 15 0 27 10 31 24 4 17-3 34-17 41-7 3-13 4-21 2z" horiz-adv-x="999" />
|
||||
|
||||
<glyph glyph-name="target" unicode="" d="M0 274l0 152 131 0q21 110 102 191t191 102l0 131 152 0 0-131q110-21 191-102t102-191l131 0 0-152-131 0q-21-109-102-191t-191-102l0-131-152 0 0 131q-110 21-191 102t-102 191l-131 0z m231 0q19-70 71-122t122-71l0 146 152 0 0-146q70 19 122 71t72 122l-147 0 0 152 147 0q-20 71-72 122t-122 72l0-147-152 0 0 147q-70-20-122-72t-71-122l146 0 0-152-146 0z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="info-circled" unicode="" d="M454 810q190 2 326-130t140-322q2-190-131-327t-323-141q-190-2-327 131t-139 323q-4 190 130 327t324 139z m52-152q-42 0-65-24t-23-50q-2-28 15-44t49-16q38 0 61 22t23 54q0 58-60 58z m-120-594q30 0 84 26t106 78l-18 24q-48-36-72-36-14 0-4 38l42 160q26 96-22 96-30 0-89-29t-115-75l16-26q52 34 74 34 12 0 0-34l-36-152q-26-104 34-104z" horiz-adv-x="920" />
|
||||
|
||||
<glyph glyph-name="zoom-in" unicode="" d="M571 404v-36q0-7-5-13t-12-5h-125v-125q0-7-6-13t-12-5h-36q-7 0-13 5t-5 13v125h-125q-7 0-12 5t-6 13v36q0 7 6 12t12 5h125v125q0 8 5 13t13 5h36q7 0 12-5t6-13v-125h125q7 0 12-5t5-12z m72-18q0 103-73 176t-177 74-177-74-73-176 73-177 177-73 177 73 73 177z m286-465q0-29-21-50t-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 153-31 125-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="zoom-out" unicode="" d="M571 404v-36q0-7-5-13t-12-5h-322q-7 0-12 5t-6 13v36q0 7 6 12t12 5h322q7 0 12-5t5-12z m72-18q0 103-73 176t-177 74-177-74-73-176 73-177 177-73 177 73 73 177z m286-465q0-29-21-50t-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 153-31 125-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="chart-line" unicode="" d="M34 284q-42 10-32 56 10 42 54 32l98-24-52-80z m890-12q14 12 33 11t31-15q32-32-2-64l-252-226q-12-12-30-12-14 0-28 10l-286 220-54 14 50 80 36-8q12-4 16-8l264-204z m-490 220l-350-550q-12-22-38-22-12 0-24 8-16 10-20 29t6 33l374 588q8 16 28 20 18 6 36-6l246-156 226 326q10 16 28 19t34-9q38-24 12-62l-252-362q-24-36-62-12z" horiz-adv-x="1003" />
|
||||
|
||||
<glyph glyph-name="columns" unicode="" d="M211 718h-158c-29 0-53-23-53-52v-632c0-29 24-52 53-52h158c29 0 52 23 52 52v632c0 29-23 52-52 52z m368 0h-158c-29 0-53-23-53-52v-632c0-29 24-52 53-52h158c29 0 53 23 53 52v632c0 29-24 52-53 52z m368 0h-157c-29 0-53-23-53-52v-632c0-29 24-52 53-52h157c29 0 53 23 53 52v632c0 29-24 52-53 52z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="lines" unicode="" d="M944 850h-888c-31 0-56-25-56-56v-111c0-30 25-55 56-55h888c31 0 56 25 56 55v111c0 31-25 56-56 56z m0 0m0-333h-888c-31 0-56-25-56-56v-111c0-31 25-56 56-56h888c31 0 56 25 56 56v111c0 31-25 56-56 56z m0 0m0-334h-888c-31 0-56-25-56-55v-111c0-31 25-56 56-56h888c31 0 56 25 56 56v111c0 30-25 55-56 55z m0 0" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="docsx" unicode="" d="M970 480q38-10 30-46l-150-556q-4-16-18-23t-30-3l-406 110q-16 4-24 18t-4 28l24 92-180-48q-40-10-50 26l-160 602q-10 36 28 48l454 122q16 4 30-3t18-23l66-244z m-888 190l144-542 392 106-144 540z m702-742l132 492-298 82 76-282q10-34-28-46l-196-52-26-102z" horiz-adv-x="1001" />
|
||||
|
||||
<glyph glyph-name="select-all" unicode="" d="M983 367h-466v466c0 10-8 17-17 17s-17-7-17-17v-466h-466c-10 0-17-8-17-17s7-17 17-17h466v-466c0-10 8-17 17-17s17 7 17 17v466h466c10 0 17 8 17 17s-7 17-17 17z m-233-67h-183c-10 0-17-7-17-17v-183c0-9 7-17 17-17h183c9 0 17 8 17 17v183c0 10-8 17-17 17z m-317 0h-183c-9 0-17-7-17-17v-183c0-9 8-17 17-17h183c10 0 17 8 17 17v183c0 10-7 17-17 17z m0 317h-183c-9 0-17-8-17-17v-183c0-9 8-17 17-17h183c10 0 17 8 17 17v183c0 9-7 17-17 17z m317 0h-183c-10 0-17-8-17-17v-183c0-9 7-17 17-17h183c9 0 17 8 17 17v183c0 9-8 17-17 17z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="window" unicode="" d="M900 750q42 0 71-30t29-70l0-600q0-42-29-71t-71-29l-800 0q-40 0-70 29t-30 71l0 600q0 40 30 70t70 30l800 0z m-670-94q-16 0-27-11t-11-25q0-16 11-27t27-11q38 0 38 38 0 16-11 26t-27 10z m-138-36q0-16 11-27t27-11q38 0 38 38 0 16-11 26t-27 10-27-11-11-25z m810-570l0 460-802 0 0-460 802 0z m0 540l0 60-602 0 0-60 602 0z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="none" unicode="" d="" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="doc-new" unicode="" d="M0-150l0 818 188 182 519 0 0-348-86 0 0 260-369 0 0-156-166 0 0-668 418 0 0-88-504 0z m373 207l0 162 209 0 0 207 160 0 0-207 207 0 0-162-207 0 0-207-160 0 0 207-209 0z" horiz-adv-x="949" />
|
||||
|
||||
<glyph glyph-name="search" unicode="" d="M643 386q0 103-73 176t-177 74-177-74-73-176 73-177 177-73 177 73 73 177z m286-465q0-29-22-50t-50-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 153-31 125-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="flip-y" unicode="" d="M393 671q0-14-11-25t-25-10h-71v-572h71q15 0 25-10t11-25-11-25l-143-143q-10-11-25-11t-25 11l-143 143q-10 10-10 25t10 25 25 10h72v572h-72q-14 0-25 10t-10 25 10 26l143 142q11 11 25 11t25-11l143-142q11-11 11-26z" horiz-adv-x="428.6" />
|
||||
|
||||
<glyph glyph-name="flip-x" unicode="" d="M1000 350q0-14-11-25l-142-143q-11-11-26-11t-25 11-10 25v72h-572v-72q0-14-10-25t-25-11-25 11l-143 143q-11 11-11 25t11 25l143 143q10 11 25 11t25-11 10-25v-72h572v72q0 14 10 25t25 11 26-11l142-143q11-10 11-25z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="flip-x-y" unicode="" d="M421 261q0-7-5-13l-185-185 80-81q10-10 10-25t-10-25-25-11h-250q-15 0-25 11t-11 25v250q0 15 11 25t25 11 25-11l80-80 186 185q5 6 12 6t13-6l64-63q5-6 5-13z m436 482v-250q0-15-10-25t-26-11-25 11l-80 80-185-185q-6-6-13-6t-13 6l-64 64q-5 5-5 12t5 13l186 185-81 81q-10 10-10 25t10 25 25 11h250q15 0 26-11t10-25z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="resize-full-alt" unicode="" d="M716 548l-198-198 198-198 80 80q17 18 39 8 22-9 22-33v-250q0-14-10-25t-26-11h-250q-23 0-32 23-10 21 7 38l81 81-198 198-198-198 80-81q17-17 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l80-80 198 198-198 198-80-80q-11-11-25-11-7 0-14 3-22 9-22 33v250q0 14 11 25t25 11h250q23 0 33-23 9-21-8-38l-80-81 198-198 198 198-81 81q-17 17-7 38 9 23 32 23h250q15 0 26-11t10-25v-250q0-24-22-33-7-3-14-3-14 0-25 11z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="copy" unicode="" d="M946 636q23 0 38-16t16-38v-678q0-23-16-38t-38-16h-535q-23 0-38 16t-16 38v160h-303q-23 0-38 16t-16 38v375q0 22 11 49t27 42l228 228q15 16 42 27t49 11h232q23 0 38-16t16-38v-183q38 23 71 23h232z m-303-119l-167-167h167v167z m-357 214l-167-167h167v167z m109-361l176 176v233h-214v-233q0-22-15-37t-38-16h-233v-357h286v143q0 22 11 49t27 42z m534-449v643h-215v-232q0-22-15-38t-38-15h-232v-358h500z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="magic" unicode="" d="M664 526l164 163-60 60-164-163z m250 163q0-15-10-25l-718-718q-10-10-25-10t-25 10l-111 111q-10 10-10 25t10 25l718 718q10 10 25 10t25-10l111-111q10-10 10-25z m-754 106l54-16-54-17-17-55-17 55-55 17 55 16 17 55z m195-90l109-34-109-33-34-109-33 109-109 33 109 34 33 109z m519-267l55-17-55-16-17-55-17 55-54 16 54 17 17 55z m-357 357l54-16-54-17-17-55-17 55-54 17 54 16 17 55z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="paste" unicode="" d="M429-79h500v358h-233q-22 0-37 15t-16 38v232h-214v-643z m142 804v36q0 7-5 12t-12 6h-393q-7 0-13-6t-5-12v-36q0-7 5-13t13-5h393q7 0 12 5t5 13z m143-375h167l-167 167v-167z m286-71v-375q0-23-16-38t-38-16h-535q-23 0-38 16t-16 38v89h-303q-23 0-38 16t-16 37v750q0 23 16 38t38 16h607q22 0 38-16t15-38v-183q12-7 20-15l228-228q16-15 27-42t11-49z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="doc-text" unicode="" d="M819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 17-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 16t-16 37v233h-429v-858h715z m-572 483q0 7 5 12t13 5h393q8 0 13-5t5-12v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36z m411-125q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z m0-143q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="folder" unicode="" d="M994 331q0 19-30 19h-607q-22 0-48-12t-39-29l-164-203q-11-13-11-22 0-20 30-20h607q23 0 48 13t40 29l164 203q10 12 10 22z m-637 90h429v90q0 22-16 38t-38 15h-321q-23 0-38 16t-16 38v36q0 22-15 38t-38 15h-179q-22 0-38-15t-16-38v-476l143 175q25 30 65 49t78 19z m708-90q0-35-25-67l-165-203q-24-30-65-49t-78-19h-607q-51 0-88 37t-37 88v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h303q52 0 88-37t37-88v-90h107q30 0 56-13t37-40q8-17 8-37z" horiz-adv-x="1071.4" />
|
||||
|
||||
<glyph glyph-name="image" unicode="" d="M819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 17-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 16t-16 37v233h-429v-858h715z m-72 250v-178h-571v107l107 107 71-71 215 214z m-464 108q-45 0-76 31t-31 76 31 76 76 31 76-31 31-76-31-76-76-31z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="object-group" unicode="" d="M1143 636h-72v-572h72v-214h-214v71h-715v-71h-214v214h71v572h-71v214h214v-71h715v71h214v-214z m-143 143v-72h71v72h-71z m-929 0v-72h72v72h-72z m72-858v72h-72v-72h72z m786 72v71h71v572h-71v71h-715v-71h-71v-572h71v-71h715z m142-72v72h-71v-72h71z m-357 572h215v-429h-500v143h-215v429h500v-143z m-428-214h357v285h-357v-285z m571-143v285h-143v-214h-214v-71h357z" horiz-adv-x="1142.9" />
|
||||
|
||||
<glyph glyph-name="object-ungroup" unicode="" d="M1286 421h-72v-357h72v-214h-215v71h-500v-71h-214v214h72v72h-215v-72h-214v215h71v357h-71v214h214v-71h500v71h215v-214h-72v-72h214v72h215v-215z m-143 143v-71h71v71h-71z m-357 215v-72h71v72h-71z m-715 0v-72h72v72h-72z m72-643v71h-72v-71h72z m714 71h-71v-71h71v71z m-643 0h500v72h72v357h-72v71h-500v-71h-71v-357h71v-72z m286-286v72h-71v-72h71z m714 0v72h-71v-72h71z m-71 143v357h-72v72h-214v-214h72v-215h-215v72h-214v-72h71v-71h500v71h72z" horiz-adv-x="1285.7" />
|
||||
|
||||
<glyph glyph-name="clone" unicode="" d="M929-61v607q0 8-6 13t-12 5h-607q-8 0-13-5t-5-13v-607q0-7 5-12t13-6h607q7 0 12 6t6 12z m71 607v-607q0-37-26-63t-63-26h-607q-37 0-63 26t-27 63v607q0 37 27 64t63 26h607q37 0 63-26t26-64z m-214 215v-90h-72v90q0 7-5 12t-13 6h-607q-7 0-12-6t-6-12v-607q0-8 6-13t12-5h90v-72h-90q-36 0-63 27t-26 63v607q0 37 26 63t63 26h607q37 0 64-26t26-63z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="microchip" unicode="" d="M107 136v-72h-62q-9 0-9 9v9h-27q-9 0-9 9v18q0 9 9 9h27v9q0 9 9 9h62z m0 143v-72h-62q-9 0-9 9v9h-27q-9 0-9 9v18q0 9 9 9h27v9q0 9 9 9h62z m0 142v-71h-62q-9 0-9 9v9h-27q-9 0-9 9v18q0 9 9 9h27v9q0 8 9 8h62z m0 143v-71h-62q-9 0-9 9v9h-27q-9 0-9 9v18q0 8 9 8h27v9q0 9 9 9h62z m0 143v-71h-62q-9 0-9 9v9h-27q-9 0-9 9v17q0 9 9 9h27v9q0 9 9 9h62z m607 89v-821q0-22-15-38t-38-16h-465q-22 0-37 16t-16 38v821q0 23 16 38t37 16h465q22 0 38-16t15-38z m143-687v-18q0-9-9-9h-27v-9q0-9-8-9h-63v72h63q8 0 8-9v-9h27q9 0 9-9z m0 143v-18q0-9-9-9h-27v-9q0-9-8-9h-63v72h63q8 0 8-9v-9h27q9 0 9-9z m0 143v-18q0-9-9-9h-27v-9q0-9-8-9h-63v71h63q8 0 8-8v-9h27q9 0 9-9z m0 143v-18q0-9-9-9h-27v-9q0-9-8-9h-63v71h63q8 0 8-9v-9h27q9 0 9-8z m0 142v-17q0-9-9-9h-27v-9q0-9-8-9h-63v71h63q8 0 8-9v-9h27q9 0 9-9z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="dropbox" unicode="" d="M286 806l194-158-284-184-196 164z m368-754q8 0 12 2l116 78 0-46-302-190-302 190 0 46 118-78q4-2 12-2 10 0 14 4l158 132 160-132q4-4 14-4z m306 576l-194-164-286 184 196 158z m-480-342l286 178 174-140-282-184z m-176-146l-282 184 174 140 284-178z" horiz-adv-x="960" />
|
||||
</font>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,37 @@
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial Unicode MS, Arial, sans-serif;
|
||||
font-size: small;
|
||||
}
|
||||
</style>
|
||||
|
||||
<a href="../about.html" target="_self">⇐ go back</a>
|
||||
|
||||
<div>
|
||||
<h3>Font license info</h3>
|
||||
<p><b>Font Awesome</b></p>
|
||||
<p>Copyright (C) 2016 by Dave Gandy</p>
|
||||
<p>Author: Dave Gandy<br>
|
||||
License: SIL (<a href="http://scripts.sil.org/OFL" target="_blank">http://scripts.sil.org/OFL</a>)<br>
|
||||
Homepage: <a href="http://fortawesome.github.com/Font-Awesome/" target="_blank">http://fortawesome.github.com/Font-Awesome/</a></p>
|
||||
<p><b>Entypo</b></p>
|
||||
<p>Copyright (C) 2012 by Daniel Bruce</p>
|
||||
<p>Author: Daniel Bruce<br>
|
||||
License: SIL (<a href="http://scripts.sil.org/OFL" target="_blank">http://scripts.sil.org/OFL</a>)<br>
|
||||
Homepage: <a href="http://www.entypo.com" target="_blank">http://www.entypo.com</a></p>
|
||||
<p><b>Modern Pictograms</b></p>
|
||||
<p>Copyright (c) 2012 by John Caserta. All rights reserved.</p>
|
||||
<p>Author: John Caserta<br>
|
||||
License: SIL (<a href="http://scripts.sil.org/OFL" target="_blank">http://scripts.sil.org/OFL</a>)<br>
|
||||
Homepage: <a href="http://thedesignoffice.org/project/modern-pictograms/" target="_blank">http://thedesignoffice.org/project/modern-pictograms/</a></p>
|
||||
<p><b>Elusive</b></p>
|
||||
<p>Copyright (C) 2013 by Aristeides Stathopoulos</p>
|
||||
<p>Author: Aristeides Stathopoulos<br>
|
||||
License: SIL (<a href="http://scripts.sil.org/OFL" target="_blank">http://scripts.sil.org/OFL</a>)<br>
|
||||
Homepage: <a href="http://aristeides.com/" target="_blank">http://aristeides.com/</a></p><br>
|
||||
|
||||
<h3>Icon license info</h3>
|
||||
<p>
|
||||
Icons made by <a href="https://www.flaticon.com/authors/freepik" title="Freepik" target="_blank">Freepik</a>, <a href="https://www.flaticon.com/authors/creaticca-creative-agency" title="Creaticca Creative Agency" target="_blank">Creaticca Creative Agency</a>, <a href="https://www.flaticon.com/authors/pixel-perfect" title="Pixel perfect" target="_blank">Pixel perfect</a> (<a href="https://www.freepikcompany.com/legal#nav-flaticon" target="_blank">Flaticon License</a>) and <a href="https://www.flaticon.com/authors/google" title="Google" target="_blank">Google</a> (<a href="https://creativecommons.org/licenses/by/3.0/" target="_blank">License CC 3.0 BY</a>) from <a href="https://www.flaticon.com/" title="Flaticon" target="_blank"> www.flaticon.com</a><br>
|
||||
</p>
|
||||
</div>
|
||||
|
After Width: | Height: | Size: 122 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 49 KiB |
@@ -0,0 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="ISO-8859-1">
|
||||
<title>Insert title here</title>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1 @@
|
||||
var LZString=function(){function o(o,r){if(!t[o]){t[o]={};for(var n=0;n<o.length;n++)t[o][o.charAt(n)]=n}return t[o][r]}var r=String.fromCharCode,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",t={},i={compressToBase64:function(o){if(null==o)return"";var r=i._compress(o,6,function(o){return n.charAt(o)});switch(r.length%4){default:case 0:return r;case 1:return r+"===";case 2:return r+"==";case 3:return r+"="}},decompressFromBase64:function(r){return null==r?"":""==r?null:i._decompress(r.length,32,function(e){return o(n,r.charAt(e))})},compressToUTF16:function(o){return null==o?"":i._compress(o,15,function(o){return r(o+32)})+" "},decompressFromUTF16:function(o){return null==o?"":""==o?null:i._decompress(o.length,16384,function(r){return o.charCodeAt(r)-32})},compressToUint8Array:function(o){for(var r=i.compress(o),n=new Uint8Array(2*r.length),e=0,t=r.length;t>e;e++){var s=r.charCodeAt(e);n[2*e]=s>>>8,n[2*e+1]=s%256}return n},decompressFromUint8Array:function(o){if(null===o||void 0===o)return i.decompress(o);for(var n=new Array(o.length/2),e=0,t=n.length;t>e;e++)n[e]=256*o[2*e]+o[2*e+1];var s=[];return n.forEach(function(o){s.push(r(o))}),i.decompress(s.join(""))},compressToEncodedURIComponent:function(o){return null==o?"":i._compress(o,6,function(o){return e.charAt(o)})},decompressFromEncodedURIComponent:function(r){return null==r?"":""==r?null:(r=r.replace(/ /g,"+"),i._decompress(r.length,32,function(n){return o(e,r.charAt(n))}))},compress:function(o){return i._compress(o,16,function(o){return r(o)})},_compress:function(o,r,n){if(null==o)return"";var e,t,i,s={},p={},u="",c="",a="",l=2,f=3,h=2,d=[],m=0,v=0;for(i=0;i<o.length;i+=1)if(u=o.charAt(i),Object.prototype.hasOwnProperty.call(s,u)||(s[u]=f++,p[u]=!0),c=a+u,Object.prototype.hasOwnProperty.call(s,c))a=c;else{if(Object.prototype.hasOwnProperty.call(p,a)){if(a.charCodeAt(0)<256){for(e=0;h>e;e++)m<<=1,v==r-1?(v=0,d.push(n(m)),m=0):v++;for(t=a.charCodeAt(0),e=0;8>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1}else{for(t=1,e=0;h>e;e++)m=m<<1|t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t=0;for(t=a.charCodeAt(0),e=0;16>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1}l--,0==l&&(l=Math.pow(2,h),h++),delete p[a]}else for(t=s[a],e=0;h>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1;l--,0==l&&(l=Math.pow(2,h),h++),s[c]=f++,a=String(u)}if(""!==a){if(Object.prototype.hasOwnProperty.call(p,a)){if(a.charCodeAt(0)<256){for(e=0;h>e;e++)m<<=1,v==r-1?(v=0,d.push(n(m)),m=0):v++;for(t=a.charCodeAt(0),e=0;8>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1}else{for(t=1,e=0;h>e;e++)m=m<<1|t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t=0;for(t=a.charCodeAt(0),e=0;16>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1}l--,0==l&&(l=Math.pow(2,h),h++),delete p[a]}else for(t=s[a],e=0;h>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1;l--,0==l&&(l=Math.pow(2,h),h++)}for(t=2,e=0;h>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1;for(;;){if(m<<=1,v==r-1){d.push(n(m));break}v++}return d.join("")},decompress:function(o){return null==o?"":""==o?null:i._decompress(o.length,32768,function(r){return o.charCodeAt(r)})},_decompress:function(o,n,e){var t,i,s,p,u,c,a,l,f=[],h=4,d=4,m=3,v="",w=[],A={val:e(0),position:n,index:1};for(i=0;3>i;i+=1)f[i]=i;for(p=0,c=Math.pow(2,2),a=1;a!=c;)u=A.val&A.position,A.position>>=1,0==A.position&&(A.position=n,A.val=e(A.index++)),p|=(u>0?1:0)*a,a<<=1;switch(t=p){case 0:for(p=0,c=Math.pow(2,8),a=1;a!=c;)u=A.val&A.position,A.position>>=1,0==A.position&&(A.position=n,A.val=e(A.index++)),p|=(u>0?1:0)*a,a<<=1;l=r(p);break;case 1:for(p=0,c=Math.pow(2,16),a=1;a!=c;)u=A.val&A.position,A.position>>=1,0==A.position&&(A.position=n,A.val=e(A.index++)),p|=(u>0?1:0)*a,a<<=1;l=r(p);break;case 2:return""}for(f[3]=l,s=l,w.push(l);;){if(A.index>o)return"";for(p=0,c=Math.pow(2,m),a=1;a!=c;)u=A.val&A.position,A.position>>=1,0==A.position&&(A.position=n,A.val=e(A.index++)),p|=(u>0?1:0)*a,a<<=1;switch(l=p){case 0:for(p=0,c=Math.pow(2,8),a=1;a!=c;)u=A.val&A.position,A.position>>=1,0==A.position&&(A.position=n,A.val=e(A.index++)),p|=(u>0?1:0)*a,a<<=1;f[d++]=r(p),l=d-1,h--;break;case 1:for(p=0,c=Math.pow(2,16),a=1;a!=c;)u=A.val&A.position,A.position>>=1,0==A.position&&(A.position=n,A.val=e(A.index++)),p|=(u>0?1:0)*a,a<<=1;f[d++]=r(p),l=d-1,h--;break;case 2:return w.join("")}if(0==h&&(h=Math.pow(2,m),m++),f[l])v=f[l];else{if(l!==d)return null;v=s+s.charAt(0)}w.push(v),f[d++]=s+v.charAt(0),h--,s=v,0==h&&(h=Math.pow(2,m),m++)}}};return i}();"function"==typeof define&&define.amd?define(function(){return LZString}):"undefined"!=typeof module&&null!=module&&(module.exports=LZString);
|
||||