Jump to content

Widget:UPDEvents: Difference between revisions

From Iskomunidad
No edit summary
No edit summary
 
(11 intermediate revisions by the same user not shown)
Line 1: Line 1:
<includeonly>
<includeonly>
<div id="upd-events-widget" class="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 UP Diliman events...
  <ul class="upd-events-list" style="display:none;"></ul>
    </div>
 
    <ul class="upd-events-list" style="display:none;"></ul>
 
    <div class="upd-events-error" style="display:none;">
        Events are temporarily unavailable.
        <a href="https://upd.edu.ph/events-list/" target="_blank" rel="noopener">
            View the official events list
        </a>.
    </div>
 
    <div class="upd-events-footer">
        <a href="https://upd.edu.ph/events/" target="_blank" rel="noopener">
            View all UP Diliman events →
        </a>
    </div>
</div>
</div>


<style>
<style>
.upd-events-widget {
.upd-events-widget {
    width: 100%;
  color: #000;
    box-sizing: border-box;
  font-size: 15px;
    color: #000;
}
.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>
(function () {
  var container = document.getElementById('upd-events-widget');
  if (!container || container.dataset.loaded === '1') {
    return;
  }
  container.dataset.loaded = '1';
  var loading = container.querySelector('.upd-events-loading');
  var list = container.querySelector('.upd-events-list');
  loading.textContent =
    'Widget JavaScript is running. Requesting UP Diliman...';
  var endpoint = new URL(
    'https://upd.edu.ph/wp-admin/admin-ajax.php'
  );


.upd-events-widget .upd-events-list {
  var params = {
     list-style: none;
     action: 'search_events',
     padding: 0;
    id: '1',
     margin: 0;
    scope: 'future',
}
    orderby: 'event_start_date,event_start_time,event_name',
     view: 'list-grouped',
     pno: '1'
  };


.upd-events-widget .upd-events-list li {
  Object.keys(params).forEach(function (key) {
     padding: 10px 0;
     endpoint.searchParams.set(key, params[key]);
    border-bottom: 1px solid #e5e5e5;
  });
    line-height: 1.5;
}


.upd-events-widget .upd-events-list li:last-child {
  var finished = false;
    border-bottom: none;
}


.upd-events-widget .upd-events-list a {
  var timeout = setTimeout(function () {
     color: #850038 !important;
     if (finished) return;
    text-decoration: none;
    font-weight: 500;
}


.upd-events-widget .upd-events-list a:hover {
    finished = true;
    text-decoration: underline;
    loading.textContent =
}
      'The UP Diliman request timed out or is blocked.';
  }, 10000);


.upd-events-widget .upd-events-loading,
  fetch(endpoint.toString(), {
.upd-events-widget .upd-events-error {
    method: 'GET',
     padding: 8px 0;
     mode: 'cors',
     color: #333;
     credentials: 'omit'
}
  })
  .then(function (response) {
    if (finished) return null;


.upd-events-widget .upd-events-footer {
    if (!response.ok) {
    margin-top: 12px;
      throw new Error('HTTP ' + response.status);
     font-size: 0.9em;
     }
}


.upd-events-widget .upd-events-footer a {
    return response.text();
     color: #850038 !important;
  })
    text-decoration: none;
  .then(function (html) {
}
     if (finished || html === null) return;


.upd-events-widget .upd-events-footer a:hover {
    finished = true;
     text-decoration: underline;
     clearTimeout(timeout);
}
</style>


<script>
    var doc = new DOMParser().parseFromString(html, 'text/html');
(function () {
    "use strict";


     var widgets = document.querySelectorAll(
     var anchors = doc.querySelectorAll(
        '.upd-events-widget:not([data-loaded])'
      '#em-events-list-grouped-1 a[href*="/events/"], ' +
      '.em-events-list a[href*="/events/"]'
     );
     );


     widgets.forEach(function (widget) {
     var seen = new Set();
        widget.setAttribute('data-loaded', 'true');
    var events = [];


        var loading = widget.querySelector('.upd-events-loading');
    anchors.forEach(function (anchor) {
        var list = widget.querySelector('.upd-events-list');
      var heading = anchor.querySelector('h4');
        var error = widget.querySelector('.upd-events-error');
      if (!heading) return;


        // Endpoint on the same Iskomunidad server.
      var title = heading.textContent.trim();
        var endpoint = '/upd-events-proxy.php';
      var url;


         fetch(endpoint, {
      try {
            method: 'GET',
         url = new URL(
            credentials: 'same-origin',
          anchor.getAttribute('href'),
            cache: 'no-cache'
          'https://upd.edu.ph'
        })
         ).href;
         .then(function (response) {
      } catch (e) {
            if (!response.ok) {
        return;
                throw new Error('Could not load events.');
      }
            }
            return response.json();
        })
        .then(function (events) {
            if (!Array.isArray(events)) {
                throw new Error('Unexpected event data.');
            }


            loading.style.display = 'none';
      if (!title || seen.has(url)) return;


            if (events.length === 0) {
      if (!/^https:\/\/upd\.edu\.ph\/events\//i.test(url)) {
                error.style.display = 'block';
        return;
                error.textContent =
      }
                    'No upcoming events were found. ';
                var link = document.createElement('a');
                link.href = 'https://upd.edu.ph/events-list/';
                link.target = '_blank';
                link.rel = 'noopener';
                link.textContent = 'View the official events list';
                error.appendChild(link);
                error.appendChild(document.createTextNode('.'));
                return;
            }


            events.slice(0, 5).forEach(function (event) {
      seen.add(url);
                if (!event.title || !event.url) {
      events.push({
                    return;
        title: title,
                }
        url: url
      });
    });


                // Only allow official UP Diliman event links.
    list.replaceChildren();
                var url;
                try {
                    url = new URL(event.url);
                } catch (e) {
                    return;
                }


                if (
    if (events.length === 0) {
                    url.protocol !== 'https:' ||
      loading.textContent =
                    url.hostname !== 'upd.edu.ph' ||
        'The request succeeded, but no event titles were found.';
                    !url.pathname.startsWith('/events/')
                ) {
                    return;
                }


                var item = document.createElement('li');
      return;
                var anchor = document.createElement('a');
    }


                anchor.href = url.href;
    events.slice(0, 5).forEach(function (event) {
                anchor.target = '_blank';
      var li = document.createElement('li');
                anchor.rel = 'noopener noreferrer';
      var a = document.createElement('a');
                anchor.textContent = event.title;


                item.appendChild(anchor);
      a.href = event.url;
                list.appendChild(item);
      a.textContent = event.title;
            });
      a.target = '_blank';
      a.rel = 'noopener noreferrer';


            if (list.children.length === 0) {
      li.appendChild(a);
                error.style.display = 'block';
      list.appendChild(li);
            } else {
                list.style.display = 'block';
            }
        })
        .catch(function (err) {
            console.error('UP Diliman Events widget:', err);
            loading.style.display = 'none';
            error.style.display = 'block';
        });
     });
     });
    loading.style.display = 'none';
    list.style.display = 'block';
  })
  .catch(function (error) {
    if (finished) return;
    finished = true;
    clearTimeout(timeout);
    console.error('UPEvents widget error:', error);
    loading.textContent =
      'Request failed: ' +
      error.name + ' — ' + error.message;
  });
})();
})();
</script>
</script>
</includeonly>
</includeonly>

Latest revision as of 03:24, 29 October 2026