PageSourceSearch

https://sanjuandeuraba-antioquia.gov.co/SiteAssets/V3/Componentes/Barra-de-Accesibilidad/main.js

js sanjuandeuraba-antioquia.gov.co collected 2026-10-03 00:54:37 UTC 12,120 bytes, 360 lines download raw bytes

1import design from "/SiteAssets/V3/Componentes/Barra-de-Accesibilidad/Assets/js/design.js";
2
3window.addEventListener("DOMContentLoaded", () => {
4  //insertar barra lateral al html
5  design();
6
7  /* Elementos del Dom para el funcionamiento de la barra, ademas de la
8    seleccion de todas las letras. */
9  const $audioIMG = document.querySelector(".accessibilityBar__icon--play"),
10    $screenreaderLogo = document.querySelector(".accessibilityBar__figure"),
11    $screenreader = document.querySelector(".accessibilityBar"),
12    BODY_ELEMENT = document.querySelector("body"),
13    $allFont = document.querySelectorAll(
14      "span:not(.glyphicon), p, a, h1, h2, h3, h4, h5, input, div,strong:not(.fa)"
15    ),
16    $itemsMenu = document.querySelectorAll(".accessibilityBar__option"),
17    $allLinks = document.querySelectorAll("a");
18
19  const elements = {};
20  const ids = [
21    "narratorAc",
22    "moreSizeAc",
23    "lessSizeAc",
24    "restartAc",
25    "dyslexicAc",
26    "grayAc",
27    "cursorAc",
28    "contrastAc",
29    "linksAc",
30    "moreSpacingAc",
31    "lessSpacingAc",
32  ];
33
34  for (let i = 0; i < ids.length; i++) {
35    elements[ids[i]] = document.getElementById(ids[i]);
36  }
37
38  // Se inicializa el narrador, el array donde guardamos el tamaño de letra de cada texto en la pagina web.
39  let speakerOnOff = false,
40    speak = new SpeechSynthesisUtterance(),
41    arrayFont = [],
42    spacing = 1;
43
44  //Funcion para la activacion del menu y animacion de opciones en barra de accesibilidad.
45  function activeMenu() {
46    $screenreader.classList.toggle("accessibilityBar--active");
47    $itemsMenu.forEach((item, index) => {
48      item.style.animation
49        ? (item.style.animation = "")
50        : (item.style.animation = `itemFade .5s ease forwards ${
51            index / 7 + 0.3
52          }s`);
53    });
54  }
55
56  //Funcion para cambiar el tamaño de letra, es decir aumentarla o disminuirla,Ademas de tener la opción resetearla.
57  function changeSizeFont(type) {
58    $allFont.forEach((el, i) => {
59      let fontSize = window
60        .getComputedStyle(el, null)
61        .getPropertyValue("font-size");
62      fontSize = parseFloat(fontSize);
63      arrayFont.push(fontSize);
64      if (type == "more" && fontSize < 20) {
65        el.style.fontSize = `${fontSize + 0.5}px`;
66      } else if (type == "less" && fontSize > 10) {
67        el.style.fontSize = `${fontSize - 0.5}px`;
68      } else if (type == "normal") {
69        arrayFont.forEach((font, index) => {
70          if (i == index) el.style.fontSize = `${font}px`;
71          if (index == null) el.style.fontSize = `${14}px`;
72        });
73        el.style.letterSpacing = `normal`;
74        if (el.classList.contains("font-dyslexic"))
75          el.classList.toggle("font-dyslexic");
76        if (BODY_ELEMENT.classList.contains("scr_highcontrast"))
77          BODY_ELEMENT.classList.toggle("scr_highcontrast");
78        if (BODY_ELEMENT.classList.contains("scr_grayHues"))
79          BODY_ELEMENT.classList.toggle("scr_grayHues");
80        if (BODY_ELEMENT.classList.contains("scr_bigcursor"))
81          BODY_ELEMENT.classList.toggle("scr_bigcursor");
82        if (el.classList.contains("src_highlightLink"))
83          el.classList.remove("src_highlightLink");
84        // translateLanguage("español");
85      } else {
86        el.style.fontSize = `${fontSize}px`;
87      }
88    });
89  }
90
91  //Funcion para cambiar el espaciado del texto.
92  function changeSpacing(type) {
93    if (type == "more" && spacing < 7) {
94      $allFont.forEach((el) => {
95        el.style.letterSpacing = `${spacing * 0.5}px`;
96      });
97      spacing++;
98    } else if (type == "less" && spacing > -1) {
99      $allFont.forEach((el) => {
100        el.style.letterSpacing = `${spacing * 0.5}px`;
101      });
102      spacing--;
103    } else {
104      $allFont.forEach((el) => {
105        el.style.letterSpacing = `${spacing}px`;
106      });
107    }
108  }
109
110  //Funcion para detectar la etiqueta
111  function returnTag(e) {
112    let tag = e.srcElement ? e.srcElement.tagName : e.target.type;
113    return tag;
114  }
115
116  //Funcion para a partir de la etiqueta, encontrar el texto
117  function returnText(e) {
118    if (
119      returnTag(e) == "P" ||
120      returnTag(e) == "H1" ||
121      returnTag(e) == "H2" ||
122      returnTag(e) == "H3" ||
123      returnTag(e) == "H4" ||
124      returnTag(e) == "H5" ||
125      returnTag(e) == "H6" ||
126      returnTag(e) == "A" ||
127      returnTag(e) == "LI" ||
128      returnTag(e) == "SPAN" ||
129      returnTag(e) == "STRONG" ||
130      returnTag(e) == "BUTTON" ||
131      returnTag(e) == "SELECT" ||
132      returnTag(e) == "LABEL" ||
133      returnTag(e) == "TD" ||
134      returnTag(e) == "B"
135    ) {
136      return e.target.textContent;
137    } else if (returnTag(e) == "DIV" && e.target.textContent.length <= 100) {
138      return e.target.textContent;
139    } else if (returnTag(e) == "IMG" && e.target.getAttribute("alt")) {
140      return e.target.getAttribute("alt");
141    } else if (returnTag(e) == "INPUT" && e.target.getAttribute("value")) {
142      return e.target.getAttribute("value");
143    } else if (returnTag(e) == "A" && e.target.getAttribute("aria-label")) {
144      return e.target.getAttribute("aria-label");
145    } else if (
146      returnTag(e) == "INPUT" &&
147      e.target.getAttribute("placeholder")
148    ) {
149      return e.target.getAttribute("placeholder");
150    } else {
151      return "";
152    }
153  }
154
155  //Funcion de narrador para leer texto de pagina web al hacer el evento hover.
156  function screenReader(value) {
157    let mediaQuery = window.matchMedia("(max-width: 800px)");
158
159    speakerOnOff = value;
160
161    if (mediaQuery.matches) {
162      BODY_ELEMENT.addEventListener("click", (e) => {
163        if (returnText(e) != "") {
164          speak.text = returnText(e);
165          if (speakerOnOff) {
166            speechSynthesis.speak(speak);
167          }
168        }
169      });
170
171      BODY_ELEMENT.addEventListener("mouseout", () => {
172        speechSynthesis.cancel();
173      });
174    } else {
175      BODY_ELEMENT.addEventListener("mouseover", (e) => {
176        if (returnText(e) != "") {
177          speak.text = returnText(e);
178          if (speakerOnOff) {
179            speechSynthesis.speak(speak);
180          }
181        }
182      });
183
184      BODY_ELEMENT.addEventListener("mouseout", () => {
185        speechSynthesis.cancel();
186      });
187    }
188
189    // Dependiendo del estado del narrador se cambiara su icono para indicar si esta activo o inactivo
190    if (speakerOnOff === true) {
191      $audioIMG.classList.remove("accessibilityBar__icon--play");
192      $audioIMG.classList.add("accessibilityBar__icon--stop");
193    } else {
194      $audioIMG.classList.add("accessibilityBar__icon--play");
195      $audioIMG.classList.remove("accessibilityBar__icon--stop");
196    }
197  }
198
199  //Funcion para activar o desactivar narrador en evento click
200  function screenReaderClick(value) {
201    speakerOnOff = value;
202    speak.lang = "es-ES";
203    speak.rate = 1.3;
204    sessionStorage.setItem("valueNarrador", speakerOnOff);
205
206    screenReader(speakerOnOff);
207  }
208
209  //Funcion para sonido de abrir o cerrar barra de accesibilidad en evento hover al logo.
210  const audios = {
211    open: `/SiteAssets/V3/Componentes/Barra-de-Accesibilidad/Assets/sounds/open.mp3`,
212    close: `/SiteAssets/V3/Componentes/Barra-de-Accesibilidad/Assets/sounds/close.mp3`,
213  };
214
215  const $audioContent = document.getElementById("mp3AC");
216
217  function soundContent(option) {
218    switch (option) {
219      case "active":
220        if (speakerOnOff == true) {
221          $audioContent.pause();
222          $audioContent.currentTime = 0;
223        } else {
224          if ($screenreader.classList.contains("accessibilityBar--active")) {
225            $audioContent.setAttribute("src", `${audios.close}`);
226            $audioContent.play();
227          } else {
228            $audioContent.setAttribute("src", `${audios.open}`);
229            $audioContent.play();
230          }
231        }
232        break;
233      case "desactive":
234        $audioContent.pause();
235        $audioContent.currentTime = 0;
236        break;
237    }
238  }
239
240  //Funcion para guardar valor de narrador, es decir si esta activo o no, para no volver a activarlo en una pagina interna.
241  (function screenReaderAuto() {
242    let value = sessionStorage.getItem("valueNarrador");
243
244    value == "true" ? (speakerOnOff = true) : (speakerOnOff = false);
245
246    screenReader(speakerOnOff);
247
248    if (speakerOnOff == true) {
249      $audioContent.pause();
250      $audioContent.currentTime = 0;
251    }
252  })();
253
254  // funcion de traductor, seleccionamos los elementos del traductor
255  const $btnTranslate = document.querySelector(".accessibilityBar__select"),
256    $translateOptions = document.querySelector(".translateAc"),
257    $optionsTranslate = document.querySelectorAll(".translateAc__a");
258
259  //Seleccionamos el contenedor de los idiomas y apartir de la seleccion del usuario se enviara el valor y se eligira el idioma correcto en el traductor de google,
260  // en caso de que no se logre seleccionar el contenedor de idiomas por defecto de google, validar si contiene la misma clase que la seleccionda en este momento,
261  function translateLanguage(lang) {
262    let $frame = $(".VIpgJd-ZVi9od-xl07Ob-OEVmcd.skiptranslate:first");
263
264    $frame
265      .contents()
266      .find(`.VIpgJd-ZVi9od-vH1Gmf-ibnC6b span.text:contains(${lang})`)
267      .get(0)
268      .click();
269    return false;
270  }
271
272  $optionsTranslate.forEach((el) => {
273    el.addEventListener("click", () => {
274      let lang = el.getAttribute("data-lang");
275      translateLanguage(lang);
276    });
277  });
278
279  //Delegacion de eventos.
280  document.addEventListener("mouseover", (e) => {
281    if (e.target === $screenreaderLogo) soundContent("active");
282  });
283
284  document.addEventListener("mouseout", (e) => {
285    if (e.target === $screenreaderLogo) soundContent("desactive");
286  });
287
288  document.addEventListener("click", (e) => {
289    if (e.target == $screenreaderLogo) activeMenu();
290
291    if (e.target == elements.moreSizeAc) changeSizeFont("more");
292
293    if (e.target == elements.lessSizeAc) changeSizeFont("less");
294
295    if (e.target == elements.restartAc) changeSizeFont("normal");
296
297    if (e.target == elements.moreSpacingAc) changeSpacing("more");
298
299    if (e.target == elements.lessSpacingAc) changeSpacing("less");
300
301    if (e.target == elements.contrastAc)
302      BODY_ELEMENT.classList.toggle("scr_highcontrast");
303
304    if (e.target == elements.dyslexicAc)
305      $allFont.forEach((el) => el.classList.toggle("font-dyslexic"));
306
307    if (e.target == elements.grayAc)
308      BODY_ELEMENT.classList.toggle("scr_grayHues");
309
310    if (e.target == elements.cursorAc)
311      BODY_ELEMENT.classList.toggle("scr_bigcursor");
312
313    if (e.target == elements.linksAc)
314      $allLinks.forEach((el) => el.classList.toggle("src_highlightLink"));
315
316    if (e.target == elements.narratorAc) screenReaderClick(!speakerOnOff);
317
318    if (e.target === $btnTranslate || e.target === `${$btnTranslate} > *`) {
319      $translateOptions.classList.toggle("translateAc--active");
320    } else {
321      $translateOptions.classList.remove("translateAc--active");
322    }
323  });
324
325  document.addEventListener("keypress", (e) => {
326    if (e.key == "enter" || e.keyCode == 13) {
327      if (e.target == $screenreaderLogo) activeMenu();
328
329      if (e.target == elements.moreSizeAc) changeSizeFont("more");
330
331      if (e.target == elements.lessSizeAc) changeSizeFont("less");
332
333      if (e.target == elements.restartAc) changeSizeFont("normal");
334
335      if (e.target == elements.moreSpacingAc) changeSpacing("more");
336
337      if (e.target == elements.lessSpacingAc) changeSpacing("less");
338
339      if (e.target == elements.contrastAc)
340        BODY_ELEMENT.classList.toggle("scr_highcontrast");
341
342      if (e.target == elements.dyslexicAc)
343        $allFont.forEach((el) => el.classList.toggle("font-dyslexic"));
344
345      if (e.target == elements.grayAc)
346        BODY_ELEMENT.classList.toggle("scr_grayHues");
347
348      if (e.target == elements.cursorAc)
349        BODY_ELEMENT.classList.toggle("scr_bigcursor");
350
351      if (e.target == elements.linksAc)
352        $allLinks.forEach((el) => el.classList.toggle("src_highlightLink"));
353
354      if (e.target == elements.narratorAc) screenReaderClick(!speakerOnOff);
355
356      if (e.target == $btnTranslate)
357        $translateOptions.classList.toggle("translateAc--active");
358    }
359  });
360});

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.