feature: add circuitjs

This commit is contained in:
Matthias Jung
2026-08-09 15:46:58 +02:00
parent 7e2676bdee
commit ed8ae675c9
42 changed files with 324366 additions and 1 deletions
+339
View File
@@ -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.
+233
View File
@@ -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.
+63
View File
@@ -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>
+183
View File
@@ -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>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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,"&amp;")
.replace(/</g,"&lt;")
.replace(/>/g,"&gt;")
.replace(/\'/g, "&#39;")
.replace(/\"/g,"&quot;");
}
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();
Binary file not shown.

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
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

File diff suppressed because it is too large Load Diff
+482
View File
@@ -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
+127
View File
@@ -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;
}
}
+51
View File
@@ -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/).
+294
View File
@@ -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"
]
}
]
}
+92
View File
@@ -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'; } /* '' */
Binary file not shown.
+82
View File
@@ -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="&#xe800;" 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="&#xe801;" 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="&#xe802;" 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="&#xe803;" 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="&#xe804;" 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="&#xe805;" 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="&#xe806;" 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="&#xe807;" 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="&#xe808;" 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="&#xe809;" 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="&#xe80a;" 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="&#xe80b;" 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="&#xe80c;" 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="&#xe80d;" 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="&#xe80e;" 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="&#xe80f;" 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="&#xe810;" 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="&#xe811;" 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="&#xe812;" d="" horiz-adv-x="1000" />
<glyph glyph-name="doc-new" unicode="&#xe813;" 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="&#xe814;" 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="&#xe815;" 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="&#xe816;" 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="&#xe817;" 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="&#xf0b2;" 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="&#xf0c5;" 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="&#xf0d0;" 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="&#xf0ea;" 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="&#xf0f6;" 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="&#xf115;" 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="&#xf1c5;" 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="&#xf247;" 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="&#xf248;" 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="&#xf24d;" 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="&#xf2db;" 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="&#xf330;" 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

Binary file not shown.
Binary file not shown.
Binary file not shown.
+37
View File
@@ -0,0 +1,37 @@
<style>
body {
font-family: Arial Unicode MS, Arial, sans-serif;
font-size: small;
}
</style>
<a href="../about.html" target="_self">&lArr; 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>
Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

+9
View File
@@ -0,0 +1,9 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
+1
View File
@@ -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);