2 // Copyright 2008 Grégory Burri
4 // This file is part of Euphorik.
6 // Euphorik is free software: you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation, either version 3 of the License, or
9 // (at your option) any later version.
11 // Euphorik is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License
17 // along with Euphorik. If not, see <http://www.gnu.org/licenses/>.
20 * Contient la base javascript pour le site euphorik.ch.
21 * Chaque page possède son propre fichier js nommé "page<nom de la page>.js".
26 // tout euphorik est contenu dans cet objet
28 // ;; euphorik.include =
29 //;; euphorik.include = function(f) { var s = document.createElement('script'); s.type = 'text/javascript'; s.src = "js/" + f + ".js"; document.getElementsByTagName('head')[0].appendChild(s); }
32 // version jQuery : function(f) { jQuery.ajax({async : false, url : "js/" + f + ".js", dataType : "script"}) }
33 // mais comme il n'est pas encore chargé...
34 ;; euphorik
.include = function(f
) {
35 ;; var req
, url
= 'js/' + f
+ '.js'
36 ;; if (window
.XMLHttpRequest
) {
37 ;; req
= new XMLHttpRequest(); req
.open("GET", url
, false); req
.send(null);
38 ;; } else if (window
.ActiveXObject
) {
39 ;; req
= new ActiveXObject((navigator
.userAgent
.toLowerCase().indexOf('msie 5') != -1) ? "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP");
40 ;; if (req
) { req
.open("GET", url
, false); req
.send(); }
42 ;; if (req
!==false) { if (req
.status
==200) { window
.eval(req
.responseText
); } else if (req
.status
==404) { alert("erreur de chargement (404) de : " + url
) } }
45 ;; euphorik
.include("jquery");
46 ;; euphorik
.include("jquery.lightbox");
47 ;; euphorik
.include("md5");
48 ;; euphorik
.include("json2");
49 ;; euphorik
.include("comet");
51 ;; euphorik
.include("conf");
52 ;; euphorik
.include("util");
53 ;; euphorik
.include("formateur");
54 ;; euphorik
.include("pages");
55 ;; euphorik
.include("client");
57 ;; euphorik
.include("pageMinichat/pageMinichat");
58 ;; euphorik
.include("pageMinichat/conversation");
59 ;; euphorik
.include("pageMinichat/conversations");
60 ;; euphorik
.include("pageMinichat/message");
61 ;; euphorik
.include("pageMinichat/commandes");
62 ;; euphorik
.include("pageAdmin");
63 ;; euphorik
.include("pageProfile");
64 ;; euphorik
.include("pageRegister");
65 ;; euphorik
.include("pageAbout");
67 // tout un tas d'améliorations de JavaScript ;)
69 * Pour chaque propriété de l'objet execute f(p, v) ou p est le nom de la propriété et v sa valeur.
70 * Ne parcours pas les propriétés des prototypes.
71 * FIXME : Normalement : Object.prototype.each = function(f) mais non supporté par jquery
73 //Object.prototype.each = function(f) {
74 var objectEach = function(o
, f
) {
76 if (o
.hasOwnProperty(k
)) {
82 var objectMemberCount = function(o
) {
85 if (o
.hasOwnProperty(k
)) {
92 Array
.prototype.each = function(f
) {
93 for (var i
= 0; i
< this.length
; i
++) {
98 Array
.prototype.map = function(f
) {
99 for (var i
= 0; i
< this.length
; i
++) {
104 String
.prototype.trim = function() {
105 return jQuery
.trim(this) // anciennement : this.replace(/^\s+|\s+$/g, "");
108 String
.prototype.ltrim = function() {
109 return this.replace(/^\s+/, "");
112 String
.prototype.rtrim = function() {
113 return this.replace(/\s+$/, "");
118 * Voir : http://www.coolpage.com/developer/javascript/Correct%20OOP%20for%20Javascript.html
122 * function Mammal(name) {
126 * Cat.Inherits(Mammal);
127 * function Cat(name) {
128 * this.Super(Mammal, name);
131 /*Object.prototype.Super = function(parent) {
132 if(arguments.length > 1) {
133 parent.apply( this, Array.prototype.slice.call( arguments, 1 ) );
138 Function.prototype.Inherits = function(parent) {
139 this.prototype = new parent();
140 this.prototype.constructor = this;
145 ///////////////////////////////////////////////////////////////////////////////////////////////////
152 var formateur
= new euphorik
.Formateur()
153 var util
= new euphorik
.Util(formateur
)
154 var client
= new euphorik
.Client(util
)
155 var pages
= new euphorik
.Pages()
158 // connexion vers le serveur (utilise un cookie qui traine)
159 client
.connexionCookie()
161 $("#menuCss").change(function(){ client
.setCss("styles/" + $("option:selected", this).attr("value") + "/euphorik.css")})
163 // FIXME : ne fonctionne pas sous opera
164 // voir : http://dev.jquery.com/ticket/2892#preview
165 $(window
).unload(function(){client
.flush()})
167 $("#menu .minichat").click(function(){ pages
.afficherPage("minichat") })
168 $("#menu .admin").click(function(){ pages
.afficherPage("admin") })
169 $("#menu .profile").click(function(){ pages
.afficherPage("profile") })
170 $("#menu .logout").click(function(){
171 util
.messageDialogue("Êtes-vous sur de vouloir vous délogger ?", euphorik
.Util
.messageType
.question
,
174 client
.deconnexion();
175 pages
.afficherPage("minichat", true)
181 $("#menu .register").click(function(){ pages
.afficherPage("register") })
182 $("#menu .about").click(function(){ pages
.afficherPage("about") })
184 // TODO : simplifier et pouvoir créer des liens par exemple : <span class="lien" href="conditions">Conditions d'utilisation</span>
185 $("#footer .conditions").click(function(){ pages
.afficherPage("conditions_utilisation") })
187 pages
.ajouterPage(new euphorik
.PageMinichat(client
, formateur
, util
))
188 pages
.ajouterPage(new euphorik
.PageAdmin(client
, formateur
, util
))
189 pages
.ajouterPage(new euphorik
.PageProfile(client
, formateur
, util
))
190 pages
.ajouterPage(new euphorik
.PageRegister(client
, formateur
, util
))
191 pages
.ajouterPage(new euphorik
.PageAbout(client
, formateur
, util
))
192 pages
.ajouterPage("conditions_utilisation")
194 pages
.afficherPage("minichat")