Subversion Repositories Applications.dictionnaire

Rev

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