From 34f49a8692ebf9f4d9721f112c13def47aae622e Mon Sep 17 00:00:00 2001 From: Alexandre Duret-Lutz Date: Mon, 17 Jan 2011 23:14:22 +0100 Subject: [PATCH] Preliminary implementation of an ajax-based ltl2tgba translator. * configure.ac: Output wrap/python/ajax/Makefile. * wrap/python/Makefile.am (SUBDIRS): Add ajax. * wrap/python/ajax/Makefile.am, wrap/python/ajax/README, wrap/python/ajax/ltl2tgba.html, wrap/python/ajax/spot.in: New files. * wrap/python/ajax/css/, wrap/python/ajax/js, wrap/python/ajax/logos: New directories. * README: Document wrap/python/ajax/. --- ChangeLog | 12 + README | 1 + configure.ac | 3 +- wrap/python/Makefile.am | 4 +- wrap/python/ajax/Makefile.am | 56 ++ wrap/python/ajax/README | 69 +++ wrap/python/ajax/css/ltl2tgba.css | 76 +++ wrap/python/ajax/css/tipTip.css | 114 ++++ .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 260 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 251 bytes .../images/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 104 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 125 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 3762 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 90 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 129 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_228ef1_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ef8c08_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffd27a_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../ui-lightness/jquery-ui-1.8.8.custom.css | 572 ++++++++++++++++++ wrap/python/ajax/js/jquery.tipTip.minified.js | 21 + wrap/python/ajax/logos/lip6sys64.png | Bin 0 -> 4421 bytes wrap/python/ajax/logos/lrde64.png | Bin 0 -> 5532 bytes wrap/python/ajax/logos/spot64s.png | Bin 0 -> 9398 bytes wrap/python/ajax/ltl2tgba.html | 403 ++++++++++++ wrap/python/ajax/spot.in | 403 ++++++++++++ 29 files changed, 1731 insertions(+), 3 deletions(-) create mode 100644 wrap/python/ajax/Makefile.am create mode 100644 wrap/python/ajax/README create mode 100644 wrap/python/ajax/css/ltl2tgba.css create mode 100644 wrap/python/ajax/css/tipTip.css create mode 100644 wrap/python/ajax/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png create mode 100644 wrap/python/ajax/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100644 wrap/python/ajax/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png create mode 100644 wrap/python/ajax/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png create mode 100644 wrap/python/ajax/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png create mode 100644 wrap/python/ajax/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 wrap/python/ajax/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png create mode 100644 wrap/python/ajax/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png create mode 100644 wrap/python/ajax/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png create mode 100644 wrap/python/ajax/css/ui-lightness/images/ui-icons_222222_256x240.png create mode 100644 wrap/python/ajax/css/ui-lightness/images/ui-icons_228ef1_256x240.png create mode 100644 wrap/python/ajax/css/ui-lightness/images/ui-icons_ef8c08_256x240.png create mode 100644 wrap/python/ajax/css/ui-lightness/images/ui-icons_ffd27a_256x240.png create mode 100644 wrap/python/ajax/css/ui-lightness/images/ui-icons_ffffff_256x240.png create mode 100644 wrap/python/ajax/css/ui-lightness/jquery-ui-1.8.8.custom.css create mode 100644 wrap/python/ajax/js/jquery.tipTip.minified.js create mode 100644 wrap/python/ajax/logos/lip6sys64.png create mode 100644 wrap/python/ajax/logos/lrde64.png create mode 100644 wrap/python/ajax/logos/spot64s.png create mode 100644 wrap/python/ajax/ltl2tgba.html create mode 100755 wrap/python/ajax/spot.in diff --git a/ChangeLog b/ChangeLog index 130835ad5..07de466a1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2011-01-18 Alexandre Duret-Lutz + + Preliminary implementation of an ajax-based ltl2tgba translator. + + * configure.ac: Output wrap/python/ajax/Makefile. + * wrap/python/Makefile.am (SUBDIRS): Add ajax. + * wrap/python/ajax/Makefile.am, wrap/python/ajax/README, + wrap/python/ajax/ltl2tgba.html, wrap/python/ajax/spot.in: New files. + * wrap/python/ajax/css/, wrap/python/ajax/js, + wrap/python/ajax/logos: New directories. + * README: Document wrap/python/ajax/. + 2011-01-17 Alexandre Duret-Lutz Do not output empty parse error blocks in the CGI script. diff --git a/README b/README index 319de03c3..a51b67266 100644 --- a/README +++ b/README @@ -143,6 +143,7 @@ wrap/ Wrappers for other languages. python/ Python bindings for Spot and BuDDy tests/ Tests for these bindings cgi-bin/ Python-based CGI script (ltl-to-tgba translator) + ajax/ Moderner LTL-to-TGBA translator, using Ajax. iface/ Interfaces to other libraries. gspn/ GreatSPN interface. examples/ Supporting models used by the test cases. diff --git a/configure.ac b/configure.ac index 9150918d7..d8b29c9fb 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -# Copyright (C) 2008, 2009, 2010 Laboratoire de Recherche et +# Copyright (C) 2008, 2009, 2010, 2011 Laboratoire de Recherche et # Développement de l'Epita (LRDE). # Copyright (C) 2003, 2004, 2005, 2006, 2007 Laboratoire d'Informatique de # Paris 6 (LIP6), département Systèmes Répartis Coopératifs (SRC), Université @@ -134,6 +134,7 @@ AC_CONFIG_FILES([ src/tgbatest/Makefile wrap/Makefile wrap/python/Makefile + wrap/python/ajax/Makefile wrap/python/cgi-bin/Makefile wrap/python/tests/Makefile ]) diff --git a/wrap/python/Makefile.am b/wrap/python/Makefile.am index 930eacbe3..601921caa 100644 --- a/wrap/python/Makefile.am +++ b/wrap/python/Makefile.am @@ -1,4 +1,4 @@ -## Copyright (C) 2010 Laboratoire de Recherche et Development de +## Copyright (C) 2010, 2011 Laboratoire de Recherche et Development de ## l'Epita (LRDE). ## Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6), ## département Systèmes Répartis Coopératifs (SRC), Université Pierre @@ -21,7 +21,7 @@ ## Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA ## 02111-1307, USA. -SUBDIRS = . cgi-bin tests +SUBDIRS = . cgi-bin ajax tests AM_CPPFLAGS = -I$(PYTHONINC) -I$(top_srcdir)/src $(BUDDY_CPPFLAGS) \ -DSWIG_TYPE_TABLE=spot diff --git a/wrap/python/ajax/Makefile.am b/wrap/python/ajax/Makefile.am new file mode 100644 index 000000000..9676d8333 --- /dev/null +++ b/wrap/python/ajax/Makefile.am @@ -0,0 +1,56 @@ +## Copyright (C) 2011 Laboratoire d'Informatique de Paris 6 (LIP6), +## département Systèmes Répartis Coopératifs (SRC), Université Pierre +## et Marie Curie. +## +## This file is part of Spot, a model checking library. +## +## Spot 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. +## +## Spot 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 Spot; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +## 02111-1307, USA. + +nodist_noinst_SCRIPTS = spot.py +EXTRA_DIST = $(srcdir)/spot.in README ltl2tgba.html css/ltl2tgba.css \ + css/tipTip.css js/jquery.tipTip.minified.js logos/lip6sys64.png \ + logos/lrde64.png logos/spot64s.png \ + css/ui-lightness/jquery-ui-1.8.8.custom.css \ + css/ui-lightness/images/ui-icons_222222_256x240.png \ + css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png \ + css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png \ + css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png \ + css/ui-lightness/images/ui-icons_ffd27a_256x240.png \ + css/ui-lightness/images/ui-icons_ffffff_256x240.png \ + css/ui-lightness/images/ui-icons_228ef1_256x240.png \ + css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png \ + css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png \ + css/ui-lightness/images/ui-icons_ef8c08_256x240.png \ + css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png \ + css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png \ + css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png \ + css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png + +CLEANFILES = $(nodist_noinst_SCRIPTS) + +spot.py: $(srcdir)/spot.in Makefile + sed -e 's|[@]PYTHON[@]|@PYTHON@|g' \ + -e 's|[@]pythondir[@]|@pythondir@|g' \ + -e 's|[@]srcdir[@]|@srcdir@|g' \ + -e 's|[@]top_builddir[@]|@top_builddir@|g' \ + -e 's|[@]PACKAGE_VERSION[@]|@PACKAGE_VERSION@|g' \ + -e 's|[@]DOT[@]|@DOT@|g' \ + <$(srcdir)/spot.in >spot.tmp + chmod +x spot.tmp + mv -f spot.tmp $@ + +clean-local: + rm -rf spotimg diff --git a/wrap/python/ajax/README b/wrap/python/ajax/README new file mode 100644 index 000000000..714334f59 --- /dev/null +++ b/wrap/python/ajax/README @@ -0,0 +1,69 @@ +ltl2tgba.html is a dynamic web page that translates user-supplied LTL +formulae to Transition-based Generalized Büchi Automata. The actual +translation work is performed by a CGI script in Python: spot.py. + +This is actually meant to be a moderner rewrite of the cgi script in +../cgi-bin/ + +There are two ways to use the page: using a web server such as +Apache, or standalone. + +In both cases you should ensure that the command `dot', from the +GraphViz package, is in the PATH. configure should have picked it up. + + + +Standalone usage +================ + +Simply run the spot.py from this directory. This will create a +directory called spotimg/ in the current directory (this will hold the +generated pictures) and start an HTTP server on port 8000. Point your +browser to http://localhost:8000/ltl2tgba.html and you should be OK. + +After you have killed the server process (e.g. with Control-C), +you may want to erase the spotimg/ directory. + +Installing on a real web server +=============================== + +1) Install Spot first (run `make install' from the top-level). + + The CGI script uses the Python bindings and assume they + have been installed. Near the top of the script, you + should see a call to sys.path.insert(), with the expected + location of the Python bindings for spot. This path was + configured from ./configure's arguments and you should not + have to fiddle with it. I'm mentionning it just in case. + +2) Copy spot.py to some place were CGI execution is allowed. + Depending on your HTTP server's configuration, you may have + to rename the script as spot.cgi or something else, so + that the server accepts to run it. + + Apache users in trouble should look at the following options + before digging the Apache manual deeper. These can go + in a .htaccess file (if allowed). + + # Treat *.py files as CGI scripts + AddHandle cgi-script .py + + # Allow CGI execution in some directory. + Options +ExecCGI + +3) In the directory where you have installed spot.py, + create a subdirectory called spotimg/. This is where + the script will output its images and other temporary + files. (If you want to change this name, see the imgdir + variable at the top of the script.) + + This directory must be writable by the Unix user that + will run the script when the HTTP server processes the + request. + + spot.py purges old files (>15min) from this directory + each time it runs. + +4) Copy the directories css/, js/, and logos/ along with ltl2tgba.html + to there destination. You may have to adjust a few paths at the + top of the html page. diff --git a/wrap/python/ajax/css/ltl2tgba.css b/wrap/python/ajax/css/ltl2tgba.css new file mode 100644 index 000000000..19a3e605e --- /dev/null +++ b/wrap/python/ajax/css/ltl2tgba.css @@ -0,0 +1,76 @@ + +html {overflow-y:scroll;} + +.ltl2tgba .ui-widget { + font-size: 1em; +} + +div.ltl2tgba { + width: 800px; + position:relative; + left:0px; + top:0px; + margin-left: auto; + margin-right: auto; + z-index:10; +} + +#spotlogo { + position:fixed; + left:10px; + top:10px; + z-index:1; +} +#lrdelogo { + position:fixed; + left:10px; + bottom:84px; + z-index:1; +} +#lip6logo { + position:fixed; + left:10px; + bottom:10px; + z-index:1; +} + +.ltl2tgba div.ui-widget-content { + padding: 3px; + margin: 2px 0px; +} + +.ltl2tgba h3 { + font-size:1em; + margin: 0; + padding: 0px 0.2em 0px; + border-bottom:1px solid #eee; + text-transform: capitalize; +} + +.ltl2tgba .head .ui-icon { + float: right; + margin: 0.2em 0px; +} + +.ltl2tgba .formula, #tiptip_content .formula { + font-family: monospace; + font-weight: bold; + font-size: 1.1em; +} + +.ltl2tgba .parse-error { + font-family: monospace; + white-space: pre; + color: red; + font-size: 1.1em; +} + +.ltl2tgba .ec-error { + color: red; +} + +.ltl2tgba .neverclaim, .ltl2tgba .accrun { + font-family: monospace; + white-space: pre; + font-size: 1.1em; +} diff --git a/wrap/python/ajax/css/tipTip.css b/wrap/python/ajax/css/tipTip.css new file mode 100644 index 000000000..70e54f971 --- /dev/null +++ b/wrap/python/ajax/css/tipTip.css @@ -0,0 +1,114 @@ +/* TipTip CSS - Version 1.2 */ + +#tiptip_holder { + display: none; + position: absolute; + top: 0; + left: 0; + z-index: 99999; +} + +#tiptip_holder.tip_top { + padding-bottom: 5px; +} + +#tiptip_holder.tip_bottom { + padding-top: 5px; +} + +#tiptip_holder.tip_right { + padding-left: 5px; +} + +#tiptip_holder.tip_left { + padding-right: 5px; +} + +#tiptip_content { + font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; + font-size: 1em; + color: #fff; + text-shadow: 0 0 2px #000; + padding: 4px 8px; + border: 1px solid rgba(255,255,255,0.25); + background-color: rgb(25,25,25); + background-color: rgba(25,25,25,0.92); + background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(transparent), to(#000)); + border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + box-shadow: 0 0 3px #555; + -webkit-box-shadow: 0 0 3px #555; + -moz-box-shadow: 0 0 3px #555; +} + +#tiptip_arrow, #tiptip_arrow_inner { + position: absolute; + border-color: transparent; + border-style: solid; + border-width: 6px; + height: 0; + width: 0; +} + +#tiptip_holder.tip_top #tiptip_arrow { + border-top-color: #fff; + border-top-color: rgba(255,255,255,0.35); +} + +#tiptip_holder.tip_bottom #tiptip_arrow { + border-bottom-color: #fff; + border-bottom-color: rgba(255,255,255,0.35); +} + +#tiptip_holder.tip_right #tiptip_arrow { + border-right-color: #fff; + border-right-color: rgba(255,255,255,0.35); +} + +#tiptip_holder.tip_left #tiptip_arrow { + border-left-color: #fff; + border-left-color: rgba(255,255,255,0.35); +} + +#tiptip_holder.tip_top #tiptip_arrow_inner { + margin-top: -7px; + margin-left: -6px; + border-top-color: rgb(25,25,25); + border-top-color: rgba(25,25,25,0.92); +} + +#tiptip_holder.tip_bottom #tiptip_arrow_inner { + margin-top: -5px; + margin-left: -6px; + border-bottom-color: rgb(25,25,25); + border-bottom-color: rgba(25,25,25,0.92); +} + +#tiptip_holder.tip_right #tiptip_arrow_inner { + margin-top: -6px; + margin-left: -5px; + border-right-color: rgb(25,25,25); + border-right-color: rgba(25,25,25,0.92); +} + +#tiptip_holder.tip_left #tiptip_arrow_inner { + margin-top: -6px; + margin-left: -7px; + border-left-color: rgb(25,25,25); + border-left-color: rgba(25,25,25,0.92); +} + +/* Webkit Hacks */ +@media screen and (-webkit-min-device-pixel-ratio:0) { + #tiptip_content { + padding: 4px 8px 5px 8px; + background-color: rgba(45,45,45,0.88); + } + #tiptip_holder.tip_bottom #tiptip_arrow_inner { + border-bottom-color: rgba(45,45,45,0.88); + } + #tiptip_holder.tip_top #tiptip_arrow_inner { + border-top-color: rgba(20,20,20,0.92); + } +} diff --git a/wrap/python/ajax/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/wrap/python/ajax/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png new file mode 100644 index 0000000000000000000000000000000000000000..954e22dbd99e8c6dd7091335599abf2d10bf8003 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4mJh`hMs>rav2yHPJ6mIhD5Z!z3#|$$Uvm! z;eDMwjbFs>)jzF0BE93HZ>z-Q=}R(CD&$XF$`j9>JLB@(U3)w})!e!4ZEqPr?Uily zmsZ=;MUroSGp%~4z@+skfpyg*h9)CEBl(jaHwF2#nbIF0sA%T0&|nBHn82v@P=OIu zomAZw+f;X(9N~gzg%Pah>{k0e$dQq7V3iSR(6ad8`)Kx(^>2jlt3;o!ncOoi@}uvi zplRLtljd!**yp)zN@M<{jhn9hP}7`x_0#m(Pk0NeKLt7bXK7$yU|{fc^>bP0l+XkK DO9E@- literal 0 HcmV?d00001 diff --git a/wrap/python/ajax/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/wrap/python/ajax/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png new file mode 100644 index 0000000000000000000000000000000000000000..64ece5707d91a6edf9fad4bfcce0c4dbcafcf58d GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4mJh`hMs>rav2yH4tcsbhD5Z!y&lWeY#`xs z@pg{F>a&M7H~mUd^!=PYh3DyP_lXZRGG>HxJoKF=kzDsu{oe0)w&h=TTA%iceEXYe z)k6hFtw#@7Ry|^vW5mZLf70uwF#m0qcgGwb^J+aNc;#qKgIUr2Im8Fk0*-n_`N2Nsr>N*#*hP!tSg$BZ>wzce0Iuiqi@mHGiE2V zBDJ@9x}Eac=xY=_?U>ogsYV-oH-(u=-B#JUDehmbP0 Hl+XkK_*ZIa literal 0 HcmV?d00001 diff --git a/wrap/python/ajax/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/wrap/python/ajax/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..abdc01082bf3534eafecc5819d28c9574d44ea89 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U`XL$V_;zTl2TN~z`#)H>EalY(fIb9A>#oB z0fvq2|K~+>@|Yi(pmAc>%zU|R`Rsly+6TQh2(6(mwOYPRm+`pUge&F@3=9mOu6{1- HoD!MegEl)q{Dx(qhQ89Q6J_}R4=1TZi#FnGH9 KxvXTT+>?-!l#rB=03uS{QVkEMCJOa%92H<@yJNigh=!q8 cf+B;|7EZ=vN2Xk1U|?YIboFyt=akR{0QS!$lmGw# literal 0 HcmV?d00001 diff --git a/wrap/python/ajax/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/wrap/python/ajax/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..42ccba269b6e91bef12ad0fa18be651b5ef0ee68 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq}um)5S5wqWA4-MLq@v zk;50>-v56_Ta2@-<;Nn@!^0^^e{ywV8$> literal 0 HcmV?d00001 diff --git a/wrap/python/ajax/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/wrap/python/ajax/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png new file mode 100644 index 0000000000000000000000000000000000000000..39d5824d6af5456f1e89fc7847ea3599ea5fd815 GIT binary patch literal 3762 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 literal 0 HcmV?d00001 diff --git a/wrap/python/ajax/css/ui-lightness/images/ui-icons_222222_256x240.png b/wrap/python/ajax/css/ui-lightness/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..b273ff111d219c9b9a8b96d57683d0075fb7871a GIT binary patch literal 4369 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 B0@(ln literal 0 HcmV?d00001 diff --git a/wrap/python/ajax/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/wrap/python/ajax/css/ui-lightness/images/ui-icons_228ef1_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..a641a371afa0fbb08ba599dc7ddf14b9bfc3c84f GIT binary patch literal 4369 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 BW9R?? literal 0 HcmV?d00001 diff --git a/wrap/python/ajax/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/wrap/python/ajax/css/ui-lightness/images/ui-icons_ef8c08_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..85e63e9f604ce042d59eb06a8428eeb7cb7896c9 GIT binary patch literal 4369 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 BS`YvL literal 0 HcmV?d00001 diff --git a/wrap/python/ajax/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/wrap/python/ajax/css/ui-lightness/images/ui-icons_ffd27a_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..e117effa3dca24e7978cfc5f8b967f661e81044f GIT binary patch literal 4369 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 B%d`Lh literal 0 HcmV?d00001 diff --git a/wrap/python/ajax/css/ui-lightness/jquery-ui-1.8.8.custom.css b/wrap/python/ajax/css/ui-lightness/jquery-ui-1.8.8.custom.css new file mode 100644 index 000000000..f97e39265 --- /dev/null +++ b/wrap/python/ajax/css/ui-lightness/jquery-ui-1.8.8.custom.css @@ -0,0 +1,572 @@ +/* + * jQuery UI CSS Framework 1.8.8 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/* + * jQuery UI CSS Framework 1.8.8 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } +.ui-widget-content a { color: #333333; } +.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } +.ui-widget-header a { color: #ffffff; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } +.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; } +.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } + +/* Overlays */ +.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } +.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* + * jQuery UI Resizable 1.8.8 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* + * jQuery UI Selectable 1.8.8 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectable#theming + */ +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } +/* + * jQuery UI Accordion 1.8.8 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Accordion#theming + */ +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { width: 100%; } +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; }/* + * jQuery UI Autocomplete 1.8.8 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete#theming + */ +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu 1.8.8 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} +/* + * jQuery UI Button 1.8.8 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button#theming + */ +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.ui-button-text-only .ui-button-text { padding: .1em .3em; } +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } +.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ +/* + * jQuery UI Dialog 1.8.8 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } +/* + * jQuery UI Slider 1.8.8 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; }/* + * jQuery UI Tabs 1.8.8 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs#theming + */ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .1em .3em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } +/* + * jQuery UI Datepicker 1.8.8 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +}/* + * jQuery UI Progressbar 1.8.8 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar#theming + */ +.ui-progressbar { height:2em; text-align: left; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } diff --git a/wrap/python/ajax/js/jquery.tipTip.minified.js b/wrap/python/ajax/js/jquery.tipTip.minified.js new file mode 100644 index 000000000..cdf3a892b --- /dev/null +++ b/wrap/python/ajax/js/jquery.tipTip.minified.js @@ -0,0 +1,21 @@ + /* + * TipTip + * Copyright 2010 Drew Wilson + * www.drewwilson.com + * code.drewwilson.com/entry/tiptip-jquery-plugin + * + * Version 1.3 - Updated: Mar. 23, 2010 + * + * This Plug-In will create a custom tooltip to replace the default + * browser tooltip. It is extremely lightweight and very smart in + * that it detects the edges of the browser window and will make sure + * the tooltip stays within the current window size. As a result the + * tooltip will adjust itself to be displayed above, below, to the left + * or to the right depending on what is necessary to stay within the + * browser window. It is completely customizable as well via CSS. + * + * This TipTip jQuery plug-in is dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ +(function($){$.fn.tipTip=function(options){var defaults={activation:"hover",keepAlive:false,maxWidth:"200px",edgeOffset:3,defaultPosition:"bottom",delay:400,fadeIn:200,fadeOut:200,attribute:"title",content:false,enter:function(){},exit:function(){}};var opts=$.extend(defaults,options);if($("#tiptip_holder").length<=0){var tiptip_holder=$('
');var tiptip_content=$('
');var tiptip_arrow=$('
');$("body").append(tiptip_holder.html(tiptip_content).prepend(tiptip_arrow.html('
')))}else{var tiptip_holder=$("#tiptip_holder");var tiptip_content=$("#tiptip_content");var tiptip_arrow=$("#tiptip_arrow")}return this.each(function(){var org_elem=$(this);if(opts.content){var org_title=opts.content}else{var org_title=org_elem.attr(opts.attribute)}if(org_title!=""){if(!opts.content){org_elem.removeAttr(opts.attribute)}var timeout=false;if(opts.activation=="hover"){org_elem.hover(function(){active_tiptip()},function(){if(!opts.keepAlive){deactive_tiptip()}});if(opts.keepAlive){tiptip_holder.hover(function(){},function(){deactive_tiptip()})}}else if(opts.activation=="focus"){org_elem.focus(function(){active_tiptip()}).blur(function(){deactive_tiptip()})}else if(opts.activation=="click"){org_elem.click(function(){active_tiptip();return false}).hover(function(){},function(){if(!opts.keepAlive){deactive_tiptip()}});if(opts.keepAlive){tiptip_holder.hover(function(){},function(){deactive_tiptip()})}}function active_tiptip(){opts.enter.call(this);tiptip_content.html(org_title);tiptip_holder.hide().removeAttr("class").css("margin","0");tiptip_arrow.removeAttr("style");var top=parseInt(org_elem.offset()['top']);var left=parseInt(org_elem.offset()['left']);var org_width=parseInt(org_elem.outerWidth());var org_height=parseInt(org_elem.outerHeight());var tip_w=tiptip_holder.outerWidth();var tip_h=tiptip_holder.outerHeight();var w_compare=Math.round((org_width-tip_w)/2);var h_compare=Math.round((org_height-tip_h)/2);var marg_left=Math.round(left+w_compare);var marg_top=Math.round(top+org_height+opts.edgeOffset);var t_class="";var arrow_top="";var arrow_left=Math.round(tip_w-12)/2;if(opts.defaultPosition=="bottom"){t_class="_bottom"}else if(opts.defaultPosition=="top"){t_class="_top"}else if(opts.defaultPosition=="left"){t_class="_left"}else if(opts.defaultPosition=="right"){t_class="_right"}var right_compare=(w_compare+left)parseInt($(window).width());if((right_compare&&w_compare<0)||(t_class=="_right"&&!left_compare)||(t_class=="_left"&&left<(tip_w+opts.edgeOffset+5))){t_class="_right";arrow_top=Math.round(tip_h-13)/2;arrow_left=-12;marg_left=Math.round(left+org_width+opts.edgeOffset);marg_top=Math.round(top+h_compare)}else if((left_compare&&w_compare<0)||(t_class=="_left"&&!right_compare)){t_class="_left";arrow_top=Math.round(tip_h-13)/2;arrow_left=Math.round(tip_w);marg_left=Math.round(left-(tip_w+opts.edgeOffset+5));marg_top=Math.round(top+h_compare)}var top_compare=(top+org_height+opts.edgeOffset+tip_h+8)>parseInt($(window).height()+$(window).scrollTop());var bottom_compare=((top+org_height)-(opts.edgeOffset+tip_h+8))<0;if(top_compare||(t_class=="_bottom"&&top_compare)||(t_class=="_top"&&!bottom_compare)){if(t_class=="_top"||t_class=="_bottom"){t_class="_top"}else{t_class=t_class+"_top"}arrow_top=tip_h;marg_top=Math.round(top-(tip_h+5+opts.edgeOffset))}else if(bottom_compare|(t_class=="_top"&&bottom_compare)||(t_class=="_bottom"&&!top_compare)){if(t_class=="_top"||t_class=="_bottom"){t_class="_bottom"}else{t_class=t_class+"_bottom"}arrow_top=-12;marg_top=Math.round(top+org_height+opts.edgeOffset)}if(t_class=="_right_top"||t_class=="_left_top"){marg_top=marg_top+5}else if(t_class=="_right_bottom"||t_class=="_left_bottom"){marg_top=marg_top-5}if(t_class=="_left_top"||t_class=="_left_bottom"){marg_left=marg_left+5}tiptip_arrow.css({"margin-left":arrow_left+"px","margin-top":arrow_top+"px"});tiptip_holder.css({"margin-left":marg_left+"px","margin-top":marg_top+"px"}).attr("class","tip"+t_class);if(timeout){clearTimeout(timeout)}timeout=setTimeout(function(){tiptip_holder.stop(true,true).fadeIn(opts.fadeIn)},opts.delay)}function deactive_tiptip(){opts.exit.call(this);if(timeout){clearTimeout(timeout)}tiptip_holder.fadeOut(opts.fadeOut)}}})}})(jQuery); \ No newline at end of file diff --git a/wrap/python/ajax/logos/lip6sys64.png b/wrap/python/ajax/logos/lip6sys64.png new file mode 100644 index 0000000000000000000000000000000000000000..a6e43c2f8e0b80c5c586c005b7ddfa0ad99c4f68 GIT binary patch literal 4421 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 literal 0 HcmV?d00001 diff --git a/wrap/python/ajax/logos/lrde64.png b/wrap/python/ajax/logos/lrde64.png new file mode 100644 index 0000000000000000000000000000000000000000..f1091dc291dc74b1661f8b2c754f1b104a0c7649 GIT binary patch literal 5532 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 S@C^nA1_n=8KbLh*2~7amSE?8Q literal 0 HcmV?d00001 diff --git a/wrap/python/ajax/logos/spot64s.png b/wrap/python/ajax/logos/spot64s.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d8e91e8e6dccdabc34c614a04c4ba72f04dcc8 GIT binary patch literal 9398 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 R90mpk22WQ%mvv4FO#lRWHPrwB literal 0 HcmV?d00001 diff --git a/wrap/python/ajax/ltl2tgba.html b/wrap/python/ajax/ltl2tgba.html new file mode 100644 index 000000000..3b603b2cb --- /dev/null +++ b/wrap/python/ajax/ltl2tgba.html @@ -0,0 +1,403 @@ + + + + Spot's on-line LTL-to-TGBA translator + + + + + + + + + + + + + + + +
+ +

+

+

LTL Formula to translateFold

+
+
Send
+
+
+

Use alphanumeric identifiers or double-quoted strings for atomic +propositions, and parentheses for grouping.
Identifiers cannot +start with the letter of a prefix operator (F, +G, or X): for instance GFa +means G(F(a)). Use "GFa" if you really want +to refer to GFa as a proposition.
Conversely, infix +letter operators are not assumed to be operators if they are part of +an identifier: aUb is an atomic proposition, unlike +a U b and (a)U(b).

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Unary operators
(prefix)
Binary operators
(infix)
Constants
not:!and:& && + . /\(strong) until:Utrue:1 + true
eventually:F + <>or:| || + + \/weak until:Wfalse:0 + false
always:G + []implies:-> + =>(weak) release:R + V
next:X ()equivalent:<-> + <=>strong release:M
xor:^ xor
+
+
+
+

Formula SimplificationsFold

+
+
+
+
+
+
+
+
+ + +
+
+ Output the (simplified) formula as:
+
+
+
+
+
+ Translate the (simplified) formula as:
+
+
+
+ Translate the (simplified) formula as:
+
+
+
+
+
+ Translate the (simplified) formula as:
+
+
+ then
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Automaton SimplificationsFold

+
+
+
+
+
+
+

Emptiness-check AlgorithmFold

+
+ Search accepting run using algorithm: + with these + options: + +
+
+
+
+

ResultsFold

+
+
+
+
+ + diff --git a/wrap/python/ajax/spot.in b/wrap/python/ajax/spot.in new file mode 100755 index 000000000..2dce02025 --- /dev/null +++ b/wrap/python/ajax/spot.in @@ -0,0 +1,403 @@ +#!@PYTHON@ +# -*- mode: python; coding: iso-8859-1 -*- +# Copyright (C) 2011 Laboratoire de Recherche et Développement de +# l'Epita (LRDE). +# +# This file is part of Spot, a model checking library. +# +# Spot 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. +# +# Spot 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 Spot; see the file COPYING. If not, write to the Free +# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +import os + +# Directory for temporary files (images and other auxiliary files). +imgdir = 'spotimg' + +# Location of the dot command +dot = '@DOT@' +dot_bgcolor = '-Gbgcolor=#FFFFFF00' + +svg_output = False # FIXME: SVG output seems to be working well with + # Firefox only. We have to figure out how + # to get the correct size and transparent + # background in Chrome. + +from CGIHTTPServer import CGIHTTPRequestHandler +class MyHandler(CGIHTTPRequestHandler): + def is_cgi(self): + if self.path.startswith('/cgi-bin/spot.py'): + self.cgi_info = '', self.path[9:] + return True + return False + +if not os.environ.has_key('SCRIPT_NAME'): + # If this is not run as a cgi script, let's start an HTTP server. + from BaseHTTPServer import HTTPServer + server_address=('',8000) + if not os.access(imgdir, os.F_OK): + os.mkdir(imgdir, 0755) + print "Directory spotimg/ created." + httpd = HTTPServer(server_address, MyHandler) + print "Point your browser to http://localhost:8000/ltl2tgba.html" + httpd.serve_forever() + +import sys +import cgi +import cgitb; cgitb.enable() +import signal +import uuid + +print "Content-Type: text/html" +print + +# Redirect stderr to stdout. +os.close(sys.stderr.fileno()) +os.dup2(sys.stdout.fileno(), sys.stderr.fileno()) + +# Assume Spot is installed +sys.path.insert(0, '@pythondir@') + +if (os.environ.has_key('SERVER_SOFTWARE') and + os.environ['SERVER_SOFTWARE'].startswith(MyHandler.server_version)): + # We might be running from the build tree (but it's not sure). + # Add the build and source directories first in the search path. + # If we are not in the right place, python will find the installed + # libraries later. + sys.path.insert(0, '@srcdir@/../.libs') + sys.path.insert(0, '@srcdir@/..') + sys.path.insert(0, '../.libs') + sys.path.insert(0, '..') + # Darwin needs some help in figuring out where non-installed libtool + # libraries are (on this platform libtool encodes the expected final + # path of dependent libraries in each library). + m = '../.libs:@top_builddir@/src/.libs:@top_builddir@/buddy/src/.libs' + os.environ['DYLD_LIBRARY_PATH'] = m + +try: + execfile('ltl2tgba.opt') +except IOError: + pass + +import spot +import buddy + +def alarm_handler(signum, frame): + print """

The script was aborted because +it has been running for too long. Please try a shorter formula, +or different options (not drawing automata usually helps). +If you want to benchmark big formulae it is +better to install Spot on your own computer.

""" + sys.stdout.flush() + os.kill(0, signal.SIGTERM) + +def reset_alarm(): + signal.alarm(30) + +def render_dot(basename): + print '
' + if svg_output: + ext = 'svg' + else: + ext = 'png' + os.spawnlp(os.P_WAIT, dot, dot, dot_bgcolor, '-T' + ext, + '-Gsize=8.2,8.2', '-o', basename + '.' + ext, basename + '.txt') + reset_alarm() + b = cgi.escape(basename) + if svg_output: + print ('' + + 'Your browser does not support SVG.') + else: + print ('
(dot source)') + print '
' + sys.stdout.flush() + +def render_automaton(basename, automata, dont_run_dot, deco = False): + outfile = spot.ofstream(basename + '.txt') + if not deco: + spot.dotty_reachable(outfile, automata) + else: + spot.dotty_reachable(outfile, automata, deco) + del outfile + if dont_run_dot: + print ('

' + dont_run_dot + ''' to be rendered on-line. However +you may download the source in dot format and render it yourself.') + else: + render_dot(basename) + + +def print_stats(automaton): + stats = spot.stats_reachable(automaton) + print "

", stats.states, + if stats.states <= 1: + print " state,", + else: + print " states,", + print stats.transitions, + if stats.transitions <= 1: + print " transition,", + else: + print " transitions,", + # compute the number of acceptance conditions + count = automaton.number_of_acceptance_conditions() + if count > 0: + print count, + if count <= 1: + print "acceptance condition:", + else: + print "acceptance conditions:", + sys.stdout.flush() + acc = automaton.all_acceptance_conditions() + spot.bdd_print_accset(spot.get_cout(), automaton.get_dict(), acc) + else: + print "no acceptance condition (all cycles are accepting)" + print "

" + sys.stdout.flush() + # Decide whether we will render the automaton or not. + # (A webserver is not a calcul center...) + if stats.states > 64: + return "Automaton has too much states" + if float(stats.transitions)/stats.states > 10: + return "Automaton has too much transitions per states" + return False + +form = cgi.FieldStorage() +uid = str(uuid.uuid1()) +imgprefix = imgdir + '/' + uid + + +output_type = form.getfirst('o', 'v'); + +# Version requested. +if output_type == 'v': + print 'Spot version ' + spot.version() + exit(0) + +spot.unblock_signal(signal.SIGALRM) +spot.unblock_signal(signal.SIGTERM) +os.setpgrp() +signal.signal(signal.SIGALRM, alarm_handler) +reset_alarm() + +formula = form.getfirst('f', '') + +env = spot.default_environment.instance() +pel = spot.empty_parse_error_list() +f = spot.parse(formula, pel, env) + +if pel: + print '
' + err = spot.format_parse_errors(spot.get_cout(), formula, pel) + print '
' + +# Formula simplifications +opt = spot.Reduce_None +for r in form.getlist('r'): + if r == 'br': + opt = opt + spot.Reduce_Basics + elif r == 'si': + opt = opt + spot.Reduce_Syntactic_Implications + elif r == 'eu': + opt = opt + spot.Reduce_Eventuality_And_Universality + elif r == 'lc': + opt = opt + spot.Reduce_Containment_Checks_Stronger +if opt != spot.Reduce_None: + f2 = spot.reduce(f, opt) + f.destroy() + f = f2 + +# Formula manipulation only. +if output_type == 'f': + formula_format = form.getfirst('ff', 'o') + # o = Spot, i = Spin, g = GraphViz + + if formula_format == 'o': + print '
%s
' % f + elif formula_format == 'i': + print ('
' + + spot.to_spin_string(f) + '
') + elif formula_format == 'g': + outfile = spot.ofstream(imgprefix + '-f.txt') + spot.dotty(outfile, f) + del outfile + render_dot(imgprefix + '-f') + exit(0) + +# Formula translation. +translator = form.getfirst('t', 'fm') + +dict = spot.bdd_dict() + +if translator == 'fm': + exprop = False + symb_merge = False + branching_postponement = False + fair_loop_approx = False + for fm in form.getlist('fm'): + if fm == 'od': + exprop = True + elif fm == 'sm': + symb_merge = True + elif fm == 'bp': + branching_postponement = True + elif fm == 'fl': + fair_loop_approx = True + automaton = spot.ltl_to_tgba_fm(f, dict, + exprop, symb_merge, + branching_postponement, fair_loop_approx) +elif translator == 'la': + automaton = spot.ltl_to_tgba_lacim(f, dict) + if form.getfirst('la', '') == 'sp': + automaton.delete_unaccepting_scc() +elif translator == 'ta': + refined_rules = False + if form.getfirst('ta', '') == 'lc': + refined_rules = True + automaton = spot.ltl_to_taa(f, dict, refined_rules) + +# Monitor output +if output_type == 'm': + automaton = spot.scc_filter(automaton) + automaton = spot.minimize_monitor(automaton) + print '
' + dont_run_dot = print_stats(automaton) + print '
' + render_automaton(imgprefix + '-a', automaton, dont_run_dot) + automaton = 0 + exit(0) + +# Automaton simplifications +prune_scc = False +wdba_minimize = False +for s in form.getlist('as'): + if s == 'ps': + prune_scc = True + elif s == 'wd': + wdba_minimize = True + +if output_type == 'a': + buchi_type = form.getfirst('af', 't') +elif output_type == 'r': + buchi_type = form.getfirst('ra', 't') +else: + print "Unkown output type 'o=%s'." % output_type + automaton = 0 + exit(0) + +degen = False +neverclaim = False +if buchi_type == 's': + degen = True +elif buchi_type == 'i': + degen = True + neverclaim = True + +if prune_scc: + # Do not suppress all useless acceptance conditions if + # degeneralization is requested: keeping those that lead to + # accepting states usually helps. + automaton = spot.scc_filter(automaton, degen) + +if wdba_minimize: + minimized = spot.minimize_obligation_new(automaton, f) + if minimized: + automaton = minimized + minimized = 0 + degen = False # No need to degeneralize anymore + +if degen or neverclaim: + degen = spot.tgba_sba_proxy(automaton) +else: + degen = automaton + +# Buchi Automaton Output +if output_type == 'a': + if buchi_type == 'i': + s = spot.ostringstream() + spot.never_claim_reachable(s, degen, f) + print '
%s
' % cgi.escape(s.str()) + del s + else: # 't' or 's' + dont_run_dot = print_stats(degen) + render_automaton(imgprefix + '-a', degen, dont_run_dot) + degen = 0 + automaton = 0 + exit(0) + +# Buchi Run Output +if output_type == 'r': + + print_acc_run = False + draw_acc_run = False + s = form.getfirst('rf', 'p') + if s == 'p': + print_acc_run = True + elif s == 'd': + draw_acc_run = True + + + err = "" + opt = (form.getfirst('ec', 'Cou99') + "(" + + form.getfirst('eo', '') + ")") + eci, err = spot.emptiness_check_instantiator.construct(opt) + + if not eci: + print ('
Cannot parse "' + opt + '" near "' + + err + '".
') + else: + ec_a = 0 + n_acc = degen.number_of_acceptance_conditions() + n_max = eci.max_acceptance_conditions() + if (n_acc <= n_max): + ec_a = automaton + else: + print ('
Cannot run ' + opt + + ' on automata with more than ' + str(n_max) + + ' acceptance condition.
Please build ' + + 'a degeneralized Büchi automaton if you ' + + 'want to try this algorithm.
') + if ec_a: + ec = eci.instantiate(ec_a) + else: + ec = 0 + + if ec: + ec_res = ec.check() + if not ec_res: + print '
No accepting run found.
' + else: + ec_run = ec_res.accepting_run() + print '
An accepting run was found.
' + if ec_run: + if print_acc_run: + s = spot.ostringstream() + spot.print_tgba_run(s, ec_a, ec_run) + print '
%s
' % cgi.escape(s.str()) + del s + + if draw_acc_run: + deco = spot.tgba_run_dotty_decorator(ec_run) + dont_run_dot = print_stats(ec_a) + render_automaton(imgprefix + '-e', ec_a, dont_run_dot, deco) + del deco + del ec_run + del ec_res + print '
' + del ec + del ec_a + degen = 0 + automaton = 0 + exit(0)