Subversion Repositories Applications.dictionnaire

Rev

Rev 16 | Rev 19 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 16 Rev 17
1
/*
1
/*
2
  Surligneur de mot (glossaire)
2
  Surligneur de mot (glossaire)
3
 
3
 
4
  0) tout d'abord la liste des mots est récupée (getMotsADefinitions) et stockée dans motsAyantDefinition
4
  0) tout d'abord la liste des mots est récupée (getMotsADefinitions) et stockée dans motsAyantDefinition
5
 
5
 
6
  1) chaque mot de la liste subie une transformation progressive en pattern:
6
  1) chaque mot de la liste subie une transformation progressive en pattern:
7
  * les mots de moins de 3 caractères sont inchangés (exemple: "nu")
7
  * les mots de moins de 3 caractères sont inchangés (exemple: "nu")
8
  * les mots finissant en "eux/euse" sont généricisés
8
  * les mots finissant en "eux/euse" sont généricisés
9
  * les autres mots se voit ajoutée la possibilité de matcher sur \\w{0,2}
9
  * les autres mots se voit ajoutée la possibilité de matcher sur \\w{0,2}
10
 
10
 
11
  2) puis plusieurs RegExp sont baties à partir de la liste de pattern préliminaires
11
  2) puis plusieurs RegExp sont baties à partir de la liste de pattern préliminaires
12
  * regexp_complete permet d'assurer que le mot:
12
  * regexp_complete permet d'assurer que le mot:
13
  ** commence en début de ligne
13
  ** commence en début de ligne
14
  ** suit un espace
14
  ** suit un espace
15
  ** ne suit pas un caractère
15
  ** ne suit pas un caractère
16
  [ mais ne s'assure pas que le mot ne suit PAS un caractère accentué, cf notes à propos de \\b et l'UTF-8 ]
16
  [ mais ne s'assure pas que le mot ne suit PAS un caractère accentué, cf notes à propos de \\b et l'UTF-8 ]
17
 
17
 
18
  * regexp_thin permet de s'assurer que le mot:
18
  * regexp_thin permet de s'assurer que le mot:
19
  ** ne se trouve pas déjà encapsulé dans un <span rel="" class="definition_term">X</span>
19
  ** ne se trouve pas déjà encapsulé dans un <span rel="" class="definition_term">X</span>
20
  ** ne se trouve pas comme attribut "rel" d'un <span rel="X" class="definition_term"></span>
20
  ** ne se trouve pas comme attribut "rel" d'un <span rel="X" class="definition_term"></span>
21
  ** n'est pas directement précédé d'un accent (parmis ceux utilisés dans la BDD, cf exclureSpan)
21
  ** n'est pas directement précédé d'un accent (parmis ceux utilisés dans la BDD, cf exclureSpan)
22
  ** n'est pas directement précédé d'un caractère alphabétique
22
  ** n'est pas directement précédé d'un caractère alphabétique
23
  Et tente d'extraire une partie de contexte significative (jusqu'à 24 caractère car initialement le
23
  Et tente d'extraire une partie de contexte significative (jusqu'à 24 caractère car initialement le
24
  test d'inclusion dans .definition_term était faire plus tardivement.
24
  test d'inclusion dans .definition_term était faire plus tardivement.
25
 
25
 
26
  3) remplacerDefinitions() prend la liste des nodes susceptibles de nécessiter un traitement
26
  3) remplacerDefinitions() prend la liste des nodes susceptibles de nécessiter un traitement
27
  et ignore ceux ayant déjà été traités [max_passages] fois (4 par défaut)
27
  et ignore ceux ayant déjà été traités [max_passages] fois (4 par défaut)
28
 
28
 
29
  4) pour chaque node:
29
  4) pour chaque node:
30
  * le compteur de passage est incrémenté
30
  * le compteur de passage est incrémenté
31
  * necessiteSubstitution() est appellé
31
  * necessiteSubstitution() est appellé
32
 
32
 
33
  == necessiteSubstitution() ==:
33
  == necessiteSubstitution() ==:
34
  ** Utilise regexp_thin pour extraire les mots restant à définir ainsi qu'une partie de leur contexte.
34
  ** Utilise regexp_thin pour extraire les mots restant à définir ainsi qu'une partie de leur contexte.
35
  ** Utilise regexp_complete pour extraire les mots au plus proche de leur bodures avec un moindre risque d'erreur
35
  ** Utilise regexp_complete pour extraire les mots au plus proche de leur bodures avec un moindre risque d'erreur
36
  ** exlue les faux positifs possibles de regexp_thin
36
  ** exlue les faux positifs possibles de regexp_thin
37
  ** renvoi les matches de regexp_thin (qui présente plus de contexte)
37
  ** renvoi les matches de regexp_thin (qui présente plus de contexte)
38
  =============================
38
  =============================
39
 
39
 
40
  * pour chaque correspondance retournée par necessiteSubstitution(),
40
  * pour chaque correspondance retournée par necessiteSubstitution(),
41
  le mot d'origine (tel que dans motsAyantDefinition)
41
  le mot d'origine (tel que dans motsAyantDefinition)
42
  est déterminé en utilisant le levenstein (un cache est mis en place, cf texte_to_mot() dans helpers.js).
42
  est déterminé en utilisant le levenstein (un cache est mis en place, cf texte_to_mot() dans helpers.js).
43
 
43
 
44
  * rechercherEtRemplacerMotParDefinition() est appelée pour effectuer la substitution dans le node
44
  * rechercherEtRemplacerMotParDefinition() est appelée pour effectuer la substitution dans le node
45
 
45
 
46
 
46
 
47
  Contraintes rencontrées:
47
  Contraintes rencontrées:
48
  1) exclure les mots déjà défini via la regexp général plutôt qu'au coup par coup.
48
  1) exclure les mots déjà défini via la regexp général plutôt qu'au coup par coup.
49
  2) vérifier les bordures
49
  2) vérifier les bordures
50
  3) vérifier bordure d'accents:
50
  3) vérifier bordure d'accents:
51
  \\b(é) dans une regexp ne peut matcher une chaîne JS UTF-8
51
  \\b(é) dans une regexp ne peut matcher une chaîne JS UTF-8
52
  http://stackoverflow.com/questions/2881445/utf-8-word-boundary-regex-in-javascript
52
  http://stackoverflow.com/questions/2881445/utf-8-word-boundary-regex-in-javascript
53
*/
53
*/
54
 
54
 
55
var dictionnaire = new Array();
55
var dictionnaire = new Array();
56
var motsAyantDefinition = null;
56
var motsAyantDefinition = null;
57
var mouseX = null;
57
var mouseX = null;
58
var mouseY = null;
58
var mouseY = null;
59
var active = false;
59
var active = false;
60
var set = '#zone-droite p, #zone-droite span:not(.definition_term), #zone-droite td, #zone-droite pre, #zone-droite div, #zone-droite li';
60
var set = '#zone-droite p, #zone-droite span:not(.definition_term), #zone-droite td, #zone-droite pre, #zone-droite div, #zone-droite li';
61
var urlPage = window.location.href;
61
var urlPage = window.location.href;
62
 
62
 
63
// Note: utiliser \\b plutôt que \\W pour matcher les bordures de mots
63
// Note: utiliser \\b plutôt que \\W pour matcher les bordures de mots
64
// en incluant début et fin de ligne
64
// en incluant début et fin de ligne
65
var regexp_complete = null;
65
var regexp_complete = null;
66
var regexp_thin = null;
66
var regexp_thin = null;
67
 
67
 
68
// nombre maximum de passages de la détection sur un node donné
68
// nombre maximum de passages de la détection sur un node donné
69
var max_passages = 4;
69
var max_passages = 4;
70
 
70
 
71
// echo $(mysql<<<"SELECT cle FROM definitions"|tr "[a-z,-]" o|sed -e 's/o//g' -e "s/\(.\)/\1\n/g"|sort -u)
71
// echo $(mysql<<<"SELECT cle FROM definitions"|tr "[a-z,-]" o|sed -e 's/o//g' -e "s/\(.\)/\1\n/g"|sort -u)
72
// ç é è ê î ï ô (2013/07/03)
72
// ç é è ê î ï ô (2013/07/03)
73
// TODO: http://xregexp.com/plugins/
73
// TODO: http://xregexp.com/plugins/
74
var	exclureSpan = '([^' +
74
var	exclureSpan = '([^' +
75
	'(?:class="definition_term">)' + // mot contextualisé déjà dictionnarisé
75
	'(?:class="definition_term">)' + // mot contextualisé déjà dictionnarisé
76
	'(?:rel=")' + // la valeur du rel="" d'un mot déjà dictionnarisé
76
	'(?:rel=")' + // la valeur du rel="" d'un mot déjà dictionnarisé
77
	'çéèêîïô' + // les accents, non-traités dans la regexp générale et qui ne doivent pas
77
	'çéèêîïô' + // les accents, non-traités dans la regexp générale et qui ne doivent pas
78
	// être pris pour des bordures de mots
78
	// être pris pour des bordures de mots
79
	'\\w' +
79
	'\\w' +
80
	']|^){1,24}';
80
	']|^){1,24}';
81
 
81
 
82
 
82
 
83
function afficherLienDefinitions() {
83
function afficherLienDefinitions() {
84
	html = '<div id="conteneur_activation_definition"><a href="#">rechercher les définitions</a></div>';
84
	html = '<div id="conteneur_activation_definition"><a href="#">rechercher les définitions</a></div>';
85
	$('#conteneur_activation_definition').live('click', function(event) {
85
	$('#conteneur_activation_definition').live('click', function(event) {
86
		event.preventDefault();
86
		event.preventDefault();
87
		//supprimerToutesDefinitions();
87
		//supprimerToutesDefinitions();
88
		if(motsAyantDefinition == null) {
88
		if(motsAyantDefinition == null) {
89
			getMotsADefinitions();
89
			getMotsADefinitions();
90
			ajouterListenerDefinitions();
90
			ajouterListenerDefinitions();
91
		} else {
91
		} else {
92
			$(set).remplacerDefinitions(motsAyantDefinition);
92
			$(set).remplacerDefinitions(motsAyantDefinition);
93
		}
93
		}
94
	});
94
	});
95
	$('body').append(html);
95
	$('body').append(html);
96
}
96
}
97
 
97
 
98
$.fn.remplacerDefinitions = function(mots) {
98
$.fn.remplacerDefinitions = function(mots) {
99
    this.each(function() {
99
    this.each(function() {
100
        $(this).contents().filter(function() {
100
        $(this).contents().filter(function() {
101
        	return (this.nodeType == 3 && ! (($(this).data("count") || 0) > max_passages));
101
        	return (this.nodeType == 3 && ! (($(this).data("count") || 0) > max_passages));
102
        }).each(function() {
102
        }).each(function() {
103
			$(this).data("count", ($(this).data("count") || 0) + 1);
103
			$(this).data("count", ($(this).data("count") || 0) + 1);
104
			ttexte = texte = $(this).text();
104
			ttexte = texte = $(this).text();
105
			matches_list = necessiteSubstitution(texte)[0];
105
			matches_list = necessiteSubstitution(texte)[0];
106
			if(!matches_list) return true; // TODO: data("count") = max_passages ?
106
			if(!matches_list) return true; // TODO: data("count") = max_passages ?
107
 
107
 
108
			for(i in matches_list) {
108
			for(i in matches_list) {
109
				couple = matches_list[i];
109
				couple = matches_list[i];
110
				mot_contextualise = couple[2];
110
				mot_contextualise = couple[2];
111
				cle = texte_to_mot(mot_contextualise);
111
				cle = texte_to_mot(mot_contextualise);
112
 
112
 
113
				if(! (ttexte = rechercherEtRemplacerMotParDefinition(texte, cle, couple))) break;
113
				if(! (ttexte = rechercherEtRemplacerMotParDefinition(texte, cle, couple))) break;
114
				texte = ttexte;
114
				texte = ttexte;
115
			}
115
			}
116
			$(this).replaceWith(texte);
116
			$(this).replaceWith(texte);
117
		});
117
		});
118
	});
118
	});
119
	return this;
119
	return this;
120
}
120
}
121
 
121
 
122
function rechercherEtRemplacerMotParDefinition(texte, mot, couple) {
122
function rechercherEtRemplacerMotParDefinition(texte, mot, couple) {
123
	var full_contexte = couple[0],
123
	var full_contexte = couple[0],
124
	prefix_solo = couple[1],
124
	prefix_solo = couple[1],
125
	mot_contextualise = couple[2];
125
	mot_contextualise = couple[2];
126
 
126
 
127
	// cf exclureSpan
127
	// cf exclureSpan
128
	if(new RegExp('((?:class="definition_term">)|(?:rel=")|(?:[çéèêîïô]))(' + mot + "\\w{0,2}" + ')' + "\\b", "ig").test(full_contexte)) return;
128
	if(new RegExp('((?:class="definition_term">)|(?:rel=")|(?:[çéèêîïô]))(' + mot + "\\w{0,2}" + ')' + "\\b", "ig").test(full_contexte)) return;
129
 
129
 
130
	templateMotADefinition = formaterTemplateMotADefinition(mot_contextualise, mot);
130
	templateMotADefinition = formaterTemplateMotADefinition(mot_contextualise, mot);
131
	bloc_replace = full_contexte.replace(mot_contextualise, templateMotADefinition);
131
	bloc_replace = full_contexte.replace(mot_contextualise, templateMotADefinition);
132
	return texte.replace(full_contexte, bloc_replace);
132
	return texte.replace(full_contexte, bloc_replace);
133
}
133
}
134
 
134
 
135
 
135
 
136
function necessiteSubstitution(texte) {
136
function necessiteSubstitution(texte) {
137
	var liste = [], liste_complete = [];
137
	var liste = [], liste_complete = [];
138
 
138
 
139
	// regexp d'extraction du contexte, sans limite aux bords de "mot",
139
	// regexp d'extraction du contexte, sans limite aux bords de "mot",
140
	// peu amener des faux positifs, et notamment ne pas matcher au mieux.
140
	// peu amener des faux positifs, et notamment ne pas matcher au mieux.
141
	// Eg: subsessiles match "sessile" et non "subsessile".
141
	// Eg: subsessiles match "sessile" et non "subsessile".
142
	while( (matches_c = regexp_thin.exec(texte)) ) liste.push(matches_c);
142
	while( (matches_c = regexp_thin.exec(texte)) ) liste.push(matches_c);
143
	if(liste.length == 0) return [null];
143
	if(liste.length == 0) return [null];
144
 
144
 
145
	// regexp de validation des bordure de mots, ne conserve que des matches correct
145
	// regexp de validation des bordure de mots, ne conserve que des matches correct
146
	// vis-à-vis de la bordure gauche
146
	// vis-à-vis de la bordure gauche
147
	while( (matches_c = regexp_complete.exec(texte)) ) liste_complete.push(matches_c[1]);
147
	while( (matches_c = regexp_complete.exec(texte)) ) liste_complete.push(matches_c[1]);
148
 
148
 
149
	// si une match n'est pas dans le tableau des mots autorisés (indexOf)
149
	// si une match n'est pas dans le tableau des mots autorisés (indexOf)
150
	for(var i = 0; i < liste.length; i++) {
150
	for(var i = 0; i < liste.length; i++) {
151
		if($.inArray(liste[i][2], liste_complete) == -1) liste.splice(i, 1);
151
		if($.inArray(liste[i][2], liste_complete) == -1) liste.splice(i, 1);
152
	}
152
	}
153
 
153
 
154
	return [liste, liste_complete]
154
	return [liste, liste_complete]
155
}
155
}
156
 
156
 
157
function getMotsADefinitions() {
157
function getMotsADefinitions() {
158
	$.ajax({
158
	$.ajax({
159
		url: URL_BASE_SERVICE+'mots/', // provient de dictionnaire.config.js
159
		url: URL_BASE_SERVICE+'mots/', // provient de dictionnaire.config.js
160
		success: function(data) {
160
		success: function(data) {
161
			motsAyantDefinition = data;
161
			motsAyantDefinition = data;
162
			batirRegexp(motsAyantDefinition);
162
			batirRegexp(motsAyantDefinition);
163
			$(set).remplacerDefinitions(motsAyantDefinition);
163
			$(set).remplacerDefinitions(motsAyantDefinition);
164
		},
164
		},
165
		dataType: "JSON",
165
		dataType: "JSON",
166
		global: false
166
		global: false
167
	});
167
	});
168
}
168
}
169
 
169
 
170
function getMotsADefinitionsEtRemplacer() {
170
function getMotsADefinitionsEtRemplacer() {
171
	if(motsAyantDefinition == null) {
171
	if(motsAyantDefinition == null) {
172
		getMotsADefinitions();
172
		getMotsADefinitions();
173
	} else {
173
	} else {
174
		if(regexp_complete == null || regexp_thin == null) {
174
		if(regexp_complete == null || regexp_thin == null) {
175
			batirRegexp(motsAyantDefinition);
175
			batirRegexp(motsAyantDefinition);
176
		}
176
		}
177
		$(set).remplacerDefinitions(motsAyantDefinition);
177
		$(set).remplacerDefinitions(motsAyantDefinition);
178
	}
178
	}
179
}
179
}
-
 
180
 
-
 
181
// update definitions set cle = trim(cle);
-
 
182
// select cle from definitions where cle like '%é' COLLATE 'utf8_bin';
180
 
183
// select cle from definitions where cle like '% ou %' COLLATE 'utf8_bin';
181
function batirRegexp(mots) {
184
function batirRegexp(mots) {
182
	var restr = '';
185
	var restr = '';
183
	$.each(mots, function(index, mot) {
186
	$.each(mots, function(index, mot) {
184
		if(restr != '') restr += '|';
187
		if(restr != '') restr += '|';
-
 
188
 
-
 
189
		if(mot == 'ph') {
-
 
190
			restr += 'ph[^.]';
185
 
191
		}
186
		if(mot.length < 3) {
192
		else if(mot.length < 3) {
187
			restr += mot;
193
			restr += mot;
-
 
194
		}
-
 
195
		// confluent => confluentes
-
 
196
		else if(mot.substr(-2) == 'ts') {
-
 
197
			restr += mot.slice(0, -1) + "e?s?";
-
 
198
		}
-
 
199
		else if(mot.substr(-3) == 'ore') {
-
 
200
			restr += mot + "s?";
188
		}
201
		}
189
		// gestion masculin/féminin en "eux/euse"
202
		// gestion masculin/féminin en "eux/euse"
190
		else if(mot.substr(-1) == 'x') {
203
		else if(mot.substr(-1) == 'x') {
191
			restr += mot.slice(0, -1) + "(?:x|se|ses)";
204
			restr += mot.slice(0, -1) + "(?:x|se|ses)";
192
		}
205
		}
193
		else if(mot.substr(-4) == 'euse') { // TODO: fix DB
206
		else if(mot.substr(-4) == 'euse') { // TODO: fix DB
194
			restr += mot.slice(0, -2) + "(?:x|se|ses)";
207
			restr += mot.slice(0, -2) + "(?:x|se|ses)";
195
		}
208
		}
-
 
209
		else if(mot.substr(-2) == 'ée') {
-
 
210
			restr += mot.slice(0, -1) + "e?s?";
-
 
211
		}
-
 
212
		else if(mot.substr(-1) == 'é') {
-
 
213
			restr += mot + "e?s?";
-
 
214
		}
-
 
215
		// verbe vs nom
-
 
216
		else if(mot.substr(-4) == 'orme') {
-
 
217
			restr += mot + "s?";
-
 
218
		}
-
 
219
		// verbe 3è p.pluriel en DB: ne devraient pas exister
-
 
220
		// mais rampant => rampante
-
 
221
		else if(mot.substr(-2) == 'nt') {
-
 
222
			restr += mot + "e?s?";
-
 
223
		}
196
		else
224
		else {
-
 
225
			// moins de faux positifs:
-
 
226
			// restr += mot + "(?:[ées]){0,2}";
-
 
227
			// autrement:
197
			restr += mot + "\\w{0,2}";
228
			restr += mot + "\\w{0,2}";
-
 
229
		}
198
	});
230
	});
199
 
231
 
200
	regexp_complete = new RegExp("(?:\\s|^|\\W)(" + restr + ")\\b", "ig"); // accents
232
	regexp_complete = new RegExp("(?:\\s|^|\\W)(" + restr + ")\\b", "ig"); // accents
201
	regexp_thin = new RegExp(exclureSpan + "(" + restr + ")\\b", "ig");
233
	regexp_thin = new RegExp(exclureSpan + "(" + restr + ")\\b", "ig");
202
}
234
}
203
 
235
 
204
function formaterTemplateMotADefinition(motOriginal, motSimplifie) {
236
function formaterTemplateMotADefinition(motOriginal, motSimplifie) {
205
	definitionHtml = '<span rel="'+motSimplifie+'" class="definition_term">'
237
	definitionHtml = '<span rel="'+motSimplifie+'" class="definition_term">'
206
		+motOriginal+
238
		+motOriginal+
207
		'</span>';
239
		'</span>';
208
	return definitionHtml;
240
	return definitionHtml;
209
}
241
}
210
 
242
 
211
function ajouterListenerDefinitions() {
243
function ajouterListenerDefinitions() {
212
	$('.definition_term').live('mouseover mouseout', function(event) {
244
	$('.definition_term').live('mouseover mouseout', function(event) {
213
		if (event.type == 'mouseover') {
245
		if (event.type == 'mouseover') {
214
			event.preventDefault();
246
			event.preventDefault();
215
			afficherDefinition($(this));
247
			afficherDefinition($(this));
216
		} else {
248
		} else {
217
			cacherPopupsDefinitions();
249
			cacherPopupsDefinitions();
218
		}
250
		}
219
	});
251
	});
220
}
252
}
221
 
253
 
222
function afficherDefinition(element) {
254
function afficherDefinition(element) {
223
	mot = element.attr('rel');
255
	mot = element.attr('rel');
224
	if(dictionnaire[mot] != null) {
256
	if(dictionnaire[mot] != null) {
225
		element.after(formaterDefinition(element));
257
		element.after(formaterDefinition(element));
226
		afficherPopupDefinition();
258
		afficherPopupDefinition();
227
	} else {
259
	} else {
228
		chargerDefinitionDistante(element);
260
		chargerDefinitionDistante(element);
229
	}
261
	}
230
}
262
}
231
 
263
 
232
function chargerDefinitionDistante(element) {
264
function chargerDefinitionDistante(element) {
233
	date = new Date();
265
	date = new Date();
234
	mot = element.attr('rel');
266
	mot = element.attr('rel');
235
	$.ajax({
267
	$.ajax({
236
		url: URL_BASE_SERVICE+'def/'+mot, // provient de dictionnaire.config.js
268
		url: URL_BASE_SERVICE+'def/'+mot, // provient de dictionnaire.config.js
237
		success: function(data) {
269
		success: function(data) {
238
			retour = data;
270
			retour = data;
239
			definition = retour.valeur;
271
			definition = retour.valeur;
240
			dictionnaire[mot] = definition;
272
			dictionnaire[mot] = definition;
241
			element.after(formaterDefinition(element));
273
			element.after(formaterDefinition(element));
242
			afficherPopupDefinition();
274
			afficherPopupDefinition();
243
		},
275
		},
244
		dataType: "JSON",
276
		dataType: "JSON",
245
		global: false,
277
		global: false,
246
		async: false
278
		async: false
247
	});
279
	});
248
}
280
}
249
 
281
 
250
function afficherPopupDefinition() {
282
function afficherPopupDefinition() {
251
	$(".definition_container").css({'top':mouseY + 20,'left':mouseX - 10}).fadeIn('slow');
283
	$(".definition_container").css({'top':mouseY + 20,'left':mouseX - 10}).fadeIn('slow');
252
}
284
}
253
 
285
 
254
function cacherPopupsDefinitions() {
286
function cacherPopupsDefinitions() {
255
	$(".definition_container").remove();
287
	$(".definition_container").remove();
256
}
288
}
257
 
289
 
258
function formaterDefinition(element) {	
290
function formaterDefinition(element) {	
259
	mot = element.attr('rel');
291
	mot = element.attr('rel');
260
	data = dictionnaire[mot];
292
	data = dictionnaire[mot];
261
	defHtml = '<div class="definition_container">'+
293
	defHtml = '<div class="definition_container">'+
262
		'<span class="definition_container_fleche"></span>'+
294
		'<span class="definition_container_fleche"></span>'+
263
		'<span class="definition">'+data+'</span>'+
295
		'<span class="definition">'+data+'</span>'+
264
		'</div>';
296
		'</div>';
265
	return defHtml;
297
	return defHtml;
266
}
298
}
267
 
299
 
268
function supprimerToutesDefinitions() {
300
function supprimerToutesDefinitions() {
269
	$('.definition_term').each(function() {
301
	$('.definition_term').each(function() {
270
		$(this).replaceWith($(this).html());
302
		$(this).replaceWith($(this).html());
271
	});
303
	});
272
	cacherPopupsDefinitions();
304
	cacherPopupsDefinitions();
273
}
305
}
274
 
306
 
275
$(document).bind('mousemove', function(e){
307
$(document).bind('mousemove', function(e){
276
	mouseX = e.pageX;
308
	mouseX = e.pageX;
277
    mouseY = e.pageY - $(window).scrollTop();
309
    mouseY = e.pageY - $(window).scrollTop();
278
});
310
});
279
 
311
 
280
$(document).ajaxStop(function() {
312
$(document).ajaxStop(function() {
281
	urlPage = $(this)[0].URL;
313
	urlPage = $(this)[0].URL;
282
	getMotsADefinitionsEtRemplacer();
314
	getMotsADefinitionsEtRemplacer();
283
});
315
});
284
 
316
 
285
$(document).ready(function() {
317
$(document).ready(function() {
286
	$.ajax({
318
	$.ajax({
287
		url: URL_BASE_SERVICE + "../../../scripts/helpers.js",
319
		url: URL_BASE_SERVICE + "../../../scripts/helpers.js",
288
		dataType: "script",
320
		dataType: "script",
289
		global: false
321
		global: false
290
	});
322
	});
291
	getMotsADefinitionsEtRemplacer();
323
	getMotsADefinitionsEtRemplacer();
292
	ajouterListenerDefinitions();
324
	ajouterListenerDefinitions();
293
});
325
});