From ddf72f37d640e2505abd803f253593a3ac969e3a Mon Sep 17 00:00:00 2001 From: JailGamer Date: Fri, 8 May 2026 19:50:22 +0200 Subject: [PATCH] =?UTF-8?q?Versi=C3=B3=202025?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 674 +++++++++ README.md | 2 + agilitymaps.ico | Bin 0 -> 147083 bytes app/views/app - 20231105.html | 342 +++++ app/views/app.html | 407 +++++ app/views/app.html.org | 332 +++++ favicon.ico | Bin 0 -> 13742 bytes poetry.lock | 153 ++ pyproject.toml | 50 + src/__init__.py | 15 + src/__main__.py | 25 + src/app/controllers/app.py | 16 + src/modules/path.py | 17 + src/modules/router.py | 24 + src/modules/static.py | 27 + start.bat | 5 + static/README.md | 12 + static/public.ln | 1 + static/public/flags/ct.png | Bin 0 -> 398 bytes static/public/flags/da.png | Bin 0 -> 495 bytes static/public/flags/de.png | Bin 0 -> 545 bytes static/public/flags/es.png | Bin 0 -> 469 bytes static/public/flags/fi.png | Bin 0 -> 489 bytes static/public/flags/fr.png | Bin 0 -> 545 bytes static/public/flags/gb.png | Bin 0 -> 599 bytes static/public/flags/hu.png | Bin 0 -> 432 bytes static/public/flags/it.png | Bin 0 -> 420 bytes static/public/flags/jp.png | Bin 0 -> 420 bytes static/public/flags/no.png | Bin 0 -> 512 bytes static/public/flags/pl.png | Bin 0 -> 374 bytes static/public/flags/pt.png | Bin 0 -> 554 bytes static/public/flags/ru.png | Bin 0 -> 15224 bytes static/public/flags/se.png | Bin 0 -> 542 bytes static/public/fondu.png | Bin 0 -> 171 bytes static/public/icons/driver/dog.png | Bin 0 -> 2409 bytes static/public/icons/driver/fl.png | Bin 0 -> 3055 bytes static/public/icons/driver/fr.png | Bin 0 -> 2936 bytes static/public/icons/driver/ll.png | Bin 0 -> 2993 bytes static/public/icons/driver/lr.png | Bin 0 -> 2908 bytes static/public/icons/driver/ml.png | Bin 0 -> 3190 bytes static/public/icons/driver/mr.png | Bin 0 -> 3142 bytes static/public/icons/driver/neutral.png | Bin 0 -> 2554 bytes static/public/icons/newtrj.png | Bin 0 -> 19867 bytes static/public/icons/numbers/num1.png | Bin 0 -> 1990 bytes static/public/icons/numbers/num2.png | Bin 0 -> 2035 bytes static/public/icons/numbers/num3.png | Bin 0 -> 1967 bytes static/public/icons/obstacles/A.png | Bin 0 -> 3015 bytes static/public/icons/obstacles/balance.png | Bin 0 -> 2921 bytes static/public/icons/obstacles/double-jump.png | Bin 0 -> 4378 bytes static/public/icons/obstacles/jump.png | Bin 0 -> 3294 bytes static/public/icons/obstacles/long-jump.png | Bin 0 -> 4896 bytes static/public/icons/obstacles/run.png | Bin 0 -> 3196 bytes static/public/icons/obstacles/slalom.png | Bin 0 -> 18081 bytes static/public/icons/obstacles/slalom6.png | Bin 0 -> 18522 bytes static/public/icons/obstacles/sock.png | Bin 0 -> 3955 bytes static/public/icons/obstacles/table.png | Bin 0 -> 2734 bytes static/public/icons/obstacles/tire.png | Bin 0 -> 4161 bytes static/public/icons/obstacles/tunnel.png | Bin 0 -> 3655 bytes static/public/icons/obstacles/tunnel3.png | Bin 0 -> 3443 bytes static/public/icons/obstacles/wall.png | Bin 0 -> 3372 bytes static/public/icons/trash.png | Bin 0 -> 3773 bytes static/public/icons/zoom/minus.png | Bin 0 -> 3883 bytes static/public/icons/zoom/plus.png | Bin 0 -> 4162 bytes static/public/tabs/flags/ct.png | Bin 0 -> 808 bytes static/public/tabs/flags/da.png | Bin 0 -> 809 bytes static/public/tabs/flags/de.png | Bin 0 -> 808 bytes static/public/tabs/flags/es.png | Bin 0 -> 1397 bytes static/public/tabs/flags/fi.png | Bin 0 -> 711 bytes static/public/tabs/flags/fr.png | Bin 0 -> 941 bytes static/public/tabs/flags/gb.png | Bin 0 -> 2675 bytes static/public/tabs/flags/hu.png | Bin 0 -> 729 bytes static/public/tabs/flags/it.png | Bin 0 -> 861 bytes static/public/tabs/flags/jp.png | Bin 0 -> 1024 bytes static/public/tabs/flags/no.png | Bin 0 -> 935 bytes static/public/tabs/flags/nt.png | Bin 0 -> 635 bytes static/public/tabs/flags/pl.png | Bin 0 -> 491 bytes static/public/tabs/flags/pt.png | Bin 0 -> 1797 bytes static/public/tabs/flags/ru.png | Bin 0 -> 1096 bytes static/public/tabs/flags/se.png | Bin 0 -> 906 bytes static/public/tabs/focused/conducteur.png | Bin 0 -> 3707 bytes static/public/tabs/focused/import.png | Bin 0 -> 17840 bytes static/public/tabs/focused/obstacles.png | Bin 0 -> 8005 bytes static/public/tabs/focused/param.png | Bin 0 -> 8538 bytes static/public/tabs/focused/sav.png | Bin 0 -> 3963 bytes static/public/tabs/focused/trj.png | Bin 0 -> 4625 bytes static/public/tabs/unfocused/conducteur.png | Bin 0 -> 3228 bytes static/public/tabs/unfocused/import.png | Bin 0 -> 16555 bytes static/public/tabs/unfocused/obstacles.png | Bin 0 -> 6921 bytes static/public/tabs/unfocused/param.png | Bin 0 -> 7586 bytes static/public/tabs/unfocused/sav.png | Bin 0 -> 3909 bytes static/public/tabs/unfocused/trj.png | Bin 0 -> 5045 bytes static/public/title/flag-icons/ct.png | Bin 0 -> 536 bytes static/public/title/flag-icons/da.png | Bin 0 -> 3610 bytes static/public/title/flag-icons/de.png | Bin 0 -> 3546 bytes static/public/title/flag-icons/es.png | Bin 0 -> 3596 bytes static/public/title/flag-icons/fi.png | Bin 0 -> 3569 bytes static/public/title/flag-icons/fr.png | Bin 0 -> 3530 bytes static/public/title/flag-icons/gb.png | Bin 0 -> 3578 bytes static/public/title/flag-icons/hu.png | Bin 0 -> 3505 bytes static/public/title/flag-icons/it.png | Bin 0 -> 3531 bytes static/public/title/flag-icons/jp.png | Bin 0 -> 3519 bytes static/public/title/flag-icons/no.png | Bin 0 -> 3633 bytes static/public/title/flag-icons/pl.png | Bin 0 -> 3536 bytes static/public/title/flag-icons/pt.png | Bin 0 -> 3650 bytes static/public/title/flag-icons/ru.png | Bin 0 -> 15466 bytes static/public/title/flag-icons/se.png | Bin 0 -> 3610 bytes static/public/title/logo150.png | Bin 0 -> 16653 bytes static/public/title/title.png | Bin 0 -> 2078 bytes static/ui.ln | 1 + static/ui/app/css/interface.css | 664 +++++++++ static/ui/app/css/print.css | 36 + static/ui/app/src/add-obstacles.js | 459 ++++++ static/ui/app/src/color.js | 340 +++++ static/ui/app/src/events.js | 746 ++++++++++ static/ui/app/src/functions-obstacle.js | 166 +++ static/ui/app/src/functions.js | 519 +++++++ static/ui/app/src/init.js | 169 +++ static/ui/app/src/interface.js | 67 + static/ui/app/src/language.js | 1003 +++++++++++++ static/ui/app/src/over-obstacle.js | 320 ++++ static/ui/app/src/over-obstacle.js.bak | 320 ++++ static/ui/app/src/trajectories.js | 576 +++++++ static/ui/app/src/visual.js | 1321 +++++++++++++++++ 123 files changed, 8809 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 agilitymaps.ico create mode 100644 app/views/app - 20231105.html create mode 100644 app/views/app.html create mode 100644 app/views/app.html.org create mode 100644 favicon.ico create mode 100644 poetry.lock create mode 100644 pyproject.toml create mode 100644 src/__init__.py create mode 100644 src/__main__.py create mode 100644 src/app/controllers/app.py create mode 100644 src/modules/path.py create mode 100644 src/modules/router.py create mode 100644 src/modules/static.py create mode 100644 start.bat create mode 100644 static/README.md create mode 100644 static/public.ln create mode 100644 static/public/flags/ct.png create mode 100644 static/public/flags/da.png create mode 100644 static/public/flags/de.png create mode 100644 static/public/flags/es.png create mode 100644 static/public/flags/fi.png create mode 100644 static/public/flags/fr.png create mode 100644 static/public/flags/gb.png create mode 100644 static/public/flags/hu.png create mode 100644 static/public/flags/it.png create mode 100644 static/public/flags/jp.png create mode 100644 static/public/flags/no.png create mode 100644 static/public/flags/pl.png create mode 100644 static/public/flags/pt.png create mode 100644 static/public/flags/ru.png create mode 100644 static/public/flags/se.png create mode 100644 static/public/fondu.png create mode 100644 static/public/icons/driver/dog.png create mode 100644 static/public/icons/driver/fl.png create mode 100644 static/public/icons/driver/fr.png create mode 100644 static/public/icons/driver/ll.png create mode 100644 static/public/icons/driver/lr.png create mode 100644 static/public/icons/driver/ml.png create mode 100644 static/public/icons/driver/mr.png create mode 100644 static/public/icons/driver/neutral.png create mode 100644 static/public/icons/newtrj.png create mode 100644 static/public/icons/numbers/num1.png create mode 100644 static/public/icons/numbers/num2.png create mode 100644 static/public/icons/numbers/num3.png create mode 100644 static/public/icons/obstacles/A.png create mode 100644 static/public/icons/obstacles/balance.png create mode 100644 static/public/icons/obstacles/double-jump.png create mode 100644 static/public/icons/obstacles/jump.png create mode 100644 static/public/icons/obstacles/long-jump.png create mode 100644 static/public/icons/obstacles/run.png create mode 100644 static/public/icons/obstacles/slalom.png create mode 100644 static/public/icons/obstacles/slalom6.png create mode 100644 static/public/icons/obstacles/sock.png create mode 100644 static/public/icons/obstacles/table.png create mode 100644 static/public/icons/obstacles/tire.png create mode 100644 static/public/icons/obstacles/tunnel.png create mode 100644 static/public/icons/obstacles/tunnel3.png create mode 100644 static/public/icons/obstacles/wall.png create mode 100644 static/public/icons/trash.png create mode 100644 static/public/icons/zoom/minus.png create mode 100644 static/public/icons/zoom/plus.png create mode 100644 static/public/tabs/flags/ct.png create mode 100644 static/public/tabs/flags/da.png create mode 100644 static/public/tabs/flags/de.png create mode 100644 static/public/tabs/flags/es.png create mode 100644 static/public/tabs/flags/fi.png create mode 100644 static/public/tabs/flags/fr.png create mode 100644 static/public/tabs/flags/gb.png create mode 100644 static/public/tabs/flags/hu.png create mode 100644 static/public/tabs/flags/it.png create mode 100644 static/public/tabs/flags/jp.png create mode 100644 static/public/tabs/flags/no.png create mode 100644 static/public/tabs/flags/nt.png create mode 100644 static/public/tabs/flags/pl.png create mode 100644 static/public/tabs/flags/pt.png create mode 100644 static/public/tabs/flags/ru.png create mode 100644 static/public/tabs/flags/se.png create mode 100644 static/public/tabs/focused/conducteur.png create mode 100644 static/public/tabs/focused/import.png create mode 100644 static/public/tabs/focused/obstacles.png create mode 100644 static/public/tabs/focused/param.png create mode 100644 static/public/tabs/focused/sav.png create mode 100644 static/public/tabs/focused/trj.png create mode 100644 static/public/tabs/unfocused/conducteur.png create mode 100644 static/public/tabs/unfocused/import.png create mode 100644 static/public/tabs/unfocused/obstacles.png create mode 100644 static/public/tabs/unfocused/param.png create mode 100644 static/public/tabs/unfocused/sav.png create mode 100644 static/public/tabs/unfocused/trj.png create mode 100644 static/public/title/flag-icons/ct.png create mode 100644 static/public/title/flag-icons/da.png create mode 100644 static/public/title/flag-icons/de.png create mode 100644 static/public/title/flag-icons/es.png create mode 100644 static/public/title/flag-icons/fi.png create mode 100644 static/public/title/flag-icons/fr.png create mode 100644 static/public/title/flag-icons/gb.png create mode 100644 static/public/title/flag-icons/hu.png create mode 100644 static/public/title/flag-icons/it.png create mode 100644 static/public/title/flag-icons/jp.png create mode 100644 static/public/title/flag-icons/no.png create mode 100644 static/public/title/flag-icons/pl.png create mode 100644 static/public/title/flag-icons/pt.png create mode 100644 static/public/title/flag-icons/ru.png create mode 100644 static/public/title/flag-icons/se.png create mode 100644 static/public/title/logo150.png create mode 100644 static/public/title/title.png create mode 100644 static/ui.ln create mode 100644 static/ui/app/css/interface.css create mode 100644 static/ui/app/css/print.css create mode 100644 static/ui/app/src/add-obstacles.js create mode 100644 static/ui/app/src/color.js create mode 100644 static/ui/app/src/events.js create mode 100644 static/ui/app/src/functions-obstacle.js create mode 100644 static/ui/app/src/functions.js create mode 100644 static/ui/app/src/init.js create mode 100644 static/ui/app/src/interface.js create mode 100644 static/ui/app/src/language.js create mode 100644 static/ui/app/src/over-obstacle.js create mode 100644 static/ui/app/src/over-obstacle.js.bak create mode 100644 static/ui/app/src/trajectories.js create mode 100644 static/ui/app/src/visual.js diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e62ec04 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ +GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + 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 +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 3 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, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program 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, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU 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. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..1cf2a07 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# AgilityMaps2 + Enhanced Agility Maps. diff --git a/agilitymaps.ico b/agilitymaps.ico new file mode 100644 index 0000000000000000000000000000000000000000..65672ca293224dac3cfc8a3ce8b6d16aa50f585f GIT binary patch literal 147083 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 literal 0 HcmV?d00001 diff --git a/app/views/app - 20231105.html b/app/views/app - 20231105.html new file mode 100644 index 0000000..234e7b9 --- /dev/null +++ b/app/views/app - 20231105.html @@ -0,0 +1,342 @@ + + + + + Agility Maps ( BETA ) + + + + + + + + + + + + + + + +
+

+ Pour télécharger l'image, effectuer un clique droit sur l'image puis "Enregistrer sous"

+
+ +
+
+ +
+ + + +
+
+ + +
+
+ +
Obstacles
+
+
+ +
Paramètres
+
+
+ +
Trajectoires
+
+
+ +
Driver
+
+
+ +
Téléchargement
+
+
+ +
Import
+
+
+ +
Langue
+
+
+ + +
+
+
Driver
+ + + + + + + + +
+
+
Outils
+ + + +
+
Couleurs
+
+
+
+ + + + + +
+ + + Show the driver +
+
+
+
+
+
Langue
+
+
+ Fr +
+
+ En +
+
+ Pt +
+
+ Es +
+
+ De +
+
+ It +
+
+ Pl +
+
+ 日本語 +
+
+ Se +
+
+ No +
+
+ Fi +
+
+ Da +
+
+ Hu +
+
+ Ru +
+
+ Ca +
+
+
+
+
+
+
Paramètres
+
+ Titre : + +
+
+ Auteur : + +
+
Dimensions
+
+ Longueur : + +
+
+ Largeur : + +
+
+ Echelle du cadrillage : + +
+ Unité de mesure : + + + + + + +
+ + + Distance totale +
+
+
+
+
+
+
Couleurs
+
Background :
+
+
+
+
Obstacles :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Números
+ + + +
+ + Ver números +
+
+ +
+
Outils
+ + + +
+
+
Trajectoires
+ + + + + +
Afficher Trajectoires
Modifier Manuellement
SPEED
2on2off
+ + + + + + +
+ +
+
+
+
Sauvegarde
+ Générer l'image pour l'export : + + + + + Télécharger data: + +
+
+
+
+
Sauts
+ + + + +
+
+
Zones
+ + + + +
+
+
Autres
+ + + + + + +
+
+
Outils
+ + + + +
+ +
+ + +
+ + Canvas not supported + +

+
+ VERSION BETA (En cours de développement), outil créé pour être utilisé avec une souris

+ + + + + + +
+
+
+ + + +
+ + + + + + + + diff --git a/app/views/app.html b/app/views/app.html new file mode 100644 index 0000000..754a94d --- /dev/null +++ b/app/views/app.html @@ -0,0 +1,407 @@ + + + + + Agility Maps ( BETA ) + + + + + + + + + + + + + + + +
+

+ Pour télécharger l'image, effectuer un clique droit sur l'image puis "Enregistrer sous"

+
+ +
+
+ +
+ + + +
+
+ + + +
+
+ +
Obstacles
+
+
+ +
Paramètres
+
+
+ +
Trajectoires
+
+
+ +
Driver
+
+
+ +
Téléchargement
+
+
+ +
Import
+
+
+ +
Langue
+
+
+ + +
+
+
Driver
+ + + + + + + + +
+
+
Outils
+ + + +
+
Couleurs
+
+
+
+ + + + + +
+ + + Show the driver +
+
+
+ +
+
+
Langue
+
+
+ Fr +
+
+ En +
+
+ Pt +
+
+ Es +
+
+ De +
+
+ It +
+
+ Pl +
+
+ 日本語 +
+
+ Se +
+
+ No +
+
+ Fi +
+
+ Da +
+
+ Hu +
+
+ Ru +
+
+ Ca +
+
+
+
+ +
+
+
Paramètres
+
+ Titre : + +
+
+ Auteur : + +
+
Dimensions
+
+ Longueur : + +
+
+ Largeur : + +
+
+ Echelle du cadrillage : + +
+ Unité de mesure : + + + + + + + + + + + + + + +
+ + + Distance totale +
+ + + Ver margen rojo +
+ + + Ver margen amarillo +
+
+
+
+
+
+
+
+
+
Couleurs
+
Background :
+
+
+
+
Obstacles :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
Números
+ + + +
+ + Ver números +
+
+ +
+
Outils
+ + + + +
+
+
Trajectoires
+ + + + + + + + + + + + + + + + + +
Afficher Trajectoires
Modifier Manuellement
SPEED
2on2off
+
+
+ +
+
+
Sauvegarde
+ Générer l'image pour l'export : + + + + + + + + + + + + + + + + +
Ver números
Afficher Trajectoires
Show the driver
+
Couleurs
+
Background :
+
+
+
+
+
+
+
Télécharger data:
+ + +
+
+ +
+
+
Sauts
+ + + + +
+
+
Zones
+ + + + +
+
+
Autres
+ + + + + + +
+
+
Outils
+ + + + + +
+
+ + +
+
+ + Canvas not supported + +

+
+ VERSION BETA (En cours de développement), outil créé pour être utilisé avec une souris

+ + + + + + +
+ +
+ Keyboard shortcuts (click on course first)
+ j: Jump
+ m: Trayectorias manuales
+ n: Number
+ t: Tunnel 6m
+ T: Tunnel 4m
+ +: Zoom +
+ -: Zoom -
+
+ Over tunnel
+ 1: Horizontal
+ 2: Vertical
+
+ +
+ +
+ + diff --git a/app/views/app.html.org b/app/views/app.html.org new file mode 100644 index 0000000..3124f83 --- /dev/null +++ b/app/views/app.html.org @@ -0,0 +1,332 @@ + + + + + Agility Maps ( BETA ) + + + + + + + + + + + + + + + +
+

+ Pour télécharger l'image, effectuer un clique droit sur l'image puis "Enregistrer sous"

+
+ +
+
+ +
+ + + +
+
+ + +
+
+ +
Obstacles
+
+
+ +
Paramètres
+
+
+ +
Trajectoires
+
+
+ +
Driver
+
+
+ +
Téléchargement
+
+
+ +
Langue
+
+
+ + +
+
+
Driver
+ + + + + + + + +
+
+
Outils
+ + + +
+
Couleurs
+
+
+
+ + + + + +
+ + + Show the driver +
+
+
+
+
+
Langue
+
+
+ Fr +
+
+ En +
+
+ Pt +
+
+ Es +
+
+ De +
+
+ It +
+
+ Pl +
+
+ 日本語 +
+
+ Se +
+
+ No +
+
+ Fi +
+
+ Da +
+
+ Hu +
+
+ Ru +
+
+ Ca +
+
+
+
+
+
+
Paramètres
+
+ Titre : + +
+
+ Auteur : + +
+
Dimensions
+
+ Longueur : + +
+
+ Largeur : + +
+
+ Echelle du cadrillage : + +
+ Unité de mesure : + + + + + + +
+ + + Distance totale +
+
+
+
+
+
+
Couleurs
+
Background :
+
+
+
+
Obstacles :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Numéros
+ + + +
+ +
+
Outils
+ + + +
+
+
Trajectoires
+ + + + + +
Afficher Trajectoires
Modifier Manuellement
SPEED
2on2off
+ + + + + + +
+ +
+
+
+
Sauvegarde
+ Générer l'image pour l'export : + + + + +
+
+
+
+
Sauts
+ + + + +
+
+
Zones
+ + + + +
+
+
Autres
+ + + + + + +
+
+
Outils
+ + + + +
+ +
+ + +
+ + Canvas not supported + +

+
+ VERSION BETA (En cours de développement), outil créé pour être utilisé avec une souris

+ + + + + + +
+
+
+ + + +
+ + + + + + + + diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..fe0dabc8b8400279e7b1fb640c8c601a535a88cf GIT binary patch literal 13742 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 literal 0 HcmV?d00001 diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..2a3aa7b --- /dev/null +++ b/poetry.lock @@ -0,0 +1,153 @@ +# This file is automatically @generated by Poetry and should not be changed by hand. + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "flask" +version = "2.2.2" +description = "A simple framework for building complex web applications." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Flask-2.2.2-py3-none-any.whl", hash = "sha256:b9c46cc36662a7949f34b52d8ec7bb59c0d74ba08ba6cb9ce9adc1d8676d9526"}, + {file = "Flask-2.2.2.tar.gz", hash = "sha256:642c450d19c4ad482f96729bd2a8f6d32554aa1e231f4f6b4e7e5264b16cca2b"}, +] + +[package.dependencies] +click = ">=8.0" +itsdangerous = ">=2.0" +Jinja2 = ">=3.0" +Werkzeug = ">=2.2.2" + +[package.extras] +async = ["asgiref (>=3.2)"] +dotenv = ["python-dotenv"] + +[[package]] +name = "itsdangerous" +version = "2.1.2" +description = "Safely pass data to untrusted environments and back." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "itsdangerous-2.1.2-py3-none-any.whl", hash = "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44"}, + {file = "itsdangerous-2.1.2.tar.gz", hash = "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"}, +] + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "markupsafe" +version = "2.1.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, + {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, +] + +[[package]] +name = "werkzeug" +version = "2.2.2" +description = "The comprehensive WSGI web application library." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Werkzeug-2.2.2-py3-none-any.whl", hash = "sha256:f979ab81f58d7318e064e99c4506445d60135ac5cd2e177a2de0089bfd4c9bd5"}, + {file = "Werkzeug-2.2.2.tar.gz", hash = "sha256:7ea2d48322cc7c0f8b3a215ed73eabd7b5d75d0b50e31ab006286ccff9e00b8f"}, +] + +[package.dependencies] +MarkupSafe = ">=2.1.1" + +[package.extras] +watchdog = ["watchdog"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.11" +content-hash = "9c6bcf7ac13c16980dde603c14adf3d6aa019987d77029284cf305989a1dd394" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..f0ffe0d --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,50 @@ +[tool.poetry] +name = "agilitymaps2" +version = "0.1" +description = "Agility Maps v2." +authors = ["Virinas-code "] +maintainers = [] +license = "GPL-3.0" +readme = "README.md" + +# Links +homepage = "https://github.com/AgilityTeamsManager/AgilityMaps2" +repository = "https://github.com/AgilityTeamsManager/AgilityMaps2" +documentation = "https://github.com/AgilityTeamsManager/AgilityMaps2/wiki" + +# Tags +keywords = ["agility"] +classifiers = [ + "Development Status :: 1 - Planning", + "Environment :: Web Environment", + "Framework :: Flask", + "Intended Audience :: End Users/Desktop", + "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", + "Natural Language :: English", + "Natural Language :: French", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: JavaScript", + "Topic :: Utilities", + "Typing :: Typed" +] + +# Setup +packages = [ + { include = "src" } +] +include = ["README.md", "LICENSE"] + + +[tool.poetry.dependencies] +python = "^3.11" +Flask = "^2.2.2" + + +[tool.poetry.scripts] +start-debug = "src.__main__:start" + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..e269aff --- /dev/null +++ b/src/__init__.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +""" +Agility Maps v2. + +Main server file. +""" +import flask + +from .modules.path import set_path +from .modules.router import route + +set_path() + +server: flask.Flask = flask.Flask("agilitymaps2", template_folder="app/views") +route(server) diff --git a/src/__main__.py b/src/__main__.py new file mode 100644 index 0000000..88bdfba --- /dev/null +++ b/src/__main__.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Agility Maps v2. + +Start debug server. +""" +from . import server + + +def start() -> None: + """ + Start developement server. + + Server is started on http://localhost:8080/ + """ + server.run( + host="localhost", + port=8080, + debug=True, + ) + + +if __name__ == "__main__": + start() diff --git a/src/app/controllers/app.py b/src/app/controllers/app.py new file mode 100644 index 0000000..ad6c9c4 --- /dev/null +++ b/src/app/controllers/app.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +""" +Agility Maps v2. + +/app controller. +""" +import flask + + +def route_app() -> flask.Response: + """ + Route /app. + + :return flask.Response: App response. + """ + return flask.make_response(flask.render_template("app.html")) diff --git a/src/modules/path.py b/src/modules/path.py new file mode 100644 index 0000000..f85e8c9 --- /dev/null +++ b/src/modules/path.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +""" +Agility Maps v2. + +Path module. +""" +import os + + +def set_path() -> None: + """ + Set path. + + Moves to root. + """ + os.chdir(".") + print(os.getcwd()) diff --git a/src/modules/router.py b/src/modules/router.py new file mode 100644 index 0000000..6da9248 --- /dev/null +++ b/src/modules/router.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +""" +Agility Maps v2. + +Routing module. +""" +# pylint: disable=relative-beyond-top-level +import flask + +from ..app.controllers.app import route_app # type: ignore +from .static import route_static_public, route_static_ui + + +def route(app: flask.Flask) -> None: + """ + Route app. + + :param flask.Flask app: App to route. + """ + app.add_url_rule("/app", view_func=route_app) + app.add_url_rule( + "/static/public/", view_func=route_static_public + ) + app.add_url_rule("/static/ui/", view_func=route_static_ui) diff --git a/src/modules/static.py b/src/modules/static.py new file mode 100644 index 0000000..f2c1e70 --- /dev/null +++ b/src/modules/static.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +""" +Agility Maps v2. + +Static files routes module. +""" +import flask + + +def route_static_public(path: str) -> flask.Response: + """ + Route /static/public/ + + :param str path: Path of file to get. + :return flask.Response: Public file. + """ + return flask.send_from_directory("public", path) + + +def route_static_ui(path: str) -> flask.Response: + """ + Route /static/ui/ + + :param str path: Path of file to get. + :return flask.Response: Static file. + """ + return flask.send_from_directory("ui", path) diff --git a/start.bat b/start.bat new file mode 100644 index 0000000..f20d3bc --- /dev/null +++ b/start.bat @@ -0,0 +1,5 @@ +@echo off +cd C:\Users\Joup\Apps\xampp\ +start /MIN xampp-control.exe +timeout 5 +start /MAX http://agilitymaps.lan/ \ No newline at end of file diff --git a/static/README.md b/static/README.md new file mode 100644 index 0000000..91c8bff --- /dev/null +++ b/static/README.md @@ -0,0 +1,12 @@ +# Agility Maps v2 + +## `/static/` Virtual static files directory + +### About + +This is a virtual directory of the /static path. + +### Contents + +- `public/`*` -> /public`* +- `ui/`*` -> /ui/`* diff --git a/static/public.ln b/static/public.ln new file mode 100644 index 0000000..27f8dec --- /dev/null +++ b/static/public.ln @@ -0,0 +1 @@ +../public \ No newline at end of file diff --git a/static/public/flags/ct.png b/static/public/flags/ct.png new file mode 100644 index 0000000000000000000000000000000000000000..5041e308e3a0f57f5ef9651b574d49d30e5dc635 GIT binary patch literal 398 zcmV;90df9`P)d94tALrX!Wj0S6V-v9sr07*qoM6N<$f?*uARsaA1 literal 0 HcmV?d00001 diff --git a/static/public/flags/da.png b/static/public/flags/da.png new file mode 100644 index 0000000000000000000000000000000000000000..e2993d3c59ae78855f777c158a6aae6c1fb5c843 GIT binary patch literal 495 zcmVh!ZNvLM`<}kPiIA3?K?Zl!VJuS0ABN12uI2v;s z000mK68GQM4oDR3?|C6;zBc4LR82Q1eETXSa+3nD0Ad8%4|Ml`Fn}2U{~ypshW{9V zk%{T!hYtV&#KHiVV*o?2zW>+&Bgm+K00G4EikX==E9>w5`yf~S`o*<00G4K6dZ++hy)_Bw{QPEdi2K7 l5H1Kw2asrHVqgFWFaQRwS@oh;XP^K8002ovPDHLkV1foV*8Tth literal 0 HcmV?d00001 diff --git a/static/public/flags/de.png b/static/public/flags/de.png new file mode 100644 index 0000000000000000000000000000000000000000..ac4a977362738ca7daa20784717f10f9617136b4 GIT binary patch literal 545 zcmV++0^a?JP)h<6BFn%a z@b8~2SoNP@zd$;E{sbbRuHQd?{QCI=sNwhbA3*&Qe}GP900=;09NYi^fU@pUdVa9*13;+Sd!tjgXKhXQEMobL97(p6<{RLvMGBN!7 j!N9=G@a-1^K!5=NcXWu!7_DDe00000NkvXXu0mjfeQx^H literal 0 HcmV?d00001 diff --git a/static/public/flags/es.png b/static/public/flags/es.png new file mode 100644 index 0000000000000000000000000000000000000000..c2de2d7111e3cb59cf6511dd2ab045e824bdb43e GIT binary patch literal 469 zcmV;`0V@89P)@|4`Xj5kLT%`al?B=W5I`&pe;NKW0^Ri&h`xRJ_x;0v zUa?=y?0^3M|NZ~}FE9c#{{3cP{Qd6}13&;Vf!z&M{pZWqKYu4MFm$tgedF}w=P#IQ z7-9gT-$11R0mKA$(qEu4%ok$*y!^wMRm*x;`R7|k6yu?K{s8?55I{^|9{?Tjhec2I zv+6&FhFWG_BbNVc|Ns94tNRJp!0`V!Py;{!F#$2enB#XZaohg-5%Tlk#oa&nzQW9g zl0Y{D4gK?n0U&@Fe=;yIr=|V7caH%YEYL84k`Tt9-wc2LGODP&y?7BIfLMT@X8Qey zK~fSFpuiXa$^kFP2AE)Ir2{}>qlLBSs|`Qg(SfB<4)VqlOE;Q=cD|Nnn$ zna02W|Nj1E&`=Tpav_4q;M$#E00G4E4{SI@`q`VGKvVzz{r4XmU}R+c_2(Zz0I~c7 zs`v*r?Dty(;z&PFFXX zRA5t=4x{1SIibD)Vqy6A2V^D4P_SySA|L?j2ip1XFA)9%V~_%1r~w2J3=}{2Oiu1 f7(RXZ0uW#T>&I!FfdIJb00000NkvXXu0mjfj-u42 literal 0 HcmV?d00001 diff --git a/static/public/flags/fr.png b/static/public/flags/fr.png new file mode 100644 index 0000000000000000000000000000000000000000..8332c4ec23c853944c29b02d7b32a88033f48a71 GIT binary patch literal 545 zcmV++0^a?JP)lgG%);U`26kn-@hOg zU%!6+4+cOs(0HIde9xZz`}Onxub&LUB0x(30+2WcIRJn#2ut|?gWYu1Cf+!-K%B8# zdf?1WA}#uZ8oj7u>$I1i0Al&`=O0k%-@icgAIJnM0xA6maSq6BK-ECw|NZ*S`0Lj% z1_pot6puj;05Ax`F!=umqj7^frO?t|3^&I1kxUq9yECc+jQpY84SWH_0#pxl$?v~F z@*hy-KN0|X07U)z`4{NpU%#2aHUI<=%a31wK(7Du52Oc(|3O^?R1IN+RRjI-n*kVB z3=9AP#PZ|EACPLGJ%9cJNh|>9B%spYzZw7h1%?tp0I_@ndg9MNE>313@6R75NcceF zkr51-#U+7;F#`Sf7i0rK0I_`g_NQ&ZU(k2*|8J(R-+sudaynhucHbwAMTnor{mwqO^w7JHzaBsT z{O^B8RYf5+LvDs&KmRKVd78=o{`1#HTiEo_OolaGleS)G+IQ#sUI`b*pv<`1zCJ=H0jd{{2S>p`ri%{LsXJ%FbMS z$#S`6f|?OG!^Jxczkf6Q`UNF{l0Sd`ad7zm>({^EzyAS6{{CgrkluOb3l1A>ZU2~A zK+FZ=zkmP!`TOVhpFbzBzFaPmD2$N3;+$pK?>zdet`f0002ovPDHLkV1gy;I?Vt8 literal 0 HcmV?d00001 diff --git a/static/public/flags/hu.png b/static/public/flags/hu.png new file mode 100644 index 0000000000000000000000000000000000000000..7baafe44ddcaec29ad9f187f759a7fa3a1a5df00 GIT binary patch literal 432 zcmV;h0Z;ykP)P90PyYjz{{0J*12TXlP$`i71!VmC|LYf!%PK1iv=Z0I@Lq zVgLrRB#$I8Q2qeT`3KSlX8!?(3s3+U9e@9T1Mx3N13&;VGFUSJ^?=Y13ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrIztFq(O~IEGZ*N=lh=;=qSyMwWku z27eMOW_|f0uQeek^e_9g7KH|eq{JVG0^UaP2Jy4}|L^JL_3uCblfVD@mnS9t`~UCn z|MT(+KT|KOfz%~1cG~~^_2vEk{SFNQ?Cjg~|NsBWy<%2im{vp^YdeS=hk-Cyo6U`Hgs{l4FR(w#{P`G0;a3G2@YSmzI~fu(ZE1> L{an^LB{Ts58L6#6 literal 0 HcmV?d00001 diff --git a/static/public/flags/jp.png b/static/public/flags/jp.png new file mode 100644 index 0000000000000000000000000000000000000000..325fbad3ffd3075a4a84d8d898ad26ef7d3e0d56 GIT binary patch literal 420 zcmV;V0bBlwP)9whYk?f=!Q|Ns8||JN@lTD;`{R1ZWk|EGa3dAO8ObDh3E3Cb;oH_5X#1 z|NHy@|M?558b}5Q|Cf`4hZv9q2p|@?lb|{i68>{>{ol0lx`{mi O0000O=a{vExMP2%`MCSoB^FIcLe_%lf;|~%E5I`(IQNh}3Ao>6Q|DFUXMn*>AqQd`w z|1kXd^B;tM|Njjl{{hM0zwd6?1Q0+hV1xeud-4=Wy?p-%sO`^#2S61Jzk!N?s)6X& zzhA%p|N6}=D+{y%Ab`Lc{sL9~1=0UN4*CD*7s%9KAf+JHKs~=eB-8KTKvw|-5R1&; zzd&a|ob(5%^Z$Q=wHy9p13+aOpFRNu5F>N&`Tk_-7w>=n{RejQzkfh&Kn{rf10?_b z{tFTZibx5v&dxav5I~H7|Ney-|DWN1$%1FyagzUW0464;_wU~W1Q5$TW@eGxtUvee z3vAf*8|igK9~@*rr66bh|NrkNM8z+V zAV?>O@ek;bKfu6d00Ab?mv3iQ8Nu5A{|6C_|Nk>HFfjc`0biay0|+1% z2B@O{$c+Ek03##gzdwHf0*Hl3)etG5lK=vU1?W~rxN0!OqXDP`Ab?mH`1u+7`u;zA z_W#cxhChG)!_n{G|9=A+zrl>(AX#bYe+w4^1Q6Is4VEzI_51&? zUm!LT$@u9L&^Z7B1a=Zw2xL66B2?87%l|Mi00a<712fnG3~)u5+Wr7F{AKw27w8;- z00L=X`u&GNQW9*;Uxq&*os3{386YGO{rw9;K*az7#P}5)xp2gQ%0-g`0)PMm0MPYZ UsK>Njp#T5?07*qoM6N<$g4HXSwg3PC literal 0 HcmV?d00001 diff --git a/static/public/flags/pt.png b/static/public/flags/pt.png new file mode 100644 index 0000000000000000000000000000000000000000..ece79801506ecf8c42397349b4fa2cfe8176b999 GIT binary patch literal 554 zcmV+_0@eMAP)op82)aAGO;3n0AgYI#891D4N?IF|Ns4E{L7&Dm*MXp#y@|U|NLS4 z{rmr)KmTFmmra`h0*Hly38?u0llM=#nEx6H|J4!x{U`A6pVzdvv{Rd?JIrI9L zs`Fos+0`Q4a^C}Q0+k5A1KaQ$>Lf<6lK=vUh2aka(D+|}f9<^YM_B9kC$A?0Z|}3+ z`ptao7t>dSY6f5^0o~2O01!YR8-T_G^}PA>yZ7X8cHUpx=KlJ_{+sC?ST#h$AD{+c zSpNn30U&@_7``$5{_{tYU-I{#-$2g*Lz_YNHw#c5FVJd`!65YaF9ZRd1Q0-s48{x$ s?-&?Px# literal 0 HcmV?d00001 diff --git a/static/public/flags/ru.png b/static/public/flags/ru.png new file mode 100644 index 0000000000000000000000000000000000000000..59b6ff6953ef1ead267eef7e703035cbee361dce GIT binary patch literal 15224 zcmeI3e{2(F7{_l>$(%qy2qG?6i$?r$y&v7R>)95^3ft6?NJgOVuG5EB!_5+Fg4C?JU%(GWw3Mn%bjCN3J2`QG){?Opd~2^jx* zoBp`x{l3rh+ROG|P;FkLawtENKk@v)O` zm#T!^8-*wvO*eu*wRuPf>xWu9OFl7?x*vo`y4MV=!e(IXY#m z$OkFLi2y^^)wHQm9c)2)JB3a6e=MHk}3~rW^ce9s5zCuBGtzx4NBvaEn zG%XR%ud=oxLRVv>y{cR*H>xQ`%Nmab8Pug*?{YK{kxUSV>(Nhh9L=*GEGxpdS9pTu z;DIAZekKwlswrxGuu=@4DDci0j+tl-*guM7O0$aMoa>0A$YNa6lad)$lTt5W(y87c zQyz58EUhZBQA=n#JS`CR2AN934ljG9i7hF^lu|NiiG<;RM^zP3h{ZXDWqq{7dE<0k zsSD8cLcmA+yqve*=i>xE7O){kqfYl}p(C1{vAP9@&TlM=Cd2UM(-PQ#AjOq>T2}l3 z)(ZG(32-tUi^r6J&nI|!z!eiYf=x@bPFLZ+CnX$ntZPwVGOj)l5LiW~*?P%Kvq~LH z#{ds#o)cpAaY^vA@pv&sg)q}nHLC_(t%HtL4A-)~v#kePrj8bcglg|lX-PML)qf#( zu>nh4T4~3!eC$3JCE42B!m`yKKnXHaM$4yF@+`Qi)5|$K1o`+5_nC8K`#=iUUinb= zteJxtTHMS^I%w#HD`YmEpN~4#4GkY;tp9?9`X3a+kOpq8472O1TP%Zfhx-4@P+rAy zpOoqaN|-4w;NrmSDwnV4)Xpk)>-0_xT7OO=>|(g0B)fay?lEnwoH;+g)9S`V#-8uz zS@>c&>$~9Ulu_3%ysJ}2UCW*uQmPr|3)zrihnMvan%~~n!<#)2_6dSl2r}p}>d~g= zK%z6E!hP7V_7l!m@Ii%&j$IB%$kI+`J354dW4=_5+cLWc^P}*l58iJwr5ny^?OEEz zZs$Syif(6ABo;}60KuCC7oHEI5?lxnyh(83`5-F6g#f{u1Q(tUq7qyP5WGon;rSpc z!G!?9n*w*+g$~wk*s+|ES7kAh0IdnQW(ULhjOr1TxU)?GNuy{m<^Yx~=2;$;;#O-!X%mhEHtX+{d&odcFDK9be5o`RJC> zYiHlT^0E7z-jl1}d+D=tXYW{iE_C?B7wg_VwD$OdpU+>ey1sSd_f2pA$uHbl-L?J9 zu2=TejZZxI*7)8V14}PGKfF?(oV&0#o!wb|w7UD$i1*vXKg+3`r(f!iZ922pdN#IY MO>5+X)jhBN3;i#mH2?qr literal 0 HcmV?d00001 diff --git a/static/public/flags/se.png b/static/public/flags/se.png new file mode 100644 index 0000000000000000000000000000000000000000..1994653dac1fc1c6ee3c9fcb35c8af97f16eefc7 GIT binary patch literal 542 zcmV+(0^$9MP)a|fPuet^$h(7pHv_{jfB<3vn*8q{15ov!pR5qo|Ns4BVf^v!57RHO zo?l?}`yWs<(7C?=0*LYNK?X*pGKOD3v;Q#s|MUOfZxH$qCjb2cBQWFtZ$@_cPkRpn z1P}|u9|n-AAQdnT|9?TXAyk7H4FCQBl>h_~&`AvcLF)bhMS(&{8jwh^2qVzve;5D) zh>=0RIIAq+{+o}$pxEl(3%2T)`P!1-fBt~{@Pp~sA7J?W`}60ovKZgl)=2;X#KQ37 z&mWM7{{H^+4`$e}UqIEMAo>Rk|KALM|1kdh!vsX^3=B^I0*D0|DL|!?{M^6*VPKPH z00z{*-?BnHps)wJ`QKllIe-8D1EGJQNCgNWMh3}bctpOPvlbWzK!=K^+cJPc;};D5 g19O2S13-WQ0NlBGh$rR(5C8xG07*qoM6N<$f_QiWUjP6A literal 0 HcmV?d00001 diff --git a/static/public/fondu.png b/static/public/fondu.png new file mode 100644 index 0000000000000000000000000000000000000000..fc726fd1a2efe081a997b46c000f7ff66c6aa91c GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^j6ht@!3HD`73<^9zopr0Pb8eUjP6A literal 0 HcmV?d00001 diff --git a/static/public/icons/driver/dog.png b/static/public/icons/driver/dog.png new file mode 100644 index 0000000000000000000000000000000000000000..529e09f2cc0b457cc1a8d1b2f22d7d7df19bfa72 GIT binary patch literal 2409 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 literal 0 HcmV?d00001 diff --git a/static/public/icons/driver/fr.png b/static/public/icons/driver/fr.png new file mode 100644 index 0000000000000000000000000000000000000000..3736fba46aabd3a6f257739468dadf34b22dace1 GIT binary patch literal 2936 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 MPVS^)$B?8y0PqV2xBvhE literal 0 HcmV?d00001 diff --git a/static/public/icons/driver/ll.png b/static/public/icons/driver/ll.png new file mode 100644 index 0000000000000000000000000000000000000000..2691de58eee726323000d351c59f96dc3ebdbfed GIT binary patch literal 2993 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 JmYDm-{tKl+FGBzT literal 0 HcmV?d00001 diff --git a/static/public/icons/driver/lr.png b/static/public/icons/driver/lr.png new file mode 100644 index 0000000000000000000000000000000000000000..9d6f281f8177fbd82e5af91199a39ebb220951a1 GIT binary patch literal 2908 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

(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ;uSrBfRCwC#ncr&EKorJ*lg;i{-L~2)iZ{YS(VG?o!Q!(h)F<=8JD%vip&J6I2&8HD z0A=rNj6qc~Iq=+`J54X_JBe9^TlA^Sr)f54Ak3CaQJbPkI!$;YomZ-`7QxgRd6PI0 zEfa8PV$sBU`$m0YRbq=P6A;u|)F%E0@rX5zZNUjWFqsZGL1UXW_#C7z0 zjH6{wEKUk#@cEI}sQ`$}L&~+aK`0`qs#j&M+b~EG6E82X_ry5}g68Z1ATBdF!SUXn z)dj9g{*p7q*o^LvMyamc_P=U1??7>_5@fe3a_)|%0f#t5<=^ncV*(A;fyNS$LWu_u z6b?8T4E&uEJz~w0aH)>~92^~88sujACOVg^;4L7|0C#~+;7-Hz_y_Rbko{g-&eJAI n3>=&GPkl?ECD0Q1qw;$I{birZ=ZlU800000NkvXXu0mjfd0=WH literal 0 HcmV?d00001 diff --git a/static/public/tabs/flags/de.png b/static/public/tabs/flags/de.png new file mode 100644 index 0000000000000000000000000000000000000000..77e9338bab888a9b1816f49547f1507e01a5876d GIT binary patch literal 808 zcmV+@1K0eCP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ;u1Q2eRCwC#nZ0h?Fc8Oor!S{~gQRhbq8&N}=+GfUpCB)gckLS#$Wml4`V?(a z2M%J1=J7gEwxu|Z?Q{r;`UXiy9Yy|mA3UDK%t)Cs5~n?YJ%IlmKp`SIFaYvYCVh5x zRE$Pn^3&7PMu68B7Z*1vuKw)m+lK-;3L$WQexB6iFE1~-`hEYZ00tohRF&~~3_y2t z6A=)=VtXdS>ekl^v}9(8WQ(@QOHXv!L;7-=z@vL>lruAqkB|i`IOlNAB?G|w4gfPt4uF|affN9$O4Bq?1L*j{lWpsp*UD`xKc}W{ zP*pya3>E;U(Tt zYd9dE8rGzd+er=@4){2aLU_gQYiyc^34wri!>CuneT_BEG91{NOhGn8sK-Lf!{_x` z$ofdvxr>4M&Q5GWvB_;RiJZ9_BwGT&E0#zau~1Z5b^rt=+@y6R$lr|mK42lO`jBZa z8&$B76oAl+LaIoXW9@lhmuR*UDIR;bDeCN~d?^ZS1wc$ochuvWXP%hUwsM=O3t-Oh ztU9S}2;jTqr`wOw)4==hN?FJ=S3|aFmw&W)Sz%{h;WHE`C&R)*h?7sKQoT46A0CdX z5T?)brk9&Op$+@lf0QfVWkRYi5?|?JlZDN!E1^f`=@1?``o)R^{ mMD~B`_W&~Qe^>4R0000(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ=`$P!}fd(3K05N;Cv?L5xA8F%oeDf&xlyLqD16e7ui)kBj%_qr(i8Vv!en zl9M;R@7~+J@;KDBE(rNVlFEHRsj6p0Vp5=IMFjsq5;!OQWHwB@!*lEsG%wyDL>^ zN2Px>x7J`nTSEZaAfAW#ev^Ny8Vr*r?-VVTtqHisc3RBYTEz3hMXv$S;CbM=@dyCV ztFpxosV5lE!+3sd091<5st3gNLf5qPTZ7kIwcQ7ivKO+Z0$}i@hC~UZyp-wgKMIu$ z0d!V8AR0^=#9f@hQ2|nR9j;tU@yM`;ZAD{^x<3GNpp5{e)S5yH0w01&Xz!cBauoAoV3SQUF->mRhOudS(-sK@ zb5lYlBiMGclrAmyg1fCj>-PbI5CCrTz7AYJ55Ih*+548o;LA`v<52iru*Nms`ZiYY zhTg4ZuKXBq_G81&LlzsJ0+u5)i%@ZK1i*mgT2s@5haOYpk9J_E3rrmWo$yGX_vkwE z2H6eUDP6qGT-v2?=v_u$>7;+C2!Y&bQ(dCCQLRnuu(!05H0C;%ZbaSWber=dUq0aSZJn0uRsu%JE5W&SKA%=@>WYgoXIC z6pHVW-B*ZMAj_asO9`t&p_;oJRA~^4ufE^U=-B}-k3Eeu9d zy^Vnb9_Oy?;fwDEIeYF!Nci^<1GneCF?wMP)B>jo-;81F#vhn3XUL|<=-C08EeQ&$ zgk3yE-<~v%5t2QM!9Oq2_QW*V&Z(%dGs_SIrn=|~*zDfuxsXbl<~#8NDGr`*;q*;E zYE|8#)S{w)IWo%KZxL!Cg|4nQv?VO0B(VUY+M%rLiaF6H{ID3K%MOVEgcK69ND4hD zUvyPyb1jX=@0zJ%vsL@@r()y)Rb_k412LtL9c>FCn$FJHQK@>opUvmuctxNU&<|_@ zdShn%B=Bo=WT!KF#z|ZtuU2mAR{*R4SOM^#%0B}DL-*vjz;Xam00000NkvXXu0mjf Dd9RAw literal 0 HcmV?d00001 diff --git a/static/public/tabs/flags/fi.png b/static/public/tabs/flags/fi.png new file mode 100644 index 0000000000000000000000000000000000000000..97d47a9fe5ecbd096d6e6d984cafb53786c40ff7 GIT binary patch literal 711 zcmV;&0yzDNP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ;O-V#SRCwC#nLm!xKorKm=Zu|1I0|f7twb4tpa~KM1rk&=G#r2%&~Xb2Iy!E^ z0k{M`LgEStk|^syY|o!ZflX$k#EQL%;}L$1?M!C;e)GL~Gvgs$RkSuX&{v@UJ4w0nXpY(-u)k6bSwqfU^f5d)K2X7D743bfpP5nkTzxwpp^j| z#{iTKpf$V>L1jN~W|cz@g+mM_Av|cUEr3jp{4-kgsWa;ZuKG+@feefDfQT(aC}uSynbf?ZLd z1vp^{i4gG0j)6hgYtEjy*M$Lq`Fy^2r6^hymX~Skx=SJgZ~(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZEW@eWZGh@glW8h^6U4(tQ@P>eo3ed&&mf67lzPP_vS&(GgocAf0QhdvB>pb@NKi|J`z)Mx- z?Ci&0R`bO#KX)2;`|%T>{+&H{z`iPkpj=m&zRfYOb@k68;MGXQ7&DRZ~&`>p&)m2Cqu31Qt8eD7>Dp0MR zxSqr)ia=TF)+J;`b@xSRSKnlL;jlYmqzJ7_96%M6qNpg+$+lIBqT86L7T4&iF924S z9at;Clsym!wF7(q9{^H1)4sJORCF3+L3ul3zXdR#7c3U#))~-+fBK-&2n&I~N){1- z;eEjSuzd;n4h)PuguvdxURFDC)guGmKP=OSB-`}691BV@Ewm1!S_ANYAQH+mEas1v zf!VBNKJOt4E&Tmef2?lufd~X!1~8u$cwf~Cq{+l93C3buHWPq4`+y=4l02Yl+)Ng| zZ05}SZey}6Wgt+Np%(z!B@+YU+%f}~m$$tDNOz+vCf*5k)gJ(Ne6;KXsy*Ewdi1`O z-EXE{mh47D2=sP?tK)Sob>a{LSteAKwv0Wt)me%_vH|-$FfT4gt0e|%fi;WqttoB8 zn>nn@8Du4qg-Ay)GU_a$6hNfI)E?ANb2<{)_--1y1P?VVL$ecu!T4=mYU+eOFtgx%usT9OY>c+86O{EA_p8 zfvSl@lZ%T&Rmt;cY=Yf*EZn3g@3rlJdK5xh>AB14v~o_#b4i@ozVj;9pA$C{YIP{W zV2TL33SekOqs<8e42pq9z5|v}bm9ZZrV-6}{A}yCWaERi#=B?x=+whx@}<)RS65eS z8E}1bv(|A!fY-n&@M>Uw{15P1s2?wlV?Ctefr;#%)b9Z70PFztTD}ed#HR|?5V(hK P00000NkvXXu0mjf1!1B3 literal 0 HcmV?d00001 diff --git a/static/public/tabs/flags/gb.png b/static/public/tabs/flags/gb.png new file mode 100644 index 0000000000000000000000000000000000000000..3853f5e1999a41dd3c949a017c52057ea6cc3d70 GIT binary patch literal 2675 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 literal 0 HcmV?d00001 diff --git a/static/public/tabs/flags/hu.png b/static/public/tabs/flags/hu.png new file mode 100644 index 0000000000000000000000000000000000000000..af757c6c65c1e5d0f160d3bb2c1bfe9679818a3f GIT binary patch literal 729 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 VI{{bWuCD+9002ovPDHLkV1kh#93lV! literal 0 HcmV?d00001 diff --git a/static/public/tabs/flags/pl.png b/static/public/tabs/flags/pl.png new file mode 100644 index 0000000000000000000000000000000000000000..7a718046495180b055e4435da1e91b4231d643ef GIT binary patch literal 491 zcmV(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-aY;l$RCwC#nM+OsF${)3&y3Vfp;8gz6iDp2{~5RfJ6;l9Rhsx`(a=fL7l;K| z#G8x~EAkgVMsZ9Mk)UJ_oU~SP=@zc%LzbfMDkDo@-zYX=-{y$Tt0f?0Z&-p zqj8LJl^lj$4=9Zof}J*_@}0l@R?!PkH6C>Ifwg+>l+Lle1*rrW(`Irn4^-?|!6}bc z=pBVPGbbIeQ~SDG9^pA!CIIJX9_-j!pOf}YvM=~TwXROA)f>6;p?@Z^J3^f6RO<(G z-_%g61&PWnk#NMpNG5;B!IWod&K)pGT;Wd1+Ie`{{%c3oA-eW;=L2Bft9tF h`UcPd8o;m0#{fe_wL+XAOUnQN002ovPDHLkV1gFhzzP5W literal 0 HcmV?d00001 diff --git a/static/public/tabs/flags/pt.png b/static/public/tabs/flags/pt.png new file mode 100644 index 0000000000000000000000000000000000000000..5b3907313b62ed5750ff9fd55dad3833b657b1b6 GIT binary patch literal 1797 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 literal 0 HcmV?d00001 diff --git a/static/public/tabs/focused/import.png b/static/public/tabs/focused/import.png new file mode 100644 index 0000000000000000000000000000000000000000..e1ae03642900174f0d20792b25e2440f8d4f88bd GIT binary patch literal 17840 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

D8}g9i-E;*TA-h~2%FQ|b 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 literal 0 HcmV?d00001 diff --git a/static/public/tabs/focused/trj.png b/static/public/tabs/focused/trj.png new file mode 100644 index 0000000000000000000000000000000000000000..11ff972eba8d596b3b2bf69c979d289ca16a96f7 GIT binary patch literal 4625 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 literal 0 HcmV?d00001 diff --git a/static/public/tabs/unfocused/import.png b/static/public/tabs/unfocused/import.png new file mode 100644 index 0000000000000000000000000000000000000000..1ad05f3e2fe8f61ea23cc9d3468374c0208fe2af GIT binary patch literal 16555 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 literal 0 HcmV?d00001 diff --git a/static/public/tabs/unfocused/obstacles.png b/static/public/tabs/unfocused/obstacles.png new file mode 100644 index 0000000000000000000000000000000000000000..221dbb4e344773d063b27b930ae27db93dea45e2 GIT binary patch literal 6921 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 MNgGkAVEOca06Q#q9RL6T literal 0 HcmV?d00001 diff --git a/static/public/tabs/unfocused/param.png b/static/public/tabs/unfocused/param.png new file mode 100644 index 0000000000000000000000000000000000000000..f116c03f10d3f2a7b1dc081aaf71b00948dfb099 GIT binary patch literal 7586 zcmbVxWn5El|M2LL4r!RA^k_E15u>|7a$_`%loA0!>6mm#N~$1&2uLd3jUY&ONePnA zyzl#WKhKN*=l|l_XWMnob-vx_oESYFRZ?O`VgLX@s;;JNfLXmTKQlsn%>UN~dLhih z;0rVJHAFf1`rCOU0SfjgI1;GtZs&+JK-$>{di5b?0RS8aXCpITGi@yh0_84b_ZLPe zz}*vr4FJeK3h=Z;xFUUlaHONNhaCIimo|2wv%MUF+v2n zBEa_SkK}=}0T2uUcciZ!Fu>i-!v_)|$Nn$65X|x4ZDDrczd(Fl<=Fo%l$o|3PzmLY z1WE{r2_iruB0xz=ArWy2Nl6g_peRU0R2YQ$N(zdILnI_2qEf*BeAqGEyzLzz2Ffb` z;e|PqV|ViP^@Iou`}_L~`HKmmyd8x_z+muS8ls|t7zjb1Ko4KL06`BQj(;d9BYhCw z&Yr%`C=cLYigs|6pRXJ{M$&();O?od{a?Z!KL0Tk#$>_)cAml_LLgyx_rH4m3);um z0QrB#_#dHti~>E8!Ujkml%F>O;|~Xpe~>Y@``;P;1;j`L(e-x5IK|FQ8HMn3M|$|G zE6cHCt_ayX+e4&4AZaNPX|S}Sq#{gQL_`5BDx#nQhDnLT6eT336#t>|KjA8hNPwgj zrNqIaiXtK+FmVNCMVPcWNK!-v;}MvG$UnI19zMQy9th+=e4R0T|AQ;`zv4oaypeXk zC~qSa%I%*B&~rlhqI{fCoWj8Rf4L*wfRqtW-VM8@s; zy^2WQ7?$Z67Z(?!Vq#*zjI^|AG2Fj`Nb>i4W_moCyG);k0`if^QmRR;3pKVK&m};^ zqW8S3_cW284Ld%_*g@yN_#Z}3PEIc4{TbRW%YRmG_2tRtDoF5aOxJungI8Z)Uq%M6 zp~_&k1V3E{v&@shlaRaH8%-AZrwu%0Y_VZx*ZW0}?ygVbUvX*1o(#+Ac6N7fP=%EC zP8^0_Zu12Gtg`xY`N?I<q?#O(&eLIW=28r0Jo4Q6#Q<1d=s}*}T?4 zTVeFU%Ux!O?-uscWgi>)_W^lTxkD=U0Z$4`|;72_ZIj4K5Q%w{4+jrUL9npVr_ zE-g)LxBZmuL{O5 z$axyb(F;qR@6GyfN!LHEFeoWfO=RZnVs9L*S92frHS7S4)j1pL*T7+|C~}TXx2K=F zxmK_&siPM{p`rCML8nfnT6I$wl?xRBxDf^AJ%Bg0WhC9!At|e@S)J3^R|b|pXEQck z7sYPS=i+|Vf8VnsSS*um41|z2`jipY2TwEm&-+SoSLfC}b zaEQVQRiUJ#w|6|FMC=lCc-j>{K!()Pn%rgzd#1;E^zw9@BjLei2BIf%JyWzDji3`S z1KpzT!IN0!44@xgd^qN}4qQ(w!d!1`7fbTeVFm5emkxPZt0WAZnbp8wWJ;m(PQ@gg z;t!y@aV}GpF&KMq;8I?E!KkR0m-K|9ZCfhz_F5_yCrocEY4g2yN4QTLAx)>wYseH9 zk01_~%V*~a6-&P<<3>U^Y)2dyY^U8v84Z&&pZrSYhdzldr1Mnll;+q>Sf z8z(|Gt(MJqw^z*vYz-z+jXs-Ia%0fW2AAda#jTO0d4}+CLbMSM+!Ko=-C-z4Dx=m4 z$ANn0o-(zXu)d2=IZ?x($5%g}WDaixoy?#A4Ay;m+{d$0-FAC<-`4u~Mh@!Mx5!=+ z)XF(}8A2bO@aSr<)|!51zTGn3{YSkVK&f=r-0?LmF%|bghLcxW(vZ$rIvS0h7&@1o zK0K>AD7D#wOy|CBoWwT|bx72;$v7`2D?5ufp-bP@1ocztQUC^KDvfvd2ZY<2MM9kF z8lX4IX2GsU?LCri-~ar0Ji=YLrk^^@ouVMOwMCSZ>MP^S2m3sj7_7>UC1|6Qo0a(mRnmhsNI1%f6E zxw$+$*%HqnJH5=S;OY&j@mOe*-NgAGvO80)8y^=p@Q3vEb(~O>no*@uU!c3GXM2gG zAL18Fk!JfsLHK0)(b)lR5al)<15ic?a03DxK0>p;RlMJPn{bX+R2K&=Na3Q=*x^{Zr zlv2E-3dWPEkxF-@fLo@ZU82+1kL%sQ zsc9K=nnyoWnWQ`{sXaQCC?ZTTHN32(?dm{gyI9g?vNsSlA$LU8cFMq8zg+aDu$ovZ z>=z>6d9gL*`p;&*u+W#ikCrO%XVcz=(9SM@9xkqgMNEHj#Sj!w*GxJxFy;O!`|@FW zp%fLH#+6iaKHl)NV@zMTmX8c}SbDL!@co0`Hz81v$_gW$Na3Joex923Z6;B<$K)59 z)zPjfJHN#wpYxZL?N}d<^EtyN!!xXdoU006O5T=t#0tdK_-qdU0j|J*ZY}sP4i)>j zeFi8~>B^m@UR>^0!-9f>=JMo%ArVYbFR%+1#>dC+cPwm2@5axzg@)pH?Oy*mIf>k9 zwxpIb*f)WB0x}ozVKnqANfAtk5l+KEP;-(E;Ca3sv*@WxDCH`HCI{G({dBK(ByX}* zJ4f1LhU9S*XOsir@-vK>9e~+B~)~`cF_G?rofEjn}kJ0Y*`_)W>65+v^POk=TE3`K|z9HVt zo#%xpNd)9{Ip}oj0T}%_qFdU z0y5@@C_kvr5e|@$F%aN_{30}ES+SEEx&zgCheBJy>VGu5K^ zfM5}(H#G9qenP@Vr70*hEE1fquw2kG;{jXdnNuy(@61!$%L#a1F(|EP((|u3j50=I zwSQTJWSdaA6d|QF`r!&!YuAS^bI~9-Z@RIH|~IKZ1mD@yQSOVZ9tV3X8bG zlS0bA_s>M8fpZ&}${)RV#xRui&cr;{5@BDi_lbYBFX3E7f%?=8nDDaRZPuHLB#XZL z>9Womc8?HoZL!82NPs3 z6*hQ;)}xqGMd*co2XSNTmiy>7T+e`+6i$JuL`>LZxr7IC4|;BX|3Jli_i5m?Nmmb1 zD43N!1!XTD`Kt89GjNCz2R-?oSXYre%V01eNpLx0cU+uQk%zEtyjIyc;>mw%05XZ` zCV_};PC%PgUa&y_9Ir=(U9l2`dF5VUCd)Ki0m}wG?CoQs{XOCyx3R+ph13TR83{lC z4008EJFygpHlciN;{qGq7%bppTI_baQyffDW>c-v zp8D2#Kx=CGK+wOE&SF@oX|}a!IPg+EN)P(x8QQN{s9P~;Uch}MDA!gTd!d? zUp`Xk#3C0|XA58yWC-C7a|>h!kVUawNWU=_;Af-HoH;Kd*JjZ+eI8CeM^yEp;GWqd zd_ufVHgKWc_WBmxjJBW20^Ua|Q)cA~5ElL0rn+0pDQxb-Q~$NjLZv7dpt+qS4wO48 zXhI{6F9AD@+I9LJgA%0%U|)lPQHtjM+6PSQ*BEn=`3+m%J2Zy&Z#@Tpafj}kmyAd> zh*$!rnOFB{0n^SbGQLN8D>az==lcwUiwS`pD}2KHPiF1Jh0M3+8*9Za zw;tuJ*0{!D*XWG>E(ndXj+&-bf>oWq8gL(tD4wXcP|SqdXN6lHDrhE0{;Ev%F`h3e zD;t<+pA+8s6Y|)=V4P6;7x}7njj!Y22OABI*xHSBX0UC0nC#npt90i=FeTkZN-Ike zQ4zn)GO}bRXM#oly*q}cfk@sTZ7cts%0#gq7i{N9zqU2R)dFFALKq&T)qB0)fM7hp z4i5;<(tj{VWnI~`CTdz($Ga2Z`I{>m)1wCbsD&3tWjDZ2rKhSCHj82;V1!FAwnEn8 zoqtG@(`Ab-45G<1B4*#yd3o%$eaR@|~K(O)Cc#BrTw{H{0~U0zQ*YKM&)hR5>b0F?_* zc6t*m2r}R5pX(ip@F}ooLwe&Mk9!x_9F3{6p|_Is_js!WwA7VZPGd;;j!41Dt}HiC zetz&vsfaMMhKDtL8!goLT~%eo%|kJi8XKxsnmKDi1}N zmA$}0|9Ld;i=9HZ<;Z)|QsiB(S!Gtk9;-R4dOPO+#;JZE6eF5$Lp_HJds-igZlDxAf#iESWc zG9)~-Zb4P%482Q^GoA{$S~-~w5G1{k!X6Qi)tsy@$4%b! zEZPF%;yfVfJbC)qyGA=p6owfgvsaoZ1uFl}bWq(;*bp^igT z0nh!jvEeY7`G5$mdn=*|b4-62^MTelN(*Mu z2T?!uWAC#Q3?Gv%sDY{gr6bPWN++%Y4^05CYBMVI=7f;$hXyyM>xy2avkG`yIP?Sw zRS$Op9o8DD0)Ow#QmJ7k{h`Dm0~=8bgh{rcJ4l5%$llf<-sYn{5vj-=X$_>x&0=8V zQ^imbMn#OjK9#`r0E@yulywc>h&5<(}Cc^ zA<|fliSvIb*ub0!&!SEnarTh3tBQ3nW--QlmLGGZjT^RFR}#22S}0(hk&>S4>KLl% z4#Q%f<;`XvLE*i!0YA@Bpo;B)$C-RX68dGe+k19cEoDBG$H5XWA;OvYcIP{o+VeI_Q}lZlrAAm3+cUHL+ef}H_KdAFam|I~0%Qv-flNFwTGq_q zi3^y|9%1XEf7RmVjMBSz94xFx;RKK~QPDHZB)qwW%=qTfV{;~Q(@sRqy=BP53lO_` z6TKTqBmn!|Dr+%b!v??!iw^?a%GN3{O6_+b`j=ys7Vt>609}qx&s#&XiIKzBl%1;D$ zTckH_2`Oumr_`mP?<(2B<3T>##KF^zPZ&0=-Dx-`-->e%!XQ-_WpWRQp{YH_Ao*hDZ46)4+0$@2}5NSOL3K! zM8jEX5x4K4v1*$~fut`tw(d8)`Y|{zRvyxUN4M6mO4VLrSmtu?Sn2e!F>X0@=q-u3 zkq!x?GJaxN>>f-?>+)GY0jC;n$^(#?;ZWqxV3wGl*TbG+^LNpD~Y5(;$%O&V>a+%MCBH1kfX94fseK{Jrzg_<=NZg(f zi*v6#0eBdu%{zF&ZfbPdPLr3hVtD znRe{C;57(85c46p9Qa^yMiOF(e0bkt(_4Qp^k@k)@MqxPhY4ZXKl%E}tIB3V#+Dag zK5>Gyjr5vdG|LE3rkSd@eSv1}CzksuscjxEpfg*^9no@c8Nt{tbJ%RS!MCkQ0rimY z1Tk`m7kYD$@@?Qwz4@YZG5O{`zH$ze|Q5ntFk+x)$K6Od@KkL6cQ2U|hQoVKG)a zhSSZ-VRdAF(_Q$M=*`m~7eAmK<_2MGoyD;fvxYj_o>TNC9&I-lTz6v_fhoMSD7R zIdUL*_e~6`m6TXYvvxino@EwA)nAFOA~7OJ=v>52l(FOPEZN4vr$ zGwaKb$L$KuURW{vil^?|Jrs)IFE89+ zmtAyyJN|ZhlH94f4YDG=&qZiGv$oltZaW{mA-otR&Ct~QQ(1TyHOCvG5iqu4KOUnw zmJ_=t5i3=>rCxe5(yc@TZiUt3#ouef1b?!^;H!x^?7`-zk1&1Iu{LPs35_Kdx;mTiU^j4?|yW35oil`Prm+6oC%6xl1u zQkFsp5iKTTFFTd*xc7E{zd!Et{XNg`Jm;Lxa^A1kdq2-P*X(Ui3G##a0RVs?%EA=Q z8C`cTATQ^BE?rHNGe|MaTp11&Uq%R)h6fnoDBgGoiiGvUqw!c=*twT@eE@*lm*D8i zaJ8{U`cO!!*j*XbP!g4c1_1O=hElOUL_7oHjrSvv4WNsSPoWS3&H(Cyuu-$2n&ABj z7U49!L%6M@PdL#>7Y99g0-_&^YW}w_&dLDl&tOoIFjz=Ph-!$2Duw0;gX`+*?sBNBt8gS#=wW0AHdKX7m;1$F zil_U~2vi1vLWb-zV!bIr3#=lC_9mA-27#dHf1krpr`S6wd1?I%=zbo1mkE*V548F#N)z$aDsl?1TTMm%!2cH&)}nVv!~^JeEPBIZ`Nr zzbe4qpTeNf{V7z4iGvp8s0)FNqlD0vcGL5hx2AX+AsCM{r%_0dKjVue{EL2V_5aK7 zzp%LfPt0H(V_>_*@xO}Y*A}M&cc=f9K4R^u{qJ?Ltf7$xx`#Vt{=uCr7K+``o-tZ)n%eMw467}z1~Zgka5 z*t+iUK3aaVRie==HR16dT35oDTJuI^()y@&Tlqpj!}+qZ?30@%Wu8G!kJksicD5_Z zKnKOdPAjz~p>G=)L4-r^UE3sft7QEFe~XK7S=ipctir15KA&X=pSaH2@|3udCYg6E zck@&?clOh%rLlZ?1@7muz9FK3m&y{zOxiToJe^{%FktWEB~TGG3WhLA;D z8NJ}5w6rwufL2DXsG@CedxA9Kd5mBg2>o4Td979!!#h9Q5=4N8J-w zKig)jE7UDcb!9R>wD2@U?wn9iP`Flu44SdO$}a|87?>NWQi8$um%C)WLlHmS1B3!$ z;)Y*dkDl&{H#Mq z^qco}>Sb+Y6O+IQOIHCptNYgK>|4GLWtmvLZq&njAi4sxn)o(RT|+|&ff(#tCBJV% zNl8h$UVJu|8&+~?k8Rv!?MdD`(rC5FP|HB6gIJy9hXb2OBSnY6bmGeijBM8hv3?!z zR$xQ${7rks4|SI5$^%t?b~%TF*I=TfeHeCIf(~$90v-B&6tc58jH!dkm-e80%?ypr;fHq{A|dF5zZ2AW8Ai26EQVz@{itwueXQa5yys}sMBe4f42cz&JS zaDH9YAo6F9XHzH^$3v^~?HTwgBPxa2OEC?^PCU7&th{zE%O^#U)RDcTdf}sn-(|>6 z`7?XQ3yipf0xxLyDsh2}}YCTH0+hy&n=s z9xBKn8F$4gvKh{CLaNAB3D%hiUe{K-2#>=#FkgpZX1otMV0=$w-G$9>To__}%ifL2 zXVGnx<>lqsX%RhCmO#y>$K|eT$@&q@8UdN#xIu@G@a6NbYwPNsxuUv9bs$RiAo|@M z!_#Naf)jqzO(Bof8SR(V7bZ~|_dOrS<$u3iYq#yeC$NZlS5r_h78Ls1%KYM0y&7+x z!TTO=I^ZFY$^fo}9vlNEH7_l*Y%U0m!h`VvNxyZf( zqiE(Atr;%|SJ5tRKB3s&JJrwJsM~&?yu-rI7AEjC@`FeYsKDkGI zooB%K`mwDb^_Eq|Alp!ynW^Gdb9XsDNvtj+6Ehc@?}=A9+gDzFf;=sOSwoP=vSRih zT9^h~WgNft{P+FGmX|#Db?mtF-nilB{=!v%NuU`hBz8qlTr@8}W2B6)XiY-ptRtFh z{o;a2o^+zQ{6K6qG=<4L9xz&68rxFpcwmKn1teQ)j0lhn^2TDZy=yT)X5}A% zZ7~JGlXC^+!iXPR#!mC2kFICHyb{M}H+Umkzii~XC`bbNcS0tcFB$VpuZkcArM2R1 z^Yl^nVkR;B;G@r}wnYK40v}lGGlN!4m|KnYXRbljg)Yit;L^4_@8R2IXR26irmDwn z4n5C1xCQR+>T)hJC{7&a8SgaRwqLF?>}k(;8Md&JvEg)nw{$T8@&>BkJpZoNq1X~y zu5bjceBN!veOyO?9=6iZq|PQ+W1K0M}%RUH%L?EF^5HaUp?OV%eHa0( zg7eru%(Y1^Joj4@LW&6Jq(kRhKfg@9PWt4VB%?Q!{C;7qUSo>II&h%TI(uxQq-jUn z^Fj0*v!%l-HjL3$aca89wo+%w4O277&*{Fx&Nf*Eo6=aI9bo3uK~AoRg11kVI%-OSgHN7MdPJ~O>LJ`#>zub;}A^f%~9rHu-;Lru9O8X2=aqT3izsx{ny(`EX}UN^nKTG>VEIa5A8 zc9OHV{bvxUCfGgF(TWS>VWxXp#MbeeOG~vF()@>>E zEgThI)B_65OTjq&zH&jj|0LKZ)6<>V)X5ayo%7KwrlgUkP63VJr7ttSYvJtIB-#zfI3`5%E8j-jJIR7$RrPKHErY zoQP>Cb%j=uXz?5>lv#l|mzd^V+jaHT>AvU&2HW^iz@YjGnY_IlFH;pY!&m&jao^h5 z8;?HIWaSM`Dq&PAZ)dJ3hNpKQm$#Z3Q|Pmt83^HE2>h>K=M_1f>cV?H~=_ zS|6vU=5%7iHVjA|KC!+j*NOO~358*tSXgK3_15`SXtSj~N6W^Ks`@*%HU>n#?TaY_ znL0sEX7ZQCK8#R{Clp+@5kc2)JMwkBOjyf_i^ZQBPn+~_w}%qWKeePEZ@2eeeHM|9 zQJiwQZ$pc45eeVdQiZa6+74w<4N9R5ki`|$f{l|YGumL!c+X0Csz|$|K%LUF7O+cx z44mzAGMpA*y(KxGg842j6TY!@Yusmwujo4S@+E~QcxFtM1{u3^k)V?LL<}K;6 zyR*F=(;0Ei*RPyBQ%_Ss5c=g^;nyN- literal 0 HcmV?d00001 diff --git a/static/public/tabs/unfocused/trj.png b/static/public/tabs/unfocused/trj.png new file mode 100644 index 0000000000000000000000000000000000000000..a7174382c211292b01bcd8b34b02cd4a2cd070b5 GIT binary patch literal 5045 zcmbVQc{r49+aJqgkZrOrk7tZZVi<uN5|E({f)rgliY3vL66_v;188B1mvCT1KX)&j1feh~0{|F2@m6*e zI}>B12hmT){TGc)h#!f@4FITVgpk}lF5@WROE@n)0R`D=YJ-6BSQNxo(FA5f(!qJ- z4Z;F&mSLt=9$}X~RIm^Yb+B3pk_O<1qqu`Z{Co*yWC#lKH!hO){%ctl0{)wXav25r zmr`~n7_bg800&l-fkQoDa&lkGtGDZUC=K=nl?zY06Z-y?!IWEN1z{$ zKruw4Aha(sSUeV~1cNCn$tkNSYa_IE73Ac!ROIEf^i*_}6m+!}5lY&>G5!;;96}qe zr=_c)BCk#3)K#ECz;)ym5sKOfv=SVK{>^JhAXD549=P9f@ie*r@WTHqFH$D}=T0F8 zSP_Z7zcT>iO{5UX-b4~u#}WZPZ;K~jiNR#aU*Y+ewP;)bJ_v`^3n2P||Mo8u{~zQl z!sOtJ$|^8zng+k@Rz@fxl;H|;N?J+^FfFtK$Ij|OiE;Zkgc*tvv z)`Uc>i?f;;O8Q_xiivJ6J2%44q?DSoEP^oa;^%I(#_Pi_h}sEBbsfYf*cuhQ#Mq>S zSjVd<6wDo*^m4ra5j4Qo_ksf!X+5_7CTQTzkFk@Fk-JD#=-2B4Rt>$qfFZyTm;oKL z`bWH}scB#%!{Tww%#bKY0*3XIgSlU8Oz%(*Y4x3?iRPO9rS^kAs8njUk&zKZ!YtSL z+BeXbR!3pBcxh#6w-6U|b91O0p0HH^33YD{){P+Df@SsJkd%}>bKyeb-v0hvJ36^s zkt^r>h1^t4zH9kGX6C|0UKi?F*w{pd%I#}k)YU1lXg*4JjmX$p{|INBCWpk(fmCCl z>w%5%6sgdh%AmiV=cFygzg?jRm<9v~&!`cn)rOmbw@O-tRfD9fmwRG+6O6Ju0+^>h zI&2oYrJh$$S8R=rj=qahQ?v2(^fb!u8J4PQ)~2VY_el~C>`nM_-uk)H?TflI3{h}Z z%JLU~8ymir$>+6CO|D$IQsG}%oBQ09kyRBCl4tMnO0*pa1eP4^?Y(iS!Ln@c?C`X5 z@+}OG&*?cw#s4Y8Z{G9z;o$es>=#XOLM7GvX+ZBPmlpZ3o#pN00^OSieQD5&9q0j@ zS`~DvG(4xY+rogM9*tLp0 z@(Fx*sF4Y1K1Z_S5){n19syR~c_PDg(cj;HVP|DTaaCzll1tZAX(0MNYccEDmoHzQ zGs#u^SX>Hvw!OPsweT`CaZXt+C~WVGJJcK$cYR7*M`y~hfpAqg=>fk>$hA7ZiL^T6 zOm6eu+)c(xZZ9t{ldT{9N;7xxBgMR0EnmV|=JIvou0Q;E+MzHoBaJI-JaF*FCh1Ex z5Al3N2!%{uqY|c&!_A@JUN>_7rJkBxSy^ebYiMeE&NcGryT&I$;99*hPPYJBV8e6S z`XD(e=e3oU6$SW~vvBav+VvYZOy~=7xLVKtT%U%}Z=N*~M`683?a|p%FAnXP#h`{~CbqN1COmne(zAo2255w#Gm=R-}89xceF%J6M=&ucuKjK1q!#V+hf zKjAa_xT4XjsGsMHpkaw=PVN(+lU~H(b`Jw-BXMz9@qGB@Le4;jf)-_qGS|nr!KX0~ zUE3ng)qZTI9PVw~FyO{2ogWn|S9By;I_CAwJG^b`7lpY+VRMFKIF;{+XhevZ1q*@4 zJ0~k+9Sf}5B2SJPChG9;tCLiJo85uFKJnY4s7(4LUZ!{so&lj%3Hp?CCYc6&mD0(y z#4u{zUzLhWuyBrgm3e5*Uh(*S!+W=a30*W=nu-6DD=Pd)IU|N6WNBexcFE98WSO)U z&5Z}Y%MP3lJiFu!wUT&UmD0ulC<)#e4_wV6w&DY2zlimIto8afyMICdN4|_^xevzv zqI1P@!Eh~*L*&8or%&4;rZ$svBbE#sv?3F`JXRT4D&U71eGGkRip4Ha)1ZzrW+oB4_BH|oT)*$+M^FP%Vu!;%8>Q_sn9Zm|=2k;j6r7!1i& z)_$dtr)0-BW;A&&!3^}ucWQZgS#yV>v$M0uG*cl#?b{o;P0U)uOoaH#%F04XUWCz9 zwMS1_3n_ooiS6uAZzIsUTJ!#D>+$~D!>CBEzK*3d({|V;*OZCFyK^tj~)rh+Kr>>&(IjOaiM7B;O9@n41AsI>uLTf zkFf5yIjTeV4JK-EeQdeZrL$PUxm0cw_n1#==6Yk{^GQlv%~%rqFaraF|E8Hy9@o#z zbuZ%zKpD40aJu-e-+0|h0iVXm7j6}|^DElsIUhcJ2nICYdioS5?>z{f+uW@5*?vvv zq=n~E1~bgd(dWh0zK}mGc+KWb(k*XdomiWTq_P3In>s$MJdL z-28la{$}__{g|G|sA3~)c~+FZf(2~%+vonQ3=)2&F>uZ3g8@h1O1br$dFtw$iwI?| zP^3StO|kT6DY;&o{R0Rj)BXIpl*h7+2v`{|`u-{uFl}gayL$ibGpA6Qq`T(b&lEKm z1lZ*1qTp(3YM;-XIb&eX$LHni|fCq*mOk&(xT5~Tg@C)Q;~Xq!iw`7aoZcTiHv-|34x z$0ROg-`#`(Nd66ksp1#rnb|nHwxEs7R8czhnK;0-FGxS()>)gjPh=mdO~)z~^K*C&fBXrS?it3z*4EaG+E!aJS$rlI z8q+xm?v|vy^(7Lwc%14aRkszyfDVA{XTBe6;(S)(Si`Ecr+KuX&7OUX-)Vj5QP244 z-s-qygbG)C0}6%mDgb#PvMM4zY)&=FU5|w*2-5K!x#g-aJO>IC+zYH|Nnk%wWH!D2 zHpyqGK$lNQZUD8L&8w_`TlDO~j}0AwWx9;>emV+atVtMpEje>_H-{(hegi=D>V93_ zX@Mnh=$3_xOY)I`@i9l;#3h0IwmmR;6+nB?!@MB(^A*-*Ha3u*x$c`-T6fr!Q^`!2;@+x& zUh-@gPxiH~;i8-GOIst38dKew_Ak%UU}ZnljN3A%>JlYa+lXyPeDLO?wNf1%D(u^5 zli^|$;o(wq@uHq4yTpnGdxf#IO0xiwFlm`i~MmA1Ujyd zK9o*Xrb=mejs~ucnru%|*dfgnOOk{QT3_Eb_MLas*Kgm70=G`_Nq^9}je$0yBv*7r z zPe*| z`Om$zsx~8g{PLg_RL4Wt+4^`XA;*?y1ucY`wEoc9sWbjHgSS&5-r+|_$1PPhiMarJ z^QK0yDYrk*oJ@1Mbv!7Aw%Kpx)c7nSGn*O-CT=G>Tskf5{$Q-5{M8&g2OHhj9o{l- z-4Ppk=jQ>s!#AkMpsEq3(^V}p-IDv)r>Cdos6q+-j#`&_x|TVph}%H6ffrWX6~4#< zGiy))pDI249dqp|OY5K; z78Byx>4e)_{M65HWC|@=j2v5!t%T&9{z~ z6FPHtiIdb6y0IU%Ih8mS;Zp?OXFO6+DXAt-zM6Xuj5m~W{&1se>o=9IASmgiEh2{Z z?ucw#TY7qWoob%(Z0T5Nmcu{W)(6%f z-^+^5FGPV1ij2g>#GL-r2abfc8QLO2E;7vJ)!?54PrbF}!cLBlc&HI^636IE=8{P+ zT}jgIcsyRY``*C(GfwqA%|5dUwt-t|T0D#6vu|#V4hkI|hrxYcx>KSz_J)To@CCff z9%rX|E*|nG*yiSo(?95W{)};OQN=K~qnmrkCkwKoxXzbwB57~}kY0vsExj!BTQ>^6 zewcxJA}FR-EyY?T)}NzlJG9*XEd%a_thQfn=E~1x<+}Q8a?D;9-1xLC7FH1X^DFMK z?Amt+X-tutAT%wPFGZT(q2oaq#>K_OT|UDHD^ZZxW`1~47EDl!JiZcu!C)5uc#|&1 zD%|vBL-~yiiaUt{dRT6-NY|^LMgHp}ETBp(ovk95KFbdjUR>YFxrIe!Rn46+sUNJ@ z4!g2zb__b)E$z=%AuEs{oF0=*P;lHVd4JR{9kqG~wLkNi>3A5>zn73^?#R5WQDn`D zKo6gdXL_$L2o?ehVWYh7&=qJg#nVpO0&U7=a>DNhXxEx~o7D%||MeryP}dY)sqGg1 EKV#Dm<^TWy literal 0 HcmV?d00001 diff --git a/static/public/title/flag-icons/ct.png b/static/public/title/flag-icons/ct.png new file mode 100644 index 0000000000000000000000000000000000000000..100bcc314f597091f2f79350c05c8a8deae6b486 GIT binary patch literal 536 zcmV+z0_XjSP)($6uhIK?FeZnEpU}4 z$7F+VB*cWB2`juF>IJS$e3!wAD)g~82OB{YtB&-L30l|_A7;5G@%;rUe4%5n22+*o zSadd0C@r2NdyI(vh^5b=)R)0YvSQEY7E|K)buwxapsk}BzI}uuv6=i!CO-T`84rDOcyf~ zQfUvr@XCBSb=~ce!F{=3wfY(EaZk+I2#d|Y=FxZg*iojr6Q#ZUux5d2*Q=hL;5Po9 zdI1bF{StD<;*fXpv`%pKcgJc)$b#csz#FMGF6rw7Ng`#?> z*H<(H4cjsx)hw{@B|PuL0k3H`)2m{+i{C1?yK|guk)ixApp!He;*1=SP0q)hAH@%S a2rvL2S8(E!;z;uV0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0009uNklnREBtdw%DfUoT|C`Gx1j1K;Q2;rn^S@W24~O9+8!S*1kLW~Fr_rr{dWm^P&t z4hn^lFbG%p%@vJhr2@@?KgY*+&nzrFlp7nTaCr=~w1m|gH_+J9@@r{X*+G@d_2>r| zShihzD|73+!9$(vD~uQ~oIH+oCr9@9XB4aiQ@!UII`QR}vi7z!n|AJaJIdz|X|0g} zhGnHPnM~Kn-Z$4j{qq1XRaVnbRZV(r8Ob%3lout~l1$TjCr9jHC%=F3)w_o4wgX6n zAQ0lf#QPsKJ$G%Ahs{-ZhC~5=JdR%1NK{`(0gW(Co{cA1b?j3nFO3{A9j96vwp}uN zad=Nd-;b=ZV)%hVr&IR=4MT*NN2F8W#)*Ou6^1-Ur%p3}^b?HgYK-!7FeHQ_(bT_qbGI>H ze=TdC{=WO-b|G0j*8{O4LjNu@nFK)nJ;`E!FNU2&6c-~L2km(HmauKe|7NePC5$mOuNHFLhaWZ=Tt-YyC7Q}4O%&WXQ{=>2bC#Y{v#zj9b>Pzt$l z7w4&FMp|E)?l^q7EmSHrmOP`w!#_+{Rk#~kU)@|*QzM-xpFj=%My{tDtEd>ep`LJe zD`z%syt=pZyKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0008@Nkl0FV-86p8g!8A^O znn^pPiFJsRJ9Fg0xjd80otw&LQ@0BRJkO&omEx)XeohSy{oI*Ozq7r)J-OE~ z@46@ukHs>jQt9h=uUvWjhp8$45ACTG7cX4k?8wMll}hD3RfW9kGB-Wl^y9?Dd`~8$ zfC8FGBs85)YfE$U-q|kSxO7Qx&CZ_ByDqkffH9Xx$Hw{=3k3iYt*spG?Zvh&1R+@} zv9j=cJsr3@K2A?x-_?@?0~5C8IBiS0+$*PCmzRhT8lkl-L)3QAAOr!c;~`3=O={&b z1OY+l^XDg@CcT0FSM9*IPMDiN9ey2%W1$$-ilS-|k-AZ#U>!Y%0C-j8_5$;>b39mG zJ8cKPf4uRJB?90tfY8Tm+()_}fgq?Sse)7(P9u15l@goQ;Y7(lVpJy=JMpq9W+ zNU*qEUwwPqmi@)`Z+?01bUzL99f;XCiM3Y}Eg*;PBe6L8_cq$FiD~U+z81^^Sf79P zQC>^ks&_5b^|>!IV)wQVVYD9I-QN4$5t-Ps2L&GBm2tK^_<=b~RUW2N_jt>=J zXCFPlGf=aj=0R)$@?X0zYlumDz87ZdgzDO3y0tK>ACG_VTSrIN zlmG7QKj`etoOynD`24fabUksbC)(&l#oXHntGQnvtba8*bK_=qavZ|auKu3^07w;F UpJF-5pa1{>07*qoM6N<$f|9VNjQ{`u literal 0 HcmV?d00001 diff --git a/static/public/title/flag-icons/es.png b/static/public/title/flag-icons/es.png new file mode 100644 index 0000000000000000000000000000000000000000..7cd0d00d78e115ee256e9b33fb1f4e4280946e65 GIT binary patch literal 3596 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 SeuDb|0000 literal 0 HcmV?d00001 diff --git a/static/public/title/flag-icons/fi.png b/static/public/title/flag-icons/fi.png new file mode 100644 index 0000000000000000000000000000000000000000..6a52741db7718e55edfe28bc3f107845b0b3b83a GIT binary patch literal 3569 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 literal 0 HcmV?d00001 diff --git a/static/public/title/flag-icons/fr.png b/static/public/title/flag-icons/fr.png new file mode 100644 index 0000000000000000000000000000000000000000..a2380a7e6f29a21181a31074f100fa1fe9ed636c GIT binary patch literal 3530 zcmV;*4K?zKP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0008zNkleF%(H@Ik}urH9lIwLh#q2~r^RpkPVRVurC;mTUjk*-3GhM91AN zX_awW-EDUM+;i_eJ?yOPlKq~}IegFOd^sPH9UNr-2qCbQYBR>H)mpDG#(0)xO(@67 zMp2ZD!f-)e%`J=p$5GA3m|Y{6FK@U}EVk+>x(oGfo35^|pV}U{f3KdYd}HPV4B#c4 zWyM>i6TA0)x+?Q{hBvpbr)5bimSs_?R>>bZ#@W|4_O!pT_0(f8z4%UCt-WWAK>|3o zYA%*aC%0_>WYxK!%VZvTn$FILS)5Fg^nI45QarV~n{|^jm^~jbbo8_Rmgj8&kU|Kg zG`sfq^{>2IaDfy-y#^R+)he}0g&3%7jl|{|mBc%En6cs90hLI!OV_ni=d)Kfo%x}J z>ox<1CQktdAtgcxV!)UfV=1(hWWtd0k>kELX0uY3=>7iO=;AnT0%Aa*YzauD5O;su z_=|8J?M480VT`30MkxO^@w^PfaK+eo8BomTBW7mw0<8jO+az3M%Y9fYm(yISVM3jK+ES1wKCh`B4c(U-Tb)cgMCTFfk1i_o^TeSfHzTJ-wW5PYs?K z7&s{bP7Qqb^|jG~1N(MAi>+(|{a=WPVKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0009ONklD8-^si&$KEX%Hb6NheLc!~|ohnrISJ zY2xH!V>+44%>RGKMTjQScX!}@InROj$Y3hPdWi_ps9&YZy(`(3HdKo}Yp+>r2ZJyi za?Wk=+x3I*+k}W7z4Z0)W75WByHNIn1&$QKY*By?EM(7rIwOeXW74GLk~)E`;$IYr3foN{%>5?ub7 z{NgCNP!Iu(K>#rxfhr{3L9tLqS(TL=5U2 z-k-BXob#<8DVjd~#NE^j1gxDaUBt89?{kXUH+wPo4 zM#Yj;Rx|~IpZcu1xWc1lbh6M0FdiT9=4(#ddprja#a8o%2RWO3& z1Lm(UaPZLc-4+PnJahV`oz1O1W$&CNSYH0`l$*!|A^zT7oJ-i$g;c7?1DKka9J}s< z*zWc_cE!ueFm=_KEp>QXYVhi7@#?CvRY`2J0#jMRS5bHE(5uHDURqq7+wh17AA9t* zk+ENbFrQZ)`APHVFKWK`f`KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0008aNklIzqqNzHdDr- zlEhdu8jRzcci+1%#z_+?9{AwGJ@?%2oFkX>dFDby(7xX)jSIT$JetbYtf$9Y?SJ~cInawrStjB!{QBW5a48x!4^L1RQ9Jbch1RU3Go|>8( zy7Jkcm0iUGIb5P-ifCa9f+|ujqp<`S@Br*tsi9_;1K(@2z=z|L)E&eS=pN+oVy zzrIzQC~D8Nw9H-rh%v;E>k<*HNUbOlEZ}HOOFGSj=jF6OqOq}YUbl|c2oPIa6R2CM zDT1|lo`>iAu1+SCdx-0!9hZcg z!2h2~xIPfk_0k4blvDY$znmLz017vXqpu{h3wpY@Y#5&WgGyLIi9+hZVF}}i&^+Xg z-0OVY^yb)szC&-{xmW&o*7Sv|SANdfMGYTqerLUE^wpi}H213&!r0)u9&MSWeAvE? zuIa_s4)z^-w={P1_c^Bi!}2A|w(Z!yeb=&%mplB{R7$i`(fw+5x;QyLG&nSH=G;%m fV;fJ_`HuzwCXf>v1O<1<00000NkvXXu0mjfB2b>b literal 0 HcmV?d00001 diff --git a/static/public/title/flag-icons/it.png b/static/public/title/flag-icons/it.png new file mode 100644 index 0000000000000000000000000000000000000000..106ef3fda2eb613521327b07ad4c5804a6731ec4 GIT binary patch literal 3531 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 FV1kevpP&E$ literal 0 HcmV?d00001 diff --git a/static/public/title/flag-icons/jp.png b/static/public/title/flag-icons/jp.png new file mode 100644 index 0000000000000000000000000000000000000000..4e1f51d5e60224f17e6e10817ff7fb9d4abf773a GIT binary patch literal 3519 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 literal 0 HcmV?d00001 diff --git a/static/public/title/flag-icons/no.png b/static/public/title/flag-icons/no.png new file mode 100644 index 0000000000000000000000000000000000000000..186adcdb0e7b4332b9aa0a652c36232f2590d7c3 GIT binary patch literal 3633 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 DsN~M! literal 0 HcmV?d00001 diff --git a/static/public/title/flag-icons/pl.png b/static/public/title/flag-icons/pl.png new file mode 100644 index 0000000000000000000000000000000000000000..8e2c9a7f2cb25d13bc846ad3d2a17c82314d739c GIT binary patch literal 3536 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 KMNUMnLSTZLTAwNa literal 0 HcmV?d00001 diff --git a/static/public/title/flag-icons/pt.png b/static/public/title/flag-icons/pt.png new file mode 100644 index 0000000000000000000000000000000000000000..e71ff4a926cd5b56fc94bd2af880bd389b05092d GIT binary patch literal 3650 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 CBNg%h literal 0 HcmV?d00001 diff --git a/static/public/title/flag-icons/se.png b/static/public/title/flag-icons/se.png new file mode 100644 index 0000000000000000000000000000000000000000..3b13273292b63893a9a79892ab4c6772563d54f3 GIT binary patch literal 3610 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 literal 0 HcmV?d00001 diff --git a/static/public/title/logo150.png b/static/public/title/logo150.png new file mode 100644 index 0000000000000000000000000000000000000000..53af2dce2b563071f546b7f5c091b5508c39e959 GIT binary patch literal 16653 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 z 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 literal 0 HcmV?d00001 diff --git a/static/public/title/title.png b/static/public/title/title.png new file mode 100644 index 0000000000000000000000000000000000000000..b106d1678c2edf036c15542c97bc8affb63547d5 GIT binary patch literal 2078 zcma)6c~nzZ9*#?uO)4F%Q?;EmfCMzlOG1DY>;b}(N+JSNsC9&pJRo55Lh^vH1ZN0{ z3rhuLlPHKRibTLD!6FE#2-HF1NNq$hASg>UEDFVX(ibas{ut);ciwwpzTAO!kyw#;4 zeZw>XgMJHvqg^q-n+j(7p*)KQ zIDyz|Nr4WEIU=4A=0O6qL6IE>#lo%_#Od!#;0xc&3dHZW3E41$ge@chc%orROF$;` z|3mrw_h>Qf5B}lze+r8O6NDha9~48eA`WtJ;Z}xJLYjvNWW$gs5Q6qE?V?{K1ViFT zNQm|bprWxsJOLMq7u&tXGnq7oKn$}59FReG#UKiJ9*;|N0-VTnq9>W^Om+tVPl}s6 zk?KTo0*C+|a0A@jmbi3?6Uzq$@Di8%2bZ!e*H8+4A(EL6igHm%F?d(z09vVuoNi*#A1{r75I(4Bhu-iwxcuJ}5w{U4)c%@oTv;awSsyd;>if z78Z{7FJ#`<<>VJ+c4{+kjU%Dc>9SAPW!1K1)pu&O+N>+;y1Kf8f`ZP@&TM&QZ*OmQ z(Mcq-tCg9p8ns$oSy|cA(xTC5luBjRrQX&a_2ld?&&DV6f6^M4(O4{$;lDfDGnh{>|uXafMM!S1&UOo+l$-mnaDAt6VS!FiQUQ<@-!eY(0#(VG0rI$3D?~`rQ=HALF?yWR&lgUae za2LvdKGmUJnV>=?6IZ7?)znx_FWSXkZO6WH{B~^5zDc%Px<+#Y9RlzAa6`sr z2a4@Z*6`j0UgeetX0_M)&lNX+0{4;y9b4>9A1({H6=!MTsR$G_z?7Fb(tetIsT zdGdC9fa<|`ZvXS@G~c`cJh(YmR-i3C>3UCeuU_C^RNC{9-aA4f3E))I4KC)nA6Y5} zSDt9=3Vit_$H;MQof(+2G9!9s^1N-gosY4}vB!xXmn^)xRlDs)yYS6lYmCbX&I@@v zEPRt6dTv*YSZbdHr&2}vESdefvV*-fV3oxBY_W53^i1#S3aYJ1d78|tctvpx5pcJ{ z9&Z>O_1RorQ{W;?uDFxsG;~RYyQfd8byEGE8J0gHePvSn<3Fp~&-CdJR%kMBS)XMZDLDf7K^`A zuyvPjen;INHFn})~-9Q%mKMyn)a8o(&m3!1cq0Gp|@SYVVkHnd#P3tm=~4 zreWS@|6Q_)&TYr%AI5z1VV|^b>U0p55H}fdy{_vDGX~t=(HB&rdr4N=tBLvPx}?Os z{`zN&WqkHf(fwr018W?Os&J(j!R*S6rsgdpq4kfxrhGQMwZvAa^xYV>a|00Qed90f z8xO7Tx-@#kZAb$(E}#TQ>&}GksrMeXS9|pN`N*rdTKN&t&b4#1i^S|G&A`;h4QcWX zp>Oo82ePA3qHm{Zvq_Fu^#t{z+e zqQYoT@=@3PFCH|`e&e#&D7Kvyl7ksb>3)p=hf3xch#jbMx3oTBm&Tu{K5+Fjsqu&k z7XoR*$|cp%uMI7aCd>4nDx9wTa6;HYcyayqZM{C|mt!${BO jaune && x < vert) { + r = MaxColor - ((x - jaune) / jaune) * MaxColor; + v = MaxColor; + b = 0; + } else if (x > vert && x < cyan) { + r = 0; + b = ((x - jaune * 2) / jaune) * MaxColor; + v = MaxColor; + } else if (x > cyan && x < bleu) { + r = 0; + v = MaxColor - ((x - jaune * 3) / jaune) * MaxColor; + b = MaxColor; + } else if (x > bleu && x < majenta) { + r = ((x - jaune * 4) / jaune) * MaxColor; + v = 0; + b = MaxColor; + } else if (x > majenta && x < rouge2) { + r = MaxColor; + v = 0; + b = MaxColor - ((x - jaune * 5) / jaune) * MaxColor; + } + + r = Math.round(r, 0); + v = Math.round(v, 0); + b = Math.round(b, 0); + + r = r + 70; + v = v + 70; + b = b + 70; + if (r > MaxColor) { + r = MaxColor; + } + if (v > MaxColor) { + v = MaxColor; + } + if (b > MaxColor) { + b = MaxColor; + } + + if (r > MaxColor) { + r = MaxColor; + } + if (v > MaxColor) { + v = MaxColor; + } + if (b > MaxColor) { + b = MaxColor; + } + document.getElementById(couleur).style.backgroundColor = + "rgba(" + r + ", " + v + ", " + b + ", 1)"; +} + +function changeCouleurObstacle(couleur) { + var r2 = r - 32; + var v2 = v - 32; + var b2 = b - 32; + if (r2 < 0) { + r2 = 0; + } + if (v2 < 0) { + v2 = 0; + } + if (b2 < 0) { + b2 = 0; + } + + //var colorb= color + color = "#" + toHexa(r) + "" + toHexa(v) + "" + toHexa(b); + colorb = "#" + toHexa(r2) + "" + toHexa(v2) + "" + toHexa(b2); + if (couleur == "Couleur1") { + COLOR_1 = color; + COLOR_1b = colorb; + } else if (couleur == "Couleur2") { + COLOR_2 = color; + COLOR_2b = colorb; + } else if (couleur == "Couleur3") { + COLOR_3 = color; + } else if (couleur == "Couleur0") { + //fond + r = r + 140; + v = v + 140; + b = b + 140; + if (r > MaxColor) { + r = MaxColor; + } + if (v > MaxColor) { + v = MaxColor; + } + if (b > MaxColor) { + b = MaxColor; + } + color = "#" + toHexa(r) + "" + toHexa(v) + "" + toHexa(b); + colorb = "#" + toHexa(r2) + "" + toHexa(v2) + "" + toHexa(b2); + COLOR_TERRAIN = color; + COLOR_TEXT_UNDER = + "rgba(" + + toDec("r") + + ", " + + toDec("v") + + ", " + + toDec("b") + + ", 0.7)"; // grilles + } + genererParcours(); +} + +function toHexa(initial) { + var regDec = /^\d+$/; + var converti = (converti = parseInt(initial, 10) + .toString(16) + .toUpperCase()); + if (converti.length < 2) { + converti = "0" + converti; + } + return converti; +} +function toDec(initial) { + var regHexa = /^[a-f\d]+$/i; + var converti = parseInt(initial, 16); + return converti; +} + +function setColorPredef(id) { + if (id == 1) { + //standard + COLOR_1 = "#22AAFF"; // principale + COLOR_1b = "#028ADF"; // principale sombre + COLOR_2 = "#CC3300"; // zones + COLOR_2b = "#AC1300"; // zones sombre + COLOR_3 = "#EEEEEE"; // couleur barre 2 + COLOR_TEXT_UNDER = "rgba(211, 228, 240, 0.7)"; // grilles + COLOR_TERRAIN = "#d3e4f0"; // terrain CCFFCC + } else if (id == 2) { + //noir & blanc + COLOR_1 = "#555555"; // principale + COLOR_1b = "#353535"; // principale sombre + COLOR_2 = "#aaaaaa"; // zones + COLOR_2b = "#8a8a8a"; // zones sombre + COLOR_3 = "#ffffff"; // couleur barre 2 + COLOR_TEXT_UNDER = + "rgba(" + + toDec("ee") + + ", " + + toDec("ee") + + ", " + + toDec("ee") + + ", 0.7)"; // grilles + COLOR_TERRAIN = "#eeeeee"; // terrain CCFFCC + } else if (id == 3) { + //noir & rouge + COLOR_1 = "#555555"; // principale + COLOR_1b = "#353535"; // principale sombre + COLOR_2 = "#CC3300"; // zones + COLOR_2b = "#AC1300"; // zones sombre + COLOR_3 = "#ffffff"; // couleur barre 2 + COLOR_TEXT_UNDER = "rgba(211, 228, 240, 0.7)"; // grilles + COLOR_TERRAIN = "#d3e4f0"; // terrain CCFFCC + } else if (id == 4) { + //eco color + COLOR_1 = "#99DDFF"; // principale + COLOR_1b = "#79BDDF"; // principale sombre + COLOR_2 = "#ff6666"; // zones + COLOR_2b = "#DF4646"; // zones sombre + COLOR_3 = "#EEEEEE"; // couleur barre 2 + COLOR_TEXT_UNDER = "rgba(255, 255, 255, 0.7)"; // grilles + COLOR_TERRAIN = "#ffffff"; // terrain CCFFCC + } else if (id == 5) { + //eco noir & blanc + COLOR_1 = "#dddddd"; // principale + COLOR_1b = "#bdbdbd"; // principale sombre + COLOR_2 = "#bbbbbb"; // zones + COLOR_2b = "#9b9b9b"; // zones sombre + COLOR_3 = "#ffffff"; // couleur barre 2 + COLOR_TEXT_UNDER = + "rgba(" + + toDec("ff") + + ", " + + toDec("ff") + + ", " + + toDec("ff") + + ", 0.7)"; // grilles + COLOR_TERRAIN = "#ffffff"; // terrain CCFFCC + } else if (id == 6) { + //standard + COLOR_1 = "#dddddd"; // principale + COLOR_1b = "#bdbdbd"; // principale sombre + COLOR_2 = "#CC3300"; // zones + COLOR_2b = "#AC1300"; // zones sombre + COLOR_3 = "#EEEEEE"; // couleur barre 2 + COLOR_TEXT_UNDER = "rgba(211, 228, 240, 0.7)"; // grilles + COLOR_TERRAIN = "#CCFFCC"; // terrain CCFFCC + } + genererParcours(); +} + +function setBackgroundColor(id) { + if (id == 1) { + COLOR_TEXT_UNDER = "rgba(255, 255,255, 0.7)"; + COLOR_TERRAIN = "#ffffff"; + COLOR_GRILLE = "#cccccc"; // grilles + } else if (id == 2) { + COLOR_TEXT_UNDER = "rgba(211, 228, 240, 0.7)"; + COLOR_TERRAIN = "rgba(211, 228, 240, 1)"; + COLOR_GRILLE = "#bdcdd8"; // grilles + } else if (id == 3) { + COLOR_TEXT_UNDER = "rgba(211, 228, 240, 0.7)"; + COLOR_TERRAIN = "rgba(204, 255, 204, 1)"; + COLOR_GRILLE = "#b2e0b2"; // grilles + } + genererParcours(); +} + +function setDriverColor(id) { + if (id == 1) { + COLOR_VETEMENTS = "#bbbbbb"; + } else if (id == 2) { + COLOR_VETEMENTS = "#CC3300"; + } else if (id == 3) { + COLOR_VETEMENTS = "#22AAFF"; + } + genererParcours(); +} + +function setObstacleColor(id) { + if (id == 1) { + //eco noir & blanc + COLOR_1 = "#dddddd"; // principale + COLOR_1b = "#bdbdbd"; // principale sombre + COLOR_2 = "#bbbbbb"; // zones + COLOR_2b = "#9b9b9b"; // zones sombre + COLOR_3 = "#ffffff"; // couleur barre 2 + } else if (id == 2) { + //standard + COLOR_1 = "#22AAFF"; // principale + COLOR_1b = "#028ADF"; // principale sombre + COLOR_2 = "#CC3300"; // zones + COLOR_2b = "#AC1300"; // zones sombre + COLOR_3 = "#EEEEEE"; // couleur barre 2 + } else if (id == 3) { + //noir & rouge + COLOR_1 = "#555555"; // principale + COLOR_1b = "#353535"; // principale sombre + COLOR_2 = "#CC3300"; // zones + COLOR_2b = "#AC1300"; // zones sombre + COLOR_3 = "#ffffff"; // couleur barre 2 + } else if (id == 4) { + //blanc rouge + COLOR_1 = "#dddddd"; // principale + COLOR_1b = "#bdbdbd"; // principale sombre + COLOR_2 = "#CC3300"; // zones + COLOR_2b = "#AC1300"; // zones sombre + COLOR_3 = "#EEEEEE"; // couleur barre 2 + } else if (id == 5) { + //noir & rouge + COLOR_1 = "#555555"; // principale + COLOR_1b = "#353535"; // principale sombre + COLOR_2 = "#e07ecd "; // zones + COLOR_2b = "#ae629f"; // zones sombre + COLOR_3 = "#ffffff"; // couleur barre 2 + } + genererParcours(); +} + +/* +var COLOR_1="#22AAFF";// principale +var COLOR_1b="#0088DD";// principale sombre +var COLOR_2="#CC3300";// zones +var COLOR_2b="#AA1100";// zones sombre +var COLOR_3="#EEEEEE";// couleur barre 2 +*/ diff --git a/static/ui/app/src/events.js b/static/ui/app/src/events.js new file mode 100644 index 0000000..5ef66b9 --- /dev/null +++ b/static/ui/app/src/events.js @@ -0,0 +1,746 @@ +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////LISTENER D EVENEMENTS///////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +function doTouchStart(event) { + isTactil = true; + setMargeSelect(); + + //document.getElementById('outils').style.overflow="scroll"; + //document.getElementById('trajMaitre').style.overflow="scroll"; + window.removeEventListener("mousemove", doMouseMove, false); + window.removeEventListener("mouseup", doMouseUp, false); + canvas.removeEventListener("mousedown", doMouseDown, false); + canvas.addEventListener("touchmove", doTouchMove, false); + canvas.addEventListener("touchend", doTouchEnd, false); + canvas.addEventListener("touchleave", doTouchEnd, false); + canvas.addEventListener("touchcancel", doTouchEnd, false); + + //event.preventDefault(); + + doTouchMove(event); + + doMouseDown(event); +} +function doTouchEnd(event) { + //event.preventDefault(); + doMouseUp(event); + doTouchMove(event); +} +function doTouchMove(event) { + var touches = event.changedTouches; + oldx = canvas_x; + canvas_x = touches[0].pageX - DECAL_X_INTERFACE; + canvas_x = canvas_x / scale; + + diffx = oldx - canvas_x; + if (canvas_x > canvasSizeX - MARGE) { + canvas_x = canvasSizeX - MARGE; + } else if (canvas_x < MARGE) { + canvas_x = MARGE; + } + oldy = canvas_y; + canvas_y = touches[0].pageY - DECAL_Y_INTERFACE; + canvas_y = canvas_y / scale; + diffy = oldy - canvas_y; + if (canvas_y > canvasSizeY - MARGE * 2) { + canvas_y = canvasSizeY - MARGE * 2; + } else if (canvas_y < MARGE) { + canvas_y = MARGE; + } + doMove(); + + if (isOverObstacle()) { + log("over obstacle"); + event.preventDefault(); + } else { + log("not over obstacle"); + } +} +function isOverObstacle() { + if ( + overObject == -1 && + overTunnelId == -1 && + overPointTunnel == -1 && + overTunnelComplet == -1 && + overModifTrajId == -1 && + overModifTrajDepArr == -1 && + overNumeroId == -1 && + overNumeroId2 == -1 && + overNumeroId3 == -1 && + overObject == -1 + ) { + return false; + } + return true; +} +function doMouseDown(event) { + window.addEventListener("mouseup", doMouseUp, false); + canvas.removeEventListener("mousedown", doMouseDown, false); + if (suppression == true) { + if (overNumeroId != -1) { + listeNumero[overNumeroId] = ""; + // fix path when last number is deleted + if (overNumeroId+1==nextNumber) { + nextNumber--; + listeNumero.pop(); + } + } else if (overNumeroId2 != -1) { + listeNumero2[overNumeroId2] = ""; + } else if (overNumeroId3 != -1) { + listeNumero3[overNumeroId3] = ""; + } else if (overTunnelId != -1) { + tbTunnels[overTunnelId] = ""; + } else if (overTunnelComplet != -1) { + tbTunnels[overTunnelComplet] = ""; + } else if (overObject != -1) { + tbObst[overObject] = ""; + } + } else if (overNumeroId != -1) { + selNumeroId = overNumeroId; + } else if (overNumeroId2 != -1) { + selNumeroId2 = overNumeroId2; + } else if (overNumeroId3 != -1) { + selNumeroId3 = overNumeroId3; + } else if (overModifTrajId != -1) { + modifTrajId = overModifTrajId; + modifTrajDepArr = overModifTrajDepArr; + } else if (overTunnelId != -1) { + selTunnel = overTunnelId; + selPointTunnel = overPointTunnel; + } else if (overTunnelComplet != -1) { + selTunnelComplet = overTunnelComplet; + } else if (overObject != -1) { + selObst = overObject; + setCanvasX(selObst, canvas_x - decalX); + setCanvasY(selObst, canvas_y - decalY); + genererParcours(); + } +} +function doMouseUp(event) { + //window.removeEventListener("mousemove", doMouseMove, false); + window.removeEventListener("mouseup", doMouseUp, false); + canvas.addEventListener("mousedown", doMouseDown, false); + selObst = -1; + selTunnel = -1; + selPointTunnel = -1; + selTunnelComplet = -1; + rotate = false; + moveTunnelComplet = -1; + selNumeroId = -1; + selNumeroId2 = -1; + selNumeroId3 = -1; + modifTrajId = -1; + modifTrajDepArr = -1; + genererParcours(); +} +function doMouseMove(event) { + oldx = canvas_x; + canvas_x = event.pageX - DECAL_X_INTERFACE; + canvas_x = canvas_x / scale; + + diffx = oldx - canvas_x; + if (canvas_x > canvasSizeX - MARGE) { + canvas_x = canvasSizeX - MARGE; + } else if (canvas_x < MARGE) { + canvas_x = MARGE; + } + oldy = canvas_y; + canvas_y = event.pageY - DECAL_Y_INTERFACE; + canvas_y = canvas_y / scale; + diffy = oldy - canvas_y; + if (canvas_y > canvasSizeY - MARGE * 2) { + canvas_y = canvasSizeY - MARGE * 2; + } else if (canvas_y < MARGE) { + canvas_y = MARGE; + } + doMove(); +} +///////////////////////////////////////////////////////////////////////MOUVEMENT/////////////////////////////////////////////////////////// +function rchObstacleProche(xProche, yProche, numero) { + var idPlusProche = 0; + var xPlusProche = 1000; + var yPlusProche = 1000; + var distanceHypoPlusProche = 1000; + var sens = 1; + var type = "classique"; + for (var i = 0; i < id; i++) { + var x = getCanvasX(i); + var y = getCanvasY(i); + var nom = getSens(i); + var largx = getXCliquable(i); + var hauty = getYCliquable(i); + var angle = getAngle(i); + var type = "classique"; + var modifXDep = getModXTrajEntree(i); + var modifYDep = getModYTrajEntree(i); + var modifXArr = getModXTrajSortie(i); + var modifYArr = getModYTrajSortie(i); + var angleSens2 = getAngleTrajSortie(i); + var longTraj = getDistTrajCentre(i); + var distanceSup = 3; + var departX = + x + + modifXDep / 2 + + Math.cos(((angle + angleSens2) / 180) * Math.PI) * + (longTraj / 2 + distanceSup); + var departY = + y + + modifYDep / 2 + + Math.sin(((angle + angleSens2) / 180) * Math.PI) * + (longTraj / 2 + distanceSup); + + var xDist = Math.abs(departX - xProche); + var yDist = Math.abs(departY - yProche); + var distanceHypo = Math.sqrt(Math.pow(xDist, 2) + Math.pow(yDist, 2)); + + if (distanceHypo < distanceHypoPlusProche) { + idPlusProche = i; + xPlusProche = xDist; + yPlusProche = yDist; + distanceHypoPlusProche = distanceHypo; + sens = 1; + xpp = departX; + ypp = departY; + type = "classique"; + } + + var arriveX = + x + + modifXArr / 2 + + Math.cos(((angle + angleSens2) / 180) * Math.PI) * + (-longTraj / 2 - distanceSup); + var arriveY = + y + + modifYArr / 2 + + Math.sin(((angle + angleSens2) / 180) * Math.PI) * + (-longTraj / 2 - distanceSup); + + var xDistArr = Math.abs(arriveX - xProche); + var yDistArr = Math.abs(arriveY - yProche); + var distanceHypoFin = Math.sqrt( + Math.pow(xDistArr, 2) + Math.pow(yDistArr, 2) + ); + + if (distanceHypoFin < distanceHypoPlusProche) { + idPlusProche = i; + xPlusProche = xDistArr; + yPlusProche = yDistArr; + distanceHypoPlusProche = distanceHypoFin; + sens = 0; + xpp = arriveX; + ypp = arriveY; + type = "classique"; + } + } + for (var j = 0; j < idTunnel; j++) { + var xTun = tbTunnels[j][1]; + var yTun = tbTunnels[j][2]; + var xTunFin = tbTunnels[j][(nbArticulationTunnel - 1) * 2 + 1]; + var yTunFin = tbTunnels[j][(nbArticulationTunnel - 1) * 2 + 2]; + //var x2Tun=tbTunnels[j][3];// pour le premier angle + //var y2Tun=tbTunnels[j][4];// pour le premier angle + + var largXTun = 0; + var largYTun = 0; + var angleTun = 90; + var modifXDepTun = 0; + var modifYDepTun = 0; + var modifXArrTun = 0; + var modifYArrTun = 0; + + //var distXTun = xTun - x2Tun; + //var distYTun = yTun - y2Tun; + //var modifAngleArrTun = Math.atan2(distYTun,distXTun)/Math.PI*180-90; + var longTrajTun = 0; + + var xDist = Math.abs(xProche - xTun); + var yDist = Math.abs(yProche - yTun); + var distanceHypo = Math.sqrt(Math.pow(xDist, 2) + Math.pow(yDist, 2)); + if (distanceHypo < distanceHypoPlusProche) { + idPlusProche = j; + xPlusProche = xDist; + yPlusProche = yDist; + distanceHypoPlusProche = distanceHypo; + sens = 1; + xpp = xTun; + ypp = yTun; + type = "tunnel"; + } + var xDistFin = Math.abs(xProche - xTunFin); + var yDistFin = Math.abs(yProche - yTunFin); + var distanceHypoFin = Math.sqrt( + Math.pow(xDistFin, 2) + Math.pow(yDistFin, 2) + ); + + if (distanceHypoFin < distanceHypoPlusProche) { + idPlusProche = j; + xPlusProche = xDistFin; + yPlusProche = yDistFin; + distanceHypoPlusProche = distanceHypoFin; + sens = 0; + xpp = xTunFin; + ypp = yTunFin; + type = "tunnel"; + } + } + xp = xProche; + yp = yProche; + var ordreObstacle = new Array(); + ordreObstacle[0] = idPlusProche; + ordreObstacle[1] = type; //type + var xNumProche; + var yNumProche; + var angleProche; + var modXProche; + var modYProche; + if (ordreObst[numero] != null && ordreObst[numero][0] == idPlusProche) { + if (type == "tunnel") { + ordreObstacle[7] = 90; + ordreObstacle[8] = 50; + ordreObstacle[9] = 90; + ordreObstacle[10] = 50; + xNumProche = 0; + yNumProche = 0; + modXProche = 0; + modYProche = 0; + angleProche = 0; + } else if (ordreObst[numero][1] == "tunnel") { + xNumProche = getCanvasX(idPlusProche); + yNumProche = getCanvasY(idPlusProche); + ordreObstacle[7] = getAngleTrajSortie(idPlusProche); + ordreObstacle[8] = getLongTraj(idPlusProche); + ordreObstacle[9] = getAngleTrajSortie(idPlusProche); + ordreObstacle[10] = getLongTraj(idPlusProche); + modXProche = getModXTrajSortie(idPlusProche); + modYProche = getModYTrajSortie(idPlusProche); + angleProche = getAngle(idPlusProche); + } else { + if (ordreObst[numero][2] != sens) { + xNumProche = getCanvasX(idPlusProche); + yNumProche = getCanvasY(idPlusProche); + ordreObstacle[7] = getAngleTrajSortie(idPlusProche); + ordreObstacle[8] = getLongTraj(idPlusProche); + ordreObstacle[9] = getAngleTrajSortie(idPlusProche); + ordreObstacle[10] = getLongTraj(idPlusProche); + modXProche = getModXTrajSortie(idPlusProche); + modYProche = getModYTrajSortie(idPlusProche); + angleProche = getAngle(idPlusProche); + } else { + xNumProche = getCanvasX(idPlusProche); + yNumProche = getCanvasY(idPlusProche); + ordreObstacle[7] = ordreObst[numero][7]; + ordreObstacle[8] = ordreObst[numero][8]; + ordreObstacle[9] = ordreObst[numero][9]; + ordreObstacle[10] = ordreObst[numero][10]; + modXProche = getModXTrajSortie(idPlusProche); + modYProche = getModYTrajSortie(idPlusProche); + angleProche = getAngle(idPlusProche); + //log(ordreObstacle[7]+"_"+ordreObstacle[8]+"_"+ordreObstacle[9]+"_"+ordreObstacle[10]); + } + } + } else { + if (type == "tunnel") { + ordreObstacle[7] = 90; + ordreObstacle[8] = 50; + ordreObstacle[9] = 90; + ordreObstacle[10] = 50; + xNumProche = 0; + yNumProche = 0; + modXProche = 0; + modYProche = 0; + angleProche = 0; + } else { + ordreObstacle[7] = getAngleTrajSortie(idPlusProche); + ordreObstacle[8] = getLongTraj(idPlusProche); + ordreObstacle[9] = getAngleTrajSortie(idPlusProche); + ordreObstacle[10] = getLongTraj(idPlusProche); + xNumProche = getCanvasX(idPlusProche); + yNumProche = getCanvasY(idPlusProche); + modXProche = getModXTrajSortie(idPlusProche); + modYProche = getModYTrajSortie(idPlusProche); + angleProche = getAngle(idPlusProche); + } + } + + ordreObstacle[2] = sens; //sens + var xComp = listeNumero[numero][1] - xNumProche - modXProche / 2; + var yComp = listeNumero[numero][2] - yNumProche - modYProche / 2; + // calcul de l'angle par rapport au centre. + + var dist = Math.sqrt(Math.pow(xComp, 2) + Math.pow(yComp, 2)); + + var angleNumero = (Math.atan2(yComp, xComp) / Math.PI) * 180 - angleProche; + + listeNumero[numero][3] = angleNumero; + listeNumero[numero][4] = dist; + + // calcul de l'angle avec le centre de l'obstacle qui lui est lié + + ordreObst[numero] = ordreObstacle; +} +var xp = 0; +var yp = 0; +var xpp = 0; +var ypp = 0; + +var xTst = 0; +var yTst = 0; +var xTst2 = 0; +var yTst2 = 0; +var xTst3 = 0; +var yTst3 = 0; +/* +function afficherTest(){ + context.fillStyle="#ff0000"; + rect(xTst,yTst,1,1); + //jaune + context.fillStyle="#ffFF00"; + rect(xTst2,yTst2,1,1); + context.fillStyle="#00FF00"; + rect(xTst3,yTst3,1,1); +}*/ +function recupereListeNumero(id, type) { + // récupère la liste des numéros qui sont liés à un obstacle. + for (var i = 1; i < nextNumber; i++) { + if (ordreObst[i][0] == id && ordreObst[i][1] == type) { + listeNumero[i][1] = listeNumero[i][1] - diffx; + listeNumero[i][2] = listeNumero[i][2] - diffy; + } + } +} +function recupereListeNumeroAngle(id, type, angle) { + // déplace le numéro lors d'une rotation + // récupère la liste des numéros qui sont liés à un obstacle. + for (var i = 1; i < nextNumber; i++) { + if (ordreObst[i][0] == id && ordreObst[i][1] == type) { + if (type == "tunnel") { + } else { + // calcul de l'angle par rapport au centre. + + var distance = listeNumero[i][4]; + var newAngle = getAngle(id) + listeNumero[i][3]; + var newX = + getCanvasX(id) + + getModXTrajSortie(id) / 2 + + Math.cos((newAngle / 180) * Math.PI) * distance; + var newY = + getCanvasY(id) + + getModYTrajSortie(id) / 2 + + Math.sin((newAngle / 180) * Math.PI) * distance; + listeNumero[i][1] = newX; + listeNumero[i][2] = newY; + } + } + } +} +function doMove() { + movingJump = false; + if ( + overObject == -1 && + selTunnel == -1 && + selTunnelComplet == -1 && + !suppression && + !color && + overModifTrajId == -1 + ) { + document.body.style.cursor = "default"; + } else if (color) { + document.body.style.cursor = "crosshair"; + } + if ( + selNumeroId == -1 && + selObst == -1 && + selTunnel == -1 && + selTunnelComplet == -1 && + modifTrajId == -1 && + selNumeroId2 == -1 && + selNumeroId3 == -1 + ) { + overObject = -1; + overTunnelId = -1; + overPointTunnel = -1; + overTunnelComplet = -1; + overModifTrajId = -1; + overModifTrajDepArr = -1; + + overNumero(canvas_x, canvas_y); + overNumero2(canvas_x, canvas_y); + overNumero3(canvas_x, canvas_y); + overObstacle(canvas_x, canvas_y); + overRotate(canvas_x, canvas_y); + overTunnel(canvas_x, canvas_y); + if (document.getElementById("ModifierTrajectoires").checked) { + overModifTraj(canvas_x, canvas_y); + } + genererParcours(); + } else { + movingJump = true; + if (modifTrajId != -1) { + var idObst = ordreObst[modifTrajId][0]; + } else if (selNumeroId != -1) { + listeNumero[selNumeroId][1] = canvas_x - decalX; + listeNumero[selNumeroId][2] = canvas_y - decalY; + if (listeNumero[selNumeroId][1] - LARGEUR_NUMERO / 2 < MARGE) { + listeNumero[selNumeroId][1] = MARGE + LARGEUR_NUMERO / 2; + } else if ( + listeNumero[selNumeroId][1] + LARGEUR_NUMERO / 2 > + canvasSizeX - MARGE + ) { + listeNumero[selNumeroId][1] = + canvasSizeX - MARGE - LARGEUR_NUMERO / 2; + } + if (listeNumero[selNumeroId][2] - HAUTEUR_NUMERO / 2 < MARGE) { + listeNumero[selNumeroId][2] = MARGE + HAUTEUR_NUMERO / 2; + } else if ( + listeNumero[selNumeroId][2] + HAUTEUR_NUMERO / 2 > + canvasSizeY - MARGE * 2 + ) { + listeNumero[selNumeroId][2] = + canvasSizeY - MARGE * 2 - HAUTEUR_NUMERO / 2; + } + rchObstacleProche( + listeNumero[selNumeroId][1], + listeNumero[selNumeroId][2], + selNumeroId + ); + // calcul de l'angle + } else if (selNumeroId2 != -1) { + listeNumero2[selNumeroId2][1] = canvas_x - decalX; + listeNumero2[selNumeroId2][2] = canvas_y - decalY; + + if (listeNumero2[selNumeroId2][1] - LARGEUR_NUMERO / 2 < MARGE) { + listeNumero2[selNumeroId2][1] = MARGE + LARGEUR_NUMERO / 2; + } else if ( + listeNumero2[selNumeroId2][1] + LARGEUR_NUMERO / 2 > + canvasSizeX - MARGE + ) { + listeNumero2[selNumeroId2][1] = + canvasSizeX - MARGE - LARGEUR_NUMERO / 2; + } + if (listeNumero2[selNumeroId2][2] - HAUTEUR_NUMERO / 2 < MARGE) { + listeNumero2[selNumeroId2][2] = MARGE + HAUTEUR_NUMERO / 2; + } else if ( + listeNumero2[selNumeroId2][2] + HAUTEUR_NUMERO / 2 > + canvasSizeY - MARGE * 2 + ) { + listeNumero2[selNumeroId2][2] = + canvasSizeY - MARGE * 2 - HAUTEUR_NUMERO / 2; + } + } else if (selNumeroId3 != -1) { + listeNumero3[selNumeroId3][1] = canvas_x - decalX; + listeNumero3[selNumeroId3][2] = canvas_y - decalY; + if (listeNumero3[selNumeroId3][1] - LARGEUR_NUMERO / 2 < MARGE) { + listeNumero3[selNumeroId3][1] = MARGE + LARGEUR_NUMERO / 2; + } else if ( + listeNumero3[selNumeroId3][1] + LARGEUR_NUMERO / 2 > + canvasSizeX - MARGE + ) { + listeNumero3[selNumeroId3][1] = + canvasSizeX - MARGE - LARGEUR_NUMERO / 2; + } + if (listeNumero3[selNumeroId3][2] - HAUTEUR_NUMERO / 2 < MARGE) { + listeNumero3[selNumeroId3][2] = MARGE + HAUTEUR_NUMERO / 2; + } else if ( + listeNumero3[selNumeroId3][2] + HAUTEUR_NUMERO / 2 > + canvasSizeY - MARGE * 2 + ) { + listeNumero3[selNumeroId3][2] = + canvasSizeY - MARGE * 2 - HAUTEUR_NUMERO / 2; + } + } else if (selTunnelComplet != -1) { + //déplace le tunnel complet + var decallageReelX = + tbTunnels[selTunnelComplet][1] - canvas_x + decalX; + var decallageReelY = + tbTunnels[selTunnelComplet][2] - canvas_y + decalY; + for (var art = 0; art < nbArticulationTunnel; art++) { + tbTunnels[selTunnelComplet][art * 2 + 1] = + tbTunnels[selTunnelComplet][art * 2 + 1] - decallageReelX; + tbTunnels[selTunnelComplet][art * 2 + 2] = + tbTunnels[selTunnelComplet][art * 2 + 2] - decallageReelY; + } + recupereListeNumero(selTunnelComplet, "tunnel"); + } else if (selTunnel != -1) { + // déplace une articulation + moveTunnel(selTunnel, selPointTunnel, canvas_x, canvas_y, -1); + recupereListeNumero(selTunnel, "tunnel"); + } else if (moveTunnelComplet != -1) { + for (var art = 0; art < nbArticulationTunnel; art++) { + if (art == 1 || art == 3 || art == 5 || art == 6) { + tbObst[selObst][art] = tbObst[selObst][art] + moveTunnelX; + } else { + tbObst[selObst][art] = tbObst[selObst][art] + moveTunnelY; + } + } + recupereListeNumero(moveTunnelComplet, "tunnel"); + } else if (!rotate) { + setCanvasX(selObst, canvas_x - decalX); + setCanvasY(selObst, canvas_y - decalY); + recupereListeNumero(selObst, "classique"); + } else { + // calcul de l'angle par rapport au centre. + var distX = + canvas_x - getCanvasX(selObst) - getXCliquable(selObst) / 2; + var distY = + canvas_y - getCanvasY(selObst) - getYCliquable(selObst) / 2; + var angle = (Math.atan2(distY, distX) / Math.PI) * 180; + if (rotateCote == "gauche") { + setAngle(selObst, angle); + } else { + if (angle > 0) { + setAngle(selObst, angle - 180); + } else { + setAngle(selObst, angle + 180); + } + } + recupereListeNumeroAngle(selObst, "classique", getAngle(selObst)); + } + genererParcours(); + } +} +function moveTunnel(idTunnel, idPointTunnel, X, Y, idPointTunnelPrecedent) { + var newX; + var newY; + var oldX = tbTunnels[idTunnel][idPointTunnel * 2 + 1]; + var oldY = tbTunnels[idTunnel][idPointTunnel * 2 + 2]; + var type = tbTunnels[idTunnel][nbArticulationTunnel * 2 + 3]; + var dist; + var angle; + + newX = X; + newY = Y; + if (idPointTunnel - 1 >= 0) { + var xPre = tbTunnels[idTunnel][(idPointTunnel - 1) * 2 + 1]; + var yPre = tbTunnels[idTunnel][(idPointTunnel - 1) * 2 + 2]; + var anglePrecedent = + 180 + (Math.atan2(yPre - newY, xPre - newX) / Math.PI) * 180; + } + + if (idPointTunnel + 1 < nbArticulationTunnel) { + var xSui = tbTunnels[idTunnel][(idPointTunnel + 1) * 2 + 1]; + var ySui = tbTunnels[idTunnel][(idPointTunnel + 1) * 2 + 2]; + var angleSuivant = + 180 + (Math.atan2(ySui - newY, xSui - newX) / Math.PI) * 180; + } + + if (idPointTunnel - 1 >= 0 && idPointTunnel + 1 < nbArticulationTunnel) { + angleSurplus = 0; + if ( + !( + Math.abs(anglePrecedent - angleSuivant) > ANGLE_MIN && + Math.abs(anglePrecedent - angleSuivant) < 360 - ANGLE_MIN + ) + ) { + angleSurplus = diffAngle(angleSuivant, anglePrecedent); + } + } + + // si aucun point n'a été bougé précédement on bouge l point actuel + if (idPointTunnelPrecedent == -1) { + tbTunnels[idTunnel][idPointTunnel * 2 + 1] = newX; + tbTunnels[idTunnel][idPointTunnel * 2 + 2] = newY; + } + + // Effectuer le déplacement des point dans les cotés + //if(idPointTunnelPrecedent!=-1){ + // point suivant + if (idPointTunnel - 1 >= 0 && idPointTunnel - 1 != idPointTunnelPrecedent) { + var distPre = Math.sqrt( + Math.pow(xPre - newX, 2) + Math.pow(yPre - newY, 2) + ); + var anglePreced = + (Math.atan2(yPre - newY, xPre - newX) / Math.PI) * 180; + anglePreced = anglePreced - angleSurplus; + + //anglePreced=anglePreced-angleSurplus; + + var newXPre = 0; + var newYPre = 0; + if (type == 3) { + var distMax = distMaxTunnel3; + var distMin = distMinTunnel3; + } else { + var distMax = distMaxTunnel; + var distMin = distMinTunnel; + } + if (distPre > distMax) { + newXPre = Math.cos((anglePreced / 180) * Math.PI) * distMax + X; + newYPre = Math.sin((anglePreced / 180) * Math.PI) * distMax + Y; + } else if (distPre < distMin) { + newXPre = Math.cos((anglePreced / 180) * Math.PI) * distMin + X; + newYPre = Math.sin((anglePreced / 180) * Math.PI) * distMin + Y; + } else { + // pas de transmission de mouvement si les écarts sont respectés. + newXPre = Math.cos((anglePreced / 180) * Math.PI) * distPre + X; + newYPre = Math.sin((anglePreced / 180) * Math.PI) * distPre + Y; + + //return; + } + tbTunnels[idTunnel][(idPointTunnel - 1) * 2 + 1] = newXPre; + tbTunnels[idTunnel][(idPointTunnel - 1) * 2 + 2] = newYPre; + //moveTunnel(idTunnel,idPointTunnel-1, newX, newY, idPointTunnel) + } + // transmission du mouvement vers suivants + if ( + idPointTunnel + 1 < nbArticulationTunnel && + idPointTunnel + 1 != idPointTunnelPrecedent + ) { + var distSui = Math.sqrt( + Math.pow(xSui - newX, 2) + Math.pow(ySui - newY, 2) + ); + var angleSuiv = (Math.atan2(ySui - newY, xSui - newX) / Math.PI) * 180; + angleSuiv = angleSuiv + angleSurplus; + var newXSui = 0; + var newYSui = 0; + if (type == 3) { + var distMax = distMaxTunnel3; + var distMin = distMinTunnel3; + } else { + var distMax = distMaxTunnel; + var distMin = distMinTunnel; + } + if (distSui > distMax) { + newXSui = Math.cos((angleSuiv / 180) * Math.PI) * distMax + X; + newYSui = Math.sin((angleSuiv / 180) * Math.PI) * distMax + Y; + } else if (distSui < distMin) { + newXSui = Math.cos((angleSuiv / 180) * Math.PI) * distMin + X; + newYSui = Math.sin((angleSuiv / 180) * Math.PI) * distMin + Y; + } else { + newXSui = Math.cos((angleSuiv / 180) * Math.PI) * distSui + X; + newYSui = Math.sin((angleSuiv / 180) * Math.PI) * distSui + Y; + } + tbTunnels[idTunnel][(idPointTunnel + 1) * 2 + 1] = newXSui; + tbTunnels[idTunnel][(idPointTunnel + 1) * 2 + 2] = newYSui; + } + + // on transmet le mouvement aux autres points + + // transmission du mouvement vers précédents + if (idPointTunnel - 1 >= 0 && idPointTunnel - 1 != idPointTunnelPrecedent) { + moveTunnel( + idTunnel, + idPointTunnel - 1, + newXPre, + newYPre, + idPointTunnel + ); + } + // transmission du mouvement vers suivants + if ( + idPointTunnel + 1 < nbArticulationTunnel && + idPointTunnel + 1 != idPointTunnelPrecedent + ) { + moveTunnel( + idTunnel, + idPointTunnel + 1, + newXSui, + newYSui, + idPointTunnel + ); + } +} diff --git a/static/ui/app/src/functions-obstacle.js b/static/ui/app/src/functions-obstacle.js new file mode 100644 index 0000000..a73e025 --- /dev/null +++ b/static/ui/app/src/functions-obstacle.js @@ -0,0 +1,166 @@ +// GETTERS + +function getId(idObstacle){ + return tbObst[idObstacle][0]; +} +function getCanvasX(idObstacle){ + return tbObst[idObstacle][1]; +} +function getCanvasY(idObstacle){ + return tbObst[idObstacle][2]; +} +function getSens(idObstacle){// aussi le nom et l'image + return tbObst[idObstacle][3];; +} +function getXCliquable(idObstacle){ + return tbObst[idObstacle][4]; +} +function getYCliquable(idObstacle){ + return tbObst[idObstacle][5]; +} +function getAngle(idObstacle){ + return tbObst[idObstacle][6]; +} +function getType(idObstacle){ + return tbObst[idObstacle][7]; +} +function getModXTrajEntree(idObstacle){ + return tbObst[idObstacle][8]; +} +function getModYTrajEntree(idObstacle){ + return tbObst[idObstacle][9]; +} +function getModXTrajSortie(idObstacle){ + return tbObst[idObstacle][10]; +} +function getModYTrajSortie(idObstacle){ + return tbObst[idObstacle][11]; +} +function getAngleTrajSortie(idObstacle){ + return tbObst[idObstacle][12]; +} +function getDistTrajCentre(idObstacle){ + return tbObst[idObstacle][13]; +} +function getLongTraj(idObstacle){ + return tbObst[idObstacle][14]; +} + +// SETTERS + +function setId(idObstacle,valeur){ + tbObst[idObstacle][0] = valeur; +} +function setCanvasX(idObstacle,valeur){ + tbObst[idObstacle][1] = valeur; +} +function setCanvasY(idObstacle,valeur){ + tbObst[idObstacle][2] = valeur; +} +function setImg(idObstacle,valeur){ + tbObst[idObstacle][3] = valeur; +} +function setXCliquable(idObstacle,valeur){ + tbObst[idObstacle][4] = valeur; +} +function setYCliquable(idObstacle,valeur){ + tbObst[idObstacle][5] = valeur; +} +function setAngle(idObstacle,valeur){ + tbObst[idObstacle][6] = valeur; +} +function setType(idObstacle,valeur){ + tbObst[idObstacle][7] = valeur; +} +function setModXTrajEntree(idObstacle,valeur){ + tbObst[idObstacle][8] = valeur; +} +function setModYTrajEntree(idObstacle,valeur){ + tbObst[idObstacle][9] = valeur; +} +function setModXTrajSortie(idObstacle,valeur){ + tbObst[idObstacle][10] = valeur; +} +function setModYTrajSortie(idObstacle,valeur){ + tbObst[idObstacle][11] = valeur; +} +function setAngleTrajSortie(idObstacle,valeur){ + tbObst[idObstacle][12] = valeur; +} +function setDistTrajCentre(idObstacle,valeur){ + tbObst[idObstacle][13] = valeur; +} +function setLongTraj(idObstacle,valeur){ + tbObst[idObstacle][14] = valeur; +} + +// TUNNELS + + + +function getIdTunnel(idTunnel){ + return tbTunnels[idTunnel][0]; +} + +function setIdTunnel(idTunnel,valeur){ + tbTunnels[idTunnel][0] = valeur; +} + +//NUMEROS + +function getIdNumero(idNum, numListe){ +switch(numListe){ + case 1: + return listeNumero[idNum][0]; + case 2: + return listeNumero2[idNum][0]; + case 3: + return listeNumero3[idNum][0]; + } +} +function getXNumero(idNum, numListe){ + return listeNumero[idNum][1]; +} +function getYNumero(idNum, numListe){ + return listeNumero[idNum][2]; +} + +function setIdNumero(idNum,valeur, numListe){ + switch(numListe){ + case 1: + listeNumero[idNum][0]=valeur; + break; + case 2: + listeNumero2[idNum][0]=valeur; + break; + case 3: + listeNumero3[idNum][0]=valeur; + break; + } +} +function setXNumero(idNum,valeur, numListe){ + switch(numListe){ + case 1: + listeNumero[idNum][1]=valeur; + break; + case 2: + listeNumero2[idNum][1]=valeur; + break; + case 3: + listeNumero3[idNum][1]=valeur; + break; + } +} +function setYNumero(idNum,valeur, numListe){ + switch(numListe){ + case 1: + listeNumero[idNum][2]=valeur; + break; + case 2: + listeNumero2[idNum][2]=valeur; + break; + case 3: + listeNumero3[idNum][2]=valeur; + break; + } +} diff --git a/static/ui/app/src/functions.js b/static/ui/app/src/functions.js new file mode 100644 index 0000000..d6ea166 --- /dev/null +++ b/static/ui/app/src/functions.js @@ -0,0 +1,519 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////FONCTIONS////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +var isOpenBarreOutil = true; +var isOpenBarreTitre = true; +function switchBarreOutil() { + if (isOpenBarreOutil) { + //fermeture + DECAL_X_INTERFACE = 15; + document.getElementById("barreOutilCache").style.left = "0px"; + document.getElementById("contentCanvas").style.left = "15px"; + document.getElementById("outils").style.visibility = "hidden"; + document.getElementById("trajMaitre").style.visibility = "hidden"; + } else { + //ouverture + DECAL_X_INTERFACE = 110; + document.getElementById("barreOutilCache").style.left = "95px"; + document.getElementById("contentCanvas").style.left = "110px"; + document.getElementById("outils").style.visibility = "visible"; + document.getElementById("trajMaitre").style.visibility = "visible"; + } + isOpenBarreOutil = !isOpenBarreOutil; +} + +function switchBarreTitre() { + if (isOpenBarreTitre) { + //fermeture + DECAL_Y_INTERFACE = 15; + document.getElementById("barreOutilCache").style.top = "15px"; + document.getElementById("outils").style.top = "15px"; + document.getElementById("trajMaitre").style.top = "15px"; + + document.getElementById("barreTitreCache").style.top = "0px"; + document.getElementById("contentCanvas").style.top = "15px"; + document.getElementById("titre").style.visibility = "hidden"; + document.getElementById("options").style.visibility = "hidden"; + document.getElementById("logo").style.visibility = "hidden"; + document.getElementById("medaille").style.visibility = "hidden"; + document.getElementById("barreInfo").style.visibility = "hidden"; + document.getElementById("titreLogo").style.visibility = "hidden"; + } else { + //ouverture + DECAL_Y_INTERFACE = 88; + document.getElementById("barreOutilCache").style.top = "103px"; + document.getElementById("outils").style.top = "103px"; + document.getElementById("trajMaitre").style.top = "103px"; + document.getElementById("barreTitreCache").style.top = "88px"; + document.getElementById("contentCanvas").style.top = "103px"; + document.getElementById("titre").style.visibility = "visible"; + document.getElementById("options").style.visibility = "visible"; + document.getElementById("logo").style.visibility = "visible"; + document.getElementById("medaille").style.visibility = "visible"; + document.getElementById("barreInfo").style.visibility = "visible"; + document.getElementById("titreLogo").style.visibility = "visible"; + } + isOpenBarreTitre = !isOpenBarreTitre; +} +function toDegrees(angle) { + return (angle * Math.PI) / 180; +} +function ajouterSupprimerTrajectoires() { + trajectoire = !trajectoire; + updateDuplicatedElements(); + genererParcours(); +} +function toggleConducteur() { + showconducteur = !showconducteur; + updateDuplicatedElements(); + genererParcours(); +} +function updateDuplicatedElements() { + document.getElementById("Traj").checked = trajectoire; + document.getElementById("Traj-2").checked = trajectoire; + document.getElementById("AfficherConducteur").checked = showconducteur; + document.getElementById("AfficherConducteur-2").checked = showconducteur; + document.getElementById("showNumero").checked = shownumbers; + document.getElementById("showNumero-2").checked = shownumbers; +} +function changeLargeur() { + var largeurP = document.getElementById("largeurParcours").value; + // Enlever tous les charactères sauf les chiffres + largeurP = largeurP.replace(/[^0-9]/g, ""); + if (largeurP != 0) { + canvas.width = ((largeurP * 100) / pixel / unite + MARGE * 2) * scale; + canvasSizeX = canvas.width / scale; + context.scale(scale, scale); + genererParcours(); + } +} +function changeLongueur() { + var longueurP = document.getElementById("longueurParcours").value; + // Enlever tous les charactères sauf les chiffres + longueurP = longueurP.replace(/[^0-9]/g, ""); + if (longueurP != 0) { + canvas.height = ((longueurP * 100) / pixel / unite + MARGE * 3) * scale; + canvasSizeY = canvas.height / scale; + context.scale(scale, scale); + genererParcours(); + } +} + +function changeEchelle() { + var echelle = document.getElementById("echelle").value; + if (echelle > 0) { + TAILLE_GRILLAGE = ((100 / pixel) * echelle) / unite; + genererParcours(); + } +} +function changeInfos() { + titre = document.getElementById("titreParcours").value; + auteur = document.getElementById("auteurParcours").value; + genererParcours(); +} +function log(valeur) { + document.getElementById("texte").innerHTML = valeur; +} +function exportToPNG2() { + //window.open(canvas.toDataURL('image/png')); + var d = canvas.toDataURL("image/png"); + var w = window.open("about:blank", "image from canvas"); + w.document.write("from canvas"); +} +function exportToPNG(qualite) { + document.getElementById("globalContent").style.display = "none"; + + var oldScale = scale; + if (qualite == 0) { + // on ne fait rien car on utilise les paramètres par defaut + } else if (qualite == 4) { + zoom(4); + } else if (qualite == 8) { + zoom(8); + } + + var canvasimg = document.getElementById("canvasimg"); + + var fond = document.getElementById("fondImage"); + canvasimg.src = canvas.toDataURL("img/png"); + + canvasimg.style.visibility = "visible"; + var conteneurImg = document.getElementById("conteneurImgExport"); + conteneurImg.className = "imageExport"; + + fond.className = "fondExport"; + zoom(oldScale); +} +function fermerExport() { + document.getElementById("globalContent").style.display = "block"; + //var fond = document.getElementById('fondImage'); + var conteneurImg = document.getElementById("conteneurImgExport"); + conteneurImg.className = "imageNotExport"; + //fond.className ="fondNotExport"; + var canvasimg = document.getElementById("canvasimg"); + canvasimg.style.visibility = "hidden"; + // zoom(1); + zoom(scale); + //canvasimg.style.display='none'; + var fond = document.getElementById("fondImage"); + fond.className = "fondNoExport"; +} + +function zoom(niveau) { + if (niveau == "p") { + scale = scale + 0.2; + } else if (niveau == "m") { + scale = scale - 0.2; + } else { + scale = niveau; + } + + changeLongueur(); + changeLargeur(); + genererParcours(); +} + +function changeUniteMesure() { + var oldUnit = unite; + + unite = document.getElementById("uniteMesure").value; + var convertion = unite / oldUnit; + // convertion des longueurs/largeurs + var longueurP = + document.getElementById("longueurParcours").value * convertion; + document.getElementById("longueurParcours").value = Math.round(longueurP); + var largeurP = + document.getElementById("largeurParcours").value * convertion; + document.getElementById("largeurParcours").value = Math.round(largeurP); + changeEchelle(); +} + +var xBz; +var yBz; +var vitesseTraj = 20; +var vitMax = 100; +function customBez(t, x0, y0, x1, y1, x2, y2, x3, y3) { + var cX = 3 * (x1 - x0), + bX = 3 * (x2 - x1) - cX, + aX = x3 - x0 - cX - bX; + + var cY = 3 * (y1 - y0), + bY = 3 * (y2 - y1) - cY, + aY = y3 - y0 - cY - bY; + + xBz = aX * Math.pow(t, 3) + bX * Math.pow(t, 2) + cX * t + x0; + yBz = aY * Math.pow(t, 3) + bY * Math.pow(t, 2) + cY * t + y0; +} + +function customBezier(x1, y1, x1b, y1b, x2b, y2b, x2, y2) { + var accuracy = 0.01; + + context.strokeStyle = "rgba(255, 0, 0, 1)"; // grilles + + var newX = x1; + var newY = y1; + var i = 0; + var avance = ((longueurMetre / 100) * accuracy * vitMax) / 13; + var oldX; + var oldY; + var oldX2; + var oldY2; + var oldAngle; + for (i = 0; i <= 1 + accuracy; i += accuracy) { + context.beginPath(); + context.moveTo(newX, newY); + + if (document.getElementById("VitesseTrajectoires").checked) { + context.lineWidth = 1.5; + context.strokeStyle = getColor(vitesseTraj); // grilles + } else { + context.lineWidth = 1; + context.strokeStyle = "black"; // grilles + } + customBez(i, x1, y1, x1b, y1b, x2b, y2b, x2, y2); + context.lineTo(xBz, yBz); + context.stroke(); + if (document.getElementById("VitesseTrajectoires").checked) { + if (i > 0) { + //calcul de l'angle actuel + newAngle = (Math.atan2(newY - yBz, newX - xBz) / Math.PI) * 180; + var diffAngle = oldAngle - newAngle; + if (diffAngle >= 0) { + if (diffAngle > 6) { + vitesseTraj -= avance * 5; // cas d'un virage séré + } else if (diffAngle > 5) { + vitesseTraj -= avance * 3; // cas d'un virage séré + } else if (diffAngle > 4) { + vitesseTraj -= avance * 2; // cas d'un virage séré + } else if (diffAngle > 3) { + vitesseTraj -= avance * 1; // cas d'un virage séré + } else if (diffAngle > 2) { + //vitesseTraj+=avance*0.2;// cas d'un virage séré + } else if (diffAngle > 1.5) { + vitesseTraj += avance * 0.4; // cas d'un virage séré + } else if (diffAngle > 1) { + vitesseTraj += avance * 0.6; // cas d'un virage séré + } else if (diffAngle > 0.5) { + vitesseTraj += avance * 0.8; // cas d'un virage peu séré + } else { + vitesseTraj += avance; // cas d'une ligne a peu pres droite + } + } + if (diffAngle < 0) { + if (diffAngle < -6) { + vitesseTraj -= avance * 5; // cas d'un virage séré + } else if (diffAngle < -5) { + vitesseTraj -= avance * 3; // cas d'un virage séré + } else if (diffAngle < -4) { + vitesseTraj -= avance * 2; // cas d'un virage séré + } else if (diffAngle < -3) { + vitesseTraj -= avance * 1; // cas d'un virage séré + } else if (diffAngle < -2) { + //vitesseTraj+=avance*0.2;// cas d'un virage séré + } else if (diffAngle < -1.5) { + vitesseTraj += avance * 0.4; // cas d'un virage peu séré + } else if (diffAngle < -1) { + vitesseTraj += avance * 0.6; // cas d'un virage peu séré + } else if (diffAngle < -0.5) { + vitesseTraj += avance * 0.8; // cas d'un virage peu séré + } else { + vitesseTraj += avance; // cas d'une ligne a peu pres droite + } + } + oldAngle = newAngle; + } else { + vitesseTraj += avance; // cas d'une ligne droite + } + if (vitesseTraj > vitMax) { + vitesseTraj = vitMax; + } + if (vitesseTraj < 0) { + vitesseTraj = 0; + } + } + + newX = xBz; + newY = yBz; + } + + context.lineWidth = 1; +} + +function getColor(vitesseTraj) { + var colorV = 0; + var colorR = 255; + if (vitesseTraj <= vitMax / 2) { + colorR = 255; + } else { + colorR = 255 - ((vitesseTraj - vitMax / 2) / vitMax) * 255; + } + if (vitesseTraj >= vitMax / 2) { + colorV = 255; + } else { + colorV = (vitesseTraj / vitMax) * 2 * 255; + } + + if (colorV > 255) { + colorV = 255; + } else if (colorV < 0) { + colorV = 0; + } + if (colorR > 255) { + colorR = 255; + } else if (colorR < 0) { + colorR = 0; + } + return "rgba(" + Math.round(colorR) + ", " + Math.round(colorV) + ", 0, 1)"; +} +function toggleShowNumbers() { + // Function don't get the value from check button, only uses it to change variable value calling this function + shownumbers = !shownumbers; + updateDuplicatedElements(); + genererParcours(); +} +function exportData(){ + var data = saveFileVersion+"\n"; + data += JSON.stringify(document.getElementById("titreParcours").value); + data += "\n"; + data += JSON.stringify(document.getElementById("auteurParcours").value); + data += "\n"; + data += JSON.stringify(nextNumber); + data += "\n"; + data += JSON.stringify(listeNumero); + data += "\n"; + data += JSON.stringify(nextNumber2); + data += "\n"; + data += JSON.stringify(listeNumero2); + data += "\n"; + data += JSON.stringify(nextNumber3); + data += "\n"; + data += JSON.stringify(listeNumero3); + data += "\n"; + data += JSON.stringify(idTunnel); + data += "\n"; + data += JSON.stringify(tbTunnels); + data += "\n"; + data += JSON.stringify(id); + data += "\n"; + data += JSON.stringify(tbObst); + data += "\n"; + data += JSON.stringify(idOrdre); + data += "\n"; + data += JSON.stringify(ordreObst); + data += "\n"; + data += JSON.stringify(document.getElementById("longueurParcours").value); + data += "\n"; + data += JSON.stringify(document.getElementById("largeurParcours").value); + data += "\n"; + data += JSON.stringify(document.getElementById("echelle").value); + var t = new Blob([data], {type: "text/plain"}); + var c = document.createElement("a"); + var title = document.getElementById("titreParcours").value; + var author = document.getElementById("auteurParcours").value; + var fname = "course" + if ( title!="" ) { + fname = title; + } else { + var now = new Date(); + fname += "_"+now.getFullYear()+(now.getMonth()+1)+now.getDate()+now.getHours()+now.getMinutes()+now.getSeconds(); + } + if ( author!="" ) { fname += " ("+author+")"; } + c.download = fname+".amc"; + c.href = window.URL.createObjectURL(t); + c.click(); +} + +function importFile(){ + var input = document.createElement('input'); + input.type = 'file'; + input.accept = '.amc,*'; + + input.onchange = e => { + // getting a hold of the file reference + var file = e.target.files[0]; + var file = e.target.files[0]; + + // setting up the reader + var reader = new FileReader(); + reader.readAsText(file,'UTF-8'); + + // here we tell the reader what to do when it's done reading... + reader.onload = readerEvent => { + var content = readerEvent.target.result; // this is the content! + const myArray = content.split("\n"); + var fileVersion = JSON.parse(myArray[0]); + + if (fileVersion=="1") { + title = JSON.parse(myArray[1]); + author = JSON.parse(myArray[2]); + nextNumber = JSON.parse(myArray[3]); + listeNumero = JSON.parse(myArray[4]); + nextNumber2 = JSON.parse(myArray[5]); + listeNumero2 = JSON.parse(myArray[6]); + nextNumber3 = JSON.parse(myArray[7]); + listeNumero3 = JSON.parse(myArray[8]); + idTunnel = JSON.parse(myArray[9]); + tbTunnels = JSON.parse(myArray[10]); + id = JSON.parse(myArray[11]); + tbObst = JSON.parse(myArray[12]); + idOrdre = JSON.parse(myArray[13]); + ordreObst = JSON.parse(myArray[14]); + width = JSON.parse(myArray[15]); + height = JSON.parse(myArray[16]); + grid = JSON.parse(myArray[17]); + } + + // Update content + document.getElementById("titreParcours").value = title; + document.getElementById("auteurParcours").value = author; + document.getElementById("longueurParcours").value = width; + document.getElementById("largeurParcours").value = height; + document.getElementById("echelle").value = grid; + changeInfos(); + changeLargeur(); + changeLongueur(); + changeEchelle(); + genererParcours(); + } + } + + input.click(); +} + +function shortcutAction( event ) { + if (lastDownTarget!=canvas) return; + + switch (event.key) { + case "m": + document.getElementById("ModifierTrajectoires").checked = !document.getElementById("ModifierTrajectoires").checked; + break; + } + + // formas de tunel + if (overTunnelComplet>=0 || overTunnelId>=0) { + var tunnelid = overTunnelComplet; + if ( tunnelid<0 ) { tunnelid = overTunnelId; } + switch (event.key) { + case "1": + // suponemos y comprobamos que el indice del vector coincide con el id del tunel + if ( tbTunnels[tunnelid][0] == tunnelid ) { + tbTunnels[tunnelid][4] = tbTunnels[tunnelid][2]; + tbTunnels[tunnelid][6] = tbTunnels[tunnelid][2]; + tbTunnels[tunnelid][8] = tbTunnels[tunnelid][2]; + tbTunnels[tunnelid][10] = tbTunnels[tunnelid][2]; + tbTunnels[tunnelid][12] = tbTunnels[tunnelid][2]; + tbTunnels[tunnelid][14] = tbTunnels[tunnelid][2]; + tbTunnels[tunnelid][16] = tbTunnels[tunnelid][2]; + tbTunnels[tunnelid][18] = tbTunnels[tunnelid][2]; + tbTunnels[tunnelid][20] = tbTunnels[tunnelid][2]; + } + break; + case "2": + // suponemos y comprobamos que el indice del vector coincide con el id del tunel + if ( tbTunnels[tunnelid][0] == tunnelid ) { + tbTunnels[tunnelid][3] = tbTunnels[tunnelid][1]; + tbTunnels[tunnelid][5] = tbTunnels[tunnelid][1]; + tbTunnels[tunnelid][7] = tbTunnels[tunnelid][1]; + tbTunnels[tunnelid][9] = tbTunnels[tunnelid][1]; + tbTunnels[tunnelid][11] = tbTunnels[tunnelid][1]; + tbTunnels[tunnelid][13] = tbTunnels[tunnelid][1]; + tbTunnels[tunnelid][15] = tbTunnels[tunnelid][1]; + tbTunnels[tunnelid][17] = tbTunnels[tunnelid][1]; + tbTunnels[tunnelid][19] = tbTunnels[tunnelid][1]; + } + break; + } + genererParcours(); + } + + // temporalmente, si se está encima de un obstaculo no se permite el atajo porque si no se mueven el nuevo elemento y + // sobre el que se encuentra el ratón al definir la posición del nuevo elemento + if (isOverObstacle()) return; + + switch (event.key) { + case "j": + ajouterHaie(); + break; + case "n": + ajouterNumero(1); + break; + case "t": + ajouterTunnel(6); + break; + case "T": + ajouterTunnel(3); + break; + case "+": + zoom('p') + break; + case "-": + zoom('m') + break; + } + // console.log(event.key); +} \ No newline at end of file diff --git a/static/ui/app/src/init.js b/static/ui/app/src/init.js new file mode 100644 index 0000000..b40cc8a --- /dev/null +++ b/static/ui/app/src/init.js @@ -0,0 +1,169 @@ +var canvas; +var pixel = 6; //taille en centimetre d'un pixel +var TPS = 0; +var distObstTrajectoire = 40; +var tbObst = new Array(); +var tbTunnels = new Array(); +var id = 0; +var idTunnel = 0; +var selObst = -1; +var rotate = false; +var rotateCote = ""; +var decalX = 0; +var decalY = 0; +var afficheCercle = false; +var DIAM_ROND_SELECTION = 7; +var DIAM_BARRE_SLALOM = 1.5; +var DIAM_ROND_SELECTION_TUNNEL = 3; +var overNumeroId = -1; +var overNumeroId2 = -1; +var overNumeroId3 = -1; +var overObject = -1; +var canvas_x; +var canvas_y; + +var longueurMetre; + +//COULEURS +var COLOR_1 = "#22AAFF"; // principale +var COLOR_1b = "#0088DD"; // principale sombre + +var COLOR_2 = "#CC3300"; // zones +var COLOR_2b = "#AA1100"; // zones sombre + +var COLOR_3 = "#EEEEEE"; // couleur barre 2 + +var color = false; + +var COLOR_CONTOURS = "#000000"; // contours +var COLOR_JOINTURES = "#444444"; // jointures entre éléments +var COLOR_TERRAIN = "#d3e4f0"; // terrain CCFFCC + +var COLOR_GRILLE = "#bbbbbb"; // grilles +var COLOR_METAL = "#999999"; // grilles +var COLOR_BLANC = "#ffffff"; // grilles + +var COLOR_TEXT = "#000000"; // grilles +var COLOR_TEXT_UNDER = "rgba(211, 228, 240, 0.7)"; // grilles +var COLOR_SPECIAL = "rgba(255, 255, 255, 1)"; // grilles +var COLOR_TRACE_MAUVAIS = "#DD0000"; +var COLOR_TRACE_OK = "#555555"; +var COLOR_JAUNE = "#ffff00"; +var COLOR_TRACE_TRANSPARENT = "rgba(44, 44, 44, 0.3)"; // grilles +var COLOR_PEAU = "#ffff88"; +var COLOR_CHEVEUX = "black"; +var COLOR_VETEMENTS = "#CC3300"; + +//////////////////////////////////////////////// +var LARGEUR_MUR_TOUR = 40; +var unite = 1; +var TAILLE_GRILLAGE = ((100 / pixel) * 2) / unite; +var MARGE = 25; +var ANGLE_MIN = 145; +var DIAM_BARRE = 1.5; +var nbArticulationTunnel = 9; +var distMaxTunnel = 600 / (nbArticulationTunnel - 1) / pixel; +var distMinTunnel = 400 / (nbArticulationTunnel - 1) / pixel; +var distMinTunnel3 = 300 / (nbArticulationTunnel - 1) / pixel; +var distMaxTunnel3 = 400 / (nbArticulationTunnel - 1) / pixel; +var largeurTunnel = 63 / pixel; +var selTunnel = -1; +var selPointTunnel = -1; +var overTunnelId = -1; +var overPointTunnel = -1; +var overTunnelComplet = -1; +var selTunnelComplet = -1; +var angleSurplus = 0; +var trajectoire = true; +// dimension des obstacles +var moveTunnelComplet = -1; +var suppression = false; +var DIM_TABLE = 120 / pixel; +var ordreObst = new Array(); +var idOrdre = 0; +var longueurTotal = 0; + +var auteur = ""; +var titre = ""; +var shownumbers = true; +var listeNumero = new Array(); +var listeNumero2 = new Array(); +var listeNumero3 = new Array(); +var nextNumber = 1; +var nextNumber2 = 1; +var nextNumber3 = 1; +var selNumeroId = -1; +var selNumeroId2 = -1; +var selNumeroId3 = -1; +var idLg = 0; +var LARGEUR_NUMERO = 13; +var HAUTEUR_NUMERO = 9; +var oldx = 0; +var oldy = 0; +var diffx = 0; +var diffy = 0; +var DECAL_X_INTERFACE = 120; +var DECAL_Y_INTERFACE = 90; + +var modifTrajId = -1; +var modifTrajDepArr = -1; + +var overModifTrajId = -1; +var overModifTrajDepArr = -1; + +var langues = new Array(); +var scale = 1.2; +//var scale=3;//PROVISOIRE + +var canvasSizeX = 0; +var canvasSizeY = 0; + +var isTactil = false; +var RECT_MARGE_SELECTION = 0; +var movingJump = false; +var saveFileVersion = 1; +var DIAM_ROND_SELECTION_TUNNEL_MOVE; +var LARGEUR_NUMERO_SELECT; +var HAUTEUR_NUMERO_SELECT; +var ROTATE_MARGE_SELECTION; +var showconducteur = true; +var lastDownTarget = ""; +function init() { + document.getElementById("longueurParcours").value = "22"; + document.getElementById("largeurParcours").value = "40"; + document.getElementById("echelle").value = "2"; + canvas = document.getElementById("canvas"); + unite = document.getElementById("uniteMesure").value; + context = canvas.getContext("2d"); + context.scale(scale, scale); + changeUniteMesure(); + changeLargeur(); + changeLongueur(); + setMargeSelect(); + /* + COLOR_TERRAIN=context.createLinearGradient(0,0,canvasSizeX,0); + COLOR_TERRAIN.addColorStop(0,"#d3e4f0"); + COLOR_TERRAIN.addColorStop(1,"#c3d4e0"); + COLOR_BLANC=context.createLinearGradient(0,0,canvasSizeX,0); + COLOR_BLANC.addColorStop(0,"#eeeeff"); + COLOR_BLANC.addColorStop(1,"white");*/ + //canvasSizeX= canvas.width; + //canvasSizeY= canvas.height; + // Attach the mousemove event handler + context.font = "8pt Calibri"; + genererParcours(); + window.addEventListener("mousemove", doMouseMove, false); + canvas.addEventListener("mousedown", doMouseDown, false); + + canvas.addEventListener("touchstart", doTouchStart, false); + + // listener para que se procesen los atajos de teclado solo si se está en el canvas + document.addEventListener('mousedown', function(event) { lastDownTarget = event.target; }, false); + // Added keyboard shortcuts + document.addEventListener("keyup", shortcutAction, false); + + initLangue(); + + updateDuplicatedElements(); + genererParcours(); +} diff --git a/static/ui/app/src/interface.js b/static/ui/app/src/interface.js new file mode 100644 index 0000000..fc55108 --- /dev/null +++ b/static/ui/app/src/interface.js @@ -0,0 +1,67 @@ +function masquerTout() { + document.getElementById("blocOSav").className = "blocOptions"; + document.getElementById("blocOObst").className = "blocOptions"; + document.getElementById("blocOTrj").className = "blocOptions"; + document.getElementById("blocOParam").className = "blocOptions"; + document.getElementById("blocOLangue").className = "blocOptions"; + document.getElementById("blocOCon").className = "blocOptions"; + document.getElementById("imgParam").src = + "/static/public/tabs/unfocused/param.png"; + document.getElementById("imgTrj").src = + "/static/public/tabs/unfocused/trj.png"; + document.getElementById("imgSav").src = + "/static/public/tabs/unfocused/sav.png"; + document.getElementById("imgObs").src = + "/static/public/tabs/unfocused/obstacles.png"; + document.getElementById("imgCon").src = + "/static/public/tabs/unfocused/conducteur.png"; + + // barre d'outils + document.getElementById("outils").style.display = "none"; + document.getElementById("barreOConduct").style.display = "none"; + document.getElementById("barreOParam").style.display = "none"; + document.getElementById("barreOTraj").style.display = "none"; + document.getElementById("barreOSav").style.display = "none"; + document.getElementById("barreOLangue").style.display = "none"; + + document.getElementById("blocInfoDim2").style.display = "none"; + masquerLangue(); +} +function setInfoSauvegarde() { + masquerTout(); + document.getElementById("barreOSav").style.display = "block"; + //document.getElementById("blocOSav").className="blocOptionsSel"; + document.getElementById("imgSav").src = + "/static/public/tabs/focused/sav.png"; +} + +function setInfoTrajectoires() { + masquerTout(); + //document.getElementById("blocOTrj").className="blocOptionsSel"; + document.getElementById("imgTrj").src = + "/static/public/tabs/focused/trj.png"; + document.getElementById("barreOTraj").style.display = "block"; +} + +function setInfoConducteur() { + masquerTout(); + document.getElementById("barreOConduct").style.display = "block"; + document.getElementById("imgCon").src = + "/static/public/tabs/focused/conducteur.png"; + //document.getElementById("blocOCon").className="blocOptionsSel"; +} +function setInfoObstacles() { + masquerTout(); + //document.getElementById("outils").className="blocOptionsSel"; + document.getElementById("outils").style.display = "block"; + document.getElementById("imgObs").src = + "/static/public/tabs/focused/obstacles.png"; +} +function setInfoParam() { + masquerTout(); + //document.getElementById("blocOParam").className="blocOptionsSel"; + document.getElementById("imgParam").src = + "/static/public/tabs/focused/param.png"; + document.getElementById("barreOParam").style.display = "block"; + document.getElementById("blocInfoDim2").style.display = "block"; +} diff --git a/static/ui/app/src/language.js b/static/ui/app/src/language.js new file mode 100644 index 0000000..c789da6 --- /dev/null +++ b/static/ui/app/src/language.js @@ -0,0 +1,1003 @@ +var Francais = new Array(); +var English = new Array(); +var Portugues = new Array(); +var Espanol = new Array(); +var Italiano = new Array(); +var Polski = new Array(); +var Catalan = new Array(); +var Svenska = new Array(); +var Norsk = new Array(); +var Japanese = new Array(); +var Dansk = new Array(); +var German = new Array(); +var suomi = new Array(); +var Hungarian = new Array(); +var Russian = new Array(); +/****FR****/ +Francais[1] = "Paramètres"; +Francais[2] = "Dimensions"; +Francais[3] = "Trajectoires"; +Francais[4] = "Couleurs"; +Francais[5] = "Couleurs perso"; +Francais[6] = "Télechargement"; +Francais[7] = "Langue"; +Francais[8] = "Distance théorique"; +Francais[9] = "Auteur"; +Francais[10] = "Sauts"; +Francais[11] = "Zones"; +Francais[12] = "Autres"; +Francais[13] = "Outils"; +Francais[14] = "Titre : "; +Francais[15] = "Longueur : "; +Francais[16] = "Largeur : "; +Francais[17] = "Echelle du cadrillage : "; +Francais[18] = "Mètre"; +Francais[19] = "Afficher les trajectoires"; +Francais[20] = "Modifier manuellement"; +Francais[21] = "Couleur du fond"; +Francais[22] = "Couleur 1"; +Francais[23] = "Couleur 2"; +Francais[24] = "Couleur 3"; +Francais[25] = "Générer l'image pour l'export"; +Francais[26] = "Auteur : "; +Francais[27] = + "VERSION BETA (En cours de développement), outil créé pour être utilisé avec une souris"; +Francais[28] = ""; +Francais[29] = + "Pour télécharger l'image, effectuer un clique droit sur l'image puis \"Enregistrer sous\""; +Francais[30] = "images/partager.png"; +Francais[31] = "Web"; +Francais[32] = "Imprimante"; +Francais[33] = "Imprimante Haute Qualité"; +Francais[34] = "Mètre(s)"; +Francais[35] = "Yard"; +Francais[36] = "Pied"; +Francais[37] = "Unité de mesure : "; + +Francais[38] = "Obstacles"; +Francais[39] = "Personnages"; +Francais[40] = "Sauvegarde"; +Francais[41] = "Numéros"; +Francais[42] = "Vitesse du chien"; +Francais[43] = "Afficher personnages"; + +Francais[44] = "Télécharger la course"; +Francais[45] = "Importer le course"; +Francais[46] = "Télécharger data"; +Francais[47] = "Afficher numeros"; + +/****DE****/ +German[1] = "Parameter"; +German[2] = "Dimensionen"; +German[3] = "Laufweg des Hundes"; +German[4] = "Farben"; +German[5] = "Individuelle Farben"; +German[6] = "Download"; +German[7] = "Sprache"; +German[8] = "Länge"; +German[9] = "Autor"; +German[10] = "Sprünge"; +German[11] = "Kontaktzonengeräte"; +German[12] = "Andere"; +German[13] = "Werkzeug"; +German[14] = "Titel : "; +German[15] = "Länge : "; +German[16] = "Breite : "; +German[17] = "Gittergröße : "; +German[18] = "Meter"; +German[19] = " Zeige Laufweg "; +German[20] = " manueller Laufweg "; +German[21] = "Hintergrundfarbe"; +German[22] = "Farbe 1"; +German[23] = "Farbe 2"; +German[24] = "Farbe 3"; +German[25] = "Erzeuge Abbildung"; +German[26] = "Autor : "; +German[27] = + "BETA VERSION (in der Entwicklung), erstellt zur Nutzung mit der Maus"; +German[28] = ""; +German[29] = + 'Um die Abbildung zu downloaden, machen Sie einen Rechtsklick auf die Abbildung und wählen "Speichern unter" oder eine ähnliche Option'; +German[30] = "images/share.png"; +German[31] = "Web"; +German[32] = "Druckversion"; +German[33] = "Druckversion Hohe Qualität"; +German[34] = "Meter"; +German[35] = "Schritt"; +German[36] = "Fuß"; +German[37] = "Längeneinheit : "; + +/****EN****/ +English[1] = "Parameters"; +English[2] = "Dimensions"; +English[3] = "Dogs path"; +English[4] = "Colors"; +English[5] = "Custom colors"; +English[6] = "Download"; +English[7] = "Language"; +English[8] = "Length"; +English[9] = "Author"; +English[10] = "Jumps"; +English[11] = "Contact"; +English[12] = "Miscellaneous"; +English[13] = "Tools"; +English[14] = "Title : "; +English[15] = "Length : "; +English[16] = "Width : "; +English[17] = "Scale of the grid : "; +English[18] = "Meter"; +English[19] = " Show path "; +English[20] = " Manual path "; +English[21] = "Background color"; +English[22] = "Color 1"; +English[23] = "Color 2"; +English[24] = "Color 3"; +English[25] = "Generate the image"; +English[26] = "Author : "; +English[27] = + "BETA VERSION (Under development), created to be used with a mouse"; + +English[28] = ""; +English[29] = + 'To download the picture, right click on it and select "Save Image as" or a similar option'; +English[30] = "images/share.png"; + +English[31] = "Web"; +English[32] = "Printable"; +English[33] = "Printable High Quality"; +English[34] = "Meter(s)"; +English[35] = "Yard"; +English[36] = "Feet"; +English[37] = "Unit of length : "; + +English[38] = "Obstacles"; +English[39] = "Characters"; +English[40] = "Save"; +English[41] = "Numbers"; +English[42] = "dog's speed"; +English[43] = "Show characters"; + +/****HU****/ +Hungarian[1] = "Adatok"; +Hungarian[2] = "Méretek"; +Hungarian[3] = "Kutya útvonala"; +Hungarian[4] = "Színek"; +Hungarian[5] = "Egyedi színek"; +Hungarian[6] = "Letöltés"; +Hungarian[7] = "Nyelv"; +Hungarian[8] = "Hosszúság"; +Hungarian[9] = "Készítő"; +Hungarian[10] = "Ugró akadályok"; +Hungarian[11] = "Zónás akadályok"; +Hungarian[12] = "Egyéb akadályok"; +Hungarian[13] = "Eszközök"; +Hungarian[14] = "Cím : "; +Hungarian[15] = "Hosszúság : "; +Hungarian[16] = "Szélesség : "; +Hungarian[17] = "Rácsbeosztás : "; +Hungarian[18] = "Méret"; +Hungarian[19] = " Útvonal mutatása "; +Hungarian[20] = " Egyéni útvonal "; +Hungarian[21] = "Háttér színe"; +Hungarian[22] = "Első szín"; +Hungarian[23] = "Második szín"; +Hungarian[24] = "Harmadik szín"; +Hungarian[25] = "Képformátum"; +Hungarian[26] = "Készítő : "; +Hungarian[27] = + "BETA VERZIÓ (Fejlesztés alatt) A program használata egérrel lehetséges."; + +Hungarian[28] = ""; +Hungarian[29] = + 'A pálya letöltéséhez kattints jobb gombbal, és válaszd a "Kép mentése más néven" menüpontot.'; +Hungarian[30] = "images/share.png"; + +Hungarian[31] = "Webre"; +Hungarian[32] = "Nyomtatóra"; +Hungarian[33] = "Nyomtatóra (Nagy felbontás)"; +Hungarian[34] = "Méter"; +Hungarian[35] = "Yard"; +Hungarian[36] = "Láb"; +Hungarian[37] = "Hosszmérték : "; +/****NO****/ +Norsk[1] = "Parameterer"; +Norsk[2] = "Dimensjoner"; +Norsk[3] = "Hundens vei"; +Norsk[4] = "Farger"; +Norsk[5] = "Tilpassede farger"; +Norsk[6] = "Laste ned"; +Norsk[7] = "Språk"; +Norsk[8] = "Lengde"; +Norsk[9] = "Forfatter"; +Norsk[10] = "Hopphindre"; +Norsk[11] = "Kontakthindre"; +Norsk[12] = "Diverse"; +Norsk[13] = "Verktøy"; +Norsk[14] = "Tittel : "; +Norsk[15] = "Lengde : "; +Norsk[16] = "Bredde : "; +Norsk[17] = "Målestokk på rutenett : "; +Norsk[18] = " Meter(e)"; +Norsk[19] = " Vis banens strekning "; +Norsk[20] = " Manuell strekning "; +Norsk[21] = "Bakgrunnsfarge"; +Norsk[22] = "Farge 1"; +Norsk[23] = "Farge 2"; +Norsk[24] = "Farge 3"; +Norsk[25] = "Generere bildet"; +Norsk[26] = "Forfatter : "; +Norsk[27] = "BETA VERSION (Under utvikling), laget for bruk av datamuse"; + +Norsk[28] = ""; +Norsk[29] = + ' For å laste ned bildet, høyreklikk på den og velg "Lagre bilde som" eller et lignende alternativ'; +Norsk[30] = "images/share.png"; + +Norsk[31] = "Nett"; +Norsk[32] = "Utskriftsvennlig"; +Norsk[33] = "Utskriftsvennlig med høy kvalitet "; +Norsk[34] = "Meter"; +Norsk[35] = "Yard"; +Norsk[36] = "Fot"; +Norsk[37] = " Lengdeenhet: "; + +/****JP****/ +Japanese[1] = "パラメータ"; +Japanese[2] = "リンクサイズ"; +Japanese[3] = "犬の経路"; +Japanese[4] = "配色"; +Japanese[5] = "カスタム色"; +Japanese[6] = "ダウンロード"; +Japanese[7] = "言語"; +Japanese[8] = "コース全長"; +Japanese[9] = "作者"; +Japanese[10] = "ジャンプ障害"; +Japanese[11] = "コンタクト障害"; +Japanese[12] = "その他"; +Japanese[13] = "ツール"; +Japanese[14] = "タイトル : "; +Japanese[15] = "長さ : "; +Japanese[16] = "幅 : "; +Japanese[17] = "グリッド間隔 : "; +Japanese[18] = "Meter(s)"; +Japanese[19] = " 経路を自動表示する "; +Japanese[20] = " 経路を手動で設定する "; +Japanese[21] = "背景色"; +Japanese[22] = "カラー 1"; +Japanese[23] = "カラー 2"; +Japanese[24] = "カラー 3"; +Japanese[25] = "イメージの生成"; +Japanese[26] = "作者 : "; +Japanese[27] = "ベータ版 (開発中), 作成にはマウスが必要です"; + +Japanese[28] = ""; +Japanese[29] = + "コース図をダウンロードするには、マウスを右クリック「名前を付けて画像を保存(V)」、又は同じようなオプションをを選択してください。"; +Japanese[30] = ""; + +Japanese[31] = "Web"; +Japanese[32] = "印刷"; +Japanese[33] = "高品質印刷"; +Japanese[34] = "m"; +Japanese[35] = "yd"; +Japanese[36] = "ft"; +Japanese[37] = "長さの単位 : "; + +/****SE****/ +Svenska[1] = "Parametrar"; +Svenska[2] = "Dimensioner"; +Svenska[3] = "Hundens löpväg"; +Svenska[4] = "Färg"; +Svenska[5] = "Standard färg"; +Svenska[6] = "Ladda ner"; +Svenska[7] = "Språk"; +Svenska[8] = "Längd"; +Svenska[9] = "Författare"; +Svenska[10] = "Hopphinder"; +Svenska[11] = "Balanshinder"; +Svenska[12] = "Övrigt"; +Svenska[13] = "Verktyg"; +Svenska[14] = "Titel : "; +Svenska[15] = "Bredd: "; +Svenska[16] = "Höjd: "; +Svenska[17] = "Rutmönster skala : "; +Svenska[18] = "Meter"; +Svenska[19] = " Visa Hundens löpväg "; +Svenska[20] = " Manuell Hundens löpväg "; +Svenska[21] = "Bakgrundsfärg"; +Svenska[22] = "Färg 1"; +Svenska[23] = "Färg 2"; +Svenska[24] = "Färg 3"; +Svenska[25] = "Skapa bild"; +Svenska[26] = "Författare : "; +Svenska[27] = + "BETA VERSION (Under utveckling), skapad för att användas med muspekare"; +Svenska[28] = ""; +Svenska[29] = + 'För att ladda ner bilden, högerklicka och välj "Spara bild som" eller liknande alternativ'; +Svenska[30] = ""; +Svenska[31] = "Web"; +Svenska[32] = "För utskrift"; +Svenska[33] = "För utskrift med hög kvalitet"; +Svenska[34] = "Meter"; +Svenska[35] = "Yard"; +Svenska[36] = "Feet"; +Svenska[37] = "Längdenhet : "; +/* +Vit&Svart +Blå&Röd +Svart&Röd +Röd&Vit +eco Blå&Röd +eco Svart&Vit +*/ + +/****PT****/ +Portugues[1] = "Parameteros"; +Portugues[2] = "Dimensões"; +Portugues[3] = "Trajectórias"; +Portugues[4] = "Cores"; +Portugues[5] = "Cores Personalizadas"; +Portugues[6] = "Download"; +Portugues[7] = "Idioma"; +Portugues[8] = "Comprimento"; +Portugues[9] = "Autor"; +Portugues[10] = "Saltos"; +Portugues[11] = "Contactos"; +Portugues[12] = "Diversos"; +Portugues[13] = "Ferramentas"; +Portugues[14] = "Titulo : "; +Portugues[15] = "Comprimento : "; +Portugues[16] = "Largura : "; +Portugues[17] = "Escala da grelha : "; +Portugues[18] = "Metro(s)"; +Portugues[19] = " Mostrar Trajectorias "; +Portugues[20] = " Trajectorias Manuais "; +Portugues[21] = "Cor de Fundo"; +Portugues[22] = "Cor 1"; +Portugues[23] = "Cor 2"; +Portugues[24] = "Cor 3"; +Portugues[25] = "Gerar Imagem"; +Portugues[26] = "Autor : "; +Portugues[27] = + "VERSÃO (Em desenvolvimento), Criado para ser utilizado com recurso ao rato(mouse)"; +Portugues[28] = ""; +Portugues[29] = + 'Para fazer o Download da Imagem, clicka com botão do lado direito do rato e seleccione "Guardar imagem como" ou uma opção equivalente'; +Portugues[30] = "images/partilhar.png"; +Portugues[31] = "Web"; +Portugues[32] = "Imprimir"; +Portugues[33] = "Imprimir em Alta Qualidade"; +Portugues[34] = "Metro"; +Portugues[35] = "Jarda"; +Portugues[36] = "Pés"; +Portugues[37] = "Unidade de comprimento : "; + +/*----------------ESPAÑOL-----------------*/ +Espanol[1] = "Parámetros"; +Espanol[2] = "Dimensiones"; +Espanol[3] = "Trayectorias"; +Espanol[4] = "Colores"; +Espanol[5] = "Colores Personalizados"; +Espanol[6] = "Descargar"; +Espanol[7] = "Idioma"; +Espanol[8] = "Longitud"; +Espanol[9] = "Autor"; +Espanol[10] = "Saltos"; +Espanol[11] = "Contactos"; +Espanol[12] = "Otros"; +Espanol[13] = "Herramientas"; +Espanol[14] = "Titulo : "; +Espanol[15] = "Longitud : "; +Espanol[16] = "Amplitud : "; +Espanol[17] = "Escala la rejilla : "; +Espanol[18] = "Metro(s)"; +Espanol[19] = " Mostrar Trayectorias "; +Espanol[20] = " Trayectorias Manuales "; +Espanol[21] = "Color de fondo"; +Espanol[22] = "Color 1"; +Espanol[23] = "Color 2"; +Espanol[24] = "Color 3"; +Espanol[25] = "Generar imagen"; +Espanol[26] = "Autor : "; +Espanol[27] = + "VERSIÓN BETA(En desarrollo) , diseñado para su uso con la función del ratón(mouse)"; +Espanol[28] = ""; +Espanol[29] = + 'Para descargar la imagen, clicka con el botón derecho del ratón y seleccione "Guarda la imagen como" o una opción equivalente'; +Espanol[30] = "images/comparte.jpg"; +Espanol[31] = "Web"; +Espanol[32] = "Imprimir"; +Espanol[33] = "Impresión de alta calidad"; +Espanol[34] = "Metro"; +Espanol[35] = "Yarda"; +Espanol[36] = "Pie"; +Espanol[37] = "Unidad de longitud : "; + +Italiano[1] = "Parametri"; +Italiano[2] = "Dimensioni"; +Italiano[3] = "Traiettorie"; +Italiano[4] = "Colori"; +Italiano[5] = "Colori personali"; +Italiano[6] = "Download"; +Italiano[7] = "Lingua"; +Italiano[8] = "Distanza teorica"; +Italiano[9] = "Autore"; +Italiano[10] = "Salti"; +Italiano[11] = "Zone"; +Italiano[12] = "Altri"; +Italiano[13] = "Strumenti"; +Italiano[14] = "Titolo : "; +Italiano[15] = "Lunghezza : "; +Italiano[16] = "Larghezza : "; +Italiano[17] = "Scala della griglia : "; +Italiano[18] = "Metro(i)"; +Italiano[19] = " Mostra le traiettorie "; +Italiano[20] = " Modifica manualmente "; +Italiano[21] = "Colore dello sfondo"; +Italiano[22] = "Colore 1"; +Italiano[23] = "Colore 2"; +Italiano[24] = "Colore 3"; +Italiano[25] = "Esporta immagine per"; +Italiano[26] = "Autore : "; +Italiano[27] = + "VERSIONE BETA (In corso di sviluppo), software creato per essere utilizzato con un mouse"; +Italiano[28] = ""; +Italiano[29] = + 'Per scaricare l’immagine, click destro sull’immagine poi "Salva immagine con nome"'; +Italiano[30] = "immagine/condividi.png"; +Italiano[31] = "Web"; +Italiano[32] = "Stampante"; +Italiano[33] = "Stampante alta qualità"; +Italiano[34] = "Metro"; +Italiano[35] = "Iarda"; +Italiano[36] = "Piede"; +Italiano[37] = "Unità di misura : "; + +Polski[1] = "Ustawienia"; +Polski[2] = "Wielkość"; +Polski[3] = "Trasa"; +Polski[4] = "Kolory"; +Polski[5] = "Kolory skonfigurowane"; +Polski[6] = "Pobieranie"; +Polski[7] = "Język"; +Polski[8] = "Odległość teoretyczna"; +Polski[9] = "Autor"; +Polski[10] = "Skoki"; +Polski[11] = "Strefy"; +Polski[12] = "Inne"; +Polski[13] = "Narzędzia"; +Polski[14] = "Tytuł: "; +Polski[15] = "Długość : "; +Polski[16] = "Szerokość : "; +Polski[17] = "Skala : "; +Polski[18] = "Metr"; +Polski[19] = " Wyświetl trasy "; +Polski[20] = " Dostosowanie trasy "; +Polski[21] = "Kolor tła"; +Polski[22] = "Kolor 1"; +Polski[23] = "Kolor 2"; +Polski[24] = "Kolor 3"; +Polski[25] = "Wygenerowac obrazek na eksport"; +Polski[26] = "Autor : "; +Polski[27] = + "Wersja BETA (W realizacji), aplikacja stworzona do użuzytku z myszka"; +Polski[28] = ""; +Polski[29] = + "Aby ściągnąć obrazek,należy nacisnąć na prawy przycisk myszki i wybrać Zapisz jako"; +Polski[30] = "images/partager.png"; +Polski[31] = "Wersja Web"; +Polski[32] = "Wersja do druku"; +Polski[33] = "Wersja do druku w wysokiej Jakości"; +Polski[34] = "Metr"; +Polski[35] = "Jard"; +Polski[36] = "Cal"; +Polski[37] = "Jednostka miary "; + +/*----------------ESPAÑOL-----------------*/ +Catalan[1] = "Paràmetres"; +Catalan[2] = "Dimensions"; +Catalan[3] = "Trajectories"; +Catalan[4] = "Colors"; +Catalan[5] = "Colors Personalitzats"; +Catalan[6] = "Descàrrega"; +Catalan[7] = "Idioma"; +Catalan[8] = "Longitut"; +Catalan[9] = "Autor"; +Catalan[10] = "Salts"; +Catalan[11] = "Contactes"; +Catalan[12] = "Altres"; +Catalan[13] = "Eines"; +Catalan[14] = "Títol : "; +Catalan[15] = "Longitut : "; +Catalan[16] = "Amplitut : "; +Catalan[17] = "Escala de la reixa : "; +Catalan[18] = "Metre(s)"; +Catalan[19] = " Mostrar Trajectories "; +Catalan[20] = " Trayectories Manuals "; +Catalan[21] = "Color de fons"; +Catalan[22] = "Color 1"; +Catalan[23] = "Color 2"; +Catalan[24] = "Color 3"; +Catalan[25] = "Generar imatge"; +Catalan[26] = "Autor : "; +Catalan[27] = + "VERSIÓ BETA(En desenvolupament) , disenyat pel seu ús amb el ratolí(mouse)"; +Catalan[28] = ""; +Catalan[29] = + 'Per descarregar la imatge, clicka amb el botó dret del ratolí i selecciona "Guarda la imatge com" o una opció equivalent'; +Catalan[30] = "imatges/comparteix.jpg"; +Catalan[31] = "Web"; +Catalan[32] = "Imprimir"; +Catalan[33] = "Impresió d'alta qualitat"; +Catalan[34] = "Metre"; +Catalan[35] = "Yarda"; +Catalan[36] = "Peu"; +Catalan[37] = "Unitat de longitut : "; + +/****EN****/ +suomi[1] = "Parametrit"; +suomi[2] = "Mitat"; +suomi[3] = "Reitti"; +suomi[4] = "Värit"; +suomi[5] = "Omat värit"; +suomi[6] = "Lataa"; +suomi[7] = "Kieli"; +suomi[8] = "Pituus"; +suomi[9] = "Tekijä"; +suomi[10] = "Hypyt"; +suomi[11] = "Kontaktit"; +suomi[12] = "Muut"; +suomi[13] = "Työkalut"; +suomi[14] = "Otsikko : "; +suomi[15] = "Pituus : "; +suomi[16] = "Leveys : "; +suomi[17] = "Ruudukon mitat : "; +suomi[18] = "Metri"; // this means tools for measuring, if you mean unit of lenght, it sould be ”Metri (t)” +suomi[19] = " Näytä reitti "; +suomi[20] = " Manuaalinen reitti "; +suomi[21] = "Taustaväri"; +suomi[22] = "Väri 1"; +suomi[23] = "Väri 2"; +suomi[24] = "Väri 3"; +suomi[25] = "Luo kuva"; +suomi[26] = "Tekijä : "; +suomi[27] = "BETA VERSIO (kehitys jatkuu), luotu käytettäväksi hiirellä"; + +suomi[28] = ""; +suomi[29] = + 'Lataa kuva, paina oikeaa ja valitse "Save Image as" tai vastaava vaihtoehto'; +suomi[30] = "images/share.png"; // or maybe this way, depending context... "kuva/jaa.png" + +suomi[31] = "Web"; +suomi[32] = "Tulostettava"; +suomi[33] = "Tulostettava High Quality"; +suomi[34] = "Metriä"; +suomi[35] = "Jaardi"; +suomi[36] = "Jalka"; +suomi[37] = "Pituuden yksikkö : "; + +/****EN****/ +Dansk[1] = "Parametre"; +Dansk[2] = "Dimensioner"; +Dansk[3] = "Hundens løbebane"; +Dansk[4] = "Farver"; +Dansk[5] = "Forskellige farver"; +Dansk[6] = "Download"; +Dansk[7] = "Sprog"; +Dansk[8] = "Længde"; +Dansk[9] = "Forfatter"; +Dansk[10] = "Spring"; +Dansk[11] = "Feltforhindringer"; +Dansk[12] = "Diverse"; +Dansk[13] = "Værktøjer"; +Dansk[14] = "Titel : "; +Dansk[15] = "Længde : "; +Dansk[16] = "Bredde : "; +Dansk[17] = "Mål på net : "; +Dansk[18] = "Meter(s)"; +Dansk[19] = " Vis rute "; +Dansk[20] = " Manuel rute "; +Dansk[21] = "Baggrundsfarve"; +Dansk[22] = "Farve 1"; +Dansk[23] = "Farve 2"; +Dansk[24] = "Farve 3"; +Dansk[25] = "Generer billede"; +Dansk[26] = "Forfatter : "; +Dansk[27] = "BETA VERSION (under udvikling). Designet til brug med mus."; + +Dansk[28] = ""; +Dansk[29] = + "For at downloade billedet, højre klik på de tog vælg “gem billed som” eller anden mulighed"; +Dansk[30] = "images/share.png"; + +Dansk[31] = "Web"; +Dansk[32] = "Print"; +Dansk[33] = "Printi høj kvalitet"; +Dansk[34] = "Meter"; +Dansk[35] = "Yard"; +Dansk[36] = "Feet"; +Dansk[37] = "Længde enhed : "; + +/* Ajouts */ +English[38] = "Obstacles"; +English[39] = "Characters"; +English[40] = "Save"; +English[41] = "Numbers"; +English[42] = "dog's speed"; +English[43] = "Show characters"; +English[44] = "Download course"; +English[45] = "Import course"; +English[46] = "Download data"; +English[47] = "Show numbers"; + +German[38] = "Hindernisse"; +German[39] = "Zeichen"; +German[40] = "Sparen"; +German[41] = "Zahlen"; +German[42] = "Geschwindigkeit"; +German[43] = "Zeichen anzeigen"; +German[44] = "Download course"; +German[45] = "Import course"; +German[46] = "Download data"; +German[47] = "Show numbers"; + +Hungarian[38] = "Akadályok"; +Hungarian[39] = "Karakter"; +Hungarian[40] = "Save"; +Hungarian[41] = "Számok"; +Hungarian[42] = "Sebesség"; +Hungarian[43] = "Mutasd karakter"; +Hungarian[44] = "Download course"; +Hungarian[45] = "Import course"; +Hungarian[46] = "Download data"; +Hungarian[47] = "Show numbers"; + +Norsk[38] = "Hindringer"; +Norsk[39] = "Tegn"; +Norsk[40] = "Lagre"; +Norsk[41] = "Tall"; +Norsk[42] = "Fart"; +Norsk[43] = "Show characters"; +Norsk[44] = "Download course"; +Norsk[45] = "Import course"; +Norsk[46] = "Download data"; +Norsk[47] = "Show numbers"; + +Japanese[38] = "障害物"; +Japanese[39] = "文字"; +Japanese[40] = "保存"; +Japanese[41] = "数字"; +Japanese[42] = "スピード"; +Japanese[43] = "表示文字"; +Japanese[44] = "Download course"; +Japanese[45] = "Import course"; +Japanese[46] = "Download data"; +Japanese[47] = "Show numbers"; + +Svenska[38] = "Hinder"; +Svenska[39] = "Tecken"; +Svenska[40] = "Spara"; +Svenska[41] = "Numbers"; +Svenska[42] = "Hastighet"; +Svenska[43] = "Visa tecken"; +Svenska[44] = "Download course"; +Svenska[45] = "Import course"; +Svenska[46] = "Download data"; +Svenska[47] = "Show numbers"; + +Portugues[38] = "Obstáculos"; +Portugues[39] = "Personagem"; +Portugues[40] = "Salvar"; +Portugues[41] = "Números"; +Portugues[42] = "Velocidad do cão"; +Portugues[43] = "Monstrat os personagems"; +Portugues[44] = "Download course"; +Portugues[45] = "Import course"; +Portugues[46] = "Download data"; +Portugues[47] = "Show numbers"; + +Espanol[38] = "Obstáculos"; +Espanol[39] = "Personajes"; +Espanol[40] = "Salvaguardar"; +Espanol[41] = "Números"; +Espanol[42] = "Velocidad"; +Espanol[43] = "Ver Personajes"; +Espanol[44] = "Descargar pista"; +Espanol[45] = "Importar pista"; +Espanol[46] = "Descargar datos"; +Espanol[47] = "Ver números"; + +Italiano[38] = "Ostacoli"; +Italiano[39] = "Personaggi"; +Italiano[40] = "Salva"; +Italiano[41] = "Numeri"; +Italiano[42] = "Velocità del caned"; +Italiano[43] = "Mostra caratteri"; +Italiano[44] = "Download course"; +Italiano[45] = "Import course"; +Italiano[46] = "Download data"; +Italiano[47] = "Show numbers"; + +Polski[38] = "Przeszkody"; +Polski[39] = "Figura"; +Polski[40] = "Zaoszczędzić"; +Polski[41] = "Liczba"; +Polski[42] = "Prędkość psa"; +Polski[43] = "Pokaż znaków"; +Polski[44] = "Download course"; +Polski[45] = "Import course"; +Polski[46] = "Download data"; +Polski[47] = "Show numbers"; + +Catalan[38] = "Obstacles"; +Catalan[39] = "Personatges"; +Catalan[40] = "Guardar"; +Catalan[41] = "Nombres"; +Catalan[42] = "Velocitat del gos"; +Catalan[43] = "Mostrar caràcters"; +Catalan[44] = "Descarregar pista"; +Catalan[45] = "Importar pista"; +Catalan[46] = "Download data"; +Catalan[47] = "Show numbers"; + +suomi[38] = "Esteet"; +suomi[39] = "Hahmot"; +suomi[40] = "Tallenna"; +suomi[41] = "Numbers"; +suomi[42] = "Koiran nopeus"; +suomi[43] = "Näyttämään merkkejä"; +suomi[44] = "Download course"; +suomi[45] = "Import course"; +suomi[46] = "Download data"; +suomi[47] = "Show numbers"; + +Dansk[38] = "Forhindringer"; +Dansk[39] = "Tegn"; +Dansk[40] = "Gem"; +Dansk[41] = "Numbers"; +Dansk[42] = "Hundens hastighed"; +Dansk[43] = "Vis tegn"; +Dansk[44] = "Download course"; +Dansk[45] = "Import course"; +Dansk[46] = "Download data"; +Dansk[47] = "Show numbers"; + +Russian[1] = "Параметры"; +Russian[2] = "Размеры"; +Russian[3] = "Путь собаки"; +Russian[4] = "Цвета"; +Russian[5] = "Свои цвета"; +Russian[6] = "Скачать"; +Russian[7] = "Язык"; +Russian[8] = "Длина"; +Russian[9] = "Автор"; +Russian[10] = "Прыжковые"; +Russian[11] = "Зоновые"; +Russian[12] = "Разные"; +Russian[13] = "Инструменты"; +Russian[14] = "Название : "; +Russian[15] = "Длина : "; +Russian[16] = "Ширина : "; +Russian[17] = "Размер сетки : "; +Russian[18] = "Метр"; +Russian[19] = " Показать путь "; +Russian[20] = " Задать путь "; +Russian[21] = "Цвет фона"; +Russian[22] = "Цвет 1"; +Russian[23] = "Цвет 2"; +Russian[24] = "Цвет 3"; +Russian[25] = "Создать изображение"; +Russian[26] = "Автор : "; +Russian[27] = "БЕТА ВЕРСИЯ (В разработке), рекомендуется использовать мышь"; +Russian[28] = ""; +Russian[29] = + 'Чтобы сохранить изображение, нажмите на нем правой кнопкой мыши и выберите "Сохранить изображение как".'; +Russian[30] = "images/share.png"; +Russian[31] = "Для веб"; +Russian[32] = "Для печати"; +Russian[33] = "Для высококачественной печати"; +Russian[34] = "Метр(ы)"; +Russian[35] = "Ярды"; +Russian[36] = "Футы"; +Russian[37] = "Единица измерения : "; +Russian[38] = "Препятствия"; +Russian[39] = "Участники"; +Russian[40] = "Сохранить"; +Russian[41] = "Номера"; +Russian[42] = "скорость собаки"; +Russian[43] = "Показывать участников"; +Russian[44] = "Download course"; +Russian[45] = "Import course"; +Russian[46] = "Download data"; +Russian[47] = "Show numbers"; +Russian[50] = "Логин"; +Russian[51] = "Пожалуйста выберите..."; +Russian[52] = "Новый"; +Russian[53] = "Сохранить как..."; +Russian[54] = "Сохранить"; +Russian[55] = "Название Вашей трассы"; +Russian[56] = "Ошибка входа!"; +Russian[57] = "Вы действительно хотите сбросить текущую трассу?"; +Russian[58] = "Выход"; +Russian[59] = "Ошибка при сохранении трассы!"; +Russian[60] = "Вы действительно хотите удалить препятствия?"; + +langues[0] = Francais; +langues[1] = English; +langues[2] = Portugues; +langues[3] = Espanol; +langues[4] = Italiano; +langues[5] = Polski; +langues[6] = Catalan; +langues[7] = Svenska; +langues[8] = Japanese; +langues[9] = Norsk; +langues[10] = Dansk; +langues[11] = suomi; +langues[12] = German; +langues[13] = Hungarian; +langues[14] = Russian; + +function setInfoLangue() { + masquerTout(); + document.getElementById("blocInfoLangueEn").style.display = "block"; + document.getElementById("blocInfoLangueFr").style.display = "block"; + document.getElementById("blocInfoLanguePt").style.display = "block"; + document.getElementById("blocInfoLangueEs").style.display = "block"; + document.getElementById("blocInfoLangueIt").style.display = "block"; + document.getElementById("blocInfoLanguePl").style.display = "block"; + document.getElementById("blocInfoLangueSe").style.display = "block"; + document.getElementById("blocInfoLangueJp").style.display = "block"; + document.getElementById("blocInfoLangueDe").style.display = "block"; + document.getElementById("blocInfoLangueCt").style.display = "block"; + document.getElementById("blocInfoLangueNo").style.display = "block"; + document.getElementById("blocInfoLangueDa").style.display = "block"; + document.getElementById("blocInfoLangueFi").style.display = "block"; + document.getElementById("blocInfoLangueHu").style.display = "block"; + document.getElementById("blocInfoLangueRu").style.display = "block"; + document.getElementById("barreOLangue").style.display = "block"; +} + +function masquerLangue() { + document.getElementById("blocInfoLangueEn").style.display = "none"; + document.getElementById("blocInfoLangueFr").style.display = "none"; + document.getElementById("blocInfoLanguePt").style.display = "none"; + document.getElementById("blocInfoLangueSe").style.display = "none"; + document.getElementById("blocInfoLangueEs").style.display = "none"; + document.getElementById("blocInfoLangueCt").style.display = "none"; + document.getElementById("blocInfoLangueJp").style.display = "none"; + document.getElementById("blocInfoLangueIt").style.display = "none"; + document.getElementById("blocInfoLanguePl").style.display = "none"; + document.getElementById("blocInfoLangueNo").style.display = "none"; + document.getElementById("blocInfoLangueDa").style.display = "none"; + document.getElementById("blocInfoLangueFi").style.display = "none"; + document.getElementById("blocInfoLangueDe").style.display = "none"; + document.getElementById("blocInfoLangueHu").style.display = "none"; + document.getElementById("blocInfoLangueRu").style.display = "none"; +} +function initLangue() { + var languageNav = + window.navigator.userLanguage || window.navigator.language; + if ( + languageNav.substr(0, 2) == "pt" || + languageNav.substr(0, 2) == "fr" || + languageNav.substr(0, 2) == "es" || + languageNav.substr(0, 2) == "it" || + languageNav.substr(0, 2) == "se" || + languageNav.substr(0, 2) == "jp" || + languageNav.substr(0, 2) == "no" || + languageNav.substr(0, 2) == "fi" || + languageNav.substr(0, 2) == "da" || + languageNav.substr(0, 2) == "jp" || + languageNav.substr(0, 2) == "de" || + languageNav.substr(0, 2) == "pl" || + languageNav.substr(0, 2) == "hu" || + languageNav.substr(0, 2) == "ru" + ) { + setLangue(languageNav.substr(0, 2)); + } else { + setLangue("gb"); + } +} +function setLangue(langue) { + document.getElementById("langueOptions").src = + "/static/public/tabs/flags/" + langue + ".png"; + document.getElementById("medaille").src = + "/static/public/title/flag-icons/" + langue + ".png"; + if (langue == "fr") { + idLg = 0; + } else if (langue == "gb") { + idLg = 1; + } else if (langue == "pt") { + idLg = 2; + } else if (langue == "es") { + idLg = 3; + } else if (langue == "it") { + idLg = 4; + } else if (langue == "pl") { + idLg = 5; + } else if (langue == "ct") { + idLg = 6; + } else if (langue == "se") { + idLg = 7; + } else if (langue == "jp") { + idLg = 8; + } else if (langue == "no") { + idLg = 9; + } else if (langue == "da") { + idLg = 10; + } else if (langue == "fi") { + idLg = 11; + } else if (langue == "de") { + idLg = 12; + } else if (langue == "hu") { + idLg = 13; + } else if (langue == "ru") { + idLg = 14; + } + document.getElementById("contentBlocOParam").innerHTML = langues[idLg][1]; + //document.getElementById('contentBlocODim').innerHTML=langues[idLg][2]; + document.getElementById("contentBlocOTrj").innerHTML = langues[idLg][3]; + //document.getElementById('contentBlocOColor').innerHTML=langues[idLg][4]; + document.getElementById("contentBlocOSav").innerHTML = langues[idLg][6]; + document.getElementById("contentBlocOImp").innerHTML = langues[idLg][45]; + document.getElementById("contentBlocOLangue").innerHTML = langues[idLg][7]; + //document.getElementById('blocOCouP').innerHTML=langues[idLg][5]; + //document.getElementById('txtLangue').innerHTML=langues[idLg][7]; + document.getElementById("outilsSauts").innerHTML = langues[idLg][10]; + document.getElementById("outilsZones").innerHTML = langues[idLg][11]; + document.getElementById("outilsAutres").innerHTML = langues[idLg][12]; + document.getElementById("outilsOutils").innerHTML = langues[idLg][13]; + document.getElementById("txtTitre").innerHTML = langues[idLg][14]; + document.getElementById("txtLongueur").innerHTML = langues[idLg][15]; + document.getElementById("txtLargeur").innerHTML = langues[idLg][16]; + document.getElementById("txtEchelle").innerHTML = langues[idLg][17]; + //document.getElementById('txtMetre').innerHTML=langues[idLg][18]; + document.getElementById("txtTraj").innerHTML = langues[idLg][19]; + document.getElementById("txtTraj-2").innerHTML = langues[idLg][19]; + document.getElementById("txtManualTraj").innerHTML = langues[idLg][20]; + //document.getElementById('txtCouleurF').innerHTML=langues[idLg][21]; + //document.getElementById('txtCouleur1').innerHTML=langues[idLg][22]; + //document.getElementById('txtCouleur2').innerHTML=langues[idLg][23]; + //document.getElementById('txtCouleur3').innerHTML=langues[idLg][24]; + document.getElementById("generateImg").innerHTML = langues[idLg][25]; + document.getElementById("exportData").innerHTML = langues[idLg][46]; + document.getElementById("txtAuteur").innerHTML = langues[idLg][26]; + document.getElementById("txtMessage").innerHTML = langues[idLg][27]; + document.getElementById("txtMessageObst").innerHTML = langues[idLg][28]; + document.getElementById("txtInfoDl").innerHTML = langues[idLg][29]; + //document.getElementById('shareIcon').src=langues[idLg][30]; + document.getElementById("btnGenererWeb").value = langues[idLg][31]; + document.getElementById("btnGenererImpr").value = langues[idLg][32]; + document.getElementById("btnGenererHQ").value = langues[idLg][33]; + document.getElementById("btnGenererData").value = langues[idLg][44]; + document.getElementById("txtMetre").innerHTML = langues[idLg][34]; + document.getElementById("txtYard").innerHTML = langues[idLg][35]; + document.getElementById("txtPied").innerHTML = langues[idLg][36]; + document.getElementById("txtUnite").innerHTML = langues[idLg][37]; + document.getElementById("txtDistance").innerHTML = langues[idLg][8]; + + document.getElementById("contentBlocOObst").innerHTML = langues[idLg][38]; + document.getElementById("contentBlocOCon").innerHTML = langues[idLg][39]; + document.getElementById("outilsSauvegarde").innerHTML = langues[idLg][40]; + document.getElementById("outilsNumero").innerHTML = langues[idLg][41]; + document.getElementById("txtNumero").innerHTML = langues[idLg][47]; + document.getElementById("txtNumero-2").innerHTML = langues[idLg][47]; + + document.getElementById("txtVitesseTraj").innerHTML = langues[idLg][42]; + document.getElementById("txtShowDrive").innerHTML = langues[idLg][43]; + document.getElementById("txtShowDrive-2").innerHTML = langues[idLg][43]; + document.getElementById("outilsConducteur").innerHTML = langues[idLg][39]; + + document.getElementById("outilsLangue").innerHTML = langues[idLg][7]; + document.getElementById("outilsCouleurs").innerHTML = langues[idLg][4]; + document.getElementById("outilsCouleurs-bg").innerHTML = langues[idLg][4]; + document.getElementById("outilsCouleurs-bg-2").innerHTML = langues[idLg][4]; + + document.getElementById("outilsOutilsNum").innerHTML = langues[idLg][13]; + document.getElementById("outilsOutils2").innerHTML = langues[idLg][13]; + document.getElementById("outilsParam").innerHTML = langues[idLg][1]; + document.getElementById("outilsDimension").innerHTML = langues[idLg][2]; + document.getElementById("outilsTraj").innerHTML = langues[idLg][3]; +} diff --git a/static/ui/app/src/over-obstacle.js b/static/ui/app/src/over-obstacle.js new file mode 100644 index 0000000..96baf4d --- /dev/null +++ b/static/ui/app/src/over-obstacle.js @@ -0,0 +1,320 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////PASSAGE AU DESSUS DES OBSTACLES//////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/* +retourne la marge de tolérence pour la séléction d'un objet +*/ +function setMargeSelect() { + if (isTactil) { + DIAM_ROND_SELECTION = 14; + DIAM_ROND_SELECTION_TUNNEL = 6; + DIAM_ROND_SELECTION_TUNNEL_MOVE = DIAM_ROND_SELECTION_TUNNEL + 15; + RECT_MARGE_SELECTION = 25; + ROTATE_MARGE_SELECTION = 25; + LARGEUR_NUMERO_SELECT = LARGEUR_NUMERO + RECT_MARGE_SELECTION; + HAUTEUR_NUMERO_SELECT = HAUTEUR_NUMERO + RECT_MARGE_SELECTION; + } else { + DIAM_ROND_SELECTION = 7; + DIAM_ROND_SELECTION_TUNNEL = 3; + DIAM_ROND_SELECTION_TUNNEL_MOVE = DIAM_ROND_SELECTION_TUNNEL + 10; + RECT_MARGE_SELECTION = 15; + ROTATE_MARGE_SELECTION = 0; + LARGEUR_NUMERO_SELECT = LARGEUR_NUMERO; + HAUTEUR_NUMERO_SELECT = HAUTEUR_NUMERO; + } +} + +function overObstacle(posX, posY) { + var x; + var y; + var xlarg; + var ylarg; + var angle; + var xRotateGauche; + var xRotateDroit; + var yRotateGauche; + var yRotateDroit; + for (var i = 0; i < id; i++) { + x = getCanvasX(i); + y = getCanvasY(i); + xlarg = getXCliquable(i) + RECT_MARGE_SELECTION; + ylarg = getYCliquable(i) + RECT_MARGE_SELECTION; + angle = getAngle(i); + if ( + checkPointInRect( + x + xlarg / 2, + y + ylarg / 2 - RECT_MARGE_SELECTION / 2, + xlarg, + ylarg, + angle, + posX, + posY + ) + ) { + overObject = i; + decalX = posX - x; + decalY = posY - y; + if (!suppression) { + document.body.style.cursor = "move"; + } + } + } +} +function overTunnel(posX, posY) { + moveTunnelComplet = -1; + for (var j = 0; j < idTunnel; j++) { + //Déplacement d'un point du tunnel + for (var art = 0; art < nbArticulationTunnel; art++) { + if ( + posX > tbTunnels[j][art * 2 + 1] - DIAM_ROND_SELECTION_TUNNEL && + posX < tbTunnels[j][art * 2 + 1] + DIAM_ROND_SELECTION_TUNNEL && + posY > tbTunnels[j][art * 2 + 2] - DIAM_ROND_SELECTION_TUNNEL && + posY < tbTunnels[j][art * 2 + 2] + DIAM_ROND_SELECTION_TUNNEL + ) { + decalX = posX - tbTunnels[j][art * 2 + 1]; + decalY = posY - tbTunnels[j][art * 2 + 2]; + overTunnelId = j; + overPointTunnel = art; + if (!suppression) { + document.body.style.cursor = "pointer"; + } + } + } + // déplacement du tunnel complet + if (overPointTunnel == -1) { + for (var art = 0; art < nbArticulationTunnel; art++) { + if ( + posX > + tbTunnels[j][art * 2 + 1] - + DIAM_ROND_SELECTION_TUNNEL_MOVE && + posX < + tbTunnels[j][art * 2 + 1] + + DIAM_ROND_SELECTION_TUNNEL_MOVE && + posY > + tbTunnels[j][art * 2 + 2] - + DIAM_ROND_SELECTION_TUNNEL_MOVE && + posY < + tbTunnels[j][art * 2 + 2] + + DIAM_ROND_SELECTION_TUNNEL_MOVE + ) { + decalX = posX - tbTunnels[j][1]; + decalY = posY - tbTunnels[j][2]; + overTunnelComplet = j; + if (!suppression) { + document.body.style.cursor = "move"; + } + } + } + } + } +} +// permet de définir quel objet est sous la souris +function overRotate(posX, posY) { + var x; + var y; + var xlarg; + var ylarg; + var angle; + var xRotateGauche; + var xRotateDroit; + var yRotateGauche; + var yRotateDroit; + rotate = false; + for (var i = 0; i < id; i++) { + x = getCanvasX(i); + y = getCanvasY(i); + xlarg = getXCliquable(i); + ylarg = getYCliquable(i); + angle = getAngle(i); + + // bouton des cotés pour rotation + + xRotateGauche = + (Math.round(Math.cos(toDegrees(angle)) * 100) / 100) * + ((xlarg + ROTATE_MARGE_SELECTION) / 2) + + x + + xlarg / 2; + yRotateGauche = + (Math.round(Math.sin(toDegrees(angle)) * 100) / 100) * + ((xlarg + ROTATE_MARGE_SELECTION) / 2) + + y + + ylarg / 2; + if ( + posX > xRotateGauche - DIAM_ROND_SELECTION && + posX < xRotateGauche + DIAM_ROND_SELECTION && + posY > yRotateGauche - DIAM_ROND_SELECTION && + posY < yRotateGauche + DIAM_ROND_SELECTION + ) { + //selObst=i; + overObject = i; + decalX = posX - x; + decalY = posY - y; + rotate = true; + rotateCote = "gauche"; + } + xRotateDroit = + x + + xlarg / 2 - + (Math.round(Math.cos(toDegrees(angle)) * 100) / 100) * + ((xlarg + ROTATE_MARGE_SELECTION) / 2); + yRotateDroit = + y + + ylarg / 2 - + (Math.round(Math.sin(toDegrees(angle)) * 100) / 100) * + ((xlarg + ROTATE_MARGE_SELECTION) / 2); + if ( + posX > xRotateDroit - DIAM_ROND_SELECTION && + posX < xRotateDroit + DIAM_ROND_SELECTION && + posY > yRotateDroit - DIAM_ROND_SELECTION && + posY < yRotateDroit + DIAM_ROND_SELECTION + ) { + //selObst=i; + overObject = i; + decalX = posX - x; + decalY = posY - y; + rotate = true; + rotateCote = "droit"; + } + + if (rotate) { + if (!suppression) { + document.body.style.cursor = "pointer"; + } + } + } +} +function checkPointInRect( + rectCentreX, + rectCentreY, + rectWidth, + rectHeight, + rot, + px, + py +) { + // rotation in radians, because flash likes to be a pain and use them instead. + var rotRad = (Math.PI * rot) / 180; + var dx = px - rectCentreX; + var dy = py - rectCentreY; + // distance between point and centre of rectangle. + var h1 = Math.sqrt(dx * dx + dy * dy); + var currA = Math.atan2(dy, dx); + // angle of point rotated by the rectangle amount around the centre of rectangle. + var newA = currA - rotRad; + // x2 and y2 are the new positions of the point when rotated to offset the rectangles orientation. + var x2 = Math.cos(newA) * h1; + var y2 = Math.sin(newA) * h1; + // the above points are relative to the centre of the rectangle, so the check is simple. + + if ( + x2 > -0.5 * rectWidth && + x2 < 0.5 * rectWidth && + y2 > -0.5 * rectHeight && + y2 < 0.5 * rectHeight + ) { + return true; + } + + return false; +} + +function overNumero(x, y) { + overNumeroId = -1; + for (var i = 1; i < nextNumber; i++) { + if ( + checkPointInRect( + listeNumero[i][1] + 7 - LARGEUR_NUMERO / 2, + listeNumero[i][2] + 6 - HAUTEUR_NUMERO / 2, + LARGEUR_NUMERO_SELECT, + HAUTEUR_NUMERO_SELECT, + 0, + x, + y + ) + ) { + overNumeroId = i; + if (!suppression) { + document.body.style.cursor = "move"; + } + decalX = x - listeNumero[i][1]; + decalY = y - listeNumero[i][2]; + } + } +} +function overNumero2(x, y) { + overNumeroId2 = -1; + for (var i = 1; i < nextNumber2; i++) { + if ( + checkPointInRect( + listeNumero2[i][1] + 7 - LARGEUR_NUMERO / 2, + listeNumero2[i][2] + 6 - HAUTEUR_NUMERO / 2, + LARGEUR_NUMERO_SELECT, + HAUTEUR_NUMERO_SELECT, + 0, + x, + y + ) + ) { + overNumeroId2 = i; + if (!suppression) { + document.body.style.cursor = "move"; + } + decalX = x - listeNumero2[i][1]; + decalY = y - listeNumero2[i][2]; + } + } +} +function overNumero3(x, y) { + overNumeroId3 = -1; + for (var i = 1; i < nextNumber3; i++) { + if ( + checkPointInRect( + listeNumero3[i][1] + 7 - LARGEUR_NUMERO / 2, + listeNumero3[i][2] + 6 - HAUTEUR_NUMERO / 2, + LARGEUR_NUMERO_SELECT, + HAUTEUR_NUMERO_SELECT, + 0, + x, + y + ) + ) { + overNumeroId3 = i; + if (!suppression) { + document.body.style.cursor = "move"; + } + decalX = x - listeNumero3[i][1]; + decalY = y - listeNumero3[i][2]; + } + } +} +function overModifTraj(x, y) { + for (var i = 1; i < nextNumber; i++) { + var xDep = ordreObst[i][3]; + var yDep = ordreObst[i][4]; + var xArr = ordreObst[i][5]; + var yArr = ordreObst[i][6]; + if (checkPointInRect(xDep, yDep, 8, 8, 0, x, y)) { + if (!suppression) { + document.body.style.cursor = "pointer"; + overModifTrajId = i; + overModifTrajDepArr = "dep"; + decalX = x - xDep; + decalY = y - yDep; + } + } + if (checkPointInRect(xArr, yArr, 8, 8, 0, x, y)) { + if (!suppression) { + document.body.style.cursor = "pointer"; + overModifTrajId = i; + overModifTrajDepArr = "arr"; + decalX = x - xArr; + decalY = y - yArr; + } + } + } +} diff --git a/static/ui/app/src/over-obstacle.js.bak b/static/ui/app/src/over-obstacle.js.bak new file mode 100644 index 0000000..8880891 --- /dev/null +++ b/static/ui/app/src/over-obstacle.js.bak @@ -0,0 +1,320 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////PASSAGE AU DESSUS DES OBSTACLES//////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/* +retourne la marge de tol�rence pour la s�l�ction d'un objet +*/ +function setMargeSelect() { + if (isTactil) { + DIAM_ROND_SELECTION = 14; + DIAM_ROND_SELECTION_TUNNEL = 6; + DIAM_ROND_SELECTION_TUNNEL_MOVE = DIAM_ROND_SELECTION_TUNNEL + 15; + RECT_MARGE_SELECTION = 25; + ROTATE_MARGE_SELECTION = 25; + LARGEUR_NUMERO_SELECT = LARGEUR_NUMERO + RECT_MARGE_SELECTION; + HAUTEUR_NUMERO_SELECT = HAUTEUR_NUMERO + RECT_MARGE_SELECTION; + } else { + DIAM_ROND_SELECTION = 7; + DIAM_ROND_SELECTION_TUNNEL = 3; + DIAM_ROND_SELECTION_TUNNEL_MOVE = DIAM_ROND_SELECTION_TUNNEL + 10; + RECT_MARGE_SELECTION = 15; + ROTATE_MARGE_SELECTION = 0; + LARGEUR_NUMERO_SELECT = LARGEUR_NUMERO; + HAUTEUR_NUMERO_SELECT = HAUTEUR_NUMERO; + } +} + +function overObstacle(posX, posY) { + var x; + var y; + var xlarg; + var ylarg; + var angle; + var xRotateGauche; + var xRotateDroit; + var yRotateGauche; + var yRotateDroit; + for (var i = 0; i < id; i++) { + x = getCanvasX(i); + y = getCanvasY(i); + xlarg = getXCliquable(i) + RECT_MARGE_SELECTION; + ylarg = getYCliquable(i) + RECT_MARGE_SELECTION; + angle = getAngle(i); + if ( + checkPointInRect( + x + xlarg / 2, + y + ylarg / 2 - RECT_MARGE_SELECTION / 2, + xlarg, + ylarg, + angle, + posX, + posY + ) + ) { + overObject = i; + decalX = posX - x; + decalY = posY - y; + if (!suppression) { + document.body.style.cursor = "move"; + } + } + } +} +function overTunnel(posX, posY) { + moveTunnelComplet = -1; + for (var j = 0; j < idTunnel; j++) { + //D�placement d'un point du tunnel + for (var art = 0; art < nbArticulationTunnel; art++) { + if ( + posX > tbTunnels[j][art * 2 + 1] - DIAM_ROND_SELECTION_TUNNEL && + posX < tbTunnels[j][art * 2 + 1] + DIAM_ROND_SELECTION_TUNNEL && + posY > tbTunnels[j][art * 2 + 2] - DIAM_ROND_SELECTION_TUNNEL && + posY < tbTunnels[j][art * 2 + 2] + DIAM_ROND_SELECTION_TUNNEL + ) { + decalX = posX - tbTunnels[j][art * 2 + 1]; + decalY = posY - tbTunnels[j][art * 2 + 2]; + overTunnelId = j; + overPointTunnel = art; + if (!suppression) { + document.body.style.cursor = "pointer"; + } + } + } + // d�placement du tunnel complet + if (overPointTunnel == -1) { + for (var art = 0; art < nbArticulationTunnel; art++) { + if ( + posX > + tbTunnels[j][art * 2 + 1] - + DIAM_ROND_SELECTION_TUNNEL_MOVE && + posX < + tbTunnels[j][art * 2 + 1] + + DIAM_ROND_SELECTION_TUNNEL_MOVE && + posY > + tbTunnels[j][art * 2 + 2] - + DIAM_ROND_SELECTION_TUNNEL_MOVE && + posY < + tbTunnels[j][art * 2 + 2] + + DIAM_ROND_SELECTION_TUNNEL_MOVE + ) { + decalX = posX - tbTunnels[j][1]; + decalY = posY - tbTunnels[j][2]; + overTunnelComplet = j; + if (!suppression) { + document.body.style.cursor = "move"; + } + } + } + } + } +} +// permet de d�finir quel objet est sous la souris +function overRotate(posX, posY) { + var x; + var y; + var xlarg; + var ylarg; + var angle; + var xRotateGauche; + var xRotateDroit; + var yRotateGauche; + var yRotateDroit; + rotate = false; + for (var i = 0; i < id; i++) { + x = getCanvasX(i); + y = getCanvasY(i); + xlarg = getXCliquable(i); + ylarg = getYCliquable(i); + angle = getAngle(i); + + // bouton des cot�s pour rotation + + xRotateGauche = + (Math.round(Math.cos(toDegrees(angle)) * 100) / 100) * + ((xlarg + ROTATE_MARGE_SELECTION) / 2) + + x + + xlarg / 2; + yRotateGauche = + (Math.round(Math.sin(toDegrees(angle)) * 100) / 100) * + ((xlarg + ROTATE_MARGE_SELECTION) / 2) + + y + + ylarg / 2; + if ( + posX > xRotateGauche - DIAM_ROND_SELECTION && + posX < xRotateGauche + DIAM_ROND_SELECTION && + posY > yRotateGauche - DIAM_ROND_SELECTION && + posY < yRotateGauche + DIAM_ROND_SELECTION + ) { + //selObst=i; + overObject = i; + decalX = posX - x; + decalY = posY - y; + rotate = true; + rotateCote = "gauche"; + } + xRotateDroit = + x + + xlarg / 2 - + (Math.round(Math.cos(toDegrees(angle)) * 100) / 100) * + ((xlarg + ROTATE_MARGE_SELECTION) / 2); + yRotateDroit = + y + + ylarg / 2 - + (Math.round(Math.sin(toDegrees(angle)) * 100) / 100) * + ((xlarg + ROTATE_MARGE_SELECTION) / 2); + if ( + posX > xRotateDroit - DIAM_ROND_SELECTION && + posX < xRotateDroit + DIAM_ROND_SELECTION && + posY > yRotateDroit - DIAM_ROND_SELECTION && + posY < yRotateDroit + DIAM_ROND_SELECTION + ) { + //selObst=i; + overObject = i; + decalX = posX - x; + decalY = posY - y; + rotate = true; + rotateCote = "droit"; + } + + if (rotate) { + if (!suppression) { + document.body.style.cursor = "pointer"; + } + } + } +} +function checkPointInRect( + rectCentreX, + rectCentreY, + rectWidth, + rectHeight, + rot, + px, + py +) { + // rotation in radians, because flash likes to be a pain and use them instead. + var rotRad = (Math.PI * rot) / 180; + var dx = px - rectCentreX; + var dy = py - rectCentreY; + // distance between point and centre of rectangle. + var h1 = Math.sqrt(dx * dx + dy * dy); + var currA = Math.atan2(dy, dx); + // angle of point rotated by the rectangle amount around the centre of rectangle. + var newA = currA - rotRad; + // x2 and y2 are the new positions of the point when rotated to offset the rectangles orientation. + var x2 = Math.cos(newA) * h1; + var y2 = Math.sin(newA) * h1; + // the above points are relative to the centre of the rectangle, so the check is simple. + + if ( + x2 > -0.5 * rectWidth && + x2 < 0.5 * rectWidth && + y2 > -0.5 * rectHeight && + y2 < 0.5 * rectHeight + ) { + return true; + } + + return false; +} + +function overNumero(x, y) { + overNumeroId = -1; + for (var i = 1; i < nextNumber; i++) { + if ( + checkPointInRect( + listeNumero[i][1] + 7 - LARGEUR_NUMERO / 2, + listeNumero[i][2] + 6 - HAUTEUR_NUMERO / 2, + LARGEUR_NUMERO_SELECT, + HAUTEUR_NUMERO_SELECT, + 0, + x, + y + ) + ) { + overNumeroId = i; + if (!suppression) { + document.body.style.cursor = "move"; + } + decalX = x - listeNumero[i][1]; + decalY = y - listeNumero[i][2]; + } + } +} +function overNumero2(x, y) { + overNumeroId2 = -1; + for (var i = 1; i < nextNumber2; i++) { + if ( + checkPointInRect( + listeNumero2[i][1] + 7 - LARGEUR_NUMERO / 2, + listeNumero2[i][2] + 6 - HAUTEUR_NUMERO / 2, + LARGEUR_NUMERO_SELECT, + HAUTEUR_NUMERO_SELECT, + 0, + x, + y + ) + ) { + overNumeroId2 = i; + if (!suppression) { + document.body.style.cursor = "move"; + } + decalX = x - listeNumero2[i][1]; + decalY = y - listeNumero2[i][2]; + } + } +} +function overNumero3(x, y) { + overNumeroId3 = -1; + for (var i = 1; i < nextNumber3; i++) { + if ( + checkPointInRect( + listeNumero3[i][1] + 7 - LARGEUR_NUMERO / 2, + listeNumero3[i][2] + 6 - HAUTEUR_NUMERO / 2, + LARGEUR_NUMERO_SELECT, + HAUTEUR_NUMERO_SELECT, + 0, + x, + y + ) + ) { + overNumeroId3 = i; + if (!suppression) { + document.body.style.cursor = "move"; + } + decalX = x - listeNumero3[i][1]; + decalY = y - listeNumero3[i][2]; + } + } +} +function overModifTraj(x, y) { + for (var i = 1; i < nextNumber; i++) { + var xDep = ordreObst[i][3]; + var yDep = ordreObst[i][4]; + var xArr = ordreObst[i][5]; + var yArr = ordreObst[i][6]; + if (checkPointInRect(xDep, yDep, 8, 8, 0, x, y)) { + if (!suppression) { + document.body.style.cursor = "pointer"; + overModifTrajId = i; + overModifTrajDepArr = "dep"; + decalX = x - xDep; + decalY = y - yDep; + } + } + if (checkPointInRect(xArr, yArr, 8, 8, 0, x, y)) { + if (!suppression) { + document.body.style.cursor = "pointer"; + overModifTrajId = i; + overModifTrajDepArr = "arr"; + decalX = x - xArr; + decalY = y - yArr; + } + } + } +} diff --git a/static/ui/app/src/trajectories.js b/static/ui/app/src/trajectories.js new file mode 100644 index 0000000..d8a72ef --- /dev/null +++ b/static/ui/app/src/trajectories.js @@ -0,0 +1,576 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////CALCUL DES TRAJECTOIRES/////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +function longueurTunnel(idTunnel) { + var longueurTunnel = 0; + for (var art = 0; art < nbArticulationTunnel - 1; art++) { + var x = art * 2 + 1; + var y = art * 2 + 2; + var x2 = art * 2 + 3; + var y2 = art * 2 + 4; + dist = Math.sqrt( + Math.pow(tbTunnels[idTunnel][x] - tbTunnels[idTunnel][x2], 2) + + Math.pow(tbTunnels[idTunnel][y] - tbTunnels[idTunnel][y2], 2) + ); + longueurTunnel = longueurTunnel + dist; + } + return longueurTunnel; +} +function genererTrajectoires() { + vitesseTraj = 0; + var angleModSui = 0; + var angleMod = 0; + + if (!trajectoire) { + return; + } + longueurTotal = 0; + + context.lineWidth = 1; + var distObstTrajectoireSui = 50; + var distObstTrajectoire = 50; + for (var j = 1; j < nextNumber - 1; j++) { + var i = ordreObst[j][0]; + var iSui = ordreObst[j + 1][0]; //TODO BUG, valeur de la propriété 0 non déf + var sens = ordreObst[j][2]; + var sensSui = ordreObst[j + 1][2]; + if (sens == 0) { + var angleMod = ordreObst[j][7]; + var distMod = ordreObst[j][8]; + } else { + var angleMod = ordreObst[j][9]; + var distMod = ordreObst[j][10]; + } + if (sensSui == 0) { + var angleModSui = ordreObst[j + 1][9]; + var distModSui = ordreObst[j + 1][10]; + } else { + var angleModSui = ordreObst[j + 1][7]; + var distModSui = ordreObst[j + 1][8]; + } + + if (ordreObst[j][1] == "tunnel") { + if (sens == 0) { + var x = tbTunnels[i][1]; + var y = tbTunnels[i][2]; + var x2 = tbTunnels[i][3]; // pour le premier angle + var y2 = tbTunnels[i][4]; // pour le premier angle + var distX = x - x2; + var distY = y - y2; + var angle = -90; + var modifAngleArr = + (Math.atan2(distY, distX) / Math.PI) * 180 - 90; + } else { + var x = tbTunnels[i][(nbArticulationTunnel - 2) * 2 + 1]; + var y = tbTunnels[i][(nbArticulationTunnel - 2) * 2 + 2]; + var x2 = tbTunnels[i][(nbArticulationTunnel - 2) * 2 + 3]; // pour le premier angle + var y2 = tbTunnels[i][(nbArticulationTunnel - 2) * 2 + 4]; // pour le premier angle + var distX = x2 - x; + var distY = y2 - y; + x = x2; + y = y2; + var angle = 0; + var modifAngleArr = (Math.atan2(distY, distX) / Math.PI) * 180; + } + var largX = 0; + var hauty = 0; + var type = "tunnel"; + var modifXDep = 0; + var modifYDep = 0; + var modifXArr = 0; + var modifYArr = 0; + + //calcul de l'angle de la table + var longTraj = 0; + + if (i == 0) { + longueurTotal = longueurTotal + longueurTunnel(i) * pixel; + } + distObstTrajectoire = distMod; // distance de la trajectoire + } else { + distObstTrajectoire = distMod; // distance de la trajectoire + var x = getCanvasX(i); + var y = getCanvasY(i); + var largX = getXCliquable(i); + var hauty = getYCliquable(i); + var type = getType(i); + + // conversion en fonction du sens de départ + if (sens == 1) { + var modifXDep = getModXTrajSortie(i); + var modifYDep = getModYTrajSortie(i); + var modifAngleArr = angleMod; + var longTraj = getDistTrajCentre(i); + var angle = -180 - getAngle(i); + } else { + var modifXDep = getModXTrajEntree(i); + var modifYDep = getModYTrajEntree(i); + var modifAngleArr = angleMod; + var longTraj = getDistTrajCentre(i); + var angle = -getAngle(i); + } + } + if (ordreObst[j + 1][1] == "tunnel") { + if (sensSui == 1) { + var xSui = tbTunnels[iSui][1]; + var ySui = tbTunnels[iSui][2]; + var xSui2 = tbTunnels[iSui][3]; // pour le premier angle + var ySui2 = tbTunnels[iSui][4]; // pour le premier angle + var distX = xSui - xSui2; + var distY = ySui - ySui2; + var angleSui = -90; + var modifAngleArrSui = + (Math.atan2(distY, distX) / Math.PI) * 180 - 90; + } else { + var xSui = tbTunnels[iSui][(nbArticulationTunnel - 2) * 2 + 1]; + var ySui = tbTunnels[iSui][(nbArticulationTunnel - 2) * 2 + 2]; + var xSui2 = tbTunnels[iSui][(nbArticulationTunnel - 2) * 2 + 3]; // pour le premier angle + var ySui2 = tbTunnels[iSui][(nbArticulationTunnel - 2) * 2 + 4]; // pour le premier angle + var distX = xSui2 - xSui; + var distY = ySui2 - ySui; + xSui = xSui2; + ySui = ySui2; + var angleSui = 180; + var modifAngleArrSui = + (Math.atan2(distY, distX) / Math.PI) * 180; + } + /* + var xSui=tbTunnels[iSui][(nbArticulationTunnel-1)*2+1]; + var ySui=tbTunnels[iSui][(nbArticulationTunnel-1)*2+2]; + var xSui2=tbTunnels[iSui][(nbArticulationTunnel-2)*2+1]; + var ySui2=tbTunnels[iSui][(nbArticulationTunnel-2)*2+2];*/ + var largXSui = 0; + var largYSui = 0; + //var angleSui=90; + var typeSui = "tunnel"; + var modifXDepSui = 0; + var modifYDepSui = 0; + var modifXArrSui = 0; + var modifYArrSui = 0; + + //var modifAngleArrSui=0; + var longTrajSui = 0; + longueurTotal = longueurTotal + longueurTunnel(iSui) * pixel; + distObstTrajectoireSui = distModSui; // distance de la trajectoire + } else { + distObstTrajectoireSui = distModSui; // distance de la trajectoire + + var xSui = getCanvasX(iSui); + var ySui = getCanvasY(iSui); + var largXSui = getXCliquable(iSui); + var largYSui = getYCliquable(iSui); + var typeSui = getType(iSui); + + if (sensSui == 1) { + var modifXArrSui = getModXTrajSortie(iSui); + var modifYArrSui = getModYTrajSortie(iSui); + var modifAngleArrSui = angleModSui; + var longTrajSui = getDistTrajCentre(iSui); + var angleSui = -180 + getAngle(iSui); + } else { + var modifXArrSui = getModXTrajEntree(iSui); + var modifYArrSui = getModYTrajEntree(iSui); + var modifAngleArrSui = angleModSui; + var longTrajSui = getDistTrajCentre(iSui); + var angleSui = getAngle(iSui); + } + } + + if (j == 0) { + longueurTotal = longueurTotal + longTraj * pixel; + } + longueurTotal = longueurTotal + longTrajSui * pixel; + + angle = -angle + modifAngleArr; + angleSui = angleSui + modifAngleArrSui; + + var departX = + x + + modifXDep / 2 + + (Math.cos((angle / 180) * Math.PI) * longTraj) / 2; + var departY = + y + + modifYDep / 2 + + (Math.sin((angle / 180) * Math.PI) * longTraj) / 2; + var interDepX = + x + + modifXDep / 2 + + Math.cos((angle / 180) * Math.PI) * + (longTraj / 2 + distObstTrajectoire); + var interDepY = + y + + modifYDep / 2 + + Math.sin((angle / 180) * Math.PI) * + (longTraj / 2 + distObstTrajectoire); + + if (typeSui == "table") { + //calcul de l'angle de la table + var distX = xSui + largXSui / 2 - interDepX; + var distY = interDepY - ySui + largYSui / 2; + var angleSui = (Math.atan2(distY, distX) / Math.PI) * -180; + } + + //var arriveX = xSui+modifXArrSui/2+Math.cos(angleSui/180*Math.PI)*(-longTrajSui/2); + //var arriveY= ySui+modifYArrSui/2+Math.sin(angleSui/180*Math.PI)*(-longTrajSui/2); + + var arriveX = + xSui + + modifXArrSui / 2 + + Math.cos((angleSui / 180) * Math.PI) * (-longTrajSui / 2); + var arriveY = + ySui + + modifYArrSui / 2 + + Math.sin((angleSui / 180) * Math.PI) * (-longTrajSui / 2); + + var interArrX = + xSui + + modifXArrSui / 2 + + Math.cos((angleSui / 180) * Math.PI) * + (-longTrajSui / 2 - distObstTrajectoireSui); + var interArrY = + ySui + + modifYArrSui / 2 + + Math.sin((angleSui / 180) * Math.PI) * + (-longTrajSui / 2 - distObstTrajectoireSui); + if (type == "table") { + //calcul de l'angle de la table + var distX = interArrX - x - largX / 2; + var distY = interArrY - y - hauty / 2; + + var angle = (Math.atan2(distY, distX) / Math.PI) * +180; + departX = + x + + modifXDep / 2 + + (Math.cos((angle / 180) * Math.PI) * longTraj) / 2; + departY = + y + + modifYDep / 2 + + (Math.sin((angle / 180) * Math.PI) * longTraj) / 2; + interDepX = + x + + modifXDep / 2 + + Math.cos((angle / 180) * Math.PI) * + (longTraj / 2 + distObstTrajectoire); + interDepY = + y + + modifYDep / 2 + + Math.sin((angle / 180) * Math.PI) * + (longTraj / 2 + distObstTrajectoire); + } + var xText = Math.round((interDepX + interArrX) / 2); + var yText = Math.round((interArrY + interDepY) / 2); + + /////////////////////////// modification des trajectoires /////////////////////// + if (document.getElementById("ModifierTrajectoires").checked) { + if (modifTrajId == j && modifTrajDepArr == "dep") { + interDepY = canvas_y - decalY; + interDepX = canvas_x - decalX; + var xModif = departX - interDepX; + var yModif = departY - interDepY; + var modifAngle = (Math.atan2(yModif, xModif) / Math.PI) * 180; + var modifDist = Math.sqrt( + Math.pow(xModif, 2) + Math.pow(yModif, 2) + ); + + if ( + type == "haie" || + type == "oxer" || + type == "mur" || + type == "longueur" + ) { + var angleOrigine = getAngle(i); + var angleTrajReel = modifAngle; + var angleTrajRelatif; + + if (angleOrigine >= 0 && angleTrajReel >= 0) { + angleTrajRelatif = angleTrajReel - angleOrigine; + } else if (angleOrigine >= 0 && angleTrajReel <= 0) { + angleTrajRelatif = angleTrajReel - angleOrigine; + } else if (angleOrigine <= 0 && angleTrajReel <= 0) { + angleTrajRelatif = angleTrajReel - angleOrigine; + } else if (angleOrigine <= 0 && angleTrajReel >= 0) { + angleTrajRelatif = angleTrajReel - angleOrigine; + } + + var oldAngleMod = angleMod; + if (sens == 1) { + if (angleMod > 0) { + angleMod = angleTrajRelatif - 360; + } else { + angleMod = angleTrajRelatif + 360; + } + } else { + if (angleMod > 0) { + angleMod = angleTrajRelatif - 180; + } else { + angleMod = angleTrajRelatif + 180; + } + } + } + + distMod = modifDist; + } else if (modifTrajId == j + 1 && modifTrajDepArr == "arr") { + interArrY = canvas_y - decalY; + interArrX = canvas_x - decalX; + var xModif = arriveX - interArrX; + var yModif = arriveY - interArrY; + var modifAngle = (Math.atan2(yModif, xModif) / Math.PI) * 180; + var modifDist = Math.sqrt( + Math.pow(xModif, 2) + Math.pow(yModif, 2) + ); + + if ( + typeSui == "haie" || + typeSui == "oxer" || + typeSui == "mur" || + typeSui == "longueur" + ) { + var angleOrigine = getAngle(iSui); + var angleTrajReel = modifAngle; + var angleTrajRelatif; + + if (angleOrigine >= 0 && angleTrajReel >= 0) { + angleTrajRelatif = angleTrajReel - angleOrigine; + } else if (angleOrigine >= 0 && angleTrajReel <= 0) { + angleTrajRelatif = angleTrajReel - angleOrigine; + } else if (angleOrigine <= 0 && angleTrajReel <= 0) { + angleTrajRelatif = angleTrajReel - angleOrigine; + } else if (angleOrigine <= 0 && angleTrajReel >= 0) { + angleTrajRelatif = angleTrajReel - angleOrigine; + } + + angleModSui = angleTrajRelatif; + + if (sensSui == 1) { + if (angleModSui > 0) { + angleModSui = angleTrajRelatif - 180; + } else { + angleModSui = angleTrajRelatif + 180; + } + } + } + distModSui = modifDist; + } + } + + var longueurBez = bezierSize( + departX, + departY, + interDepX, + interDepY, + interArrX, + interArrY, + arriveX, + arriveY + ); + + longueurMetre = longueurBez * pixel; + longueurTotal = longueurTotal + longueurMetre; + + context.strokeStyle = COLOR_TRACE_OK; + + //ralentissement de la vitesse en fonction de l'obstacle : + + if (type == "haie") { + vitesseTraj = vitesseTraj * 0.75; + } else if (type == "oxer") { + vitesseTraj = vitesseTraj * 0.65; + } else if (type == "mur") { + vitesseTraj = vitesseTraj * 0.7; + } else if (type == "pneu") { + vitesseTraj = vitesseTraj * 0.7; + } else if (type == "table") { + vitesseTraj = 0; + } else if (type == "balancoire") { + vitesseTraj = vitesseTraj * 0.2; + } else if (type == "chaussette") { + vitesseTraj = vitesseTraj * 0.5; + } else if (type == "slalom") { + vitesseTraj = vitMax * 0.3; + } else if (type == "slalom6") { + vitesseTraj = vitMax * 0.3; + } else if (type == "passerelle") { + //running + if (document.getElementById("2on2off").checked) { + vitesseTraj = vitMax * 0.2; + } else { + vitesseTraj = vitMax * 0.9; + } + } else if (type == "palissade") { + if (document.getElementById("2on2off").checked) { + vitesseTraj = vitMax * 0.2; + } else { + vitesseTraj = vitMax * 0.7; + } + } else if (type == "longueur") { + vitesseTraj = vitesseTraj * 0.9; + } else if (type == "tunnel") { + vitesseTraj = vitesseTraj * 0.9; + } + + customBezier( + departX, + departY, + interDepX, + interDepY, + interArrX, + interArrY, + arriveX, + arriveY + ); + + // FLECHE + context.save(); + context.translate(arriveX, arriveY); //translate to center of shape + context.rotate((Math.PI / 180) * angleSui); //rotate 25 degrees + context.translate(-arriveX, -arriveY); //translate center back to 0,0 + + context.beginPath(); + context.moveTo(arriveX - 5, arriveY + 4); + context.lineTo(arriveX, arriveY); + context.lineTo(arriveX - 5, arriveY - 4); + context.closePath(); + context.fillStyle = COLOR_TRACE_OK; //blanc + context.stroke(); + context.fill(); + + context.restore(); + ////////// + context.fillStyle = COLOR_TERRAIN; + context.fillStyle = COLOR_TEXT_UNDER; + context.fillRect(xText - 15, yText - 8, 25, 12); + context.fillStyle = COLOR_TEXT; + context.fillText( + Math.round(longueurMetre * unite, 3) / 100, + xText - 14, + yText + ); + //TPS = Math.round(longueurTotal)/100/document.getElementById('vitesseEvo').value + + // modification des trajectoires + if (document.getElementById("ModifierTrajectoires").checked) { + ordreObst[j][3] = interDepX; + ordreObst[j][4] = interDepY; + ordreObst[j + 1][5] = interArrX; + ordreObst[j + 1][6] = interArrY; + if (modifTrajId == j && modifTrajDepArr == "dep") { + if (sens == 0) { + ordreObst[j][8] = distMod; + } else { + ordreObst[j][10] = distMod; + } + } else if (modifTrajId == j + 1 && modifTrajDepArr == "arr") { + if (sensSui == 0) { + ordreObst[j + 1][10] = distModSui; + } else { + ordreObst[j + 1][8] = distModSui; + } + } + /* A MODIFIER SI IL Y A DES ANGLES NON DEPENDANTS ENTRE ENTREE ET SORTIE + if(sens==0){ + + }else{ + + } + if(sensSui==0){ + + }else{ + + }*/ + ordreObst[j][7] = angleMod; + ordreObst[j][9] = angleMod; + ordreObst[j + 1][9] = angleModSui; + ordreObst[j + 1][7] = angleModSui; + + context.fillStyle = COLOR_JAUNE; + context.strokeStyle = COLOR_TRACE_TRANSPARENT; + // tracé des points jaune pour modif de trajectoires + // vérification de leur distance avec le pointeur de la souris + if ( + Math.abs(interDepX - canvas_x) + + Math.abs(interDepY - canvas_y) < + 200 + ) { + context.beginPath(); + context.arc(interDepX, interDepY, 4, 0, 2 * Math.PI); + context.stroke(); + context.fill(); + context.beginPath(); + context.moveTo(departX, departY); + context.lineTo(interDepX, interDepY); + context.stroke(); + } + if ( + Math.abs(interArrX - canvas_x) + + Math.abs(interArrY - canvas_y) < + 200 + ) { + context.beginPath(); + context.moveTo(arriveX, arriveY); + context.lineTo(interArrX, interArrY); + context.stroke(); + context.beginPath(); + context.arc(interArrX, interArrY, 4, 0, 2 * Math.PI); + context.stroke(); + context.fill(); + } + } + } + longueurTotal = longueurTotal * unite; + context.fillStyle = COLOR_TEXT_UNDER; + rect(canvasSizeX / 4, canvasSizeY - 30, canvasSizeX / 2, 30); +} +function bezierSize(x1, y1, x1B, y1B, x2, y2, x2B, y2B) { + var inc = 50; + var length = 0; + var t = 0; + var ptX = 0; + var ptY = 0; + var prevPtX = 0; + var prevPtY = 0; + var xB; + var yY; + for (var i = 0; i < inc; i++) { + t = i / inc; + var t1 = 1.0 - t; + var t1_3 = t1 * t1 * t1; + var t1_3a = 3 * t * (t1 * t1); + var t1_3b = 3 * (t * t) * t1; + var t1_3c = t * t * t; + ptX = x1 * t1_3 + t1_3a * x1B + t1_3b * x2 + t1_3c * x2B; + ptY = y1 * t1_3 + t1_3a * y1B + t1_3b * y2 + t1_3c * y2B; + if (i > 0) { + xB = ptX - prevPtX; + yY = ptY - prevPtY; + length = length + Math.sqrt(xB * xB + yY * yY); + } + prevPtX = ptX; + prevPtY = ptY; + } + return length; +} +function diffAngle(firstAngle, secondAngle) { + var difference = secondAngle - firstAngle; + if (difference < -180) { + difference += 360; + } + if (difference > 180) { + difference -= 360; + } + if (difference > 0) { + difference -= ANGLE_MIN; + } else { + difference += ANGLE_MIN; + } + return difference; +} + +function newTrajectoire() { + nextNumber = 1; + listeNumero = Array(); + genererParcours(); +} \ No newline at end of file diff --git a/static/ui/app/src/visual.js b/static/ui/app/src/visual.js new file mode 100644 index 0000000..946650a --- /dev/null +++ b/static/ui/app/src/visual.js @@ -0,0 +1,1321 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////GENERATION VISUELLE DU TERRAIN/////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +function genererParcours() { + genererTerrain(); + genererTrajectoires(); + genererObstacles(); + genererNumeros(); + genererMarges(); + genererInfos(); +} +var gen = 0; +function genererTerrain() { + context.strokeStyle = COLOR_TEXT; + context.fillStyle = COLOR_TERRAIN; + context.fillRect(0, 0, canvasSizeX, canvasSizeY); + context.beginPath(); + context.strokeStyle = COLOR_GRILLE; + for ( + var i = MARGE + TAILLE_GRILLAGE; + i < canvasSizeY - MARGE * 2; + i += TAILLE_GRILLAGE + ) { + context.moveTo(0 + MARGE, i); + context.lineTo(canvasSizeX - MARGE, i); + } + for ( + var j = MARGE + TAILLE_GRILLAGE; + j < canvasSizeX - MARGE; + j += TAILLE_GRILLAGE + ) { + context.moveTo(j, 0 + MARGE); + context.lineTo(j, canvasSizeY - MARGE * 2); + } + context.stroke(); + + + var oldStroke = context.strokeStyle; + var oldFill = context.fillStyle; + + // Zonas de seguridad de montaje + // Se define un margen de seguridad de montaje de 1+1 metro + // ya que cuando uno monta no queda como en el papel y así se + // tiene margen tanto de tolerancia como para ampliar si se pudiera + var margin = ((100 / pixel) * 1) / unite; // ancho de zona = 1 metro + // Zona roja + if (document.getElementById("margen-rojo").checked) { + context.strokeStyle = 'rgba(255,0,0,0.25)'; + context.fillStyle = 'rgba(255,0,0,0.25)'; + context.fillRect(0+MARGE, 0+MARGE, canvasSizeX-2*MARGE, margin); + context.fillRect(0+MARGE, 0+MARGE+margin, margin, canvasSizeY-3*MARGE-2*margin); + context.fillRect(canvasSizeX-MARGE-margin, 0+MARGE+margin, margin, canvasSizeY-3*MARGE-2*margin); + context.fillRect(0+MARGE, canvasSizeY-2*MARGE-margin, canvasSizeX-2*MARGE, margin); + } + // Zona amarilla + if (document.getElementById("margen-amarillo").checked) { + context.strokeStyle = 'rgba(246,255,0,0.25)'; + context.fillStyle = 'rgba(246,255,0,0.25)'; + context.fillRect(0+MARGE+margin, 0+MARGE+margin, canvasSizeX-2*MARGE-2*margin, margin); + context.fillRect(0+MARGE+margin, 0+MARGE+2*margin, margin, canvasSizeY-3*MARGE-4*margin); + context.fillRect(canvasSizeX-MARGE-2*margin, 0+MARGE+2*margin, margin, canvasSizeY-3*MARGE-4*margin); + context.fillRect(0+MARGE+margin, canvasSizeY-2*MARGE-2*margin, canvasSizeX-2*MARGE-2*margin, margin); + } + + context.strokeStyle = oldStroke; + context.fillStyle = oldFill; + +} +function genererInfos() { + //context.fillText(titre,MARGE,canvasSizeY); + context.fillStyle = COLOR_TEXT; + + context.fillText(titre, MARGE, canvasSizeY - 20); + + if (unite == 1) { + idUnite = 34; + } else if (unite == 1.093613) { + idUnite = 35; + } else { + //3.28084 + idUnite = 36; + } + if (document.getElementById("AfficherDistance").checked) { + context.fillText( + langues[idLg][8] + + " : " + + Math.round(longueurTotal) / 100 + + " " + + langues[idLg][idUnite], + canvasSizeX - MARGE - 150, + canvasSizeY - 20 + ); + } + context.fillText( + "www.AgilityMaps.com ", + canvasSizeX - MARGE - 150, + canvasSizeY - 8 + ); + var idUnite; + + if (auteur != "") { + context.fillText( + langues[idLg][9] + " : " + auteur, + MARGE, + canvasSizeY - 8 + ); + } +} +function genererNumeros() { + if (!shownumbers) { + return; + } + + context.font = "7pt Calibri"; + for (var i = 1; i < nextNumber; i++) { + context.fillStyle = COLOR_BLANC; + context.strokeStyle = COLOR_TEXT; + rect( + listeNumero[i][1] - LARGEUR_NUMERO / 2, + listeNumero[i][2] - HAUTEUR_NUMERO / 2, + LARGEUR_NUMERO, + HAUTEUR_NUMERO + ); + context.fillStyle = COLOR_TEXT; + if (i < 10) { + context.fillText( + listeNumero[i][0], + listeNumero[i][1] + 4 - LARGEUR_NUMERO / 2, + listeNumero[i][2] + 7 - HAUTEUR_NUMERO / 2 + ); + } else { + context.fillText( + listeNumero[i][0], + listeNumero[i][1] + 1 - LARGEUR_NUMERO / 2, + listeNumero[i][2] + 7 - HAUTEUR_NUMERO / 2 + ); + } + } + for (var i = 1; i < nextNumber2; i++) { + context.fillStyle = COLOR_METAL; + context.strokeStyle = COLOR_TEXT; + rect( + listeNumero2[i][1] - LARGEUR_NUMERO / 2, + listeNumero2[i][2] - HAUTEUR_NUMERO / 2, + LARGEUR_NUMERO, + HAUTEUR_NUMERO + ); + context.fillStyle = COLOR_TEXT; + if (i < 10) { + context.fillText( + listeNumero2[i][0], + listeNumero2[i][1] + 4 - LARGEUR_NUMERO / 2, + listeNumero2[i][2] + 7 - HAUTEUR_NUMERO / 2 + ); + } else { + context.fillText( + listeNumero2[i][0], + listeNumero2[i][1] + 1 - LARGEUR_NUMERO / 2, + listeNumero2[i][2] + 7 - HAUTEUR_NUMERO / 2 + ); + } + } + for (var i = 1; i < nextNumber3; i++) { + context.fillStyle = COLOR_TEXT; + context.strokeStyle = COLOR_BLANC; + rect( + listeNumero3[i][1] - LARGEUR_NUMERO / 2, + listeNumero3[i][2] - HAUTEUR_NUMERO / 2, + LARGEUR_NUMERO, + HAUTEUR_NUMERO + ); + context.fillStyle = COLOR_BLANC; + if (i < 10) { + context.fillText( + listeNumero3[i][0], + listeNumero3[i][1] + 4 - LARGEUR_NUMERO / 2, + listeNumero3[i][2] + 7 - HAUTEUR_NUMERO / 2 + ); + } else { + context.fillText( + listeNumero3[i][0], + listeNumero3[i][1] + 1 - LARGEUR_NUMERO / 2, + listeNumero3[i][2] + 7 - HAUTEUR_NUMERO / 2 + ); + } + } +} +function genererMarges() { + context.strokeStyle = COLOR_CONTOURS; + + // contours + context.fillStyle = COLOR_BLANC; + context.fillRect(0, 0, canvasSizeX, MARGE); + context.fillRect(0, 0, MARGE, canvasSizeY); + + context.fillRect(canvasSizeX - MARGE, 0, MARGE, canvasSizeY); + context.fillRect(0, canvasSizeY - MARGE * 2, canvasSizeX, MARGE * 2); + + context.beginPath(); + + context.moveTo(MARGE, MARGE); + context.lineTo(canvasSizeX - MARGE, MARGE); + context.lineTo(canvasSizeX - MARGE, canvasSizeY - MARGE * 2); + context.lineTo(MARGE, canvasSizeY - MARGE * 2); + context.lineTo(MARGE, MARGE); + context.stroke(); + context.strokeStyle = COLOR_GRILLE; + + context.fillStyle = COLOR_TEXT; + context.beginPath(); + context.lineWidth = 1; + context.fillText(0, MARGE - 10, MARGE - 5); + //context.fillText(0,canvasSizeX-MARGE+5,MARGE+4); + //context.fillText(0,MARGE-6,MARGE-5); + //context.fillText(0,MARGE-6,canvasSizeY-MARGE*2+15); + + for ( + var i = MARGE + TAILLE_GRILLAGE; + i <= canvasSizeY - MARGE * 2 + 1; + i += TAILLE_GRILLAGE + ) { + context.fillText( + Math.round((((i - MARGE) * pixel) / 100) * unite), + MARGE - 15, + i + 4 + ); + context.fillText( + Math.round((((i - MARGE) * pixel) / 100) * unite), + canvasSizeX - MARGE + 5, + i + 4 + ); + } + for ( + var j = MARGE + TAILLE_GRILLAGE; + j <= canvasSizeX - MARGE + 1; + j += TAILLE_GRILLAGE + ) { + context.fillText( + Math.round((((j - MARGE) * pixel) / 100) * unite), + j - 6, + MARGE - 5 + ); + context.fillText( + Math.round((((j - MARGE) * pixel) / 100) * unite), + j - 6, + canvasSizeY - MARGE * 2 + 15 + ); + } + context.stroke(); +} +function genererObstacles() { + if (selNumeroId != -1) { + context.strokeStyle = "#ffff00"; + context.beginPath(); + context.lineWidth = 1; + context.moveTo(xp, yp); + context.lineTo(xpp, ypp); + context.stroke(); + } + context.strokeStyle = COLOR_CONTOURS; + /////////////////////////////// affichage des tunnels ////////////////////////////////////////// + for (var j = 0; j < idTunnel; j++) { + var idT = tbTunnels[j][0]; + // jonction entre les morceaux de tunels + context.save(); + for (var art = 1; art < nbArticulationTunnel - 1; art++) { + context.fillStyle = COLOR_1; + context.strokeStyle = COLOR_CONTOURS; + context.beginPath(); + context.arc( + tbTunnels[j][art * 2 + 1], + tbTunnels[j][art * 2 + 2], + largeurTunnel / 2, + 0, + 2 * Math.PI + ); //point d'encrage + context.fill(); + context.translate(0.5, 0.5); + context.stroke(); + context.translate(-0.5, -0.5); + } + context.restore(); + for (var art = 0; art < nbArticulationTunnel; art++) { + if (art + 1 < nbArticulationTunnel) { + x = art * 2 + 1; + y = art * 2 + 2; + x2 = art * 2 + 3; + y2 = art * 2 + 4; + //calcul de l'angle et de la distance avec le prochain point + dist = Math.sqrt( + Math.pow(tbTunnels[j][x] - tbTunnels[j][x2], 2) + + Math.pow(tbTunnels[j][y] - tbTunnels[j][y2], 2) + ); + angle = + (Math.atan2( + tbTunnels[j][y] - tbTunnels[j][y2], + tbTunnels[j][x] - tbTunnels[j][x2] + ) / + Math.PI) * + 180; + context.fillStyle = COLOR_1; + context.save(); + context.translate( + tbTunnels[j][art * 2 + 1], + tbTunnels[j][art * 2 + 2] + ); //translate to center of shape + context.rotate((Math.PI / 180) * angle); //rotate 25 degrees + context.translate( + -tbTunnels[j][art * 2 + 1], + -tbTunnels[j][art * 2 + 2] + ); //translate center back to 0,0 + context.strokeStyle = COLOR_CONTOURS; + context.translate(0.5, 0.5); + context.strokeRect( + tbTunnels[j][x], + tbTunnels[j][y] - largeurTunnel / 2 - 1, + -dist, + 1 + ); //tunnel + context.strokeRect( + tbTunnels[j][x], + tbTunnels[j][y] + largeurTunnel / 2 - 1, + -dist, + 1 + ); //tunnel + context.translate(-0.5, -0.5); + context.fillRect( + tbTunnels[j][x], + tbTunnels[j][y] - largeurTunnel / 2, + -dist, + largeurTunnel + ); //tunnel + context.fillStyle = COLOR_1b; + context.strokeStyle = COLOR_1b; + context.fillRect( + tbTunnels[j][x] - dist / 5, + tbTunnels[j][y] - largeurTunnel / 2, + 1, + largeurTunnel + ); //tunnel + context.fillRect( + tbTunnels[j][x] - dist / 5 - dist / 5, + tbTunnels[j][y] - largeurTunnel / 2, + 1, + largeurTunnel + ); //tunnel + context.fillRect( + tbTunnels[j][x] - dist / 5 - dist / 5 - dist / 5, + tbTunnels[j][y] - largeurTunnel / 2, + 1, + largeurTunnel + ); //tunnel + context.fillRect( + tbTunnels[j][x] - dist / 5 - dist / 5 - dist / 5 - dist / 5, + tbTunnels[j][y] - largeurTunnel / 2, + 1, + largeurTunnel + ); //tunnel + context.strokeRect( + tbTunnels[j][x], + tbTunnels[j][y] - largeurTunnel / 2, + -dist, + largeurTunnel + ); //tunnel + context.restore(); + } + if ( + overTunnelComplet != -1 || + overPointTunnel != -1 || + moveTunnelComplet != -1 || + overTunnelId != -1 + ) { + context.fillStyle = COLOR_3; + context.strokeStyle = COLOR_CONTOURS; + context.beginPath(); + context.arc( + tbTunnels[j][art * 2 + 1], + tbTunnels[j][art * 2 + 2], + 3, + 0, + 2 * Math.PI + ); //point d'encrage + context.fill(); + context.stroke(); + } + } + } + + //////////////////////////////////////////// affichage des autres éléments ////////////////////////////////////////// + for (var i = 0; i < id; i++) { + var x = getCanvasX(i); + var y = getCanvasY(i); + var largx = getXCliquable(i); + var hauty = getYCliquable(i); + var type = getType(i); + var angle = getAngle(i); + var sens = getSens(i); + + context.fillStyle = COLOR_1; + + context.save(); + context.translate(largx / 2 + x, hauty / 2 + y); //translate to center of shape + context.rotate((Math.PI / 180) * angle); //rotate 25 degrees + context.translate(-largx / 2 - x, -hauty / 2 - y); //translate center back to 0,0 + + // Draw bubbles to get visually the distance around + if ( selObst==i ) { + // console.log(type+" "+selObst); + if (type=="haie" || type=="oxer" || type=="mur" || type=="longueur" || type=="table" || type=="pneu" ) { + bubblesZone(x+largx/2,y+hauty/2); + } else if (type!="conducteur" && type!="chien") { + // bubbles from start to end + bubblesZone(x,y+hauty/2,largx); + } + } + + if (type == "haie") { + dessinerHaie(x, y, largx); + } else if (type == "oxer") { + dessinerOxer(x, y, largx); + } else if (type == "passerelle") { + dessinerPasserelle(x, y, largx, hauty); + } else if (type == "balancoire") { + dessinerBalance(x, y, largx, hauty); + } else if (type == "palissade") { + dessinerPalissade(x, y, largx, hauty); + } else if (type == "slalom") { + dessinerSlalom(x, y, largx, hauty); + } else if (type == "slalom6") { + dessinerSlalom6(x, y, largx, hauty); + } else if (type == "chaussette") { + dessinerChaussette(x, y, largx, hauty); + } else if (type == "longueur") { + dessinerLongueur(x, y, largx); + } else if (type == "mur") { + dessinerMur(x, y, largx, hauty); + } else if (type == "table") { + dessinerTable(x, y); + } else if (type == "pneu") { + dessinerPneu(x, y, largx, hauty); + } + context.fillStyle = "#FFFF00"; //jaune + context.restore(); + if (overObject == i) { + dessinerOverObstacle(x, y, largx, hauty, angle, i); + } + } + + //////////////////////////////////////////// affichage des conducteurs et chiens ////////////////////////////////////////// + for (var i = 0; i < id; i++) { + var x = getCanvasX(i); + var y = getCanvasY(i); + var largx = getXCliquable(i); + var hauty = getYCliquable(i); + var type = getType(i); + var angle = getAngle(i); + var sens = getSens(i); + + context.fillStyle = COLOR_1; + + context.save(); + context.translate(largx / 2 + x, hauty / 2 + y); //translate to center of shape + context.rotate((Math.PI / 180) * angle); //rotate 25 degrees + context.translate(-largx / 2 - x, -hauty / 2 - y); //translate center back to 0,0 + + if ( + type == "conducteur" && + document.getElementById("AfficherConducteur").checked + ) { + dessinerConducteur(x, y, largx, hauty, sens); + if ( selObst==i ) { judgeLines(x+largx/2, y+hauty/2) } + } else if ( + type == "chien" && + document.getElementById("AfficherConducteur").checked + ) { + dessinerChien(x, y, largx, hauty); + } + context.fillStyle = "#FFFF00"; //jaune + context.restore(); + if (overObject == i) { + dessinerOverObstacle(x, y, largx, hauty, angle, i); + } + } + + //afficherTest(); +} +function bubblesZone (x, y, larg = 0) { + // Draw 4 "bubbles" around and obstacle to visually get the distance from the center of this to obstacles around it + // Reference points in contact zones are the start and end of the obstacle + // Distances are 3.5 (red filled), 5 (yellow), 7 (green) and 8 (red-unfilled) meters + var first = ((100 / pixel) * 3.5) / unite; + var second = ((100 / pixel) * 5) / unite; + var third = ((100 / pixel) * 7) / unite; + var forth = ((100 / pixel) * 8) / unite; + if ( larg==0 ) { + bubble(x,y,first,'rgba(255,0,0,0.50)','rgba(255,0,0,0.10)'); + bubble(x,y,second,'rgba(246,255,0,0.50)','rgba(246,255,0,0.10)'); + bubble(x,y,third,'rgba(0,255,0,0.50)','rgba(0,255,0,0.10)'); + bubble(x,y,forth,'rgba(255,0,0,0.50)','rgba(255,255,255,0)'); + } else { + bubbleBig(x,y,larg,first,'rgba(255,0,0,0.50)','rgba(255,0,0,0.10)'); + bubbleBig(x,y,larg,second,'rgba(246,255,0,0.50)','rgba(246,255,0,0.10)'); + bubbleBig(x,y,larg,third,'rgba(0,255,0,0.50)','rgba(0,255,0,0.10)'); + bubbleBig(x,y,larg,forth,'rgba(255,0,0,0.50)','rgba(255,255,255,0)'); + } + //cross(x,y); +} + +function judgeLines (x,y) { + // Draw 3 lines 4 meters width at 2, 3 and 6 meters from "conducteur/judge" + var width = ((100 / pixel) * 2) / unite; // 2 meters + var first = ((100 / pixel) * 2) / unite; // 2 meters + var second = ((100 / pixel) * 3) / unite; // 3 meters + var third = ((100 / pixel) * 6) / unite; // 6 meters + context.save(); + context.beginPath(); + context.lineWidth = 1; + context.strokeStyle = 'rgba(255,0,0,0.75)'; + context.moveTo(x-width,y-first); + context.lineTo(x+width,y-first); + context.stroke(); + context.beginPath(); + context.moveTo(x-width,y-second); + context.lineTo(x+width,y-second); + context.stroke(); + context.beginPath(); + context.moveTo(x-width,y-third); + context.lineTo(x+width,y-third); + context.stroke(); + context.restore(); +} + + +function cross (x,y) { + context.save(); + context.beginPath(); + context.moveTo(0,y); + context.lineTo(50,y); + context.moveTo(x,0); + context.lineTo(x,50); + context.lineWidth = 3; + context.strokeStyle = 'rgba(255,0,0,0.50)'; + context.stroke(); + context.restore(); +} + +function bubble(x, y, radius, color, fill) { + context.save(); + context.beginPath(); + context.arc(x, y, radius, 0, 2 * Math.PI, false); + context.fillStyle = fill; + context.fill(); + context.lineWidth = 1; + context.strokeStyle = color; + context.stroke(); + context.restore(); +} + +function bubbleBig(x, y, larg, radius, color, fill) { + context.save(); + + context.fillStyle = fill; + context.lineWidth = 1; + context.strokeStyle = color; + // Left + context.beginPath(); + context.arc(x, y, radius, Math.PI/2, 3*Math.PI/2, false); + // context.arc(x, y, radius, 0, 2*Math.PI, false); + context.fill(); + context.stroke(); + + // Right + context.beginPath(); + context.arc(x+larg, y, radius, 3*Math.PI/2, Math.PI/2, false); + // context.arc(x+larg, y, radius, 0, 2*Math.PI, false); + context.fill(); + context.stroke(); + // Middle + context.fillRect(x, y-radius, larg, radius*2); + context.beginPath(); + context.moveTo(x, y-radius); + context.lineTo(x+larg, y-radius); + context.stroke(); + context.beginPath(); + context.moveTo(x, y+radius); + context.lineTo(x+larg, y+radius); + context.stroke(); + + // change opacity for inner limits + context.strokeStyle = color.replace(/[^,]+(?=\))/, '0.10');; + context.beginPath(); + context.arc(x, y, radius, 3*Math.PI/2, Math.PI/2, false); + context.stroke(); + context.beginPath(); + context.arc(x+larg, y, radius, Math.PI/2, 3*Math.PI/2, false); + context.stroke(); + + context.restore(); +} + +function rectBump(x, y, larg, haut) { + context.translate(-0.5, -0.5); + context.strokeRect(x, y, larg, haut); //mur + context.translate(0.5, 0.5); + context.fillRect(x, y, larg, haut); //mur +} +function rect(x, y, larg, haut) { + context.fillRect(x, y, larg, haut); //mur + context.translate(-0.5, -0.5); + context.strokeRect(x, y, larg, haut); //mur + context.translate(0.5, 0.5); +} + +function dessinerTable(x, y) { + context.fillStyle = COLOR_1; + context.strokeStyle = COLOR_CONTOURS; + rect(x, y, DIM_TABLE, DIM_TABLE); +} + +function dessinerPneu(x, y, largx, hauty) { + context.fillStyle = COLOR_1; + + context.beginPath(); + context.save(); + context.fillStyle = COLOR_2; + context.lineWidth = 2; + + context.strokeStyle = COLOR_JOINTURES; + context.arc(x + largx / 2 - 0.5, y + hauty / 2 - 0.5, 8, 0, 2 * Math.PI); + context.stroke(); + context.beginPath(); + context.strokeStyle = COLOR_JOINTURES; + context.arc(x + largx / 2 - 0.5, y + hauty / 2 - 0.5, 6, 0, 2 * Math.PI); + context.stroke(); + context.beginPath(); + context.strokeStyle = COLOR_2; + context.arc(x + largx / 2 - 0.5, y + hauty / 2 - 0.5, 7, 0, 2 * Math.PI); + //context.fill(); + context.stroke(); + context.restore(); + + rect(x + largx, y + hauty / 2, 5, 2.5); //barre + rect(x - 5, y + hauty / 2, 5, 2.5); //barre + + rect(x, y, 2.5, hauty); //barre + rect(x + largx - 2.5, y, 2.5, hauty); //barre + rect(x + 2.5, y, largx - 5, 2.5); //barre + rect(x + 2.5, y + hauty - 2.5, largx - 5, 2.5); //barre +} + +function dessinerMur(x, y, largx, hauty) { + context.fillStyle = COLOR_3; + context.strokeStyle = COLOR_CONTOURS; + rect(x, y, largx, hauty); + context.fillStyle = COLOR_1; + rect( + x, + y - (LARGEUR_MUR_TOUR / pixel / 2 - hauty / 2), + LARGEUR_MUR_TOUR / pixel, + LARGEUR_MUR_TOUR / pixel + ); + rect( + x + largx - LARGEUR_MUR_TOUR / pixel, + y - (LARGEUR_MUR_TOUR / pixel / 2 - hauty / 2), + LARGEUR_MUR_TOUR / pixel, + LARGEUR_MUR_TOUR / pixel + ); + context.fillStyle = COLOR_1b; + context.fillStyle = COLOR_1; + var largTuille = (largx - 30) / 3; + context.fillRect(x + 7, y + 0.5, 4.5, hauty - 2); //tuille + context.fillRect(x + 13, y + 0.5, 4.5, hauty - 2); //tuille + context.fillRect(x + 19, y + 0.5, 4.5, hauty - 2); //tuille + context.fillRect(x + 25, y + 0.5, 4.5, hauty - 2); //tuille +} + +function dessinerLongueur(x, y, largx) { + context.fillStyle = COLOR_2; + rect(x, y, largx, 4); + rect(x, y + 7, largx, 4); + rect(x, y + 14, largx, 4); + rect(x, y + 21, largx, 4); + context.fillStyle = COLOR_3; + + rect(x, y, largx, 4); + rect(x + 3, y + 7, largx - 6, 4); + rect(x + 6, y + 14, largx - 12, 4); + rect(x + 10, y + 21, largx - 20, 4); + + context.fillStyle = COLOR_2; + rect(x + 5, y, largx - 10, 4); + rect(x + 8, y + 7, largx - 16, 4); + rect(x + 11, y + 14, largx - 22, 4); + + context.fillStyle = COLOR_1; +} + +function dessinerChaussette(x, y, largx, hauty) { + context.fillStyle = COLOR_2; + context.strokeRect(x, y, 15, hauty); + context.fillRect(x, y, 15, hauty); + context.fillStyle = COLOR_1; + context.beginPath(); + context.moveTo(x + 15, y); + context.lineTo(x + largx, y - 5); + context.lineTo(x + largx, y + hauty + 5); + context.lineTo(x + 15, y + hauty); + context.closePath(x + 15, y + hauty + 5); + context.stroke(); + context.fill(); +} + +function dessinerSlalom(x, y, largx, hauty) { + context.fillStyle = COLOR_METAL; + context.fillRect(x, y, largx, hauty); + context.fillStyle = COLOR_2; + context.strokeStyle = COLOR_2b; + context.beginPath(); + context.arc( + x, + y + DIAM_BARRE_SLALOM / 2, + DIAM_BARRE_SLALOM, + 0, + 2 * Math.PI + ); + context.fill(); + context.stroke(); + context.beginPath(); + context.arc( + x + 20, + y + DIAM_BARRE_SLALOM / 2, + DIAM_BARRE_SLALOM, + 0, + 2 * Math.PI + ); + context.fill(); + context.stroke(); + context.beginPath(); + context.arc( + x + 40, + y + DIAM_BARRE_SLALOM / 2, + DIAM_BARRE_SLALOM, + 0, + 2 * Math.PI + ); + context.fill(); + context.stroke(); + context.beginPath(); + context.arc( + x + 60, + y + DIAM_BARRE_SLALOM / 2, + DIAM_BARRE_SLALOM, + 0, + 2 * Math.PI + ); + context.fill(); + context.stroke(); + context.beginPath(); + context.arc( + x + 80, + y + DIAM_BARRE_SLALOM / 2, + DIAM_BARRE_SLALOM, + 0, + 2 * Math.PI + ); + context.fill(); + context.stroke(); + context.beginPath(); + context.arc( + x + 100, + y + DIAM_BARRE_SLALOM / 2, + DIAM_BARRE_SLALOM, + 0, + 2 * Math.PI + ); + context.fill(); + context.stroke(); + + context.fillStyle = COLOR_1; + context.strokeStyle = COLOR_1b; + + context.beginPath(); + context.strokeStyle = COLOR_JOINTURES; + + context.arc( + x + 10, + y + DIAM_BARRE_SLALOM / 2, + DIAM_BARRE_SLALOM, + 0, + 2 * Math.PI + ); + context.fill(); + context.stroke(); + context.beginPath(); + context.arc( + x + 30, + y + DIAM_BARRE_SLALOM / 2, + DIAM_BARRE_SLALOM, + 0, + 2 * Math.PI + ); + context.fill(); + context.stroke(); + context.beginPath(); + context.arc( + x + 50, + y + DIAM_BARRE_SLALOM / 2, + DIAM_BARRE_SLALOM, + 0, + 2 * Math.PI + ); + context.fill(); + context.stroke(); + context.beginPath(); + context.arc( + x + 70, + y + DIAM_BARRE_SLALOM / 2, + DIAM_BARRE_SLALOM, + 0, + 2 * Math.PI + ); + context.fill(); + context.stroke(); + context.beginPath(); + context.arc( + x + 90, + y + DIAM_BARRE_SLALOM / 2, + DIAM_BARRE_SLALOM, + 0, + 2 * Math.PI + ); + context.fill(); + context.stroke(); + context.beginPath(); + context.arc( + x + 110, + y + DIAM_BARRE_SLALOM / 2, + DIAM_BARRE_SLALOM, + 0, + 2 * Math.PI + ); + context.fill(); + context.stroke(); + context.beginPath(); +} + +function dessinerSlalom6(x, y, largx, hauty) { + context.fillStyle = COLOR_METAL; + context.fillRect(x, y, largx, hauty); + context.fillStyle = COLOR_2; + context.strokeStyle = COLOR_2b; + context.beginPath(); + context.arc( + x, + y + DIAM_BARRE_SLALOM / 2, + DIAM_BARRE_SLALOM, + 0, + 2 * Math.PI + ); + context.fill(); + context.stroke(); + context.beginPath(); + context.arc( + x + 20, + y + DIAM_BARRE_SLALOM / 2, + DIAM_BARRE_SLALOM, + 0, + 2 * Math.PI + ); + context.fill(); + context.stroke(); + context.beginPath(); + context.arc( + x + 40, + y + DIAM_BARRE_SLALOM / 2, + DIAM_BARRE_SLALOM, + 0, + 2 * Math.PI + ); + context.fill(); + context.stroke(); + + context.fillStyle = COLOR_1; + context.strokeStyle = COLOR_1b; + + context.beginPath(); + context.strokeStyle = COLOR_JOINTURES; + + context.arc( + x + 10, + y + DIAM_BARRE_SLALOM / 2, + DIAM_BARRE_SLALOM, + 0, + 2 * Math.PI + ); + context.fill(); + context.stroke(); + context.beginPath(); + context.arc( + x + 30, + y + DIAM_BARRE_SLALOM / 2, + DIAM_BARRE_SLALOM, + 0, + 2 * Math.PI + ); + context.fill(); + context.stroke(); + context.beginPath(); + context.arc( + x + 50, + y + DIAM_BARRE_SLALOM / 2, + DIAM_BARRE_SLALOM, + 0, + 2 * Math.PI + ); + context.fill(); + context.stroke(); +} + +function dessinerPalissade(x, y, largx, hauty) { + context.fillStyle = COLOR_2; + context.strokeRect(x, y, 15, hauty); + context.fillRect(x, y, 15, hauty); + context.fillStyle = COLOR_1; + context.strokeRect(x + 15, y, largx - 30, hauty); + context.fillRect(x + 15, y, largx - 30, hauty); + context.fillStyle = COLOR_2; + context.strokeRect(x + largx - 15, y, 15, hauty); + context.fillRect(x + largx - 15, y, 15, hauty); + context.fillStyle = COLOR_JOINTURES; + context.fillRect(x + largx / 2, y, 1, hauty); + + // ralentisseurs descente + context.fillStyle = COLOR_2b; + context.fillRect(x + 5, y, 1, hauty); + context.fillRect(x + 10, y, 1, hauty); + context.fillRect(x + largx - 5, y, 1, hauty); + context.fillRect(x + largx - 10, y, 1, hauty); + context.fillStyle = COLOR_1b; + context.fillRect(x + 20, y, 1, hauty); + context.fillRect(x + 25, y, 1, hauty); + context.fillRect(x + 30, y, 1, hauty); + context.fillRect(x + largx - 20, y, 1, hauty); + context.fillRect(x + largx - 25, y, 1, hauty); + context.fillRect(x + largx - 30, y, 1, hauty); +} + +function dessinerPasserelle(x, y, largx, hauty) { + context.fillStyle = COLOR_JOINTURES; + + context.fillRect(x + largx / 3, y - 5, 2, hauty + 10); + context.strokeRect(x + largx / 3, y - 5, 2, hauty + 10); + + context.fillStyle = COLOR_JOINTURES; + context.fillRect(x + largx / 3 + largx / 3, y - 5, 2, hauty + 10); + context.translate(-0.5, -0.5); + context.strokeRect(x + largx / 3 + largx / 3, y - 5, 2, hauty + 10); + context.translate(0.5, 0.5); + + dessinerBalPassCommun(x, y, largx, hauty); + + // tiges metal de jonction + context.fillRect(x + largx / 3, y, 1, hauty); + context.fillRect(x + largx / 3 + largx / 3, y, 1, hauty); + // ralentisseurs descente + context.fillStyle = COLOR_2b; + context.fillRect(x + 5, y, 1, hauty); + context.fillRect(x + 10, y, 1, hauty); + context.fillRect(x + largx - 5, y, 1, hauty); + context.fillRect(x + largx - 10, y, 1, hauty); + context.fillStyle = COLOR_1b; + context.fillRect(x + 20, y, 1, hauty); + context.fillRect(x + 25, y, 1, hauty); + context.fillRect(x + 30, y, 1, hauty); + context.fillRect(x + 35, y, 1, hauty); + context.fillRect(x + 40, y, 1, hauty); + context.fillRect(x + 45, y, 1, hauty); + context.fillRect(x + 50, y, 1, hauty); + context.fillRect(x + 55, y, 1, hauty); + context.fillRect(x + 60, y, 1, hauty); + context.fillRect(x + largx - 20, y, 1, hauty); + context.fillRect(x + largx - 25, y, 1, hauty); + context.fillRect(x + largx - 30, y, 1, hauty); + context.fillRect(x + largx - 35, y, 1, hauty); + context.fillRect(x + largx - 40, y, 1, hauty); + context.fillRect(x + largx - 45, y, 1, hauty); + context.fillRect(x + largx - 50, y, 1, hauty); + context.fillRect(x + largx - 55, y, 1, hauty); + context.fillRect(x + largx - 60, y, 1, hauty); +} + +function dessinerBalance(x, y, largx, hauty) { + context.fillStyle = COLOR_JOINTURES; + context.fillRect(x + largx / 2, y - 5, 2, hauty + 10); + context.fillStyle = COLOR_CONTOURS; + context.strokeRect(x + largx / 2, y - 5, 2, hauty + 10); + dessinerBalPassCommun(x, y, largx, hauty); +} + +function dessinerBalPassCommun(x, y, largx, hauty) { + // planche principale + context.fillStyle = COLOR_2; + context.strokeRect(x, y, 15, hauty); + context.fillRect(x, y, 15, hauty); + context.fillStyle = COLOR_1; + context.strokeRect(x + 15, y, largx - 30, hauty); + context.fillRect(x + 15, y, largx - 30, hauty); + context.fillStyle = COLOR_2; + context.strokeRect(x + largx - 15, y, 15, hauty); + context.fillRect(x + largx - 15, y, 15, hauty); + context.fillStyle = COLOR_JOINTURES; +} + +function dessinerHaie(x, y, largx) { + context.fillStyle = COLOR_2; + + rectBump(x + 10, y, largx - 20, DIAM_BARRE); //barre + + context.fillStyle = COLOR_3; + rectBump(x + 18, y, largx - 36, DIAM_BARRE); //barre + + context.fillStyle = COLOR_1; + rectBump(x, y, 10, DIAM_BARRE); //montants + + rectBump(x + largx - 10, y, 10, DIAM_BARRE); + rectBump(x + largx - 11, y - 3, 1, 9); + rectBump(x + 10, y - 3, 1, 9); +} + +function dessinerOxer(x, y, largx) { + dessinerHaie(x, y, largx); + + context.fillStyle = COLOR_2; + + rectBump(x + 1 + 10, y + 55 / pixel, largx - 20 - 2, DIAM_BARRE); //barre + + context.fillStyle = COLOR_3; + rectBump(x + 1 + 18 - 1, y + 55 / pixel, largx - 36, DIAM_BARRE); //barre + + context.fillStyle = COLOR_1; + rectBump(x + 1, y + 55 / pixel, 10, DIAM_BARRE); //montants + + rectBump(x + 1 + largx - 10 - 2, y + 55 / pixel, 10, DIAM_BARRE); + rectBump(x + 1 + largx - 11 - 2, y - 3 + 55 / pixel, 1, 9); + rectBump(x + 1 + 10, y - 3 + 55 / pixel, 1, 9); +} + +function dessinerConducteur(x, y, largx, hauty, sens) { + var scalePersonnage = 2; + + modifx = x + largx / 2 - 6; + modify = y + hauty / 2 - 8; + + //corps + context.fillStyle = COLOR_VETEMENTS; + context.beginPath(); + context.moveTo(modifx + 0.77, modify + 3.08); + context.lineTo(modifx + 11.54, modify + 3.08); + if (sens == "d") { + context.lineTo(modifx + 13.08, modify + 1.54); + context.lineTo(modifx + 16.15, modify - 3.08); + context.lineTo(modifx + 17.69, modify - 2.31); + context.lineTo(modifx + 16.15, modify + 1.54); + context.lineTo(modifx + 14.62, modify + 5.38); + } else if (sens == "dL") { + context.lineTo(modifx + 12.31, modify + 0.77); + context.lineTo(modifx + 12.31, modify - 3.85); + context.lineTo(modifx + 13.85, modify - 3.85); + context.lineTo(modifx + 14.62, modify + 0.77); + context.lineTo(modifx + 14.62, modify + 5.38); + } else if (sens == "dC") { + context.lineTo(modifx + 16.15, modify + 2.31); + context.lineTo(modifx + 20, modify - 0.77); + context.lineTo(modifx + 20.77, modify + 1.54); + context.lineTo(modifx + 16.92, modify + 5.38); + } else { + context.lineTo(modifx + 14.62, modify + 5.38); + } + context.lineTo(modifx + 13.85, modify + 6.92); + context.lineTo(modifx + 11.54, modify + 8.46); + context.lineTo(modifx + 0.77, modify + 8.46); + context.lineTo(modifx - 1.54, modify + 6.92); + if (sens == "g") { + context.lineTo(modifx - 2.31, modify + 5.38); + context.lineTo(modifx - 3.85, modify + 1.54); + context.lineTo(modifx - 5.38, modify - 2.31); + context.lineTo(modifx - 3.85, modify - 3.08); + context.lineTo(modifx - 0.77, modify + 1.54); + } else if (sens == "gL") { + context.lineTo(modifx - 2.31, modify + 5.38); + context.lineTo(modifx - 2.31, modify + 0.77); + context.lineTo(modifx - 1.54, modify - 3.85); + context.lineTo(modifx + 0, modify - 3.85); + context.lineTo(modifx + 0, modify + 0.77); + } else if (sens == "gC") { + context.lineTo(modifx - 4.62, modify + 5.38); + context.lineTo(modifx - 9.23, modify + 1.54); + context.lineTo(modifx - 7.69, modify - 0.77); + context.lineTo(modifx - 3.85, modify + 2.31); + } else { + context.lineTo(modifx - 2.31, modify + 5.38); + } + context.lineTo(modifx + 0.77, modify + 3.08); + context.fill(); + context.stroke(); + + // MAINS + //main droite + context.fillStyle = COLOR_PEAU; + if (sens == "d") { + //main + context.fillStyle = "#ffff88"; + context.beginPath(); + context.arc(modifx + 16.92, modify - 3.08, 1.3, 0, 2 * Math.PI); //point d'encrage + + context.fill(); + context.stroke(); + } else if (sens == "dL") { + context.fillStyle = "#ffff88"; + context.beginPath(); + context.arc(modifx + 13.08, modify - 4.62, 1.3, 0, 2 * Math.PI); //point d'encrage + + context.fill(); + context.stroke(); + } else if (sens == "dC") { + context.fillStyle = "#ffff88"; + context.beginPath(); + context.arc(modifx + 20.77, modify, 1.3, 0, 2 * Math.PI); //point d'encrage + context.fill(); + context.stroke(); + } + + // main gauche + if (sens == "g") { + //main + context.beginPath(); + context.arc(modifx - 4.62, modify - 3.08, 1.3, 0, 2 * Math.PI); //point d'encrage + context.fill(); + context.stroke(); + } else if (sens == "gL") { + context.beginPath(); + context.arc(modifx - 0.77, modify - 4.62, 1.3, 0, 2 * Math.PI); //point d'encrage + context.fill(); + context.stroke(); + } else if (sens == "gC") { + context.beginPath(); + context.arc(modifx - 9.23, modify, 1.3, 0, 2 * Math.PI); //point d'encrage + context.fill(); + context.stroke(); + } + //TETE + //cheveux + context.fillStyle = COLOR_CHEVEUX; + context.beginPath(); + context.moveTo(modifx + 3.08, modify + 4.62); + context.lineTo(modifx + 3.85, modify + 3.08); + context.lineTo(modifx + 4.62, modify + 3.85); + context.lineTo(modifx + 7.69, modify + 3.85); + context.lineTo(modifx + 8.46, modify + 3.08); + context.lineTo(modifx + 9.23, modify + 4.62); + context.lineTo(modifx + 8.46, modify + 6.92); + context.lineTo(modifx + 6.92, modify + 7.69); + context.lineTo(modifx + 5.38, modify + 7.69); + context.lineTo(modifx + 3.85, modify + 6.92); + context.lineTo(modifx + 3.08, modify + 4.62); + context.fill(); + context.stroke(); + //visage + context.fillStyle = COLOR_PEAU; + context.beginPath(); + context.moveTo(modifx + 3.85, modify + 3.08); + context.lineTo(modifx + 4.62, modify + 3.85); + context.lineTo(modifx + 7.69, modify + 3.85); + context.lineTo(modifx + 8.46, modify + 3.08); + context.lineTo(modifx + 7.69, modify + 2.31); + context.lineTo(modifx + 6.92, modify + 2.31); + context.lineTo(modifx + 6.15, modify + 1.54); + context.lineTo(modifx + 5.38, modify + 2.31); + context.lineTo(modifx + 4.62, modify + 2.31); + context.lineTo(modifx + 3.85, modify + 3.08); + context.fill(); + context.stroke(); +} + +function dessinerChien(x, y, largx, hauty, sens) { + modifx = x + largx / 2 - 3; + modify = y + hauty / 2 - 10; + + //corps + context.fillStyle = "grey"; + context.strokeStyle = "black"; + context.beginPath(); + context.moveTo(modifx + 2.8, modify + 0); + context.lineTo(modifx + 1.8, modify + 1.4); + context.lineTo(modifx + 1.4, modify + 3); + context.lineTo(modifx + 0.4, modify + 4.4); + context.lineTo(modifx + 1.6, modify + 4.4); + context.lineTo(modifx + 1.6, modify + 5.2); + context.lineTo(modifx + 0.2, modify + 6.4); + context.lineTo(modifx + 0, modify + 9); + context.lineTo(modifx + 0.2, modify + 11.2); + context.lineTo(modifx + 0.6, modify + 11.4); + context.lineTo(modifx + 0.6, modify + 14.8); + context.lineTo(modifx + 0.2, modify + 15.2); + context.lineTo(modifx + 0.2, modify + 17); + context.lineTo(modifx + 2.6, modify + 20); + context.lineTo(modifx + 2.6, modify + 22); + context.lineTo(modifx + 2.8, modify + 22.6); + context.lineTo(modifx + 3, modify + 22); + context.lineTo(modifx + 3, modify + 20); + context.lineTo(modifx + 5.4, modify + 17); + context.lineTo(modifx + 5.4, modify + 15.2); + context.lineTo(modifx + 5, modify + 14.8); + context.lineTo(modifx + 5, modify + 11.4); + context.lineTo(modifx + 5.4, modify + 11.2); + context.lineTo(modifx + 5.6, modify + 9); + context.lineTo(modifx + 5.4, modify + 6.4); + context.lineTo(modifx + 4, modify + 5.2); + context.lineTo(modifx + 4, modify + 4.4); + context.lineTo(modifx + 5.2, modify + 4.4); + context.lineTo(modifx + 4.2, modify + 3); + context.lineTo(modifx + 3.8, modify + 1.4); + context.lineTo(modifx + 2.8, modify + 0); + + context.fill(); + context.stroke(); +} + +function dessinerOverObstacle(x, y, largx, hauty, angle, i) { + xRotateGauche = + (Math.round(Math.cos(toDegrees(angle)) * 100) / 100) * + ((largx + ROTATE_MARGE_SELECTION) / 2) + + x + + largx / 2; + yRotateGauche = + (Math.round(Math.sin(toDegrees(angle)) * 100) / 100) * + ((largx + ROTATE_MARGE_SELECTION) / 2) + + y + + hauty / 2; + xRotateDroit = + x + + largx / 2 - + (Math.round(Math.cos(toDegrees(angle)) * 100) / 100) * + ((largx + ROTATE_MARGE_SELECTION) / 2); + yRotateDroit = + y + + hauty / 2 - + (Math.round(Math.sin(toDegrees(angle)) * 100) / 100) * + ((largx + ROTATE_MARGE_SELECTION) / 2); + + context.save(); + context.translate(xRotateGauche, yRotateGauche); //translate to center of shape + context.rotate((Math.PI / 180) * (getAngle(i) + 90)); //rotate 25 degrees + context.translate(-xRotateGauche, -yRotateGauche); //translate center back to 0,0 + + // CERCLE 1 + context.beginPath(); + context.arc(xRotateGauche, yRotateGauche, 6, 0, 2 * Math.PI); + context.closePath(); + context.stroke(); + context.fillStyle = "#ccc"; //jaune + context.fill(); + // FLECHE 1 + context.beginPath(); + context.moveTo(xRotateGauche + 1, yRotateGauche + 4); + context.lineTo(xRotateGauche + 5, yRotateGauche); + context.lineTo(xRotateGauche + 1, yRotateGauche - 4); + context.closePath(); + context.stroke(); + context.fillStyle = "#fff"; //jaune + context.fill(); + // FLECHE 2 + context.beginPath(); + context.moveTo(xRotateGauche - 1, yRotateGauche + 4); + context.lineTo(xRotateGauche - 5, yRotateGauche); + context.lineTo(xRotateGauche - 1, yRotateGauche - 4); + context.closePath(); + context.stroke(); + context.fillStyle = "#fff"; //jaune + context.fill(); + + context.restore(); + + context.save(); + context.translate(xRotateDroit, yRotateDroit); //translate to center of shape + context.rotate((Math.PI / 180) * (getAngle(i) - 90)); //rotate 25 degrees + context.translate(-xRotateDroit, -yRotateDroit); //translate center back to 0,0 + + // CERCLE 1 + context.beginPath(); + context.arc(xRotateDroit, yRotateDroit, 6, 0, 2 * Math.PI); + context.closePath(); + context.fillStyle = "#ccc"; //gris + + context.stroke(); + context.fill(); + // FLECHE 1 + context.beginPath(); + context.moveTo(xRotateDroit + 1, yRotateDroit + 4); + context.lineTo(xRotateDroit + 5, yRotateDroit); + context.lineTo(xRotateDroit + 1, yRotateDroit - 4); + context.closePath(); + context.fillStyle = "#fff"; //blanc + context.stroke(); + context.fill(); + // FLECHE 2 + context.beginPath(); + context.moveTo(xRotateDroit - 1, yRotateDroit + 4); + context.lineTo(xRotateDroit - 5, yRotateDroit); + context.lineTo(xRotateDroit - 1, yRotateDroit - 4); + context.closePath(); + context.stroke(); + context.fillStyle = "#fff"; //blanc + context.fill(); + + context.restore(); +}

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 literal 0 HcmV?d00001 diff --git a/static/public/icons/newtrj.png b/static/public/icons/newtrj.png new file mode 100644 index 0000000000000000000000000000000000000000..ff92b716d2c36854cb168d41021b5b588ca9f564 GIT binary patch literal 19867 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 R4*>uG002ovPDHLkV1nQo{RaR5 literal 0 HcmV?d00001 diff --git a/static/public/icons/numbers/num1.png b/static/public/icons/numbers/num1.png new file mode 100644 index 0000000000000000000000000000000000000000..12368216c8bbdad1b821c170631a40be6c9b8618 GIT binary patch literal 1990 zcmbVNYg7|w8XgJ@8q39qR_T@N+$@mKRo@hb7tnd%=0|& z<$K>Vr3vvdo)kX{005rSSTvCwna*dHJNZs|<5@8|EF#3IL=v7&nB_(c5UOwm21<2u zHI|6URk<6wum}Kf&DJER5~;E{z7p5bnPOCTZEdtt@(EAkb2f#e`T4CV3-a5X|Qwd=?j+ zzG$R1qbi%9h)Skykt+c$hae1m2E%MN)6Hx;Zd5ZM9*^hLV6nnTM3^a8PslA{deh<= z1r#$WjT!@?!S$e1QLex@5&|0O>B|sw2AS-Yu--JCC^BUXi`>9~=uC!A=ZtF#Z6Xq} z-`#jE+LWAYz!-^`3EyZ`lIM}Vc!o^o?#~T5fuuM5l|~JDC~_@|D>v#eJt0K}H1Z2w zrBU%wM9g8r9F!|YBw`qX!cjO}Bor})Vu=XlA?S?8>$nmQj|VeRSjdzh5G00$(Of1k zTFB$Fc`!#LVa;%*dJ`enE3p~78q)4Gm;I+)zQ~Bl3EY^ByHB^i}DTi&xEq>B){UlC3c@TwhCe+_)4KCR@I{ zpC-%kRWHoHYvw+n9(DKK_I`+VdD7~+6yCR^XSed)@@BaN6t7+}yQ-{sr+-m>@Z#Gw zWhJTFdfuYXwkJSE?%fri?A3Xh7SYr5X05Lga?fDdr6E4gh>puyO(^IBLZ5cs#%LBA%$o;Uwla%c(b z@Up`Ge%q~5wmP_a$6v9*#{pxMowCN=mp?u=`CtU^$!uO$7(L$j;qdLZZk8>MQgYG@ zfDgu9xE{x{-mTrWIV3>3>x^yt7X@xXLn4ar{QVJF+PK{VaRAn)%9j5Ev#wP4e%@8p zSTt}X+kb<{@>2%mmqy@c?pQzFl8AduiMcXD2#8xZ-^w>&P(+{YcE) zkDlUe%a`N%{K!aua|gq(oaSEGb-YPQO${+05 zv}pX-OvC*X;b?E@ZqMq4WwuoZ+Y%J%#nKkYx@$z|=GD;9U|+L#t-aN@Wz3ILa@ezT z>FJEnfXZ~?F1cY575_i-IY>1umAGVV-Eh2qjRfsOKUxV zuCHB8TR9nA<<>1f3}}9tU%tAh5FJXJUo_S;?z&d6JQ}=o@aiLE(eUW#xxvA~cx?`{ zr~SB(ZSOtn!f($PC=_38$Tt{#POj^jq*8bAPV6*P?Wrt8zXMs@LRZ8NwzapHP@$AS z>X!XWmi4(JZEds+uQ~^ny7X#)e`#wgVl6M{eRDsmuv@dc=HH=l4OI2Or*|buxAz5FgIKmV z|8-80?vP)gShBK!(b3V^#>C-!_k=Mq#S5=aG=80DyO>x|5an<<>P8$3!phPLQUISI zH*Ji%{(A+-#i#p_=96YG%K68Rp5&z2bIZ0Ju-j{O`!e^&1&O^6odRM5sVnae4K;gt zdp~!tYi#^WORBbO4_Gu=>IzJC+l{U6Kc5C%fy78Spu^*0m-Ejm7008;qO*#A15zXq AoB#j- literal 0 HcmV?d00001 diff --git a/static/public/icons/numbers/num2.png b/static/public/icons/numbers/num2.png new file mode 100644 index 0000000000000000000000000000000000000000..5a182f1cc7fe12f464ee4aff69bd2217dc7fa7c7 GIT binary patch literal 2035 zcmbVNc~}!?8lM0y79*$bMoS?C77t32$w>l1l1!q(hC)CDtd^Jz5JEC(GMK=6Jqjv9 z4@p-<)N&NTawt|g1QzImNOh^TYi-afBCZ9bh=9nU>_oxcKYaSf&NDObcf7yfdwlOZ zlNBDeZi&MR2LJ$;NY+C#Oj51SqPMa4CYz}Pm{^XAV$et=0X53?Fu+$L+hC$ZBTs~7 zuw0q;Nf#Uh0JaILs2DUx`T1nIZi5q5S{`Ynv4uob zDS4z#Oes~W6T(TV_33&zGCeFxk*-#7l%%!6#2^zFBhbL8oM_UdXboHwkMxq4i;bHZ2T2ohN=GRR=ESm66a8Wp5bsMyW&2N_%@i%Vk@ z=PwdwO|MMg${_K)Eo{akC84N}OQ9HzMzWDkM)Zjkki+3vIcPM0OvB%hrbXo@f33lL zfdPUI3cX5)st_&F$|&E4q@p|$=IN^tG&-sDHL=z(pC~M46q8&>0m)Q~Mq`cZrM3Z; z!T)vRjoOB&G#yNl!3HE%ufWbD!FvIWfwiav;*qc& zvQnkwLM#!J%3wll5lbv$fM5W`2oUmxRK7?ogg7i{f#XeBstBaf8Da*XDrSSAh!G%Q z)A)QL$P8c$1Pq9}fR$(ss9dXn7woDqyYpE3A7Z&eJuF8NeH4PEEL1>v5`rRzBt%CP zMzV;jHmS5q#AsM;J)T$5La<)79af6~k;|A(4nF;&6o4xcLGa3xdQP zfk4a<2k_~nd93pP$r%N6hGH#_|0$M*C9DFi!`G#cOC@yRZAojnLRS{Jy_0Ycmhj96IHdKL{=pB^24d z@9*#N?#_w+zoBz3m#QA$r1-T)7ZvW99$h!m{Jgs{a^}RkiHqTui{5JueGmFi4{Z3w zg7@rg_3Hg@fL>o0`$c1Zr&~y_k1nC;oRnI+=%d1N=X~NaI9z%oV!OPs-QWZb^y|MhrhHL4Ld(E-+#Z$pY z%{h9>{^|iSx<+Y896fa-E>Y?F1OlO+-%|13vU9g5^A2pC>%Drt-J*)Bi(AZp(rdna zV$Qwg<5~O<9>D^MDx&{u_W|saLCxwgY~3=6KJjW+l@F01=nmP7QvgpOBn4lXWYt^H6) z=f(^23X3InX?90*i}!e|_AlF=yt-(%n{#G5dwNzJ$;+!bdv;G-Tidmuhd+ff{_2Hm zJ-Qe$1ZA-PM8elJHxFkVFJ869SU7AfxqZj)c@+?S%ftC+kLAnxzUH>+>5D@z=E3g0hGdG+a?w9A4NpLK(aSvU)CHTdc z(8s7>DEX_z-@?}Al;2v0?%%)vvFrMz;ZfTH z-=1!V(!r4tO1c9y>+~6c`1V2Ewmoyq))pH)&{MlR;@AgzH|uX$A_{}51@U|T16J@l A1^@s6 literal 0 HcmV?d00001 diff --git a/static/public/icons/numbers/num3.png b/static/public/icons/numbers/num3.png new file mode 100644 index 0000000000000000000000000000000000000000..5297d324c547a339c94c2ea8c4aecaf037b8a74c GIT binary patch literal 1967 zcmbVNYg7|w8XgdZgH~{t6#-9o99TqwTqZY?5^W}vG%O7Q20;-amqCIg6EYJ5lnN@f zlr=@DEQr+N1!|!ZK(rSmqNREOUFmkMf=Z=gs4d$>!BzIKvJ(Y&e|Y+%b7toKzHi>= zdGBZ5i;sKb74JZA003Tzk)er{WVjx$MbtalefnKW1dx&xawDEenw3Tj5NU7~2FB== z+p$DUsVT_q!=eFTL8exbLZ-;y6sU0>P3h91# zgFvlD2qkmm47ov!Woc!FMr>nYoI+i=L(SJf>(_zN`2vbShmlG!UzejN1o=Yf8Lxm^ zyN>A)_)LY|A%vbgl_HM^#kdgzIW$(Jn!#j(TrQ2t=5V>p2oPp4VLF4lxsgn^fWsBQ zJaF!UC~HPdrXUfO&e@`NLMV$Q4FWpdY&O%(EE;ayPG|D@d>01{M^YM*M1h`E=11y@ z;CTiVBh*H%fz;x9(8Z`!;U-cDQJy{zL1&Q5Ul8kwxkOPZqvtCPbS8~K*XdkwJ<}%0 zMC^ZVyi}V|6c{jiB1YgQqnfHmX7D_i%H6LUaw$^Y2sRkCR8f>UD6Tf?Fg+QA3L)wX zO{3KaP_Bf-U~^EOge#S>nan7Z9VHft86t^PjPkkYJjcthELh57N~LTOL&{?^C2Ryn z83=80hzilFd3Hbzg7O1&DJx2vV>&S6=1}rry9T_Jg`mC1|AakM)8Qz@mmj*^Ex|kPve3Q1t*S%dn7#g~^ zH_5j%YuP`fqC@LIxU9!=QDNUV`QVo>hshCCot-)ImSD2J)Vz0~sN3wAzCF2q{BVHi zx+zEV`>lX~&q9M6CBTo`uYRpCe$%qnyQ_a!^-xFEr3J+eRkA8s>{4HgjZe<>_Puv! zWJ~iWjgQk0luUoYzyGf*LCLg7+jh2nS1^X8hm04Obq!bi+iDStpiPA(<=J<>>G55z zB2>&tKM!9Ix4@*znXfZ`SX%me)%kmC$|ck3D>Byjynaxy=Co(eks8M-xVe9jq`mzy zP)iRaP!7OuDPlj|dO$eHu}I!;?eT-xS(_rizh7EJf|pUUd@|d)(;X+Y#bpJNr@Z`1Pxs@0IWJf`6yo-HBW#K=FQAV?bGYZmakG zy3yza;%dO*KUQ~?2yZqUewC?a&6E%H#kyNHPmOQECcCvF?)%aJ- zcgCHn+;UCCefksjL@^sbHSrmfhqh<@SRavOsrO<4*@|Uu_t-;U?z2|_t4O&i zdc_izQh9!VW=tJ2urkBbttR0YFm_qWhm(~u4~xap_;dD^kmIwfjud;&MhCg=@EB=( z^!TxwB>mFT(wv3ee~Xo+G(Xz=)d9Qwha9@v+PC-}#5r9Q{`ajlD+f7mW0wdw#j(Cq z!K+^V#AaL9dFG5trE>3xurBB^^7`{)uY7BHc*6O?@cX3`f9vbWyef*rq2|TNICyR3} zGk11+WMt&sJpTa=Tr7O;a4+{V{suBr*VGi+`PpYdjb9u)7JO3`w;{Ot&((kE8F83n zE;yZxxEl?KhWWkI*f z7lkDyYeUzs{?k}XON%&aW!{p8rlyN$w}(G;Jc{GeTK6O_x>1|!-Y{Wz{~Vx|EWYFJ chn-uv0=V523!BO#6s})rj3f?iMKX5(7aHplb^rhX literal 0 HcmV?d00001 diff --git a/static/public/icons/obstacles/A.png b/static/public/icons/obstacles/A.png new file mode 100644 index 0000000000000000000000000000000000000000..f6b1a14a4838c4dd9f3f5cc5978e61a01745403e GIT binary patch literal 3015 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 literal 0 HcmV?d00001 diff --git a/static/public/icons/obstacles/long-jump.png b/static/public/icons/obstacles/long-jump.png new file mode 100644 index 0000000000000000000000000000000000000000..714a7f02841ef62701f13e746e50a6786d733b5d GIT binary patch literal 4896 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 literal 0 HcmV?d00001 diff --git a/static/public/icons/obstacles/run.png b/static/public/icons/obstacles/run.png new file mode 100644 index 0000000000000000000000000000000000000000..dba27214e6799dcb1a900c4c5567167ba2de84b9 GIT binary patch literal 3196 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 R>MQ>Pmel=}95c75{{Y!8chCR; literal 0 HcmV?d00001 diff --git a/static/public/icons/obstacles/slalom.png b/static/public/icons/obstacles/slalom.png new file mode 100644 index 0000000000000000000000000000000000000000..b7b6a7e732a8a6a9b15708764c68f14f0b470598 GIT binary patch literal 18081 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 up-00-L7W4~$M8=w8PcAX@+Vx+Z`u_O< literal 0 HcmV?d00001 diff --git a/static/public/icons/obstacles/slalom6.png b/static/public/icons/obstacles/slalom6.png new file mode 100644 index 0000000000000000000000000000000000000000..e7e7b97f71fc72eca8ec55ea914189c2f293d9ff GIT binary patch literal 18522 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 Bdlmoy literal 0 HcmV?d00001 diff --git a/static/public/icons/obstacles/sock.png b/static/public/icons/obstacles/sock.png new file mode 100644 index 0000000000000000000000000000000000000000..22da09388299f427707fe9d528988a42873196f8 GIT binary patch literal 3955 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 HddU9(i=9@M literal 0 HcmV?d00001 diff --git a/static/public/icons/obstacles/tunnel.png b/static/public/icons/obstacles/tunnel.png new file mode 100644 index 0000000000000000000000000000000000000000..97260c98d41e0399505b2749ce181319bdf16a2b GIT binary patch literal 3655 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 literal 0 HcmV?d00001 diff --git a/static/public/icons/trash.png b/static/public/icons/trash.png new file mode 100644 index 0000000000000000000000000000000000000000..cbbc8f987d6417d032c0f3df105b942cae649c32 GIT binary patch literal 3773 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