source: spip-zone/_galaxie_/code.spip.net/autodoc/trunk/templates/zora/content/recherche.twig @ 75168

Last change on this file since 75168 was 75168, checked in by marcimat@…, 6 years ago

Mieux protéger la variable $q en js

File size: 3.3 KB
Line 
1<ul class="breadcrumb">
2        <li><a href="{{ path(project) }}">Projet</a> <span class="divider">/</span></li>
3        <li class="active titre">Recherche</li>
4</ul>
5
6<h1 id="titre">Recherche</h1>
7
8<script type='text/javascript'>
9;(function($){
10$(document).ready(function() {
11        // elements de recherche
12        var $datasearch;
13
14        $affiche_recherche = function() {
15
16                $('#results').empty();
17                $('#titre em').remove();
18                $('.breadcrumb li.search').remove();
19                $('.breadcrumb li.titre .divider').remove();
20               
21                $q = $.getURLParameter('q');
22                $_q = $('<div></div>').text($q).html();
23                if ($_q) {
24                        $('#recherche input').val($q);
25                        $('#titre').append('<em> « ' + $_q + ' »</em>')
26                        $('.breadcrumb .titre')
27                                .append(' <span class="divider">/</span>')
28                                .after('<li class="search active">' + $_q + '</li>')
29                        $('#results').append(
30                                "<div class='chargement'>Recherche en cours…</div>"
31                        );
32                }
33        }
34
35        $.get("{{ path("recherche_data.xml") }}", function(xml) {
36                $datasearch = $( xml ).find('items item');
37        });
38
39        $recherche = function() {
40                $q = $.getURLParameter('q');
41                $_q = $('<div></div>').text($q).html();
42                if ($_q) {
43                        $q = $q.replace(/'/g, "\\'");
44
45                        var count = 0;
46                        var timer = setInterval(function(){
47                                count++;
48                                if ($datasearch) {
49                                        clearInterval(timer);
50
51                                        $results = []
52                                        $urls = []
53
54                                        $datasearch.find("item[data-points]").each(function(){
55                                                $(this).data('points', null);
56                                        });
57
58                                        // pour ajouter un resultat pondéré
59                                        $add_result = function(item, points) {
60
61                                                // definir la ponderation
62                                                p = item.data('points');
63                                                if (!p) p = points;
64                                                else p += points;
65                                                item.data('points', p);
66
67                                                // on ajoute cet element aux resultats, s'il n'y est pas déjà
68                                                url = item.find('url').text();
69                                                if (!$urls[url]) {
70                                                        $results[ $results.length ] = {url: url, item: item}
71                                                        $urls[url] = true;
72                                                }
73                                        }
74
75                                        if ($res = $datasearch.find("titre:contains('" + $q + "')")) {
76                                                $res.each(function(){
77                                                        $add_result($(this).parent(), 10);
78                                                });
79                                        }
80                                        if ($res = $datasearch.find("intro:contains('" + $q + "')")) {
81                                                $res.each(function(){
82                                                        $add_result($(this).parent(), 5);
83                                                });
84                                        }
85                                        if ($res = $datasearch.find("text:contains('" + $q + "')")) {
86                                                $res.each(function(){
87                                                        $add_result($(this).parent(), 2);
88                                                });
89                                        }
90
91                                        $results.sort(function(a, b) {
92                                                return (b.item.data('points') - a.item.data('points'));
93                                        });
94
95                                        var $liste =
96                                                "<div class='alert'>" + $results.length + " résultats</div>"
97                                                + "<ul class='resultats'>";
98                                        $.each($results, function(key, result){
99                                                me = result.item;
100                                                $liste += "<li title='Score: " + me.data('points') + "'>"
101                                                        + "<h3>"
102                                                                + "<a href='" + result.url + "'>"
103                                                                + me.find('titre').text()
104                                                                + "</a>"
105                                                        + "</h3>"
106                                                        + "<p class='slogan'>" + me.find('intro').text() + "</p>"
107                                                        + "</li>";
108                                        });
109                                        $liste += "</ul>";
110
111                                        $('#results .chargement').remove();
112                                        $('#results').append($liste);
113                                }
114                                if (count == 5 * 15) {
115                                        clearInterval(timer);
116                                        $('#results .chargement').remove();
117                                        $('#results').append("<div class='alert'>"
118                                                + "Problème dans la lecture des données (délai trop long)..."
119                                                + "</div>");
120                                }
121                        }, 200);
122                }
123        }
124
125        $affiche_recherche()
126        $recherche()
127})
128})(jQuery);
129</script>
130
131<div id="results">
132
133</div>
Note: See TracBrowser for help on using the repository browser.