Jump to content

MediaWiki:Common.js: Difference between revisions

From Iskomunidad
No edit summary
No edit summary
Line 145: Line 145:
});
});


/* Maps */
  /* Maps */
  /* UP Diliman Main Map */
  /* UP Diliman Main Map */
  (function () {
  (function () {
     'use strict';
     'use strict';


     function restrictUpDilimanMap() {
    var upDilimanBounds = [
         var container = document.querySelector(
        [14.640, 121.055], // Southwest
            '#up-diliman-main-map .leaflet-container'
        [14.665, 121.085]  // Northeast
        );
    ];
 
     function restrictMap(map) {
        if (!map || !map.getContainer) {
            return;
        }
 
         var container = map.getContainer();


         if (!container) {
         if (!container ||
             return false;
            !container.closest('#up-diliman-main-map')) {
             return;
         }
         }


         if (!container._leaflet_id) {
        map.setMaxBounds(upDilimanBounds);
        map.setMinZoom(15);
        map.options.maxBoundsViscosity = 1.0;
    }
 
    function hookLeaflet() {
         if (typeof window.L === 'undefined' || !L.Map) {
             return false;
             return false;
         }
         }


         /*
         if (L.Map.prototype._upDilimanHookInstalled) {
          * Leaflet keeps the map instance in its internal object registry.
            return true;
          * Find the object whose _leaflet_id matches the container.
         }
          */
         var map = null;


         for (var key in L) {
         L.Map.prototype._upDilimanHookInstalled = true;
            if (L.hasOwnProperty(key)) {
                // Nothing needed here; registry is handled below.
            }
        }


         /*
         /*
           * Leaflet's global map registry.
           * Apply to maps created after this script loads.
          * Try the common Leaflet internal storage locations.
           */
           */
         if (L.Map && L.Map._instances) {
         L.Map.addInitHook(function () {
             map = L.Map._instances[container._leaflet_id];
             restrictMap(this);
         }
         });


         /*
         /*
           * If the registry above isn't available, inspect the container's
           * Also catch maps that already exist.
           * Leaflet event data for a map reference.
          *
          * Maps creates a Leaflet map on the .maps-map element.
          * We can identify it through Leaflet's event handlers by
           * temporarily listening for map movement.
           */
           */
         if (!map && container._leaflet_events) {
         var containers = document.querySelectorAll(
            for (var eventName in container._leaflet_events) {
            '#up-diliman-main-map .leaflet-container'
                var event = container._leaflet_events[eventName];
        );


                if (event && event._map) {
        containers.forEach(function (container) {
                    map = event._map;
            /*
                    break;
              * Trigger a resize event. This gives Leaflet an opportunity
                }
              * to expose the existing map through its normal event flow.
             }
              */
        }
             var event = document.createEvent('Event');
 
             event.initEvent('resize', true, true);
        if (!map) {
             container.dispatchEvent(event);
            return false;
         });
        }
 
        var upDilimanBounds = [
             [14.640, 121.055],
             [14.665, 121.085]
        ];
 
        map.setMaxBounds(upDilimanBounds);
         map.options.maxBoundsViscosity = 1.0;
        map.setMinZoom(15);


         return true;
         return true;
Line 215: Line 215:


     /*
     /*
       * Maps may initialize after Common.js loads.
       * Wait for Leaflet and Maps to initialize.
      * Try repeatedly for a few seconds.
       */
       */
     var attempts = 0;
     var attempts = 0;
Line 223: Line 222:
         attempts++;
         attempts++;


         if (typeof window.L !== 'undefined' &&
         if (hookLeaflet()) {
            typeof L.Map !== 'undefined' &&
            restrictUpDilimanMap()) {
             clearInterval(timer);
             clearInterval(timer);
         }
         }

Revision as of 06:00, 25 September 2026

/* For Main Page Announcement area //this code pulls from the https://ilc.upd.edu.ph/all-posts-and-announcements/ PAGE */
console.log("JS WORKING");

(function () {

    console.log("RUNNING IMMEDIATELY");

    const container =
        document.getElementById("ilc-announcements");

    console.log("Container:", container);

    if (!container) return;

    container.innerHTML = "Loading script...";

    fetch("https://ilc.upd.edu.ph/wp-json/wp/v2/posts?per_page=5")
        .then(res => res.json())
        .then(posts => {

            let html = "";

            posts.forEach(post => {
                html += `
                    <p>
                        <a href="${post.link}" target="_blank">
                            ${post.title.rendered}
                        </a>
                    </p>
                `;
            });

            container.innerHTML = html;

        })
        .catch(err => {
            console.error("FETCH ERROR:", err);
            container.innerHTML = "<p>Failed to load announcements</p>";
        });

})();
/*end of new code */

/* Any JavaScript here will be loaded for all users on every page load. */
$(window).on('load', function(){
	$('#site-tools ul').append("<li><a href='https://iskwiki.upd.edu.ph' target='_blank'>Flipbook</li>");
});

/*Helpdesk bubble*/
/*
$(function () {
    var bubble = $('<div id="ost-bubble">💬</div>');
    var panel = $('<div id="ost-panel"><iframe src="https://helpdesk.ilc.upd.edu.ph/o.php"></iframe></div>');

    $('body').append(bubble).append(panel);

    bubble.on('click', function () {
        panel.toggle();
    });
});
*/
/* Helpdesk bubble */
$(function () {
    var bubble = $('<div id="ost-bubble">' +
    				'<img src="https://helpdesk.ilc.upd.edu.ph/images/ilc-images/Helpdesk-logo-bubble.png" alt="💬">' +
    				'</div>');

    var panel = $(
        '<div id="ost-panel">' +
            '<div id="ost-panel-header">' +
                '<img src="https://helpdesk.ilc.upd.edu.ph/logo.php" alt="Helpdesk" style="height:80px;"> ' +
                '<span id="ost-panel-close">&times;</span>' +
            '</div>' +
            '<div id="ost-panel-body">' +
                '<iframe src="https://helpdesk.ilc.upd.edu.ph/o.php"></iframe>' +
            '</div>' +
            '<div id="ost-panel-footer">' +
                '' +
            '</div>' +
        '</div>'
    );

    $('body').append(bubble).append(panel);

    bubble.on('click', function () {
        panel.toggleClass('ost-open');
    });

    panel.find('#ost-panel-close').on('click', function () {
        panel.removeClass('ost-open');
    });
});

/*Pop-up*/
$(function () {
    // Change this whenever you update the popup
    const popupVersion = "welcome-v1";

    // Only show once on initial visit
    if (localStorage.getItem(popupVersion)) {
        return;
    }
	
	//shows after browse time elapse
	 let elapsed = 0;
    const interval = 100; // 1 msecond

    const timer = setInterval(function () {
        if (!document.hidden) {
            elapsed += interval;
        }

        if (elapsed >= 6000) {
            clearInterval(timer);
            showPopup();
        }
    }, interval);
	
function showPopup() {
    const overlay = $(`
        <div id="welcome-overlay">
            <div id="welcome-popup">
                <button id="welcome-close">&times;</button>

                <a href="https://upsystemdiliman.qualtrics.com/jfe/form/SV_3r4gfKrUHQxo6c6" target="_blank">
                <img src="/images/Survey-link.png"
                alt="Survey Link" id="welcome-image">
				</a>
				
            </div>
        </div>
    `);

    $("body").append(overlay);

    function closePopup() {
        localStorage.setItem(popupVersion, "shown");
        overlay.fadeOut(300, function () {
            overlay.remove();
        });
    }

    $("#welcome-close").on("click", closePopup);
}
});

  /* Maps */
 /* UP Diliman Main Map */
 (function () {
     'use strict';

     var upDilimanBounds = [
         [14.640, 121.055], // Southwest
         [14.665, 121.085]  // Northeast
     ];

     function restrictMap(map) {
         if (!map || !map.getContainer) {
             return;
         }

         var container = map.getContainer();

         if (!container ||
             !container.closest('#up-diliman-main-map')) {
             return;
         }

         map.setMaxBounds(upDilimanBounds);
         map.setMinZoom(15);
         map.options.maxBoundsViscosity = 1.0;
     }

     function hookLeaflet() {
         if (typeof window.L === 'undefined' || !L.Map) {
             return false;
         }

         if (L.Map.prototype._upDilimanHookInstalled) {
             return true;
         }

         L.Map.prototype._upDilimanHookInstalled = true;

         /*
          * Apply to maps created after this script loads.
          */
         L.Map.addInitHook(function () {
             restrictMap(this);
         });

         /*
          * Also catch maps that already exist.
          *
          * Maps creates a Leaflet map on the .maps-map element.
          * We can identify it through Leaflet's event handlers by
          * temporarily listening for map movement.
          */
         var containers = document.querySelectorAll(
             '#up-diliman-main-map .leaflet-container'
         );

         containers.forEach(function (container) {
             /*
              * Trigger a resize event. This gives Leaflet an opportunity
              * to expose the existing map through its normal event flow.
              */
             var event = document.createEvent('Event');
             event.initEvent('resize', true, true);
             container.dispatchEvent(event);
         });

         return true;
     }

     /*
      * Wait for Leaflet and Maps to initialize.
      */
     var attempts = 0;

     var timer = setInterval(function () {
         attempts++;

         if (hookLeaflet()) {
             clearInterval(timer);
         }

         if (attempts >= 50) {
             clearInterval(timer);
         }
     }, 100);

 }());
 /* End of UP Diliman Main Map */