Widget:Zeitleiste: Unterschied zwischen den Versionen
Simon (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung Markierung: 2017-Quelltext-Bearbeitung |
Simon (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung Markierung: 2017-Quelltext-Bearbeitung |
||
Zeile 12: | Zeile 12: | ||
width: 20vw; | width: 20vw; | ||
min-width: 300px; | min-width: 300px; | ||
height: | height: 600px; | ||
margin: 0 0 0 2em; | margin: 0 0 0 2em; | ||
padding: 1em; | padding: 1em; | ||
Zeile 114: | Zeile 114: | ||
// TODO | // TODO | ||
var detailsElement = timelineArticleElement.getElementsByClassName('ak-timeline-article-details').item(0); | var detailsElement = timelineArticleElement.getElementsByClassName('ak-timeline-article-details').item(0); | ||
} | |||
function getOuterWidth(element) { | |||
var style = window.getComputedStyle ? getComputedStyle(element, null) : element.currentStyle; | |||
return element.offsetWidth + (parseInt(style.marginLeft) || 0) + (parseInt(style.marginRight) || 0); | |||
} | |||
// Polyfill "Element.closest" | |||
if (!Element.prototype.matches) { | |||
Element.prototype.matches = | |||
Element.prototype.msMatchesSelector || | |||
Element.prototype.webkitMatchesSelector; | |||
} | |||
if (!Element.prototype.closest) { | |||
Element.prototype.closest = function(s) { | |||
var el = this; | |||
do { | |||
if (Element.prototype.matches.call(el, s)) { | |||
return el; | |||
} | |||
el = el.parentElement || el.parentNode; | |||
} while (el !== null && el.nodeType === 1); | |||
return null; | |||
}; | |||
} | } | ||
Zeile 167: | Zeile 192: | ||
var timelineWidgetElement = timelineContainerElement.parentElement; | var timelineWidgetElement = timelineContainerElement.parentElement; | ||
var timelineArticleElement = timelineWidgetElement.getElementsByClassName('ak-timeline-article').item(0); | var timelineArticleElement = timelineWidgetElement.getElementsByClassName('ak-timeline-article').item(0); | ||
var timelineWidth = 800; | |||
var mainGridElement = timelineContainerElement.closest('ak-main-grid'); | |||
if (mainGridElement) { | |||
timelineWidth = mainGridElement.clientWidth - getOuterWidth(timelineArticleElement); | |||
} | |||
var zoom = timelineContainerElement.dataset.zoom; | var zoom = timelineContainerElement.dataset.zoom; | ||
if (zoom === '') { | if (zoom === '') { | ||
Zeile 173: | Zeile 205: | ||
zoom = parseInt(zoom, 10); | zoom = parseInt(zoom, 10); | ||
} | } | ||
var akTimeline = new Histropedia.Timeline(timelineContainerElement, { | var akTimeline = new Histropedia.Timeline(timelineContainerElement, { | ||
width: timelineWidth, | |||
height: 600, | |||
initialDate: { | initialDate: { | ||
year: earliestYear - 5, | year: earliestYear - 5, |
Version vom 12. November 2020, 23:30 Uhr
<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script> <script type="text/javascript" src="/alteskoeln/jquery.mousewheel-3.1.13.min.js"></script> <script type="text/javascript" src="https://cdn.histropedia.com/histropedia-1.2.0.min.js"></script>
<style type="text/css"> .ak-timeline-widget { display: flex; }
.ak-timeline-article { box-sizing: border-box; width: 20vw; min-width: 300px; height: 600px; margin: 0 0 0 2em; padding: 1em; border: 1px solid #ced4da; border-radius: 4px; box-shadow: 0px 3px 12px rgba(0,0,0,0.1); overflow-y: auto;
font-family: Arial, sans-serif; font-size: 16px; color: #495057; }
.ak-timeline-article-content { display: none; }
.ak-timeline-widget_article-focussed .ak-timeline-article-content { display: block; }
.ak-timeline-widget_article-focussed .ak-timeline-explanation { display: none; }
.ak-timeline-article h3, .ak-timeline-article h4 { padding: 0; }
.ak-timeline-article-date-range { font-style: italic; }
</style>
<script> function parseDate(date) { if (date.trim() === ) { return null; } var dateParts = date.split('-'); if (dateParts.length === 1) { return { year: parseInt(dateParts[0], 10), precision: Histropedia.PRECISION_YEAR } } else if (dateParts.length === 2) { return { year: parseInt(dateParts[0], 10), month: parseInt(dateParts[1], 10), precision: Histropedia.PRECISION_MONTH } } else if (dateParts.length === 3) { return { year: parseInt(dateParts[0], 10), month: parseInt(dateParts[1], 10), day: parseInt(dateParts[2], 10), precision: Histropedia.PRECISION_DAY } } else { return null; } }
function renderDate(date) { if (date.precision === Histropedia.PRECISION_DAY) { return + date.day + '.' + date.month + '.' + date.year; } else if (date.precision === Histropedia.PRECISION_MONTH) { return + date.month + '.' + date.year; } else if (date.precision === Histropedia.PRECISION_YEAR) { return + date.year; } else { return ; } }
function applyArticleToArticleElement(article, timelineArticleElement) { var titleElement = timelineArticleElement.getElementsByClassName('ak-timeline-article-title').item(0); if (article.title) { titleElement.textContent = article.title; } else { titleElement.textContent = ; } var subtitleElement = timelineArticleElement.getElementsByClassName('ak-timeline-article-subtitle').item(0); if (article.subtitle) { subtitleElement.textContent = article.subtitle; } else { subtitleElement.textContent = ; }
var dateRangeElement = timelineArticleElement.getElementsByClassName('ak-timeline-article-date-range').item(0); var dateString = renderDate(article.from); if (article.isToPresent) { dateString += ' - heute'; } else if (article.to) { dateString += ' - ' + renderDate(article.to); } dateRangeElement.textContent = dateString;
// TODO var detailsElement = timelineArticleElement.getElementsByClassName('ak-timeline-article-details').item(0); }
function getOuterWidth(element) { var style = window.getComputedStyle ? getComputedStyle(element, null) : element.currentStyle; return element.offsetWidth + (parseInt(style.marginLeft) || 0) + (parseInt(style.marginRight) || 0); }
// Polyfill "Element.closest" if (!Element.prototype.matches) { Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; } if (!Element.prototype.closest) { Element.prototype.closest = function(s) { var el = this;
do { if (Element.prototype.matches.call(el, s)) { return el; } el = el.parentElement || el.parentNode; } while (el !== null && el.nodeType === 1); return null; }; }
document.addEventListener('DOMContentLoaded', function(event) { var timelineDataTables = document.getElementsByClassName('ak-timeline-datatable'); var articles = []; var earliestYear = 2000; for (var i = 0; i < timelineDataTables.length; i++) { var dataTable = timelineDataTables.item(i); var rows = dataTable.querySelectorAll('tbody tr'); for (var j = 0; j < rows.length; j++) { var row = rows.item(j); var cells = row.children; if (cells.length) { if (cells.item(0).tagName.toLowerCase() === 'th') { continue; }
var article = { id: cells.item(0).innerText, starred: false }; if (cells.item(1).innerText.trim() !== ) { article.title = cells.item(1).innerText; } if (cells.item(2).innerText.trim() !== ) { article.subtitle = cells.item(2).innerText; } var from = parseDate(cells.item(3).innerText); if (from.year < earliestYear) { earliestYear = from.year; } article.from = from; var to = parseDate(cells.item(4).innerText); if (to != null) { article.to = to; } if (cells.item(5).innerText.trim() !== ) { article.imageUrl = cells.item(5).innerText; } if (cells.item(6).innerText.trim() !== ) { article.rank = cells.item(6).innerText; } if (cells.item(7).innerText.trim() !== ) { article.targetUrl = cells.item(7).innerText; } articles.push(article); } } }
var timelineContainerElement = document.getElementsByClassName('ak-timeline-container').item(0); var timelineWidgetElement = timelineContainerElement.parentElement; var timelineArticleElement = timelineWidgetElement.getElementsByClassName('ak-timeline-article').item(0);
var timelineWidth = 800; var mainGridElement = timelineContainerElement.closest('ak-main-grid'); if (mainGridElement) { timelineWidth = mainGridElement.clientWidth - getOuterWidth(timelineArticleElement); }
var zoom = timelineContainerElement.dataset.zoom; if (zoom === ) { zoom = 34; } else { zoom = parseInt(zoom, 10); }
var akTimeline = new Histropedia.Timeline(timelineContainerElement, { width: timelineWidth, height: 600, initialDate: { year: earliestYear - 5, month: 1, day: 1 }, zoom: { initial: zoom }, onArticleClick: function(article) { applyArticleToArticleElement(article.data, timelineArticleElement); timelineWidgetElement.classList.add('ak-timeline-widget_article-focussed'); }, onArticleDoubleClick: function(article) { if (article.data.targetUrl) { window.open(article.data.targetUrl, '_blank'); } } }); akTimeline.load(articles); }); </script>