1/* ------- 2NORMATIVA - 2023 3MADR - Nelson Velasco 4----- */ 5 6// console.log("Normas"); 7 8// 9// VARS 10// 11let arr_norms = []; 12let arr_norms_data = []; 13var str_number = ""; 14var str_year = ""; 15// Export 16const fileType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8"; 17const fileExtension = ".xlsx"; 18var fileTitle = "Descarga"; 19var fileTitle_str = ""; 20 21// 22// EVENTS 23// 24// LOAD 25window.addEventListener("load", function(event) 26{ 27 // prepare norms list 28 get_norms(); 29 30 // datepicker 31 prepare_datepicker(); 32 33 // show result norm list 34 seach_norma(); 35 36 // set title file 37 // var breadcrumb_madr = document.querySelectorAll(".breadcrumb_madr"); 38 var breadcrumb_madr = document.querySelectorAll(".breadcrumb_madr p"); 39 // add item to container 40 breadcrumb_madr.forEach(item_b => { 41 fileTitle_str = item_b.innerHTML.substr( item_b.innerHTML.lastIndexOf(">") + 1 ); 42 fileTitle_str = fileTitle_str.replace(' ', ''); 43 }); 44 if(fileTitle_str!=""){ 45 fileTitle = fileTitle_str; 46 } 47 48}); 49// event export excel button 50var cnt_export_norm = document.getElementById("cnt_export_norm"); 51if(typeof(cnt_export_norm) != 'undefined' && cnt_export_norm != null) 52{ 53 cnt_export_norm.addEventListener("click", function(){ exportTableToExcel(); }); 54} 55// event search
56var btn_norm_search = document.getElementById("btn_norm_search"); 57if(typeof(btn_norm_search) != 'undefined' && btn_norm_search != null) 58{ 59 btn_norm_search.addEventListener("click", function(){ seach_norma(); }); 60} 61 62// FUNCTIONS 63// load Norms 64function seach_norma() 65{ 66 let str_result = ""; 67 let str_table = ""; 68 let tab_id = ""; 69 // get container to show norms 70 var cnt_normas = document.querySelectorAll(".cnt_normas"); 71 if(typeof(cnt_normas) != 'undefined' && cnt_normas != null) 72 { 73 cnt_normas.forEach(item => { 74 item.innerHTML = ""; 75 }); 76 } 77 // get year field 78 var txt_norm_year = document.getElementById("txt_norm_year"); 79 if(typeof(txt_norm_year) != 'undefined' && txt_norm_year != null) 80 { 81 str_year = txt_norm_year.value; 82 } 83 // get number field 84 var txt_norm_number = document.getElementById("txt_norm_number"); 85 if(typeof(txt_norm_number) != 'undefined' && txt_norm_number != null) 86 { 87 str_number = txt_norm_number.value; 88 } 89 // clear array results 90 // arr_norms_data = []; 91 arr_norms_data = [['Nombre','Descripción','Año','Número']]; 92 93 //iterate norms to add norms list 94 arr_norms.forEach(function(item) 95 { 96 let valida = 1; 97 let str_title = item.title; 98 let str_title_link = item.title; 99 tab_id = item.id_tab; 100 101 // prepare field title with link 102 if(item.link!="") 103 { 104 str_title = '<a href="'+item.link+'">'+item.title+'</a>'; 105 } 106 // validate 107 if(str_number!="" && str_year!="" ) 108 { 109 if(item.year==str_year && item.number==str_number) 110 { 111 valida = 1; 112 } 113 else{ 114 valida = 0; 115 } 116 } 117 else 118 { 119 if(str_year!="") 120 { 121 if(item.year==str_year) 122 { 123 valida = 1; 124 } 125 else{ 126 valida = 0; 127 } 128 } 129 if(str_number!="") 130 { 131 if(item.number==str_number) 132 { 133 valida = 1; 134 } 135 else{ 136 valida = 0; 137 } 138 } 139 } 140 // 141 if(valida == 1) 142 { 143 // build html item norm 144 str_result = build_item_result(str_title, item.info, item.content); 145 // validate container 146 if(tab_id!="") 147 { 148 // iterate multiple container 149 var cnt_tab_id = document.querySelectorAll("#"+tab_id+" .cnt_normas"); 150 // add item to container 151 cnt_tab_id.forEach(item => { item.innerHTML += str_result; }); 152 } 153 else 154 { 155 // add item to container 156 cnt_normas.forEach(item => { item.innerHTML += str_result; }); 157 } 158 159 // build array to export 160 let item_norma_res = [ 161 item.title, 162 item.info, 163 item.year, 164 item.number, 165 item.link, 166 ] 167 arr_norms_data.push(item_norma_res); 168 } 169 }); 170} 171 172// 173function build_item_result(title, info, content) 174{ 175 let str_result = ''; 176 str_result +='<div class="row_item_norm">'; 177 str_result +='<div class="txt_title_listnorm">'+title+'</div>'; 178 179 if(content!="") 180 { 181 str_result +='<div>'+content+'</div>'; 182 } 183 else{ 184 str_result +='<div>'+info+'</div>'; 185 } 186 187 str_result +='</div>'; 188 189 return str_result; 190} 191 192// Iterate norms to create array js 193function get_norms() 194{ 195 var tabs = document.querySelectorAll("#cnt_tab_notificaciones .ce-tab-pane"); 196 // console.log(tabs); 197 198 // validar en caso de que existan tabs 199 // if(typeof(tabs) != 'undefined' && tabs != null) 200 if(tabs.length>0) 201 { 202 // console.log("entra tabs"); 203 // recorrer los tabs del contenedor
204 tabs.forEach(item => { 205 // get id 206 var id_tab = item.getAttribute("id"); 207 var normas = document.querySelectorAll("#"+id_tab+" .item_norm"); 208 loop_items_norma(normas, id_tab); 209 }); 210 } 211 else 212 { 213 // console.log("entra normal"); 214 // get list normas 215 var normas = document.querySelectorAll(".item_norm"); 216 loop_items_norma(normas); 217 } 218} 219 220function loop_items_norma(normas, id_tab="") 221{ 222 if(typeof(normas) != 'undefined' && normas != null) 223 { 224 normas.forEach(item => { 225 let title = item.getAttribute("data-title"); 226 let info = item.getAttribute("data-info"); 227 let content = item.getAttribute("data-content"); 228 let year = item.getAttribute("data-year"); 229 let number = item.getAttribute("data-number"); 230 // let link = item.getAttribute("data-link"); 231 let link = ""; 232 var links = item.querySelectorAll("a"); 233 links.forEach(item_a => { 234 link = item_a.getAttribute("href"); 235 }); 236 237 let item_norma = { 238 "title": title, 239 "info": info, 240 "year": year, 241 "number": number, 242 "link": link, 243 "content": content, 244 "id_tab": id_tab 245 } 246 arr_norms.push(item_norma); 247 }); 248 } 249} 250 251// export html table to excel 252function exportTableToExcel() 253{ 254 // element table 255 var tbl_data = document.getElementById("tbl_data"); 256 if(typeof(tbl_data) != 'undefined' && tbl_data != null) 257 { 258 // var downloadLink; 259 var dataType = 'application/vnd.ms-excel;charset=utf-8'; 260 var tableHTML = tbl_data.outerHTML.replace(/ /g, '%20'); 261 262 // Specify file name 263 filename = 'export.xls'; 264 // Create download link element 265 var downloadLink = document.createElement("a"); 266 var universalBOM = "\uFEFF"; 267 // Create a link to the file 268 downloadLink.href = 'data:' + dataType + ', ' + universalBOM+tableHTML; 269 // downloadLink.setAttribute('download', 'example.csv'); 270 downloadLink.setAttribute('download', filename); 271 //triggering the function 272 document.body.appendChild(downloadLink); 273 downloadLink.click(); 274 } 275 276 if(arr_norms_data.length>0 ) 277 { 278 // Create object XLSX 279 var ws = XLSX.utils.aoa_to_sheet(arr_norms_data); 280 ws['!cols'] = []; 281 ws['!cols'] = [ 282 {'width' : 30}, // width for col A 283 {'width' : 40}, // width for col B 284 ]; // hidding col C 285 /* Add link */ 286 const cells = Object.keys(ws); 287 // console.log(ws); 288 cells.forEach(cell => { 289 // If cell contains a hyperlink, overwrite the raw value with the hyperlink 290 if(cell.charAt(0)=="E" && ws[cell].v!="") 291 { 292 var num_cell = cell.replace(/\D/g,''); 293 let title_norm = ws["A"+num_cell].v; 294 295 ws["A"+num_cell].l = { 296 Target: ws[cell].v, 297 Tooltip: title_norm 298 }; 299 ws[cell].l = { 300 Target: ws[cell].v, 301 Tooltip: ws[cell].v 302 }; 303 } 304 }); 305 306 /* Export to file (start a download) */ 307 var wb = XLSX.utils.book_new(); 308 XLSX.utils.book_append_sheet(wb, ws, fileTitle); 309 const excelBuffer = XLSX.write(wb, { bookType: "xlsx", type: "array" }); 310 311 var fileName = fileTitle; 312 const fileData = new Blob([excelBuffer], { type: fileType }); 313 saveAs(fileData, fileName + fileExtension); 314 } 315} 316 317 318// get data from datepicker 319function prepare_datepicker() 320{ 321 //if exists datepicker 322 // VANILLA DATEPICKER 323 const elem_date = document.getElementById('dat_norm_year'); 324 if(typeof(elem_date) != 'undefined' && elem_date != null) 325 { 326 var init_year = new Date().getFullYear() // returns the current year 327 str_year = init_year; 328 329 const datepicker = new Datepicker(elem_date, { 330 pickLevel : 2, 331 format : "yyyy", 332 defaultViewDate : '"'+init_year+'"' 333 }); 334 // event datepicker 335 elem_date.addEventListener('changeDate', function(e) { 336 // console.log(e.detail.date.getFullYear()); 337 str_year = e.detail.date.getFullYear(); 338 seach_norma(); 339 }); 340 } 341}
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.