Jump to content

Widget:UPDEvents: Difference between revisions

From Iskomunidad
No edit summary
No edit summary
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
<includeonly>
<includeonly>
<div id="upd-events-widget">
<div id="upd-events-widget" class="upd-events-widget">
   <div class="upd-events-loading">
   <div class="upd-events-loading">Loading upcoming events...</div>
    Loading upcoming events...
  </div>
   <ul class="upd-events-list" style="display:none;"></ul>
   <ul class="upd-events-list" style="display:none;"></ul>
</div>
</div>
<style>
.upd-events-widget {
  color: #000;
  font-size: 15px;
}
.upd-events-list {
  list-style: none;
  padding: 0;
  margin: 0;
}
.upd-events-list li {
  margin: 0;
  padding: 10px 0;
  border-bottom: 1px solid #e5e5e5;
}
.upd-events-list li:last-child {
  border-bottom: none;
}
.upd-events-list a {
  color: #0E6021 !important;
  text-decoration: none;
  font-weight: 600;
}
.upd-events-list a:hover {
  text-decoration: underline;
}
.upd-events-loading,
.upd-events-empty {
  color: #555;
  font-size: 14px;
}
</style>


<script>
<script>
(function () {
(function () {
   var container = document.getElementById('upd-events-widget');
   var container = document.getElementById('upd-events-widget');
   if (!container || container.dataset.loaded === '1') return;
 
   if (!container || container.dataset.loaded === '1') {
    return;
  }
 
   container.dataset.loaded = '1';
   container.dataset.loaded = '1';


   var loading = container.querySelector('.upd-events-loading');
   var loading = container.querySelector('.upd-events-loading');
   var list = container.querySelector('.upd-events-list');
   var list = container.querySelector('.upd-events-list');
  var pageUrl = 'https://upd.edu.ph/events-list/';


   function showError() {
   loading.textContent =
    loading.textContent = 'Unable to load events automatically. ';
    'Widget JavaScript is running. Requesting UP Diliman...';
    var link = document.createElement('a');
 
     link.href = pageUrl;
  var endpoint = new URL(
    link.textContent = 'View all UP Diliman events';
     'https://upd.edu.ph/wp-admin/admin-ajax.php'
    link.target = '_blank';
  );
    link.rel = 'noopener noreferrer';
    loading.appendChild(link);
  }


   function parseEventDate(text) {
   var params = {
     var match = text.match(
     action: 'search_events',
      /\b(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*\s+(\d{1,2})\s*\|\s*(\d{1,2}):(\d{2})\s*(AM|PM)/i
    id: '1',
     );
    scope: 'future',
    orderby: 'event_start_date,event_start_time,event_name',
    view: 'list-grouped',
     pno: '1'
  };


     if (!match) return null;
  Object.keys(params).forEach(function (key) {
     endpoint.searchParams.set(key, params[key]);
  });


    var months = {
  var finished = false;
      jan:0, feb:1, mar:2, apr:3, may:4, jun:5,
      jul:6, aug:7, sep:8, oct:9, nov:10, dec:11
    };


    var now = new Date();
  var timeout = setTimeout(function () {
    var month = months[match[1].slice(0, 3).toLowerCase()];
     if (finished) return;
    var day = Number(match[2]);
    var hour = Number(match[3]) % 12;
     var minute = Number(match[4]);


     if (match[5].toUpperCase() === 'PM') hour += 12;
     finished = true;
    loading.textContent =
      'The UP Diliman request timed out or is blocked.';
  }, 10000);


     var year = now.getFullYear();
  fetch(endpoint.toString(), {
     var eventDate = new Date(year, month, day, hour, minute);
    method: 'GET',
    mode: 'cors',
     credentials: 'omit'
  })
  .then(function (response) {
     if (finished) return null;


    // Handle year boundaries.
     if (!response.ok) {
     if (month === 0 && now.getMonth() === 11) {
       throw new Error('HTTP ' + response.status);
       eventDate.setFullYear(year + 1);
    } else if (month === 11 && now.getMonth() === 0) {
      eventDate.setFullYear(year - 1);
     }
     }


     return eventDate;
     return response.text();
   }
   })
  .then(function (html) {
    if (finished || html === null) return;
 
    finished = true;
    clearTimeout(timeout);
 
    var doc = new DOMParser().parseFromString(html, 'text/html');
 
    var anchors = doc.querySelectorAll(
      '#em-events-list-grouped-1 a[href*="/events/"], ' +
      '.em-events-list a[href*="/events/"]'
    );


  fetch(pageUrl)
     var seen = new Set();
    .then(function (response) {
    var events = [];
      if (!response.ok) throw new Error('Unable to retrieve events page');
      return response.text();
     })
    .then(function (html) {
      var doc = new DOMParser().parseFromString(html, 'text/html');
      var anchors = doc.querySelectorAll(
        '#em-events-list-grouped-1 a[href*="/events/"]'
      );


       var events = [];
    anchors.forEach(function (anchor) {
       var seen = {};
       var heading = anchor.querySelector('h4');
       if (!heading) return;


       anchors.forEach(function (anchor) {
       var title = heading.textContent.trim();
        var heading = anchor.querySelector('h4.d-teal.fw-700');
      var url;
        var dateText = anchor.querySelector('li.list-inline-item');


         if (!heading || !dateText) return;
      try {
         url = new URL(
          anchor.getAttribute('href'),
          'https://upd.edu.ph'
        ).href;
      } catch (e) {
        return;
      }


        var title = heading.textContent.trim();
      if (!title || seen.has(url)) return;
        var date = parseEventDate(dateText.textContent);
        var url = new URL(anchor.getAttribute('href'), pageUrl).href;


        if (!title || !date || date <= new Date()) return;
      if (!/^https:\/\/upd\.edu\.ph\/events\//i.test(url)) {
         if (seen[url]) return;
         return;
      }


        seen[url] = true;
      seen.add(url);
        events.push({
      events.push({
          title: title,
        title: title,
          url: url,
        url: url
          date: date
        });
       });
       });
    });


       events.sort(function (a, b) {
    list.replaceChildren();
        return a.date - b.date;
 
       });
    if (events.length === 0) {
       loading.textContent =
        'The request succeeded, but no event titles were found.';
 
      return;
    }
 
    events.slice(0, 5).forEach(function (event) {
      var li = document.createElement('li');
       var a = document.createElement('a');


       events = events.slice(0, 5);
       a.href = event.url;
      a.textContent = event.title;
      a.target = '_blank';
      a.rel = 'noopener noreferrer';


       if (!events.length) {
       li.appendChild(a);
        loading.textContent = 'No upcoming events were found.';
      list.appendChild(li);
        return;
    });
      }


      events.forEach(function (event) {
    loading.style.display = 'none';
        var item = document.createElement('li');
    list.style.display = 'block';
        var link = document.createElement('a');
  })
  .catch(function (error) {
    if (finished) return;


        link.href = event.url;
    finished = true;
        link.textContent = event.title;
    clearTimeout(timeout);
        link.target = '_blank';
        link.rel = 'noopener noreferrer';


        item.appendChild(link);
    console.error('UPEvents widget error:', error);
        list.appendChild(item);
      });


      loading.style.display = 'none';
    loading.textContent =
       list.style.display = 'block';
       'Request failed: ' +
    })
      error.name + ' — ' + error.message;
   
  });
.catch(function (error) {
  console.error('UPEvents widget error:', error);
  loading.textContent =
    'Fetch error: ' + error.message +
    '. Check the browser Console for details.';
});
);
})();
})();
</script>
</script>
</includeonly>
</includeonly>

Latest revision as of 03:24, 29 October 2026