Subversion Repositories Applications.dictionnaire

Rev

Rev 5 | Rev 7 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 aurelien 1
var dictionnaire = new Array();
3 aurelien 2
var motsAyantDefinition = null;
1 aurelien 3
var mouseX = null;
4
var mouseY = null;
3 aurelien 5
var active = false;
1 aurelien 6
 
7
function getUrlBaseService() {
3 aurelien 8
	// provient de dictionnaire.config.js
9
	return URL_BASE_SERVICE;
1 aurelien 10
}
11
 
12
function supprimerAccents(str) {
13
    var rExps=[
14
    {re:/[\xC0-\xC6]/g, ch:'A'},
15
    {re:/[\xE0-\xE6]/g, ch:'a'},
16
    {re:/[\xC8-\xCB]/g, ch:'E'},
17
    {re:/[\xE8-\xEB]/g, ch:'e'},
18
    {re:/[\xCC-\xCF]/g, ch:'I'},
19
    {re:/[\xEC-\xEF]/g, ch:'i'},
20
    {re:/[\xD2-\xD6]/g, ch:'O'},
21
    {re:/[\xF2-\xF6]/g, ch:'o'},
22
    {re:/[\xD9-\xDC]/g, ch:'U'},
23
    {re:/[\xF9-\xFC]/g, ch:'u'},
24
    {re:/[\xD1]/g, ch:'N'},
25
    {re:/[\xF1]/g, ch:'n'} ];
26
    for(var i=0, len=rExps.length; i<len; i++)
27
            str=str.replace(rExps[i].re, rExps[i].ch);
28
    return str;
29
};
30
 
31
// c'est moche mais le mauvais support de l'unicode dans
32
// javascript ne me permet pas de faire mieux
33
function etendreChaineAccents(str) {
34
    return str.replace('a',"(a|à|á|â|ã|ä|å)")
35
    .replace('e',"(e|è|é|ê|ë)")
36
    .replace('i',"(i|ì|í|î|ï)")
37
    .replace('o',"(o|ò|ó|ô|õ|ö)")
38
    .replace('u',"(u|ù|ú|û|ü)")
39
    .replace('y',"(ýÿ)")
40
    .replace('a',"(a|à|á|â|ã|ä|å)")
41
    .replace('æ',"(ae|æ)")
42
    .replace('ç',"(ç|c)")
43
    .replace('ñ',"(ñ|n)")
44
    .replace('œ',"(œ|oe)");
45
}
46
 
3 aurelien 47
function afficherLienDefinitions() {
48
	html = '<div id="conteneur_activation_definition"><a href="#">rechercher les définitions</a></div>';
49
	$('#conteneur_activation_definition').live('click', function(event) {
50
		event.preventDefault();
51
		supprimerToutesDefinitions();
52
		if(motsAyantDefinition == null) {
53
			getMotsADefinitions();
54
		} else {
55
			ajouterDefinitions(motsAyantDefinition);
56
		}
57
	});
58
	$('body').append(html);
59
}
60
 
1 aurelien 61
function normaliserMotPourRecherche(str) {
62
	str = supprimerAccents(str);
63
	str = etendreChaineAccents(str);
64
	return str;
65
}
66
 
3 aurelien 67
$.fn.remplacerDefinitions = function(mots) {
1 aurelien 68
    this.each(function() {
69
          $(this).contents().filter(function() {
3 aurelien 70
        	  return this.nodeType == 3;
1 aurelien 71
          }).each(function() {
3 aurelien 72
        	  element = $(this);
73
        	  texte = element.text();
74
        	  if(texte != "") {
75
	        	  $.each(mots, function(index, valeur) {
6 raphael 76
	        		  texte = rechercherEtRemplacerMotParDefinition(texte, valeur);
3 aurelien 77
	        	  });
78
	        	  element.replaceWith(texte);
79
        	  }
1 aurelien 80
          });
81
    });
82
    return this;
83
}
84
 
3 aurelien 85
function rechercherEtRemplacerMotParDefinition(texte, mot) {
86
	exclureSpan = '[^(?:class="definition_term">)]';
87
    regExp = new RegExp(exclureSpan+"[ |,|-|;|.]+("+mot+")[a-zA-Z]{1}", 'ig');
88
  	termeDansTexte = regExp.exec(texte);
89
  	if(termeDansTexte != null && termeDansTexte.length > 1) {
90
	  	motOriginal = termeDansTexte[1];
5 aurelien 91
		templateMotADefinition = formaterTemplateMotADefinition(motOriginal);
3 aurelien 92
		texte = texte.replace(motOriginal, templateMotADefinition);
93
  	}
94
 
95
  	return texte;
96
}
97
 
98
function getMotsADefinitions() {
1 aurelien 99
	$.ajax({
100
		url: getUrlBaseService()+'mots/',
101
		success: function(data) {
102
			motsAyantDefinition = data;
103
			ajouterDefinitions(motsAyantDefinition);
104
		},
105
		dataType: "JSON",
106
		global: false
107
	});
108
 
109
	ajouterListenerDefinitions();
110
}
111
 
112
function ajouterDefinitions(motsAvecDefinitions) {
5 aurelien 113
	set = 'p, span, td, pre, div';
3 aurelien 114
	$(set).remplacerDefinitions(motsAvecDefinitions);
1 aurelien 115
}
116
 
5 aurelien 117
function formaterTemplateMotADefinition(motOriginal) {
118
	motSimplifie = supprimerAccents(motOriginal);
1 aurelien 119
	definitionHtml = '<span rel="'+motSimplifie+'" class="definition_term">'
120
	+motOriginal+
121
	'</span>';
122
	return definitionHtml;
123
}
124
 
125
function ajouterListenerDefinitions() {
126
	$('.definition_term').live('mouseover mouseout', function(event) {
127
		  if (event.type == 'mouseover') {
128
			  event.preventDefault();
129
			  afficherDefinition($(this));
130
		  } else {
131
			  cacherPopupsDefinitions();
132
		  }
133
	});
134
}
135
 
136
function afficherDefinition(element) {
137
	mot = element.attr('rel');
138
	if(dictionnaire[mot] != null) {
3 aurelien 139
		element.after(formaterDefinition(element));
1 aurelien 140
		afficherPopupDefinition();
141
	} else {
142
		chargerDefinitionDistante(element);
143
	}
144
}
145
 
3 aurelien 146
function chargerDefinitionDistante(element) {
147
	date = new Date();
5 aurelien 148
	mot = element.attr('rel');
1 aurelien 149
	$.ajax({
150
		url: getUrlBaseService()+'def/'+mot,
151
		success: function(data) {
152
			retour = data;
153
			definition = retour.valeur;
154
			dictionnaire[mot] = definition;
3 aurelien 155
			element.after(formaterDefinition(element));
1 aurelien 156
			afficherPopupDefinition();
157
		},
158
		dataType: "JSON",
159
		global: false
160
	});
161
}
162
 
163
function afficherPopupDefinition() {
164
	$(".definition_container").css({'top':mouseY + 20,'left':mouseX - 10}).fadeIn('slow');
165
}
166
 
167
function cacherPopupsDefinitions() {
168
	$(".definition_container").remove();
169
}
170
 
171
function formaterDefinition(element) {
172
	mot = element.attr('rel');
173
	data = dictionnaire[mot];
174
	defHtml = '<div class="definition_container">'+
175
				'<span class="definition_container_fleche"></span>'+
3 aurelien 176
				'<span class="definition">'+data+'</span>'+
1 aurelien 177
				'</div>';
178
	return defHtml;
179
}
180
 
181
function supprimerToutesDefinitions() {
182
	$('.definition_term').each(function() {
183
		$(this).replaceWith($(this).html());
184
	});
185
	cacherPopupsDefinitions();
186
}
187
 
188
$(document).bind('mousemove', function(e){
189
	mouseX = e.pageX;
190
    mouseY = e.pageY - $(window).scrollTop();
191
});
192
 
193
$(document).ready(function() {
5 aurelien 194
	getMotsADefinitions();
3 aurelien 195
	afficherLienDefinitions();
1 aurelien 196
});
197