diff --git a/resources/library/applications/GraphMe.wgt/Grapheur.html b/resources/library/applications/GraphMe.wgt/Grapheur.html new file mode 100644 index 00000000..23232fff --- /dev/null +++ b/resources/library/applications/GraphMe.wgt/Grapheur.html @@ -0,0 +1,921 @@ + + + + + + + + GraphMe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + GraphMe + + + + + Functions + + + + + Display + + + + + Help + + +
+ + +
+ 3D +
+ + +
+
S
+
^
+ +
+
+ + +
+ +
+
+
+
+ +
+ f(x) = + + +
+ +
+
+ + + + + + + + + + + + + + + + +
+
+
+
+ +
+
-
+
+
+ +
+
·
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

------- Error -------

+
+ Cannot draw function ... +

+ Invalid character or expression :
+ +

+ +
+ + +
+

------- Error -------

+ Check the function and try to draw it again. +

+ Error message : . +

+ You can find examples of various drawable functions in the help menu. +
+ + +
+ + + + + + + + +
+
+

------- Error -------

+

+ Update to latest version is not available because you already use the latest version. +


+ +
+ + +
+
+

Preferences saved!

+
+ +
+ + +
+
+

Automatic update

+

+ Do you really want to use the latest online widget version ? +


+ + +
+ + +
+
+
+
+ + + + +
+
+ + +
+

Display

+ + +
+
+ + + +
+
+ + + +
+
+ + +
+ + +
x
+
+ + + + + +
+ + + + + + + + diff --git a/resources/library/applications/GraphMe.wgt/Grapheur.xhtml b/resources/library/applications/GraphMe.wgt/Grapheur.xhtml deleted file mode 100644 index bfca757c..00000000 --- a/resources/library/applications/GraphMe.wgt/Grapheur.xhtml +++ /dev/null @@ -1,1586 +0,0 @@ - - - - - - - - - Graphics - - - - - - - - - - - - - - - - - - - Function: - - - -
^
- -
- - - -
- -
- X-axis:
- ...
- Y-axis:
- ... -
Zoom:
-

- Color:
-
-

-
-
- Menus: - - - - - - - -
-
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-

------- Error -------

-
- Impossible to draw the function ... -

- Error in expression or unexpected char:
- -

- -
- - -
-

------- Error -------

- Runtime error! Check your function and try to draw it again. -
- Description and parameters various functions which are available to help. -

- - -
- - - - - -
-
-

------- Error -------

-

- Update to latest version is not available because you already use the latest version. -


- -
- - -
-
-

Options saved!

-
- -
- - -
-
-
-
- - -
-
o
-
- - -
3D
- - - - diff --git a/resources/library/applications/GraphMe.wgt/Guide_Utilisateur.html b/resources/library/applications/GraphMe.wgt/Guide_Utilisateur.html index 2caf6a23..a6e2d64e 100644 --- a/resources/library/applications/GraphMe.wgt/Guide_Utilisateur.html +++ b/resources/library/applications/GraphMe.wgt/Guide_Utilisateur.html @@ -2,199 +2,200 @@ - GraphMe - User's guide. + GraphMe - Guide utilisateur

GraphMe

-

User's guide

+

Guide d'utilisation

  1. Introduction
  2. Installation
  3. -
  4. Review widget
  5. -
  6. View presentation
  7. -
  8. Drawing the function
  9. -
  10. Offset function
  11. -
  12. The options menu
  13. -
  14. the tools menu
  15. -
  16. Drawing some functions
  17. -
  18. GraphMe update
  19. +
  20. Afficher le widget
  21. +
  22. Présentation de l'affichage
  23. +
  24. Dessiner une fonction
  25. +
  26. Se déplacer à travers la fonction
  27. +
  28. Le menu des options
  29. +
  30. Le menu des outils
  31. +
  32. Dessiner plusieurs fonctions
  33. +
  34. Mettre à jour GraphMe
  35. Contact

1. Introduction

- GraphMe is a app that is developed using html, javascript and css. It can be used for drawing graphs. This document must explain how to use GraphMe. This app have a different functions and some useful advices for users. + GraphMe est un traceur de fonctions mathématiques que j'ai programmé dans le cadre du travail de maturité gymnasiale. Il est codé en HTML, CSS et JavaScript. Ce grapheur est disponible sur un cd-rom accompagnant mon travail de maturité ainsi que sur internet à la page http://gyb.educanet2.ch/tm-widgets/.ws_gen/?15. Ce document a pour but d'expliquer comment utiliser GraphMe. Il présente ses différentes fonctions ainsi que quelques astuces utiles à l'utilisateur.

2. Installation

- This widget can be downloaded from the Internet in a packed format. Before using it must be unpacked. GraphMe was developed for using in web-browsers and integration in Sankore. To add this app in Sankore you should copy folder named "GraphMe.wgt" in "../library/interactive/". For example, on "windows OS" GraphMe must be in folder with following path: "C: / Program Files / Sankore 4/library/interactive/GraphMe.wgt". If you have no Sankore then you can get it on http://getuniboard.com/. -

+ Le widget que vous pouvez télécharger sur internet est compressé au format zip. Avant de l'utiliser, il est nécessaire de le décompresser. Si vous n'avez aucuns programmes permettant d'ouvrir les fichiers zip, vous pouvez télécharger 7zip sur http://www.7-zip.org/. GraphMe a été conçu pour s'utiliser dans un navigateur internet ou s'intégrer à Uniboard. Pour l'ajouter aux widgets d'Uniboard, il faut copier le dossier « GraphMe.wgt » dans « library/interactive/ ». Par exemple, sous Windows, le widget doit être dans : « C:/Program Files/Uniboard 4/library/interactive/GraphMe.wgt ». Si vous n'avez pas Uniboard, vous pouvez l'obtenir sur http://getuniboard.com/. +

-

3. Review widget

-
Display GraphMe in browsers
+

3. Afficher le widget

+
Image de GraphMe dans un navigateur internet

- A) To display this app in browser just enough to open the file named "Grapheur.xhtml" (it's in root folder) with your browser. But some browsers can not display app correctly. Below is the list of browsers that are able to display app: + A) Pour afficher le widget dans un navigateur, il faut simplement ouvrir le fichier « Grapheur.xhtml » qui se trouve dans le dossier « GraphMe.wgt » avec votre navigateur internet. Toutefois, certains navigateurs n'arrivent pas à afficher le widget. La liste suivante contient les navigateurs sur lesquels le widget a été testé :

- B) To open widget in Sankore you should first open folder "Application" that is at the left of the screen. Then you must find this app and add it to the page. + B) Pour ouvrir le widget dans Uniboard, il faut tout d'abord cliquer sur le bouton « Bibliothèque » en haut de la fenêtre. Ensuite, allez dans l'onglet « Interactif » ou autrement, selon les version d'Uniboard, dans l'onglet « Applications ». Cliquez sur l'icône correspondant à « Traceur de fonctions mathématiques » et finalement sur « Ajouter à la page ».

-
Display GraphMe in Sankore
+
Image de GraphMe dans Uniboard
-

4. View presentation

+

4. Présentation de l'affichage

    -
  1. Place for functions display.
  2. -
  3. Button for beginning the work.
  4. -
  5. Button for adding new function or for getting access to functions history.
  6. -
  7. Display.
  8. -
  9. Parameters that define the part of graph that will be displayed.
  10. -
  11. Buttons for zoom.
  12. -
  13. Button for color changing.
  14. -
  15. Buttons for access to menu.
  16. -
  17. Tab-button that toggles 2D and 3D modes.
  18. -
  19. Button for maximize the widget.
  20. +
  21. Champ permettant de définir la fonction à afficher.
  22. +
  23. Bouton affichant la fonction.
  24. +
  25. Bouton servant à ajouter une nouvelle fonction ou à accéder à l'historique des fonctions.
  26. +
  27. Zone d'affichage.
  28. +
  29. Options d'affichage permettant de définir la partie de la fonction à afficher.
  30. +
  31. Boutons de zoom.
  32. +
  33. Bouton servant à changer la couleur.
  34. +
  35. Boutons accédant aux différents menus.
  36. +
  37. Onglet choisissant entre les fonctions 2D et 3D.
  38. +
  39. Bouton de maximisation du widget.
-

5. Drawing the function

+

5. Dessiner une fonction

- To draw mathematical function just enter it at the top of widget and press button "Display". You can use different functions and predefined constants. + Pour dessiner une fonction mathématique, il suffit d'entrer celle-ci dans le champ en haut du widget et de cliquer sur le bouton « Afficher ». On peut utiliser différentes fonctions et constantes prédéfinies:

-

Basic operations:

+

Les opérations de base

-

Trigonometric functions

+

Les fonctions trigonométriques

-

Square roots and degrees

+

Les racines et les puissances

-

Exponential and logarithm

+

Les exponentielles et logarithmes

-

Rounding

+

Les arrondis

-

Other predefined function

+

Autres fonctions prédéfinies

-

Also are available some constants:

+

Les constantes

- Not always it's easy to understand how to record a required function. Really if anywhere you err then graph will not displayed. Also do not forget about "*" (multiply) to multiply and "." (decimal point) to write point. + Il n'est pas toujours facile de comprendre comment écrire la fonction désirée. En effet, une petite faute et elle ne s'affichera pas. De plus, il ne faut pas oublier de mettre un « * » entre les thermes à multiplier et d'utiliser le point « . » pour écrire des nombres à virgule.

- The two-dimensional function must be written as y=[...] and the three-dimensional function nust be written as z=[...]. Other examples are available to use in menu "Help" if you have some difficulties with function definition. + Les fonctions en deux dimensions s'écrivent sous la forme : y=[...] et les fonctions en trois dimensions sous la forme : z=[...]. D'autres exemples sont disponibles dans le menu « aide » du widget si vous avez de la peine à entrer une fonction.

-

6. Offset function

+

6. Se déplacer à travers la fonction

- Sometimes when you draw the function you don't see all necessary information about this function. In this case you can change position of graph. + Parfois, lorsqu'on dessine une fonction, la zone visible n'est pas très intéressante. Pour cela, il est utile de déplacer l'affichage ou de définir soi-même la zone à afficher.

- To move the function graph just use a navigation arrows that are in the four edges of the display or mouse move tool (menu Service). + Pour déplacer la fonction, il suffit d'utiliser les flèches de navigation situées dans les quatre bords de l'affichage ou l'outil de déplacement à la souris (dans le menu « Outils »).

- To define place to display you should enter a custom values in the left side of the widget. The left value must be less than the right value. In other case graph will not displayed. + Pour définir la zone à afficher, il faut entrer des valeurs personnalisées dans les champs à gauche du widget. La valeur de gauche doit obligatoirement être plus petite que la valeur de droite. Dans le cas contraire, la fonction ne se dessinera pas.

- You can increase or decrease the scale of displaying using buttons that are in the left menu. So you'll see more information about function. Zoom can be reset in options. + Il est possible de zoomer ou dé-zoomer l'affichage en utilisant les boutons du menu de gauche pour voir une plus grande partie de la fonction. Le zoom peut être réinitialisé dans les options. On peut également cliquer deux fois sur le graphique pour zoomer ainsi que dé-zoomer en maintenant la touche « ctrl » appuyée et en cliquant deux fois.

- +

- To open the menu you should click a button "Options" that is in the left of the widget. If you click on this button again then menu will close. There are some buttons for navigation between options. Their short description: + Cliquez sur le bouton « Options » à gauche du widget pour ouvrir ce menu. En cliquant à nouveau sur le bouton, cela ferme le menu. Plusieurs onglets permettent de naviguer entre les différentes options. Description des options :

- +

- This menu allows you to choose first action of the mouse on the graph. There is a choice of three options: + Ce menu permet tout d'abord de choisir l'action de la souris sur le graphique. Il y a le choix entre trois possibilités :

- Then, this menu also allows to calculate a point of the function. Simply enter the coordinate "x" from the point where we want to find the coordinate "y" and press the "Evaluate". For example, if the function is "x * x" and that defined "x = 2", then the point whose coordinate on the X axis is "2" will be to coordinate on the Y axis "4". + Ensuite, ce menu permet aussi de calculer un point de la fonction. Il faut simplement entrer la coordonnée « x » du point dont on veut trouver la coordonnée « y », et appuyer sur le bouton « Évaluer ». Par exemple, si la fonction est « x*x » et qu'on défini « x=2 », alors le point dont la coordonnée sur l'axe des X est « 2 » aura comme coordonnée sur l'axe des Y « 4 ».

- Another useful tool is the analysis of function. To analyse the function click on "start the analysis". Analyses based on this widget are not 100% reliable, but are complementary to a analysis of function that you are doing yourself. It may be that this tool will be improved in a future version of the widget. + Un autre outil très utile est l'étude de fonction. Pour étudier la fonction entrée dans le champ en haut du widget, cliquez sur « démarrer l'étude ». Les études de fonction de ce widget ne sont pas fiables à 100% mais servent de complément à une étude de fonction que l'on fait soi-même. Il se peut que cet outil soit amélioré dans une prochaine version du widget.

- In this menu there are also tests the display. They can try different methods to display and see if they work on the browser used. + Dans ce menu, on trouve également des tests d'affichage. Ils permettent d'essayer les différentes méthodes d'affichage et de voir si elles fonctionnent sur le navigateur internet utilisé.

-

9. Drawing some functions

+

9. Dessiner plusieurs fonctions

- To draw multiple functions simultaneously, click the small "+" button which is located to the right of "View" (point 1). Then, a menu appears. + Pour dessiner plusieurs fonctions simultanément, cliquez sur le petit bouton « + » qui se situe à droite du bouton « Afficher » (point 1). Ensuite, un menu apparaît.

- The tabs in this menu can go to the history or the additional features (point 2). To add a function click the button to the right of the current function (point 3). Below is a list that contains all the displayed functions (point 4). To remove a function, just click on the "-" button next to it. It is also possible to change the color of each function separately. + Dans ce menu, des onglets permettent d'aller à l'historique ou aux fonctions supplémentaires (point 2). Pour ajouter une fonction, cliquez sur le bouton à droite de la fonction actuelle (point 3). En dessous, une liste contient toutes les fonctions affichées (point 4). Pour supprimer une fonction, il faut simplement cliquer sur le bouton « - » à coté de celle-ci. Il est également possible de modifier la couleur de chaque fonction séparément.

- History can review all the functions that have already been drawn. When you click on a function of history current function replaced by the function of history. + L'historique permet de revoir toutes les fonctions qui ont déjà été dessinées. Lorsque l'on clique sur une fonction de l'historique, celle qui est dessinée actuellement est remplacée par la fonction de l'historique.

- "Drawing several functions simultaneously" mode is only possible with the display method "canvas" in two dimensions, but the history can be used with all methods of display. + Dessiner plusieurs fonctions simultanément est uniquement possible avec la méthode d'affichage « canvas » en deux dimensions. Par contre, l'historique est utilisable avec toutes les méthodes d'affichage.

-

10. GraphMe update

+

10. Mettre à jour GraphMe

- The latest version of the widget can be downloaded from the following page: http://gyb.educanet2.ch/tm-widgets/.ws_gen/?15. To update GraphMe, you can also click on "Update" in the options menu. + La dernière version du widget est téléchargeable sur la page suivante : http://gyb.educanet2.ch/tm-widgets/.ws_gen/?15. Pour mettre à jour GraphMe, vous pouvez aussi cliquer sur le bouton "Mise à jour" dans le menu des options.

11. Contact

- If you want to report a bug, have a suggestion from the widget or just want to ask a question, please contact me by e-mail at: yannick.vessaz@gmail.com. + Si vous voulez rapporter un bug, avez une suggestion par rapport au widget ou voulez simplement poser une question, merci de me contacter par e-mail à l'adresse : yannick.vessaz@gmail.com.

\ No newline at end of file diff --git a/resources/library/applications/GraphMe.wgt/Images/black/bottom-left.png b/resources/library/applications/GraphMe.wgt/Images/black/bottom-left.png new file mode 100644 index 00000000..8423b59b Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/black/bottom-left.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/black/bottom-right.png b/resources/library/applications/GraphMe.wgt/Images/black/bottom-right.png new file mode 100644 index 00000000..915abc13 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/black/bottom-right.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/black/bottom.png b/resources/library/applications/GraphMe.wgt/Images/black/bottom.png new file mode 100644 index 00000000..d61623c7 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/black/bottom.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/black/center.png b/resources/library/applications/GraphMe.wgt/Images/black/center.png new file mode 100644 index 00000000..8ce90552 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/black/center.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/black/left.png b/resources/library/applications/GraphMe.wgt/Images/black/left.png new file mode 100644 index 00000000..eeb45738 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/black/left.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/black/right.png b/resources/library/applications/GraphMe.wgt/Images/black/right.png new file mode 100644 index 00000000..ca19f467 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/black/right.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/black/top-left.png b/resources/library/applications/GraphMe.wgt/Images/black/top-left.png new file mode 100644 index 00000000..01fa7a62 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/black/top-left.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/black/top-right.png b/resources/library/applications/GraphMe.wgt/Images/black/top-right.png new file mode 100644 index 00000000..0fd81158 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/black/top-right.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/black/top.png b/resources/library/applications/GraphMe.wgt/Images/black/top.png new file mode 100644 index 00000000..1b2978ff Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/black/top.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/blue/bottom-left.png b/resources/library/applications/GraphMe.wgt/Images/blue/bottom-left.png new file mode 100644 index 00000000..59bd3d46 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/blue/bottom-left.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/blue/bottom-right.png b/resources/library/applications/GraphMe.wgt/Images/blue/bottom-right.png new file mode 100644 index 00000000..850fb3cf Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/blue/bottom-right.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/blue/bottom.png b/resources/library/applications/GraphMe.wgt/Images/blue/bottom.png new file mode 100644 index 00000000..0ff3f4a5 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/blue/bottom.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/blue/center.png b/resources/library/applications/GraphMe.wgt/Images/blue/center.png new file mode 100644 index 00000000..6b984a2f Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/blue/center.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/blue/left.png b/resources/library/applications/GraphMe.wgt/Images/blue/left.png new file mode 100644 index 00000000..81b692b1 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/blue/left.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/blue/right.png b/resources/library/applications/GraphMe.wgt/Images/blue/right.png new file mode 100644 index 00000000..db5ed624 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/blue/right.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/blue/top-left.png b/resources/library/applications/GraphMe.wgt/Images/blue/top-left.png new file mode 100644 index 00000000..e5f38e7d Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/blue/top-left.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/blue/top-right.png b/resources/library/applications/GraphMe.wgt/Images/blue/top-right.png new file mode 100644 index 00000000..b27b6ec9 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/blue/top-right.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/blue/top.png b/resources/library/applications/GraphMe.wgt/Images/blue/top.png new file mode 100644 index 00000000..9538dd53 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/blue/top.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/cursor.png b/resources/library/applications/GraphMe.wgt/Images/cursor.png new file mode 100644 index 00000000..3170b04a Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/cursor.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/darkblue/bottom-left.png b/resources/library/applications/GraphMe.wgt/Images/darkblue/bottom-left.png new file mode 100644 index 00000000..cd121e50 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/darkblue/bottom-left.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/darkblue/bottom-right.png b/resources/library/applications/GraphMe.wgt/Images/darkblue/bottom-right.png new file mode 100644 index 00000000..7c32bb8a Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/darkblue/bottom-right.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/darkblue/bottom.png b/resources/library/applications/GraphMe.wgt/Images/darkblue/bottom.png new file mode 100644 index 00000000..c9e7b15f Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/darkblue/bottom.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/darkblue/center.png b/resources/library/applications/GraphMe.wgt/Images/darkblue/center.png new file mode 100644 index 00000000..20e73707 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/darkblue/center.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/darkblue/left.png b/resources/library/applications/GraphMe.wgt/Images/darkblue/left.png new file mode 100644 index 00000000..d88f7bea Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/darkblue/left.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/darkblue/right.png b/resources/library/applications/GraphMe.wgt/Images/darkblue/right.png new file mode 100644 index 00000000..c3994ad0 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/darkblue/right.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/darkblue/top-left.png b/resources/library/applications/GraphMe.wgt/Images/darkblue/top-left.png new file mode 100644 index 00000000..8b03ecca Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/darkblue/top-left.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/darkblue/top-right.png b/resources/library/applications/GraphMe.wgt/Images/darkblue/top-right.png new file mode 100644 index 00000000..9db3c018 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/darkblue/top-right.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/darkblue/top.png b/resources/library/applications/GraphMe.wgt/Images/darkblue/top.png new file mode 100644 index 00000000..7b068448 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/darkblue/top.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/fond1.png b/resources/library/applications/GraphMe.wgt/Images/fond1.png deleted file mode 100644 index 8084981e..00000000 Binary files a/resources/library/applications/GraphMe.wgt/Images/fond1.png and /dev/null differ diff --git a/resources/library/applications/GraphMe.wgt/Images/fond2.png b/resources/library/applications/GraphMe.wgt/Images/fond2.png deleted file mode 100644 index b6e1e839..00000000 Binary files a/resources/library/applications/GraphMe.wgt/Images/fond2.png and /dev/null differ diff --git a/resources/library/applications/GraphMe.wgt/Images/fond3.png b/resources/library/applications/GraphMe.wgt/Images/fond3.png deleted file mode 100644 index fb2b708e..00000000 Binary files a/resources/library/applications/GraphMe.wgt/Images/fond3.png and /dev/null differ diff --git a/resources/library/applications/GraphMe.wgt/Images/fond4.png b/resources/library/applications/GraphMe.wgt/Images/fond4.png deleted file mode 100644 index 0b945c39..00000000 Binary files a/resources/library/applications/GraphMe.wgt/Images/fond4.png and /dev/null differ diff --git a/resources/library/applications/GraphMe.wgt/Images/fond5.png b/resources/library/applications/GraphMe.wgt/Images/fond5.png deleted file mode 100644 index 740163a9..00000000 Binary files a/resources/library/applications/GraphMe.wgt/Images/fond5.png and /dev/null differ diff --git a/resources/library/applications/GraphMe.wgt/Images/gauche1.png b/resources/library/applications/GraphMe.wgt/Images/gauche1.png deleted file mode 100644 index ef1fb6ed..00000000 Binary files a/resources/library/applications/GraphMe.wgt/Images/gauche1.png and /dev/null differ diff --git a/resources/library/applications/GraphMe.wgt/Images/gauche2.png b/resources/library/applications/GraphMe.wgt/Images/gauche2.png deleted file mode 100644 index 080a17f7..00000000 Binary files a/resources/library/applications/GraphMe.wgt/Images/gauche2.png and /dev/null differ diff --git a/resources/library/applications/GraphMe.wgt/Images/gauche3.png b/resources/library/applications/GraphMe.wgt/Images/gauche3.png deleted file mode 100644 index 2fd7dedc..00000000 Binary files a/resources/library/applications/GraphMe.wgt/Images/gauche3.png and /dev/null differ diff --git a/resources/library/applications/GraphMe.wgt/Images/gradient.png b/resources/library/applications/GraphMe.wgt/Images/gradient.png new file mode 100755 index 00000000..5fceffec Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/gradient.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/gradient1.png b/resources/library/applications/GraphMe.wgt/Images/gradient1.png new file mode 100755 index 00000000..2b4ba137 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/gradient1.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/gradient2.png b/resources/library/applications/GraphMe.wgt/Images/gradient2.png new file mode 100644 index 00000000..57d0779c Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/gradient2.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/gradient3.png b/resources/library/applications/GraphMe.wgt/Images/gradient3.png new file mode 100644 index 00000000..441ccf51 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/gradient3.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/gradient4.png b/resources/library/applications/GraphMe.wgt/Images/gradient4.png new file mode 100644 index 00000000..c3449f77 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/gradient4.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/mini_icon.png b/resources/library/applications/GraphMe.wgt/Images/mini_icon.png new file mode 100644 index 00000000..bddfac5d Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/mini_icon.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/move.png b/resources/library/applications/GraphMe.wgt/Images/move.png new file mode 100644 index 00000000..045554aa Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/move.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/tangent.png b/resources/library/applications/GraphMe.wgt/Images/tangent.png new file mode 100644 index 00000000..f08c37d8 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/tangent.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/white/bottom-left.png b/resources/library/applications/GraphMe.wgt/Images/white/bottom-left.png new file mode 100644 index 00000000..8e8312e3 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/white/bottom-left.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/white/bottom-right.png b/resources/library/applications/GraphMe.wgt/Images/white/bottom-right.png new file mode 100644 index 00000000..4e691af1 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/white/bottom-right.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/white/bottom.png b/resources/library/applications/GraphMe.wgt/Images/white/bottom.png new file mode 100644 index 00000000..43ddff4f Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/white/bottom.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/white/center.png b/resources/library/applications/GraphMe.wgt/Images/white/center.png new file mode 100644 index 00000000..4068e6f1 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/white/center.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/white/left.png b/resources/library/applications/GraphMe.wgt/Images/white/left.png new file mode 100644 index 00000000..b2116a17 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/white/left.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/white/right.png b/resources/library/applications/GraphMe.wgt/Images/white/right.png new file mode 100644 index 00000000..c6e32ad4 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/white/right.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/white/top-left.png b/resources/library/applications/GraphMe.wgt/Images/white/top-left.png new file mode 100644 index 00000000..7c3a5766 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/white/top-left.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/white/top-right.png b/resources/library/applications/GraphMe.wgt/Images/white/top-right.png new file mode 100644 index 00000000..037ffc80 Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/white/top-right.png differ diff --git a/resources/library/applications/GraphMe.wgt/Images/white/top.png b/resources/library/applications/GraphMe.wgt/Images/white/top.png new file mode 100644 index 00000000..1bd3bf4d Binary files /dev/null and b/resources/library/applications/GraphMe.wgt/Images/white/top.png differ diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/Affichage.js b/resources/library/applications/GraphMe.wgt/JavaScript/Affichage.js new file mode 100644 index 00000000..9407063d --- /dev/null +++ b/resources/library/applications/GraphMe.wgt/JavaScript/Affichage.js @@ -0,0 +1,386 @@ + +// Convertir une coordonnée sur le graphique en position relative à l'affichage (ou à l'écran si ecran = true) +function coordToPosX(x, ecran){ + if(ecran){ + return coordToPosX(x, false)+affichage.offsetLeft; + } + else{ + return (x - affichage.xGauche) * affichage.multX; + } +} +function coordToPosY(y, ecran){ + if(ecran){ + return coordToPosY(y, false)+affichage.offsetTop; + } + else{ + return affichage.hauteur - (y - affichage.yBas) * affichage.multY; + } +} + +var affichage = { + // Options + id : "affichage", + largeur : 640, // Set by init + hauteur : 430, // Set by init + couleurFond : "rgba(0,0,0,0)", + + // Bornes (zone d'affichage) + xGauche : -5.5, // Set by init + xDroite : 5.5, // Set by init + yBas : -3.7, + yHaut : 3.7, + + multX : 1, + multY : 1, + + // Axes + axes : true, + couleurAxes : "rgba(0,0,0,0.5)", + widthAxes : 2, + // Grille + grille : true, + couleurGrille : "rgba(255,255,255,0.1)", + widthGrille : 2, + // Echelle + echelle : true, + couleurEchelle : "rgba(255,255,255,1)", + + // Précision + precision : 100, + precisionAmelioree : true, // false = fonction plus jolie lorsqu'on dé-zoom, true = affichage plus rapide lors du dé-zoom. + + // Méthode et style + methode : "canvas", + style : "continu", + + // Variable définies lors de l'initialisation + canvas : null, + ctx : null, + object : null, + offsetTop : null, // Position de l'affichage par rapport à la page + offsetLeft : null, + + init : function(element, width, height){ + this.setBornes(); + + // Supprimer le contenu de l'affichage + if(!element){ + element = document.getElementById(this.id); + } + if(element.hasChildNodes()){ + while(element.childNodes.length >= 1 ){ + element.removeChild(element.firstChild); + } + } + + // Définir la taille + this.largeur = width || element.clientWidth; + this.hauteur = height || element.clientHeight; + + // Set left and right proportionally to width, height, top and bottom + var centerX = this.xGauche + (this.xDroite - this.xGauche)/2; + var centerY = this.yBas + (this.yHaut - this.yBas)/2; + var dx = ((this.yHaut - this.yBas) / 2) * this.largeur / this.hauteur; + this.xGauche = Math.round((centerX - dx)*100)/100; + this.xDroite= Math.round((centerX + dx)*100)/100; + this.setBornes(); + + // Récupérer la position + var boundingClientRect = element.getBoundingClientRect(); + this.offsetTop = boundingClientRect.top; + this.offsetLeft = boundingClientRect.left; + + // Sélectionner la méthode d'affichage + if(this.methode == "svg"){ +// this.object = document.createElement("embed"); +// this.object.type = "image/svg+xml"; +// this.object.src = "AffichageSVG.svg"; + this.object = document.getElementById("embedSVG"); + this.object.width = this.largeur; + this.object.height = this.hauteur; + this.object.style.top = this.offsetTop +1 +"px"; + this.object.style.left = this.offsetLeft +1 +"px"; + this.object.style.display = "block"; +// element.appendChild(this.object); + +// affichage.ctx = svg; +// affichage.dessiner(); +// // Exécuter this.dessiner() maintenant ne va pas car svg n'est pas +// // encore défini dans cette fonction, il faut en lancer un nouvelle... + setTimeout("affichage.ctx = svg", 50); + setTimeout("affichage.dessiner()", 100); + } + else if(this.methode == "uniboard"){ + if(window.uniboard || window.sankore){ + try{ + initUniboard(); + this.ctx = uniboard; + this.dessiner(); + } + catch(err){ + alert(err.message); + } + } + else{ + this.methode = "canvas"; + this.setOptions(); + this.init(); + } + } + else{ + document.getElementById("embedSVG").style.display = "none"; + + this.canvas = document.createElement("canvas"); + this.canvas.width = this.largeur; + this.canvas.height = this.hauteur; + element.appendChild(this.canvas); + + this.ctx = this.canvas.getContext("2d"); + + this.dessiner(); + } + + // Événements + if(window.addEventListener){ + element = document.getElementById("eventAffichage"); + element.addEventListener('DOMMouseScroll', souris.wheel, false); + element.onmousewheel = souris.wheel; + element.oncontextmenu = ctxMenu.ouvrir; + } + }, + + calculer : function(){ + this.getBornes(); + this.getOptions(); + if(fonction3D){ + display3D.draw() + } + else{ + this.dessiner(); + } + saveOptions(); + }, + + dessiner : function(){ + try{ +// var ti = new Date().getTime(); + var precision; + if(this.precisionAmelioree){ + precision = 10/this.precision; + } + else{ + precision = Math.abs(this.xDroite - this.xGauche)/this.precision; + } + this.multX = this.largeur/Math.abs(this.xDroite - this.xGauche); + this.multY = this.hauteur/Math.abs(this.yHaut - this.yBas); + + var ctx = new Object(); + ctx = this.ctx; + ctx.clearRect(0,0,this.largeur,this.hauteur); + + ctx.fillStyle = this.couleurFond; + ctx.fillRect(0,0,this.largeur,this.hauteur); + + ctx.strokeOpacity = 1; // svg + + // Couleur pour l'aire sous la fonction + ctx.fillStyle = "rgba(0,180,255,0.3)"; + + // Fonctions + for(var i=0; i x : ajouter = 0.5") + } + + this.xGauche -= ajouter; + this.xDroite += ajouter; + + // Vertical + diffBornes = Math.abs(this.yHaut - this.yBas); + ajouter = Math.round(diffBornes * (facteur-1)*2)/4; + if(ajouter == 0){ + ajouter = 0.25; +// log("affichage.zoom -> y : ajouter = 0.5") + } + + this.yBas -= ajouter; + this.yHaut += ajouter; + + this.dessiner(); + this.setBornes(); + + saveOptions(); + } +}; diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/Affichage3D.js b/resources/library/applications/GraphMe.wgt/JavaScript/Affichage3D.js old mode 100644 new mode 100755 index b6ff0e70..9cf88b63 --- a/resources/library/applications/GraphMe.wgt/JavaScript/Affichage3D.js +++ b/resources/library/applications/GraphMe.wgt/JavaScript/Affichage3D.js @@ -1,332 +1,407 @@ -var ctx -var centreX, centreY -var echelle3D = 50 -var precisionDroite3D = 0.02 -var precisionFonction3D = 0.2 -var fonction3D = false -var angle = Math.PI/8 -var valeurZoom3D = 1 -var gauche3D = -6.5 -var droite3D = 6.5 -var outilPrecedent = "" -var rouge3D = 0 -var vert3D = 1 -var bleu3D = 2 -var couleurGenerale = 0 -function activer3D(){ - if(fonction3D){ // Si activé alors on le désative - fonction3D = false - choixOutil(outilPrecedent) - document.getElementById('onglet3D').innerHTML = "3D" - largeur = 500 - document.getElementById("affichage").style.width = largeur+"px" - document.getElementById("affichage").style.left = "129px" - document.getElementById("flecheGauche").style.left = "137px" - document.getElementById("flecheHaut").style.left = "345px" - document.getElementById("flecheBas").style.left = "345px" - document.getElementById("gauche").style.display = "block" - document.getElementById("gauche3D").style.display = "none" - var elements = document.getElementsByClassName("menu") - for(var i=0; i' - ctx = document.getElementById('canvas').getContext('2d') - ctx.clearRect(0, 0, 640, 480) - ctx.fillStyle = "rgba(0, 0, 0, 0.5)" - ctx.fillRect(0,0,640,480) - axes() -} +var fonction3D = false; +var outilPrecedent = ""; -function dessiner3D(eq){ - initialise3D() - if(document.getElementById("selectAffichage3D").value == "points"){ - var coordX, coordY, coordZ - for(var x=gauche3D; x 1){ - opacity = 1 - } - if(opacity < 0){ - opacity = 0 - } - if(couleur[0] > 255){ - couleur[0] = 255 - } - if(couleur[0] < 0){ - couleur[0] = 0 - } - if(couleur[1] > 255){ - couleur[1] = 255 - } - if(couleur[1] < 0){ - couleur[1] = 0 - } +var display3D = { + canvas: null, + ctx: null, + width: 0, + height: 0, + centerX: 0, + centerY: 0, + scale: 50, + linePrecision: 0.02, + functionPrecision: 0.2, + angle: Math.PI/8, + zoomValue: 1, + left: -6.5, + right: 6.5, + rouge3D: 0, + vert3D: 1, + bleu3D: 2, + couleurGenerale: 0, + background: "rgba(0, 0, 0, 0.5)", + + init: function(width, height){ + var displayElement = document.getElementById("affichage"); + + // Clear displayElement content + if(displayElement.hasChildNodes()){ + while(displayElement.childNodes.length >= 1 ){ + displayElement.removeChild(displayElement.firstChild); + } + } + + // Setup sizes + this.width = width || displayElement.clientWidth; + this.height = height || displayElement.clientHeight; + this.centerX = this.width / 2; + this.centerY = this.height / 2; + + // Create canvas + this.canvas = document.createElement("canvas"); + this.canvas.width = this.width; + this.canvas.height = this.height; + displayElement.appendChild(this.canvas); + + this.ctx = this.canvas.getContext('2d'); + this.clear(); + }, + + clear: function(){ + var ctx = this.ctx; + ctx.clearRect(0, 0, this.width, this.height); + ctx.fillStyle = this.background; + ctx.fillRect(0, 0, this.width, this.height); + this.axes(); + }, + + draw: function(){ + // var ti = new Date().getTime(); + // this.init(); + this.clear(); + + var txtFct = fct.remplacer(fct.verifier(document.getElementById("input3D").value)); + if(txtFct == ""){ + return; + } + + var func = new CartesianFunction(txtFct); + + if(document.getElementById("selectAffichage3D").value == "points"){ + var coordX, coordY, coordZ; + for(var x=this.left; xthis.left; x1-=this.functionPrecision){ + for(var y1=this.right; y1>this.left; y1-=this.functionPrecision){ + x = x1; + y = y1; + z1 = func.f(x,y); + x2 = x1 - this.functionPrecision; + y2 = y1; + x = x2; + //y = y2; + z2 = func.f(x,y); + x3 = x2; + y3 = y2 - this.functionPrecision; + //x = x3; + y = y3; + z3 = func.f(x,y); + x4 = x3 + this.functionPrecision; + y4 = y3; + x = x4; + //y = y4; + z4 = func.f(x,y); + if(isNaN(z1)||isNaN(z2)||isNaN(z3)||isNaN(z4)){ + continue; + } + this.polygone3D(x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4); + } + } + } + } + // var tf = new Date().getTime(); + // window.console.log(tf-ti); + }, + + // Dessine un point à la position (x, y, z) + point3D: function(x, y, z){ + var posX = (Math.sin(this.angle)*x + Math.cos(this.angle)*y)*this.scale; + var posZ = -(z - Math.cos(this.angle)*x/2.6 + Math.sin(this.angle)*y/2.6)*this.scale; - ctx.save() - ctx.translate(centreX, centreY) - ctx.scale(valeurZoom3D, valeurZoom3D) - ctx.fillStyle = "rgba("+couleur[rouge3D]+","+couleur[vert3D]+", "+couleur[bleu3D]+", "+opacity+")" - ctx.fillRect(posX-1, posZ-1, 2, 2) - ctx.restore() -} - -// Dessine un polygone qui a comme sommets : (x1, y1, z1) , (x2, y2, z2), (x3, y3, z3) et (x4, y4, z4) -function polygone3D(x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4){ - ctx.save() - ctx.translate(centreX, centreY) - ctx.scale(valeurZoom3D, valeurZoom3D) - ctx.beginPath() - ctx.moveTo((Math.sin(angle)*x1 + Math.cos(angle)*y1)*echelle3D , -(z1 - Math.cos(angle)*x1/2.6 + Math.sin(angle)*y1/2.6)*echelle3D) - ctx.lineTo((Math.sin(angle)*x2 + Math.cos(angle)*y2)*echelle3D , -(z2 - Math.cos(angle)*x2/2.6 + Math.sin(angle)*y2/2.6)*echelle3D) - ctx.lineTo((Math.sin(angle)*x3 + Math.cos(angle)*y3)*echelle3D , -(z3 - Math.cos(angle)*x3/2.6 + Math.sin(angle)*y3/2.6)*echelle3D) - ctx.lineTo((Math.sin(angle)*x4 + Math.cos(angle)*y4)*echelle3D , -(z4 - Math.cos(angle)*x4/2.6 + Math.sin(angle)*y4/2.6)*echelle3D) + var opacity = Math.round((1-((5+y*Math.sin(this.angle)-x*Math.cos(this.angle)) / 450)*this.scale)*1000)/1000; + var couleur = new Array(); + couleur[0] = Math.round((5+z)*this.scale); + couleur[1] = Math.round(510 - (5+z)*this.scale); + couleur[2] = this.couleurGenerale; + if(opacity > 1){ opacity = 1; } + if(opacity < 0){ opacity = 0; } + if(couleur[0] > 255){ couleur[0] = 255; } + if(couleur[0] < 0){ couleur[0] = 0; } + if(couleur[1] > 255){ couleur[1] = 255; } + if(couleur[1] < 0){ couleur[1] = 0; } - var opacity = Math.round((1-((5+y1*Math.sin(angle)-x1*Math.cos(angle)) / 450)*echelle3D)*1000)/1000 - var couleur = new Array() - couleur[0] = Math.round((5+z1)*echelle3D) - couleur[1] = Math.round(510 - (5+z1)*echelle3D) - couleur[2] = couleurGenerale - if(opacity > 1){ - opacity = 1 - } - if(opacity < 0){ - opacity = 0 - } - if(couleur[0] > 255){ - couleur[0] = 255 - } - if(couleur[0] < 0){ - couleur[0] = 0 - } - if(couleur[1] > 255){ - couleur[1] = 255 - } - if(couleur[1] < 0){ - couleur[1] = 0 - } + var ctx = this.ctx; + ctx.save(); + ctx.translate(this.centerX, this.centerY); + ctx.scale(this.zoomValue, this.zoomValue); + ctx.fillStyle = "rgba("+couleur[this.rouge3D]+","+couleur[this.vert3D]+", "+couleur[this.bleu3D]+", "+opacity+")"; + ctx.fillRect(posX-1, posZ-1, 2, 2); + ctx.restore(); + }, + + // Dessine un polygone qui a comme sommets : (x1, y1, z1) , (x2, y2, z2), (x3, y3, z3) et (x4, y4, z4) + polygone3D: function(x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4){ + var ctx = this.ctx; + ctx.save(); + ctx.translate(this.centerX, this.centerY); + ctx.scale(this.zoomValue, this.zoomValue); + ctx.beginPath(); + ctx.moveTo((Math.sin(this.angle)*x1 + Math.cos(this.angle)*y1)*this.scale , -(z1 - Math.cos(this.angle)*x1/2.6 + Math.sin(this.angle)*y1/2.6)*this.scale); + ctx.lineTo((Math.sin(this.angle)*x2 + Math.cos(this.angle)*y2)*this.scale , -(z2 - Math.cos(this.angle)*x2/2.6 + Math.sin(this.angle)*y2/2.6)*this.scale); + ctx.lineTo((Math.sin(this.angle)*x3 + Math.cos(this.angle)*y3)*this.scale , -(z3 - Math.cos(this.angle)*x3/2.6 + Math.sin(this.angle)*y3/2.6)*this.scale); + ctx.lineTo((Math.sin(this.angle)*x4 + Math.cos(this.angle)*y4)*this.scale , -(z4 - Math.cos(this.angle)*x4/2.6 + Math.sin(this.angle)*y4/2.6)*this.scale); - ctx.fillStyle = "rgba("+couleur[rouge3D]+","+couleur[vert3D]+", "+couleur[bleu3D]+", "+opacity+")" - ctx.closePath() - ctx.fill() - ctx.restore() -} + var opacity = Math.round((1-((5+y1*Math.sin(this.angle)-x1*Math.cos(this.angle)) / 450)*this.scale)*1000)/1000; + var couleur = new Array(); + couleur[0] = Math.round((5+z1)*this.scale); + couleur[1] = Math.round(510 - (5+z1)*this.scale); + couleur[2] = this.couleurGenerale; + if(opacity > 1){ opacity = 1; } + if(opacity < 0){ opacity = 0; } + + // for(var i=0; i 255){ couleur[0] = 255; } + if(couleur[0] < 0){ couleur[0] = 0; } + if(couleur[1] > 255){ couleur[1] = 255; } + if(couleur[1] < 0){ couleur[1] = 0; } -// Dessine les axes -function axes(){ - for(var i=-5; i<5; i+=precisionDroite3D){ - point3D(0, 0, i) - } - for(var i=-5.5; i<5.5; i+=precisionDroite3D){ - point3D(i, 0, 0) - } - for(var i=-5.5; i<5.5; i+=precisionDroite3D){ - point3D(0, i, 0) - } -} + ctx.fillStyle = "rgba("+couleur[this.rouge3D]+","+couleur[this.vert3D]+", "+couleur[this.bleu3D]+", "+opacity+")"; + ctx.strokeStyle = "rgba(0,0,0,0.1)"; + ctx.closePath(); + ctx.fill(); + ctx.stroke(); + ctx.restore(); + }, -function cube(x, y, z, r){ - // Face de devant - for(var i=0; i 255){ - couleurGenerale = 255 - } - switch(document.getElementById("selectRouge3D").value){ - case "plus": - rouge3D = 0 - rouge = 255 - sensRouge = -1 - break - case "moins": - rouge3D = 1 - rouge = 0 - sensRouge = 1 - break - case "tout": - rouge3D = 2 - rouge = couleurGenerale - sensRouge = 0 - break - } - switch(document.getElementById("selectVert3D").value){ - case "plus": - vert3D = 0 - vert = 255 - sensVert = -1 - break - case "moins": - vert3D = 1 - vert = 0 - sensVert = 1 - break - case "tout": - vert3D = 2 - vert = couleurGenerale - sensVert = 0 - break - } - switch(document.getElementById("selectBleu3D").value){ - case "plus": - bleu3D = 0 - bleu = 255 - sensBleu = -1 - break - case "moins": - bleu3D = 1 - bleu = 0 - sensBleu = 1 - break - case "tout": - bleu3D = 2 - bleu = couleurGenerale - sensBleu = 0 - break - } - document.getElementById("apercuCouleur3D").innerHTML = "." - for(var i=0; i." - } -} + cube: function(x, y, z, r){ + // Face de devant + for(var i=0; i 255){ + this.couleurGenerale = 255; + } + switch(document.getElementById("selectRouge3D").value){ + case "plus": + this.rouge3D = 0; + rouge = 255; + sensRouge = -1; + break; + case "moins": + this.rouge3D = 1; + rouge = 0; + sensRouge = 1; + break; + case "tout": + this.rouge3D = 2; + rouge = this.couleurGenerale; + sensRouge = 0; + break; + } + switch(document.getElementById("selectVert3D").value){ + case "plus": + this.vert3D = 0; + vert = 255; + sensVert = -1; + break; + case "moins": + this.vert3D = 1; + vert = 0; + sensVert = 1; + break; + case "tout": + this.vert3D = 2; + vert = this.couleurGenerale; + sensVert = 0; + break; + } + switch(document.getElementById("selectBleu3D").value){ + case "plus": + this.bleu3D = 0; + bleu = 255; + sensBleu = -1; + break; + case "moins": + this.bleu3D = 1; + bleu = 0; + sensBleu = 1; + break; + case "tout": + this.bleu3D = 2; + bleu = this.couleurGenerale; + sensBleu = 0; + break; + } + document.getElementById("apercuCouleur3D").innerHTML = "."; + for(var i=0; i."; + } + if(this.ctx){ + this.draw(); + } + }, + + zoom: function(value){ + if(!fonction3D){ + return; + } + this.zoomValue *= value; + this.left /= value; + this.right /= value; + this.functionPrecision /= value; + this.linePrecision /= value; + //alert(this.zoomValue+" ; "+this.left+" ; "+this.right+" ; "+this.functionPrecision+" ; "+this.linePrecision); + this.draw(); + }, + + move: function(value){ + this.angle += Math.PI/32 * value; + this.draw(); + }, + + initZoom: function(){ + this.angle = Math.PI/8; + this.zoomValue = 1; + this.left = -6.5; + this.right = 6.5; + this.draw(); + } +}; -function zoom3D(valeur){ - valeurZoom3D *= valeur - gauche3D /= valeur - droite3D /= valeur - precisionFonction3D /= valeur - precisionDroite3D /= valeur - //alert(valeurZoom3D+" ; "+gauche3D+" ; "+droite3D+" ; "+precisionFonction3D+" ; "+precisionDroite3D) - actualiserGraph() -} \ No newline at end of file diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/AffichageSVG.svg b/resources/library/applications/GraphMe.wgt/JavaScript/AffichageSVG.svg new file mode 100644 index 00000000..ac73b17a --- /dev/null +++ b/resources/library/applications/GraphMe.wgt/JavaScript/AffichageSVG.svg @@ -0,0 +1,100 @@ + + + + + + + \ No newline at end of file diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/AffichageStandard.js b/resources/library/applications/GraphMe.wgt/JavaScript/AffichageStandard.js deleted file mode 100644 index b5ab2aad..00000000 --- a/resources/library/applications/GraphMe.wgt/JavaScript/AffichageStandard.js +++ /dev/null @@ -1,432 +0,0 @@ -// ------------------ SVG et canvas ------------------ - -// Cette fonction calcule tous les points de la fonction mathématique. -// Elle place chaque coordonnée "x" et "y" dans les tableaux "pointX" et "pointY" -// A la fin, elle choisi la méthode d'affichage entre : -// 1) une seule image SVG -// 2) plusieurs images SVG - function evaluerSVG(eq) { - borneXGauche = parseFloat(document.getElementById("borneXGauche").value) - borneXDroite = parseFloat(document.getElementById("borneXDroite").value) - borneYGauche = parseFloat(document.getElementById("borneYGauche").value) - borneYDroite = parseFloat(document.getElementById("borneYDroite").value) - multiplicateurX = largeur/Math.abs(borneXDroite - borneXGauche) - multiplicateurY = hauteur/Math.abs(borneYDroite - borneYGauche) - lineWidth = document.getElementById("inputTaille").value - var i = 0 - var y1, p1 - - for(x=borneXGauche; x<=(borneXDroite+5*precision); x=x+precision){ - y = eval(eq) - if(!isNaN(y)){ - i++ - pointX[i] = (x - borneXGauche) * multiplicateurX - pointY[i] = hauteur - ((y - borneYGauche) * multiplicateurY) - pente[i] = hauteur - (((y-y1)/precision - borneYGauche)* multiplicateurY) - pente2[i] = hauteur - ((((y-y1)/precision-p1)/precision - borneYGauche)* multiplicateurY) - p1 = (y-y1)/precision - y1 = y - } - } - pente[1]=pente[2] - pente2[2]=pente2[3] - pente2[1]=pente2[2] - - //alert(pointX+'\n'+pointY) - if(document.getElementById("selectMethodeAffichage").value == "svg2"){ - calculerGraphSVG2(i) - } - else{ - calculerGraphSVG(i) - } - } - -// Même fonction mais pour dessiner à l'aide de canvas - function evaluerCanvas(eq) { - borneXGauche = parseFloat(document.getElementById("borneXGauche").value) - borneXDroite = parseFloat(document.getElementById("borneXDroite").value) - borneYGauche = parseFloat(document.getElementById("borneYGauche").value) - borneYDroite = parseFloat(document.getElementById("borneYDroite").value) - multiplicateurX = largeur/Math.abs(borneXDroite - borneXGauche) - multiplicateurY = hauteur/Math.abs(borneYDroite - borneYGauche) - lineWidth = document.getElementById("inputTaille").value - var i = 0 - var y1, p1 - - for(x=borneXGauche; x<=(borneXDroite+5*precision); x=x+precision){ - y = eval(eq) - i++ - if(!isNaN(y)){ - pointX[i] = (x - borneXGauche) * multiplicateurX - pointY[i] = hauteur - ((y - borneYGauche) * multiplicateurY) - pente[i] = hauteur - (((y-y1)/precision - borneYGauche)* multiplicateurY) - pente2[i] = hauteur - ((((y-y1)/precision-p1)/precision - borneYGauche)* multiplicateurY) - p1 = (y-y1)/precision - y1 = y - } - else{ - pointX[i] = "undefined" - pointY[i] = "undefined" - pente[i] = "undefined" - pente2[i] = "undefined" - } - } - pente[1]=pente[2] - pente2[2]=pente2[3] - pente2[1]=pente2[2] - - calculerGraphCanevas(i) - } - - -// ---- SVG (une image) ---- -// Génère le code HTML qui permet d'afficher le graphique et le place dans la div "affichage" - function calculerGraphSVG2(fin){ - image = "" - for (i=1; i' - } - graphique = '' - graphique = graphique + '' - image = ''+image+graphique+' ' - document.getElementById("affichage").innerHTML = image - //alert(image) - } - -// ---- SVG (images multiples) ---- -// Créé les différents éléments pour dessiner la fonction mathématique -// et les place dans la div "affichage" - function calculerGraphSVG(fin){ - document.getElementById("affichage").innerHTML = "" - svg = document.createElementNS("http://www.w3.org/2000/svg", "svg") - svg.setAttribute("width", "100%") - svg.setAttribute("height", "100%") - for (i=1; ihauteur)){ - i++ - } - if ((pointY[i]>hauteur) && (pointY[i+1]<0)){ - i++ - } - var ligne = document.createElementNS("http://www.w3.org/2000/svg", "line") - ligne.setAttribute("x1", pointX[i]+decalageX) - ligne.setAttribute("x2", pointX[i+1]+decalageX) - ligne.setAttribute("y1", pointY[i]+decalageY) - ligne.setAttribute("y2", pointY[i+1]+decalageY) - ligne.setAttribute("stroke", couleurFonction) - ligne.setAttribute("stroke-width", lineWidth) - svg.appendChild(ligne) - } - - // dérivée - if(document.getElementById("checkDerivee").checked){ - for (i=1; i' - ctx = document.getElementById('canvas').getContext('2d') - var undefined = true - // Autres fonctions - for(var i=0; ihauteur)){ - sankore.moveTo(pointX[i+1]+decalageX,pointY[i+1]+decalageY) - continue - } - sankore.drawLineTo(pointX[i]+decalageX, pointY[i]+decalageY, lineWidth) - } - - //dessiner le cadre - sankore.moveTo(0+decalageX,0+decalageY) - sankore.drawLineTo(largeur+decalageX, 0+decalageY, lineWidth) - sankore.drawLineTo(largeur+decalageX, hauteur+decalageY, lineWidth) - sankore.drawLineTo(0+decalageX, hauteur+decalageY, lineWidth) - sankore.drawLineTo(0+decalageX, 0+decalageY, lineWidth) - - //dessiner les axes - sankore.moveTo((-borneXGauche*multiplicateurX)+decalageX, 0+decalageY) - sankore.drawLineTo((-borneXGauche*multiplicateurX)+decalageX, hauteur+decalageY, lineWidth) - sankore.moveTo(0+decalageX, (hauteur-(-borneYGauche*multiplicateurY))+decalageY) - sankore.drawLineTo(largeur+decalageX, (hauteur-(-borneYGauche*multiplicateurY))+decalageY, lineWidth) - - decalageX += 250 - decalageY += 200 - largeur -= 100 - hauteur -= 100 - sankore.setTool('arrow') +function initUniboard(){ + if(!window.uniboard && window.sankore){ + uniboard = sankore; } - \ No newline at end of file + uniboard.centerOn(337,245); +// uniboard.setTool("pen"); + + // Paramètres par défaut + uniboard.lineWidth = 1; + uniboard.fillStyle = "black"; + uniboard.strokeStyle = "black"; + + // Position du curseur pour écrire des nombres + uniboard.cursorX = 0; + uniboard.cursorY = 0; + + // Fonctions + uniboard.strokeColor = function(){ + this.setPenColor(colorToHex(this.strokeStyle)); + }; + + uniboard.fillColor = function(){ + this.setPenColor(colorToHex(this.fillStyle)); + }; + + uniboard.lineTo = function(x, y){ + if(y>-20 && yhauteur-1){ break BoucleFor } - tableau[y][x] = 1 - } - tableau.reverse() - graphique = "" - calculerGraphXPM() - } - -// Permet de remplir le tableau avec uniquement des 1 ou des 0. -// (pour que l'image soit toute blanche ou toute noir) - function tableauUni(valeurCouleur){ - for (i=0; i" - document.getElementById("affichage").innerHTML = image - } \ No newline at end of file diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/CartesianFunction.js b/resources/library/applications/GraphMe.wgt/JavaScript/CartesianFunction.js new file mode 100644 index 00000000..8ea53c78 --- /dev/null +++ b/resources/library/applications/GraphMe.wgt/JavaScript/CartesianFunction.js @@ -0,0 +1,337 @@ + +function CartesianFunction(txtFct){ + + this.setFct = function(txt){ + this.fct = txt; + this.f = new Function("x", "y", "return "+this.fct); + } + + if(txtFct){ + this.setFct(txtFct); + } + this.couleur = fct.couleur; + this.width = document.getElementById("inputTaille").value; + this.aire = document.getElementById("checkAire").checked ? true : false; + this.derivee1 = document.getElementById("checkDerivee1").checked ? true : false; + this.couleurDerivee1 = "rgba(255,128,0,1)"; + this.derivee2 = document.getElementById("checkDerivee2").checked ? true : false; + this.couleurDerivee2 = "rgba(255,255,0,1)"; + this.primitive1 = document.getElementById("checkPrimitive1").checked ? true : false; + this.couleurPrimitive1 = "rgba(255,50,0,1)"; + this.conditionInitiale = 0; + this.style = document.getElementById("selectStyle").value; + + this.getX = function(x){ + return x; + }; + + this.getY = function(x){ + return this.f(x); + }; + + this.set = function(f){ + this.setFct(fct.remplacer(fct.verifier(f.fct))); + this.couleur = f.couleur; + this.couleurDerivee1 = f.couleurD1; + this.couleurDerivee2 = f.couleurD2; + this.couleurPrimitive1 = f.couleurP1; + this.width = f.width; + this.style = f.style; + this.aire = f.aire; + this.derivee1 = f.derivee1; + this.derivee2 = f.derivee2; + this.primitive1 = f.primitive1; + this.conditionInitiale = f.conditionInitiale; + return this; + }; + + this.get = function(){ + var f = {}; + f.type = "cartesian"; + f.fct = this.fct; + f.couleur = this.couleur; + f.couleurD1 = this.couleurDerivee1; + f.couleurD2 = this.couleurDerivee2; + f.couleurP1 = this.couleurPrimitive1; + f.width = this.width; + f.style = this.style; + f.aire = this.aire; + f.derivee1 = this.derivee1; + f.derivee2 = this.derivee2; + f.primitive1 = this.primitive1; + f.conditionInitiale = this.conditionInitiale; + return f; + }; + + this.readableText = function(){ + return "f(x) = " + this.fct; + }; + + this.plot = function(ctx, precision, affichage){ + var x, y; + var pointX, pointY; + var nonDefini; + + if(this.style == "points"){ + precision *= 2; + } + + // Dérivée première + if(this.derivee1){ + ctx.beginPath(); + ctx.strokeStyle = this.couleurDerivee1; + ctx.fillStyle = this.couleurDerivee1; + ctx.moveTo(-100,-100); + nonDefini = 1; + var pente; + var x0 = affichage.xGauche-precision; + var y0 = this.f(x0); + + for(x = affichage.xGauche-precision*2; x <= affichage.xDroite+precision; x+=precision){ + // Evaluer la valeur y du point x + y = this.f(x); + if(!isNaN(y)){ + // Transformation des coordonnées + pente = (y-y0)/precision; + pointX = (x-precision/2 - affichage.xGauche) * affichage.multX; + pointY = affichage.hauteur - (pente - affichage.yBas) * affichage.multY; + y0 = y; + + // Dessiner la dérivée + if(nonDefini>0){ + nonDefini--; + ctx.moveTo(pointX, pointY); + } + else{ + if(this.style == "continu"){ + ctx.lineTo(pointX, pointY); + } + else if(this.style == "points"){ + ctx.beginPath(); + ctx.arc(pointX, pointY, this.width, 0, 2*Math.PI, true); + ctx.fill(); + } + else{ + ctx.lineTo(pointX, pointY); + nonDefini = 1; + } + } + } + else{ + nonDefini = 2; + } + } + if(this.style != "points"){ + ctx.stroke(); + } + } + + // Dérivée seconde + if(this.derivee2){ + ctx.beginPath(); + ctx.strokeStyle = this.couleurDerivee2; + ctx.fillStyle = this.couleurDerivee2; + ctx.moveTo(-100,-100); + nonDefini = 1; + var pente, pente2; + var x0 = affichage.xGauche-precision; + var y0 = this.f(x0); + var p0 = 0; + + for(x = affichage.xGauche-precision*3; x <= affichage.xDroite+precision; x+=precision){ + // Evaluer la valeur y du point x + y = this.f(x); + if(!isNaN(y)){ + // Transformation des coordonnées + p = (y-y0)/precision; + pente = (p-p0)/precision; + pointX = (x-precision/2 - affichage.xGauche) * affichage.multX; + pointY = affichage.hauteur - (pente - affichage.yBas) * affichage.multY; + y0 = y; + p0 = p; + + // Dessiner la dérivée seconde + if(nonDefini>0){ + nonDefini--; + ctx.moveTo(pointX, pointY); + } + else{ + if(this.style == "continu"){ + ctx.lineTo(pointX, pointY); + } + else if(this.style == "points"){ + ctx.beginPath(); + ctx.arc(pointX, pointY, this.width, 0, 2*Math.PI, true); + ctx.fill(); + } + else{ + ctx.lineTo(pointX, pointY); + nonDefini = 1; + } + } + } + else{ + nonDefini = 3; + } + } + if(this.style != "points"){ + ctx.stroke(); + } + } + + // Primitive première + if(this.primitive1){ + ctx.beginPath(); + ctx.strokeStyle = this.couleurPrimitive1; + ctx.fillStyle = this.couleurPrimitive1; + ctx.moveTo(-affichage.xGauche*affichage.multX,affichage.hauteur-(this.conditionInitiale-affichage.yBas)*affichage.multY); + nonDefini = 0; + var pente, y0; + var conditionInitiale = this.conditionInitiale; +// precision /= 4; + + // Partie droite + y0 = conditionInitiale; + for(x = precision; x <= affichage.xDroite+precision; x+=precision){ + // Evaluer la valeur y du point x + pente = this.f(x); + if(!isNaN(pente)){ + // Transformation des coordonnées + y = y0 + pente * precision; + + pointX = (x - affichage.xGauche) * affichage.multX; + pointY = affichage.hauteur - (y - affichage.yBas) * affichage.multY; + y0 = y; + + // Dessiner la primitive + if(nonDefini>0){ + nonDefini--; + ctx.moveTo(pointX, pointY); + } + else{ + if(this.style == "continu"){ + ctx.lineTo(pointX, pointY); + } + else if(this.style == "points"){ + ctx.beginPath(); + ctx.arc(pointX, pointY, this.width, 0, 2*Math.PI, true); + ctx.fill(); + } + else{ + ctx.lineTo(pointX, pointY); + nonDefini = 1; + } + } + } + else{ + nonDefini = 2; + } + } + if(this.style != "points"){ + ctx.stroke(); + } + // Partie gauche + ctx.beginPath(); + ctx.moveTo(-affichage.xGauche*affichage.multX,affichage.hauteur-(this.conditionInitiale-affichage.yBas)*affichage.multY); + nonDefini = 0; + y0 = conditionInitiale; + for(x = -precision; x >= affichage.xGauche-precision; x-=precision){ + // Evaluer la valeur y du point x + pente = this.f(x); + if(!isNaN(pente)){ + // Transformation des coordonnées + y = y0 - pente * precision; + + pointX = (x - affichage.xGauche) * affichage.multX; + pointY = affichage.hauteur - (y - affichage.yBas) * affichage.multY; + y0 = y; + + // Dessiner la primitive + if(nonDefini>0){ + nonDefini--; + ctx.moveTo(pointX, pointY); + } + else{ + if(this.style == "continu"){ + ctx.lineTo(pointX, pointY); + } + else if(this.style == "points"){ + ctx.beginPath(); + ctx.arc(pointX, pointY, this.width, 0, 2*Math.PI, true); + ctx.fill(); + } + else{ + ctx.lineTo(pointX, pointY); + nonDefini = 1; + } + } + } + else{ + nonDefini = 2; + } + } + if(this.style != "points"){ + ctx.stroke(); + } + } + + // Fonction + ctx.beginPath(); + ctx.lineWidth = this.width; + if(affichage.methode == "uniboard"){ + ctx.lineWidth *= 3; + } + ctx.strokeStyle = this.couleur; + ctx.fillStyle = this.couleur; + ctx.moveTo(-100,-100); + nonDefini = true; + for(x = affichage.xGauche-precision; x <= affichage.xDroite+precision; x+=precision){ + // Evaluer la valeur y du point x + y = this.f(x); + if(!isNaN(y) && y <= affichage.yHaut+Math.abs(affichage.yHaut) && y >= affichage.yBas-Math.abs(affichage.yBas)){ + // Transformation des coordonnées + pointX = (x - affichage.xGauche) * affichage.multX; + pointY = affichage.hauteur - (y - affichage.yBas) * affichage.multY; + + // Dessiner la fonction + if(nonDefini){ + nonDefini = false; + ctx.moveTo(pointX, pointY); + } + else{ + if(this.style == "continu"){ + ctx.lineTo(pointX, pointY); + } + else if(this.style == "points"){ + ctx.beginPath(); + ctx.arc(pointX, pointY, this.width, 0, 2*Math.PI, true); + ctx.fill(); + } + else{ + ctx.lineTo(pointX, pointY); + nonDefini = true; + } + } + + // Dessiner l'aire sous la fonction + if(this.aire){ + var zero = affichage.hauteur + affichage.yBas * affichage.multY; + var l = precision*affichage.multX; + ctx.fillStyle = "rgba(0,180,255,0.3)"; + ctx.fillRect(pointX-l/2, zero, l , pointY-zero); + ctx.fillStyle = this.couleur; + } + } + else{ + nonDefini = true; + } + } + if(this.style != "points"){ + ctx.stroke(); + } + + if(this.style == "points"){ + precision /= 2; + } + }; +} diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/ColorPicker.js b/resources/library/applications/GraphMe.wgt/JavaScript/ColorPicker.js index a90b82e6..ac4383ef 100644 --- a/resources/library/applications/GraphMe.wgt/JavaScript/ColorPicker.js +++ b/resources/library/applications/GraphMe.wgt/JavaScript/ColorPicker.js @@ -1,108 +1,580 @@ // -------------------- Color Picker -------------------- -var idColor = "" +var idColor = ""; // Différentes fonctions nécessaire au Color Picker (menu du choix de la couleur) -function colorSV(e){ - var element = document.getElementById('colorSV') - var posDivY = 0 - var posDivX = 0 - while(element){ - posDivY = posDivY + element.offsetTop - posDivX = posDivX + element.offsetLeft - element = element.offsetParent - } - document.getElementById("info").innerHTML = posDivX+" ; "+posDivY - S = 100-Math.round((e.clientY - posDivY -0)/255*100) - V = Math.round((e.clientX - posDivX -0)/255*100) - document.getElementById("inputValeur").value = V - document.getElementById("inputSaturation").value = S - document.getElementById("ligneValeur").setAttribute("x1", e.clientX-posDivX) - document.getElementById("ligneValeur").setAttribute("x2", e.clientX-posDivX) - document.getElementById("ligneSaturation").setAttribute("y1", e.clientY-posDivY) - document.getElementById("ligneSaturation").setAttribute("y2", e.clientY-posDivY) - colorRGB() -} -function colorT(e){ - var element = document.getElementById('colorT') - var posDiv = 0 - while(element){ - posDiv = posDiv + element.offsetTop - element = element.offsetParent - } - T = (e.clientY - posDiv -0) / 256*360 - r,g,b = 0 - while (true){ +var colorPicker = { + // Configuration + idSV : "canvasSV", // id du canvas affichant la saturation et la valeur + idT : "canvasT", // id du canvas affichant la teinte + idO : "canvasO", // id du canvas affichant l'opacité + width : 250, // largeur + height : 250, // hauteur + rayonRonds : 5, // rayon des ronds + ombreActive : "0px 0px 3px rgba(150,200,255,1), 0px 0px 8px rgba(64,190,255,1)", + ombreInactive : "0px 0px 5px rgba(64,64,64,0.4)", + + // Variables définies lors de l'initialisation + canvasSV : null, + canvasT : null, + canvasO : null, + ctxSV : null, + ctxT : null, + ctxO : null, + lingradS : null, + lingradV : null, + lingradT : null, + + // Couleurs + backgroundColor : "rgb(193,255,0)", + saturation : 100, + valeur : 100, + teinte : 75, + rouge : 193, + vert : 255, + bleu : 0, + opacity: 1, + // Couleurs RGB sans application de la saturation et de la valeur + r : 255, + g : 0, + b : 0, + + // Autres variables + sourisDown : false, // Indique si on clique sur le colorPicker ou pas + sourisDehors : true, // Indique si la souris est en-dehors du colorPicker lors d'un clique + idColor : null, + + // Fonction d'initialisation + init : function(id){ + // Récupérer les éléments + this.canvasSV = document.getElementById(this.idSV); + this.canvasT = document.getElementById(this.idT); + this.canvasO = document.getElementById(this.idO); + + // Définir la taille + this.canvasSV.width = this.width; + this.canvasSV.height = this.height; + this.canvasSV.style.width = this.width + "px"; + this.canvasSV.style.height = this.height + "px"; + + this.canvasT.width = this.width/10; + this.canvasT.height = this.height; + this.canvasT.style.width = this.width/10 + "px"; + this.canvasT.style.height = this.height + "px"; + + this.canvasO.width = this.width*1.15; + this.canvasO.height = this.height/10; + this.canvasO.style.width = this.width*1.15 + "px"; + this.canvasO.style.height = this.height/10 + "px"; + + // Initialisation canvas + this.ctxSV = this.canvasSV.getContext("2d"); + this.ctxT = this.canvasT.getContext("2d"); + this.ctxO = this.canvasO.getContext("2d"); + + // Création des dégradés + this.lingradV = this.ctxSV.createLinearGradient(0, 0, 0, this.height); + this.lingradV.addColorStop(0, 'rgba(255,255,255,0)'); + this.lingradV.addColorStop(1, 'rgba(255,255,255,1)'); + + this.lingradS = this.ctxSV.createLinearGradient(0, 0, this.width, 0); + this.lingradS.addColorStop(0, 'rgba(0,0,0,1)'); + this.lingradS.addColorStop(1, 'rgba(0,0,0,0)'); + + this.lingradT = this.ctxT.createLinearGradient(0, 0, 0, this.height); + this.lingradT.addColorStop(0, 'rgb(255,0,0)'); + this.lingradT.addColorStop(1/6, 'rgb(255,255,0)'); + this.lingradT.addColorStop(2/6, 'rgb(0,255,0)'); + this.lingradT.addColorStop(3/6, 'rgb(0,255,255)'); + this.lingradT.addColorStop(4/6, 'rgb(0,0,255)'); + this.lingradT.addColorStop(5/6, 'rgb(255,0,255)'); + this.lingradT.addColorStop(1, 'rgb(255,0,0)'); + + // Événements roulette (initialisé seulement une fois) + if(window.addEventListener && !this.idColor){ + this.canvasSV.addEventListener('DOMMouseScroll', function(event){colorPicker.eventWheel(event, colorPicker.idSV)}, false); + this.canvasSV.onmousewheel = function(event){colorPicker.eventWheel(event, colorPicker.idSV)}; + this.canvasT.addEventListener('DOMMouseScroll', function(event){colorPicker.eventWheel(event, colorPicker.idT)}, false); + this.canvasT.onmousewheel = function(event){colorPicker.eventWheel(event, colorPicker.idT)}; + this.canvasO.addEventListener('DOMMouseScroll', function(event){colorPicker.eventWheel(event, colorPicker.idO)}, false); + this.canvasO.onmousewheel = function(event){colorPicker.eventWheel(event, colorPicker.idO)}; + } + + // Définir la couleur + this.idColor = id; + var couleur = eval(document.getElementById(this.idColor).title); +// alert(id+" ; "+couleur) + document.getElementById("apercuCouleur").style.backgroundColor = couleur; + document.getElementById("apercuCouleur2").style.backgroundColor = couleur; + this.definirCouleur(couleur); + + // Dessiner + this.dessiner(); + this.dessinerApercu(); + + // Définir les valeurs des inputs + this.definirInputs(); + + // Définir le style de l'ombre + this.sourisOut(); + + }, + + definirCouleur : function(colorRGB){ + var table = /(.*?)rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/.exec(colorRGB); + if (table == null){ + table = /(.*?)rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/.exec(colorRGB); + } + if(table == null){ + return ""; + } + this.rouge = parseInt(table[2]); + this.vert = parseInt(table[3]); + this.bleu = parseInt(table[4]); + this.RGB_SVT(); + }, + + sourisClick : function(id){ + this.sourisDown = id; + if(id != this.idO){ + document.getElementById(id).style.boxShadow = this.ombreActive; + } + }, + + sourisOut : function(){ + this.canvasSV.style.boxShadow = this.ombreInactive; + this.canvasT.style.boxShadow = this.ombreInactive; + }, + + sourisOver : function(id){ + if(this.sourisDown == id && id != this.idO){ + document.getElementById(id).style.boxShadow = this.ombreActive; + } + }, + + sourisUp : function(){ + this.sourisDown = false; + this.canvasSV.style.boxShadow = this.ombreInactive; + this.canvasT.style.boxShadow = this.ombreInactive; + this.dessinerO(); + }, + + eventWheel : function(event, id){ + if(!event) event = window.event; + if(event.wheelDelta){ + if(event.wheelDelta < 0){ + colorPicker.sourisWheelUp(id); + } + else{ + colorPicker.sourisWheelDown(id); + } + } + else if(event.detail){ + if(event.detail > 0){ + colorPicker.sourisWheelUp(id); + } + else{ + colorPicker.sourisWheelDown(id); + } + } + }, + + sourisWheelUp : function(id){ + switch(id){ + case this.idT: + colorPicker.ajouterT(5); + break; + case this.idO: + colorPicker.ajouterO(0.1); + break; + case this.idSV: + colorPicker.ajouterS(-5); + break; + } + }, + + sourisWheelDown : function(id){ + switch(id){ + case this.idT: + colorPicker.ajouterT(-5); + break; + case this.idO: + colorPicker.ajouterO(-0.1); + break; + case this.idSV: + colorPicker.ajouterS(5); + break; + } + }, + + ajouterT : function(nbr){ + this.teinte += nbr; + if(this.teinte < 0){ + this.teinte = 0; + } + else if(this.teinte > 360){ + this.teinte = 360; + } + this.SVT_RGB(); + }, + + ajouterO : function(nbr){ + this.opacity = Math.round((this.opacity+nbr)*100)/100; + if(this.opacity < 0){ + this.opacity = 0; + } + else if(this.opacity > 1){ + this.opacity = 1; + } + this.SVT_RGB(); + }, + + ajouterS : function(nbr){ + this.saturation += nbr; + if(this.saturation < 0){ + this.saturation = 0; + } + else if(this.saturation > 100){ + this.saturation = 100; + } + this.SVT_RGB(); + }, + + // Lors du déplacement de la souris + moveSV : function(event){ + // Vérifie si on appuie sur la souris + if(this.sourisDown != this.idSV){ + return 0; + } + + var element = this.canvasSV; + var posDivY = 0; + var posDivX = 0; + + // Récupérer la position du canvas par rapport à la page + while(element){ + posDivY = posDivY + element.offsetTop; + posDivX = posDivX + element.offsetLeft; + element = element.offsetParent; + } + + // Définir la saturation et la valeur à partir de la position de la souris + this.saturation = 100-Math.round((event.clientY - posDivY -1)/(this.height+1)*100); + this.valeur = Math.round((event.clientX - posDivX -1)/(this.width+1)*100); + + this.SVT_RGB(); + }, + moveT : function(event){ + if(this.sourisDown != this.idT){ + return 0; + } + var element = this.canvasT; + var posDivY = 0; + + while(element){ + posDivY = posDivY + element.offsetTop; + element = element.offsetParent; + } + + this.teinte = Math.round( (event.clientY - posDivY -0) / (this.height+1)*360); + + this.SVT_RGB(); + }, + + SVT_RGB : function(){ + this.T_rgb(); + this.rouge = Math.round((this.r + (255-this.r) * (-1) * (this.saturation-100) / 100 )* this.valeur / 100); + this.vert = Math.round((this.g + (255-this.g) * (-1) * (this.saturation-100) / 100 )* this.valeur / 100); + this.bleu = Math.round((this.b + (255-this.b) * (-1) * (this.saturation-100) / 100 )* this.valeur / 100); + + this.definirInputs(); + this.dessinerApercu(); + this.dessiner(); + }, + + T_rgb : function(){ + var r,g,b = 0; + var T = this.teinte; + if (T<60){ - r = 255 - g = T/60*255 - b = 0 - break - } - if (T<=120){ - r = (255-(T%60/60*255))%256 - g = 255 - b = 0 - break - } - if (T<180){ - r = 0 - g = 255 - b = T%60/60*255 - break - } - if (T<=240){ - r = 0 - g = (255-(T%60/60*255))%256 - b = 255 - break - } - if (T<300){ - r = T%60/60*255 - g = 0 - b = 255 - break - } - if (T<360){ - r = 255 - g = 0 - b = (255-(T%60/60*255))%256 - break - } - r = 255 - g = 0 - b = 0 - break + r = 255; + g = T/60*255; + b = 0; + } + else if (T<120){ + r = (255-(T%60/60*255))%256; + g = 255; + b = 0; + } + else if (T<180){ + r = 0; + g = 255; + b = T%60/60*255; + } + else if (T<240){ + r = 0; + g = (255-(T%60/60*255))%256; + b = 255; + } + else if (T<300){ + r = T%60/60*255; + g = 0; + b = 255; + } + else if (T<360){ + r = 255; + g = 0; + b = (255-(T%60/60*255))%256; + } + else{ + r = 255; + g = 0; + b = 0; + } + + this.r = Math.round(r); + this.g = Math.round(g); + this.b = Math.round(b); + }, + + RGB_SVT : function(){ + // Voir http://fr.wikipedia.org/wiki/Teinte_Saturation_Valeur#Conversion_de_RVB_vers_TSV + var r = this.rouge/255; + var g = this.vert/255; + var b = this.bleu/255; + if(!isFinite(r)){ + r = 0; + } + if(!isFinite(g)){ + g = 0; + } + if(!isFinite(b)){ + b = 0; + } + var max = Math.max(r,g,b); + var min = Math.min(r,g,b); + var s, v, t; + // Teinte + switch(max){ + case r: + t = (60 * (g-b)/(max-min) + 360) % 360; + break; + case g: + t = 60 * (b-r)/(max-min) + 120; + break; + case b: + t = 60 * (r-g)/(max-min) + 240; + break; + default: /* case min: */ + t = 0; + break; + } + + // Saturation + if(max == 0){ + s = 0; + } + else{ + s = 1-(min/max); + } + + // Valeur + v = max; + + // Définir les variables + this.saturation = s*100; + this.valeur = v*100; + this.teinte = Math.round(t); + this.T_rgb(); + }, + + dessiner : function(){ + var ctxSV = this.ctxSV; + var ctxT = this.ctxT; + // Fond + ctxSV.fillStyle = "rgb("+this.r+","+this.g+","+this.b+")"; + ctxSV.fillRect(0, 0, this.width, this.height); + // Dégradés + ctxSV.fillStyle = this.lingradV; + ctxSV.fillRect(0, 0, this.width, this.height); + ctxSV.fillStyle = this.lingradS; + ctxSV.fillRect(0, 0, this.width, this.height); + // Souris + var x = Math.round(this.width*this.valeur/100); + var y = Math.round(this.height-this.height*this.saturation/100); + ctxSV.beginPath(); + ctxSV.arc(x, y, this.rayonRonds, 0, 2*Math.PI, true); + ctxSV.strokeStyle = "rgba(255,255,255,0.8)"; + ctxSV.shadowOffsetX = 1; + ctxSV.shadowOffsetY = 1; + ctxSV.shadowColor = "rgba(0,0,0,1)"; + ctxSV.shadowBlur = 2; + ctxSV.lineWidth = 1.5; + ctxSV.stroke(); + + // Fond Teinte + ctxT.fillStyle = this.lingradT; + ctxT.fillRect(0, 0, this.width/10, this.height); + // Souris Teinte + var pos = Math.round(0.99*this.height*this.teinte/360); + ctxT.fillStyle = "rgba(255,255,255,0.8)"; + ctxT.shadowOffsetX = 0; + ctxT.shadowOffsetY = 0; + ctxT.shadowColor = "rgba(0,0,0,1)"; + ctxT.shadowBlur = 3; + ctxT.fillRect(0, pos, this.width/10, 2); + + // Désactiver les ombres + ctxSV.shadowColor = "rgba(0,0,0,0)"; + ctxT.shadowColor = "rgba(0,0,0,0)"; + + this.dessinerO(); + }, + + dessinerApercu : function(){ + document.getElementById("apercuCouleur").style.backgroundColor = "rgba("+this.rouge+","+this.vert+","+this.bleu+","+this.opacity+")"; + }, + + definirInputs : function(){ + document.getElementById("inputValeur").value = this.valeur; + document.getElementById("inputSaturation").value = this.saturation; + document.getElementById("inputTeinte").value = this.teinte; + document.getElementById("inputRouge").value = this.rouge; + document.getElementById("inputVert").value = this.vert; + document.getElementById("inputBleu").value = this.bleu; + document.getElementById("inputOpacity").value = this.opacity; + }, + + recupererInputs : function(){ + this.valeur = parseInt(document.getElementById("inputValeur").value); + this.saturation = parseInt(document.getElementById("inputSaturation").value); + this.teinte = parseInt(document.getElementById("inputTeinte").value); + this.opacity = parseFloat(document.getElementById("inputOpacity").value); + this.SVT_RGB(); + + this.definirInputs(); + this.dessinerApercu(); + this.dessiner(); + }, + recupererInputs2 : function(){ + this.rouge = parseInt(document.getElementById("inputRouge").value); + this.vert = parseInt(document.getElementById("inputVert").value); + this.bleu = parseInt(document.getElementById("inputBleu").value); + this.RGB_SVT(); + + this.definirInputs(); + this.dessinerApercu(); + this.dessiner(); + }, + + moveO : function(event){ + if(this.sourisDown != this.idO){ + return 0; + } + + var element = this.canvasO; + var posDivX = 0; + while(element){ + posDivX = posDivX + element.offsetLeft; + element = element.offsetParent; + } + + this.opacity = Math.round( (event.clientX - posDivX -this.width/10) / (this.width*0.9)*100)/100; + if(this.opacity < 0){ + this.opacity = 0; + } + else if(this.opacity > 1){ + this.opacity = 1; + } + this.dessinerO(); + this.definirInputs(); + this.dessinerApercu(); + }, + + dessinerO : function(){ + var ctx = this.ctxO; + + ctx.shadowBlur = 2; + + // Ligne + if(this.sourisDown == this.idO){ + ctx.shadowColor = "rgba(0,50,100,1)"; + } + else{ + ctx.shadowColor = "rgba(0,0,0,1)"; + } + ctx.globalAlpha = 1; + ctx.shadowOffsetX = 0; + ctx.shadowOffsetY = 0; + ctx.fillStyle = "rgba("+this.rouge+","+this.vert+","+this.bleu+",1)"; + ctx.clearRect(0,0,this.width*1.15,this.height); + ctx.fillRect(this.width/10, this.height/20-1, this.width*0.9, 3); + + // Rond + var x = this.width/10 + this.width*0.9*this.opacity-1; + var y = this.height/20; + if(this.sourisDown == this.idO){ + ctx.fillStyle = "rgba(0,40,80,1)"; + ctx.strokeStyle = "rgba(230,250,255,0.8)"; + } + else{ + ctx.fillStyle = "rgba(0,0,0,1)"; + ctx.strokeStyle = "rgba(255,255,255,0.8)"; + } + ctx.globalAlpha = 0.1+this.opacity*0.9; + ctx.beginPath(); + ctx.arc(x, y, this.rayonRonds+1, 0, 2*Math.PI, true); + ctx.shadowColor = "rgba(0,0,0,1)"; + ctx.shadowOffsetX = 1; + ctx.shadowOffsetY = 1; + ctx.lineWidth = 1; + ctx.fill(); + ctx.stroke(); + + // Petits ronds + ctx.globalAlpha = 1; + ctx.shadowColor = "rgba(0,0,0,1)"; + + ctx.beginPath(); + ctx.arc(8, this.height/20+0.5, this.rayonRonds, 0, 2*Math.PI, true); + ctx.strokeStyle = "rgba(0,0,0,0.5)"; + ctx.shadowOffsetX = 0; + ctx.shadowOffsetY = 0; + ctx.lineWidth = 1; + ctx.stroke(); + + ctx.beginPath(); + ctx.arc(this.width*1.08, this.height/20+0.5, this.rayonRonds, 0, 2*Math.PI, true); + ctx.strokeStyle = "rgba(0,0,0,0.8)"; + ctx.fillStyle = "rgba(0,0,0,0.6)"; + ctx.shadowOffsetX = 0; + ctx.shadowOffsetY = 0; + ctx.lineWidth = 1; + ctx.stroke(); + ctx.fill(); + }, + + exporterCouleur : function(){ + eval(document.getElementById(this.idColor).title+' = "rgba(" + this.rouge +", " + this.vert + ", " + this.bleu +", "+this.opacity+")"'); + document.getElementById(this.idColor).style.backgroundColor = eval(document.getElementById(this.idColor).title); + }, + + fermer : function(){ + colorPicker.exporterCouleur(); + if(colorPicker.idColor == 'buttonColor'){ + cacherMenu(); + } + else if(dernierMenu == "menuFonctions"){ + editeur.getOptions(); + afficherMenu(dernierMenu); + } + else{ + cacherMenu(); + } + actualiserGraph(); } - T = Math.round(T) - r = Math.round(r) - g = Math.round(g) - b = Math.round(b) - document.getElementById("inputTeinte").value = T - document.getElementById("colorSV").style.backgroundColor = "rgb("+r+","+g+","+b+")" - document.getElementById("ligneTeinte").setAttribute("y2", e.clientY-posDiv) - document.getElementById("ligneTeinte").setAttribute("y1", e.clientY-posDiv) - colorRGB() -} +}; -function colorRGB(){ - var S = document.getElementById("inputSaturation").value - var V = document.getElementById("inputValeur").value - var rouge = Math.round((r + (255-r) * (-1) * (S-100) / 100 )* V / 100) - var vert = Math.round((g + (255-g) * (-1) * (S-100) / 100 )* V / 100) - var bleu = Math.round((b + (255-b) * (-1) * (S-100) / 100 )* V / 100) - document.getElementById("inputRouge").value = rouge - document.getElementById("inputVert").value = vert - document.getElementById("inputBleu").value = bleu - eval(document.getElementById(idColor).title+' = "rgba(" + rouge +", " + vert + ", " + bleu +", "+document.getElementById("inputOpacity").value+")"') - document.getElementById(idColor).style.backgroundColor = eval(document.getElementById(idColor).title) - document.getElementById("apercuCouleur").style.backgroundColor = eval(document.getElementById(idColor).title) -} -function colorPicker(id){ - idColor = id - document.getElementById("apercuCouleur").style.backgroundColor = eval(document.getElementById(idColor).title) - document.getElementById("apercuCouleur2").style.backgroundColor = eval(document.getElementById(idColor).title) -} diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/Editeur.js b/resources/library/applications/GraphMe.wgt/JavaScript/Editeur.js new file mode 100644 index 00000000..ee9017d0 --- /dev/null +++ b/resources/library/applications/GraphMe.wgt/JavaScript/Editeur.js @@ -0,0 +1,216 @@ + +var editeur = { + idFct : 0, + fct : { + fct : "", + fctX : "", + fctY : "", + from : 0, + to : 2*Math.PI, + couleur : "", + couleurD1 : "", + couleurD2 : "", + couleurP1 : "", + width : 2, + style : "continu", + aire : false, + derivee1 : false, + derivee2 : false, + primitive1 : false, + conditionInitiale : 0 + }, + editer : function(id){ + this.idFct = id; + if(fct.list[this.idFct]){ + document.getElementById("editeurFonction").style.visibility = "visible"; + this.setOptions(); + } + else{ + document.getElementById("editeurFonction").style.visibility = "hidden"; + } + fct.updateList(); + }, + couleur : function(id){ + colorPicker.init(id); + afficherMenu('menuCouleur'); + }, + getOptions : function(){ + this.fct.fct = document.getElementById("editeurInput").value; + this.fct.fctX = document.getElementById("editeurFctX").value; + this.fct.fctY = document.getElementById("editeurFctY").value; + this.fct.from = document.getElementById("editeurFrom").value; + this.fct.to = document.getElementById("editeurTo").value; + this.fct.width = document.getElementById("editeurWidth").value; + this.fct.style = document.getElementById("editeurStyle").value; + this.fct.aire = document.getElementById("editeurAire").checked ? true : false; + this.fct.derivee1 = document.getElementById("editeurD1").checked ? true : false; + this.fct.derivee2 = document.getElementById("editeurD2").checked ? true : false; + this.fct.primitive1 = document.getElementById("editeurP1").checked ? true : false; + if(this.fct.primitive1){ + document.getElementById("editeurConditionInitiale").disabled = ""; + document.getElementById("editeurTexteConditionInitiale").style.color = "rgb(0,0,0)" + } + else{ + document.getElementById("editeurConditionInitiale").disabled = "disabled"; + document.getElementById("editeurTexteConditionInitiale").style.color = "rgb(128,128,128)" + } + this.fct.conditionInitiale = parseFloat(document.getElementById("editeurConditionInitiale").value); + + fct.list[this.idFct].set(this.fct); + + fct.updateList(); + historique.ajouter(fct.list[this.idFct]); + this.apercu(); + }, + setOptions : function(){ + var f = fct.list[this.idFct].get(); + for(var i in f){ + this.fct[i] = f[i]; + } + + this.setDisplayStyle(); + + document.getElementById("editeurInput").value = this.fct.fct; + document.getElementById("editeurFctX").value = this.fct.fctX; + document.getElementById("editeurFctY").value = this.fct.fctY; + document.getElementById("editeurFrom").value = this.fct.from; + document.getElementById("editeurTo").value = this.fct.to; + document.getElementById("editeurCouleur").style.backgroundColor = this.fct.couleur; + document.getElementById("editeurCouleurD1").style.backgroundColor = this.fct.couleurD1; + document.getElementById("editeurCouleurD2").style.backgroundColor = this.fct.couleurD2; + document.getElementById("editeurCouleurP1").style.backgroundColor = this.fct.couleurP1; + document.getElementById("editeurWidth").value = this.fct.width; + document.getElementById("editeurStyle").value = this.fct.style; + document.getElementById("editeurAire").checked = this.fct.aire ? "checked" : ""; + document.getElementById("editeurD1").checked = this.fct.derivee1 ? "checked" : ""; + document.getElementById("editeurD2").checked = this.fct.derivee2 ? "checked" : ""; + document.getElementById("editeurP1").checked = this.fct.primitive1 ? "checked" : ""; + if(this.fct.primitive1){ + document.getElementById("editeurConditionInitiale").disabled = ""; + document.getElementById("editeurTexteConditionInitiale").style.color = "rgb(0,0,0)" + } + else{ + document.getElementById("editeurConditionInitiale").disabled = "disabled"; + document.getElementById("editeurTexteConditionInitiale").style.color = "rgb(128,128,128)" + } + document.getElementById("editeurConditionInitiale").value = this.fct.conditionInitiale; + + document.getElementById("outputX").innerHTML = " "; + document.getElementById("outputAire").innerHTML = " "; + this.apercu(); + }, + setDisplayStyle : function(){ + if(fct.list[this.idFct] instanceof CartesianFunction){ + document.getElementById("editeurFctPrefix").textContent = "f(x) = "; + document.getElementById("editeurFctDiv").style.display = "block"; + document.getElementById("editeurFctXYDiv").style.display = "none"; + document.getElementById("editeurRangeDiv").style.display = "none"; + document.getElementById("editeurDeriveesDiv").style.display = "block"; + document.getElementById("editeurStyleDiv").style.display = "block"; + document.getElementById("editeurAireDiv").style.display = "block"; + } + else if(fct.list[this.idFct] instanceof ImplicitFunction){ + document.getElementById("editeurFctPrefix").textContent = ""; + document.getElementById("editeurFctDiv").style.display = "block"; + document.getElementById("editeurFctXYDiv").style.display = "none"; + document.getElementById("editeurRangeDiv").style.display = "none"; + document.getElementById("editeurDeriveesDiv").style.display = "none"; + document.getElementById("editeurStyleDiv").style.display = "none"; + document.getElementById("editeurAireDiv").style.display = "none"; + } + else if(fct.list[this.idFct] instanceof PolarFunction){ + document.getElementById("editeurFctPrefix").textContent = "r(t) = "; + document.getElementById("editeurFctDiv").style.display = "block"; + document.getElementById("editeurFctXYDiv").style.display = "none"; + document.getElementById("editeurRangeDiv").style.display = "block"; + document.getElementById("editeurDeriveesDiv").style.display = "none"; + document.getElementById("editeurStyleDiv").style.display = "block"; + document.getElementById("editeurAireDiv").style.display = "none"; + } + else if(fct.list[this.idFct] instanceof ParametricFunction){ + document.getElementById("editeurFctDiv").style.display = "none"; + document.getElementById("editeurFctXYDiv").style.display = "block"; + document.getElementById("editeurRangeDiv").style.display = "block"; + document.getElementById("editeurDeriveesDiv").style.display = "none"; + document.getElementById("editeurStyleDiv").style.display = "block"; + document.getElementById("editeurAireDiv").style.display = "none"; + } + }, + etudier : function(){ + fct.etudier(this.idFct); + }, + supprimer : function(){ + fct.enlever(this.idFct); + if(!fct.list[this.idFct]){ + this.editer(this.idFct - 1); + } + else{ + this.editer(this.idFct); + } + }, + dupliquer : function(){ + fct.dupliquer(this.idFct); + this.editer(this.idFct + 1); + }, + apercu : function(){ + editorPreview.drawFunction(fct.list[this.idFct]); + } +}; + + +var editorPreview = { + id : "editeurApercu", + + xGauche : -5, + xDroite : 5, + yBas : -4, + yHaut : 4, + + largeur : 0, + hauteur : 0, + multX : 1, + multY : 1, + + ctx: null, + + init : function(){ + var canvas = document.getElementById("editeurApercu"); + this.ctx = canvas.getContext("2d"); + this.largeur = canvas.width; + this.hauteur = canvas.height; + this.multX = this.largeur/Math.abs(this.xDroite - this.xGauche); + this.multY = this.hauteur/Math.abs(this.yHaut - this.yBas); + this.precision = Math.abs(this.xDroite - this.xGauche)/50; + }, + + drawFunction : function(func){ + var x, y, pointX, pointY; + var ctx = this.ctx; + ctx.clearRect(0,0,100,80); + ctx.globalAlpha = 0.7; + ctx.fillStyle = "rgba(0,0,0,0.5)" + ctx.fillRect(0,39.5, 100, 1); + ctx.fillRect(49.5,0, 1, 80); + ctx.beginPath(); +// ctx.lineWidth = func.width/1.8; +// ctx.strokeStyle = func.couleur; +// ctx.moveTo(-100,-100); +// for(x = -5; x <= 5; x+=0.2){ +// // Evaluer la valeur y du point x +// try{ +// y = func.f(x); +// } +// catch(e){} +// if(!isNaN(y)){ +// // Transformation des coordonnées +// pointX = x * 10 + 50; +// pointY = 40 - y * 10; +// +// // Dessiner la fonction +// ctx.lineTo(pointX, pointY); +// } +// } + func.plot(ctx, this.precision, this); +// ctx.stroke(); + } +}; diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/Etude.js b/resources/library/applications/GraphMe.wgt/JavaScript/Etude.js deleted file mode 100644 index fea7d280..00000000 --- a/resources/library/applications/GraphMe.wgt/JavaScript/Etude.js +++ /dev/null @@ -1,356 +0,0 @@ - -// -------------------- Etude de fonctions -------------------- - -var etudeX = new Array() -var etudeY = new Array() -var etudeD = new Array() -var limGauche = new Array() -var limDroite = new Array() -var listeIndefini = new Array() -var listeZeros = new Array() -var intervalEtudeGauche = -50 -var intervalEtudeDroite = 50 -var precisionEtude = 0.001 - -function etudier(fct){ - if(check(fct)){ - prepareEtude(fct) - pariteFct() - signeFct(fct) - asymptotes() - courbure() - ensembleDefinition() - } -} - -// Préparation à l'étude de fonction -function prepareEtude(fct){ - listeIndefini = new Array() - var f = function(x){ - return eval(fct) - } - // Calcul de tous les points de la fonction - var i = 0 - for(var x=intervalEtudeGauche; x<=intervalEtudeDroite; x+=precisionEtude){ - etudeX[i] = x - etudeY[i] = Math.round(f(x)*10000)/10000 - etudeD[i] = Math.round(1000000*(f(x+0.0001)-f(x-0.0001))/(2*0.0001))/1000000 - i++ - } - // Calcul des extrémités de la fonction - var x = -100000 - limGauche[0] = f(x) - x = -10000 - limGauche[1] = f(x) - x = 100000 - limDroite[0] = f(x) - x = 10000 - limDroite[1] = f(x) -} - -// Recherche de l'ensemble de définition -function ensembleDefinition(){ - var fctDefinie = false - var dejaDefinie = false - var EDF = "" - if(!isNaN(limGauche[0])){ - fctDefinie = true - dejaDefinie = true - EDF += "]-∞;" - } - if(!isNaN(limGauche[1]) && !fctDefinie){ - fctDefinie = true - dejaDefinie = true - EDF += "]-∞;" - } - for(var i=0; i0){ - positif = Math.floor(etudeY[posZero+i]) - } - else{ - positif = Math.ceil(etudeY[posZero+i]) - } - if(etudeY[posZero-i]>0){ - negatif = Math.floor(etudeY[posZero-i]) - } - else{ - negatif = Math.ceil(etudeY[posZero-i]) - } - - if(positif<25000 && positif>-25000){ - if(positif != negatif){ - paire = false - //alert(i+" ; "+posZero+" ; "+etudeX.length+" ; "+positif+" ; "+negatif) - } - if(positif != (-negatif)){ - impaire = false - } - } - } - if(paire){ - document.getElementById("etudeParite").innerHTML = sankoreLang[lang].ev; - } - else if(impaire){ - document.getElementById("etudeParite").innerHTML = sankoreLang[lang].unev; - } - else{ - document.getElementById("etudeParite").innerHTML = sankoreLang[lang].na; - } -} - -function zeroFct(){ - listeZeros = new Array() - var listeZerosArr = new Array() - var precZeros = 5 - for(var i=0; i0){ - signe[0] = "+" - signePlus[0] = limGauche[1] - signeMoins[0] = limGauche[0] - } - else{ - signe[0] = "-" - signePlus[0] = limGauche[1] - signeMoins[0] = limGauche[0] - } - for(var i=0; i0){ - dernier = i - } - } - if(signe[signe.length-1]=="-"){ - if(etudeY[i]>0){ - signe.push("+") - signePlus.push(etudeX[i]) - signeMoins.push(etudeX[dernier]) - //alert(signe+" ; "+signePlus+'\n'+etudeY[i+1]+" ; "+etudeY[i]+" ; "+etudeY[i-1]+" ; "+etudeY[i-2]+'\n'+etudeX[i+1]+" ; "+etudeX[i]+" ; "+etudeX[i-1]+" ; "+etudeX[i-2]) - } - else if(etudeY[i]<0){ - dernier = i - } - } - } - var valeurPlus, valeurMoins, millieu, precisionZero - listeZeros = new Array() - for(var i=1; i0){ - x = millieu - if(eval(fct)>0){ - valeurPlus=millieu - } - else if(eval(fct)<0){ - valeurMoins=millieu - } - else{ - break - } - } - else if(eval(fct)<0){ - x = millieu - if(eval(fct)<0){ - valeurPlus=millieu - } - else if(eval(fct)>0){ - valeurMoins=millieu - } - else{ - break - } - } - else{ - millieu = valeurPlus - break - } - x = valeurPlus - precisionZero = eval(fct) - x = valeurMoins - precisionZero -= eval(fct) - if(precisionZero>0.0001){ - break - } - } - listeZeros.push(Math.round(millieu*100)/100) - } - var texteZeros = "" - if(listeZeros==""){ - zeroFct() - texteZeros = "~ " - } - var texte = sankoreLang[lang].signe; - var aSupprimer = new Array() - for(var i=0; i" - if(listeZeros[i]!=undefined){ - x = listeZeros[i] - if(isFinite(eval(fct))){ - texte += ""+listeZeros[i]+"" - } - else{ - texte += ""+listeZeros[i]+"" - listeIndefini.push(listeZeros[i]) - aSupprimer.push(i) - } - } - } - document.getElementById("etudeSigne").innerHTML = texte - for(var i=0; i" + sankoreLang[lang].curve_higher + "" - } - else if(limGauche[0]>limRound){ - document.getElementById("etudeAHG").innerHTML = "y = "+limRound +" " + sankoreLang[lang].curve_lower + "" - } - else{ - document.getElementById("etudeAHG").innerHTML = "y = "+limRound - } - } - else{ - document.getElementById("etudeAHG").innerHTML = sankoreLang[lang].na; - } - if(Math.abs(limDroite[0])<1000){ - var limRound = Math.round(limDroite[0]*100)/100 - if(limDroite[0]" + sankoreLang[lang].curve_lower + "" - } - else if(limDroite[0]>limRound){ - document.getElementById("etudeAHD").innerHTML = "y = "+limRound +" " + sankoreLang[lang].curve_higher + "" - } - else{ - document.getElementById("etudeAHD").innerHTML = "y = "+limRound - } - } - else{ - document.getElementById("etudeAHD").innerHTML = sankoreLang[lang].na; - } - // Verticales - var texteAV = "" - for(var i=0; i" - } - document.getElementById("etudeAV").innerHTML = texteAV -} - -function courbure(){ - var texteMin = ""; - var texteMax = ""; - var texteI = ""; - var nbrI = 0; - var i; - for(i=0; i0){ - texteMin += "
" + sankoreLang[lang].min + "("+Math.round(etudeX[i]*10000)/10000+";"+etudeY[i]+")"; - } - else if(etudeD[i-1]>0 && etudeD[i+1]<0){ - texteMax += "
" + sankoreLang[lang].max + "("+Math.round(etudeX[i]*10000)/10000+";"+etudeY[i]+")"; - } - else{ - nbrI++; - texteI += '
I'+nbrI+"("+Math.round(etudeX[i]*10000)/10000+";"+etudeY[i]+")"; - } - } - } - if(texteMin==""){ - texteMin = "
" + sankoreLang[lang].no_min; - } - if(texteMax==""){ - texteMax = "
" + sankoreLang[lang].no_max; - } - if(texteI==""){ - texteI = "
Aucun I"; - } - document.getElementById("etudeMin").innerHTML = texteMin; - document.getElementById("etudeMax").innerHTML = texteMax; -} \ No newline at end of file diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/Etudes.js b/resources/library/applications/GraphMe.wgt/JavaScript/Etudes.js new file mode 100644 index 00000000..ade1cf4f --- /dev/null +++ b/resources/library/applications/GraphMe.wgt/JavaScript/Etudes.js @@ -0,0 +1,520 @@ + +// -------------------- Etudes de fonctions -------------------- + +function consoleInfos(){ + var table = []; + for(var i in arguments){ + table.push(arguments[i]); + } + document.getElementById("infos").innerHTML += table +"
"; +} + +Array.prototype.first = function(){ + return this[0]; +} +Array.prototype.last = function(){ + return this[this.length-1]; +} +Array.prototype.removeDoubles = function(){ + // Sort numerically + this.sort(function(nbr1,nbr2){return nbr1-nbr2}); + // Remove doubles + for(var i=1; i' + } + else{ + txtSigne += ''+listeNbr[i][0]+'' + } + switch(b){ + case -1: + txtSigne += "-"; + dernierSigne = "-"; + break; + case 1: + txtSigne += "+"; + dernierSigne = "+"; + break; + } + } + document.getElementById("etudeSigneRow").innerHTML = txtSigne; +// consoleInfos(""+txtSigne+"
Signe :
"); + }, + + asymptotesNum : function(){ + var f = this.f; + // Verticales + var texteA = ""; + for(var i=0; i0){ + if(txtMinMax != ""){ + txtMinMax += "
"; + } + txtMinMax += "Min("+this.listeX[i]+";"+this.round(this.listeY[i])+")"; + } + else if(a>0 && b<0){ + if(txtMinMax != ""){ + txtMinMax += "
"; + } + txtMinMax += "Max("+this.listeX[i]+";"+this.round(this.listeY[i])+")"; + } + } +// consoleInfos(txtMinMax); + if(txtMinMax == ""){ + txtMinMax = "none"; + try{ + txtMinMax = languages.getText("none_m"); + } + catch(e){} + } + document.getElementById("etudeMinMax").innerHTML = txtMinMax; + }, + + pointI : function(){ + // Rechercher des zéros dans les points calculés + var listeID = []; +// for(var i=1; i("+this.listeX[i]+";"+this.round(this.listeY[i])+")"; + } +// consoleInfos(txtI); + if(txtI == ""){ + txtI = "none"; + try{ + txtI = languages.getText("none_m"); + } + catch(e){} + } + document.getElementById("etudeI").innerHTML = txtI; + }, + +} diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/Fonction.js b/resources/library/applications/GraphMe.wgt/JavaScript/Fonction.js new file mode 100644 index 00000000..91e65de5 --- /dev/null +++ b/resources/library/applications/GraphMe.wgt/JavaScript/Fonction.js @@ -0,0 +1,226 @@ + +var fct = { + list : [], + couleur : "rgba(193,255,0,1)", + colorsList : ["rgba(255,0,0,1)","rgba(255,128,0,1)","rgba(255,255,0,1)","rgba(128,255,0,1)","rgba(0,255,0,1)","rgba(0,255,128,1)","rgba(0,255,255,1)","rgba(0,128,255,1)","rgba(0,0,255,1)","rgba(128,0,255,1)","rgba(255,0,255,1)","rgba(255,0,128,1)"], + interdit : [";", "interdit", "'", '"', "eval", "new", "uniboard", "sankore", "=", "document", "window", "alert", "fct", "affichage", "colorPicker", "languages"], + + functionFromObject: function(f){ + if(f.type == "cartesian"){ + return new CartesianFunction().set(f); + } + else if(f.type == "implicit"){ + return new ImplicitFunction().set(f); + } + else if(f.type == "polar"){ + return new PolarFunction().set(f); + } + else if(f.type == "parametric"){ + return new ParametricFunction().set(f); + } + console.err("Unknown function:", f); + }, + + addCartesian : function(txt){ + var txtFct = this.remplacer(this.verifier(txt)); + if(txtFct == ""){ + return false; + } + + var f = new CartesianFunction(txtFct); + this.add(f, true); + + return true; + }, + + addImplicit : function(txtFct){ + var equalPos = txtFct.indexOf("="); + if(equalPos >= 0){ + txtFct = txtFct.replace("=", "-(") + ")"; + } + txtFct = this.remplacer(this.verifier(txtFct)); + if(txtFct == ""){ + return false; + } + + var f = new ImplicitFunction(txtFct); + this.add(f, true); + + return true; + }, + + addPolar : function(txt){ + var txtFct = this.remplacer(this.verifier(txt)); + if(txtFct == ""){ + return false; + } + + var f = new PolarFunction(txtFct); + this.add(f, true); + + return true; + }, + + addParametric : function(txtX, txtY){ + var fctX = this.remplacer(this.verifier(txtX)); + var fctY = this.remplacer(this.verifier(txtY)); + if(fctX == "" || fctY == ""){ + return false; + } + + var f = new ParametricFunction(fctX, fctY); + this.add(f, true); + + return true; + }, + + add : function(f, useRandomColor){ + this.list.unshift(f); + if(useRandomColor){ + f.couleur = this.colorsList[alea(0,this.colorsList.length-1)]; + } + historique.ajouter(f); + this.updateList(); + editeur.editer(0); + }, + + ajouter : function(){ + var type = document.getElementById("functionType").value; + if(type == "cartesian"){ + var input = document.getElementById("input"); + if(this.addCartesian(input.value)){ + input.value = ""; + } + } + else if(type == "implicit"){ + var input = document.getElementById("implicitInput"); + if(this.addImplicit(input.value)){ + input.value = ""; + } + } + else if(type == "polar"){ + var input = document.getElementById("polarInput"); + if(this.addPolar(input.value)){ + input.value = ""; + } + } + else if(type == "parametric"){ + var inputX = document.getElementById("parametricInputX"); + var inputY = document.getElementById("parametricInputY"); + if(this.addParametric(inputX.value, inputY.value)){ + inputX.value = ""; + inputY.value = ""; + } + } + }, + + changeType : function(type){ + document.getElementById("cartesianDiv").style.display = "none"; + document.getElementById("implicitDiv").style.display = "none"; + document.getElementById("polarDiv").style.display = "none"; + document.getElementById("parametricDiv").style.display = "none"; + document.getElementById(type+"Div").style.display = "initial"; + }, + + enlever : function(id){ + this.list.splice(id, 1); + this.updateList(); + }, + + dupliquer : function(id){ + var newFct = this.functionFromObject(this.list[id].get()); + newFct.couleur = this.colorsList[alea(0,this.colorsList.length-1)]; + this.list.splice(id+1, 0, newFct); + this.updateList(); + }, + + etudier : function(id){ + etude.etudier(this.list[id].fct); + afficherMenu("menuEtude"); + }, + + updateList : function(){ + var texteFctSupp = ""; + for(var i=0; i'+this.list[i].fct+''; + } + document.getElementById("fonctionsSupp").innerHTML = texteFctSupp; + affichage.dessiner(); + saveOptions(); + }, + + verifier : function(txtFonction){ + for(var i=0; i 0){ + editeur.editer(0); + } + } +}; diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/ImplicitFunction.js b/resources/library/applications/GraphMe.wgt/JavaScript/ImplicitFunction.js new file mode 100644 index 00000000..4fcb90b5 --- /dev/null +++ b/resources/library/applications/GraphMe.wgt/JavaScript/ImplicitFunction.js @@ -0,0 +1,79 @@ + +function ImplicitFunction(txtFct){ + + this.setFct = function(txt){ + this.fct = txt; + this.f = new Function("x", "y", "return "+this.fct); + } + + if(txtFct){ + this.setFct(txtFct); + } + this.couleur = fct.couleur; + this.width = document.getElementById("inputTaille").value; + this.style = document.getElementById("selectStyle").value; + + this.getX = function(x){ + return x; + }; + + this.getY = function(x){ + return -1000000; + }; + + this.set = function(f){ + var equalPos = f.fct.indexOf("="); + if(equalPos >= 0){ + f.fct = f.fct.replace("=", "-(") + ")"; + } + this.setFct(fct.remplacer(fct.verifier(f.fct))); + this.couleur = f.couleur; + this.width = f.width; + this.style = f.style; + return this; + }; + + this.get = function(){ + var f = {}; + f.type = "implicit"; + f.fct = this.fct; + f.couleur = this.couleur; + f.width = this.width; + f.style = this.style; + return f; + }; + + this.readableText = function(){ + return this.fct + " = 0"; + }; + + this.plot = function(ctx, precision, affichage){ + var epsilon = 0.01; + var width2 = this.width / 2; + precision /= 20; + + ctx.beginPath(); + ctx.lineWidth = this.width; + ctx.strokeStyle = this.couleur; + ctx.fillStyle = this.couleur; + ctx.moveTo(-100,-100); + for(var x = affichage.xGauche-precision; x <= affichage.xDroite+precision; x+=precision){ + for(var y = affichage.yBas-precision; y <= affichage.yHaut+precision; y+=precision){ + // Compute function for current (x, y) position + z = this.f(x, y); + // Check condition f(x, y) = 0 + if(!isNaN(z) && Math.abs(z) < epsilon){ + // Transform coordinates + var pointX = (x - affichage.xGauche) * affichage.multX; + var pointY = affichage.hauteur - (y - affichage.yBas) * affichage.multY; + + ctx.fillRect(pointX-width2, pointY-width2, this.width, this.width); +// ctx.beginPath(); +// ctx.arc(pointX, pointY, this.width, 0, 2*Math.PI, true); +// ctx.fill(); + } + } + } +// ctx.stroke(); + }; +} diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/Interface.js b/resources/library/applications/GraphMe.wgt/JavaScript/Interface.js index 34a1bef2..e90111e5 100644 --- a/resources/library/applications/GraphMe.wgt/JavaScript/Interface.js +++ b/resources/library/applications/GraphMe.wgt/JavaScript/Interface.js @@ -1,6 +1,10 @@ // -------------------- Fonctions de l'interface -------------------- + +var menuActuel = "divInputRapide" +var dernierMenu = "" + var pleinEcran = false var maximise = true var tailleFenetreX = window.innerWidth @@ -12,23 +16,56 @@ var AncienneMethodeAffichage = 0 function afficherMenu(id){ if (menuActuel == id){ cacherMenu() + dernierMenu = false; } else { - if (menuActuel !== ""){ + if (menuActuel != ""){ + dernierMenu = menuActuel; cacherMenu() } menuActuel = id document.getElementById(id).style.display = "block" + message.supprimer(); } } // Permet de cacher le menu actuellement affiché function cacherMenu(){ - document.getElementById(menuActuel).style.display = "none" - menuActuel = "" + if(menuActuel != ""){ + document.getElementById(menuActuel).style.display = "none" + menuActuel = "" + } } -// ---- Minimiser ou Maximiser le widget (pour sankore) ---- +// Affiche un message d'erreur +function afficherErreur(message){ + document.getElementById("spanErreurFct").innerHTML = message; + afficherMenu("erreurFct"); +} + +// Messages d'info + +var message = { + liste : [], + ajouter : function(x, y, contenu){ + var newDiv = document.createElement("div"); + newDiv.style.left = x + "px"; + newDiv.style.top = y + "px"; + + var textDiv = document.createElement("span"); + textDiv.innerHTML = contenu; + newDiv.appendChild(textDiv); + + document.getElementById("divMessages").appendChild(newDiv); + }, + supprimer : function(){ + var div = document.getElementById("divMessages"); + div.innerHTML = ""; + } +}; + + +// ---- Minimiser ou Maximiser le widget (pour Uniboard) ---- function miniMax(){ if (maximise){ maximise = false @@ -49,6 +86,17 @@ function miniMax(){ } } +// Affiche le menu + +function menuFonctions(){ + if(fonction3D){ + afficherMenu('menuHistorique'); + } + else{ + afficherMenu('menuFonctions'); + editeur.editer(0); + } +} + // Action des petits bouton + et - dans les options function boutonPlus(id, nombre){ var element = document.getElementById(id) @@ -64,101 +112,73 @@ function boutonMoins(id, nombre){ } // Changer de thème -function changerTheme(){ - var theme = document.getElementById("selectTheme").value - switch(theme){ - case "noir": - document.body.style.backgroundImage = "url(Images/fond2.png)" - document.getElementById("gauche").style.backgroundImage = "url(Images/gauche2.png)" - document.getElementById("onglet3D").style.backgroundImage = "url(Images/onglet1.png)" - document.getElementById("texteFonction").style.color = "white" - var couleurEchelle = "rgba(255,255,255,0.8)" - var couleurGrille = "rgba(255,255,255,0.1)" - var couleurAxes = "rgba(0,0,0,0.5)" - break - case "bleu": - document.body.style.backgroundImage = "url(Images/fond4.png)" - document.getElementById("gauche").style.backgroundImage = "url(Images/gauche3.png)" - document.getElementById("onglet3D").style.backgroundImage = "url(Images/onglet2.png)" - document.getElementById("texteFonction").style.color = "white" - var couleurEchelle = "rgba(255,255,255,0.8)" - var couleurGrille = "rgba(255,255,255,0.1)" - var couleurAxes = "rgba(0,0,0,0.5)" - break - case "blanc": - document.body.style.backgroundImage = "url(Images/fond5.png)" - document.getElementById("gauche").style.backgroundImage = "url(Images/gauche3.png)" - document.getElementById("onglet3D").style.backgroundImage = "url(Images/onglet2.png)" - document.getElementById("texteFonction").style.color = "black" - var couleurEchelle = "rgba(0,0,0,0.8)" - var couleurGrille = "rgba(255,255,255,0.2)" - var couleurAxes = "rgba(0,0,0,0.5)" - break +function changerTheme(theme){ + var positions = [ + "top-left", + "top", + "top-right", + "right", + "bottom-right", + "bottom", + "bottom-left", + "left", + "center" + ]; + for(var i=0; i'; +// txtHTML += ''; +// txtHTML += ''; + } + document.getElementById("newVersion").innerHTML = txtHTML; + + afficherMenu("mAj"); } function checkboxMaJ(){ - if(document.location.href=='http://gyb.educanet2.ch/tm-widgets/yannick/GraphMe.wgt/Grapheur.xhtml'){ + if(versionOnline()){ afficherMenu('erreurMaJ') document.getElementById("checkMaJ").checked = false } @@ -194,20 +223,52 @@ function checkboxMaJ(){ } function majAuto(){ - if(document.location.href=='http://gyb.educanet2.ch/tm-widgets/yannick/GraphMe.wgt/Grapheur.xhtml'){ - document.getElementById("cacheMaJ").style.display = "block" - document.getElementById("checkMaJ").checked = true +// var audio = new Audio(); +// audio.src = "version.ogg"; +// audio.load(); +// setTimeout(function(){ +// window.console.log(" "+audio.duration); +// }, 0) + if(versionOnline()){ + document.getElementById("cacheMaJ").style.display = "block"; + document.getElementById("checkMaJ").disabled = true; + document.getElementById("checkMaJ").checked = true; } else{ if(document.getElementById("checkMaJ").checked){ - afficherMenu('demandeMaJ') + afficherMenu('demandeMaJ'); + } + } +} +function majAccept(){ +// document.location.href='http://gyb.educanet2.ch/tm-widgets/yannick/GraphMe.wgt/Grapheur.html'; + for(var i=0; i' -} \ No newline at end of file +// cacherMenu() +// document.getElementById("affichage").innerHTML = '' + window.open(lien, "_blank") +} diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/Languages.js b/resources/library/applications/GraphMe.wgt/JavaScript/Languages.js new file mode 100644 index 00000000..ad5f9f04 --- /dev/null +++ b/resources/library/applications/GraphMe.wgt/JavaScript/Languages.js @@ -0,0 +1,508 @@ + +var languages = { + current: "en", + + init: function(){ + var lang = this.navigatorLanguage(); + if(lang){ + lang = lang.substr(0,2); + this.set(lang); + } + }, + + navigatorLanguage: function(){ + if(window.sankore){ + return sankore.locale(); + } + return navigator.language || navigator.userLanguage; + }, + + set: function(lang){ + if(lang in langTexts){ + this.current = lang; + this.setTexts(langTexts[lang]); + } + }, + + getText: function(id){ + return langTexts[this.current][id]; + }, + + setTexts: function(texts){ + this.id("graphMeButton").textContent = texts.widgetName; + this.id("functionsButton").textContent = texts.functions; + this.id("displayButton").textContent = texts.display; + this.id("helpButton").textContent = texts.help; + + this.id("boutonAgrandir").title = texts.fullscreen; + this.id("boutonSaveGraph").title = texts.save; + this.id("inputRapideButton").value = texts.displayAction; + + this.id("pointTool").title = texts.pointTool; + this.id("moveTool").title = texts.moveTool; + this.id("tangentTool").title = texts.tangentTool; + + this.id("menuExempleCloseButton").value = texts.close; + + this.id("menuGraphMeOptionsTab").textContent = texts.options; + this.id("menuGraphMeAboutTab").textContent = texts.about; + this.id("widgetOptions").textContent = texts.widgetOptions; + this.id("widgetTheme").textContent = texts.widgetTheme; + this.id("selectThemeDarkBlue").textContent = texts.darkBlue; + this.id("selectThemeBlack").textContent = texts.black; + this.id("selectThemeBlue").textContent = texts.blue; + this.id("selectThemeWhite").textContent = texts.white; + this.id("resetWidgetButton").value = texts.resetWidget; + this.id("checkForUpdateButton").value = texts.checkForUpdate; + this.id("menuGraphMeCloseButton").value = texts.close; + + this.id("menuCreditsOptionsTab").textContent = texts.options; + this.id("menuCreditsAboutTab").textContent = texts.about; + this.id("widgetDevelopedBy").textContent = texts.widgetDevelopedBy; + this.id("widgetContactInfo").textContent = texts.widgetContactInfo; + this.id("widgetBackgroundSource").textContent = texts.widgetBackgroundSource; + this.id("changelogButton").textContent = texts.changelogButton; + this.id("menuCreditsCloseButton").value = texts.close; + + this.id("changelogTitle").textContent = texts.changelogTitle; + this.id("menuChangelogBackButton").value = texts.back; + this.id("menuChangelogCloseButton").value = texts.close; + + this.id("menuAffichageDisplayParametersTab").textContent = texts.displayParameters; + this.id("menuAffichageFunctionsParametersTab").textContent = texts.functionsParameters; + this.id("plotRange").textContent = texts.plotRange; + this.id("xAxis").textContent = texts.xAxis; + this.id("yAxis").textContent = texts.yAxis; + this.id("xAxisTo").textContent = texts.to; + this.id("yAxisTo").textContent = texts.to; + this.id("defaultZoom").textContent = texts.defaultZoom; + this.id("defaultDisplayParameters").value = texts.defaultDisplayParameters; + this.id("displayOptions").textContent = texts.options; + this.id("displayMethod").textContent = texts.displayMethod; + this.id("showGrid").textContent = texts.showGrid; + this.id("showAxis").textContent = texts.showAxis; + this.id("showScale").textContent = texts.showScale; + this.id("graphAccuracy").textContent = texts.graphAccuracy; + this.id("improveAccuracy").textContent = texts.improveAccuracy; + this.id("menuAffichageOkButton").value = texts.ok; + + this.id("menuFunctionParametersDisplayParametersTab").textContent = texts.displayParameters; + this.id("menuFunctionParametersFunctionsParametersTab").textContent = texts.functionsParameters; + this.id("defaultFunctionParameters").textContent = texts.defaultFunctionParameters; + this.id("thickness").textContent = texts.thickness; + this.id("drawDerivativeAndPrimitive").textContent = texts.drawDerivativeAndPrimitive; + this.id("drawArea").textContent = texts.drawArea; + this.id("lineStyle").textContent = texts.lineStyle; + this.id("selectStyleLine").textContent = texts.styleLine; + this.id("selectStyleDotted").textContent = texts.styleDotted; + this.id("selectStyleDashed").textContent = texts.styleDashed; + this.id("menuFunctionParametersCloseButton").value = texts.close; + + this.id("display3D").textContent = texts.display3D; + this.id("displayStyle").textContent = texts.displayStyle; + this.id("displayStyleSurfaces").textContent = texts.styleSurfaces; + this.id("displayStyleDotted").textContent = texts.styleDotted; + this.id("resetDisplay3D").value = texts.resetDisplay; + this.id("graphAccuracy3D").textContent = texts.graphAccuracy; + this.id("colorsConfig").textContent = texts.colorsConfig; + this.id("useRedFor").textContent = texts.useRedFor; + this.id("useGreenFor").textContent = texts.useGreenFor; + this.id("useBlueFor").textContent = texts.useBlueFor; + this.id("redPositive").textContent = texts.positiveValues; + this.id("redNegative").textContent = texts.negativeValues; + this.id("redAlways").textContent = texts.always; + this.id("greenPositive").textContent = texts.positiveValues; + this.id("greenNegative").textContent = texts.negativeValues; + this.id("greenAlways").textContent = texts.always; + this.id("bluePositive").textContent = texts.positiveValues; + this.id("blueNegative").textContent = texts.negativeValues; + this.id("blueAlways").textContent = texts.always; + this.id("globalValue").textContent = texts.globalValue; + this.id("globalValueRange").textContent = texts.globalValueRange; + this.id("menuAffichage3dOk").value = texts.ok; + + this.id("menuAideUsageTab").textContent = texts.usage; + this.id("menuAideExamplesTab").textContent = texts.examples; + this.id("howItWorks").textContent = texts.howItWorks; + this.id("howItWorksText").textContent = texts.howItWorksText; + this.id("availableFunctionsText").textContent = texts.availableFunctionsText; + this.id("basicOperations").textContent = texts.basicOperations; + this.id("plus").textContent = texts.plus; + this.id("minus").textContent = texts.minus; + this.id("multiplication").textContent = texts.multiplication; + this.id("division").textContent = texts.division; + this.id("modulus").textContent = texts.modulus; + this.id("trigonometricFunctions").textContent = texts.trigonometricFunctions; + this.id("sine").textContent = texts.sine; + this.id("cosine").textContent = texts.cosine; + this.id("tangent").textContent = texts.tangent; + this.id("cotangent").textContent = texts.cotangent; + this.id("secant").textContent = texts.secant; + this.id("cosecant").textContent = texts.cosecant; + this.id("arcSine").textContent = texts.arcSine; + this.id("arcCosine").textContent = texts.arcCosine; + this.id("arcTangent").textContent = texts.arcTangent; + this.id("arcCotangent").textContent = texts.arcCotangent; + this.id("hyperbolicFunctions").textContent = texts.hyperbolicFunctions; + this.id("hypSine").textContent = texts.hypSine; + this.id("hypCosine").textContent = texts.hypCosine; + this.id("hypTangent").textContent = texts.hypTangent; + this.id("hypCotangent").textContent = texts.hypCotangent; + this.id("hypSecant").textContent = texts.hypSecant; + this.id("hypCosecant").textContent = texts.hypCosecant; + this.id("hypArcSine").textContent = texts.hypArcSine; + this.id("hypArcCosine").textContent = texts.hypArcCosine; + this.id("hypArcTangent").textContent = texts.hypArcTangent; + this.id("hypArcCotangent").textContent = texts.hypArcCotangent; + this.id("powerAndRoot").textContent = texts.powerAndRoot; + this.id("squareRoot").textContent = texts.squareRoot; + this.id("power").textContent = texts.power; + this.id("xPowY").textContent = texts.xPowY; + this.id("root").textContent = texts.root; + this.id("rootText").textContent = texts.rootText; + this.id("expAndLog").textContent = texts.expAndLog; + this.id("naturalLog").textContent = texts.naturalLog; + this.id("decimalLog").textContent = texts.decimalLog; + this.id("absValue").textContent = texts.absValue; + this.id("rounding").textContent = texts.rounding; + this.id("roundText").textContent = texts.roundText; + this.id("ceilText").textContent = texts.ceilText; + this.id("floorText").textContent = texts.floorText; + this.id("constants").textContent = texts.constants; + this.id("keyboardShortcuts").textContent = texts.keyboardShortcuts; + this.id("moveLeft").textContent = texts.moveLeft; + this.id("moveTop").textContent = texts.moveTop; + this.id("moveRight").textContent = texts.moveRight; + this.id("moveBottom").textContent = texts.moveBottom; + this.id("menuAideCloseButton").value = texts.close; + + this.id("menuAideExemplesUsageTab").textContent = texts.usage; + this.id("menuAideExemplesExamplesTab").textContent = texts.examples; + this.id("examplesText").textContent = texts.examplesText; + this.id("functions2d").textContent = texts.functions2d; + this.id("functions3d").textContent = texts.functions3d; + this.id("menuAideExemplesCloseButton").value = texts.close; + + this.id("functionStudyTitle").textContent = texts.functionStudy; + this.id("domainOfDefinition").textContent = texts.domainOfDefinition; + this.id("symmetry").textContent = texts.symmetry; + this.id("zeros").textContent = texts.zeros; + this.id("sign").textContent = texts.sign; + this.id("asymptotes").textContent = texts.asymptotes; + this.id("extremums").textContent = texts.extremums; + this.id("inflexionPoints").textContent = texts.inflexionPoints; + this.id("functionStudyText").textContent = texts.functionStudyText; + this.id("menuEtudeBackButton").value = texts.back; + this.id("menuEtudeCloseButton").value = texts.close; + + this.id("menuFonctionsFunctionsTab").textContent = texts.functions; + this.id("menuFonctionsHistoryTab").textContent = texts.history; + this.id("newFunction").textContent = texts.newFunction; + this.id("functionTypeCartesian").textContent = texts.cartesian; + this.id("functionTypeImplicit").textContent = texts.implicit; + this.id("functionTypePolar").textContent = texts.polar; + this.id("functionTypeParametric").textContent = texts.parametric; + this.id("addFunctionButton").value = texts.add; + this.id("functionsListText").textContent = texts.functionsListText; + + this.id("editorEditPageEditTab").textContent = texts.edit; + this.id("editorEditPageToolsTab").textContent = texts.tools; + this.id("editorRangeFrom").textContent = texts.from; + this.id("editorRangeTo").textContent = texts.to; + this.id("editorThickness").textContent = texts.thickness; + this.id("editorColor").textContent = texts.color; + this.id("editorDerivatives").textContent = texts.derivatives; + this.id("editorPrimitive").textContent = texts.primitive; + this.id("editorLineStyle").textContent = texts.lineStyle; + this.id("editorStyleLine").textContent = texts.styleLine; + this.id("editorStyleDotted").textContent = texts.styleDotted; + this.id("editorStyleDashed").textContent = texts.styleDashed; + this.id("editorDrawArea").textContent = texts.drawArea; + this.id("editorDuplicate").value = texts.duplicate; + this.id("editorRemove").value = texts.remove; + + this.id("editorToolsPageEditTab").textContent = texts.edit; + this.id("editorToolsPageToolsTab").textContent = texts.tools; + this.id("computePoint").textContent = texts.computePoint; + this.id("computePointButton").value = texts.compute; + this.id("computeArea").textContent = texts.computeArea; + this.id("areaFrom").textContent = texts.from; + this.id("areaTo").textContent = texts.to; + this.id("computeAreaButton").value = texts.compute; + this.id("functionStudy").textContent = texts.functionStudy; + this.id("functionStudyButton").value = texts.startStudy; + this.id("editorToolsDuplicate").value = texts.duplicate; + this.id("editorToolsRemove").value = texts.remove; + this.id("menuFonctionsCloseButton").value = texts.close; + + this.id("input3dDisplayButton").value = texts.displayAction; + + this.id("menuHistoriqueFunctionsTab").textContent = texts.functions; + this.id("menuHistoriqueHistoryTab").textContent = texts.history; + this.id("latestDisplayedFunctions").textContent = texts.latestDisplayedFunctions; + this.id("menuHistoriqueCloseButton").value = texts.close; + + this.id("chooseColor").textContent = texts.chooseColor; + this.id("colorPickerColor").textContent = texts.color; + this.id("colorPickerValue").textContent = texts.value; + this.id("colorPickerSaturation").textContent = texts.saturation; + this.id("colorPickerRed").textContent = texts.red; + this.id("colorPickerGreen").textContent = texts.green; + this.id("colorPickerBlue").textContent = texts.blue; + this.id("inputOpacity").textContent = texts.opacity; + this.id("apercuCouleur").title = texts.newColor; + this.id("apercuCouleur2").title = texts.oldColor; + this.id("colorPickerCancelButton").value = texts.cancel; + this.id("colorPickerOkButton").value = texts.ok; + + this.id("blackListError").textContent = texts.error; + this.id("cannotDrawFunction").textContent = texts.cannotDrawFunction; + this.id("invalidExpression").textContent = texts.invalidExpression; + this.id("blackListErrorOkButton").value = texts.ok; + this.id("fctError").textContent = texts.error; + this.id("checkTheFunction").textContent = texts.checkTheFunction; + this.id("errorMessage").textContent = texts.errorMessage; + this.id("youCanFindExamples").textContent = texts.youCanFindExamples; + this.id("fctErrorHelpButton").value = texts.help; + this.id("fctErrorOkButton").value = texts.ok; + + this.id("menuSaveGraphTitle").textContent = texts.saveGraph; + this.id("saveWidthText").textContent = texts.width; + this.id("saveHeightText").textContent = texts.height; + this.id("saveBackgroundColor").textContent = texts.backgroundColor; + this.id("imageFormat").textContent = texts.imageFormat; + this.id("menuSaveGraphCancelButton").value = texts.cancel; + this.id("menuSaveGraphOkButton").value = texts.ok; + + this.id("saveImageTitle").textContent = texts.saveImageTitle; + this.id("saveImageText").textContent = texts.saveImageText; + this.id("menuSaveImageCloseButton").value = texts.close; + + this.id("updateTitle").textContent = texts.update; + this.id("currentVersion").textContent = texts.currentVersion; + this.id("latestVersionAvailable").textContent = texts.latestVersionAvailable; +// this.id("useLatestVersionText").textContent = texts.useLatestVersionText; +// this.id("useLatestVersion").value = texts.useLatestVersion; + this.id("updateBackButton").value = texts.back; + this.id("updateOkButton").value = texts.ok; + + this.id("updateErrorTitle").textContent = texts.error; + this.id("updateErrorText").textContent = texts.updateErrorText; + this.id("updateErrorOkButton").value = texts.ok; + + this.id("ctxMenuDisplay").textContent = texts.display; + this.id("ctxMenuAxes").textContent = texts.axes; + this.id("ctxMenuScale").textContent = texts.scale; + this.id("ctxMenuGrid").textContent = texts.grid; + this.id("ctxMenuReset").value = texts.reset; + this.id("ctxMenuSave").value = texts.save; + }, + + class: function(className){ + return document.getElementsByClassName(className); + }, + + id: function(id){ + return document.getElementById(id); + } +}; + + +var langTexts = { + "fr": { + "widgetName": "GraphMe", + "functions": "Fonctions", + "display": "Affichage", + "help": "Aide", + "close": "Fermer", + "back": "Retour", + "ok": "Ok", + "fullscreen": "Plein écran", + "save": "Sauvegarder", + "displayAction": "Afficher", + "pointTool": "Outil point", + "moveTool": "Outil déplacement", + "tangentTool": "Outil tangente", + "options": "Options", + "about": "À propos", + "darkBlue": "Bleu foncé", + "black": "Noir", + "blue": "Bleu", + "white": "Blanc", + "widgetOptions": "Options du widget", + "widgetTheme": "Thème du widget", + "resetWidget": "Réinitialiser le widget", + "checkForUpdate": "Vérifier les mises à jour", + "widgetDevelopedBy": "Widget réalisé par", + "widgetContactInfo": "Si vous voulez rapporter un bug, avez une suggestion par rapport au widget ou voulez simplement poser une question, merci de me contacter par e-mail à l'adresse suivante", + "widgetBackgroundSource": "Les images d'arrière-plan viennent de l'environnement de bureau KDE", + "changelogButton": "qu'est-ce qui a changé?", + "changelogTitle": "Notes de version", + "displayParameters": "Paramètres d'affichage", + "functionsParameters": "Paramètres des fonctions", + "plotRange": "Zone d'affichage", + "xAxis": "Axe des X", + "yAxis": "Axe des Y", + "to": "à", + "defaultZoom": "Zoom par défaut", + "defaultDisplayParameters": "Réinitialiser l'affichage", + "displayMethod": "Méthode d'affichage du graphique", + "showGrid": "Afficher la grille", + "showAxis": "Afficher les axes", + "showScale": "Afficher l'échelle", + "graphAccuracy": "Précision du graphique, points calculés", + "improveAccuracy": "Améliorer la précision lors d'un zoom arrière (plus lent)", + "defaultFunctionParameters": "Paramètres par défaut des fonctions", + "thickness": "Épaisseur", + "drawDerivativeAndPrimitive": "Dessiner les dérivées et primitives", + "drawArea": "Dessiner l'aire sous la fonction", + "lineStyle": "Style de ligne", + "styleLine": "continu", + "styleDotted": "points", + "styleDashed": "traits", + "display3D": "Affichage 3D", + "displayStyle": "Style d'affichage", + "styleSurfaces": "surfaces", + "resetDisplay": "Réinitialiser l'affichage", + "colorsConfig": "Configuration des couleurs", + "useRedFor": "utiliser le rouge pour", + "useGreenFor": "utiliser le vert pour", + "useBlueFor": "utiliser le bleu pour", + "positiveValues": "valeur positive", + "negativeValues": "valeur négative", + "always": "toujours", + "globalValue": "Valeur générale", + "globalValueRange": "(entre 0 et 255)", + "usage": "Utilisation", + "examples": "Exemples", + "howItWorks": "Fonctionnement", + "howItWorksText": "Ce widget vous permet de dessiner des fonctions mathématiques. Entrez une première fonction dans le champ en haut du widget et cliquez sur le bouton \"Afficher\". Ouvrez le menu \"Fonctions\" pour modifier votre fonction ou en ajouter une nouvelle.", + "availableFunctionsText": "Vous pouvez saisir les fonctions mathématiques suivantes", + "basicOperations": "Les opérations de base", + "plus": "Addition", + "minus": "Soustraction", + "multiplication": "Multiplication", + "division": "Division", + "modulus": "Modulo", + "trigonometricFunctions": "Les fonctions trigonométriques", + "sine": "Sinus", + "cosine": "Cosinus", + "tangent": "Tangente", + "cotangent": "Cotangente", + "secant": "Secante", + "cosecant": "Cosecante", + "arcSine": "Arcsinus", + "arcCosine": "Arccosinus", + "arcTangent": "Arctangente", + "arcCotangent": "Arccotangente", + "hyperbolicFunctions": "Les fonctions hyperboliques", + "hypSine": "Sinus hyp", + "hypCosine": "Cosinus hyp", + "hypTangent": "Tangente hyp", + "hypCotangent": "Cotangente hyp", + "hypSecant": "Secante hyp", + "hypCosecant": "Cosecante hyp", + "hypArcSine": "Arcsinus hyp", + "hypArcCosine": "Arccosinus hyp", + "hypArcTangent": "Arctangente hyp", + "hypArcCotangent": "Arccotangente hyp", + "powerAndRoot": "Les racines et les puissances", + "squareRoot": "Racine carrée", + "power": "Puissances", + "xPowY": "Élève x à une puissance y", + "root": "Racines", + "rootText": "Racine y d'un nombre x", + "expAndLog": "Les exponentielles et logarithmes", + "naturalLog": "logarithme naturel", + "decimalLog": "logarithme de base", + "absValue": "La valeur absolue d'un nombre", + "rounding": "Les arrondis", + "roundText": "arrondit à l'entier le plus proche", + "ceilText": "arrondit à l'entier supérieur", + "floorText": "arrondit à l'entier inférieur", + "constants": "Constantes", + "keyboardShortcuts": "Raccourcis clavier", + "moveLeft": "déplacer le graphique à gauche", + "moveTop": "déplacer le graphique en haut", + "moveRight": "déplacer le graphique à droite", + "moveBottom": "déplacer le graphique en bas", + "examplesText": "(Vous pouvez cliquer sur un exemple pour l'afficher. Pensez à ajuster la précision du graphique dans les options si nécessaire.)", + "functions2d": "Fonctions 2D", + "functions3d": "Fonctions 3D", + "saveGraph": "Enregistrer le graphique", + "functionStudy": "Étude de fonction", + "domainOfDefinition": "Ensemble de définition", + "symmetry": "Parité", + "zeros": "Zéros de la fonction", + "sign": "Signe", + "asymptotes": "Asymptotes", + "extremums": "Extremums", + "inflexionPoints": "Points d'inflexion", + "functionStudyText": "L'outil permettant d'étudier les fonctions n'est pas fiable à 100%. Pensez à vérifier les résultats de l'étude avant d'en faire une quelconque utilisation.", + "history": "Historique", + "newFunction": "Nouvelle fonction", + "cartesian": "Cartésienne", + "implicit": "Implicite", + "polar": "Polaire", + "parametric": "Paramétrique", + "add": "Ajouter", + "functionsListText": "Fonction dessinées", + "edit": "Modifier", + "tools": "Outils", + "from": "de", + "to": "à", + "color": "Couleur", + "derivatives": "Dérivées", + "primitive": "Primitive", + "duplicate": "Dupliquer", + "remove": "Supprimer", + "computePoint": "Calculer un point de la fonction", + "compute": "Calculer", + "computeArea": "Calculer l'aire sous la fonction", + "startStudy": "Démarrer l'étude", + "latestDisplayedFunctions": "Dernières fonctions dessinées", + "chooseColor": "Choix de la couleur", + "value": "Valeur", + "saturation": "Saturation", + "red": "Rouge", + "green": "Vert", + "blue": "Bleu", + "opacity": "Opacité", + "oldColor": "Ancienne Couleur", + "newColor": "Nouvelle Couleur", + "cancel": "Annuler", + "error": "Erreur", + "cannotDrawFunction": "Impossible de dessiner la fonction", + "invalidExpression": "Expression ou caractère invalide", + "checkTheFunction": "Vérifiez la fonction que vous vouliez dessiner", + "errorMessage": "Message d'erreur", + "youCanFindExamples": "Une description ainsi que des exemples des différentes fonctions que vous pouvez dessiner se trouvent dans l'aide", + "width": "Largeur", + "height": "Hauteur", + "backgroundColor": "Couleur de fond", + "imageFormat": "Format de l'image", + "update": "Mise à jour", + "currentVersion": "Version en cours d'utilisation", + "latestVersionAvailable": "Dernière version disponible en ligne", + "useLatestVersionText": "Vous pouvez remplacer la version en cours d'utilisation par une version du widget en ligne. Notez que ceci ne met pas à jour le widget. Il faudra réitérer cette procédure la prochaine fois que vous l'utiliserez.", + "useLatestVersion": "Utiliser la dernière version", + "updateErrorText": "Il est impossible de mettre à jour le widget vers la version en ligne car vous utilisez déjà la version en ligne", + "axes": "Axes", + "scale": "Échelle", + "grid": "Grille", + "reset": "Réinitialiser", + "saveImageTitle": "Sauvegarder l'image", + "saveImageText": "Cliquez avec le bouton de droite sur l'image et sélectionnez \"Enregistrer l'image\". Il est aussi possible de choisir \"Copier l'image\" et ensuite la coller dans une autre application.", + + /* Inside code */ + "even": "paire", + "odd": "impaire", + "none_f": "aucune", + "none_m": "aucun", + "clickHereToModify": "Cliquez ici pour modifier les fonctions ou en ajouter une nouvelle.", + "enterFunction": "Entrez une fonction à dessiner", + "needHelp": "Consulter l'aide", + "unableLoadParameters": "Impossible de charger les paramètres enregistrés..." + } +}; + diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/Outils.js b/resources/library/applications/GraphMe.wgt/JavaScript/Outils.js old mode 100644 new mode 100755 index 0915a333..82f9aa91 --- a/resources/library/applications/GraphMe.wgt/JavaScript/Outils.js +++ b/resources/library/applications/GraphMe.wgt/JavaScript/Outils.js @@ -1,252 +1,446 @@ // -------------------- Fonctions des outils -------------------- -var listeFonctions = new Array() -var listeCouleurs = new Array() -var historique = new Array() -var ctxT - -// Cette fonction permet d'effectuer un zoom. Elle change la valeur des inputs à gauche -// qui définnissent la zone à afficher et actualise le graphique. -function zoom(valeur){ - var diffBornes = Math.abs(parseFloat(document.getElementById("borneXGauche").value) - parseFloat(document.getElementById("borneXDroite").value)) - var ajouter = (diffBornes * valeur - diffBornes)/2 - var nouvelleValeur = parseFloat(document.getElementById("borneXGauche").value) - ajouter - if (nouvelleValeur < 0){ nouvelleValeur = Math.ceil(nouvelleValeur) } - if (nouvelleValeur > 0){ nouvelleValeur = Math.floor(nouvelleValeur) } - if (nouvelleValeur == parseFloat(document.getElementById("borneXGauche").value) && valeur>1){ nouvelleValeur=nouvelleValeur-1 } - if (nouvelleValeur == parseFloat(document.getElementById("borneXGauche").value) && valeur<1){ nouvelleValeur=nouvelleValeur+1 } - document.getElementById("borneXGauche").value = nouvelleValeur - var nouvelleValeur = parseFloat(document.getElementById("borneXDroite").value) + ajouter - if (nouvelleValeur < 0){ nouvelleValeur = Math.ceil(nouvelleValeur) } - if (nouvelleValeur > 0){ nouvelleValeur = Math.floor(nouvelleValeur) } - if (nouvelleValeur == parseFloat(document.getElementById("borneXDroite").value) && valeur>1){ nouvelleValeur=nouvelleValeur+1 } - if (nouvelleValeur == parseFloat(document.getElementById("borneXDroite").value) && valeur<1){ nouvelleValeur=nouvelleValeur-1 } - document.getElementById("borneXDroite").value = nouvelleValeur - - var diffBornes = Math.abs(parseFloat(document.getElementById("borneYGauche").value) - parseFloat(document.getElementById("borneYDroite").value)) - var ajouter = (diffBornes * valeur - diffBornes)/2 - var nouvelleValeur = parseFloat(document.getElementById("borneYGauche").value) - ajouter - if (nouvelleValeur < 0){ nouvelleValeur = Math.ceil(nouvelleValeur) } - if (nouvelleValeur > 0){ nouvelleValeur = Math.floor(nouvelleValeur) } - if (nouvelleValeur == parseFloat(document.getElementById("borneYGauche").value) && valeur>1){ nouvelleValeur=nouvelleValeur-1 } - if (nouvelleValeur == parseFloat(document.getElementById("borneYGauche").value) && valeur<1){ nouvelleValeur=nouvelleValeur+1 } - document.getElementById("borneYGauche").value = nouvelleValeur - var nouvelleValeur = parseFloat(document.getElementById("borneYDroite").value) + ajouter - if (nouvelleValeur < 0){ nouvelleValeur = Math.ceil(nouvelleValeur) } - if (nouvelleValeur > 0){ nouvelleValeur = Math.floor(nouvelleValeur) } - if (nouvelleValeur == parseFloat(document.getElementById("borneYDroite").value) && valeur>1){ nouvelleValeur=nouvelleValeur+1 } - if (nouvelleValeur == parseFloat(document.getElementById("borneYDroite").value) && valeur<1){ nouvelleValeur=nouvelleValeur-1 } - document.getElementById("borneYDroite").value = nouvelleValeur - - if(Math.abs(parseFloat(document.getElementById("borneXGauche").value) - parseFloat(document.getElementById("borneXDroite").value)) == 0){reinitialiserZoom(1)} - if(Math.abs(parseFloat(document.getElementById("borneYGauche").value) - parseFloat(document.getElementById("borneYDroite").value)) == 0){reinitialiserZoom(1)} - actualiserGraph() -} - -// Permet de réinitialiser le zoom à la valeur donnée. -function reinitialiserZoom(valeur){ - document.getElementById("borneXGauche").value = -valeur - document.getElementById("borneXDroite").value = valeur - document.getElementById("borneYGauche").value = -valeur - document.getElementById("borneYDroite").value = valeur - angle = Math.PI/8 - valeurZoom3D = 1 - gauche3D = -6.5 - droite3D = 6.5 - precisionDroite3D = 0.02 - precisionFonction3D = 0.2 - document.getElementById("inputPrecision3D").value = 0.2 - actualiserGraph() -} - -// Ces fonctions permettent de déplacer le graphique sur l'axe "x" et "y" -// Pour cela, elles redéfinissent la zone à afficher (à gauche dans les inputs) - function deplacerY(valeur){ - document.getElementById("borneYGauche").value = parseFloat(document.getElementById("borneYGauche").value) + valeur - document.getElementById("borneYDroite").value = parseFloat(document.getElementById("borneYDroite").value) + valeur - actualiserGraph() - } - function deplacerX(valeur){ - document.getElementById("borneXGauche").value = parseFloat(document.getElementById("borneXGauche").value) + valeur - document.getElementById("borneXDroite").value = parseFloat(document.getElementById("borneXDroite").value) + valeur - if(fonction3D){ - angle = angle + valeur * Math.PI/8 - } - actualiserGraph() - } // Permet d'afficher la valeur en "y" pour un point donné en "x" - function execute(fonction) { - if(check(fonction)){ - x = document.getElementById("inputX").value - document.getElementById("outputX").innerHTML = " f(x) = "+eval(fonction)+"" - //alert("Si x = "+x+" \nf(x) = "+eval(fonction)+"") - } - } - -// Ajoute la fonction mathématique se trouvant dans l'input en haut à une liste. -// Ceci est utile à l'affichage de plusieurs fonctions simultanées. -function menuFonctions(){ - if(fonction3D){ - afficherMenu('menuHistorique') - } - else{ - afficherMenu('menuFonctions') - } +function calculerPoint() { + x = document.getElementById("inputX").value; + document.getElementById("outputX").innerHTML = " f(x) = "+fct.list[editeur.idFct].f(x)+""; + //alert("Si x = "+x+" \nf(x) = "+eval(fonction)+"") } -function ajouterFonction(fct){ - listeFonctions.push(fct) - listeCouleurs.push("rgba(0,171,255,0.9)") - actualiserListeFonctions() -} -function actualiserListeFonctions(){ - var texteFctSupp = "" - for(var i=0; i' - texteFctSupp += ' ....
' - } - document.getElementById("fonctionsSupp").innerHTML = texteFctSupp - actualiserGraph() -} -function actualiserHistorique(){ - var texteHistorique = "" - for(var i=0; i'+historique[i]+'
' +// Historique + +var historique = { + liste : [], + + actualiser : function(){ + var texteHistorique = "" + for(var i=0; i'; + texteHistorique += this.liste[i].readableText(); + texteHistorique += '
'; + } + document.getElementById("spanHistorique").innerHTML = texteHistorique + document.getElementById("divHistorique").scrollTop = 0 + }, + + use : function(index){ + fct.add(this.liste[index]); + }, + + ajouter : function(func){ + if(func.fct == ""){ + return; + } + for(var i=0; i' - ctxT = document.getElementById('canvasT').getContext('2d') - } - else{ - document.getElementById("tangente").innerHTML = "" - ctxT = null - } -} +var outil = { + // + idAffichage : "affichageOutils", + + // Outil sélectionné + actuel : "point", + + // Canvas + canvas : null, + ctx : null, + + width: 0, + height: 0, + + // Liste des éléments à dessiner + liste : [], + + // Fonction d'initialisation + init : function(width, height){ + var element = document.getElementById(this.idAffichage); + if(element.hasChildNodes()){ + while(element.childNodes.length >= 1 ){ + element.removeChild(element.firstChild); + } + } + + this.width = width || element.clientWidth; + this.height = height || element.clientHeight; + +// element.style.width = affichage.largeur +"px"; +// element.style.height = affichage.hauteur +"px"; +// element.style.left = document.getElementById(affichage.id).offsetLeft+1 +"px"; +// element.style.top = document.getElementById(affichage.id).offsetTop+1 +"px"; + + this.canvas = document.createElement("canvas"); + this.canvas.width = this.width; + this.canvas.height = this.height; + element.appendChild(this.canvas); + this.ctx = this.canvas.getContext('2d'); + }, + + // Permet de changer d'outil et de faire différentes actions lors du choix de l'outil + choisir : function(nom){ + document.getElementById("pointTool").className = "toolButton"; + document.getElementById("moveTool").className = "toolButton"; + document.getElementById("tangentTool").className = "toolButton"; + switch(nom){ + case 'point': + document.getElementById("pointTool").className += " selectedTool"; + break; + case 'deplacement': + document.getElementById("moveTool").className += " selectedTool"; + break; + case 'tangente': + document.getElementById("tangentTool").className += " selectedTool"; + break; + } + if(nom == 'deplacement'){ + document.getElementById("eventAffichage").style.cursor = "move"; + } + else{ + document.getElementById("eventAffichage").style.cursor = "auto"; + } + this.dessinerListe(); + this.actuel = nom; + saveOptions(); + }, + + // Gestion des événements reçus de l'objet souris + move : function(x, y, xInit, yInit, active){ + switch(this.actuel){ + case "deplacement": + if(active){ + this.deplacement(x, y, xInit, yInit); + } + break; + case "point": + this.point(x, y); + break; + case "tangente": + this.tangente(x, y); + break; + } + }, + + down : function(x, y){ + switch(this.actuel){ + case "point": + this.point(x, y, true) + break; + case "tangente": + this.tangente(x, y, true); + break; + } + }, + + // Fonctions des outils + deplacement : function(x, y, xInit, yInit){ + var valeurX = (x-xInit)/affichage.multX; + var valeurY = (yInit-y)/affichage.multY; + if(Math.round(Math.abs(valeurX)) > 0){ + if(fonction3D){ + affichage.deplacerX(Math.round(2*valeurX)/2); + } + else{ + affichage.deplacerX(-Math.round(2*valeurX)/2); + } + souris.xInit = x; + } + if(Math.round(Math.abs(valeurY)) > 0){ + affichage.deplacerY(-Math.round(2*valeurY)/2); + souris.yInit = y; + } + }, + + point : function(sourisX, sourisY, ajouterDansListe){ + var ctx = new Object(); + ctx = this.ctx; + + // Dessiner les points et tangentes supplémentaires + this.dessinerListe(); + + for(var i=0; i func.endAngle){ + continue; + } + } + var x = func.getX(t); + var y = func.getY(t); + + // Afficher les coordonnées et le point sous la souris + if(!isNaN(x) && !isNaN(y)){ + if(ajouterDansListe){ + this.ajouterPoint(x, y, func.couleur); + } + this.dessinerPoint(x, y, func.couleur); + } + } + }, + dessinerPoint : function(x, y, couleur){ + var ctx = new Object(); + ctx = this.ctx; + + // Conversion des coordonnées + var posX = coordToPosX(x) + 1; + var posY = coordToPosY(y) + 1; + + ctx.shadowColor = couleur; + ctx.shadowBlur = 4; + + // Texte + var txtPos = "("+Math.round(x*100)/100+";"+Math.round(y*100)/100+")"; + ctx.fillStyle = "rgba(255,255,255,0.5)"; + try{ + ctx.bulle(posX+7, posY-7, txtPos.length*5.5, 20); + } + catch(err){ + ctx.fillRect(posX+7, posY-27, txtPos.length*5.5, 20); + } + + ctx.fillStyle = "black"; + ctx.shadowColor = "black"; + ctx.shadowOffsetX = 1; + ctx.shadowOffsetY = 1; + ctx.shadowBlur = 2; + ctx.fillText(txtPos, posX+8+txtPos.length/4, posY-13); + + // Rond + ctx.beginPath(); + ctx.arc(posX, posY, 4, 0, 2*Math.PI, true); + + ctx.shadowColor = couleur; + ctx.shadowOffsetX = 0; + ctx.shadowOffsetY = 0; + ctx.shadowBlur = 4; -// Fonctions servant à gérer les événements de la souris -function sourisDown(){ - mouseDown = true - posSourisXinit = posSourisX - posSourisYinit = posSourisY -} -function sourisUp(){ - mouseDown = false -} -function sourisMove(event){ - posSourisX = event.clientX - posSourisY = event.clientY - if(mouseDown){ - if(outil == "deplacement"){ - var valeurX = (posSourisX-posSourisXinit)/multiplicateurX - var valeurY = (posSourisYinit-posSourisY)/multiplicateurY - if(Math.round(Math.abs(valeurX)) > 0){ - deplacerX(-Math.round(2*valeurX)/2) - posSourisXinit = posSourisX + ctx.fillStyle = "rgba(0,0,0,1)"; + ctx.strokeStyle = "rgba(255,255,255,0.8)"; + ctx.lineWidth = 1; + ctx.fill() + ctx.stroke(); + }, + + tangente : function(sourisX, sourisY, ajouterDansListe){ + var delta = 0.001; + + var ctx = new Object(); + ctx = this.ctx; + + // Dessiner les points et tangentes supplémentaires + this.dessinerListe(); + + // Dessiner les tangentes des fonctions + for(var i=0; i 0){ - deplacerY(-Math.round(2*valeurY)/2) - posSourisYinit = posSourisY + + // Position de la souris par rapport au coin supérieur gauche de l'affichage + var posX = sourisX - affichage.offsetLeft - 2; + + // Valeur de la coordonnée x sous la souris + var t = posX / affichage.multX + affichage.xGauche; + if("startAngle" in func){ + if(t < func.startAngle || t > func.endAngle){ + continue; + } + } + var t1 = t + delta; + var x = func.getX(t); + var x1 = func.getX(t1); + // Calcul de deux valeurs y et de la pente + var y = func.getY(t); + var y1 = func.getY(t1); + var pente; + if(x1 != x){ + pente = (y1-y)/(x1-x); + } + else{ + pente = Number.POSITIVE_INFINITY; + } + + // Dessiner la pente; + if(!isNaN(x) && !isNaN(y) && !isNaN(y1)){ + if(ajouterDansListe){ + this.ajouterTangente(x, y, pente, func.couleur); + } + this.dessinerTangente(x, y, pente, func.couleur); } - //decalageX = posSourisX-posSourisXinit - //decalageY = posSourisY-posSourisYinit - //actualiserGraph() } - } - if(outil == "point"){ - var position = Math.round((posSourisX-132)*(borneXDroite-borneXGauche)/(precision*500)) - var positionX = pointX[position] - var positionY = pointY[position] - if(!isNaN(positionX) && !isNaN(positionY)){ - document.getElementById("info").innerHTML = "("+Math.round((positionX/multiplicateurX+borneXGauche)*100)/100+";"+Math.round(-(positionY/multiplicateurY-borneYDroite)*100)/100+")" - document.getElementById("point").style.left = (positionX+130-4)+"px" - document.getElementById("point").style.top = (positionY+53-10)+"px" + }, + dessinerTangente : function(x, y, pente, couleur){ + var ctx = new Object(); + ctx = this.ctx; + + // Conversion des coordonnées + var posX = coordToPosX(x) + 1; + var posY = coordToPosY(y) + 1; + + // Carré + ctx.shadowColor = couleur; + ctx.shadowBlur = 4; + + ctx.fillStyle = "white"; + ctx.fillRect(posX-3, posY-3, 6, 6); + + // Pente + ctx.strokeStyle = "white"; + ctx.lineWidth = 2; + ctx.beginPath(); + var pente2 = pente * (affichage.hauteur/affichage.largeur) * (affichage.xDroite-affichage.xGauche)/(affichage.yHaut-affichage.yBas); + ctx.moveTo(0, posY+posX*pente2); + ctx.lineTo(affichage.largeur, posY+posX*pente2-affichage.largeur*pente2); + ctx.stroke(); + + // Texte + var txtPente; + if(isFinite(pente)){ + txtPente = pente.toFixed(2); } - } - if(outil == "tangente"){ - var position = Math.round((posSourisX-129)/multiplicateurX/precision) - var positionX = pointX[position] - var positionY = pointY[position] - var valeurPente = ((hauteur-pente[position])/multiplicateurY+borneYGauche) - //hauteur - (((y-y1)/precision - borneYGauche)* multiplicateurY) - document.getElementById("info").innerHTML = "("+Math.round(valeurPente*100)/100+")" - ctxT.clearRect(0,0,largeur*2,hauteur*2) - if(!isNaN(positionX) && !isNaN(positionY)){ - ctxT.fillStyle = "white" - ctxT.fillRect (positionX-1, positionY-2, 6, 6) - ctxT.strokeStyle = "white" - ctxT.lineWidth = 2 - ctxT.beginPath() - valeurPente = valeurPente * (hauteur/largeur) * (borneXDroite-borneXGauche)/(borneYDroite-borneYGauche) - ctxT.moveTo(0+4, positionY+positionX*valeurPente+1) - ctxT.lineTo(largeur+4, positionY+positionX*valeurPente-largeur*valeurPente+1) - ctxT.stroke() + else{ + txtPente = "∞" } + ctx.fillStyle = "rgba(255,255,255,0.5)"; + try{ + ctx.bulle(posX+7, posY-7, txtPente.length*5.5+1, 20); + } + catch(err){ + ctx.fillRect(posX+7, posY-27, txtPente.length*5.5, 20); + } + + ctx.fillStyle = "black"; + ctx.shadowColor = "black"; + ctx.shadowOffsetX = 1; + ctx.shadowOffsetY = 1; + ctx.shadowBlur = 2; + ctx.fillText(txtPente, posX+8+txtPente.length/4, posY-13); + }, + + ajouterPoint : function(x, y, couleur){ + var newPoint = { + x : x, + y : y, + couleur : couleur, + dessiner : function(){ + outil.dessinerPoint(this.x, this.y, this.couleur); + } + }; + this.liste.push(newPoint); + }, + ajouterTangente : function(x, y, pente, couleur){ + var newTangente = { + x : x, + y : y, + pente : pente, + couleur : couleur, + dessiner : function(){ + outil.dessinerTangente(this.x, this.y, this.pente, this.couleur); + } + }; + this.liste.push(newTangente); + }, + dessinerListe : function(){ + if(!this.ctx){ + return; + } + this.ctx.clearRect(0,0,affichage.largeur*2,affichage.hauteur*2); + for(var i=0; i affichage.largeur+affichage.offsetLeft || posX < affichage.offsetLeft || posY > affichage.hauteur+affichage.offsetTop || posX < affichage.offsetTop){ + continue; + } + var txt = '
' - ctx = document.getElementById('canvas').getContext('2d') - var lingrad = ctx.createLinearGradient(100,100,largeur-100,hauteur-100) - lingrad.addColorStop(0, 'rgba(0,50,255,1)') - lingrad.addColorStop(1, 'rgba(0,255,255,1)') - ctx.fillStyle = lingrad - ctx.textAlign = "center" - ctx.font = "72px bold" - ctx.fillText("Canvas", largeur/2, hauteur/2-1) -} -function testXPM(){ - document.getElementById("affichage").innerHTML = '' -} - - // ---- Aire sous la fonction (intégrale) ---- function AireSousFct(fct, a, b, n){ var aire, largeurRect, gaucheRect, droiteRect, millieuRect, hauteurRect, aireRect; - var f = function(x){ - return eval(fct); - }; + var f = new Function("x", "return "+fct); aire = 0; largeurRect = (b-a)/n; for(var i=0; i'; + afficherMenu('menuSaveImage'); + + display3D.background = background; + setTimeout(function(){ + display3D.init(); + display3D.draw(); + }, 1); + } + else{ + if(affichage.methode == "canvas"){ + var l = affichage.largeur; + var h = affichage.hauteur; + var c = affichage.couleurFond; + + affichage.largeur = parseInt(document.getElementById("saveWidth").value); + affichage.hauteur = parseInt(document.getElementById("saveHeight").value); + affichage.couleurFond = backgroundSauvegarde; + + var newDiv = document.createElement("div"); + affichage.init(newDiv, userWidth, userHeight); + + outil.init(); + outil.dessinerListe(); + affichage.ctx.drawImage(outil.canvas,0,0); + + var dataURL; + if(document.getElementById("selectSaveType").value == "jpg"){ + dataURL = affichage.canvas.toDataURL("image/jpeg"); + } + else{ + dataURL = affichage.canvas.toDataURL(); + } + document.getElementById("saveImageContent").innerHTML = ''; + afficherMenu('menuSaveImage'); + + affichage.largeur = l; + affichage.hauteur = h; + affichage.couleurFond = c; + affichage.init(); + outil.init(); + } + else if(affichage.methode == "svg"){ + window.open("JavaScript/AffichageSVG.svg"); + } + } +} diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/ParametricFunction.js b/resources/library/applications/GraphMe.wgt/JavaScript/ParametricFunction.js new file mode 100644 index 00000000..30ed4271 --- /dev/null +++ b/resources/library/applications/GraphMe.wgt/JavaScript/ParametricFunction.js @@ -0,0 +1,116 @@ + + +function ParametricFunction(fctX, fctY){ + + this.setFct = function(fctX, fctY){ + this.fct = "x(t) = " + fctX + " ; y(t) = " + fctY; + this.fctX = fctX; + this.fctY = fctY; + this.fx = new Function("t", "return "+this.fctX); + this.fy = new Function("t", "return "+this.fctY); + } + + if(fctX && fctY){ + this.setFct(fctX, fctY); + } + this.couleur = fct.couleur; + this.width = document.getElementById("inputTaille").value; + this.startAngle = 0; + this.endAngle = 2*Math.PI; + this.from = "0"; + this.to = "2*pi"; + this.style = document.getElementById("selectStyle").value; + + this.getX = function(t){ + return this.fx(t); + }; + + this.getY = function(t){ + return this.fy(t); + }; + + this.set = function(f){ + var fctX = fct.remplacer(fct.verifier(f.fctX)); + var fctY = fct.remplacer(fct.verifier(f.fctY)); + this.setFct(fctX, fctY); + this.couleur = f.couleur; + this.width = f.width; + this.style = f.style; + this.from = f.from; + this.to = f.to; + this.startAngle = eval(fct.remplacer(fct.verifier(f.from))); + this.endAngle = eval(fct.remplacer(fct.verifier(f.to))); + return this; + }; + + this.get = function(){ + var f = {}; + f.type = "parametric"; + f.fctX = this.fctX; + f.fctY = this.fctY; + f.couleur = this.couleur; + f.width = this.width; + f.style = this.style; + f.from = this.from; + f.to = this.to; + return f; + }; + + this.readableText = function(){ + return "x(t) = " + this.fctX + "; y(t) = " + this.fctY; + }; + + this.setStartEnd = function(start, end){ + if(start > end){ + var tmp = start; + start = end; + end = start; + } + this.startAngle = start; + this.endAngle = end; + }; + + this.plot = function(ctx, precision, affichage){ + if(this.style == "points"){ + precision *= 2; + } + + ctx.beginPath(); + ctx.lineWidth = this.width; + ctx.strokeStyle = this.couleur; + ctx.fillStyle = this.couleur; + notDefined = true; + for(var t = this.startAngle; t <= this.endAngle; t+=precision){ + var x = this.fx(t); + var y = this.fy(t); + if(!isNaN(x) && !isNaN(y)){ + // Transform coordinates + var pointX = (x - affichage.xGauche) * affichage.multX; + var pointY = affichage.hauteur - (y - affichage.yBas) * affichage.multY; + + // Draw point + if(notDefined){ + notDefined = false; + ctx.moveTo(pointX, pointY); + } + else{ + if(this.style == "continu"){ + ctx.lineTo(pointX, pointY); + } + else if(this.style == "points"){ + ctx.beginPath(); + ctx.arc(pointX, pointY, this.width, 0, 2*Math.PI, true); + ctx.fill(); + } + else{ + ctx.lineTo(pointX, pointY); + notDefined = true; + } + } + } + } + if(this.style != "points"){ + ctx.stroke(); + } + }; +} diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/PolarFunction.js b/resources/library/applications/GraphMe.wgt/JavaScript/PolarFunction.js new file mode 100644 index 00000000..52dd7e79 --- /dev/null +++ b/resources/library/applications/GraphMe.wgt/JavaScript/PolarFunction.js @@ -0,0 +1,112 @@ + +function PolarFunction(txtFct){ + + this.setFct = function(txt){ + this.fct = txt; + this.f = new Function("t", "return "+this.fct); + }; + + if(txtFct){ + this.setFct(txtFct); + } + this.couleur = fct.couleur; + this.width = document.getElementById("inputTaille").value; + this.startAngle = 0; + this.endAngle = 2*Math.PI; + this.from = "0"; + this.to = "2*pi"; + this.style = document.getElementById("selectStyle").value; + + this.getX = function(t){ + var r = this.f(t); + return r * Math.cos(t); + }; + + this.getY = function(t){ + var r = this.f(t); + return r * Math.sin(t); + }; + + this.set = function(f){ + this.setFct(fct.remplacer(fct.verifier(f.fct))); + this.couleur = f.couleur; + this.width = f.width; + this.style = f.style; + this.from = f.from; + this.to = f.to; + this.startAngle = eval(fct.remplacer(fct.verifier(f.from))); + this.endAngle = eval(fct.remplacer(fct.verifier(f.to))); + return this; + }; + + this.get = function(){ + var f = {}; + f.type = "polar"; + f.fct = this.fct; + f.couleur = this.couleur; + f.width = this.width; + f.style = this.style; + f.from = this.from; + f.to = this.to; + return f; + }; + + this.readableText = function(){ + return "r(t) = " + this.fct; + }; + + this.setStartEnd = function(start, end){ + if(start > end){ + var tmp = start; + start = end; + end = start; + } + this.startAngle = start; + this.endAngle = end; + }; + + this.plot = function(ctx, precision, affichage){ + if(this.style == "points"){ + precision *= 2; + } + + ctx.beginPath(); + ctx.lineWidth = this.width; + ctx.strokeStyle = this.couleur; + ctx.fillStyle = this.couleur; + notDefined = true; + for(var t = this.startAngle; t <= this.endAngle; t+=precision){ + var r = this.f(t); + if(!isNaN(r)){ + // Transform coordinates + var x = r * Math.cos(t); + var y = r * Math.sin(t); + var pointX = (x - affichage.xGauche) * affichage.multX; + var pointY = affichage.hauteur - (y - affichage.yBas) * affichage.multY; + + // Draw point + if(notDefined){ + notDefined = false; + ctx.moveTo(pointX, pointY); + } + else{ + if(this.style == "continu"){ + ctx.lineTo(pointX, pointY); + } + else if(this.style == "points"){ + ctx.beginPath(); + ctx.arc(pointX, pointY, this.width, 0, 2*Math.PI, true); + ctx.fill(); + } + else{ + ctx.lineTo(pointX, pointY); + notDefined = true; + } + } + } + } + if(this.style != "points"){ + ctx.stroke(); + } + }; +} diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/Sauvegardes.js b/resources/library/applications/GraphMe.wgt/JavaScript/Sauvegardes.js index 91b3514a..54b3829d 100644 --- a/resources/library/applications/GraphMe.wgt/JavaScript/Sauvegardes.js +++ b/resources/library/applications/GraphMe.wgt/JavaScript/Sauvegardes.js @@ -1,4 +1,6 @@ -var listeOptions = ["theme","precision","decalageX","decalageY","epaisseur","grille","axes","echelle","zoom","methode","methode3D","precision3D","maj"]; +// Fonctions permettant de sauvegarder les options + +var optionsLoaded = false; function setCookie(nom,valeur){ var jours = 545; // Durée de validité des cookies @@ -31,89 +33,74 @@ function delCookie(nom){ } function saveOptions(){ - setCookie("theme",document.getElementById("selectTheme").value); - setCookie("precision",document.getElementById("inputPrecision").value); - setCookie("decalageX",document.getElementById("inputDecalageX").value); - setCookie("decalageY",document.getElementById("inputDecalageY").value); - setCookie("epaisseur",document.getElementById("inputTaille").value); - setCookie("grille",document.getElementById("checkGrille").checked); - setCookie("axes",document.getElementById("checkAxes").checked); - setCookie("echelle",document.getElementById("checkEchelle").checked); - setCookie("zoom",document.getElementById("zoomDefaut").value); - setCookie("methode",document.getElementById("selectMethodeAffichage").value); - setCookie("methode3D",document.getElementById("selectAffichage3D").value); - setCookie("precision3D",document.getElementById("inputPrecision3D").value); - setCookie("maj",document.getElementById("checkMaJ").checked); - document.getElementById("infoSauvegarde").style.display = "block" + if(!optionsLoaded){ + return; + } + var state = JSON.stringify(widget.getState()); + if(window.sankore){ + sankore.setPreference("state", state); + } + else if(navigator.cookieEnabled){ + setCookie("state", state); + } } function loadOptions(){ - if(navigator.cookieEnabled){ - if(checkOptions()){ - document.getElementById("selectTheme").value = getCookie("theme"); - changerTheme(document.getElementById("selectTheme").value); - document.getElementById("inputPrecision").value = getCookie("precision"); - document.getElementById("inputDecalageX").value = getCookie("decalageX"); - document.getElementById("inputDecalageY").value = getCookie("decalageY"); - document.getElementById("inputTaille").value = getCookie("epaisseur"); - if(getCookie("grille")=="true"){ - document.getElementById("checkGrille").checked = true; - } - else{ - document.getElementById("checkGrille").checked = false; - } - if(getCookie("axes")=="true"){ - document.getElementById("checkAxes").checked = true; - } - else{ - document.getElementById("checkAxes").checked = false; - } - if(getCookie("echelle")=="true"){ - document.getElementById("checkEchelle").checked = true; - } - else{ - document.getElementById("checkEchelle").checked = false; - } - document.getElementById("zoomDefaut").value = getCookie("zoom"); - document.getElementById("selectMethodeAffichage").value = getCookie("methode"); - document.getElementById("selectAffichage3D").value = getCookie("methode3D"); - document.getElementById("inputPrecision3D").value = getCookie("precision3D"); - if(getCookie("maj")=="true"){ - document.getElementById("checkMaJ").checked = true; - } - else{ - document.getElementById("checkMaJ").checked = false; - } - actualiserGraph(); - } - else{ - if(document.cookie!=""){ - alert("It's can't be downloaded ..."); - } - } + var state; + if(window.sankore){ + state = sankore.preference("state", null); + } + else if(navigator.cookieEnabled){ + state = getCookie("state"); + } + if(!state){ + optionsLoaded = true; + return; } - else{ - document.getElementById("cacheCookies").style.display = "block"; + var stateObject = JSON.parse(state); + var goodState = widget.getState(); + if(!checkState(stateObject, goodState)){ + loadOptionsFailed(); + } + try{ + widget.setState(stateObject); + optionsLoaded = true; + } + catch(e){ + loadOptionsFailed(); } } -function delOptions(){ - var i; - for(i=0; i 0){ + affichage.zoom(1.25); + } + else{ + affichage.zoom(0.8); + } + } + }, + dblClick : function(event){ + if(event.ctrlKey){ + affichage.zoom(1.25) + display3D.zoom(1.25) + } + else{ + affichage.zoom(0.8) + display3D.zoom(0.8) + } + } +} + +var ctxMenu = { + id : "ctxMenu", + ouvert : false, + + ouvrir : function(){ + if(!fonction3D){ + ctxMenu.ouvert = true; + + var element = document.getElementById("ctxMenu"); + var x = souris.xInit; + var y = souris.yInit; + // var x = 300; + // var y = 300; + element.style.display = "block"; + element.style.left = (x+1)+"px"; + element.style.top = (y+1)+"px"; + + // Désactive le menu du navigateur + return false; + } + }, + + fermer : function(){ + ctxMenu.ouvert = false; + + var element = document.getElementById("ctxMenu"); + element.style.display = "none"; + } +} + diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/Utils.js b/resources/library/applications/GraphMe.wgt/JavaScript/Utils.js new file mode 100644 index 00000000..f7dcbf7c --- /dev/null +++ b/resources/library/applications/GraphMe.wgt/JavaScript/Utils.js @@ -0,0 +1,228 @@ + +// Lance la procédure pour dessiner la fonction qui se trouve dans l'input en haut du widget. +// Permet aussi d'actualiser le graphique. +function actualiserGraph(){ + affichage.calculer(); +} + +// Retourne l'index du dernier endroit où se trouve listCharacter dans une chaîne de caractère. +String.prototype.getLastIndexOf = function(listCharacter, minPos, maxPos){ + var count = 0; + var parenthese = false; + if(!maxPos){ + maxPos = this.length; + } + for(var i=maxPos; i>=minPos; i--){ + if(this.charAt(i) == ")"){ + count++; + parenthese = true; + } + else if(this.charAt(i) == "("){ + count--; + } +// window.console.log(this.charAt(i)+" ; "+count); + for(var j=0; j0){ + return 1; + } + else{ + return undefined; + } +} + +function round(valeur){ + return Math.round(valeur); +} +function ceil(valeur){ + return Math.ceil(valeur); +} +function floor(valeur){ + return Math.floor(valeur); +} +function random(){ + return Math.random(); +} diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/Widget.js b/resources/library/applications/GraphMe.wgt/JavaScript/Widget.js new file mode 100644 index 00000000..100d109a --- /dev/null +++ b/resources/library/applications/GraphMe.wgt/JavaScript/Widget.js @@ -0,0 +1,186 @@ +var listeServeurs = [ + 'http://yannick.vessaz.net/GraphMe/GraphMe.wgt/' + /*'http://gyb.educanet2.ch/tm-widgets/yannick/GraphMe.wgt/'*/ +]; + +var widget = { + init: function(){ +// try{ + document.getElementById('inputRapide').value = ""; + document.getElementById('selectTheme').value = "darkblue"; + affichage.setOptions(); + document.getElementById('zoomDefaut').value = "3.7"; + document.getElementById('functionType').value = "cartesian"; + document.getElementById('inputTaille').value = "3"; + document.getElementById('checkDerivee1').checked = false; + document.getElementById('checkDerivee2').checked = false; + document.getElementById('checkPrimitive1').checked = false; + document.getElementById('checkAire').checked = false; + document.getElementById('selectStyle').value = "continu"; + document.getElementById('input3D').value = ""; + document.getElementById('inputPrecision3D').value = "0.2"; + document.getElementById('selectAffichage3D').value = "surfaces"; + document.getElementById('selectRouge3D').value = "plus"; + document.getElementById('selectVert3D').value = "moins"; + document.getElementById('selectBleu3D').value = "tout"; + document.getElementById('couleur3Dgenerale').value = "0"; + + affichage.init(); + outil.init(); + editorPreview.init(); + display3D.checkCouleurs3D(); + loadOptions(); + + if(!fonction3D){ + if(fct.list.length == 0){ + this.displayStartInput(); + } + else if(!window.sankore){ + this.displayFunctionsHelp(); + } + } +// } +// catch(err){ +// alert(err+'\n'+err.stack); +// } + }, + + displayStartInput: function(){ + document.getElementById('divInputRapide').style.display = "block"; + var textEnterFunction = "Enter a cartesian function"; + try{ + textEnterFunction = languages.getText("enterFunction"); + } + catch(e){} + var textNeedHelp = "Need help ?"; + try{ + textNeedHelp = languages.getText("needHelp"); + } + catch(e){} + + var text = textEnterFunction + '. '+ textNeedHelp +'' + + message.ajouter(275,75,text); + setTimeout(message.supprimer, 15000); + + document.getElementById('inputRapide').focus(); + }, + + addStartFunction: function(){ + message.supprimer(); + document.getElementById('divInputRapide').style.display = 'none'; + document.getElementById('input').value = document.getElementById('inputRapide').value; + fct.ajouter(); + this.displayFunctionsHelp(); + }, + + displayFunctionsHelp: function(){ + var text = "Click here to modify the functions or add a new function."; + try{ + text = languages.getText("clickHereToModify"); + } + catch(e){} + setTimeout(function(){message.ajouter(220,35,text)}, 50); + setTimeout(message.supprimer, 5000); + }, + + resize: function(){ + if(fonction3D){ + display3D.init(); + display3D.draw(); + } + else{ + affichage.init(); + } + outil.init(); + }, + + reset: function(){ + delOptions(); + window.location.reload(); + }, + + getState: function(){ + var state = { + theme: document.getElementById("selectTheme").value, + displayMethod: document.getElementById("selectMethodeAffichage").value, + defaultZoom: document.getElementById("zoomDefaut").value, + displayGrid: document.getElementById("checkGrille").checked, + displayAxes: document.getElementById("checkAxes").checked, + displayScale: document.getElementById("checkEchelle").checked, + accuracy: document.getElementById("inputPrecision").value, + improvedAccuracy: document.getElementById("checkPrecision").checked, + thickness: document.getElementById("inputTaille").value, + lineStyle: document.getElementById("selectStyle").value, + derivative1: document.getElementById("checkDerivee1").checked, + derivative2: document.getElementById("checkDerivee2").checked, + primitive: document.getElementById("checkPrimitive1").checked, + drawArea: document.getElementById("checkAire").checked, + lineStyle3D: document.getElementById("selectAffichage3D").value, + accuracy3D: document.getElementById("inputPrecision3D").value, + plotHistory: historique.get(), + functions: fct.get(), + display3D: fonction3D, + input3D: document.getElementById('input3D').value, + currentTool: outil.actuel + }; + if(window.sankore){ + state.fullScreen = pleinEcran; + state.displayLeft = affichage.xGauche; + state.displayRight = affichage.xDroite; + state.displayUp = affichage.yHaut; + state.displayDown = affichage.yBas; + } + return state; + }, + + setState: function(state){ + document.getElementById("selectTheme").value = state.theme; + document.getElementById("selectMethodeAffichage").value = state.displayMethod; + document.getElementById("zoomDefaut").value = state.defaultZoom; + document.getElementById("checkGrille").checked = state.displayGrid; + document.getElementById("checkAxes").checked = state.displayAxes; + document.getElementById("checkEchelle").checked = state.displayScale; + document.getElementById("inputPrecision").value = state.accuracy; + document.getElementById("checkPrecision").checked = state.improvedAccuracy; + document.getElementById("inputTaille").value = state.thickness; + document.getElementById("selectStyle").value = state.lineStyle; + document.getElementById("checkDerivee1").checked = state.derivative1; + document.getElementById("checkDerivee2").checked = state.derivative2; + document.getElementById("checkPrimitive1").checked = state.primitive; + document.getElementById("checkAire").checked = state.drawArea; + document.getElementById("selectAffichage3D").value = state.lineStyle3D; + document.getElementById("inputPrecision3D").value = state.accuracy3D; + historique.set(state.plotHistory); + fct.set(state.functions); + document.getElementById('input3D').value = state.input3D || ""; + if(state.display3D){ + activer3D(); + } + + if(window.sankore){ + if(state.fullScreen){ + agrandirAffichage(); + } + affichage.xGauche = state.displayLeft; + affichage.xDroite = state.displayRight; + affichage.yHaut = state.displayUp; + affichage.yBas = state.displayDown; + affichage.setBornes(); + } + + affichage.getOptions(); + if(!window.sankore){ + affichage.initZoom2(document.getElementById('zoomDefaut').value); + } + changerTheme(document.getElementById("selectTheme").value); + if(state.display3D){ + display3D.draw(); + } + else{ + affichage.dessiner(); + } + + outil.choisir(state.currentTool); + } +}; diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/jquery-1.3.2.min.js b/resources/library/applications/GraphMe.wgt/JavaScript/jquery-1.3.2.min.js deleted file mode 100644 index b1ae21d8..00000000 --- a/resources/library/applications/GraphMe.wgt/JavaScript/jquery-1.3.2.min.js +++ /dev/null @@ -1,19 +0,0 @@ -/* - * jQuery JavaScript Library v1.3.2 - * http://jquery.com/ - * - * Copyright (c) 2009 John Resig - * Dual licensed under the MIT and GPL licenses. - * http://docs.jquery.com/License - * - * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) - * Revision: 6246 - */ -(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
","
"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); -/* - * Sizzle CSS Selector Engine - v0.9.3 - * Copyright 2009, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); \ No newline at end of file diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/jquery.disable.text.select.js b/resources/library/applications/GraphMe.wgt/JavaScript/jquery.disable.text.select.js deleted file mode 100644 index 2e06f673..00000000 --- a/resources/library/applications/GraphMe.wgt/JavaScript/jquery.disable.text.select.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * .disableTextSelect - Disable Text Select Plugin - * - * Version: 1.1 - * Updated: 2007-11-28 - * - * Used to stop users from selecting text - * - * Copyright (c) 2007 James Dempster (letssurf@gmail.com, http://www.jdempster.com/category/jquery/disabletextselect/) - * - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - **/ - -/** - * Requirements: - * - jQuery (John Resig, http://www.jquery.com/) - **/ -(function($) { - if ($.browser.mozilla) { - $.fn.disableTextSelect = function() { - return this.each(function() { - $(this).css({ - 'MozUserSelect' : 'none' - }); - }); - }; - $.fn.enableTextSelect = function() { - return this.each(function() { - $(this).css({ - 'MozUserSelect' : '' - }); - }); - }; - } else if ($.browser.msie) { - $.fn.disableTextSelect = function() { - return this.each(function() { - $(this).bind('selectstart.disableTextSelect', function() { - return false; - }); - }); - }; - $.fn.enableTextSelect = function() { - return this.each(function() { - $(this).unbind('selectstart.disableTextSelect'); - }); - }; - } else { - $.fn.disableTextSelect = function() { - return this.each(function() { - $(this).bind('mousedown.disableTextSelect', function() { - return false; - }); - }); - }; - $.fn.enableTextSelect = function() { - return this.each(function() { - $(this).unbind('mousedown.disableTextSelect'); - }); - }; - } -})(jQuery); \ No newline at end of file diff --git a/resources/library/applications/GraphMe.wgt/JavaScript/languages.js b/resources/library/applications/GraphMe.wgt/JavaScript/languages.js deleted file mode 100644 index 06a4fd70..00000000 --- a/resources/library/applications/GraphMe.wgt/JavaScript/languages.js +++ /dev/null @@ -1,675 +0,0 @@ -var sankoreLang = { - "en":{ - "fnc":"Function: ", - "display":"Display", - "x_axis":"X-axis", - "y_axis":"Y-axis", - "zoom":"Zoom", - "color":"Color:", - "menus":"Menu", - "tools":"Tools", - "options":"Options", - "help":"Help", - "about":"About", - "mouse_events":"Mouse events:", - "moving":"Moving", - "tangente":"Tangente", - "point":"Point", - "choosing_color":"Choosing the color:", - "value":"Value:", - "saturation":"Saturation:", - "red":"Red:", - "green":"Green:", - "blue":"Blue:", - "opacity":"Opacity:", - "check":"Check", - "derivative":"Derivative:", - "square_under_func":"Square under function:", - "from":"From", - "to":"To", - "calculate":"Calculate", - "draw":"Draw", - "point_calculate":"Calculate the point on the function:", - "estimate":"Estimate", - "analysis_of_func":"Analysis of function:", - "start_to_analysis":"Start to analysis", - "quit":"Quit", - "display_test":"Display the test:", - "test":"Test", - "widget":"Widget", - "widget_options":"Widget options", - "themes_of_widget":"Themes of the widget:", - "black":"Black", - "white":"White", - "control_options":"Control options:", - "save":"Save", - "load":"Load", - "del":"Delete", - "save_a_widget_options":"Save a widget options in cookies or load an options from cookies or delete a registered options.", - "auto_update":"Automatically update when a widget opening.", - "reload_widget":"Reload widget", - "update":"Update", - "the_graphical":"The graphical method displaying:", - "lines":"lines", - "points":"points", - "image":"image", - "zoom_def":"Zoom default:", - "update_zoom":"Update zoom", - "show_grid":"Show grid", - "show_axis":"Show axis", - "scale":"Scale", - "thickness":"Thickness:", - "offset_diagram":"Offset diagram:", - "accuracy_graph":"Accuracy graph:", - "show_the_style":"Show the style:", - "surfaces":"surfaces", - "points":"points", - "reset_display":"Reset display", - "accuracy_func":"Accuracy function:", - "use_the_color":"Use the color:", - "positive_value":"positive value", - "negative_value":"negative value", - "general_value":"general value", - "how_it_work":"How it works", - "this_widget_allow":"This widget allows to draw mathematical function. Enter function in the field in the top part of the widget and press\"Display\"", - "you_can_enter":"You can enter following mathematical functions:", - "basic_operations":"Basic operations", - "plus":"Plus", - "minus":"Minus", - "multi":"Multiplication", - "division":"Division", - "mod":"Mod", - "trigonometric":"Trigonometric functions", - "sine":"Sine", - "cosine":"Cosine", - "tangent":"Tangent", - "cotangent":"Cotangent", - "secant":"Secant", - "cosecant":"Cosecant", - "arc_sine":"Arc sine", - "arc_cosine":"Arc cosine", - "arc_tangent":"Arc tangent", - "arc_cotangent":"Arc cotangent", - "hyperbolic_func":"Hyperbolic functions", - "hyp_sine":"Hyperbolic sine", - "hyp_cosine":"Hyperbolic cosine", - "hyp_tangent":"Hyperbolic tangent", - "hyp_cotangent":"Hyperbolic cotangent", - "hyp_secant":"Hyperbolic secant", - "hyp_cosecant":"Hyperbolic cosecant", - "hyp_arc_sine":"Hyperbolic arc sine", - "hyp_arc_cosine":"Hyperbolic arc cosine", - "hyp_arc_tangent":"Hyperbolic arc tangent", - "hyp_arc_cotangent":"Hyperbolic arc cotangent", - "square_roots_and_degrees":"Square roots and degrees", - "square_root":"Square root", - "degree":"Degree", - "root":"Root", - "variable_x":"Variable x to the power y", - "root_y":"Root y of x", - "exponential":"Exponential and logarithm", - "natural_log":"Natural logarithm", - "decimal_log":"Decimal logarithm", - "abs":"Absolute number value", - "rounding":"Rounding", - "round_nearest":"Rounding to the nearest whole number", - "round_nearest_big":"Rounding to the nearest whole number in a big way", - "round_nearest_small":"Rounding to the nearest whole number the smaller side", - "consts":"Constants", - "available_const":"Also are some constants available:", - "keys":"Keyboard keys", - "moved_left":"Graph will be moved left", - "moved_top":"Graph will be moved top", - "moved_right":"Graph will be moved right", - "moved_botom":"Graph will be moved bottom", - "guide":"User's guide", - "using":"Using", - "examples":"Examples", - "other":"Other", - "you_can_view":"You can view example. Don't forget to set a accuracy in option if it will be necessary.", - "save_graph":"Save graph", - "in_some_browsers":"In some browsers when display method \"Canvas\" used you can save graph by clcking it with right mouse button and selecting \"Save image\". Also you can save 3D-graphs.", - "offset":"Offset", - "if_graph_isnt":"If graph isn't in the right plase (larger than canvas) then can you set necessary parameters graph displaying in settings menu.", - "history":"History", - "current":"Current", - "additional":"Additional", - "left_arrow":"left arrow", - "right_arrow":"right arrow", - "top_arrow":"top arrow", - "bottom_arrow":"bottom arrow", - "or":"or", - "funcs":"Functions", - "widget_is_developed":"Widget is developed by", - "if_you_want_to":"If you want to inform about a bug, make a proposal or just ask some questions. You can contact to me at the following e-mail:", - "if_you_want_to_change":"If you want to change background design then you can contact at following address:", - "set_of_def":"Set of definitions:", - "parity":"Parity:", - "zeros":"Zeros of function:", - "signe":"Sign:", - "asympt":"Asymptotes", - "min":"Min", - "ev":"even", - "unev":"uneven", - "na":"n/a", - "curve_lower":"curve is lower than a AH", - "curve_higher":"curve is higher than a AH", - "max":"Max", - "no_min":"No minimum", - "no_max":"No maximum", - "tool_for":"Tool for analysis of function is not reliable on 100%. Don't forget check results of analysis before use it.", - "ah_left":"AH left:", - "ah_right":"AH right:", - "av":"AV:", - "options_saved":"Options saved!", - "cur_version":"Current version:", - "last_version":"The last on-line version:", - "using_web":"This widget is available to using on web-site:", - "show_saved":"Now parameters will be saved" - }, - "ru":{ - "fnc": "Функция: ", - "display":"Показать", - "x_axis":"ось X", - "y_axis":"ось Y", - "zoom":"Размер", - "color":"Цвет:", - "menus":"Меню", - "tools":"Инструменты", - "options":"Опции", - "help":"Помощь", - "about":"О программе", - "mouse_events":"События мыши:", - "moving":"Движение", - "tangente":"Касательная", - "point":"Точка", - "choosing_color":"Выбор цвета:", - "value":"Значение:", - "saturation":"Насыщенность:", - "red":"Красный:", - "green":"Зеленый:", - "blue":"Голубой:", - "opacity":"Прозрачность:", - "check":"Применить", - "derivative":"Производная:", - "square_under_func":"Область функции:", - "from":"От", - "to":"До", - "calculate":"Посчитать", - "draw":"Зарисовать", - "point_calculate":"Рассчитать точку функции:", - "estimate":"Оценить", - "analysis_of_func":"Анализ функции:", - "start_to_analysis":"Начать анализ", - "quit":"Выйти", - "display_test":"Показать тест:", - "test":"Тест", - "widget":"Виджет", - "widget_options":"Настройки виджета", - "themes_of_widget":"Темы виджета:", - "black":"Черный", - "white":"Белый", - "control_options":"Опции управления:", - "save":"Сохранить", - "load":"Загрузить", - "del":"Удалить", - "save_a_widget_options":"Сохранить или загрузить настройки виджета в/из куки-файлов, или же удалить выбранные опции", - "auto_update":"Автоматическое обновление виджета при загрузке", - "reload_widget":"Перегрузить виджет", - "update":"Обновить", - "the_graphical":"Графический метод отображения:", - "lines":"линии", - "points":"точки", - "image":"изображения", - "zoom_def":"Размер по-умолчанию:", - "update_zoom":"Изменить размер:", - "show_grid":"Показать таблицу", - "show_axis":"Показать оси", - "scale":"Масштаб", - "thickness":"Толщина", - "offset_diagram":"Смещение диаграммы:", - "accuracy_graph":"Точность графика:", - "show_the_style":"Показать стиль:", - "surfaces":"поверхности", - "points":"точки", - "reset_display":"Обновить отображение", - "accuracy_func":"Точность функции:", - "use_the_color":"Использовать цвет:", - "positive_value":"положительное значение", - "negative_value":"отрицательное значение", - "general_value":"основное значение", - "how_it_work":"Как это работает", - "this_widget_allow":"Этот виджет позволяет рисовать математические функции. Введите функцию в верхней части виджета и нажмите \"Показать\"", - "you_can_enter":"Вы можете использовать следующие математические функции:", - "basic_operations":"Основные операции", - "plus":"Сложение", - "minus":"Вычетание", - "multi":"Произведение", - "division":"Частное", - "mod":"Остаток от деления", - "trigonometric":"Тригонометрические функции", - "sine":"Синус", - "cosine":"Косинус", - "tangent":"Тангенс", - "cotangent":"Котангенс", - "secant":"Секанс", - "cosecant":"Косеканс", - "arc_sine":"Арксинус", - "arc_cosine":"Арккосинус", - "arc_tangent":"Арктангенс", - "arc_cotangent":"Арккотангенс", - "hyperbolic_func":"Гиперболические функции", - "hyp_sine":"Гиперболический синус", - "hyp_cosine":"Гиперболический косинус", - "hyp_tangent":"Гиперболический тангенс", - "hyp_cotangent":"Гиперболический котангенс", - "hyp_secant":"Гиперболический секанс", - "hyp_cosecant":"Гиперболический косеканс", - "hyp_arc_sine":"Гиперболический арксинус", - "hyp_arc_cosine":"Гиперболический арккосинус", - "hyp_arc_tangent":"Гиперболический арктангенс", - "hyp_arc_cotangent":"Гиперболический арккотангенс", - "square_roots_and_degrees":"Квардатные корни и степени", - "square_root":"Квадратный корень", - "degree":"Степень", - "root":"Корень", - "variable_x":"Переменная х в степени у", - "root_y":"Корень y степени x", - "exponential":"Экспоненты и логарифмы", - "natural_log":"Натуральный логарифм", - "decimal_log":"Десятичный логарифм", - "abs":"Абсолютное значение числа", - "rounding":"Округление", - "round_nearest":"Округление до ближайшего целого числа", - "round_nearest_big":"Округление до ближайшего целого числа в большую сторону", - "round_nearest_small":"Округление до ближайшего целого числа в меньую сторону", - "consts":"Константы", - "available_const":"Также доступны некоторые константы:", - "keys":"Горячие клавиши", - "moved_left":"График будет сдвинут влево", - "moved_top":"График будет сдвинут вверх", - "moved_right":"График будет сдвинут вправо", - "moved_bottom":"График будет сдвинут вниз", - "guide":"Руководство пользователя", - "using":"Использование", - "examples":"Примеры", - "other":"Другое", - "you_can_view":"Вы можете посмотреть примеры. Не забывайте выставить точность в настройках, если это необходимо.", - "save_graph":"Сохранить график", - "in_some_browsers":"В некоторых браузерах при выборе метода отоюражения \"Canvas\" вы можете сохранить гафик кликом ПКМ на нем и выбором пункта \"Сохранить изображение\". Таким же способом вы можете сохранять 3D-графики.", - "offset":"Смещение", - "if_graph_isnt":"Если график арсположен в неправильном месте (больше, чем холст), то Вы можете выставить необходимые параметры отображения графа в настройках виджета.", - "history":"История", - "current":"Текущие", - "additional":"Дополнительные", - "left_arrow":"стрелка влево", - "right_arrow":"стрелка вправо", - "top_arrow":"стрелка вверх", - "bottom_arrow":"стрелка вниз", - "or":"или", - "funcs":"Функции", - "widget_is_developed":"Виджет разработан ", - "if_you_want_to":"Если вы хотите сообщить о проблеме, внести предложение или задать некоторые вопросы, то можете связаться со мной через электронную почту:", - "if_you_want_to_change":"Если вы хотите изменить дизайн, обращайтесь по адресу:", - "set_of_def":"Набор определений:", - "parity":"Равенство:", - "zeros":"Нули функции:", - "signe":"Знак:", - "asympt":"Ассимптоты", - "min":"Мин", - "ev":"равны", - "unev":"не равны", - "na":"не определено", - "curve_lower":"кривая ниже, чем горизонтальная ассимптота", - "curve_higher":"кривая выше, чем горизонтальная ассимптота", - "max":"Макс", - "no_min":"Нет минимума", - "no_max":"Нет максимума", - "tool_for":"Анализ функции не надежен на 100%. Не забывайте проверить результат анализа перед их использованием.", - "ah_left":"ГА слева:", - "ah_right":"ГА справа:", - "av":"ВА:", - "options_saved":"Настройки сохранены!", - "cur_version":"Текущая версия:", - "last_version":"Последняя он-лайн версия:", - "using_web":"Этот виджет доступен для использования на сайте:", - "show_saved":"Теперь параметры будут сохранены" - }, - "fr":{ - "fnc":"Fonction: ", - "display":"Afficher", - "x_axis":"Axe des X de:", - "y_axis":"Axe des Y de:", - "zoom":"Zoom", - "color":"Couleur:", - "menus":"Menus", - "tools":"Outils", - "options":"Options", - "help":"Aide", - "about":"À propos", - "mouse_events":"Action de la souris:", - "moving":"Déplacement", - "tangente":"Tangente", - "point":"Point", - "choosing_color":"Choix de la couleur:", - "value":"Valeur:", - "saturation":"Saturation:", - "red":"Rouge:", - "green":"Vert:", - "blue":"Bleu:", - "opacity":"Opacité:", - "check":"Valider", - "derivative":"Dessiner la dérivée de la fonction:", - "square_under_func":"Aire sous la fonction:", - "from":"From", - "to":"To", - "calculate":"Calculer", - "draw":"Dessiner", - "point_calculate":"Calculer un point de la fonction:", - "estimate":"Évaluer", - "analysis_of_func":"Analyse de la fonction:", - "start_to_analysis":"Démarrer l'étude", - "quit":"Fermer", - "display_test":"Afficher les tests:", - "test":"Test", - "widget":"Widget", - "widget_options":"Options du widget", - "themes_of_widget":"Thème du widget:", - "black":"Noir", - "white":"Blanc", - "control_options":"Gèrer les options:", - "save":"Sauvegarder", - "load":"Charger", - "del":"Supprimer", - "save_a_widget_options":"Sauvegarder les options du widget dans les cookies, charger les options depuis les cookies ou supprimer les options actuellement enregistrées.", - "auto_update":"Mise à jour automatique à l'ouverture du widget.", - "reload_widget":"Recharger le widget", - "update":"Mise à jour", - "the_graphical":"Méthode d'affichage du graphique:", - "lines":"lignes", - "points":"points", - "image":"image", - "zoom_def":"Zoom par défaut:", - "update_zoom":"Réinitialiser le zoom", - "show_grid":"Afficher la grille", - "show_axis":"Afficher les axes ", - "scale":"Afficher l'échelle ", - "thickness":"Épaisseur de la fonction:", - "offset_diagram":"Décalage du graphique:", - "accuracy_graph":"Précision des calculs du graphique:", - "show_the_style":"Style d'affichage:", - "surfaces":"surfaces", - "points":"points", - "reset_display":"Réinitialiser l'affichage", - "accuracy_func":"Précision de la fonction:", - "use_the_color":"Utilisation des couleurs:", - "positive_value":"valeur positive", - "negative_value":"valeur négative", - "general_value":"valeur générale", - "how_it_work":"Fonctionnement", - "this_widget_allow":"Ce widget vous permet de dessiner des fonctions mathématiques. Entrez une fonction dans le champ en haut du widget et cliquez sur le bouton \"Afficher\".", - "you_can_enter":"Vous pouvez saisir les fonctions mathématiques suivantes:", - "basic_operations":"Les opérations de base", - "plus":"Addition", - "minus":"Soustraction", - "multi":"Multiplication", - "division":"Division", - "mod":"Modulo", - "trigonometric":"Les fonctions trigonométriques", - "sine":"Sinus", - "cosine":"Cosinus", - "tangent":"Tangente", - "cotangent":"Cotangente", - "secant":"Secante", - "cosecant":"Cosecante", - "arc_sine":"Arcsinus", - "arc_cosine":"Arccosinus", - "arc_tangent":"Arctangente", - "arc_cotangent":"Arccotangente", - "hyperbolic_func":"Les fonctions hyperboliques", - "hyp_sine":"Sinus hyp", - "hyp_cosine":"Cosinus hyp", - "hyp_tangent":"Tangente hyp", - "hyp_cotangent":"Cotangente hyp", - "hyp_secant":"Secante hyp", - "hyp_cosecant":"Cosecante hyp", - "hyp_arc_sine":"Arcsinus hyp", - "hyp_arc_cosine":"Arccosinus hyp", - "hyp_arc_tangent":"Arctangente hyp", - "hyp_arc_cotangent":"Arccotangente hyp", - "square_roots_and_degrees":"Les racines et les puissances", - "square_root":"Racine carrée", - "degree":"Puissances", - "root":"Racines", - "variable_x":"Élève x à une puissance y", - "root_y":"Racine y d'un nombre x", - "exponential":"Les exponentielles et logarithmes", - "natural_log":"logarithme naturel", - "decimal_log":"logarithme de base", - "abs":"La valeur absolue d'un nombre", - "rounding":"Les arrondis", - "round_nearest":"arrondit à l'entier le plus proche", - "round_nearest_big":"arrondit à l'entier supérieur", - "round_nearest_small":"arrondit à l'entier inférieur", - "consts":"Constantes", - "available_const":"Quelques constantes sont aussi disponibles:", - "keys":"Touches clavier", - "moved_left":"déplacer le graphique à gauche", - "moved_top":"déplacer le graphique en haut", - "moved_right":"déplacer le graphique à droite", - "moved_botom":"déplacer le graphique en bas", - "guide":"Guide d'utilisation", - "using":"Utilisation", - "examples":"Exemples", - "other":"Autres", - "you_can_view":"Vous pouvez cliquer sur un exemple pour l'afficher. Pensez à ajuster la précision du graphique dans les options si nécessaire", - "save_graph":"Enregistrer le graphique", - "in_some_browsers":"Dans certains navigateurs, lorsque vous utilisez la méthode d'affichage \"Canvas\", vous pouvez sauvegarder le graphique en cliquant avec le bouton de droite de la souris sur celui-ci et en séléctionnant \"Enregistrer l'image\". Vous pouvez aussi sauvegarder le graphique 3D. ", - "offset":"Décalage", - "if_graph_isnt":"Si le graphique n'est pas à la bonne place (il dépasse de la zone prévue), ajustez le \"décalage du graphique\" dans le menu des options. Pour Konqueror, il faut utiliser un décalage de x=122 et y=48.", - "history":"Historique", - "current":"Actuelle", - "additional":"Supplémentaires", - "left_arrow":"flèche gauche", - "right_arrow":"flèche droite", - "top_arrow":"flèche haut", - "bottom_arrow":"flèche bas", - "or":"ou", - "funcs":"Fonction", - "widget_is_developed":"Widget réalisé par", - "if_you_want_to":"Si vous voulez rapporter un bug, avez une suggestion par rapport au widget ou voulez simplement poser une question, merci de me contacter par:", - "if_you_want_to_change":"Les images d'arrière-plan du widget on été tirées des thèmes du bureau \"plasma-desktop\" de l'environnement:", - "set_of_def":"Ensemble de définition:", - "parity":"Parité:", - "zeros":"Zéros de la fonction:", - "signe":"Signe:", - "asympt":"Asymptotes", - "min":"Min", - "ev":"paire", - "unev":"impaire", - "na":"aucune", - "curve_lower":"courbe au-dessus de l'AH", - "curve_higher":"courbe au-dessous de l'AH", - "max":"Max", - "no_min":"Aucun minimum", - "no_max":"Aucun maximum", - "tool_for":"L'outil permettant d'étudier les fonctions n'est pas fiable à 100%. Pensez à vérifier les résultats de l'étude avant d'en faire une quelconque utilisation.", - "ah_left":"AH gauche:", - "ah_right":"AH droite:", - "av":"AV:", - "options_saved":"Options sauvegardées!", - "cur_version":"Version en cours d'utilisation:", - "last_version":"Dernière version disponible en ligne:", - "using_web":"Ce widget est également utilisable dans un navigateur internet sur le site:", - "show_saved":"Options actuellement sauvegardées" - }, - "sk":{ - "fnc":"Funkcia: ", - "display":"Zobraziť", - "x_axis":"Os x", - "y_axis":"Os y", - "zoom":"Lupa", - "color":"Farba:", - "menus":"Menu", - "tools":"Nástroje", - "options":"Možnosti", - "help":"Pomoc", - "about":"O aplikácii", - "mouse_events":"Činnosti s myšou:", - "moving":"Presúvanie", - "tangente":"Dotyčnica", - "point":"Bod", - "choosing_color":"Výber farby:", - "value":"Hodnota:", - "saturation":"Nasýtenie:", - "red":"Červená:", - "green":"Zelená:", - "blue":"Modrá:", - "opacity":"Priehľadnosť:", - "check":"Vyskúšať", - "derivative":"Derivovaná funkcia:", - "square_under_func":"Štvorec pod funkciou:", - "from":"Od", - "to":"Do", - "calculate":"Vypočítať", - "draw":"Vyznačiť", - "point_calculate":"Vypočítať bod podľa funkcie:", - "estimate":"Odhadnúť", - "analysis_of_func":"Analýza funkcie:", - "start_to_analysis":"Spustiť analýzu", - "quit":"Koniec", - "display_test":"Zobraziť test:", - "test":"Test", - "widget":"Widget", - "widget_options":"Možnosti widgetu", - "themes_of_widget":"Farba widgetu:", - "black":"čierna", - "white":"biela", - "control_options":"Možnosti ovládania:", - "save":"Uložiť", - "load":"Spustiť", - "del":"Vymazať", - "save_a_widget_options":"Uloží nastavenia widgetu do cookies alebo spustí nastavenia z cookies alebo vymaže uložené nastavenia.", - "auto_update":"Automaticky aktualizovať pri otvorení widgetu.", - "reload_widget":"Znova spustiť widget", - "update":"Aktualizovať", - "the_graphical":"Spôsob grafického zobrazenia: ", - "lines":"čiary", - "points":"body", - "image":"obrázok", - "zoom_def":"Predvolená lupa:", - "update_zoom":"Aktualizovať lupu", - "show_grid":"Zobraziť mriežku", - "show_axis":"Zobraziť os", - "scale":"Mierka", - "thickness":"Hrúbka:", - "offset_diagram":"Posunúť diagram:", - "accuracy_graph":"Presnosť grafu:", - "show_the_style":"Zobraziť štýl:", - "surfaces":"plocha", - "points":"body", - "reset_display":"Obnoviť zobrazenie", - "accuracy_func":"Presnosť funkcie:", - "use_the_color":"Použiť farbu:", - "positive_value":"positívna hodnota", - "negative_value":"negatívna hodnota", - "general_value":"všeobecná hodnota", - "how_it_work":"Ako to funguje", - "this_widget_allow":"Tento widget vám umožňuje nakresliť graf matematickej funkcie. Zadajte funkciu do poľa v hornej časti a stlačte tlačidlo\"Zobraziť\"", - "you_can_enter":"Môžete zadať tieto matematické funkcie:", - "basic_operations":"Základné operácie", - "plus":"plus", - "minus":"mínus", - "multi":"násobenie", - "division":"delenie", - "mod":"mod", - "trigonometric":"Trigonometrické funkcie", - "sine":"sínus", - "cosine":"kosínus", - "tangent":"tangens", - "cotangent":"kotangens", - "secant":"sekant", - "cosecant":"kosekant", - "arc_sine":"arkus sínus", - "arc_cosine":"arkus kosínus", - "arc_tangent":"arkus tangens", - "arc_cotangent":"arkus kotangens", - "hyperbolic_func":"Hyperbolické funkcie", - "hyp_sine":"hyperbolický sínus", - "hyp_cosine":"hyperbolický kosínus", - "hyp_tangent":"hyperbolický tangens", - "hyp_cotangent":"hyperbolický kotangens", - "hyp_secant":"hyperbolický sekant", - "hyp_cosecant":"hyperbolický kosecant", - "hyp_arc_sine":"hyperbolický arkus sínus", - "hyp_arc_cosine":"hyperbolický arkus kosínus", - "hyp_arc_tangent":"hyperbolický arkus tangens", - "hyp_arc_cotangent":"hyperbolický arkus kotangens", - "square_roots_and_degrees":"Mocminy a odmocniny", - "square_root":"Druhá odmocnina", - "degree":"Mocniny", - "root":"Odmocniny", - "variable_x":"hodnota x umocnená na y", - "root_y":"Odmocnina y z čísla x", - "exponential":"Exponenciálne funkcie a logaritmy", - "natural_log":"Prirodzený logaritmus", - "decimal_log":"Dekadický logaritmus", - "abs":"Absolútna hodnota čísla", - "rounding":"Zaokrúhľovanie", - "round_nearest":"zaokrúhlenie na najbližšie celé číslo", - "round_nearest_big":"zaokrúhlenie na najbližšie väčšie celé číslo", - "round_nearest_small":"zaokrúhlenie na najbližšie menšie celé číslo", - "consts":"Konštanty", - "available_const":"K dispozíci je aj niekoľko konštánt:", - "keys":"Klávesové skratky", - "moved_left":"graf sa posunie doľava", - "moved_top":"graf sa posunie nahor", - "moved_right":"graf sa posunie doprava", - "moved_botom":"graf sa posunie nadol", - "guide":"Používateľská príručka", - "using":"Použitie", - "examples":"Príklady", - "other":"Iné", - "you_can_view":"Tento príklad si môžete zobraziť. Nezabudnite v možnostiach nastaviť presnosť, ak to bude potrebné.", - "save_graph":"Uloženie grafu", - "in_some_browsers":"V niektorých prehliadačoch pri použití metódy zobrazenia \"Plátno\" môžete uložiť graf tak, že naň kliknete pravým tlačidlom myši a vyberiete možnosť \"Uložiť obrázok\". Môžete ukladať aj 3D-grafy.", - "offset":"Posun", - "if_graph_isnt":"Ak graf nie je na správnom mieste (je väčší ako plátno), môžete nastaviť potrebné nastavenia v menu.", - "history":"História", - "current":"Súčasná", - "additional":"Ďalšia", - "left_arrow":"šípka doľava", - "right_arrow":"šípka doprava", - "top_arrow":"šípka nahor", - "bottom_arrow":"šípka nadol", - "or":"alebo", - "funcs":"Funkcie", - "widget_is_developed":"Widget programuje", - "if_you_want_to":"Ak nás chcete informovať o chybe, napísať nám podnet alebo sa len niečo opýtať, môžete napísať na tento e-mail:", - "if_you_want_to_change":"Ak chcete zmeniť dizajn pozadia, potom môžete napísať na túto adresu:", - "set_of_def":"Definičný obor:", - "parity":"Párnosť:", - "zeros":"Núl vo funcii:", - "signe":"Znamienko:", - "asympt":"Asymptoty", - "min":"Min", - "ev":"párna", - "unev":"nepárna", - "na":"–", - "curve_lower":"Krivka je nižšie ako HA", - "curve_higher":"Krivka je vyššie ako HA", - "max":"Max", - "no_min":"Žiadne minimum", - "no_max":"Žiadne maximum", - "tool_for":"Nástroj na analýzu funkcie nie je spoľahlivý na 100 %. Nezabudnite si skontrolovať výsledky analýzy predtým, ako ich použijete.", - "ah_left":"HA vľavo:", - "ah_right":"HA vpravo:", - "av":"AV:", - "options_saved":"Nastavenia uložené!", - "cur_version":"Súčasná verzia:", - "last_version":"Najnovšia on-line verzia:", - "using_web":"Tento widget je dostupný na používanie na stránke:", - "show_saved":"Teraz budú parametre uložené" - } - -}; diff --git a/resources/library/applications/GraphMe.wgt/Style/ColorPicker.css b/resources/library/applications/GraphMe.wgt/Style/ColorPicker.css new file mode 100644 index 00000000..8ec2103b --- /dev/null +++ b/resources/library/applications/GraphMe.wgt/Style/ColorPicker.css @@ -0,0 +1,56 @@ +/* ColorPicker */ +#canvasSV{ + width: 250px; + height: 250px; + border: 1px solid black; +} +#canvasT{ + width: 25px; + height: 250px; + border: 1px solid black; + position: relative; + left: 10px; +} +#canvasO{ + width: 290px; + height: 25px; + position: relative; + top: 5px; +} + +/* Valeurs de la couleur dans le ColorPicker */ +#colorValues{ + position: relative; + left: 10px; + font-size: 11px; + float: right; +} +#colorValues td{ + vertical-align: middle; + text-align: right; +} + +/* Aperçus dans le ColorPicker */ +#apercuCouleur{ + position: absolute; + right: 20px; + bottom: 40px; + width: 40px; + height: 30px; + border: 1px white solid; + border-radius: 5px; + -webkit-border-radius: 5px; + background-color: rgb(193,255,0); +} + +#apercuCouleur2{ + position: absolute; + right: 65px; + bottom: 40px; + width: 40px; + height: 30px; + border: 1px white solid; + border-radius: 5px; + -webkit-border-radius: 5px; + background-color: rgb(193,255,0); +} diff --git a/resources/library/applications/GraphMe.wgt/Style/Haut.css b/resources/library/applications/GraphMe.wgt/Style/Haut.css new file mode 100644 index 00000000..329a839f --- /dev/null +++ b/resources/library/applications/GraphMe.wgt/Style/Haut.css @@ -0,0 +1,341 @@ +/* Boutons qui sont en haut du widget */ +#haut{ + position: absolute; + top: 0px; + left: 8px; + right: 0px; + height: 30px; + z-index: 2; + pointer-events: none; +} + +#haut > *{ + pointer-events: auto; +} + +/* Onglets */ +.ongletHaut{ +/* background-color: rgba(255, 255, 255, 0.3); */ + background-image: url('../Images/gradient2.png'); + border-color: rgba(255, 255, 255, 0.2); + border-style: none solid solid solid; + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + border-width: 1px; + box-shadow: 0px 0px 2px rgba(0,0,0,0.5); + color: white; + font-size: 16px; + text-align: center; + display: inline-block; + min-width: 90px; + height: 19px; + margin-right: 5px; + padding: 2px 8px; + opacity: 0.9; + cursor: pointer; + vertical-align: bottom; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.ongletHaut:hover{ + background-color: rgba(0,180,255,0.3); +/* border-color: rgba(255, 255, 255, 0.6); */ + box-shadow:0px 0px 6px rgba(0,180,255,1), 0px 0px 3px rgba(0,0,0,1); + opacity: 1; +} +.ongletHaut:active{ + background-color: rgba(0,90,128,0.3); + box-shadow:0px 0px 6px rgba(0,90,128,1), 0px 0px 3px rgba(0,0,0,1); + position: relative; + color: rgba(255,255,255,0.8); + padding-top: 1px; + bottom: 1px; +} +.premierOngletHaut{ + font-weight: bold; + background-color: rgba(255,160,0,0.3); +} +.premierOngletHaut:hover{ + background-color: rgba(255,160,0,0.5); + box-shadow:0px 0px 6px rgba(255,160,0,1), 0px 0px 3px rgba(0,0,0,1); +} +.premierOngletHaut:active{ + background-color: rgba(128,80,0,0.5); + box-shadow:0px 0px 6px rgba(128,80,0,1), 0px 0px 3px rgba(0,0,0,1); +/* position: relative; */ +/* bottom: 1px; */ +} + +/* Bouton qui sert à choisir entre l'affichage 3D et 2D */ +#onglet3D{ + position: absolute; + top: 8px; + left: 538px; + width: 40px; + height: 19px; + padding-top: 2px; + color: white; + font-size: 16px; + text-align: center; + background-color: rgba(255,255,255,0); + background-image: url('../Images/gradient2.png'); +/* background-image: url("../Images/onglet1.png"); */ + border: 1px solid rgba(255,255,255,0.2); + border-bottom: none; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + box-shadow: 0px 0px 2px rgba(0,0,0,0.2); + cursor: pointer; + opacity: 0.8; + z-index: 3; +} +#onglet3D:hover{ + background-color: rgba(255, 255, 255, 0.2); + box-shadow: 0px 0px 4px rgba(255,255,255,1); + opacity: 1; +} +#onglet3D:active{ + background-color: rgba(255, 255, 255, 0.1); + box-shadow: 0px 0px 4px rgba(255,255,255,0.5); + top: 9px; + color: rgba(255,255,255,0.8); +} + +/* Petits boutons en haut à droite du widget */ +#topRightButtons{ + position: absolute; + right: 10px; + top: 3px; + z-index: 4; +} +.miniBouton{ + display: inline-block; + width: 12px; + height: 12px; + color: white; + font-size: 12px; + text-align: center; + background-color: rgba(255,255,255,0); + background-image: url('../Images/gradient.png'); + background-position: 0px 0px; + border: 1px solid rgba(255,255,255,0.5); + border-radius: 6px; + -webkit-border-radius: 6px; + box-shadow: 0px 0px 2px rgba(0,0,0,1); + cursor: pointer; + opacity: 0.5; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.miniBouton:hover{ + opacity: 1; + box-shadow: 0px 0px 4px rgba(255,255,255,1); +} +.miniBouton:active{ + box-shadow: 0px 0px 4px rgba(255,255,255,0.5); + border: 1px solid rgba(255,255,255,0.4); + width: 11px; + height: 11px; + font-size: 11px; + margin-left: 1px; +} + +/* Bouton permettant de minimiser et maximiser le widget */ +/* Non utilisé pour le moment...*/ +#miniMax{ + position: absolute; + left: 564px; + top: 3px; + z-index: 3; +} + +/* Boutons pour changer l'action de la souris*/ +#zoomButtons{ + position: absolute; + left: 13px; + top: 70px; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +#toolButtons{ + position: absolute; + left: 23px; + top: 103px; + padding: 2px; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +#toolButtons .toolButton{ + margin-bottom: 5px; + margin-top: 0px; +} +#toolButtons .toolButton:active{ + margin-bottom: 7px; +} + +.toolButton{ + margin-left: auto; + margin-right: auto; + width: 16px; + height: 16px; + color: white; + font-size: 14px; + text-align: center; + font-weight: bold; + background-color: rgba(255,255,255,0); + background-image: url('../Images/gradient.png'); + background-position: 0px 0px; + border: 1px solid rgba(255,255,255,0.5); + border-radius: 100%; + -webkit-border-radius: 10px; + box-shadow: 0px 0px 2px rgba(0,0,0,1); + cursor: pointer; + opacity: 0.5; +} +.toolButton:hover{ + opacity: 1; + box-shadow: 0px 0px 4px rgba(255,255,255,1); +} +.toolButton:active{ + box-shadow: 0px 0px 4px rgba(255,255,255,0.5); + border: 1px solid rgba(255,255,255,0.4); + width: 14px; + height: 14px; + font-size: 12px; + position: relative; + top: 1px; +} + +.toolButton.selectedTool{ +/* background-color: rgba(255,255,255,0); */ + background-color: rgba(0,180,255,0.3); + box-shadow:0px 0px 6px rgba(0,180,255,1), 0px 0px 3px rgba(0,0,0,1); + opacity: 0.7; +} + +.zoomButton{ + display: inline-block; + width: 22px; + height: 22px; + border-radius: 6px; + box-sizing: border-box; + padding: 2px; +} +.zoomButton:active{ + width: 20px; + height: 20px; + top: 0px; +} + +#zoomOut{ + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; +} +#zoomOut:active{ + margin-left: 2px; +} + +#zoomIn{ + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; +} + +.toolButton > .icon{ + background-size: 100%; + width: 100%; + height: 100%; +} + +#moveTool > .icon{ + background-image: url('../Images/move.png'); +} + +#tangentTool> .icon{ + background-image: url('../Images/tangent.png'); +} + +/* Joystick de déplacement */ +#zoneJoystick{ + position: absolute; + left: 8px; + top: 8px; + width: 50px; + height: 50px; + padding-left: 6px; + padding-top: 6px; +/* border: 1px solid green; */ + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + +} + +#joystick{ + width: 40px; + height: 40px; + color: white; + font-size: 14px; + text-align: center; + font-weight: bold; + background-color: rgba(255,255,255,0.2); + background-image: url('../Images/gradient4.png'); + background-position: 0px 0px; + border: 1px solid rgba(255,255,255,0.5); + border-radius: 25px; /*100% bug dans uniboard*/ + -webkit-border-radius: 25px; + box-shadow: 0px 0px 2px rgba(0,0,0,1); + cursor: pointer; + opacity: 0.5; +} +#joystick:hover{ + opacity: 1; + box-shadow: 0px 0px 2px rgba(255,255,255,1); +} +#joystick:active{ +/* box-shadow: 0px 0px 4px rgba(255,255,255,0.5); */ +/* border: 1px solid rgba(255,255,255,0.4); */ +/* width: 38px; */ +/* height: 38px; */ +/* font-size: 12px; */ +/* position: relative; */ +/* top: 1px; */ +/* left: 1px; */ +/* margin-bottom: 7px; */ +} +#joystick table{ + border-collapse: collapse; + width: 40px; + height: 40px; + font-size: 11px; +} +#joystick table tr td{ + padding: 0px; + text-shadow: 0px 0px 5px black; +/* border: 1px solid orange; */ + opacity: 0.5; +} +#joystick table tr td:hover{ + text-shadow: 0px 0px 3px white; + opacity: 1; +} +#joystick table tr td:active{ + opacity: 0.8; +} diff --git a/resources/library/applications/GraphMe.wgt/Style/Menus.css b/resources/library/applications/GraphMe.wgt/Style/Menus.css new file mode 100644 index 00000000..5a04ab64 --- /dev/null +++ b/resources/library/applications/GraphMe.wgt/Style/Menus.css @@ -0,0 +1,238 @@ +/* Style pour les menus */ +.menu{ + position: absolute; + top: 0%; + width: 100%; + max-width: 800px; + min-height: 411px; + max-height: 100%; + overflow: auto; + background-color: rgba(255, 255, 255, 0.7); + border-style: none; + border-width: 1px; + border-color: rgba(0,70,128, 0.9); + border-radius: 4px; + -webkit-border-radius: 4px; + z-index: 2; + display: none; + box-sizing: border-box; +} +.barreBasMenu{ + position: absolute; + bottom: 0px; +/* right: 0px; */ +} +.barreBasMenu > div{ + position: fixed; + width: 100%; + max-width: 800px; + box-sizing: border-box; + /* right: 0px; */ +/* bottom: 14px; */ +} +.barreBasMenu > div > div{ + position: absolute; + bottom: 0px; + right: 0px; + width: 100%; + box-sizing: border-box; + padding-right: 28px; +/* background-color: rgba(255,0,0,0.3); */ + text-align: right; +} +.contenuMenu{ + font-size: 14px; + padding: 15px; + padding-top: 40px; +/* overflow: auto; */ +/* height: 100%; */ +/* position: absolute; */ +/* top: 0px; */ +/* bottom: 0px; */ +} +.avecBordures{ +/* border-top: 1px solid rgba(255, 255, 255, 0.4); */ +/* height: 80% */ +} +.ongletMenu{ + position: fixed; +/* top: 0px; */ + width: 100%; + max-width: 800px; +/* height: 50px; */ +/* background-color: rgba(255,0,0,0.3); */ +/* border-spacing: 15px; */ + box-sizing: border-box; + padding-right: 14px; + text-align: center; + z-index: 1; +} +.ongletMenu > div{ +/* position: fixed; */ +/* width: inherit; */ +/* top: 0px; */ +/* left: 0px; */ +/* right: 0px; */ +} +.deuxOnglets span{ + width: 44%; +} +.troisOnglets span{ + width: 28%; +} +.ongletMenu span{ + display: inline-block; + min-width: 150px; + padding: 5px; + margin: 0px 7px; + text-align: center; + font-weight: normal; + background-color: rgba(255, 255, 255, 0.8); + background-image: url('../Images/gradient3.png'); + border: 1px solid rgba(255, 255, 255, 0.9); + border-top: none; + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + -webkit-border-bottom-left-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + box-shadow: 0px 0px 3px rgba(0,0,0,0.5); + opacity: 0.7; + cursor: pointer; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.ongletMenu span.ongletMenuActuel{ + opacity: 0.9; + font-weight: bold; + background-color: rgba(255, 255, 255, 0.9); +} +.ongletMenu span:hover{ + opacity: 1; + box-shadow:0px 0px 3px rgba(0,0,0,0.5), 0px 0px 7px rgba(255,255,255,1); +} +.ongletMenu span:active{ + opacity: 0.7; + font-weight: bold; + box-shadow:0px 0px 3px rgba(0,0,0,0.5), 0px 0px 7px rgba(255,255,255,0.5); +} +.menu table.colonnes tr td{ + vertical-align: top; +} +.menu table.colonnes tr td{ + border-left: 1px solid rgba(255,255,255,0.5); + padding-left: 4px; +} +.menu table.colonnes tr td.premiereColonne{ + border: none; + padding-right: 4px; +} + + +.miniMenu{ + position: absolute; + top: 45%; + left: 50%; + margin-left: -160px; + margin-top: -120px; + width: 320px; + min-height: 240px; + padding: 5px; + text-align: center; + font-size: 14px; + overflow: auto; + background-color: rgba(255, 255, 255, 0.6); + background-image: url('../Images/gradient2.png'); + background-size: 100% 100%; + box-shadow: 0px 0px 5px rgba(0,0,0,0.5); + border-style: solid; + border-width: 1px; + border-color: rgba(255,255,255, 0.5); + border-radius: 8px; + -webkit-border-radius: 8px; + z-index: 2; + display: none; +} +.alertMenu{ + position: absolute; + top: 126px; + left: 206px; + width: 220px; + height: 140px; + padding: 10px; + text-align: center; + font-size: 14px; + overflow: auto; + background-color: rgba(255, 255, 255, 0.9); + background-image: url('../Images/gradient2.png'); + background-size: 100% 100%; + border-style: solid; + border-width: 1px; + border-color: rgba(0,70,128, 0.9); + border-radius: 15px; + -webkit-border-radius: 15px; + z-index: 3; + display: none; +} +.miniMenu select{ +/* width: 65px; */ +} +.miniMenu input{ + width: 45%; + height: 32px; +} +.miniMenu input.smallInput{ + width: 45%; + height: 16px; +} +.alertMenu input{ + width: 45%; + height: 32px; +} + + +/* Menu "à propos" */ +#credits{ + width: 80%; + margin: auto; + margin-top: 10px; +} +#credits tr td{ + padding: 10px; + width: 100%; + height: 150px; + text-align: center; + text-shadow: 2px 2px 6px rgba(255,255,255,1); + vertical-align: middle; + background-color: rgba(255,220,150,0.5); + background-image: url('../Images/gradient2.png'); + background-size: 100% 100%; + border: 1px solid rgba(255,230,150,0.6); + border-radius: 10px; + -webkit-border-radius: 10px; + box-shadow: 0px 0px 8px rgba(140,70,0,0.5) ; +} +#credits tr td img{ + float: left; + margin-top: 20px; + margin-bottom: 20px; +} +#credits tr td a{ + font-size: 80%; +} +#credits tr td h3{ + text-align:center; +} + +#saveImageContent{ + width: 100%; + height: 100%; + box-sizing: border-box; + padding-bottom: 30px; +} +#saveImageContent img{ + max-width: 100%; + max-height: 100%; +} diff --git a/resources/library/applications/GraphMe.wgt/Style/Widget.css b/resources/library/applications/GraphMe.wgt/Style/Widget.css new file mode 100644 index 00000000..ae120352 --- /dev/null +++ b/resources/library/applications/GraphMe.wgt/Style/Widget.css @@ -0,0 +1,659 @@ +body{ + background-color: transparent; + font-family: Sans-Serif; +} +table tr td{ + padding: 0px; +} + +/* Widget background */ +html, body{ + height: 100%; + margin: 0px; +} + +#background{ + width: 100%; + height: 100%; + border-spacing: 0; + border-collapse: collapse; +} +.background-border-x{ + height: 14px; + padding: 0px; + background-color: "black"; +} +.background-border-y{ + width: 14px; + padding: 0px; + background-color: "black"; +} +#background-top-left{ + background-image: url('../Images/darkblue/top-left.png'); + background-size: 100% 100%; +} +#background-top{ + background-image: url('../Images/darkblue/top.png'); + background-size: 100% 100%; +} +#background-top-right{ + background-image: url('../Images/darkblue/top-right.png'); + background-size: 100% 100%; +} +#background-bottom-left{ + background-image: url('../Images/darkblue/bottom-left.png'); + background-size: 100% 100%; +} +#background-bottom{ + background-image: url('../Images/darkblue/bottom.png'); + background-size: 100% 100%; +} +#background-bottom-right{ + background-image: url('../Images/darkblue/bottom-right.png'); + background-size: 100% 100%; +} +#background-left{ + background-image: url('../Images/darkblue/left.png'); + background-size: 100% 100%; +} +#background-right{ + background-image: url('../Images/darkblue/right.png'); + background-size: 100% 100%; +} +#background-center{ + background-image: url('../Images/darkblue/center.png'); + background-size: 100% 100%; + height: 100%; + padding-top: 30px; + position: relative; +} + +/* Widget center */ +#widgetCenter{ + height: 100%; + position: relative; +} + +/* Zone d'affichage des fonctions */ +#eventAffichage{ + height: 100%; + position: relative; +} +#eventAffichage canvas{ + display: block; +} +#affichage{ + height: 100%; + box-sizing: border-box; + overflow: hidden; + border: 1px solid rgba(255,255,255,0.5); + border-radius: 5px; + -webkit-border-radius: 5px; +} +#affichageOutils{ + position: absolute; + top: 0px; + box-sizing: border-box; + height: 100%; + width: 100%; +} + +#divInputRapide{ + display: none; + position: absolute; + top: 11px; + left: 108px; + padding: 3px; + color: white; + text-align: center; + border: 1px solid rgba(255,255,255,0.2); + border-radius: 5px; + -webkit-border-radius: 5px; + box-shadow: 0px 0px 2px rgba(0,0,0,0.5); + background-image: url('../Images/gradient3.png'); + background-color: rgba(255,255,255,0.1); + background-size: 100% 100%; + z-index: 2; +} +#inputRapide{ + width: 270px; +} + +#menuFonctions3D{ + position: absolute; + top: 11px; + left: 108px; + padding: 3px; + color: white; + text-align: center; + border: 1px solid rgba(255,255,255,0.2); + border-radius: 5px; + -webkit-border-radius: 5px; + box-shadow: 0px 0px 2px rgba(0,0,0,0.5); + background-image: url('../Images/gradient3.png'); + background-color: rgba(255,255,255,0.1); + background-size: 100% 100%; + z-index: 2; +} +#input3D{ + width: 265px; +} + +/* Messages */ +#divMessages div{ + position: absolute; + background-image: url('../Images/cursor.png'); + background-repeat: no-repeat; + z-index: 4; + pointer-events: none; + min-height: 24px; +} +#divMessages div span{ + position: relative; + left: 19px; + top: 20px; + padding: 2px; + color: white; + font-size: 11px; + text-align: center; + border: 1px solid rgba(255,255,255,0.2); + border-radius: 5px; + -webkit-border-radius: 5px; + box-shadow: 0px 0px 2px rgba(0,0,0,0.5); + text-shadow: 0px 0px 3px rgba(0,165,255,0.7); + background-image: url('../Images/gradient2.png'); + background-color: rgba(0,86,134,0.6); + pointer-events: auto; +} +#divMessages div span a{ + color : rgb(135,210,255); + cursor: pointer; +} +#divMessages div span a:hover{ + color : rgb(110,200,255); + text-decoration: underline; + text-decoration-style: dotted; +} + + +/* Taille standard des boutons*/ +.bouton{ + /*width: 100px;*/ + height: 25px; + font-size: 12px; +} + +/* Boutons qui sont dans la partie gauche et qui ouvrent les différents menus */ +.boutonGauche{ + width: 100%; + height: 32px; + text-align: center; +} + +/* Aperçu couleur 3D*/ +#apercuCouleur3D{ + border: 1px solid rgba(0, 0, 0, 0.7); + border-radius: 4px; + -webkit-border-radius: 4px; +} + +/* Taille des champs contenant seulement 2 ou 3 caractères */ +.smallInput{ + width: 35px; +} +.mediumInput{ + width: 45px; +} + + +/* Boutons qui ouvrent le ColorPicker */ +.boutonCouleur{ + position: relative; + left: 2px; + top: 4px; + width: 15px; + height: 15px; + border: 1px solid rgba(0,0,0,0.5); + border-radius: 5px; + -webkit-border-radius: 5px; + background-color: rgba(0,128,255,0.8); + display: inline-block; + cursor:pointer; + opacity: 0.7; +} +.boutonCouleur:hover{ + box-shadow: 0px 0px 2px rgba(0,128,255,1); + opacity: 1; +} + +/* Texte d'information (plus petit) */ +.texteSecondaire{ + font-size: 11px; + color: rgba(0,0,0,0.5); + margin-left: 10px; +} + +/* Style pour le texte où on peut cliquer dessus */ +.survol{ + cursor: pointer; + color: rgb(0,70,120); +} +.survol:hover{ + color: rgb(0,110,150); + opacity: 0.7; +/* text-shadow: 0px 0px 3px white; */ +} + +/* Texte en gras */ +.gras{ + font-weight: bold; +} + +/* Flèches permettant de deplacer l'affichage */ +.flecheDeplacement{ + color: black; + text-shadow: 0px 0px 20px rgba(255,255,255,1); + opacity: 0; + font-size: 56px; + text-align: center; + cursor: pointer; + z-index: 1; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.flecheDeplacement:hover{ + opacity: 0.4; +} +.flecheDeplacement:active{ + opacity: 0.3; +} +#flecheHaut{ + position: absolute; + top: 15px; + left: 50%; + margin-left: -35px; + width: 70px; + height: 55px; +} +#flecheBas{ + position: absolute; + bottom: 20px; + left: 50%; + margin-left: -35px; + width: 70px; + height: 55px; +} +#flecheGauche{ + position: absolute; + top: 50%; + margin-top: -36px; + left: 15px; + width: 55px; + height: 70px; +} +#flecheDroite{ + position: absolute; + top: 50%; + margin-top: -36px; + right: 15px; + width: 55px; + height: 70px; +} + + +/* Boutons permettant de choisir l'action de la souris dans le menu des outils */ +.choixOutil{ + width: 125px; + height: 40px; + font-size: 14px; + cursor: pointer; +} + + +/* Petits boutons plus et moins dans les options */ +.boutonPlus{ + position: relative; + top: -7px; + left: -5px; + width: 10px; + height: 10px; + font-size: 9px; + text-align: center; + background-color: rgba(0, 140, 255, 0.2); + border: 1px rgba(0,0,0,0.5) solid; + border-radius: 3px; + -webkit-border-radius: 3px; + cursor: pointer; + display: inline-block; +} +.boutonMoins{ + position: relative; + top: 6px; + left: -17px; + width: 10px; + height: 10px; + font-size: 9px; + text-align: center; + background-color: rgba(0, 140, 255, 0.2); + border: 1px rgba(0,0,0,0.5) solid; + border-radius: 3px; + -webkit-border-radius: 3px; + cursor: pointer; + display: inline-block; +} +.boutonPlus:hover{ + border: 1px rgba(0,0,0,0.7) solid; + background-color: rgba(0, 140, 255, 0.5); +} +.boutonMoins:hover{ + border: 1px rgba(0,0,0,0.7) solid; + background-color: rgba(0, 140, 255, 0.5); +} + + + +/* Menu etudes fonctions*/ +#menuEtude p{ + margin-top: 7px; + margin-bottom: 0px; +/* font-weight: bold; */ +} +#menuEtude span{ +/* font-weight : normal; */ +} +/* Tableau du signe dans le menu d'étude de la fonction*/ +#etudeSigne{ +/* border-collapse: collapse; */ + border-spacing: 0px; +} +#etudeSigne td{ + min-width: 25px; + text-align: center; + padding: 0px; +} +#etudeSigne td.premier{ + font-weight: bold; +} +#etudeSigne td.bordure{ + border: 1px solid black; + border-radius: 3px; + -webkit-border-radius: 3px; +} +#etudeSigne td.fondNoir{ + background-color: rgba(0,0,0,0.5); +} + +/* Titres des menus */ +h1{ + font-size: 16px; + font-weight: 600; + text-align: center; + /*font-style: italic;*/ + margin-top: 15px; + margin-bottom: 25px; +} +h2{ + font-size: 14px; + font-weight: normal; + font-style: italic; + margin-top: 30px; +} +h3{ + font-size: 16px; + font-weight: 600; + text-align: left; + /*font-style: italic;*/ + margin-top: 7px; + margin-bottom: 20px; +} +h4{ + font-size: 16px; + font-weight: 600; + text-align: center; + /*font-style: italic;*/ + margin-top: 15px; + margin-bottom: 10px; +} + + +/* Menu Mise à Jour */ +#mAj{ + text-align: center; + font-size: 14px; +} +#mAj h1{ + font-size: 22px; + margin-top: 5px; + margin-bottom: 15px; +} +#mAj span object{ + position: relative; + bottom: 4px; + width: 150px; + height: 27px; + overflow: hidden; +} +#mAj input{ + min-height: 27px; +} + +.boutonSauvegarde{ + width: 100px; + height: 32px; +} +#cacheCookies{ + position: absolute; + top: 150px; + left: 10px; + width: 93%; + height: 150px; + background-color: rgba(255,255,255,0.7); + border: 1px rgba(255,255,255,0.8) solid; + border-radius: 3px; + -webkit-border-radius: 3px; + text-align: center; + display: none; +} +#cacheMaJ{ + position: absolute; + padding-top: 20px; + padding-bottom: 10px; + top: 250px; + left: 14px; + width: 93%; + height: 25px; + background-color: rgba(255,255,255,0.8); + border: 1px rgba(255,255,255,0.8) solid; + border-radius: 3px; + -webkit-border-radius: 3px; + text-align: center; + font-weight: bold; + display: none; +} + +/* Menu clique droite sur le graphique */ +#ctxMenu{ + position: absolute; + border: 1px solid black; + border-radius: 5px; + background-color: rgba(255,255,255,0.8); + box-shadow: 0px 0px 5px rgba(0,64,126,0.5); + font-size: 12px; + padding: 2px; + z-index: 2; + display: none; +} +#ctxMenu input.bouton{ + width: 140px; + height: 25px; +} +#ctxMenu h1{ + font-size: 14px; + text-align: center; + text-decoration: underline; + text-shadow: 0px 0px 4px rgba(0,100,200,0.7); + margin: 3px; +} +#ctxMenu div.fermer{ + position: absolute; + right: 0px; + top: 0px; + width: 10px; + height: 10px; + font-size: 10px; + cursor: pointer; + opacity: 0.7; +} +#ctxMenu div.fermer:hover{ + text-shadow: 0px 0px 2px rgba(0,128,255,1); + opacity: 1; +} +.miniCouleur{ + display: inline-block; + width: 10px; + height: 10px; + border: 1px solid rgba(0,0,0,0.5); + border-radius: 3px; + background-color: rgba(0,128,255,0.8); + cursor: pointer; + opacity: 0.7; +} +.miniCouleur:hover{ + box-shadow: 0px 0px 2px rgba(0,128,255,1); + opacity: 1; +} + +/* Editeur de fonctions dans le menu + */ +#functionMenuRight{ + position: absolute; + right: 15px; + width: 45%; + box-sizing: border-box; +} +#functionMenuLeft{ + max-width: 50%; +/* min-height: 400px; */ + box-sizing: border-box; +} +#fonctionsSupp{ + width: 100%; + min-height: 305px; +/* height: 245px; */ +/* border: 1px solid blue; */ + overflow: auto; +} +.spanFonction{ +/* width: 320px; */ + border: 1px solid rgba(0,0,0,0.3); + border-radius: 5px; + background-color: rgba(255,255,255,0.2); + background-image: url('../Images/gradient2.png'); + background-position: 0px -2px; + box-shadow: 0px 0px 4px rgba(0,64,126,0.2); + padding: 2px; + margin: 4px; + font-weight: bold; + text-align: center; + overflow: hidden; + cursor: pointer; +} +.spanFonction:hover{ + background-color: rgba(164,228,255,0.2); + box-shadow: 0px 0px 2px rgba(0,150,255,0.6); +} +.spanFonctionSelect{ + background-color: rgba(118,214,255,0.4); + border-color: rgba(0,63,126,0.3); +} +.spanFonctionSelect:hover{ + background-color: rgba(118,214,255,0.6); +} +#editeurFonction{ +/* position: absolute; */ +/* right: 15px; */ +/* top: 45px; */ + min-width: 300px; +/* height: 75%; */ + border: 1px solid rgba(255,255,255,0.7); +/* border-top: 1px solid rgba(255,255,255,0.3); */ + border-radius: 5px; + background-color: rgba(255,255,255,0.2); + background-image: url('../Images/gradient2.png'); + background-size: 100% 100%; + box-shadow: 0px 0px 4px rgba(0,64,126,0.2); + font-size: 12px; + padding: 2px; +} +#editeurApercu{ + position: relative; + display : block; + margin : auto; + width: 100px; + height : 80px; + border: 1px solid white; + border-radius: 3px; + background-color: rgba(255,255,255,0.8); + box-shadow: 0px 0px 2px rgba(0,64,126,0.5); + font-size: 12px; + padding: 2px; +} +.editeurOnglets{ + position: relative; + bottom: 3px; + width: 100%; + text-align: center; +} +.editeurOnglets span{ + display: inline-block; + min-width: 70px; + width: 40%; + padding: 5px; + margin: 0px 2px; + text-align: center; + font-weight: normal; + background-color: rgba(255, 255, 255, 0.7); + background-image: url('../Images/gradient3.png'); + border: 1px solid rgba(255, 255, 255, 0.9); + border-top: 1px solid white; + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + -webkit-border-bottom-left-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + box-shadow: 0px 0px 3px rgba(0,0,0,0.5); + opacity: 0.5; + cursor: pointer; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.editeurOnglets span.ongletActuel{ + opacity: 0.8; + font-weight: bold; +} +.editeurOnglets span:hover{ + opacity: 1; + box-shadow:0px 0px 3px rgba(0,0,0,0.5), 0px 0px 7px rgba(255,255,255,1); +} +.editeurOnglets span:active{ + opacity: 0.7; + font-weight: bold; + box-shadow:0px 0px 3px rgba(0,0,0,0.5), 0px 0px 7px rgba(255,255,255,0.5); +} + +#divSuppOutil div{ + position: absolute; + width: 10px; + height: 10px; + font-size: 10px; + cursor: pointer; + opacity: 1; + z-index: 1; +} +#divSuppOutil div:hover{ + color: rgb(200,0,0); +} diff --git a/resources/library/applications/GraphMe.wgt/Style/default.css b/resources/library/applications/GraphMe.wgt/Style/default.css deleted file mode 100644 index 1fd90946..00000000 --- a/resources/library/applications/GraphMe.wgt/Style/default.css +++ /dev/null @@ -1,659 +0,0 @@ -/* ----------------- */ -/* CSS */ -/* ----------------- */ - - -/* Arrière plan du widget */ -body{ - background-image: url('../Images/fond2.png'); - background-repeat: no-repeat; - background-position: 0px 0px; -} - -/* Zone d'affichage des fonctions */ -#affichage{ - position: absolute; - top: 52px; - left: 129px; - width: 500px; - height: 400px; - overflow:hidden; - border: 2px solid black; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -/* Texte et boutons qui sont en haut du widget */ -#haut{ - position: relative; - top: 13px; - left: 20px; - width: 500px; - z-index: 2; -} - -/* Champ permettant d'entrer la fonction à dessiner */ -#inputEq{ - width: 200px; -} - -/* Texte à côté du champ de la fonction à dessiner */ -#texteFonction{ - color: white; - font-weight: bold; -} - -/* Partie gauche du widget comprenant les boutons des menus et les options rapides */ -#gauche{ - position: absolute; - top: 62px; - left: 18px; - width: 100px; - height: 380px; - padding: 2px; - color: white; - font-size: 80%; - background-image: url('../Images/gauche2.png'); - border-color: black; - /*border-width: 2px;*/ - border-width: 0px; - border-style: solid; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -/* Boutons qui sont dans la partie gauche et qui ouvrent les différents menus */ -.boutonGauche{ - width: 100%; - height: 32px; - text-align: center; -} - -/* Partie gauche du widget lorsque l'affichage 3D est activé */ -#gauche3D{ - position: absolute; - left: -149px; - top: 234px; - width: 360px; - height: 32px; - padding: 2px; - padding-left: 14px; - border: 2px solid rgba(255, 255, 255, 0.4); - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - background-color: rgba(255, 255, 255, 0.3); - -moz-transform: rotate(270deg); - -webkit-transform: rotate(270deg); - -o-transform: rotate(270deg); - display: none; - z-index: -1; -} -#gauche3D input.boutonGauche3D{ - width: 90px; - height: 30px; -} - -/* Style pour les menus */ -.menu{ - position: absolute; - top: 68px; - left: 121px; - width: 450px; - height: 350px; - padding: 10px; - overflow: hidden; - background-color: rgba(255, 255, 255, 0.7); - border-style: none; - border-width: 1px; - border-color: rgba(0,70,128, 0.9); - border-radius: 4px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - z-index: 2; - display: none; -} -.barreBasMenu{ - position: absolute; - right: 0px; - bottom: 0px; -} -.contenuMenu{ - font-size: 14px; - padding: 10px; - overflow: auto; - max-height: 315px; -} -.avecBordures{ - border-top: 1px solid rgba(255, 255, 255, 0.4); - height: 80% -} -.ongletMenu{ - position: relative; - top: 3px; - width: 100%; -} -.ongletMenu tr td{ - width: 30%; - height: 30px; - text-align: center; - font-weight: normal; - background-color: rgba(255, 255, 255, 0.7); - border: 1px solid rgba(255, 255, 255, 0.9); - border-radius: 4px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - opacity: 0.5; - cursor: pointer; -} -.ongletMenu tr td:hover{ - opacity: 1; -} -.ongletMenu tr td.ongletMenuActuel{ - position:relative; - top:-1px; - opacity: 0.9; - font-weight: bold; - border-bottom : none; - border-bottom-left-radius: 0px; - border-bottom-right-radius: 0px; - -moz-border-radius-bottomleft: 0px; - -moz-border-radius-bottomright: 0px; - -webkit-border-bottom-left-radius: 0px; - -webkit-border-bottom-right-radius: 0px; -} -.miniMenu{ - position: absolute; - top: 120px; - left: 170px; - width: 320px; - height: 240px; - padding: 10px; - text-align: center; - font-size: 14px; - overflow: auto; - background-color: rgba(255, 255, 255, 0.9); - border-style: solid; - border-width: 1px; - border-color: rgba(0,70,128, 0.9); - border-radius: 15px; - -moz-border-radius: 15px; - -webkit-border-radius: 15px; - z-index: 2; - display: none; -} -.alertMenu{ - position: absolute; - top: 170px; - left: 220px; - width: 220px; - height: 140px; - padding: 10px; - text-align: center; - font-size: 14px; - overflow: auto; - background-color: rgba(255, 255, 255, 0.9); - border-style: solid; - border-width: 1px; - border-color: rgba(0,70,128, 0.9); - border-radius: 15px; - -moz-border-radius: 15px; - -webkit-border-radius: 15px; - z-index: 3; - display: none; -} -.miniMenu input{ - width: 45%; - height: 32px; -} -.alertMenu input{ - width: 45%; - height: 32px; -} - -/* Menu des crédits */ -#credits{ - width: 80%; - margin: auto; -} -#credits tr td{ - padding: 20px; - width: 100%; - height: 150px; - text-align: center; - vertical-align: middle; - background-color: rgba(255, 255, 255, 0.7); - border: 2px solid white; - border-radius: 10px; - -moz-border-radius: 10px; - -webkit-border-radius: 10px; -} -#credits tr td img{ - float: left; -} -#credits tr td a{ - font-size: 80%; -} -#credits tr td h3{ - text-align:center; -} - -/* Aperçu couleur 3D*/ -#apercuCouleur3D{ - border: 1px solid rgba(0, 0, 0, 0.7); - border-radius: 4px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; -} - -/* Taille des champs contenant seulement 2 ou 3 caractères */ -.smallInput{ - width: 35px; -} - -/* Choix de la saturation et de la valeur dans le ColorPicker */ -#colorSV{ - float: left; - width: 255px; - height: 255px; - border: 1px solid black; - background-color: red; - cursor: crosshair; -} - -/* Choix de la teinte dans le ColorPicker */ -#colorT{ - float: left; - width: 20px; - height: 255px; - margin-left: 10px; - border: 1px solid black; - background-color: black; - cursor: crosshair; -} - -/* Valeurs de la couleur dans le ColorPicker */ -#colorValues{ - position: relative; - left: 10px; - font-size: 80%; -} - -/* Boutons qui ouvrent le ColorPicker */ -/*Menu de gauche*/ -#buttonColor{ - float: left; - position: relative; - left: 75px; - top: -18px; - width: 20px; - height: 20px; - border: 1px white solid; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - background-color: rgb(193,255,0); - cursor:pointer; -} -#buttonColor:hover{ - border-width: 2px; - left: 74px; - top: -19px; -} - -#apercuCouleur{ - position: absolute; - right: 20px; - bottom: 40px; - width: 40px; - height: 30px; - border: 1px white solid; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - background-color: rgb(193,255,0); -} - -#apercuCouleur2{ - position: absolute; - right: 65px; - bottom: 40px; - width: 40px; - height: 30px; - border: 1px white solid; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - background-color: rgb(193,255,0); -} - -/*Fonctions supplémentaires*/ -.boutonCouleur{ - position: relative; - left: 2px; - top: 0px; - width: 20px; - height: 20px; - color: rgba(0,0,0,0); - border: 1px white solid; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - background-color: rgb(0,171,255); - cursor:pointer; -} -.boutonCouleur:hover{ - border-width: 2px; - left: 1px; - top: 0px; -} - -/* Texte d'information (plus petit) */ -.texteSecondaire{ - font-size: 11px; - color: rgba(0,0,0,0.5); - margin-left: 10px; -} - -/* Style pour le texte où on peut cliquer dessus */ -.survol{ - cursor: pointer; -} -.survol:hover{ - color: rgba(0,0,0,0.5); -} - -/* Texte en gras */ -.gras{ - font-weight: bold; -} - -/* Flèches permettant de deplacer l'affichage */ -.flecheDeplacement{ - color: black; - opacity: 0; - font-size: 56px; - text-align: center; - cursor: pointer; - z-index: 1; -} -.flecheDeplacement:hover{ - opacity: 0.4; -} -#flecheHaut{ - position: absolute; - top: 46px; - left: 345px; - width: 70px; - height: 55px; -} -#flecheBas{ - position: absolute; - top: 381px; - left: 345px; - width: 70px; - height: 55px; -} -#flecheGauche{ - position: absolute; - top: 216px; - left: 137px; - width: 55px; - height: 70px; -} -#flecheDroite{ - position: absolute; - top: 216px; - left: 567px; - width: 55px; - height: 70px; -} - -/* Bouton permettant de minimiser et maximiser le widget */ -#miniMax{ - position: absolute; - right: 10px; - top: 10px; - font-size: 24px; - color: rgba(0,0,0,0.4); - cursor: pointer; -} -#miniMax:hover{ - color: rgba(0,0,0,1); -} - -/* Boutons permettant de choisir l'action de la souris dans le menu des outils */ -.choixOutil{ - width: 125px; - height: 40px; - font-size: 14px; - cursor: pointer; -} - -/* Point sous la souris */ -#point{ - position: absolute; - top: -10px; - left: -10px; - color: white; -} -/* Coordonnées du points sous la souris */ -#info{ - position: absolute; - top: 57px; - left: 137px; - color: white; -} -/* Outil de tangente */ -#tangente{ - position: absolute; - top: 52px; - left: 129px; - width: 500px; - height: 400px; - z-index: -1; -} - -/* Petits boutons plus et moins dans les options */ -.boutonPlus{ - position: relative; - top: -7px; - left: -5px; - width: 10px; - height: 10px; - font-size: 9px; - text-align: center; - background-color: rgba(0, 140, 255, 0.2); - border: 1px rgba(0,0,0,0.5) solid; - border-radius: 3px; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - cursor: pointer; - display: inline-block; -} -.boutonMoins{ - position: relative; - top: 6px; - left: -17px; - width: 10px; - height: 10px; - font-size: 9px; - text-align: center; - background-color: rgba(0, 140, 255, 0.2); - border: 1px rgba(0,0,0,0.5) solid; - border-radius: 3px; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - cursor: pointer; - display: inline-block; -} -.boutonPlus:hover{ - border: 1px rgba(0,0,0,0.7) solid; - background-color: rgba(0, 140, 255, 0.5); -} -.boutonMoins:hover{ - border: 1px rgba(0,0,0,0.7) solid; - background-color: rgba(0, 140, 255, 0.5); -} - -/* Bouton qui sert à choisir entre l'affichage 3D et 2D */ -#onglet3D{ - position: absolute; - top: 30px; - left: 570px; - width: 40px; - height: 21px; - color: white; - text-align: center; - background-color: rgba(255, 255, 255, 0.4); - background-image: url("../Images/onglet1.png"); - border: 1px solid black; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - cursor: pointer; - opacity: 0.4; - z-index: 3; -} -#onglet3D:hover{ - opacity: 0.9; -} - -/* Tableau du signe dans le menu d'étude de la fonction*/ -#etudeSigne td{ - min-width: 25px; - text-align: center; -} -#etudeSigne td.border{ - border: 1px solid black; - border-radius: 3px; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; -} -#etudeSigne td.infini{ - background-color: rgba(0,0,0,0.5); -} - -/* Titres des menus */ -h1{ - font-size: 16px; - font-weight: 600; - text-align: center; - /*font-style: italic;*/ - margin-top: 15px; - margin-bottom: 25px; -} -h2{ - font-size: 14px; - font-weight: normal; - font-style: italic; - margin-top: 30px; -} -h3{ - font-size: 16px; - font-weight: 600; - text-align: left; - /*font-style: italic;*/ - margin-top: 10px; - margin-bottom: 20px; -} -h4{ - font-size: 16px; - font-weight: 600; - text-align: center; - /*font-style: italic;*/ - margin-top: 15px; - margin-bottom: 10px; -} - -/* Petits boutons en haut à droite du widget */ -.miniBouton{ - width: 12px; - height: 12px; - color: white; - font-size: 12px; - text-align: center; - background-color: rgba(255,255,255,0.5); - border: 1px solid white; - border-radius: 6px; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - cursor: pointer; - opacity: 0.5; -} -.miniBouton:hover{ - opacity: 1; -} -#boutonAgrandir{ - position: absolute; - left: 635px; - top: 11px; - z-index: 3; -} -#boutonFermer{ - position: absolute; - left: 615px; - top: 11px; - z-index: 3; -} - -/* Menu Mise à Jour */ -#mAj{ - text-align: center; - font-size: 14px; -} -#mAj h1{ - font-size: 22px; - margin-top: 5px; - margin-bottom: 15px; -} -#mAj span object{ - position: relative; - bottom: 4px; - width: 150px; - height: 27px; - overflow: hidden; -} -#mAj input{ - height: 32px; -} - -.boutonSauvegarde{ - width: 100px; - height: 32px; -} -#cacheCookies{ - position: absolute; - top: 170px; - left: 14px; - width: 93%; - height: 130px; - background-color: rgba(255,255,255,0.7); - border: 1px rgba(255,255,255,0.8) solid; - border-radius: 3px; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - text-align: center; - display: none; -} -#cacheMaJ{ - position: absolute; - padding-top: 10px; - top: 270px; - left: 14px; - width: 93%; - height: 25px; - background-color: rgba(255,255,255,0.8); - border: 1px rgba(255,255,255,0.8) solid; - border-radius: 3px; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - text-align: center; - font-weight: bold; - display: none; -} \ No newline at end of file diff --git a/resources/library/applications/GraphMe.wgt/config.xml b/resources/library/applications/GraphMe.wgt/config.xml old mode 100644 new mode 100755 index 00a066d3..dcac2d1a --- a/resources/library/applications/GraphMe.wgt/config.xml +++ b/resources/library/applications/GraphMe.wgt/config.xml @@ -1,10 +1,10 @@ - Traceur de fonctions mathématiques - + identifier="http://getuniboard.com/" + version="1.6.0" + width="800" + height="600" + ub:resizable="true"> + Mathematical function plotter + diff --git a/resources/library/applications/GraphMe.wgt/version.html b/resources/library/applications/GraphMe.wgt/version.html index 97104ccc..1f113fd2 100644 --- a/resources/library/applications/GraphMe.wgt/version.html +++ b/resources/library/applications/GraphMe.wgt/version.html @@ -1,10 +1,11 @@ + GraphMe - Version - 1.3.1 (2010/09/25) + 2.1.0 (2018-06-04) - \ No newline at end of file + diff --git a/resources/library/applications/GraphMe.wgt/version.txt b/resources/library/applications/GraphMe.wgt/version.txt new file mode 100644 index 00000000..17984092 --- /dev/null +++ b/resources/library/applications/GraphMe.wgt/version.txt @@ -0,0 +1,294 @@ + + ██████ ███ ███ + ██ ██████ █████ ██████ ██ ██ ████ ████ ███████ + ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██ ██ + ██ ███ ███████ ███████ ██████ ███████ ██ ██ ██ █████ + ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ + ██████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ███████ + + +---- 2.1 ---- + +Général: + - Résolution de bugs avec l'historique des fonctions + - Reprogrammation de la liste des fonctions + - Gestion des erreurs lors de la restauration de l'état sauvegardé + - Sauvegarde du mode d'affichage en cours, 3D ou 2D + - Sauvegarde de l'état de la liste des fonctions + - Sauvegarde de l'outil sélectionné + - Icône du widget amélioré pour OpenBoard + +Interface: + - Amélioration de l'interface pour le changelog et l'aide + - Masquage des boutons de l'affichage en plein à écran avec OpenBoard + - Amélioration de l'affichage des fonctions dans l'historique + - Message d'info au chargement du widget en cas de fonctions restaurées + - Thème bleu foncé avec les coins carrés + +Outils: + - Correction des outils décalés par rapport à la souris + + +---- 2.0.x ---- + + - (2.0.2) Amélioration de la sauvegarde du graphique en image: + affichage de l'image générée dans un menu + - (2.0.1) Cacher les nouveaux boutons de zoom en mode affichage 3D + - Bug: Impossible de changer de thème avec OpenBoard + - Bug: Les fonctions d'exemple ne fonctionnent pas si un autre type + que cartésien est sélectionné dans l'interface des fonctions + + +---- 2.0 ---- + +Général: + - Nouvelle interface adaptive selon la taille de la fenêtre + - Bug: Passer de 3D à 2D essaie de dessiner la fonction 3D en 2D + - Mettre en évidence l'outil sélectionné + - Boutons de zoom + - Historique des dernières fonctions pour tous les types de fonction + - Réinitialisation des inputs quand la page est actualisée + - Sauvegarde de l'état des inputs et de l'historique + + +---- 1.6 ---- + +Fonctions: + - Fonctions implicites (Par exemple un cercle: y^2 + x^2 = 9) + - Fonctions polaires (Par exemple une spirale: r(t) = t) + - Fonctions paramétriques (Par exemple un cercle: x(t) = cos(t) et y(t) = sin(t)) + +Interface: + - Traduction anglais/français selon la langue du navigateur + - Police d'écriture sans-serif + - Aperçu des fonctions implicites, polaires et paramétriques + - Dans la liste des fonctions, afficher la fonction ouverte dans l'éditeur + - Bug: L'éditeur permet d'éditer une fonction alors que la liste est vide + - Bug: Le choix du style de ligne par défaut ne fonctionne pas + - Bug: Bouton non cliquable près d'un message d'aide + +Outils: + - Outil point et tangente pour les fonctions polaires et paramétriques. + + +---- 1.5.x ---- + + - (1.5.1) Sauvegarde du graphique 3D + - Amélioration du menu des mises à jour, prise en compte de tous les serveur + - Menu pour afficher les options sauvegardées dans les cookies + - Correction des problèmes de l'échelle et de la grille du graphique + - Bug: L'outil déplacement est stoppé quand on passe sur une flèche de déplacement + + +---- 1.5 ---- + +Fonction: + - Pouvoir changer le style de chaque fonction (ligne, points, traits) + - Bug: l'outil déplacement est toujours actif quand on sort du graphique + - Bug: le bouton dupliquer dans l'éditeur fonctionne mal + - Condition initiale de la primitive à coté de F(x) dans l'éditeur + (utilisation de disabled="disabled" lorsque F(x) n'est pas coché) + - Bug: impossible de modifier la fonction principale avec l'éditeur de fonctions + - Nouveau menu pour modifier les valeurs par défaut des fonctions + +Affichage 3D: + - La partie de la fonction éloignée est maintenant dessinée après la partie proche + - La grille est plus visible + +Outils: + - Suppression du menu des outils + - Outils pour chaque fonction dans le menu "fonctions" + +Interface: + - Nouvelle interface. Onglets en haut du widget. Boutons "animés" + - Modifier l'aide pour qu'elle corresponde à la nouvelle interface + - Suppression de la sélection du texte sur les boutons et les onglets + - Joystick de déplacement en haut à gauche de l'affichage + - Choix des outils à la souris plus facile (ajout de boutons à gauche de l'affichage) + - Zone de texte au millieu de l'écran pour écrire facilement la première fonction + Focus automatique sur la zone + - Bulles d'aide + + +---- 1.4.x ---- + + - (1.4.3) ColorPicker: Récupérer la bonne couleur lors de l'ouverture + - ColorPicker: Pouvoir changer la couleur à partir des inputs + - ColorPicker: Choisir la couleur avec la roulette de la souris + - (1.4.2) Amélioration de la qualité et de la rapidité des études de fonction + - Pouvoir choisir la fonction à étudier + - Bug: impossible de modifier les fonctions depuis l'éditeur + - (1.4.1) Choisir la taille et la couleur de fond du graphique sauvegardé + - L'utilisation de ^ dans les fonctions n'est possible qu'avec un chiffre. + Il faudrait pouvoir écrire 2^x ou 4^(x+2) + - Bug: fermer le menu clique droit ajoute un point sur le graphique + + +---- 1.4 ---- + +Fonctions: + - Affichages canvas, svg et uniboard complétement refaits + - Grande amélioration des perfomances d'affichage 2D et 3D en définissant + les fonctions avec "new Function()" + - Amélioration des fonctions supplémentaires + - Suppression de la méthode d'affichage xpm + - Style de la fonction (continu, points, traits) + - Bug: la fonction 3D "sin(x)+cos(y)" afficher l'erreur "y is not defined"; + - Couleur aléatoire pour les nouvelles fonctions supplémentaires + +Interface: + - Menu clique droite sur le graphique + - Fenêtre d'édition des fonctions supplémentaires + - Désactiver le bouton de mise à jour automatique lorsqu'on utilise la version online du widget + (utiliser disabled="disabled") + +Outils: + - Outils pour le nouvel affichage + - Outil point refait avec canvas + - Déplacer les informations des outils (point et tangente) à coté de la souris + - Bug: le déplacement de l'affichage 3D à la souris va dans le mauvais sens + - Cliquer permet de conserver le point ou la tangente actuelle + - Tous les outils fonctionnent en plein écran + - Outils sur plusieurs fonctions + +ColorPicker: + - Bug: mauvaise couleur lorsque la teinte est à 240 ou 120 + +Général: + - Abandon du format xhtml pour passer à l'html5 + - Sauvegardes pour les nouvelles options + - Amélioration des messages d'erreur + - Amélioration du système de mise à jour + + +---- 1.3.x ---- + + - (1.3.4) ColorPicker: Slide barre permettant de changer la transparence + - ColorPicker: Reprogrammer en canvas + - (1.3.3) Sauvegarde du graphique + - Remplacer les ^ par pow() pour pouvoir écrire des fonctions plus facilement, + comme x^2 ou (4-x)^5 + - La couleur des fonctions supplémentaires n'est pas toujours juste + - (1.3.2) Modification de la taille des boutons + - (1.3.1) Mise à jour automatique + + +---- 1.3 ---- + +Fonctions: + - Amélioration des études de fonctions + - Pouvoir dessiner la dérivée seconde + - Corriger la tangente lorsque la zone d'affichage est modifiée + - Corriger l'échelle lors du déplacement de la fonction + - Ajout des fonctions sec, csc, arcsec, arccsc, sinh, cosh, tanh, coth, sech, csch + ainsi que arcsinh, arccosh, arctanh et arccoth + - Supprimer les traits où la fonction n'est pas définie + - Corriger l'outil point sur certaines fonctions (root(x,4)) + (problème lié à la fonction non-définie) + - Aire sous la fonction + - Corrigé bug canvas lors de l'agrandissement + - Les outils de la souris ne fonctionnent pas au survol des flèches de déplacement + +Interface: + - Sauvegarder les options + - Explication de la sauvegarde du graphique dans l'aide + - Guide d'utilisation + - Corrections dans l'aide + +ColorPicker: + - Aperçu de la couleur + +Autres: + - Modification de la précision par défaut + + +---- 1.2 ---- + +Fonctions: + - Dessiner plusieurs fonctions + - Historique + - Bug: certaines fonctions ne s'affichent pas correctement + exemples: pow(1-x*x*x, 1/3) , pow(x*x*x-3*x, 1/3) , pow(x*x*x-3*x+2, 1/3) + - Corriger l'affichage de la dérivée lorsqu'on change la précision d'affichage + - Corriger l'affichage des coordonnées + - Gestion des erreurs avec try and catch + - Outil tangente + +Interface: + - Défilement des menus + - Tests d'affichage + - Bouton de maximisation du widget + - Mise à Jour + + +Affichage 3D: + - Zoom + + + +------------------------------- + Idées d'améliorations futures +------------------------------- + +Fonctions: + - Ajouter les fonctions arcsech et arccsch + - Détecter et mettre en évidence les AV + - Progression pendant le calcul des fonctions 3D + - Progression pendant l'étude de fonction + - Écrire le nom de la fonction sur le graphique + - Récupérer la fonction à partir de l'URL, pour pouvoir + envoyer le lien d'une fonction à qqn + - Bug: la puissance de la fonction sin(x)*cos(x)^2 n'est pas remplacée juste + - Sauvegarder l'historique + - Afficher le type de fonction dans l'éditeur + - Ne pas choisir aléatoirement la même couleur qu'une couleur déjà utilisée + - Amélioration du dessin des fonctions implicites + - Aperçu des fonctions d'exemple avant de les ajouter au graphique + +Fonction 3D: + - Amélioration du choix de la couleur (interpolation entre 2 couleurs) + - Affichage 3D avec WebGL + +Outils: + - Outils point et tangente pour les fonctions implicites + - Personnalisation de la sauvegarde du graphique + - Magnétisme de l'outil point + - Calculer le volume du corps de rotation de la fonction + - Outil affichant le cercle tangent à la courbe (selon la seconde dérivée) + - Utiliser le point de la fonction le plus proche de la position de la souris + +Affichage: + - Style de grille: quadrillée, polaire, aucune + - Mode "trigonomètrique" pour que l'échelle soit affichée sur des multiples de PI + - Mode d'affichage ASCII + +Affichage uniboard: + - Finir de coder + - Choisir où placer le graphique + - Uniboard 3D + +Interface: + - Option pour redimensionner le widget dans OpenBoard / Sankoré + - Bulles d'aide + - Scroll dans uniboard + - Menu clique droit dans uniboard + - Le bouton actualiser dans le menu étude n'actualise pas forcément la bonne fonction + - Icone du bouton sauvegarder + - Cacher le joystick et les boutons des outils en mode plein écran après 5s + +ColorPicker: + - Dessiner avec svg lorsqu'on choisit svg dans les options + - Vérifier les valeurs entrées dans les inputs + - Annuler le choix de la couleur ne revient pas au menu précédent + +Général: + - Récupérer le numéro de la version en ligne pour comparer les versions + - Multithreading +!- Rendu des dessins progressivement de plus en plus précis + - Sauvegarder les options automatiquement, bouton reset dans le menu GraphMe + +Script portable: + - Créer un script pour intégrer le widget à n'importe quelle page web + - Personnalisation de la taille du widget portable + - Déplacement du widget comme une fenêtre +