MediaWiki:Common.js: Difference between revisions

From Encyclopedium Universum
Created page with "→‎Any JavaScript here will be loaded for all users on every page load.: function showModal(element) { const modal = element.nextElementSibling; modal.style.display = 'block'; } function closeModal(element) { const modal = element.closest('.modal'); modal.style.display = 'none'; }"
 
mNo edit summary
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
/* Any JavaScript here will be loaded for all users on every page load. */
/* Any JavaScript here will be loaded for all users on every page load. */
document.addEventListener("DOMContentLoaded", function() {
    const modalLinks = document.querySelectorAll('span[onclick^="showModal"]');
    modalLinks.forEach(link => {
        link.addEventListener("click", function() {
            showModal(link);
        });
    });
    const closeButtons = document.querySelectorAll('.modal-content span[onclick^="closeModal"]');
    closeButtons.forEach(button => {
        button.addEventListener("click", function() {
            closeModal(button);
        });
    });
});
function showModal(element) {
function showModal(element) {
    alert("showModal function called"); // Confirm function call
     const modal = element.nextElementSibling;
     const modal = element.nextElementSibling;
     modal.style.display = 'block';
     if (modal) {
        alert("Modal element found. Setting display to 'block'"); // Confirm element
        modal.style.display = 'block'; // Set display to block
        modal.style.opacity = '1';    // Ensure opacity is fully visible
        modal.style.visibility = 'visible'; // Set visibility to ensure no conflicts
    } else {
        alert("Modal element not found."); // Debugging alert
    }
}
}
function closeModal(element) {
function closeModal(element) {
    alert("closeModal function called"); // Confirm function call
     const modal = element.closest('.modal');
     const modal = element.closest('.modal');
     modal.style.display = 'none';
     if (modal) {
        alert("Modal element found. Hiding it."); // Confirm element
        modal.style.display = 'none'; // Set display to none
    } else {
        alert("Modal element not found in closeModal function"); // Debugging alert
    }
}
}
(function(){
  // Tanakh verse counts
  const verseCounts = {
    "Genesis":    [31,25,24,26,32,22,24,22,29,32,32,20,18,24,21,16,27,33,38,18,34,24,20,67,34,35,46,22,35,43,55,32,20,31,29,43,36,30,23,23,57,38,34,34,31,22,33,26,22,25],
    "Exodus":      [22,25,22,31,23,30,25,32,35,29,10,51,22,31,27,36,16,27,25,26,37,30,33,18,40,37,21,43,46,38,18,35,23,35,35,38,29,31,43,38],
    "Leviticus":  [17,16,17,35,19,30,38,36,24,20,47,8,59,57,33,34,16,30,37,27,24,33,44,23,55,46,34],
    "Numbers":    [54,34,51,49,31,27,89,26,23,36,35,16,33,45,41,50,13,32,22,29,35,41,30,25,18,65,23,31,40,16,54,42,56,29,34,13],
    "Deuteronomy": [46,37,29,49,33,25,26,20,29,22,32,32,18,29,23,22,20,22,21,20,23,30,25,22,19,19,26,68,29,20,30,52,29,12],
    // Add rest of Tanakh...
  };
  const title = mw.config.get('wgTitle'); // current wiki page title
  const match = title.match(/^(.*?) \((.*?)\)(?: (\d+))?$/);
  if (!match) return; // doesn't match expected format
  const translitName = match[1];
  const englishName  = match[2];
  const chapterNum  = match[3] ? parseInt(match[3], 10) : null;
  if (!verseCounts[englishName]) return; // no data for this book
  const container = document.getElementById('tanakh-selector');
  if (!container) return;
  const chapters = verseCounts[englishName];
  // Title
  const h2 = document.createElement('h2');
  h2.textContent = `${translitName} (${englishName}) — Select Chapter & Verse`;
  container.appendChild(h2);
  // Chapter buttons grid
  const chaptersDiv = document.createElement('div');
  chaptersDiv.style.display = 'grid';
  chaptersDiv.style.gridTemplateColumns = 'repeat(auto-fit, minmax(72px, 1fr))';
  chaptersDiv.style.gap = '8px';
  container.appendChild(chaptersDiv);
  // Verse panel
  const versesPanel = document.createElement('div');
  versesPanel.style.display = 'none';
  versesPanel.style.marginTop = '12px';
  container.appendChild(versesPanel);
  const versesHeader = document.createElement('div');
  versesHeader.style.display = 'flex';
  versesHeader.style.justifyContent = 'space-between';
  versesHeader.style.alignItems = 'center';
  versesPanel.appendChild(versesHeader);
  const currentChLabel = document.createElement('strong');
  versesHeader.appendChild(currentChLabel);
  const closeBtn = document.createElement('button');
  closeBtn.textContent = 'Close';
  closeBtn.style.cssText = 'background:#eee;border:1px solid #ccc;padding:4px 8px;border-radius:6px;cursor:pointer;';
  versesHeader.appendChild(closeBtn);
  const versesDiv = document.createElement('div');
  versesDiv.style.display = 'flex';
  versesDiv.style.flexWrap = 'wrap';
  versesDiv.style.gap = '6px';
  versesDiv.style.marginTop = '8px';
  versesPanel.appendChild(versesDiv);
  // Function to open chapter
  function openChapter(chNum) {
    const verseCount = chapters[chNum - 1];
    currentChLabel.textContent = `Chapter ${chNum} — ${verseCount} verses`;
    versesDiv.innerHTML = '';
    for (let v = 1; v <= verseCount; v++) {
      const a = document.createElement('a');
      const pageName = `${translitName} (${englishName}) ${chNum}`.replace(/ /g, '_');
      a.href = `/wiki/${pageName}#v${v}`;
      a.textContent = v;
      a.style.cssText = 'display:inline-flex;align-items:center;justify-content:center;padding:6px 8px;border-radius:6px;border:1px solid #e0e0e0;text-decoration:none;min-width:36px;text-align:center;';
      versesDiv.appendChild(a);
    }
    versesPanel.style.display = 'block';
    versesPanel.scrollIntoView({behavior:'smooth', block:'nearest'});
  }
  // Build chapter buttons
  chapters.forEach((verseCount, i) => {
    const chNum = i + 1;
    const btn = document.createElement('button');
    btn.type = 'button';
    btn.textContent = chNum;
    btn.style.cssText = 'padding:10px 8px;border-radius:8px;border:1px solid #d0d0d0;background:#fff;cursor:pointer;';
    btn.addEventListener('click', () => openChapter(chNum));
    chaptersDiv.appendChild(btn);
  });
  closeBtn.addEventListener('click', () => {
    versesPanel.style.display = 'none';
  });
  // Auto-open chapter if we are on a chapter page
  if (chapterNum) {
    openChapter(chapterNum);
  }
})();

Latest revision as of 23:54, 10 August 2025

/* Any JavaScript here will be loaded for all users on every page load. */
document.addEventListener("DOMContentLoaded", function() {
    const modalLinks = document.querySelectorAll('span[onclick^="showModal"]');
    modalLinks.forEach(link => {
        link.addEventListener("click", function() {
            showModal(link);
        });
    });

    const closeButtons = document.querySelectorAll('.modal-content span[onclick^="closeModal"]');
    closeButtons.forEach(button => {
        button.addEventListener("click", function() {
            closeModal(button);
        });
    });
});

function showModal(element) {
    alert("showModal function called"); // Confirm function call
    const modal = element.nextElementSibling;
    if (modal) {
        alert("Modal element found. Setting display to 'block'"); // Confirm element
        modal.style.display = 'block'; // Set display to block
        modal.style.opacity = '1';     // Ensure opacity is fully visible
        modal.style.visibility = 'visible'; // Set visibility to ensure no conflicts
    } else {
        alert("Modal element not found."); // Debugging alert
    }
}

function closeModal(element) {
    alert("closeModal function called"); // Confirm function call
    const modal = element.closest('.modal');
    if (modal) {
        alert("Modal element found. Hiding it."); // Confirm element
        modal.style.display = 'none'; // Set display to none
    } else {
        alert("Modal element not found in closeModal function"); // Debugging alert
    }
}




(function(){
  // Tanakh verse counts
  const verseCounts = {
    "Genesis":     [31,25,24,26,32,22,24,22,29,32,32,20,18,24,21,16,27,33,38,18,34,24,20,67,34,35,46,22,35,43,55,32,20,31,29,43,36,30,23,23,57,38,34,34,31,22,33,26,22,25],
    "Exodus":      [22,25,22,31,23,30,25,32,35,29,10,51,22,31,27,36,16,27,25,26,37,30,33,18,40,37,21,43,46,38,18,35,23,35,35,38,29,31,43,38],
    "Leviticus":   [17,16,17,35,19,30,38,36,24,20,47,8,59,57,33,34,16,30,37,27,24,33,44,23,55,46,34],
    "Numbers":     [54,34,51,49,31,27,89,26,23,36,35,16,33,45,41,50,13,32,22,29,35,41,30,25,18,65,23,31,40,16,54,42,56,29,34,13],
    "Deuteronomy": [46,37,29,49,33,25,26,20,29,22,32,32,18,29,23,22,20,22,21,20,23,30,25,22,19,19,26,68,29,20,30,52,29,12],
    // Add rest of Tanakh...
  };

  const title = mw.config.get('wgTitle'); // current wiki page title
  const match = title.match(/^(.*?) \((.*?)\)(?: (\d+))?$/);

  if (!match) return; // doesn't match expected format

  const translitName = match[1];
  const englishName  = match[2];
  const chapterNum   = match[3] ? parseInt(match[3], 10) : null;

  if (!verseCounts[englishName]) return; // no data for this book

  const container = document.getElementById('tanakh-selector');
  if (!container) return;

  const chapters = verseCounts[englishName];

  // Title
  const h2 = document.createElement('h2');
  h2.textContent = `${translitName} (${englishName}) — Select Chapter & Verse`;
  container.appendChild(h2);

  // Chapter buttons grid
  const chaptersDiv = document.createElement('div');
  chaptersDiv.style.display = 'grid';
  chaptersDiv.style.gridTemplateColumns = 'repeat(auto-fit, minmax(72px, 1fr))';
  chaptersDiv.style.gap = '8px';
  container.appendChild(chaptersDiv);

  // Verse panel
  const versesPanel = document.createElement('div');
  versesPanel.style.display = 'none';
  versesPanel.style.marginTop = '12px';
  container.appendChild(versesPanel);

  const versesHeader = document.createElement('div');
  versesHeader.style.display = 'flex';
  versesHeader.style.justifyContent = 'space-between';
  versesHeader.style.alignItems = 'center';
  versesPanel.appendChild(versesHeader);

  const currentChLabel = document.createElement('strong');
  versesHeader.appendChild(currentChLabel);

  const closeBtn = document.createElement('button');
  closeBtn.textContent = 'Close';
  closeBtn.style.cssText = 'background:#eee;border:1px solid #ccc;padding:4px 8px;border-radius:6px;cursor:pointer;';
  versesHeader.appendChild(closeBtn);

  const versesDiv = document.createElement('div');
  versesDiv.style.display = 'flex';
  versesDiv.style.flexWrap = 'wrap';
  versesDiv.style.gap = '6px';
  versesDiv.style.marginTop = '8px';
  versesPanel.appendChild(versesDiv);

  // Function to open chapter
  function openChapter(chNum) {
    const verseCount = chapters[chNum - 1];
    currentChLabel.textContent = `Chapter ${chNum} — ${verseCount} verses`;
    versesDiv.innerHTML = '';

    for (let v = 1; v <= verseCount; v++) {
      const a = document.createElement('a');
      const pageName = `${translitName} (${englishName}) ${chNum}`.replace(/ /g, '_');
      a.href = `/wiki/${pageName}#v${v}`;
      a.textContent = v;
      a.style.cssText = 'display:inline-flex;align-items:center;justify-content:center;padding:6px 8px;border-radius:6px;border:1px solid #e0e0e0;text-decoration:none;min-width:36px;text-align:center;';
      versesDiv.appendChild(a);
    }

    versesPanel.style.display = 'block';
    versesPanel.scrollIntoView({behavior:'smooth', block:'nearest'});
  }

  // Build chapter buttons
  chapters.forEach((verseCount, i) => {
    const chNum = i + 1;
    const btn = document.createElement('button');
    btn.type = 'button';
    btn.textContent = chNum;
    btn.style.cssText = 'padding:10px 8px;border-radius:8px;border:1px solid #d0d0d0;background:#fff;cursor:pointer;';
    btn.addEventListener('click', () => openChapter(chNum));
    chaptersDiv.appendChild(btn);
  });

  closeBtn.addEventListener('click', () => {
    versesPanel.style.display = 'none';
  });

  // Auto-open chapter if we are on a chapter page
  if (chapterNum) {
    openChapter(chapterNum);
  }

})();