PageSourceSearch

https://www.changedyslexia.org/register

html changedyslexia.org collected 2026-10-02 03:05:53 UTC 30,193 bytes, 709 lines download raw bytes

1<!DOCTYPE html>
2<html lang="es" class="full-height register_html">
3<head>
4
5    
6    <meta charset="utf-8">
7    <meta name="viewport" content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
8    <meta http-equiv="x-ua-compatible" content="ie=edge">
9        <meta property="og:url"                content="https://www.changedyslexia.org" />
10    <meta property="og:type"               content="website" />
11    <meta property="og:title"              content="Dytective por Change Dyslexia" />
12    <meta property="og:description"        content="La herramienta de referencia para detección y mejora de las habilidades relacionadas con la dislexia" />
13    <meta property="og:image"              content="https://www.changedyslexia.org/img/public/team_facebook.jpg" />
14    <meta property="og:image:width"        content="960" />
15    <meta property="og:image:height"       content="627" />
16                <title>Dytective por Change Dyslexia</title>
17
18    <!-- Font Awesome -->
19    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
20    <!-- Google Font -->
21
22    <link href="/css/fonts.css?v1.5.16" rel="stylesheet">
23                        <link rel="stylesheet" type="text/css" href="/chd.style.css?v1.5.16" />
24            
25    <link rel="icon" href="/img/favicon/favicon.ico?v1.5.16" sizes="32x32">
26    <link rel="icon" href="/img/favicon/genfavicon-32.png?v1.5.16" sizes="32x32">
27    <link rel="icon" href="/img/favicon/genfavicon-16.png?v1.5.16" sizes="16x16">
28    <link rel="apple-touch-icon" href="/img/favicon/apple-touch-icon-57x57.png?v1.5.16" sizes="57x57">
29    <link rel="apple-touch-icon" href="/img/favicon/apple-touch-icon-114x114.png?v1.5.16" sizes="114x114">
30    <link rel="apple-touch-icon" href="/img/favicon/apple-touch-icon-120x120.png?v1.5.16" sizes="120x120">
31    <link rel="apple-touch-icon" href="/img/favicon/apple-touch-icon-180x180.png?v1.5.16" sizes="180x180">
32    <link rel="manifest" href="/img/favicon/site.webmanifest?v1.5.16">
33
34</head>
35
36    
37<body>
38
39    <!--Main Navigation-->
40<!--Navbar-->
41<nav class="navbar navbar-expand-lg navbar-light fixed-top scrolling-navbar bg-white">
42
43    <div class="container main-topbar">
44    <a class="main-topbar-link" href="/signin">
45        <i class="fa fa-sign-in mr-1" aria-hidden="true"></i>Entrar
46    </a>
47
48    <span class="main-topbar-sep" aria-hidden="true">|</span>
49
50    <span class="main-topbar-locales">
51        <a class="main-topbar-link is-current" href="/change-locale/es">ES</a>
52        <a class="main-topbar-link" href="/change-locale/ca">CA</a>
53    </span>
54</div>
55
56    <div class="container main-navbar-row">
57        <a class="navbar-brand" href="/">
58            <img src="/img/public/flc-changedyslexia-logo-color-horizontal-positiu-es.png?v1.5.16" alt="Dytective por Change Dyslexia" title="Dytective por Change Dyslexia" />
59        </a>
60
61        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent-7" aria-controls="navbarSupportedContent-7" aria-expanded="false" aria-label="Toggle navigation">
62            <span class="navbar-toggler-icon"></span>
63        </button>
64
65        <div class="collapse navbar-collapse text-center" id="navbarSupportedContent-7">
66            <ul class="navbar-nav ml-auto">
67    <li class="p-2">
68        <a class="dark-grey-text" href="/#what-is" title="Qué es Dytective">
69            Qué es Dytective
70        </a>
71    </li>
72    <li class="p-2">
73        <a class="dark-grey-text" href="/#how-starts" title="Cómo empezar">
74            Cómo empezar
75        </a>
76    </li>
77    <li class="p-2">
78        <a class="dark-grey-text" href="/#social-impact" title="Impacto Social">
79            Impacto Social
80        </a>
81    </li>
82    <li class="p-2">
83        <a class="dark-grey-text" href="/#scientific-validation" title="Aval científico">
84            Aval científico
85        </a>
86    </li>
87        </ul>
88        </div>
89    </div>
90</nav>
91
92        <!--Intro Section-->
93    <section class="section_register view intro-2 hm-gradient hm-indigo-slight">
94
95        <div class="full-bg-img flex-center">
96            <div class="container">
97                <div class="row pt-2 mt-0 pt-md-5 mt-md-5 ">
98                    <div class="col-sm-12 mx-auto mb-md-5 mb-sm-5">
99                        <!--Form with header-->
100                        <div class="card no-shadow card-chd narrower">
101                            <div class="container">
102                                <div class="row">
103                                    <div class="col-md-6 card-login card-login-left pt-5" style="">
104                                        <img alt="Dytective" src="/img/public/flc-dytective-logo-color-negatiu.png?v1.5.16" class="d-block mx-auto mb-3" height="62"/>
105<div id="school_description" class="type_description active">
106    <h3 class="text-white">Ofrecemos una solución diferencial puntera y científicamente validada para eliminar el bajo rendimiento escolar debido a las dificultades de lecto-escritura. Ahorra tiempo a través de la personalización automática de los ejercicios y la generación automática de informes. Contaréis con el soporte de una institución rigurosa reconocida por prestigiosos premios.
107                </h3>
108    <ul class="list-unstyled text-white text-left">
109        <li><i class="fa fa-check-circle" ></i> Uso ilimitado de Dytective para todos tus estudiantes gracias al apoyo de <strong>la Fundación ”la Caixa”.</strong></li>
110        <li><i class="fa fa-check-circle" ></i> Sé un colegio innovador e inclusivo, mejorando el rendimiento de tus estudiantes.
111                </li>
112    </ul>
113</div>
114
115<div id="professional_description" class="type_description ">
116    <h3 class="text-white">Formarás parte de una red educativa innovadora que te dará más visibilidad y prestigio a tu trabajo. Más de 240.000 usuarios tendrán acceso a tu perfil profesional. Ahorrarás tiempo y aumentarás tu productividad gracias a la personalización automática de los ejercicios. Fidelizarás a tus clientes: confiarán en una herramienta científicamente validada, divertida y eficaz.
117                    Licencias mensuales con flexibilidad para distribuir entre tus estudiantes.
118                </h3>
119    <ul class="list-unstyled text-white text-left">
120        <li><i class="fa fa-check-circle" ></i> Uso ilimitado y totalmente gratuito de la prueba de cribado de dislexia.</li>
121        <li><i class="fa fa-check-circle" ></i> Si desarrollas tu actividad en España, tus pacientes podrán utilizar Dytective (herramienta de mejora de lecto-escritura) de forma gratuita gracias a la labor social de Change Dyslexia.</li>
122    </ul>
123</div>
124
125<div id="family_description" class="type_description ">
126    <h3 class="text-white">La herramienta <strong>científicamente validada</strong> que mejora las habilidades relacionadas con la lecto-escritura</h3>
127    <ul class="list-unstyled text-white text-left">
128        <li><i class="fa fa-check-circle" ></i> Uso ilimitado y totalmente gratuito de la prueba de cribado de dislexia.</li>
129        <li><i class="fa fa-check-circle" ></i> Hasta dos estudiantes de Dytective (herramienta de mejora de lecto-escritura) mediante un pago único y 7 días gratis de prueba.</li>
130                <li><i class="fa fa-check-circle" ></i>
130 Puedes utilizar Dytective sin coste a través de tu colegio (si resides en España gracias al impulso de la Fundación ”la Caixa”)</li>
131    </ul>
132</div>
133
134<div id="entity_description" class="type_description ">
135    <h3 class="text-white">Ofrecemos una solución diferencial, innovadora y científicamente validada para abordar el bajo rendimiento escolar asociado a las dificultades de lectoescritura. Permite ahorrar tiempo gracias a la personalización de los ejercicios y a la generación automática de informes. Además, contaréis con el respaldo de una institución rigurosa reconocida por prestigiosos premios.
136                </h3>
137    <ul class="list-unstyled text-white text-left">
138        <li><i class="fa fa-check-circle" ></i> Uso ilimitado de Dytective para todos los niños y niñas de tu entidad, gracias al apoyo de la <strong>Fundación ”la Caixa”.</strong></li>
139        <li><i class="fa fa-check-circle" ></i> Sé una entidad social innovadora e inclusiva, ayudando a mejorar el rendimiento de tus estudiantes.
140                </li>
141    </ul>
142</div>
143                                    </div>
144
145
146                                    <div class="col-md-6 card no-shadow card-login card-login-right" style="">
147                                        <form name="corebundle_user" method="post">
148
149<h5 class="text-center">Crea tu cuenta Dytective</h5>
150
151    <p class="text-center"><small class="text-muted"><strong>1. Selecciona tu tipo de cuenta:</strong></small></p>
152
153            <input type="hidden" id="corebundle_user_role" name="corebundle_user[role]" />
154    
155    
156    <div class="btn-group account-type mt-3" data-toggle="buttons">
157        <label class="btn btn-outline-primary btn-register-type" data-type="#school_description">
158            <input type="radio" autocomplete="off" name="role" id="school" value="school"> Colegios
159        </label>
160        <label class="btn btn-outline-primary btn-register-type" data-type="#professional_description">
161            <input type="radio" autocomplete="off" name="role" id="professional" value="professional"> Profesional Terapeuta
162        </label>
163        <label class="btn btn-outline-primary btn-register-type" data-type="#family_description">
164            <input type="radio" autocomplete="off" name="role" id="family" value="family"> Individual Familiar
165        </label>
166        <label class="btn btn-outline-primary btn-register-type" data-type="#entity_description">
167            <input type="radio" autocomplete="off" name="role" id="entity" value="entity"> Entidad Social *
168        </label>
169    </div>
170
171    <p class="text-center"><small class="text-muted">* Sólo para entidades sociales con sede en España.</small></p>
172
173
174
175
176
177
178<div class="form-wrapper">
179    <div class="mt-5 text-center">
180        
181<div class="craue_formflow_buttons craue_formflow_button_count_2">
182			<button type="submit" class="btn btn-pink m-auto">Siguiente</button>
183			<button type="submit" class="hidden" name="flow_user_register_transition" value="reset" formnovalidate="formnovalidate">empezar de nuevo</button>
184	</div>
185    </div>
186
187</div>
188
189        <input type="hidden" id="corebundle_user__token" name="corebundle_user[_token]" value="Z0L6Tq0DZ6qTacZJO3_Gggn-XofXPu9Vh0qn1QXOh7Q" />
190    
191        <input type="hidden" id="corebundle_user_flow_user_register_instance" name="flow_user_register_instance" value="J_SDhxr6tU" />
192            <input type="hidden" id="corebundle_user_flow_user_register_step" name="flow_user_register_step" value="1" />
193    </form>
194                                    </div>
195                                </div>
196                            </div>
197
198                        </div>
199                        <!--/Form with header-->
200
201                    </div>
202                </div>
203            </div>
204        </div>
205
206    </section>
207
208    <!--Modal: Programa CM School-->
209    <div class="modal fade" id="modalCMConditions" tabindex="-1" role="dialog" aria-labelledby="modalCMConditionsLabel" aria-hidden="true">
210        <div class="modal-dialog modal-dialog-centered modal-md modal-notify modal-info" role="document">
211            <!--Content-->
212            <div class="modal-content text-center">
213                <!--Header-->
214                <div class="modal-header d-flex justify-content-center">
215                    <p class="heading">Programa de ayuda a la detección de dificultades de lecto-escritura de la Comunidad de Madrid</p>
216                </div>
217
218                <!--Body-->
219                <div class="modal-body">
220                    <p>
220Parece que estás intentando registrarte en Dytective con una cuenta de <strong>EducaMadrid.</strong></p>
221                    <p>Si formas parte del <strong>Programa de ayuda a la detección de dificultades de lecto-escritura de la Comunidad de Madrid</strong>, has recibido un email de Change Dyslexia con la información de tu cuenta para acceder. No es necesario que te registres, simplemente entra con los datos que te hemos enviado. Si no encuentras este email, ponte en contacto con nosotros en <a href="[email protected]">[email protected]</a></p>
222                    <p>Si no formas parte del programa indícalo y continuaremos con tu registro.</p>
223                </div>
224
225                <!--Footer-->
226                <div class="modal-footer flex-center">
227                    <a type="button" id="btnCmConditionsContinue" class="btn btn-outline-elegant waves-effect" data-dismiss="modal">No formo parte del programa</a>
228                    <a type="button" href="/signin" class="btn btn-elegant waves-effect">Acceder</a>
229                </div>
230            </div>
231            <!--/.Content-->
232        </div>
233    </div>
234    <!--Modal: Programa CM School-->
235
236    <!--Modal: Programa CM No School-->
237    <div class="modal fade" id="modalCMConditions2" tabindex="-1" role="dialog" aria-labelledby="modalCMConditionsLabel" aria-hidden="true">
238        <div class="modal-dialog modal-dialog-centered modal-md modal-notify modal-info" role="document">
239            <!--Content-->
240            <div class="modal-content text-center">
241                <!--Header-->
242                <div class="modal-header d-flex justify-content-center">
243                    <p class="heading">Programa de ayuda a la detección de dificultades de lecto-escritura de la Comunidad de Madrid</p>
244                </div>
245
246                <!--Body-->
247                <div class="modal-body">
248                    <p>Parece que estás intentando registrarte en Dytective con una cuenta de <strong>EducaMadrid.</strong></p>
249                    <p>Si formas parte del <strong>Programa de ayuda a la detección de dificultades de lecto-escritura de la Comunidad de Madrid</strong>, has recibido un email de Change Dyslexia con la información de tu cuenta para acceder. No es necesario que te registres, simplemente entra con los datos que te hemos enviado. Si no encuentras este email, ponte en contacto con nosotros en <a href="[email protected]">[email protected]</a></p>
250                    <p>Si no formas parte del programa indícalo y continuaremos con tu registro.</p>
251                </div>
252
253                <!--Footer-->
254                <div class="modal-footer flex-center">
255                    <a type="button" id="btnCmConditionsContinue2" class="btn btn-outline-elegant waves-effect" data-dismiss="modal">No formo parte del programa</a>
256                    <a type="button" href="/signin" class="btn btn-elegant waves-effect">Acceder</a>
257                </div>
258            </div>
259            <!--/.Content-->
260        </div>
261    </div>
262    <!--Modal: Programa CM No School-->
263
264    <!--Modal: modalLegalConditions-->
265    <div class="modal fade" id="modalLegalconditions" tabindex="-1" role="dialog" aria-labelledby="modalLegalconditionsLabel" aria-hidden="true">
266        <div class="modal-dialog modal-dialog-centered modal-md modal-notify modal-info" role="document">
267            <!--Content-->
268            <div class="modal-content text-center">
269                <!--Header-->
270                <div class="modal-header d-flex justify-content-center">
271                    <p class="heading">Condiciones legales</p>
272                </div>
273
274                <!--Body-->
275                <div class="modal-body" id="legal-missing-text">
276                                    </div>
277
278                <!--Footer-->
279                <div class="modal-footer flex-center">
280                    <a type="button" class="btn btn-elegant waves-effect" data-dismiss="modal">Ok</a>
281                </div>
282            </div>
283            <!--/.Content-->
284        </div>
285    </div>
286
287    <!--Main Navigation-->
288
289<!--Main Layout-->
290<main>
291    
292    
293</main>
294<!--Main Layout-->
295
296
297    <!--Modal: modalCookie-->
298    <div class="modal fade top" id="modalCookie" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"
299    >
300        <div class="modal-dialog modal-frame modal-bottom modal-notify modal-info" role="document">
301            <!--Content-->
302            <div class="modal-content">
303                <!--Body-->
304                <div class="modal-body grey lighten-3">
305                    <div class="row d-flex justify-content-center align-items-center">
306
307                        <p class="pt-3 pr-2">Change Dyslexia utiliza cookies para mejorar la experiencia de usuario.</p>
308
309                        <a type="button" id="allCookiesAcceptedBtn" class="btn btn-outline-primary waves-effect" data-dismiss="modal">Ok, gracias</a>
310                        <a type="button" class="btn btn-primary" data-toggle="modal" data-target="#cookiesPreferencesModal" data-dismiss="modal">Ver preferencias <i class="fa fa-book ml-1"></i></a>
311                    </div>
312                </div>
313            </div>
314            <!--/.Content-->
315        </div>
316    </div>
317    <!--Modal: modalCookie-->
318
319    <div class="modal fade dashboard-help" id="cookiesPreferencesModal" tabindex="-1" role="dialog" aria-labelledby="cookiesPreferencesModalLabel">
320        <div class="modal-dialog modal-lg modal-notify modal-info" role="document">
321            <!--Content-->
322            <div class="modal-content">
323                <!--Header-->
324                <div class="modal-header">
325                    <p class="heading lead"><i class="fa fa-question-circle white-text animated rotateIn"></i> Información sobre las cookies</p>
326
327                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
328                        <span aria-hidden="true" class="white-text">×</span>
329                    </button>
330                </div>
331
332                <!--Body-->
333                <div class="modal-body small">
334                    <p>Las cookies son importantes para el correcto funcionamiento del sitio. Para mejorar su
335                    experiencia de navegación, usamos cookies para recordar sus datos de inicio de sesión y
336                    brindarle un inicio seguro, recopilar estadísticas para optimizar la funcionalidad del sitio y
337                    ofrecerle contenido personalizado en función de sus intereses.
338                
339                    </p>
340                    <p>Las cookies son pequeños archivos de texto que las páginas web pueden utilizar para hacer más
341                    eficiente la experiencia del usuario. La ley afirma que podemos
342                    almacenar cookies en su dispositivo si son estrictamente necesarias para el funcionamiento de esta
343                    página. Para todos los demás tipos de cookies necesitamos su permiso.
344                
345                    </p>
346
347                    <form class="p-5 p-md-3 p-sm-1">
348                        <div class="md-form form-sm mt-1">
349                            <input class="form-check-input" type="checkbox" value="" id="cookiesRequired" name="cookiesRequired" checked disabled>
350                            <label for="cookiesRequired">
351                                <strong>Cookies Obligatorias:</strong> utilizamos estas cookies para almacenar información sobre tu inicio de sesión. Esto nos
352                    permite recordar tus datos de acceso
353                    y no necesitar pedirte tus datos de acceso cada vez que quieras acceder a Dytective.
354                
355                            </label>
356                        </div>
357
358                        <div class="md-form form-sm mt-1">
359                            <input class="form-check-input" type="checkbox" value="" id="cookiesFunctional" name="cookiesFunctional">
360                            <label for="cookiesFunctional">
361                                <strong>Cookies Funcionales:</strong> estas cookies nos permiten analizar el uso del Sitio web, de manera que podamos medir y mejorar
362                    el funcionamiento. Únicamente
363                    utilizamos las cookies del servicio Google Analytics
364                .
365                            </label>
366                        </div>
367                    </form>
368                </div>
369
370                <!--Footer-->
371                <div class="modal-footer">
372                    <button data-dismiss="modal" type="button" class="btn btn-outline-primary waves-effect waves-light">Cancelar</button>
373                    <a type="button" id="cookiesPreferencesAcceptedBtn" class="btn btn-primary waves-effect" data-dismiss="modal">Guardar Preferencias</a>
374                </div>
375            </div>
376            <!--/.Content-->
377        </div>
378    </div>
379
380<!--Footer-->
381
382<!--/.Footer-->
383
384            
384<script src="/js/chd.js?v1.5.16"></script>
384
385    
386
387<script>
388    new WOW().init();
389
390
391    $('#zoomBtn').click(function() {
392        $('.zoom-btn-sm').toggleClass('scale-out');
393        if (!$('.zoom-card').hasClass('scale-out')) {
394            $('.zoom-card').toggleClass('scale-out');
395        }
396    });
397
398    $('.zoom-btn-sm').click(function() {
399        var btn = $(this);
400        var card = $('.zoom-card');
401        if ($('.zoom-card').hasClass('scale-out')) {
402            $('.zoom-card').toggleClass('scale-out');
403        }
404        if (btn.hasClass('zoom-btn-person')) {
405            card.css('background-color', '#d32f2f');
406        } else if (btn.hasClass('zoom-btn-doc')) {
407            card.css('background-color', '#fbc02d');
408        } else if (btn.hasClass('zoom-btn-tangram')) {
409            card.css('background-color', '#388e3c');
410        } else if (btn.hasClass('zoom-btn-report')) {
411            card.css('background-color', '#1976d2');
412        } else {
413            card.css('background-color', '#7b1fa2');
414        }
415    });
416
417    $(document).ready(function() {
418
419      // Abrir Bio
420      $('.btn-open-bio').on('click', function(e) {
421        e.preventDefault();
422        var targetId = $(this).data('target');
423        $('#' + targetId).addClass('d-flex');
424        $('#' + targetId).fadeIn();
425      });
426
427      // Cerrar Bio
428      $('.btn-close-bio').on('click', function(e) {
429        e.preventDefault();
430        var targetId = $(this).data('target');
431        $('#' + targetId).fadeOut(400, () => {
432          $('#' + targetId).removeClass('d-flex');
433        });
434      });
435
436    });
437
438    // $(document).ready(function() {
439    //     $.contactButtons({
440    //         effect  : 'slide-on-scroll',
441    //         buttons : {
442    //             'facebook':   { class: 'facebook', use: true, link: 'https://www.facebook.com/changedyslexia/', extras: 'target="_blank"' },
443    //             'linkedin':   { class: 'linkedin', use: true, link: 'https://www.linkedin.com/company/7573805?trk=prof-exp-company-name', extras: 'target="_blank"' },
444    //             'twitter':    { class: 'twitter',  use: true, link: 'https://twitter.com/changeDyslexia', extras: 'target="_blank"' },
445    //             'youtube':    { class: 'youtube',  use: true, link: 'https://www.youtube.com/channel/UC_xZGslIRkYPXmMvr9pzpFQ', icon: 'youtube', extras: 'target="_blank"' },
446    //             'email':      { class: 'email separated',    use: true, link: '[email protected]', extras: 'target="_blank"' }
447    //         }
448    //     });
449    // });
450
451        $('#modalCookie').modal('show');
452
453    $('#allCookiesAcceptedBtn').on('click', function(){
454        $.ajax({
455            type: "POST",
456            url: "/cookiesAccepted",
457            dataType: 'json',
458            data: {'required': true, 'functional':true},
459            success: function(){
460                location.reload();
461            }
462        });
463    });
464
465    $('#cookiesPreferencesAcceptedBtn').on('click', function(){
466        $.ajax({
467            type: "POST",
468            url: "/cookiesAccepted",
469            dataType: 'json',
470            data: {'required': true, 'functional': $("#cookiesFunctional").prop('checked')},
471            success: function(){
472                location.reload();
473            }
474        });
475    });
476
477    
478</script>
478
479
480<script>
481
482    let role = 'school';
483
484    /********************************************************************************
485     * BEGIN: GENERAL FUNCTIONS FOR ALL STEPS
486     ********************************************************************************/
487
488    function showType(type){
489        $(".form-mask").hide(300);
490
491        $(".type_description.active").fadeOut(100, function(){
492            $(".type_description.active").removeClass('active');
493            $(type).fadeIn(100, function(){
494
495            }).addClass("active");
496        })
497    }
498
499    function initAutocomplete(config) {
500      const {
501        $type,
502        $input,
503        $hidden,
504        $menu,
505        $dropdown,
506        endpoint,
507        renderItem,
508        onSelect,
509        $form,
510        $error,
511        $iconWrapper
512      } = config;
513
514      let lastResults = [];
515      let hasResults = false;
516      let activeIndex = -1;
517
518      function showMenu() {
519        $dropdown.addClass("show");
520        $menu.addClass("show");
521        $input.attr("aria-expanded", "true");
522      }
523
524      function hideMenu() {
525        $menu.removeClass("show");
526        $dropdown.removeClass("show");
527        $input.attr("aria-expanded", "false");
528        activeIndex = -1;
529      }
530
531      function highlightItem(index) {
532        const $items = $menu.find(".dropdown-item");
533        $items.removeClass("active");
534
535        if (index >= 0 && index < $items.length) {
536          const $activeItem = $items.eq(index);
537          $activeItem.addClass("active");
538          activeIndex = index;
539
540          const menuTop = $menu.scrollTop();
541          const menuHeight = $menu.height();
542          const itemTop = $activeItem.position().top + menuTop;
543          const itemBottom = itemTop + $activeItem.outerHeight();
544
545          if (itemBottom > menuTop + menuHeight) {
546            $menu.scrollTop(itemBottom - menuHeight);
547          } else if (itemTop < menuTop) {
548            $menu.scrollTop(itemTop);
549          }
550        }
551      }
552
553      function selectActive() {
554        const $items = $menu.find(".dropdown-item");
555        if (activeIndex >= 0 && activeIndex < $items.length) {
556          const $item = $items.eq(activeIndex);
557          $item.trigger("click");
558        }
559      }
560
561      // Evitar apertura automática si no hay resultados
562      $dropdown.on("show.bs.dropdown", function (e) {
563        if (!hasResults) e.preventDefault();
564      });
565
566      // Navegación con teclado
567      $input.on("keydown", function (e) {
568        const key = e.key || e.which;
569        const $items = $menu.find(".dropdown-item");
570
571        if ((key === "Enter" || key === 13) && $menu.hasClass("show")) {
572          e.preventDefault();
573        }
574
575        if ($items.length && $menu.hasClass("show")) {
576          if (key === "ArrowDown" || key === 40) {
577            e.preventDefault();
578            activeIndex = (activeIndex + 1) % $items.length;
579            highlightItem(activeIndex);
580            return;
581          }
582          if (key === "ArrowUp" || key === 38) {
583            e.preventDefault();
584            activeIndex = (activeIndex - 1 + $items.length) % $items.length;
585            highlightItem(activeIndex);
586            return;
587          }
588          if (key === "Enter" || key === 13) {
589            e.preventDefault();
590            selectActive();
591            return;
592          }
593          if (key === "Escape" || key === "Esc" || key === 27) {
594            hideMenu();
595            return;
596          }
597        }
598      });
599
600
601      let timeoutId;
602
603      // Entrada de texto → búsqueda
604      $input.on("input", function () {
605        const query = $(this).val().trim();
606        $hidden.val("");
607        hasResults = false;
608
609        // Cancelamos el temporizador anterior si el usuario sigue escribiendo
610        clearTimeout(timeoutId);
611
612        if (query.length < 2) {
613          hideMenu();
614          return;
615        }
616
617        // Creamos un nuevo temporizador
618        timeoutId = setTimeout(() => {
619          $.getJSON(endpoint, { q: query }, function (data) {
620            lastResults = data || [];
621            $menu.empty();
622            activeIndex = -1;
623
624            console.log(lastResults);
625            console.log(lastResults.length);
626            if (!lastResults.length) {
627              hasResults = false;
628              hideMenu();
629              return;
630            }
631
632            lastResults.forEach(function (item) {
633              const $option = renderItem(item)
634                .on("click", function (ev) {
635                  ev.preventDefault();
636                  onSelect(item);
637                  hideMenu();
638                });
639              $menu.append($option);
640            });
641
642            hasResults = true;
643            showMenu();
644          });
645        }, 500); // Espera 500ms tras la última pulsación
646
647
648      });
649
650      // Click fuera
651      $(document).on("click", function (e) {
652        if (!$(e.target).closest(".dropdown").length) hideMenu();
653      });
654
655      // Icono (lupa/x)
656      if ($iconWrapper) {
657        const $icon = $iconWrapper.find("i");
658        $input.on("input", function () {
659          if ($(this).val().length > 0) {
660            $icon.removeClass("fa-search").addClass("fa-times");
661          } else {
662            $icon.removeClass("fa-times").addClass("fa-search");
663          }
664        });
665
666        $iconWrapper.on("click", function () {
667          if ($icon.hasClass("fa-times")) {
668            $input.val("");
669            $hidden.val("");
670
671                        $icon.removeClass("fa-times").addClass("fa-search");
672            hideMenu();
673          }
674        });
675      }
676
677          }
678
679    $(document).ready(function() {
680        $('.mdb-select').material_select();
681        $('[data-toggle="tooltip"]').tooltip();
682
683        let role = '';
684
685        $(".btn-register-type").on("click", function(){
686            showType($(this).data('type'));
687
688                            role = $(this).find("input").val();
689                $("#corebundle_user_role").val(role);
690            
691            
692        });
693
694        
695
696        const $form = $("form[name=corebundle_user]");
697
698        
699
700
701        
702
703        
704
705    });
706
707</script>
707
708</body>
709</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.