PageSourceSearch

https://us.fulbrightonline.org/templates/us/js/_template_bs5.js?v=1790238734

js fulbrightonline.org collected 2026-09-24 08:32:27 UTC 23,850 bytes, 537 lines download raw bytes

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.