Newer
Older
2023-ryuei / system / event / script.js
// GASからJSONデータを取得してHTML要素を生成する
async function fetchAndGenerateData() {
    const response = await fetch('https://script.google.com/macros/s/AKfycbwhEqSQzolJ2Bs91XRgxATx45NPCShqjHxCCukqXLB2Jg4XayGqibBPvEZ96kAcgp7Z/exec');
    const jsonData = await response.json();
    // HTML内の要素を取得
    const nameElement = document.getElementById('name');
    const eventContainer = document.getElementById('eventContainer');

    nameElement.textContent = jsonData[0].areaID;

    const categories = {};
    // JSONデータをもとに要素を生成
    for (const data of jsonData) {
        const category = data.category;
        if (!categories[category]) {
            categories[category] = [];
        }
        categories[category].push(data);
    }

    for (const category in categories) {
        const categoryId = categories[category].length;
        const categoryContainer = createCategoryContainer(category, categoryId);

        // カテゴリーごとにメニューを追加できるようにした
        for (const data of categories[category]) {
            const eventDiv = createEventElement(data);
            categoryContainer.appendChild(eventDiv);
        }
        eventContainer.appendChild(categoryContainer);
    }
}

// カテゴリーごとのコンテナを生成
function createCategoryContainer(category, categoryId) {
    const categoryContainer = document.createElement('div');
    categoryContainer.classList.add('categoryContainer');

    const h2 = document.createElement('h2');
    h2.classList.add('category');
    h2.textContent = category;
    h2.id = `category-${categoryId}`;
    eventContainer.appendChild(h2);

    const navLink = document.createElement('a');
    navLink.href = `#category-${categoryId}`;
    navLink.textContent = category;
    const navItem = document.createElement('li');
    navItem.appendChild(navLink);
    document.querySelector('.navbar ul').appendChild(navItem);

    return categoryContainer;
}

// イベント要素を生成
function createEventElement(data) {
    const div = document.createElement('div');
    div.classList.add('event-item');

    if (data.pageLink) {
        const a = document.createElement('a');
        a.href = data.pageLink;
        a.target = '_blank';
        div.appendChild(a);

        const img = createImageElement(data.img);
        a.appendChild(img);
    } else {
        const img = createImageElement(data.img);
        div.appendChild(img);
    }

    const h3 = createHeadingElement('h3', 'eventName', data.eventName);
    div.appendChild(h3);

    if (data.location) {
        const p1 = createParagraphElement('p', 'location', `場所: ${data.location}`);
        div.appendChild(p1);
    }

    if (data.date) {
        const p2 = createParagraphElement('p', 'date', `開催期間: ${data.date}${data.inSession === 'O' ? ' (終了)' : ''}`);
        div.appendChild(p2);
    }

    return div;
}

// 画像要素を生成
function createImageElement(imgSrc) {
    const img = document.createElement('img');
    img.src = imgSrc;
    return img;
}

// ヘッディング要素を生成
function createHeadingElement(tag, className, textContent) {
    const element = document.createElement(tag);
    element.classList.add(className);
    element.textContent = textContent;
    return element;
}

// 段落要素を生成
function createParagraphElement(tag, className, textContent) {
    const element = document.createElement(tag);
    element.classList.add(className);
    element.textContent = textContent;
    return element;
}

// ページ読み込み時にJSONデータを取得してHTML要素を生成
window.addEventListener('DOMContentLoaded', fetchAndGenerateData);