Widget:AvailableCritters: Difference between revisions

m
no edit summary
No edit summary
mNo edit summary
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
<script>
<script>
// gallerySwitcher.js
// Data structure for critters and their availability
const critters = {
    "Emerald Sunbird": { "Sunday": "12 PM to 12 AM", "Tuesday": "All day", "Wednesday": "All day", "Saturday": "All day" },
    "Golden Sunbird": { "Sunday": "12 AM to 12 PM", "Tuesday": "All day", "Thursday": "All day", "Friday": "All day" },
    "Orchid Sunbird": { "Friday": "9 AM to 3 PM" },
    "Red Sunbird": { "Sunday": "12 PM to 12 AM", "Monday": "All day", "Thursday": "All day", "Saturday": "All day" },
    "Turquoise Sunbird": { "Sunday": "12 AM to 12 PM", "Monday": "All day", "Wednesday": "All day", "Friday": "All day" },
    "Black Squirrel": { "Sunday": "12 AM to 12 PM", "Tuesday": "All day", "Thursday": "All day", "Friday": "All day" },
    "Classic Squirrel": { "Sunday": "12 PM to 12 AM", "Monday": "All day", "Thursday": "All day", "Saturday": "All day" },
    "Gray Squirrel": { "Sunday": "12 PM to 12 AM", "Tuesday": "All day", "Wednesday": "All day", "Saturday": "All day" },
    "Red Squirrel": { "Sunday": "12 AM to 12 PM", "Monday": "All day", "Wednesday": "All day", "Friday": "All day" },
    "White Squirrel": { "Sunday": "12 AM to 6 AM" },
    "Blue Crocodile": { "Sunday": "12 AM to 12 PM", "Monday": "All day", "Wednesday": "All day", "Friday": "All day" },
    "Classic Crocodile": { "Sunday": "12 PM to 12 AM", "Monday": "All day", "Thursday": "All day", "Saturday": "All day" },
    "Golden Crocodile": { "Sunday": "12 AM to 12 PM", "Tuesday": "All day", "Thursday": "All day", "Friday": "All day" },
    "Pink Crocodile": { "Saturday": "6 AM to 12 PM" },
    "Red Crocodile": { "Sunday": "12 PM to 12 AM", "Tuesday": "All day", "Wednesday": "All day", "Saturday": "All day" },
    "White Crocodile": { "Sunday": "6 PM to 12 AM" },
    "Black Rabbit": { "Sunday": "12 AM to 12 PM", "Monday": "All day", "Wednesday": "All day", "Friday": "All day" },
    "Brown Rabbit": { "Sunday": "12 PM to 12 AM", "Tuesday": "All day", "Wednesday": "All day", "Saturday": "All day" },
    "Calico Rabbit": { "Thursday": "8 AM to 2 PM" },
    "Classic Rabbit": { "Sunday": "12 PM to 12 AM", "Monday": "All day", "Thursday": "All day", "Saturday": "All day" },
    "White Rabbit": { "Sunday": "12 AM to 12 PM", "Tuesday": "All day", "Thursday": "All day", "Friday": "All day" },
    "Blue Raven": { "Sunday": "12 AM to 12 PM", "Tuesday": "All day", "Thursday": "All day", "Friday": "All day" },
    "Brown Raven": { "Tuesday": "6 PM to 12 AM" },
    "Classic Raven": { "Sunday": "12 PM to 12 AM", "Monday": "All day", "Thursday": "All day", "Saturday": "All day" },
    "Red Raven": { "Sunday": "12 AM to 12 PM", "Monday": "All day", "Wednesday": "All day", "Friday": "All day" },
    "White Raven": { "Sunday": "12 PM to 12 AM", "Tuesday": "All day", "Wednesday": "All day", "Saturday": "All day" },
    "Black Sea Turtle": { "Monday": "10 AM to 4 PM" },
    "Brown Sea Turtle": { "Sunday": "12 AM to 12 PM", "Monday": "All day", "Wednesday": "All day", "Friday": "All day" },
    "Classic Sea Turtle": { "Sunday": "12 PM to 12 AM", "Monday": "All day", "Thursday": "All day", "Saturday": "All day" },
    "Purple Sea Turtle": { "Sunday": "12 AM to 12 PM", "Tuesday": "All day", "Thursday": "All day", "Friday": "All day" },
    "White Sea Turtle": { "Sunday": "12 PM to 12 AM", "Tuesday": "All day", "Wednesday": "All day", "Saturday": "All day" },
    "Black Fox": { "Sunday": "12 PM to 12 AM", "Tuesday": "All day", "Wednesday": "All day", "Saturday": "All day" },
    "Blue Fox": { "Sunday": "12 AM to 12 PM", "Tuesday": "All day", "Thursday": "All day", "Friday": "All day" },
    "Classic Fox": { "Sunday": "12 AM to 12 PM", "Monday": "All day", "Wednesday": "All day", "Friday": "All day" },
    "Red Fox": { "Saturday": "2 AM to 8 AM" },
    "White Fox": { "Sunday": "12 PM to 12 AM", "Monday": "All day", "Thursday": "All day", "Saturday": "All day" },
    "Black Raccoon": { "Sunday": "12 PM to 12 AM", "Tuesday": "All day", "Wednesday": "All day", "Saturday": "All day" },
    "Blue Raccoon": { "Wednesday": "4 PM to 10 PM" },
    "Classic Raccoon": { "Sunday": "12 PM to 12 AM", "Monday": "All day", "Thursday": "All day", "Saturday": "All day" },
    "Red Raccoon": { "Sunday": "12 AM to 12 PM", "Monday": "All day", "Wednesday": "All day", "Friday": "All day" },
    "White Raccoon": { "Sunday": "12 AM to 12 PM", "Tuesday": "All day", "Thursday": "All day", "Friday": "All day" },
    "Black and White Capybara": { "Sunday": "12 PM to 12 AM", "Tuesday": "All day", "Thursday": "12 PM to 12 AM", "Friday": "12 PM to 12 AM", "Saturday": "12 PM to 12 AM" },
    "Blue Striped Capybara": { "Monday": "12 AM to 12 PM", "Tuesday": "12 AM to 12 PM", "Wednesday": "12 AM to 12 PM", "Thursday": "All day", "Saturday": "All day" },
    "Classic Capybara": { "Sunday": "All day", "Monday": "All day", "Tuesday": "All day", "Wednesday": "All day", "Thursday": "All day", "Friday": "All day", "Saturday": "All day" },
    "Gray Spotted Capybara": { "Monday": "12 PM to 12 AM", "Tuesday": "12 PM to 12 AM", "Wednesday": "12 PM to 12 AM", "Friday": "All day", "Saturday": "All day" },
    "Red and White Striped Capybara": { "Saturday": "12 PM to 6 PM" },
    "Blue and Red Striped Cobra": { "Sunday": "All day", "Monday": "12 PM to 12 AM", "Tuesday": "12 PM to 12 AM", "Thursday": "All day", "Saturday": "12 PM to 12 AM" },
    "Classic Cobra": { "Sunday": "All day", "Monday": "All day", "Tuesday": "All day", "Wednesday": "All day", "Thursday": "All day", "Friday": "All day", "Saturday": "All day" },
    "Green and White Striped Cobra": { "Thursday": "6 AM to 12 PM" },
    "Pink Spotted Cobra": { "Sunday": "12 AM to 12 PM", "Monday": "All day", "Wednesday": "12 AM to 12 PM", "Thursday": "12 AM to 12 PM", "Friday": "All day" },
    "Yellow and Purple Striped Cobra": { "Sunday": "12 PM to 12 AM", "Tuesday": "All day", "Wednesday": "12 PM to 12 AM", "Thursday": "12 PM to 12 AM", "Saturday": "All day" },
    "Beige Monkey": { "Sunday": "All day", "Monday": "12 PM to 12 AM", "Wednesday": "12 PM to 12 AM", "Thursday": "All day", "Friday": "12 PM to 12 AM" },
    "Black and Brown Monkey": { "Sunday": "12 PM to 12 AM", "Tuesday": "12 PM to 12 AM", "Wednesday": "All day", "Thursday": "12 PM to 12 AM", "Saturday": "All day" },
    "Black and Gray Monkey": { "Tuesday": "6 PM to 12 AM" },
    "Classic Monkey": { "Sunday": "All day", "Monday": "All day", "Tuesday": "All day", "Wednesday": "All day", "Thursday": "All day", "Friday": "All day", "Saturday": "All day" },
    "Red and Beige Monkey": { "Monday": "12 AM to 12 PM", "Tuesday": "All day", "Wednesday": "12 AM to 12 PM", "Friday": "12 AM to 12 PM", "Saturday": "All day" }
};


// Function to switch images based on the day and time
    function isAvailable(critter, day, hour) {
function switchGalleryImage() {
        const availability = critters[critter][day];
  // Get the current day and time
        if (!availability) return false; // 'n/a' or undefined
  var now = new Date();
        if (availability === 'All day') return true;
  var dayOfWeek = now.getDay(); // Sunday is 0, Monday is 1, ..., Saturday is 6
        const [start, end] = availability.split(' to ');
  var currentTime = now.getHours();
        const startHour = parseHour(start);
        const endHour = parseHour(end);
        return hour >= startHour && hour < endHour;
    }
 
    function parseHour(timeStr) {
        const [time, period] = timeStr.split(' ');
        let [hours, minutes] = time.split(':');
        hours = parseInt(hours);
        if (period === 'PM' && hours !== 12) hours += 12;
        if (period === 'AM' && hours === 12) hours = 0;
        return hours;
    }


  // Define the gallery element ID
    function updateCritterList() {
  var galleryId = 'crittergallery';
        const now = new Date();
        const dayOfWeek = now.toLocaleString('en-US', { weekday: 'long' });
        const hour = now.getHours();
        let listContent = '';


  // Define the image sources for each day and time range
        Object.entries(critters).forEach(([critterName, _]) => {
  var imageSources = {
            if (isAvailable(critterName, dayOfWeek, hour)) {
    0: { start: 0, end: 24, source: 'File:Classic_Squirrel.png' },
                listContent += `{{name|${critterName}}}<br>`;
    1: { start: 0, end: 24, source: 'File:Red_Squirrel.png' },
            }
    2: { start: 0, end: 24, source: 'File:Black_Squirrel.png' },
        });
    // Add entries for other days and times as needed
  };


  // Get the gallery element
        parseContent(listContent);
  var gallery = document.getElementById(galleryId);
    }


  // Check if the gallery element exists
    function parseContent(wikitext) {
  if (gallery) {
        const apiEndpoint = "/api.php";
    // Get the image source based on the current day and time
        const params = new URLSearchParams({
    var imageSource = imageSources[dayOfWeek];
            action: 'parse',
            format: 'json',
            contentmodel: 'wikitext',
            text: wikitext,
            prop: 'text'
        });


    if (imageSource && currentTime >= imageSource.start && currentTime < imageSource.end) {
        fetch(apiEndpoint + "?" + params.toString(), {
      // Change the source of the first image in the gallery
            method: 'POST',
      gallery.getElementsByTagName('img')[0].src = imageSource.source;
            credentials: 'same-origin'
        })
        .then(response => response.json())
        .then(data => {
            const parsedHtml = data.parse.text['*'];
            document.getElementById('critterList').innerHTML = parsedHtml;
        })
        .catch(error => console.error('Error parsing content:', error));
     }
     }
  }
}


// Call the switchGalleryImage function when the page is loaded
    window.addEventListener('load', function() {
window.onload = switchGalleryImage;
        updateCritterList(); // Initial update
        setInterval(updateCritterList, 60000); // Refresh every minute
    });
</script>
</script>