source: modelado_topicos/templates/see_topic/index.html @ 75c9087

preprocesamientov1.0
Last change on this file since 75c9087 was 75c9087, checked in by rboet <rboet@…>, 9 años ago

añadida funcionabilidad del botón ver todos

  • Propiedad mode establecida a 100755
File size: 10.0 KB
Línea 
1{% extends 'base.html' %}
2{% load staticfiles %}
3{% block title %}Elegir Tópico {% endblock %}
4{% block headScriptCss %}
5    <style>
6        .Aligner {
7            display: flex;
8            align-items: center;
9            justify-content: center;
10          }
11          .titulo
12          {
13            text-align: center;
14           
15          }
16    </style>
17{% endblock %}
18{% block body %}
19    <div class="titulo">
20        <h3>{{propuesta}}</h3><hr>
21    </div>
22    <div id="contenedor" class="Aligner">
23        <div id="texto" style="float:left;width:80%">
24           
25        </div>
26        <div id="contenedor" style="float:left;width:15%">
27            <div class="btn-group" align="center" style="width: 80%">
28                <button class="btn" id="verTodos">Ver Todos</button>
29            </div>
30            <div id="topic">
31            </div>
32        </div>
33    </div>
34   
35    <script> 
36        var mi_color={{color|safe}};
37        var texto = "{{texto}}";
38        var topicos = {{topicos|safe}};
39        var color = new Array();
40        var palabras_json = new Array();
41        var llaves = {{llaves}};
42        llenar_array(topicos,color,palabras_json)
43        var palabras = new Array();
44        palabras=texto.split(' ');
45        var allTopics = new Array();
46        $(document).ready(function(){
47            d3.select('#texto')
48                .append('p').text(texto);
49            arreglo_global(allTopics,color,palabras_json);
50         }); 
51       
52        var cantidad = parseInt(color.length/2)+1;
53        var total = parseInt(color.length);
54       
55        var tam = 18;
56        var minimo = 10;
57        var width = 200;
58        var height = cantidad*20;
59                       
60        var canvas = 
61        d3.select('#topic')
62                .append('svg')
63                .attr('width',width)
64                .attr('height',height);
65               
66
67        cont = 0;
68        if (total<11) {
69            createBlocks(canvas,llaves,tam,color,cantidad,50,minimo,topicos);
70            createBlocks(canvas,llaves,tam,color,cantidad,90,minimo,topicos);
71        }
72        else if (total>10 && total<51) {
73            createBlocks(canvas,llaves,tam,color,cantidad,50,minimo*2,topicos);
74            createBlocks(canvas,llaves,tam,color,cantidad,90,minimo*2,topicos);
75        }
76        else{
77            cantidad = parseInt(color.length/3)+1;
78            if (total>60) {
79                cantidad = parseInt(color.length/3)+2;
80            }       
81            createBlocks(canvas,llaves,tam,color,cantidad,50,minimo*2,topicos);
82            createBlocks(canvas,llaves,tam,color,cantidad,90,minimo*2,topicos);
83            if (total>60) {
84                cantidad-=2;
85            }
86            createBlocks(canvas,llaves,tam,color,cantidad,130,minimo*2,topicos);
87        }
88       
89       
90        for (element in mi_color) {
91            $("#topicos option[value="+element+"]").css('background-color',mi_color[element]);
92        }
93        var select_topicos = parseInt($('#topicos option:selected').val());
94       
95        $('.group').mouseover(function(){
96            $(this).find('text').css('font-weight','bold');
97            $(this).find('rect').css({'stroke':'black','stroke-width':'2px'});
98            $(this).tooltip();
99            });
100        $('.group').mouseout(function(){
101            $(this).find('text').css('font-weight','normal');
102            $(this).find('rect').css('stroke','none');
103            });
104        $('.group').click(function(){
105            var palabra = new Array();
106            var probabilidad = new Array();
107            var id = $(this).attr('id');
108            getWordProb(palabras_json[id],palabra,probabilidad);
109            d3.select('#texto')
110                .selectAll('p').remove();
111            d3.select('#texto')
112                .selectAll('span').remove();
113            crear_texto(palabras,palabra,probabilidad,color[id]);           
114            });
115        $('#verTodos').click(function(){
116            d3.select('#texto')
117                .selectAll('p').remove();
118            d3.select('#texto')
119                .selectAll('span').remove();
120            create_all_text(palabras,allTopics); 
121            });
122       
123        $('.myRect').tooltip({
124                'container': 'body',
125                'placement': 'right'
126        });
127       
128        //Funcion para obtener las palabras y probabilidades de un item clickeado
129        function getWordProb(palabras_json,palabra,probabilidad) {
130
131            for(element in palabras_json)
132            {
133                palabra.push(element)
134                var prob = parseFloat(palabras_json[element]);
135                probabilidad.push(prob*400);
136            }           
137        }
138       
139       
140        function llenar_array(topicos,color,palabras_json) {
141            for (element in topicos)
142            {
143                item = new Array();
144                item.push(topicos[element]['words'])
145                color.push(topicos[element]['color']);
146                palabras_json[element]=item[0];
147            }
148        }
149       
150        function crear_texto(palabras,palabra,probabilidad,color) {
151            for(element in palabras)
152            {
153                var bool= false;
154                var mycolor;
155                for (x in palabra)
156                {
157                    if (palabras[element]==palabra[x]) {
158                        bool=true;
159                        mycolor=x;
160                    }
161                }
162                if (bool)
163                {
164                    var font = 12*probabilidad[mycolor];
165                    font+="pt";
166                    d3.select("#texto")
167                        .append("span").text(palabras[element]+" ")
168                        .style('color',color).style('font-size', font);
169                }
170                else
171                {
172                    d3.select("#texto")
173                        .append("span").text(palabras[element]+" ")
174                }
175            }
176        }
177       
178        //Funcion para crear los bloques del D3
179        function createBlocks(canvas,datas,tam,fill,cantidad,movX,minimo,topicos)
180        {
181            for (var j = 1;j<cantidad;j++)
182            {
183                var group = canvas.append('g')
184                    .attr('class','group')
185                    .attr('id',cont)
186               
187                myStr = ArrayToString(topicos,cont);
188                               
189                var rect = canvas.selectAll('rect')
190                    .data(datas)
191                    .enter()
192                        group.append('rect')
193                            .attr('width',tam)
194                            .attr('height',tam)
195                            .attr('title',myStr)
196                            .attr('y',j*(tam+2))
197                            .attr('x',function(d,i){return (i+1)*movX;})
198                            .attr('fill',color[cont])
199                            .attr('class','myRect')
200                        group.append('text')
201                            .text(cont)
202                            .attr('y',j*(tam+2))
203                            .attr('x',movX-minimo)
204                            .attr('dy','13');
205                cont ++;
206            }
207        }
208       
209        //Funcion para crear la data de los tooltip
210        function ArrayToString(data,indice) {
211            var myString='';
212            var i=0;
213            for (x in data[indice]['words']) {
214                    if (i>2) {
215                        myString+="\n"
216                    }
217                    myString+=x;
218                    myString+=",";
219                    i++;
220                }
221            myString = myString.substr(0,(myString.length-1)); 
222            return myString;
223        }
224        //Se crea el arreglo con todas las palabras y su mayor probabilidad
225        function arreglo_global(allTopics,color,palabras_json){
226            for(element in palabras_json)
227            {
228                for(palabra in palabras_json[element])
229                {
230                    var bool=comprobar(allTopics,palabra);
231                    var prob=palabras_json[element][palabra];
232                    if (bool[0]) {
233                        var pos=bool[1];
234                        if (allTopics[pos][1]<prob)
235                        {
236                            allTopics[pos][1]=prob;
237                            allTopics[pos][2]=color[element];
238                        }
239                    }
240                    else
241                    {
242                        var valor = new Array();
243                        valor.push(palabra,prob,color[element]);
244                        allTopics.push(valor);
245                    }
246                }
247            }
248        }
249        //Funcion para comprobar si una palabra esta en el arreglo
250        function comprobar(allTopics,word)
251        {
252            var bool = false;
253            if(allTopics.length==0)
254            {
255                return [false,-1];
256            }
257            else
258            {
259                for (x in allTopics) {
260                    if (allTopics[x][0]==word) {
261                        bool = true;
262                        return [bool,x];
263                    }
264                }
265            }
266            return [bool,-1];
267        }
268        //Se crea todo el texto
269        function create_all_text(palabras,allTopics) {
270            for(element in palabras)
271            {
272                var bool= false;
273                var pos;
274                for (x in allTopics)
275                {
276                    if (palabras[element]==allTopics[x][0]) {
277                        bool=true;
278                        pos=x;
279                    }
280                }
281                if (bool)
282                {
283                    var font = 12*(allTopics[pos][1]*400);
284                    font+="pt";
285                    d3.select("#texto")
286                        .append("span").text(palabras[element]+" ")
287                        .style('color',allTopics[pos][2]).style('font-size', font);
288                }
289                else
290                {
291                    d3.select("#texto")
292                        .append("span").text(palabras[element]+" ")
293                }
294            }
295        }
296       
297    </script>
298{% endblock %}
299
300
301
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.