1$(document).ready(function() { 2 window.screenSize = window.innerWidth; 3 var loadingPage = "<div class=\"text-center d-block p-5\"><div class=\"spinner-border d-inline-block align-middle pr-3 text-info\" role=\"status\">\n" + 4 " <span class=\"sr-only\">Loading...</span>\n" + 5 "</div> Loading Page...</div>"; 6 7 $(".nav-toggle").click(function () { 8 $(".nav-toggle, .navbar, ._ft-menu").toggleClass("open"); 9 $("#navbar-main-menu").toggleClass("show"); 10 }); 11 12 $(".short-search-button").click(function(){ 13 $('._ft-search-box').toggle(); 14 $(this).toggle(); 15 }); 16 17 $(".full-search-button").click(function(){ 18 var sval = $('._ft-search-box-value').val(); 19 20 if(sval){ 21 $("._ft-search").submit(); 22 }else{ 23 $('._ft-search-box').toggle(); 24 $(".short-search-button").toggle(); 25 } 26 }); 27 28 $('#openIam').on('change', function(){ 29 var iamVal = $(this).val(); 30 $('._ft-iam-results').removeClass('open'); 31 $('._ft-iam-results-item').removeClass('open'); 32 $('._ft-iam-bg').remove(); 33 if(iamVal){ 34 if(validURL(iamVal)){ 35 window.open(iamVal); 36 }else { 37 $('._ft-iam-results').addClass('open'); 38 $('#result-' + iamVal).addClass('open'); 39 $('body').append('<div class="_ft-iam-bg" onclick="$(this).remove();\n' + 40 ' $(\'._ft-iam-results\').removeClass(\'open\');\n' + 41 ' $(\'._ft-iam-results-item\').removeClass(\'open\');\n' + 42 ' $(\'#openIam\').val(\'\');"></div>'); 43 } 44 } 45 }); 46 47 function closeIam(){ 48 $(this).remove(); 49 $('._ft-iam-results').removeClass('open'); 50 $('._ft-iam-results-item').removeClass('open'); 51 $('#openIam').val(''); 52 } 53 54 function validURL(str) { 55 var pattern = new RegExp('^(https?:\\/\\/)?'+ // protocol 56 '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // domain name 57 '((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address 58 '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+ // port and path 59 '(\\?[;&a-z\\d%_.~+=-]*)?'+ // query string 60 '(\\#[-a-z\\d_]*)?$','i'); // fragment locator 61 return !!pattern.test(str); 62 } 63 64 function showReportByPowerBi(item){ 65 var title = $(item).attr('data-title'); 66 $('#myPowerBiReportLabel').html(title); 67 $('#power-bi-report').modal('show'); 68 } 69 70 $('#power-bi-report').on('show.bs.modal', function (event) { 71 var report = $(event.relatedTarget) 72 var source = report.data('source'); 73 var title = report.data('title'); 74 console.log(source, title); 75 76 var modal = $(this); 77 modal.find('.modal-title').text(title); 78 modal.find('.modal-body iframe').attr('src', source); 79 }); 80 81 var getHTML = function ( url, callback ) { 82 83 // Feature detection 84 if ( !window.XMLHttpRequest ) return; 85 // Create new request 86 var xhr = new XMLHttpRequest(); 87 // Setup callback 88 xhr.onload = function() { 89 if ( callback && typeof( callback ) === 'function' ) { 90 callback( this.responseXML ); 91 } 92 } 93 // Get the HTML 94 xhr.open( 'GET', url ); 95 xhr.responseType = 'document'; 96 xhr.send(); 97 }; 98 99 // Left menu 100 $('._ft-left-side .navbar-nav a').on('click',function(e){ 101 e.preventDefault(); 102 var item = $(this); 103 var forceReload = $(this).attr('data-force-reload'); 104 let newPage = $(this).attr('target'); 105 106 107 if($(this).hasClass('_force-load')){ 108 forceReload = true; 109 } 110 var url = $(item).attr('href'); 111 112 if(!forceReload) { 113 if (location.hostname === this.hostname || !this.hostname.length) { 114 // console.log('is internal url'); 115 forceReload = false; 116 } else { 117 // console.log('is external url'); 118 $(this).addClass("data-force-reload", "true"); 119 forceReload = true; 120 } 121 } 122 123 if(newPage && newPage === '_blank'){ 124 window.open(url,'_blank') 125 }else { 126 127 if (forceReload) { 128 window.location = url; 129 } else { 130 var parentItem = $(item).parent('li'); 131 var parentItemId = parentItem.attr('data-id'); 132 var allowUpdate = true; 133 if (parentItem.hasClass('dropdown')) { 134 if (parentItem.hasClass('active') && url === location.pathname) { 135 if ($(parentItem).hasClass('close-drop')) { 136 allowUpdate = false;
137 $(parentItem).removeClass('close-drop'); 138 } else { 139 allowUpdate = false; 140 $(parentItem).addClass('close-drop'); 141 } 142 } 143 } 144 145 if (allowUpdate) { 146 $('._ft-page-content').html(loadingPage); 147 getHTML($(item).attr('href'), function (response) { 148 var pageContent = response.querySelector('#_ft-page-content'); 149 $('._ft-page-content').html(pageContent.innerHTML); 150 history.pushState({}, response.title, url); 151 _responsiveContent(); 152 }); 153 $('._ft-left-side .navbar-nav .nav-item').removeClass('active').removeClass('current'); 154 $(item).parents('.nav-item').addClass('current').addClass('active'); 155 } 156 } 157 } 158 return false; 159 }); 160 161 162 //Main Menu 163 $('#navbar-main-menu .navbar-nav .nav-item a').on('click',function(e){ 164 e.preventDefault(); 165 var item = $(this); 166 var url = item.attr('href'); 167 var target = item.attr('target'); 168 var forceReload = $(this).attr('data-force-reload'); 169 if($(this).hasClass('_force-load')){ 170 forceReload = true; 171 } 172 173 if(!forceReload) { 174 if (location.hostname === this.hostname || !this.hostname.length) { 175 // console.log('is internal url'); 176 forceReload = false; 177 } else { 178 // console.log('is external url'); 179 $(this).addClass("data-force-reload", "true"); 180 forceReload = true; 181 } 182 } 183 184 if(forceReload){ 185 window.location = url; 186 } 187 188 if(url){ 189 if(window.screenSize <= 991){ 190 var parentItem = $(item).parent('li'); 191 var parentItemId = parentItem.attr('data-id'); 192 var allowUpdate = true; 193 if(parentItem.hasClass('dropdown')){ 194 if(parentItem.hasClass('active')){ 195 if($(parentItem).hasClass('close-drop')){ 196 allowUpdate = false; 197 $(parentItem).removeClass('close-drop'); 198 }else{ 199 allowUpdate = false; 200 $(parentItem).addClass('close-drop'); 201 } 202 } 203 } 204 if(allowUpdate) { 205 $('._ft-page-content').html(loadingPage); 206 getHTML($(item).attr('href'), function (response) { 207 var pageContent = response.querySelector('#_ft-page'); 208 $('._ft-page').html(pageContent.innerHTML); 209 history.pushState({}, response.title, url); 210 _responsiveContent(); 211 }); 212 $('#navbar-main-menu .navbar-nav .nav-item').removeClass('active').removeClass('current'); 213 $(item).parents('.nav-item').addClass('current').addClass('active'); 214 } 215 }else{ 216 if(target && target === '_blank'){ 217 window.open(url); 218 }else{ 219 window.location = url; 220 } 221 } 222 } 223 224 return false; 225 }); 226 227 function windowSize() 228 { 229 window.screenSize = window.innerWidth; 230 if(window.screenSize > 991){ 231 if($('._ft-menu').hasClass('open')){ 232 $('._ft-menu').removeClass('open'); 233 } 234 235 if($('._ft-menu .navbar').hasClass('open')){ 236 $('._ft-menu .navbar').removeClass('open'); 237 } 238 239 if($('._ft-menu .navbar .collapse').hasClass('show')){ 240 $('._ft-menu .navbar .collapse').removeClass('show'); 241 } 242 243 if($('._ft-menu .nav-toggle').hasClass('open')){ 244 $('._ft-menu .nav-toggle').removeClass('open'); 245 } 246 } 247 } 248 249 window.onresize = windowSize; 250 251 252 253 // Script to fix the responsive 254 _responsiveContent(); 255 function _responsiveContent(){ 256 _runAccordion(); 257 258 // Make all the images to be responsive 259 $('.item-page').find('img').addClass('img-fluid'); 260 261 // Make all the input t use bootstrap 262 if(!$('input[type="text"]').hasClass('form-control')){ 263 $('input[type="text"]').addClass('form-control'); 264 } 265 266 // Adding the bootstrap to tables 267 if(!$('table').hasClass('table')){ 268 $('table').addClass('table'); 269 } 270 271 $('table').each(function(){ 272 $(this).wrap('<div class="table-responsive"></div>'); 273 }); 274 275 // Make download report buttons to use bootstrap 276 if(!$('.downldbtn_rprts').hasClass('btn')){ 277 $('.downldbtn_rprts').addClass('btn btn-info text-white text-decoration-none'); 278 } 279 280 // Remove the title duplicates 281 $('.page-header').html(''); 282 283 // Make all iframes responsive 284 if($('body iframe').length){ 285 $('body iframe').each(function(){ 286 let iframeHtml = "<div class=\"embed-responsive embed-responsive-16by9 mt-3 mb-3\">\n" + 287 " <iframe class=\"embed-responsive-item\" src=\""+$(this).attr("src")+"\" allowfullscreen></iframe>\n" + 288 "</div>"; 289 $(this).after(iframeHtml); 290 $(this).remove(); 291 }); 292 } 293 } 294 295 function _getAccordionItemDesc(el, id){ 296 if(el) { 297 let descEl = document.createElement('div') 298 descEl.innerHTML = el.innerHTML 299 el.remove() 300 if (descEl.querySelector('accordion')) { 301 let accordions = [].slice.call(descEl.querySelectorAll('accordion')) 302 accordions.map((accordion, kA) => {
303 if (!accordion.closest('accordion_item_desc')) { 304 let accordionID = `accordion-${id}-${kA}` 305 306 let accordionEl = document.createElement('div') 307 accordionEl.setAttribute('id', accordionID) 308 accordionEl.setAttribute('class', 'fb-accordion') 309 // temp 310 // accordionEl.setAttribute('style', 'display:none;') 311 312 let accordionItems = [].slice.call(accordion.querySelectorAll('accordion_item')) 313 let items = [] 314 accordionItems.map((item, kI) => { 315 if (!item.closest('accordion_item_desc')) { 316 let itemID = `accordion-item-${id}-${kA}-${kI}` 317 let itemEl = document.createElement('div') 318 itemEl.setAttribute('class', 'card mb-2') 319 /* Accordion Item Header */ 320 let headerItemEl = _getAccordionItemHeader(item, `${id}-${kA}-${kI}`) 321 322 323 /* Accordion Item Body */ 324 let bodyItemEl = document.createElement('div') 325 bodyItemEl.setAttribute('id', `extend-${id}-${kA}-${kI}`) 326 bodyItemEl.setAttribute('class', 'collapse') 327 bodyItemEl.setAttribute('aria-labelledby', `heading-${id}-${kA}-${kI}`) 328 bodyItemEl.setAttribute('data-bs-parent', `#${accordionID}`) 329 let cardBiEL = document.createElement('div') 330 cardBiEL.setAttribute('class', 'card-body p-3') 331 332 cardBiEL.innerHTML = _getAccordionItemDesc(item.querySelector('accordion_item_desc'), `${id}-${kA}-${kI}`) 333 334 bodyItemEl.appendChild(cardBiEL) 335 336 if (bodyItemEl && headerItemEl) { 337 /* Adding the header to item */ 338 itemEl.appendChild(headerItemEl) 339 /* Adding Body to Item */ 340 itemEl.appendChild(bodyItemEl) 341 } 342 343 /* Adding Item to accordion */ 344 accordionEl.appendChild(itemEl) 345 } 346 }) 347 accordion.remove() 348 descEl.appendChild(accordionEl) 349 } 350 }) 351 } 352 return descEl.innerHTML 353 } 354 return "" 355 } 356 357 function _getAccordionItemHeader(el, id){ 358 let headerItemEl = document.createElement('div') 359 headerItemEl.setAttribute('class', 'card-header p-0') 360 headerItemEl.setAttribute('id', `heading-${id}`) 361 let h2HIEL = document.createElement('h2') 362 h2HIEL.setAttribute('class', 'mb-0') 363 let hBtn = document.createElement('button') 364 hBtn.setAttribute('class', 'btn btn-link p-3 rounded-top w-100 text-left collapsed') 365 hBtn.setAttribute('type', 'button') 366 hBtn.setAttribute('data-bs-toggle', 'collapse') 367 hBtn.setAttribute('data-bs-target', `#extend-${id}`) 368 hBtn.setAttribute('aria-expanded', false) 369 hBtn.setAttribute('aria-controls', `extend-${id}`) 370 hBtn.innerHTML = el.querySelector('accordion_item_title').innerHTML 371 h2HIEL.appendChild(hBtn) 372 headerItemEl.appendChild(h2HIEL) 373 374 return headerItemEl 375 } 376 377 // Script to make the accordion working 378 function _runAccordion(){ 379 380 let allAccordions = [].slice.call(document.body.querySelectorAll('accordion')) 381 382 let arrayAccordions = [] 383 allAccordions.map((accordion, kA) => { 384 if(!accordion.closest('accordion_item_desc')){ 385 let accordionID = `accordion-${kA}` 386 387 let accordionEl = document.createElement('div') 388 accordionEl.setAttribute('id', accordionID) 389 accordionEl.setAttribute('class', 'fb-accordion') 390 // temp 391 // accordionEl.setAttribute('style', 'display:none;') 392 393 let accordionItems = [].slice.call(accordion.querySelectorAll('accordion_
393item')) 394 let items = [] 395 accordionItems.map((item, kI) => { 396 if(!item.closest('accordion_item_desc')) { 397 let itemID = `accordion-item-${kA}-${kI}` 398 let itemEl = document.createElement('div') 399 itemEl.setAttribute('class', 'card mb-2') 400 /* Accordion Item Header */ 401 let headerItemEl = _getAccordionItemHeader(item, `${kA}-${kI}`) 402 403 /* Adding the header to item */ 404 itemEl.appendChild(headerItemEl) 405 406 /* Accordion Item Body */ 407 let bodyItemEl = document.createElement('div') 408 bodyItemEl.setAttribute('id', `extend-${kA}-${kI}`) 409 bodyItemEl.setAttribute('class', 'collapse') 410 bodyItemEl.setAttribute('aria-labelledby', `heading-${kA}-${kI}`) 411 bodyItemEl.setAttribute('data-bs-parent', `#${accordionID}`) 412 let cardBiEL = document.createElement('div') 413 cardBiEL.setAttribute('class', 'card-body p-3') 414 415 cardBiEL.innerHTML = _getAccordionItemDesc(item.querySelector('accordion_item_desc'), `${kA}-${kI}`) 416 417 bodyItemEl.appendChild(cardBiEL) 418 419 /* Adding Body to Item */ 420 itemEl.appendChild(bodyItemEl) 421 422 /* Adding Item to accordion */ 423 accordionEl.appendChild(itemEl) 424 } 425 }) 426 427 accordion.parentNode.insertBefore(accordionEl, accordion) 428 accordion.remove() 429 } 430 }) 431 var accordions = ['.accordion-articles']; 432 if(accordions.length >0){ 433 accordions.forEach(function(accordion, id){ 434 if($(accordion).length && !$(accordion).parents(accordion).length){ 435 var parentAccordion = accordion; 436 var accordionItems = $(accordion); 437 accordionItems.each(function(pID, pVal){ 438 var accordionID = id.toString() + pID.toString(); 439 $(pVal).attr('id', 'accordion' + accordionID).addClass('fb-accordion'); 440 441 var items = $(pVal).find('h6'); 442 443 if(items.length > 0) { 444 var accordionHtml = ''; 445 items.each(function(id, item){ 446 var title = $(item).html(); 447 var div = $(item).next('div'); 448 449 if($(div).parent('div').hasClass('accordion-articles')) { 450 var desc = $(div).html(); 451 id = accordionID + id.toString(); 452 accordionHtml = accordionHtml + "<div class=\"card mb-2\">\n" + 453 " <div class=\"card-header p-0\" id=\"heading" + id + "\">\n" + 454 " <h2 class=\"mb-0\">\n" + 455 " <button class=\"btn btn-link p-3 rounded-top w-100 text-left collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#extend" + id + "\" aria-expanded=\"false\" aria-controls=\"collapse" + id + "\">\n" + 456 title + 457 " </button>\n" + 458 " </h2>\n" + 459 " </div>\n" + 460 " <div id=\"extend" + id + "\" class=\"collapse\" aria-labelledby=\"heading" + id + "\" data-bs-parent=\"#accordion" + accordionID + "\">\n" + 461 " <div class=\"card-body p-3\">\n"; 462 if($(div).find('h6')){ 463 var childs = $(div).find('h6'); 464 if(childs.length > 0){ 465 var childHtml = "<div id='accordion"+accordionID+"01' class='fb-accordion'>"; 466 childs.each(function(cid, child){ 467 468 var ctitle = $(child).html(); 469 var cdesc = $(child).next('div').html(); 470 childHtml = childHtml + "<div class=\"card mb-2\">\n" + 471 " <div class=\"card-header p-0\" id=\"heading" + cid + "\">\n" + 472 " <h2 class=\"mb-0\">\n" + 473 " <button class=\"btn btn-link p-3 rounded-top w-100 text-left collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#collapse" + cid + "\" aria-expanded=\"false\" aria-controls=\"collapse" + cid + "\">\n" + 474 ctitle + 475 " </button>\n" + 476 " </h2>\n" + 477 " </div>\n" + 478 " <div id=\"collapse" + cid + "\" class=\"collapse\" aria-labelledby=\"heading" + cid + "\" data-bs-parent=\"#accordion" + accordionID + "01\">\n" + 479 " <div class=\"card-body p-3\">" + 480 cdesc + 481 " </div>\n" + 482 " </div>\n" + 483 " </div>"; 484 $(child).next('div').remove(); 485 $(child).remove(); 486 }); 487 childHtml = childHtml + "</div>"; 488 489 var childDesc = $(item).next('div').html(); 490 accordionHtml = accordionHtml + childDesc + childHtml; 491 }else{ 492 accordionHtml = accordionHtml + desc; 493 } 494 }else{ 495 accordionHtml = accordionHtml + desc; 496 } 497 accordionHtml = accordionHtml + "</div>\n" + 498 " </div>\n" + 499 " </div>"; 500 } 501 502 }); 503 $(pVal).html(accordionHtml); 504 } 505 }); 506 } 507 }); 508 } 509 if (location.hash !== null && location.hash !== "") { 510 if(document.body.querySelector('[data-bs-target="'+location.hash+'"]')){ 511 document.body.querySelector('[data-bs-target="'+location.hash+'"]').click(); 512 window.setTimeout( () => { 513 document.body.querySelector('[data-bs-target="'+location.hash+'"]').scrollIntoView({ behavior: "smooth"}); 514 }, 500); 515 } 516 517 let anchorEl = document.body.querySelector(location.hash) 518 if(anchorEl){ 519 let accordion = anchorEl.closest('.collapse') 520 if(accordion){ 521 let accordionID = accordion.getAttribute('id') 522 if(document.body.querySelector('[data-bs-target="#'+accordionID+'"]')){ 523 document.body.querySelector('[data-bs-target="#'+accordionID+'"]').click(); 524 window.setTimeout( () => { 525 document.body.querySelector('[data-bs-target="#'+accordionID+'"]').scrollIntoView({ behavior: "smooth"}); 526 }, 500); 527 } 528 }else{ 529 window.setTimeout( () => { 530 document.body.querySelector('[data-bs-target="'+location.hash+'"]').scrollIntoView({ behavior: "smooth"}); 531 }, 500); 532 } 533 } 534 } 535 } 536}); 537
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.