Updated cards from tuesch changes. Incorporated InteractionMapper memory leak fix.
566
dist/iwmlib.js
vendored
@ -3364,7 +3364,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
close() {
|
close() {
|
||||||
|
console.log('SCATTER WAS CLOSED!');
|
||||||
this._callCloseCallbacks();
|
this._callCloseCallbacks();
|
||||||
|
this._removeCallbacks();
|
||||||
this._removeSelfFromScatterContainer();
|
this._removeSelfFromScatterContainer();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3374,6 +3376,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_removeCallbacks() {
|
||||||
|
this.onClose = [];
|
||||||
|
this.onTransform = [];
|
||||||
|
}
|
||||||
|
|
||||||
_removeSelfFromScatterContainer() {
|
_removeSelfFromScatterContainer() {
|
||||||
// Removes self from container when it's closed.
|
// Removes self from container when it's closed.
|
||||||
if (this.container) {
|
if (this.container) {
|
||||||
@ -7638,8 +7645,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** To avoid problems with relative URL paths, we use inline data URI to load svg icons. */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class that collects static methods to maintain the states and parts of
|
* A class that collects static methods to maintain the states and parts of
|
||||||
* EyeVisit like cards.
|
* EyeVisit like cards.
|
||||||
@ -7650,11 +7655,35 @@
|
|||||||
static setup(context, modules = []) {
|
static setup(context, modules = []) {
|
||||||
console.log('Setup Card...', modules);
|
console.log('Setup Card...', modules);
|
||||||
context.modules = [];
|
context.modules = [];
|
||||||
|
|
||||||
|
context.module = {};
|
||||||
|
|
||||||
|
context.classList.add('info-card');
|
||||||
|
context.setAttribute('data-id', Card.id++);
|
||||||
|
|
||||||
modules.forEach(module => {
|
modules.forEach(module => {
|
||||||
if (module.apply(context)) context.modules.push(module.constructor.name);
|
if (module.apply(context)) {
|
||||||
|
const moduleName = module.constructor.name;
|
||||||
|
context.modules.push(moduleName);
|
||||||
|
context.module[moduleName] = module;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static remove(context) {
|
||||||
|
for (let module of Object.values(context.module)) {
|
||||||
|
module.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static eventClose(event) {
|
||||||
|
let context = this.getContext(event.target);
|
||||||
|
|
||||||
|
if (context) {
|
||||||
|
this.constructor.close(context);
|
||||||
|
} else console.error('Could not find context!', event.target);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
@ -7662,13 +7691,12 @@
|
|||||||
* @param {*} event
|
* @param {*} event
|
||||||
* @memberof Card
|
* @memberof Card
|
||||||
*/
|
*/
|
||||||
static close(event) {
|
static close(context) {
|
||||||
let context = this.getContext(event.target);
|
console.log('CLOSE CARD!!!');
|
||||||
if (context) {
|
this.unregisterAllEvents(context);
|
||||||
if (context.onClose) {
|
if (context.onClose) {
|
||||||
context.onClose(event);
|
context.onClose(event);
|
||||||
} else context.parentNode.removeChild(context);
|
} else context.parentNode.removeChild(context);
|
||||||
} else console.error('Could not find context!', event.target);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -7680,12 +7708,12 @@
|
|||||||
* @param {*} replaceFunc
|
* @param {*} replaceFunc
|
||||||
* @memberof Card
|
* @memberof Card
|
||||||
*/
|
*/
|
||||||
static _replaceAttributes(html, attribute, replaceFunc) {
|
static _replaceAttributes(context, html, attribute, replaceFunc) {
|
||||||
let clickables = html.querySelectorAll(`[${attribute}]`);
|
let clickables = html.querySelectorAll(`[${attribute}]`);
|
||||||
clickables.forEach(element => {
|
clickables.forEach(element => {
|
||||||
let attributeVal = element.getAttribute(attribute);
|
let attributeVal = element.getAttribute(attribute);
|
||||||
element.removeAttribute(attribute);
|
element.removeAttribute(attribute);
|
||||||
replaceFunc.call(this, element, attributeVal);
|
replaceFunc.call(this, context, element, attributeVal);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7699,7 +7727,7 @@
|
|||||||
* @returns
|
* @returns
|
||||||
* @memberof Card
|
* @memberof Card
|
||||||
*/
|
*/
|
||||||
static _replaceCallback(element, attributeVal) {
|
static _replaceCallback(context, element, attributeVal) {
|
||||||
if (element.tagName == 'A') {
|
if (element.tagName == 'A') {
|
||||||
element.addEventListener('click', event => {
|
element.addEventListener('click', event => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
@ -7731,7 +7759,7 @@
|
|||||||
// These are 'hardcoded' inside the convert.js.
|
// These are 'hardcoded' inside the convert.js.
|
||||||
if (element.tagName == 'circle') return false
|
if (element.tagName == 'circle') return false
|
||||||
|
|
||||||
InteractionMapper.on(interactionType, element, event => {
|
this.registerEvent(context, interactionType, element, event => {
|
||||||
/**
|
/**
|
||||||
* Replaces the strings from the listener with the cooresponding variables.
|
* Replaces the strings from the listener with the cooresponding variables.
|
||||||
*/
|
*/
|
||||||
@ -7783,6 +7811,13 @@
|
|||||||
/<\s*(a|video|img|image|circle)\s(.*?)(xlink:href|href|src)\s*=\s*["'](\..*?)["']\s*(.*?)>/g,
|
/<\s*(a|video|img|image|circle)\s(.*?)(xlink:href|href|src)\s*=\s*["'](\..*?)["']\s*(.*?)>/g,
|
||||||
function(data) {
|
function(data) {
|
||||||
let path = that._getRelativePath(arguments[4]);
|
let path = that._getRelativePath(arguments[4]);
|
||||||
|
|
||||||
|
console.log('REPLACE ', arguments[1]);
|
||||||
|
if (arguments[1] == 'a') {
|
||||||
|
console.error('NOT REPLACING LINKS');
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
|
||||||
const tag = `<${arguments[1]} ${arguments[2]} ${arguments[3]}="${path}" ${arguments[5]}>`;
|
const tag = `<${arguments[1]} ${arguments[2]} ${arguments[3]}="${path}" ${arguments[5]}>`;
|
||||||
/* if (that.debug) */ console.log('Adjusted: ', tag);
|
/* if (that.debug) */ console.log('Adjusted: ', tag);
|
||||||
return tag
|
return tag
|
||||||
@ -7979,6 +8014,7 @@
|
|||||||
if (this.debug) console.log('Close Popup.', context, popup);
|
if (this.debug) console.log('Close Popup.', context, popup);
|
||||||
window.popup = popup;
|
window.popup = popup;
|
||||||
popup.close();
|
popup.close();
|
||||||
|
InteractionMapper.off(popup.element);
|
||||||
this._unsetPopup(context);
|
this._unsetPopup(context);
|
||||||
} else {
|
} else {
|
||||||
console.error('Requested to close popup, but popup was not found.');
|
console.error('Requested to close popup, but popup was not found.');
|
||||||
@ -8348,7 +8384,7 @@
|
|||||||
// but for simplicity it's just done here for now.
|
// but for simplicity it's just done here for now.
|
||||||
// TODO: Adjust to load while animating (Problem: Unload when cancelled).
|
// TODO: Adjust to load while animating (Problem: Unload when cancelled).
|
||||||
console.log('loadHighlightPopup', src, position, local);
|
console.log('loadHighlightPopup', src, position, local);
|
||||||
this._loadPopupContent(src)
|
this._loadPopupContent(context, src)
|
||||||
.then(content => {
|
.then(content => {
|
||||||
this._openPopup(context, src, local, content, {
|
this._openPopup(context, src, local, content, {
|
||||||
highlight: node,
|
highlight: node,
|
||||||
@ -8375,14 +8411,14 @@
|
|||||||
* @returns {Promise} - Returns a promise, that's resolved when the data is loaded.
|
* @returns {Promise} - Returns a promise, that's resolved when the data is loaded.
|
||||||
* @memberof Card
|
* @memberof Card
|
||||||
*/
|
*/
|
||||||
static _loadPopupContent(source) {
|
static _loadPopupContent(context, source) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let xhr = new XMLHttpRequest();
|
let xhr = new XMLHttpRequest();
|
||||||
xhr.open('get', source, true);
|
xhr.open('get', source, true);
|
||||||
xhr.onreadystatechange = () => {
|
xhr.onreadystatechange = () => {
|
||||||
if (xhr.readyState == 4) {
|
if (xhr.readyState == 4) {
|
||||||
if (xhr.status == 200 || xhr.status == 0) {
|
if (xhr.status == 200 || xhr.status == 0) {
|
||||||
let html = this.postProcessResponseText(xhr.responseText);
|
let html = this.postProcessResponseText(context, xhr.responseText);
|
||||||
let selector = Card.popupHtmlSelector;
|
let selector = Card.popupHtmlSelector;
|
||||||
let content = { html: html.body.innerHTML, selector };
|
let content = { html: html.body.innerHTML, selector };
|
||||||
resolve(content);
|
resolve(content);
|
||||||
@ -8477,6 +8513,9 @@
|
|||||||
let wrapper = this.getContext(node);
|
let wrapper = this.getContext(node);
|
||||||
|
|
||||||
let zoomable = node.closest('figure');
|
let zoomable = node.closest('figure');
|
||||||
|
if (zoomable == null) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// load mainimg - if none exists, there is nothing to open
|
// load mainimg - if none exists, there is nothing to open
|
||||||
let img = zoomable.querySelector('.mainimg');
|
let img = zoomable.querySelector('.mainimg');
|
||||||
@ -8735,18 +8774,18 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Closes a zoomable object with animation
|
* Closes an zoomable object with an animation.
|
||||||
*
|
*
|
||||||
* @static
|
* @static
|
||||||
* @param {any} wrapper - the wrapper containing the index card
|
* @param {DOMElement} context - Context of the zoomable.
|
||||||
* @param {any} div - the figure containing the relevant elements
|
* @param {*} zoomable
|
||||||
* @param {any} zoomable - the zoomable element, from which the zoomed figure originates
|
* @param {*} zoomedFig
|
||||||
* @param {any} rect - the target rect for the tween (typically the top left width height of the zoomable)
|
|
||||||
* @memberof Card
|
* @memberof Card
|
||||||
*/
|
*/
|
||||||
static closeZoomable(context, zoomable, zoomedFig) {
|
static closeZoomable(context, zoomable, zoomedFig) {
|
||||||
if (this.debug) console.log('Close Zoomable', context, zoomable, zoomedFig);
|
if (this.debug) console.log('Close Zoomable', context, zoomable, zoomedFig);
|
||||||
|
|
||||||
|
//TODO: Why do I need this check. Shouldn't it be always present?! - SO
|
||||||
if (zoomable) {
|
if (zoomable) {
|
||||||
this._unsetZoomable(context);
|
this._unsetZoomable(context);
|
||||||
let caption = zoomable.querySelector('figcaption.cap');
|
let caption = zoomable.querySelector('figcaption.cap');
|
||||||
@ -8767,12 +8806,15 @@
|
|||||||
TweenLite.set(zoomable, {
|
TweenLite.set(zoomable, {
|
||||||
opacity: 1
|
opacity: 1
|
||||||
});
|
});
|
||||||
|
|
||||||
let div = zoomedFig.parentNode;
|
let div = zoomedFig.parentNode;
|
||||||
let videoElement = div.querySelector('video');
|
let videoElement = div.querySelector('video');
|
||||||
if (videoElement) videoElement.pause();
|
if (videoElement) videoElement.pause();
|
||||||
div.parentNode.removeChild(div);
|
div.parentNode.removeChild(div);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
InteractionMapper.off(zoomedFig);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8862,6 +8904,7 @@
|
|||||||
rotation: angle
|
rotation: angle
|
||||||
});
|
});
|
||||||
indexbox.prepend(clone);
|
indexbox.prepend(clone);
|
||||||
|
clone.setAttribute('data-source', src);
|
||||||
|
|
||||||
let titlebar = clone.querySelector('.titlebar');
|
let titlebar = clone.querySelector('.titlebar');
|
||||||
let title = titlebar.querySelector('h2');
|
let title = titlebar.querySelector('h2');
|
||||||
@ -8886,7 +8929,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
//jquery hyphenate below
|
//jquery hyphenate below
|
||||||
if (typeof $ != 'undefined') {
|
if (this.constructor._jQueryIsPresent()) {
|
||||||
$('.column')
|
$('.column')
|
||||||
.not('.overview')
|
.not('.overview')
|
||||||
.children('p')
|
.children('p')
|
||||||
@ -8941,7 +8984,57 @@
|
|||||||
|
|
||||||
Card._disableCardCloseButton(context);
|
Card._disableCardCloseButton(context);
|
||||||
|
|
||||||
const closeAnimation = () => {
|
//TODO consider renaming it to something more intuitive.
|
||||||
|
let iconClone = clone.querySelector('.card-icon');
|
||||||
|
|
||||||
|
if (iconClone == null) {
|
||||||
|
iconClone = clone.querySelector('.cardicon');
|
||||||
|
console.warn("Legacy selector. Change it to 'card-icon' and find a more suitable name.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (iconClone.tagName == 'img') {
|
||||||
|
iconClone.src = iconClone.src.replace('info.svg', 'close.svg');
|
||||||
|
}
|
||||||
|
//console.log("ICON: ", iconClone)
|
||||||
|
iconClone.classList.remove('info');
|
||||||
|
iconClone.classList.add('close', 'view-button', 'transparent-background');
|
||||||
|
|
||||||
|
// We append the icon clone to the subcard-content.
|
||||||
|
// Then it's always on the content and not on the background
|
||||||
|
// (If there is one).
|
||||||
|
if (this.dynamicHeight) {
|
||||||
|
article.appendChild(iconClone);
|
||||||
|
}
|
||||||
|
|
||||||
|
const eventElements = [indexbox, iconClone, clone];
|
||||||
|
|
||||||
|
// Use the 'tap' event for closing.
|
||||||
|
// Otherwise the subcard cannot be closed,
|
||||||
|
// when another subcard is touched.
|
||||||
|
InteractionMapper.on('tap', iconClone, () => {
|
||||||
|
if (editable) {
|
||||||
|
let isDirty = mainController.askSaveNode();
|
||||||
|
if (isDirty) {
|
||||||
|
mainController.saveNode(html.innerHTML, url => {
|
||||||
|
callback(url);
|
||||||
|
this._closeIndexCard(context, card,{
|
||||||
|
eventElements,
|
||||||
|
src
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this._closeIndexCard(context, card);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this._closeIndexCard(context, card);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static _closeIndexCard(context, card, {
|
||||||
|
eventElements = [],
|
||||||
|
src = null
|
||||||
|
} = []) {
|
||||||
//logging
|
//logging
|
||||||
if (src) {
|
if (src) {
|
||||||
let strparts = src.split('/');
|
let strparts = src.split('/');
|
||||||
@ -8956,7 +9049,7 @@
|
|||||||
|
|
||||||
Card._cleanup(context);
|
Card._cleanup(context);
|
||||||
Card._unsetSubcard(context);
|
Card._unsetSubcard(context);
|
||||||
|
this._subcardChanged(context, true);
|
||||||
this._enableCardCloseButton(context);
|
this._enableCardCloseButton(context);
|
||||||
|
|
||||||
let previewTitlebar = card.querySelector('.titlebar');
|
let previewTitlebar = card.querySelector('.titlebar');
|
||||||
@ -9019,47 +9112,16 @@
|
|||||||
titlebar.style.borderBottomWidth = desiredBorderBottomWidth / transform.scaleY + 'px';
|
titlebar.style.borderBottomWidth = desiredBorderBottomWidth / transform.scaleY + 'px';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
|
||||||
|
|
||||||
//TODO consider renaming it to something more intuitive.
|
|
||||||
let iconClone = clone.querySelector('.card-icon');
|
|
||||||
|
|
||||||
if (iconClone == null) {
|
|
||||||
iconClone = clone.querySelector('.cardicon');
|
|
||||||
console.warn("Legacy selector. Change it to 'card-icon' and find a more suitable name.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iconClone.tagName == 'img') {
|
/**
|
||||||
iconClone.src = iconClone.src.replace('info.svg', 'close.svg');
|
* Tests if jQuery is properly included in the project.
|
||||||
}
|
* Otherwise specific features may not work correctly (e.g. hyphenation)
|
||||||
//console.log("ICON: ", iconClone)
|
*/
|
||||||
iconClone.classList.remove('info');
|
_jQueryIsPresent() {
|
||||||
iconClone.classList.add('close', 'view-button', 'transparent-background');
|
let jQueryInitialized = typeof $ != 'undefined';
|
||||||
|
if (!jQueryInitialized) console.error('No jQuery is provided. Specific features may fail.');
|
||||||
// We append the icon clone to the subcard-content.
|
return jQueryInitialized
|
||||||
// Then it's always on the content and not on the background
|
|
||||||
// (If there is one).
|
|
||||||
if (this.dynamicHeight) {
|
|
||||||
article.appendChild(iconClone);
|
|
||||||
}
|
|
||||||
// Use the 'tap' event for closing.
|
|
||||||
// Otherwise the subcard cannot be closed,
|
|
||||||
// when another subcard is touched.
|
|
||||||
InteractionMapper.on('tap', iconClone, () => {
|
|
||||||
if (editable) {
|
|
||||||
let isDirty = mainController.askSaveNode();
|
|
||||||
if (isDirty) {
|
|
||||||
mainController.saveNode(html.innerHTML, url => {
|
|
||||||
callback(url);
|
|
||||||
closeAnimation();
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
closeAnimation();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
closeAnimation();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -9124,14 +9186,10 @@
|
|||||||
xhr.onreadystatechange = () => {
|
xhr.onreadystatechange = () => {
|
||||||
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
|
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
|
||||||
let html = xhr.responseText;
|
let html = xhr.responseText;
|
||||||
let parsedHTML = this.postProcessResponseText(html);
|
let parsedHTML = this.postProcessResponseText(context, html);
|
||||||
|
|
||||||
// TODO: What is this good for?
|
|
||||||
// let article = parsedHTML.querySelector('article')
|
|
||||||
// card.insertAdjacentElement('afterbegin', article)
|
|
||||||
// TweenLite.set(article, { autoAlpha: 0 })
|
|
||||||
|
|
||||||
Card.expandIndexCard(card, parsedHTML, 'article', relativeSource, saveCallback);
|
Card.expandIndexCard(card, parsedHTML, 'article', relativeSource, saveCallback);
|
||||||
|
|
||||||
|
this._subcardChanged(context);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
xhr.onerror = () => {
|
xhr.onerror = () => {
|
||||||
@ -9257,7 +9315,8 @@
|
|||||||
* @returns
|
* @returns
|
||||||
* @memberof Card
|
* @memberof Card
|
||||||
*/
|
*/
|
||||||
static postProcessResponseText(htmlString) {
|
static postProcessResponseText(context, htmlString) {
|
||||||
|
console.error('RUN POSTPROCESS');
|
||||||
let editable = this.isEditable();
|
let editable = this.isEditable();
|
||||||
|
|
||||||
htmlString = this._adjustRelativeLinks(htmlString);
|
htmlString = this._adjustRelativeLinks(htmlString);
|
||||||
@ -9265,7 +9324,7 @@
|
|||||||
let parser = new DOMParser();
|
let parser = new DOMParser();
|
||||||
let html = parser.parseFromString(htmlString, 'text/html');
|
let html = parser.parseFromString(htmlString, 'text/html');
|
||||||
if (!editable) {
|
if (!editable) {
|
||||||
this._replaceAttributes(html, 'onclick', this._replaceCallback);
|
this._replaceAttributes(context, html, 'onclick', this._replaceCallback);
|
||||||
}
|
}
|
||||||
let zoomableWrappers = html.querySelectorAll('.svg-wrapper');
|
let zoomableWrappers = html.querySelectorAll('.svg-wrapper');
|
||||||
zoomableWrappers.forEach(wrapper => {
|
zoomableWrappers.forEach(wrapper => {
|
||||||
@ -9386,7 +9445,7 @@
|
|||||||
this._setPopupSource(popup, source);
|
this._setPopupSource(popup, source);
|
||||||
context.popup = popup;
|
context.popup = popup;
|
||||||
|
|
||||||
if (typeof $ != 'undefined') {
|
if (this.constructor._jQueryIsPresent()) {
|
||||||
//jquery hyphenate below
|
//jquery hyphenate below
|
||||||
console.log('hyphenated popup:', $('span').hyphenate('de'));
|
console.log('hyphenated popup:', $('span').hyphenate('de'));
|
||||||
}
|
}
|
||||||
@ -9485,8 +9544,44 @@
|
|||||||
static get relativePath() {
|
static get relativePath() {
|
||||||
return Card._relativePath
|
return Card._relativePath
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static getRegisteredEvents(context) {
|
||||||
|
return context._registeredEvents == null ? [] : context._registeredEvents
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper method that registers InteractionMapper events on the info card.
|
||||||
|
* Those events are saved on the context element. An they are unregistered when the
|
||||||
|
* card is closed again.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @param {DOMElement} context - Context of the Card.
|
||||||
|
* @param {string} types
|
||||||
|
* @param {DOMElement} element -Element on which the event is registered.
|
||||||
|
* @param {Function} callback - Function thats called when the event occurs.
|
||||||
|
* @memberof Card
|
||||||
|
*/
|
||||||
|
static registerEvent(context, types, element, callback) {
|
||||||
|
InteractionMapper.on(types, element, callback);
|
||||||
|
if (context._registeredEvents == null) context._registeredEvents = [];
|
||||||
|
if (context._registeredEvents.indexOf(element) == -1) context._registeredEvents.push(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unregisters all events on the infocard.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @param {DomElement} context - Context of the card.
|
||||||
|
* @memberof Card
|
||||||
|
*/
|
||||||
|
static unregisterAllEvents(context) {
|
||||||
|
let eventElements = this.getRegisteredEvents(context);
|
||||||
|
InteractionMapper.off(eventElements);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Card.id = 0;
|
||||||
Card.debug = true;
|
Card.debug = true;
|
||||||
Card._relativePath = '';
|
Card._relativePath = '';
|
||||||
Card.scatterContainer = null;
|
Card.scatterContainer = null;
|
||||||
@ -10091,7 +10186,7 @@
|
|||||||
*
|
*
|
||||||
* @class ScatterCard
|
* @class ScatterCard
|
||||||
*/
|
*/
|
||||||
class ScatterCard extends Card {
|
class ScatterCard$1 extends Card {
|
||||||
/**
|
/**
|
||||||
* TODO: Find a more suitable name.
|
* TODO: Find a more suitable name.
|
||||||
* Adjusts the HTML to work in the new context.
|
* Adjusts the HTML to work in the new context.
|
||||||
@ -10101,7 +10196,7 @@
|
|||||||
* @param {*} htmlString
|
* @param {*} htmlString
|
||||||
* @param {*} basePath
|
* @param {*} basePath
|
||||||
* @param {*} [opts={}]
|
* @param {*} [opts={}]
|
||||||
* @memberof Card
|
* @memberof ScatterCard
|
||||||
*/
|
*/
|
||||||
static setup(context, htmlString, { basePath = './', modules = [] } = {}) {
|
static setup(context, htmlString, { basePath = './', modules = [] } = {}) {
|
||||||
context.classList.add('info-card');
|
context.classList.add('info-card');
|
||||||
@ -10115,7 +10210,7 @@
|
|||||||
/**
|
/**
|
||||||
* Conflicts with the FindTarget method of the Abstract scatter.
|
* Conflicts with the FindTarget method of the Abstract scatter.
|
||||||
*/
|
*/
|
||||||
this._replaceAttributes(html, 'onclick', this._replaceCallback);
|
this._replaceAttributes(context, html, 'onclick', this._replaceCallback);
|
||||||
|
|
||||||
let content = html.querySelector('.mainview');
|
let content = html.querySelector('.mainview');
|
||||||
context.appendChild(content);
|
context.appendChild(content);
|
||||||
@ -10137,7 +10232,16 @@
|
|||||||
element.onClose = callback;
|
element.onClose = callback;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Removes the close listener from a card element.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @param {HTMLElement} element - Context of the Card.
|
||||||
|
* @memberof ScatterCard
|
||||||
|
*/
|
||||||
|
static removeOnCloseListener(element) {
|
||||||
|
element.onClose = null;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Creates a scatter for the card and applies the card to it,
|
* Creates a scatter for the card and applies the card to it,
|
||||||
*
|
*
|
||||||
@ -10147,7 +10251,7 @@
|
|||||||
* @param {string} [basePath=""]
|
* @param {string} [basePath=""]
|
||||||
* @param {*} [opts={}]
|
* @param {*} [opts={}]
|
||||||
* @returns
|
* @returns
|
||||||
* @memberof Card
|
* @memberof ScatterCard
|
||||||
*/
|
*/
|
||||||
static createCardScatter(html, scatterContainer, { basePath = './', modules = [] } = {}) {
|
static createCardScatter(html, scatterContainer, { basePath = './', modules = [] } = {}) {
|
||||||
let element = document.createElement('div');
|
let element = document.createElement('div');
|
||||||
@ -10165,6 +10269,42 @@
|
|||||||
return element
|
return element
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes but NOT removes the scatter element.
|
||||||
|
*
|
||||||
|
* The remove must be called separately, it may be used in the close callback
|
||||||
|
* of the scatter.
|
||||||
|
*/
|
||||||
|
static close(context) {
|
||||||
|
|
||||||
|
Card.close(context);
|
||||||
|
|
||||||
|
if (context['scatter']) {
|
||||||
|
console.error('CLOSED CARD');
|
||||||
|
context.scatter.close();
|
||||||
|
} else {
|
||||||
|
console.error('Expected a scatter element to close!', this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleans up the card.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @override
|
||||||
|
* @memberof ScatterCard
|
||||||
|
*/
|
||||||
|
static remove(context) {
|
||||||
|
if (context['scatter']) {
|
||||||
|
context.scatter = null;
|
||||||
|
console.error('REMOVED CARD');
|
||||||
|
} else {
|
||||||
|
console.error('Expected a scatter element to remove!', this);
|
||||||
|
}
|
||||||
|
|
||||||
|
Card.remove(context);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*Utility function to create a fully functional card scatter.
|
*Utility function to create a fully functional card scatter.
|
||||||
*
|
*
|
||||||
@ -10204,13 +10344,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ScatterCard.selectedLanguage = 0;
|
ScatterCard$1.selectedLanguage = 0;
|
||||||
ScatterCard.languages = ['Deutsch', 'English'];
|
ScatterCard$1.languages = ['Deutsch', 'English'];
|
||||||
ScatterCard.languageTags = {
|
ScatterCard$1.languageTags = {
|
||||||
Deutsch: 'de',
|
Deutsch: 'de',
|
||||||
English: 'en'
|
English: 'en'
|
||||||
};
|
};
|
||||||
ScatterCard.scatterContainer = null;
|
ScatterCard$1.scatterContainer = null;
|
||||||
|
|
||||||
var CardPlugin = CardPlugin || {};
|
var CardPlugin = CardPlugin || {};
|
||||||
|
|
||||||
@ -10360,7 +10500,6 @@
|
|||||||
this.fadeAnimationDuration = fadeAnimationDuration;
|
this.fadeAnimationDuration = fadeAnimationDuration;
|
||||||
this.interactionType = interactionType;
|
this.interactionType = interactionType;
|
||||||
}
|
}
|
||||||
|
|
||||||
get require() {
|
get require() {
|
||||||
return [CardPlugin.LightBox]
|
return [CardPlugin.LightBox]
|
||||||
}
|
}
|
||||||
@ -10606,12 +10745,103 @@
|
|||||||
this.className = className;
|
this.className = className;
|
||||||
this.parentSelector = parentSelector;
|
this.parentSelector = parentSelector;
|
||||||
this.interactionType = interactionType;
|
this.interactionType = interactionType;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Speech doesn't stop when page is navigated.
|
||||||
|
Therefore we do it manually here.
|
||||||
|
*/
|
||||||
|
window.addEventListener('beforeunload', () => {
|
||||||
|
window.speechSynthesis.cancel();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Binding the function beforehand ensures, that the end function is always the same.
|
||||||
|
this._end = this._end.bind(this);
|
||||||
|
|
||||||
|
this._setupUtterance();
|
||||||
|
this.utterance.addEventListener('end', event => {
|
||||||
|
this._end();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
get require() {
|
get require() {
|
||||||
return [CardPlugin.Ui]
|
return [CardPlugin.Ui]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
subcardChanged(closed) {
|
||||||
|
if (this.cardActive) {
|
||||||
|
this._updateText(closed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
get cardActive() {
|
||||||
|
return this.activeUtterance == this.utterance
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateText(ignoreSubcard = false) {
|
||||||
|
let node = this.context;
|
||||||
|
let subcard = this.context.querySelector('.mainview > .subcard');
|
||||||
|
|
||||||
|
if (ignoreSubcard) {
|
||||||
|
if (subcard != null) {
|
||||||
|
let clone = node.cloneNode(true);
|
||||||
|
let clonedSubcard = clone.querySelector('.mainview > .subcard');
|
||||||
|
clonedSubcard.parentNode.removeChild(clonedSubcard);
|
||||||
|
node = clone;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (subcard) {
|
||||||
|
let clone = subcard.cloneNode(true);
|
||||||
|
clone.querySelectorAll('figure').forEach(figure => {
|
||||||
|
figure.parentNode.removeChild(figure);
|
||||||
|
});
|
||||||
|
|
||||||
|
node = clone;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let id = this.context.getAttribute('data-id');
|
||||||
|
let src = this.context.getAttribute('data-source');
|
||||||
|
let subcardSource = null;
|
||||||
|
if (subcard != null) {
|
||||||
|
subcardSource = subcard.getAttribute('data-source');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!window.speechSynthesis.speaking) {
|
||||||
|
this._start(node);
|
||||||
|
Logging.log(`Started speech on card: id:${id} - source: ${src} - subcard: ${subcardSource}`);
|
||||||
|
} else if (this.cardActive && this._sameText(node)) {
|
||||||
|
Logging.log(`Stopped speech on card: id:${id} - source: ${src} - subcard: ${subcardSource}`);
|
||||||
|
this._stop();
|
||||||
|
} else {
|
||||||
|
Logging.log(`Updated Text on card: id:${id} - source: ${src} - subcard: ${subcardSource}`);
|
||||||
|
this._stop()
|
||||||
|
.then(() => {
|
||||||
|
this._start(node);
|
||||||
|
})
|
||||||
|
.catch(console.error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_sameText(node) {
|
||||||
|
return this.utterance.text == this._cleanupText(node)
|
||||||
|
}
|
||||||
|
|
||||||
|
_setupUtterance() {
|
||||||
|
this.utterance = new SpeechSynthesisUtterance();
|
||||||
|
this.utterance.lang = 'de-DE';
|
||||||
|
}
|
||||||
|
|
||||||
|
get require() {
|
||||||
|
return [CardPlugin.Ui]
|
||||||
|
}
|
||||||
|
|
||||||
|
remove() {
|
||||||
|
this.button = null;
|
||||||
|
super.remove();
|
||||||
|
}
|
||||||
|
|
||||||
append(context) {
|
append(context) {
|
||||||
let container = context.querySelector(this.parentSelector);
|
let container = context.querySelector(this.parentSelector);
|
||||||
this.button = document.createElement('div');
|
this.button = document.createElement('div');
|
||||||
@ -10619,115 +10849,97 @@
|
|||||||
container.appendChild(this.button);
|
container.appendChild(this.button);
|
||||||
|
|
||||||
InteractionMapper.on(this.interactionType, this.button, () => {
|
InteractionMapper.on(this.interactionType, this.button, () => {
|
||||||
let subcard = context.querySelector('.mainview > .subcard');
|
this.speak();
|
||||||
let target = subcard ? subcard : context;
|
});
|
||||||
|
|
||||||
this.speak(target);
|
this.context.addEventListener('DOMNodeRemoved', event => {
|
||||||
|
if (
|
||||||
|
this.context['lastSpeechNode'] == window.speechSynthesis['speechPluginNode'] &&
|
||||||
|
event.target == this.context
|
||||||
|
) {
|
||||||
|
this._stop();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_activate() {
|
_isSameNode(node) {
|
||||||
this._disableActive();
|
return this.currentText == node.textContent
|
||||||
this.active = this;
|
}
|
||||||
|
|
||||||
|
speak() {
|
||||||
|
/**
|
||||||
|
* This is a little bit ugly, but imho the most elegant of all dirty solutions.
|
||||||
|
*
|
||||||
|
5ht * Within the plugins we have no knowledge of other cards and such. But must differentiate the
|
||||||
|
* clicks by their corresponding owner. The SpeechUtterance just takes a text and has no knowledge
|
||||||
|
* about the node that is currently read to the user.
|
||||||
|
*
|
||||||
|
* This means, that we can identify same text, but not differentiate same text on different nodes.
|
||||||
|
* To account for that, we add the node to the speechSynthesis object (#benefitsOfJavaScript) and
|
||||||
|
* have access to the node, by - let's say - expanding the functionality of the SpeechSynthesis object.
|
||||||
|
*
|
||||||
|
* SO -17.07.19
|
||||||
|
*/
|
||||||
|
|
||||||
|
let activeNode = window.speechSynthesis['speechPluginNode'];
|
||||||
|
this._updateText();
|
||||||
|
}
|
||||||
|
|
||||||
|
async _stop() {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
if (this.activeUtterance) {
|
||||||
|
this.activeUtterance.addEventListener('end', resolve, {
|
||||||
|
once: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
window.speechSynthesis.cancel();
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
get activeUtterance() {
|
||||||
|
return window.speechSynthesis['speechPluginUtterance']
|
||||||
|
}
|
||||||
|
|
||||||
|
_end() {
|
||||||
|
window.speechSynthesis['speechPluginNode'] = null;
|
||||||
|
window.speechSynthesis['speechPluginUtterance'] = null;
|
||||||
|
this._deactivateButton();
|
||||||
|
this.context.classList.remove('speech-plugin-is-reading');
|
||||||
|
}
|
||||||
|
|
||||||
|
_start(node) {
|
||||||
|
window.speechSynthesis.cancel();
|
||||||
|
|
||||||
|
window.speechSynthesis['speechPluginUtterance'] = this.utterance;
|
||||||
|
window.speechSynthesis['speechPluginNode'] = node;
|
||||||
|
this.context['lastSpeechNode'] = node;
|
||||||
|
|
||||||
|
let cleanText = this._cleanupText(node);
|
||||||
|
this.utterance.text = cleanText;
|
||||||
|
window.speechSynthesis.speak(this.utterance);
|
||||||
this._activateButton();
|
this._activateButton();
|
||||||
|
|
||||||
|
this.context.classList.add('speech-plugin-is-reading');
|
||||||
|
}
|
||||||
|
|
||||||
|
_cleanupText(node) {
|
||||||
|
let text = node.textContent;
|
||||||
|
text = this._removeShy(text);
|
||||||
|
return text
|
||||||
|
}
|
||||||
|
|
||||||
|
_removeShy(text) {
|
||||||
|
return text.replace(/\u00AD/g, '')
|
||||||
}
|
}
|
||||||
|
|
||||||
_activateButton() {
|
_activateButton() {
|
||||||
if (this.button) this.button.classList.add('active');
|
if (this.button) this.button.classList.add('active');
|
||||||
}
|
}
|
||||||
|
|
||||||
_deactivate() {
|
|
||||||
this._deactivateButton();
|
|
||||||
}
|
|
||||||
|
|
||||||
_deactivateButton() {
|
_deactivateButton() {
|
||||||
if (this.button) this.button.classList.remove('active');
|
if (this.button) this.button.classList.remove('active');
|
||||||
}
|
}
|
||||||
|
|
||||||
_isSameNode(node) {
|
|
||||||
//console.log(this.currentText, node.innerText)
|
|
||||||
return this.currentText == node.innerText
|
|
||||||
}
|
|
||||||
|
|
||||||
speak(node) {
|
|
||||||
console.log(this._isSameNode(node));
|
|
||||||
|
|
||||||
if (!window.speechSynthesis.speaking) {
|
|
||||||
console.log('Noone talking!');
|
|
||||||
this._start(node);
|
|
||||||
} else if (this._isSameNode(node)) {
|
|
||||||
console.log('Requested same!');
|
|
||||||
this._stop();
|
|
||||||
} else {
|
|
||||||
console.log('Requested Different!');
|
|
||||||
this._stop();
|
|
||||||
this._start(node);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_disableActive() {
|
|
||||||
console.log('disableActive:', this.active);
|
|
||||||
if (this.active) {
|
|
||||||
this.active._deactivate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_start(node) {
|
|
||||||
this.currentText = node.innerText;
|
|
||||||
let utterance = new SpeechSynthesisUtterance(node.innerText);
|
|
||||||
|
|
||||||
let voices = window.speechSynthesis.getVoices();
|
|
||||||
console.log(voices);
|
|
||||||
let voice = voices.filter(val => {
|
|
||||||
//console.log(val)
|
|
||||||
return val.name == 'Microsoft Hedda Desktop - German'
|
|
||||||
})[0];
|
|
||||||
|
|
||||||
//console.log(voice)
|
|
||||||
|
|
||||||
utterance.voice = voice;
|
|
||||||
console.log('TALK: ', utterance);
|
|
||||||
window.speechSynthesis.speak(utterance);
|
|
||||||
this._activate();
|
|
||||||
window.speechSynthesis.resume();
|
|
||||||
|
|
||||||
utterance.onboundary = () => {
|
|
||||||
console.log('onboundary', node.innerText);
|
|
||||||
if (this.currentText.substring(0, 5) != node.innerText.substring(0, 5)) {
|
|
||||||
console.log('text for speech synth changed!', this.currentText, node.innerText);
|
|
||||||
this._stop();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
utterance.onend = () => console.log('onend', node.innerText);
|
|
||||||
utterance.onerror = () => console.log('onerror', node.innerText);
|
|
||||||
utterance.onmark = () => console.log('onmark', node.innerText);
|
|
||||||
utterance.onpause = () => console.log('onpause', node.innerText);
|
|
||||||
utterance.onresume = () => console.log('onresume', node.innerText);
|
|
||||||
utterance.onstart = () => console.log('onstart', node.innerText);
|
|
||||||
utterance.onerror = () => console.log('onerror', node.innerText);
|
|
||||||
}
|
|
||||||
|
|
||||||
_stop() {
|
|
||||||
window.speechSynthesis.cancel();
|
|
||||||
this.currentText = null;
|
|
||||||
this._deactivate();
|
|
||||||
}
|
|
||||||
|
|
||||||
get active() {
|
|
||||||
return this.constructor.active
|
|
||||||
}
|
|
||||||
|
|
||||||
set active(val) {
|
|
||||||
this.constructor.active = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
get currentText() {
|
|
||||||
return this.constructor.text
|
|
||||||
}
|
|
||||||
|
|
||||||
set currentText(val) {
|
|
||||||
this.constructor.text = val;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* eslint-disable no-unused-vars */
|
/* eslint-disable no-unused-vars */
|
||||||
@ -10842,7 +11054,7 @@
|
|||||||
window.Card = Card;
|
window.Card = Card;
|
||||||
window.CardPlugin = CardPlugin;
|
window.CardPlugin = CardPlugin;
|
||||||
window.CardPluginBase = CardPluginBase;
|
window.CardPluginBase = CardPluginBase;
|
||||||
window.ScatterCard = ScatterCard;
|
window.ScatterCard = ScatterCard$1;
|
||||||
window.Highlight = Highlight$1;
|
window.Highlight = Highlight$1;
|
||||||
window.Theme = Theme;
|
window.Theme = Theme;
|
||||||
|
|
||||||
|
7
dist/iwmlib.pixi.js
vendored
@ -6979,7 +6979,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
close() {
|
close() {
|
||||||
|
console.log('SCATTER WAS CLOSED!');
|
||||||
this._callCloseCallbacks();
|
this._callCloseCallbacks();
|
||||||
|
this._removeCallbacks();
|
||||||
this._removeSelfFromScatterContainer();
|
this._removeSelfFromScatterContainer();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6989,6 +6991,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_removeCallbacks() {
|
||||||
|
this.onClose = [];
|
||||||
|
this.onTransform = [];
|
||||||
|
}
|
||||||
|
|
||||||
_removeSelfFromScatterContainer() {
|
_removeSelfFromScatterContainer() {
|
||||||
// Removes self from container when it's closed.
|
// Removes self from container when it's closed.
|
||||||
if (this.container) {
|
if (this.container) {
|
||||||
|
251
lib/card/card.js
@ -1,3 +1,6 @@
|
|||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
/** To avoid problems with relative URL paths, we use inline data URI to load svg icons. */
|
/** To avoid problems with relative URL paths, we use inline data URI to load svg icons. */
|
||||||
const closeIconDataURI = `data:image/svg+xml;utf8,
|
const closeIconDataURI = `data:image/svg+xml;utf8,
|
||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
@ -31,11 +34,35 @@ export default class Card {
|
|||||||
static setup(context, modules = []) {
|
static setup(context, modules = []) {
|
||||||
console.log('Setup Card...', modules)
|
console.log('Setup Card...', modules)
|
||||||
context.modules = []
|
context.modules = []
|
||||||
|
|
||||||
|
context.module = {}
|
||||||
|
|
||||||
|
context.classList.add('info-card')
|
||||||
|
context.setAttribute('data-id', Card.id++)
|
||||||
|
|
||||||
modules.forEach(module => {
|
modules.forEach(module => {
|
||||||
if (module.apply(context)) context.modules.push(module.constructor.name)
|
if (module.apply(context)) {
|
||||||
|
const moduleName = module.constructor.name
|
||||||
|
context.modules.push(moduleName)
|
||||||
|
context.module[moduleName] = module
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static remove(context) {
|
||||||
|
for (let module of Object.values(context.module)) {
|
||||||
|
module.remove()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static eventClose(event) {
|
||||||
|
let context = this.getContext(event.target)
|
||||||
|
|
||||||
|
if (context) {
|
||||||
|
this.constructor.close(context)
|
||||||
|
} else console.error('Could not find context!', event.target)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
@ -43,13 +70,12 @@ export default class Card {
|
|||||||
* @param {*} event
|
* @param {*} event
|
||||||
* @memberof Card
|
* @memberof Card
|
||||||
*/
|
*/
|
||||||
static close(event) {
|
static close(context) {
|
||||||
let context = this.getContext(event.target)
|
console.log('CLOSE CARD!!!')
|
||||||
if (context) {
|
this.unregisterAllEvents(context)
|
||||||
if (context.onClose) {
|
if (context.onClose) {
|
||||||
context.onClose(event)
|
context.onClose(event)
|
||||||
} else context.parentNode.removeChild(context)
|
} else context.parentNode.removeChild(context)
|
||||||
} else console.error('Could not find context!', event.target)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -61,12 +87,12 @@ export default class Card {
|
|||||||
* @param {*} replaceFunc
|
* @param {*} replaceFunc
|
||||||
* @memberof Card
|
* @memberof Card
|
||||||
*/
|
*/
|
||||||
static _replaceAttributes(html, attribute, replaceFunc) {
|
static _replaceAttributes(context, html, attribute, replaceFunc) {
|
||||||
let clickables = html.querySelectorAll(`[${attribute}]`)
|
let clickables = html.querySelectorAll(`[${attribute}]`)
|
||||||
clickables.forEach(element => {
|
clickables.forEach(element => {
|
||||||
let attributeVal = element.getAttribute(attribute)
|
let attributeVal = element.getAttribute(attribute)
|
||||||
element.removeAttribute(attribute)
|
element.removeAttribute(attribute)
|
||||||
replaceFunc.call(this, element, attributeVal)
|
replaceFunc.call(this, context, element, attributeVal)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,7 +106,7 @@ export default class Card {
|
|||||||
* @returns
|
* @returns
|
||||||
* @memberof Card
|
* @memberof Card
|
||||||
*/
|
*/
|
||||||
static _replaceCallback(element, attributeVal) {
|
static _replaceCallback(context, element, attributeVal) {
|
||||||
if (element.tagName == 'A') {
|
if (element.tagName == 'A') {
|
||||||
element.addEventListener('click', event => {
|
element.addEventListener('click', event => {
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
@ -112,7 +138,7 @@ export default class Card {
|
|||||||
// These are 'hardcoded' inside the convert.js.
|
// These are 'hardcoded' inside the convert.js.
|
||||||
if (element.tagName == 'circle') return false
|
if (element.tagName == 'circle') return false
|
||||||
|
|
||||||
InteractionMapper.on(interactionType, element, event => {
|
this.registerEvent(context, interactionType, element, event => {
|
||||||
/**
|
/**
|
||||||
* Replaces the strings from the listener with the cooresponding variables.
|
* Replaces the strings from the listener with the cooresponding variables.
|
||||||
*/
|
*/
|
||||||
@ -164,6 +190,13 @@ export default class Card {
|
|||||||
/<\s*(a|video|img|image|circle)\s(.*?)(xlink:href|href|src)\s*=\s*["'](\..*?)["']\s*(.*?)>/g,
|
/<\s*(a|video|img|image|circle)\s(.*?)(xlink:href|href|src)\s*=\s*["'](\..*?)["']\s*(.*?)>/g,
|
||||||
function(data) {
|
function(data) {
|
||||||
let path = that._getRelativePath(arguments[4])
|
let path = that._getRelativePath(arguments[4])
|
||||||
|
|
||||||
|
console.log('REPLACE ', arguments[1])
|
||||||
|
if (arguments[1] == 'a') {
|
||||||
|
console.error('NOT REPLACING LINKS')
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
|
||||||
const tag = `<${arguments[1]} ${arguments[2]} ${arguments[3]}="${path}" ${arguments[5]}>`
|
const tag = `<${arguments[1]} ${arguments[2]} ${arguments[3]}="${path}" ${arguments[5]}>`
|
||||||
/* if (that.debug) */ console.log('Adjusted: ', tag)
|
/* if (that.debug) */ console.log('Adjusted: ', tag)
|
||||||
return tag
|
return tag
|
||||||
@ -361,6 +394,7 @@ export default class Card {
|
|||||||
if (this.debug) console.log('Close Popup.', context, popup)
|
if (this.debug) console.log('Close Popup.', context, popup)
|
||||||
window.popup = popup
|
window.popup = popup
|
||||||
popup.close()
|
popup.close()
|
||||||
|
InteractionMapper.off(popup.element)
|
||||||
this._unsetPopup(context)
|
this._unsetPopup(context)
|
||||||
} else {
|
} else {
|
||||||
console.error('Requested to close popup, but popup was not found.')
|
console.error('Requested to close popup, but popup was not found.')
|
||||||
@ -730,7 +764,7 @@ export default class Card {
|
|||||||
// but for simplicity it's just done here for now.
|
// but for simplicity it's just done here for now.
|
||||||
// TODO: Adjust to load while animating (Problem: Unload when cancelled).
|
// TODO: Adjust to load while animating (Problem: Unload when cancelled).
|
||||||
console.log('loadHighlightPopup', src, position, local)
|
console.log('loadHighlightPopup', src, position, local)
|
||||||
this._loadPopupContent(src)
|
this._loadPopupContent(context, src)
|
||||||
.then(content => {
|
.then(content => {
|
||||||
this._openPopup(context, src, local, content, {
|
this._openPopup(context, src, local, content, {
|
||||||
highlight: node,
|
highlight: node,
|
||||||
@ -757,14 +791,14 @@ export default class Card {
|
|||||||
* @returns {Promise} - Returns a promise, that's resolved when the data is loaded.
|
* @returns {Promise} - Returns a promise, that's resolved when the data is loaded.
|
||||||
* @memberof Card
|
* @memberof Card
|
||||||
*/
|
*/
|
||||||
static _loadPopupContent(source) {
|
static _loadPopupContent(context, source) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let xhr = new XMLHttpRequest()
|
let xhr = new XMLHttpRequest()
|
||||||
xhr.open('get', source, true)
|
xhr.open('get', source, true)
|
||||||
xhr.onreadystatechange = () => {
|
xhr.onreadystatechange = () => {
|
||||||
if (xhr.readyState == 4) {
|
if (xhr.readyState == 4) {
|
||||||
if (xhr.status == 200 || xhr.status == 0) {
|
if (xhr.status == 200 || xhr.status == 0) {
|
||||||
let html = this.postProcessResponseText(xhr.responseText)
|
let html = this.postProcessResponseText(context, xhr.responseText)
|
||||||
let selector = Card.popupHtmlSelector
|
let selector = Card.popupHtmlSelector
|
||||||
let content = { html: html.body.innerHTML, selector }
|
let content = { html: html.body.innerHTML, selector }
|
||||||
resolve(content)
|
resolve(content)
|
||||||
@ -859,6 +893,9 @@ export default class Card {
|
|||||||
let wrapper = this.getContext(node)
|
let wrapper = this.getContext(node)
|
||||||
|
|
||||||
let zoomable = node.closest('figure')
|
let zoomable = node.closest('figure')
|
||||||
|
if (zoomable == null) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// load mainimg - if none exists, there is nothing to open
|
// load mainimg - if none exists, there is nothing to open
|
||||||
let img = zoomable.querySelector('.mainimg')
|
let img = zoomable.querySelector('.mainimg')
|
||||||
@ -1117,18 +1154,18 @@ export default class Card {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Closes a zoomable object with animation
|
* Closes an zoomable object with an animation.
|
||||||
*
|
*
|
||||||
* @static
|
* @static
|
||||||
* @param {any} wrapper - the wrapper containing the index card
|
* @param {DOMElement} context - Context of the zoomable.
|
||||||
* @param {any} div - the figure containing the relevant elements
|
* @param {*} zoomable
|
||||||
* @param {any} zoomable - the zoomable element, from which the zoomed figure originates
|
* @param {*} zoomedFig
|
||||||
* @param {any} rect - the target rect for the tween (typically the top left width height of the zoomable)
|
|
||||||
* @memberof Card
|
* @memberof Card
|
||||||
*/
|
*/
|
||||||
static closeZoomable(context, zoomable, zoomedFig) {
|
static closeZoomable(context, zoomable, zoomedFig) {
|
||||||
if (this.debug) console.log('Close Zoomable', context, zoomable, zoomedFig)
|
if (this.debug) console.log('Close Zoomable', context, zoomable, zoomedFig)
|
||||||
|
|
||||||
|
//TODO: Why do I need this check. Shouldn't it be always present?! - SO
|
||||||
if (zoomable) {
|
if (zoomable) {
|
||||||
this._unsetZoomable(context)
|
this._unsetZoomable(context)
|
||||||
let caption = zoomable.querySelector('figcaption.cap')
|
let caption = zoomable.querySelector('figcaption.cap')
|
||||||
@ -1149,12 +1186,15 @@ export default class Card {
|
|||||||
TweenLite.set(zoomable, {
|
TweenLite.set(zoomable, {
|
||||||
opacity: 1
|
opacity: 1
|
||||||
})
|
})
|
||||||
|
|
||||||
let div = zoomedFig.parentNode
|
let div = zoomedFig.parentNode
|
||||||
let videoElement = div.querySelector('video')
|
let videoElement = div.querySelector('video')
|
||||||
if (videoElement) videoElement.pause()
|
if (videoElement) videoElement.pause()
|
||||||
div.parentNode.removeChild(div)
|
div.parentNode.removeChild(div)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
InteractionMapper.off(zoomedFig)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1244,6 +1284,7 @@ export default class Card {
|
|||||||
rotation: angle
|
rotation: angle
|
||||||
})
|
})
|
||||||
indexbox.prepend(clone)
|
indexbox.prepend(clone)
|
||||||
|
clone.setAttribute('data-source', src)
|
||||||
|
|
||||||
let titlebar = clone.querySelector('.titlebar')
|
let titlebar = clone.querySelector('.titlebar')
|
||||||
let title = titlebar.querySelector('h2')
|
let title = titlebar.querySelector('h2')
|
||||||
@ -1268,7 +1309,7 @@ export default class Card {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//jquery hyphenate below
|
//jquery hyphenate below
|
||||||
if (typeof $ != 'undefined') {
|
if (this.constructor._jQueryIsPresent()) {
|
||||||
$('.column')
|
$('.column')
|
||||||
.not('.overview')
|
.not('.overview')
|
||||||
.children('p')
|
.children('p')
|
||||||
@ -1323,7 +1364,67 @@ export default class Card {
|
|||||||
|
|
||||||
Card._disableCardCloseButton(context)
|
Card._disableCardCloseButton(context)
|
||||||
|
|
||||||
const closeAnimation = () => {
|
//TODO consider renaming it to something more intuitive.
|
||||||
|
let iconClone = clone.querySelector('.card-icon')
|
||||||
|
|
||||||
|
if (iconClone == null) {
|
||||||
|
iconClone = clone.querySelector('.cardicon')
|
||||||
|
console.warn("Legacy selector. Change it to 'card-icon' and find a more suitable name.")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (iconClone.tagName == 'img') {
|
||||||
|
iconClone.src = iconClone.src.replace('info.svg', 'close.svg')
|
||||||
|
}
|
||||||
|
//console.log("ICON: ", iconClone)
|
||||||
|
iconClone.classList.remove('info')
|
||||||
|
iconClone.classList.add('close', 'view-button', 'transparent-background')
|
||||||
|
|
||||||
|
// We append the icon clone to the subcard-content.
|
||||||
|
// Then it's always on the content and not on the background
|
||||||
|
// (If there is one).
|
||||||
|
if (this.dynamicHeight) {
|
||||||
|
article.appendChild(iconClone)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enableNearestNeighborTaps) {
|
||||||
|
//look for nearby popups on tap
|
||||||
|
InteractionMapper.on('tap', indexbox, () => {
|
||||||
|
console.log('Tap handler called', editable)
|
||||||
|
if (!editable) {
|
||||||
|
this.findNearbyPopups(event, card)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const eventElements = [indexbox, iconClone, clone]
|
||||||
|
|
||||||
|
// Use the 'tap' event for closing.
|
||||||
|
// Otherwise the subcard cannot be closed,
|
||||||
|
// when another subcard is touched.
|
||||||
|
InteractionMapper.on('tap', iconClone, () => {
|
||||||
|
if (editable) {
|
||||||
|
let isDirty = mainController.askSaveNode()
|
||||||
|
if (isDirty) {
|
||||||
|
mainController.saveNode(html.innerHTML, url => {
|
||||||
|
callback(url)
|
||||||
|
this._closeIndexCard(context, card,{
|
||||||
|
eventElements,
|
||||||
|
src
|
||||||
|
})
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this._closeIndexCard(context, card)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this._closeIndexCard(context, card)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
static _closeIndexCard(context, card, {
|
||||||
|
eventElements = [],
|
||||||
|
src = null
|
||||||
|
} = []) {
|
||||||
//logging
|
//logging
|
||||||
if (src) {
|
if (src) {
|
||||||
let strparts = src.split('/')
|
let strparts = src.split('/')
|
||||||
@ -1338,7 +1439,7 @@ export default class Card {
|
|||||||
|
|
||||||
Card._cleanup(context)
|
Card._cleanup(context)
|
||||||
Card._unsetSubcard(context)
|
Card._unsetSubcard(context)
|
||||||
|
this._subcardChanged(context, true)
|
||||||
this._enableCardCloseButton(context)
|
this._enableCardCloseButton(context)
|
||||||
|
|
||||||
let previewTitlebar = card.querySelector('.titlebar')
|
let previewTitlebar = card.querySelector('.titlebar')
|
||||||
@ -1403,55 +1504,14 @@ export default class Card {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO consider renaming it to something more intuitive.
|
/**
|
||||||
let iconClone = clone.querySelector('.card-icon')
|
* Tests if jQuery is properly included in the project.
|
||||||
|
* Otherwise specific features may not work correctly (e.g. hyphenation)
|
||||||
if (iconClone == null) {
|
*/
|
||||||
iconClone = clone.querySelector('.cardicon')
|
_jQueryIsPresent() {
|
||||||
console.warn("Legacy selector. Change it to 'card-icon' and find a more suitable name.")
|
let jQueryInitialized = typeof $ != 'undefined'
|
||||||
}
|
if (!jQueryInitialized) console.error('No jQuery is provided. Specific features may fail.')
|
||||||
|
return jQueryInitialized
|
||||||
if (iconClone.tagName == 'img') {
|
|
||||||
iconClone.src = iconClone.src.replace('info.svg', 'close.svg')
|
|
||||||
}
|
|
||||||
//console.log("ICON: ", iconClone)
|
|
||||||
iconClone.classList.remove('info')
|
|
||||||
iconClone.classList.add('close', 'view-button', 'transparent-background')
|
|
||||||
|
|
||||||
// We append the icon clone to the subcard-content.
|
|
||||||
// Then it's always on the content and not on the background
|
|
||||||
// (If there is one).
|
|
||||||
if (this.dynamicHeight) {
|
|
||||||
article.appendChild(iconClone)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (enableNearestNeighborTaps) {
|
|
||||||
//look for nearby popups on tap
|
|
||||||
InteractionMapper.on('tap', indexbox, () => {
|
|
||||||
console.log('Tap handler called', editable)
|
|
||||||
if (!editable) {
|
|
||||||
this.findNearbyPopups(event, card)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
// Use the 'tap' event for closing.
|
|
||||||
// Otherwise the subcard cannot be closed,
|
|
||||||
// when another subcard is touched.
|
|
||||||
InteractionMapper.on('tap', iconClone, () => {
|
|
||||||
if (editable) {
|
|
||||||
let isDirty = mainController.askSaveNode()
|
|
||||||
if (isDirty) {
|
|
||||||
mainController.saveNode(html.innerHTML, url => {
|
|
||||||
callback(url)
|
|
||||||
closeAnimation()
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
closeAnimation()
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
closeAnimation()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1516,14 +1576,10 @@ export default class Card {
|
|||||||
xhr.onreadystatechange = () => {
|
xhr.onreadystatechange = () => {
|
||||||
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
|
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
|
||||||
let html = xhr.responseText
|
let html = xhr.responseText
|
||||||
let parsedHTML = this.postProcessResponseText(html)
|
let parsedHTML = this.postProcessResponseText(context, html)
|
||||||
|
|
||||||
// TODO: What is this good for?
|
|
||||||
// let article = parsedHTML.querySelector('article')
|
|
||||||
// card.insertAdjacentElement('afterbegin', article)
|
|
||||||
// TweenLite.set(article, { autoAlpha: 0 })
|
|
||||||
|
|
||||||
Card.expandIndexCard(card, parsedHTML, 'article', relativeSource, saveCallback)
|
Card.expandIndexCard(card, parsedHTML, 'article', relativeSource, saveCallback)
|
||||||
|
|
||||||
|
this._subcardChanged(context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
xhr.onerror = () => {
|
xhr.onerror = () => {
|
||||||
@ -1649,7 +1705,8 @@ export default class Card {
|
|||||||
* @returns
|
* @returns
|
||||||
* @memberof Card
|
* @memberof Card
|
||||||
*/
|
*/
|
||||||
static postProcessResponseText(htmlString) {
|
static postProcessResponseText(context, htmlString) {
|
||||||
|
console.error('RUN POSTPROCESS')
|
||||||
let editable = this.isEditable()
|
let editable = this.isEditable()
|
||||||
|
|
||||||
htmlString = this._adjustRelativeLinks(htmlString)
|
htmlString = this._adjustRelativeLinks(htmlString)
|
||||||
@ -1657,7 +1714,7 @@ export default class Card {
|
|||||||
let parser = new DOMParser()
|
let parser = new DOMParser()
|
||||||
let html = parser.parseFromString(htmlString, 'text/html')
|
let html = parser.parseFromString(htmlString, 'text/html')
|
||||||
if (!editable) {
|
if (!editable) {
|
||||||
this._replaceAttributes(html, 'onclick', this._replaceCallback)
|
this._replaceAttributes(context, html, 'onclick', this._replaceCallback)
|
||||||
}
|
}
|
||||||
let zoomableWrappers = html.querySelectorAll('.svg-wrapper')
|
let zoomableWrappers = html.querySelectorAll('.svg-wrapper')
|
||||||
zoomableWrappers.forEach(wrapper => {
|
zoomableWrappers.forEach(wrapper => {
|
||||||
@ -1778,7 +1835,7 @@ export default class Card {
|
|||||||
this._setPopupSource(popup, source)
|
this._setPopupSource(popup, source)
|
||||||
context.popup = popup
|
context.popup = popup
|
||||||
|
|
||||||
if (typeof $ != 'undefined') {
|
if (this.constructor._jQueryIsPresent()) {
|
||||||
//jquery hyphenate below
|
//jquery hyphenate below
|
||||||
console.log('hyphenated popup:', $('span').hyphenate('de'))
|
console.log('hyphenated popup:', $('span').hyphenate('de'))
|
||||||
}
|
}
|
||||||
@ -1877,8 +1934,44 @@ export default class Card {
|
|||||||
static get relativePath() {
|
static get relativePath() {
|
||||||
return Card._relativePath
|
return Card._relativePath
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static getRegisteredEvents(context) {
|
||||||
|
return context._registeredEvents == null ? [] : context._registeredEvents
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper method that registers InteractionMapper events on the info card.
|
||||||
|
* Those events are saved on the context element. An they are unregistered when the
|
||||||
|
* card is closed again.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @param {DOMElement} context - Context of the Card.
|
||||||
|
* @param {string} types
|
||||||
|
* @param {DOMElement} element -Element on which the event is registered.
|
||||||
|
* @param {Function} callback - Function thats called when the event occurs.
|
||||||
|
* @memberof Card
|
||||||
|
*/
|
||||||
|
static registerEvent(context, types, element, callback) {
|
||||||
|
InteractionMapper.on(types, element, callback)
|
||||||
|
if (context._registeredEvents == null) context._registeredEvents = []
|
||||||
|
if (context._registeredEvents.indexOf(element) == -1) context._registeredEvents.push(element)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unregisters all events on the infocard.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @param {DomElement} context - Context of the card.
|
||||||
|
* @memberof Card
|
||||||
|
*/
|
||||||
|
static unregisterAllEvents(context) {
|
||||||
|
let eventElements = this.getRegisteredEvents(context)
|
||||||
|
InteractionMapper.off(eventElements)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Card.id = 0
|
||||||
Card.debug = true
|
Card.debug = true
|
||||||
Card._relativePath = ''
|
Card._relativePath = ''
|
||||||
Card.scatterContainer = null
|
Card.scatterContainer = null
|
||||||
|
@ -146,7 +146,6 @@ CardPlugin.EnlargeableThumbnail = class EnlargeableThumbnail extends CardPluginB
|
|||||||
this.fadeAnimationDuration = fadeAnimationDuration
|
this.fadeAnimationDuration = fadeAnimationDuration
|
||||||
this.interactionType = interactionType
|
this.interactionType = interactionType
|
||||||
}
|
}
|
||||||
|
|
||||||
get require() {
|
get require() {
|
||||||
return [CardPlugin.LightBox]
|
return [CardPlugin.LightBox]
|
||||||
}
|
}
|
||||||
@ -392,126 +391,201 @@ CardPlugin.Speech = class SpeechPlugin extends CardPluginBase {
|
|||||||
this.className = className
|
this.className = className
|
||||||
this.parentSelector = parentSelector
|
this.parentSelector = parentSelector
|
||||||
this.interactionType = interactionType
|
this.interactionType = interactionType
|
||||||
}
|
|
||||||
|
|
||||||
get require() {
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Speech doesn't stop when page is navigated.
|
||||||
|
Therefore we do it manually here.
|
||||||
|
*/
|
||||||
|
window.addEventListener('beforeunload', () => {
|
||||||
|
window.speechSynthesis.cancel()
|
||||||
|
})
|
||||||
|
|
||||||
|
// Binding the function beforehand ensures, that the end function is always the same.
|
||||||
|
this._end = this._end.bind(this)
|
||||||
|
|
||||||
|
this._setupUtterance()
|
||||||
|
this.utterance.addEventListener('end', event => {
|
||||||
|
this._end()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
get require() {
|
||||||
return [CardPlugin.Ui]
|
return [CardPlugin.Ui]
|
||||||
|
}
|
||||||
|
|
||||||
|
subcardChanged(closed) {
|
||||||
|
if (this.cardActive) {
|
||||||
|
this._updateText(closed)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
get cardActive() {
|
||||||
|
return this.activeUtterance == this.utterance
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateText(ignoreSubcard = false) {
|
||||||
|
let node = this.context
|
||||||
|
let subcard = this.context.querySelector('.mainview > .subcard')
|
||||||
|
|
||||||
|
if (ignoreSubcard) {
|
||||||
|
if (subcard != null) {
|
||||||
|
let clone = node.cloneNode(true)
|
||||||
|
let clonedSubcard = clone.querySelector('.mainview > .subcard')
|
||||||
|
clonedSubcard.parentNode.removeChild(clonedSubcard)
|
||||||
|
node = clone
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (subcard) {
|
||||||
|
let clone = subcard.cloneNode(true)
|
||||||
|
clone.querySelectorAll('figure').forEach(figure => {
|
||||||
|
figure.parentNode.removeChild(figure)
|
||||||
|
})
|
||||||
|
|
||||||
|
node = clone
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
append(context) {
|
let id = this.context.getAttribute('data-id')
|
||||||
|
let src = this.context.getAttribute('data-source')
|
||||||
|
let subcardSource = null
|
||||||
|
if (subcard != null) {
|
||||||
|
subcardSource = subcard.getAttribute('data-source')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!window.speechSynthesis.speaking) {
|
||||||
|
this._start(node)
|
||||||
|
Logging.log(`Started speech on card: id:${id} - source: ${src} - subcard: ${subcardSource}`)
|
||||||
|
} else if (this.cardActive && this._sameText(node)) {
|
||||||
|
Logging.log(`Stopped speech on card: id:${id} - source: ${src} - subcard: ${subcardSource}`)
|
||||||
|
this._stop()
|
||||||
|
} else {
|
||||||
|
Logging.log(`Updated Text on card: id:${id} - source: ${src} - subcard: ${subcardSource}`)
|
||||||
|
this._stop()
|
||||||
|
.then(() => {
|
||||||
|
this._start(node)
|
||||||
|
})
|
||||||
|
.catch(console.error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_sameText(node) {
|
||||||
|
return this.utterance.text == this._cleanupText(node)
|
||||||
|
}
|
||||||
|
|
||||||
|
_setupUtterance() {
|
||||||
|
this.utterance = new SpeechSynthesisUtterance()
|
||||||
|
this.utterance.lang = 'de-DE'
|
||||||
|
}
|
||||||
|
|
||||||
|
get require() {
|
||||||
|
return [CardPlugin.Ui]
|
||||||
|
}
|
||||||
|
|
||||||
|
remove() {
|
||||||
|
this.button = null
|
||||||
|
super.remove()
|
||||||
|
}
|
||||||
|
|
||||||
|
append(context) {
|
||||||
let container = context.querySelector(this.parentSelector)
|
let container = context.querySelector(this.parentSelector)
|
||||||
this.button = document.createElement('div')
|
this.button = document.createElement('div')
|
||||||
this.button.className = 'icon button ' + this.className
|
this.button.className = 'icon button ' + this.className
|
||||||
container.appendChild(this.button)
|
container.appendChild(this.button)
|
||||||
|
|
||||||
InteractionMapper.on(this.interactionType, this.button, () => {
|
InteractionMapper.on(this.interactionType, this.button, () => {
|
||||||
let subcard = context.querySelector('.mainview > .subcard')
|
this.speak()
|
||||||
let target = subcard ? subcard : context
|
})
|
||||||
|
|
||||||
this.speak(target)
|
this.context.addEventListener('DOMNodeRemoved', event => {
|
||||||
|
if (
|
||||||
|
this.context['lastSpeechNode'] == window.speechSynthesis['speechPluginNode'] &&
|
||||||
|
event.target == this.context
|
||||||
|
) {
|
||||||
|
this._stop()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
ScatterCard
|
||||||
|
}
|
||||||
|
|
||||||
|
_isSameNode(node) {
|
||||||
|
return this.currentText == node.textContent
|
||||||
|
}
|
||||||
|
|
||||||
|
speak() {
|
||||||
|
/**
|
||||||
|
* This is a little bit ugly, but imho the most elegant of all dirty solutions.
|
||||||
|
*
|
||||||
|
5ht * Within the plugins we have no knowledge of other cards and such. But must differentiate the
|
||||||
|
* clicks by their corresponding owner. The SpeechUtterance just takes a text and has no knowledge
|
||||||
|
* about the node that is currently read to the user.
|
||||||
|
*
|
||||||
|
* This means, that we can identify same text, but not differentiate same text on different nodes.
|
||||||
|
* To account for that, we add the node to the speechSynthesis object (#benefitsOfJavaScript) and
|
||||||
|
* have access to the node, by - let's say - expanding the functionality of the SpeechSynthesis object.
|
||||||
|
*
|
||||||
|
* SO -17.07.19
|
||||||
|
*/
|
||||||
|
|
||||||
|
let activeNode = window.speechSynthesis['speechPluginNode']
|
||||||
|
this._updateText()
|
||||||
|
}
|
||||||
|
|
||||||
|
async _stop() {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
if (this.activeUtterance) {
|
||||||
|
this.activeUtterance.addEventListener('end', resolve, {
|
||||||
|
once: true
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
_activate() {
|
|
||||||
this._disableActive()
|
|
||||||
this.active = this
|
|
||||||
this._activateButton()
|
|
||||||
}
|
|
||||||
|
|
||||||
_activateButton() {
|
|
||||||
if (this.button) this.button.classList.add('active')
|
|
||||||
}
|
|
||||||
|
|
||||||
_deactivate() {
|
|
||||||
this._deactivateButton()
|
|
||||||
}
|
|
||||||
|
|
||||||
_deactivateButton() {
|
|
||||||
if (this.button) this.button.classList.remove('active')
|
|
||||||
}
|
|
||||||
|
|
||||||
_isSameNode(node) {
|
|
||||||
//console.log(this.currentText, node.innerText)
|
|
||||||
return this.currentText == node.innerText
|
|
||||||
}
|
|
||||||
|
|
||||||
speak(node) {
|
|
||||||
console.log(this._isSameNode(node))
|
|
||||||
|
|
||||||
if (!window.speechSynthesis.speaking) {
|
|
||||||
console.log('Noone talking!')
|
|
||||||
this._start(node)
|
|
||||||
} else if (this._isSameNode(node)) {
|
|
||||||
console.log('Requested same!')
|
|
||||||
this._stop()
|
|
||||||
} else {
|
|
||||||
console.log('Requested Different!')
|
|
||||||
this._stop()
|
|
||||||
this._start(node)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_disableActive() {
|
|
||||||
console.log('disableActive:', this.active)
|
|
||||||
if (this.active) {
|
|
||||||
this.active._deactivate()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_start(node) {
|
|
||||||
this.currentText = node.innerText
|
|
||||||
let utterance = new SpeechSynthesisUtterance(node.innerText)
|
|
||||||
|
|
||||||
let voices = window.speechSynthesis.getVoices()
|
|
||||||
console.log(voices)
|
|
||||||
let voice = voices.filter(val => {
|
|
||||||
//console.log(val)
|
|
||||||
return val.name == 'Microsoft Hedda Desktop - German'
|
|
||||||
})[0]
|
|
||||||
|
|
||||||
//console.log(voice)
|
|
||||||
|
|
||||||
utterance.voice = voice
|
|
||||||
console.log('TALK: ', utterance)
|
|
||||||
window.speechSynthesis.speak(utterance)
|
|
||||||
this._activate()
|
|
||||||
window.speechSynthesis.resume()
|
|
||||||
|
|
||||||
utterance.onboundary = () => {
|
|
||||||
console.log('onboundary', node.innerText)
|
|
||||||
if (this.currentText.substring(0, 5) != node.innerText.substring(0, 5)) {
|
|
||||||
console.log('text for speech synth changed!', this.currentText, node.innerText)
|
|
||||||
this._stop()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
utterance.onend = () => console.log('onend', node.innerText)
|
|
||||||
utterance.onerror = () => console.log('onerror', node.innerText)
|
|
||||||
utterance.onmark = () => console.log('onmark', node.innerText)
|
|
||||||
utterance.onpause = () => console.log('onpause', node.innerText)
|
|
||||||
utterance.onresume = () => console.log('onresume', node.innerText)
|
|
||||||
utterance.onstart = () => console.log('onstart', node.innerText)
|
|
||||||
utterance.onerror = () => console.log('onerror', node.innerText)
|
|
||||||
}
|
|
||||||
|
|
||||||
_stop() {
|
|
||||||
window.speechSynthesis.cancel()
|
window.speechSynthesis.cancel()
|
||||||
this.currentText = null
|
})
|
||||||
this._deactivate()
|
}
|
||||||
}
|
|
||||||
|
get activeUtterance() {
|
||||||
get active() {
|
return window.speechSynthesis['speechPluginUtterance']
|
||||||
return this.constructor.active
|
}
|
||||||
}
|
|
||||||
|
_end() {
|
||||||
set active(val) {
|
window.speechSynthesis['speechPluginNode'] = null
|
||||||
this.constructor.active = val
|
window.speechSynthesis['speechPluginUtterance'] = null
|
||||||
}
|
this._deactivateButton()
|
||||||
|
this.context.classList.remove('speech-plugin-is-reading')
|
||||||
get currentText() {
|
}
|
||||||
return this.constructor.text
|
|
||||||
}
|
_start(node) {
|
||||||
|
window.speechSynthesis.cancel()
|
||||||
set currentText(val) {
|
|
||||||
this.constructor.text = val
|
window.speechSynthesis['speechPluginUtterance'] = this.utterance
|
||||||
}
|
window.speechSynthesis['speechPluginNode'] = node
|
||||||
|
this.context['lastSpeechNode'] = node
|
||||||
|
|
||||||
|
let cleanText = this._cleanupText(node)
|
||||||
|
this.utterance.text = cleanText
|
||||||
|
window.speechSynthesis.speak(this.utterance)
|
||||||
|
this._activateButton()
|
||||||
|
|
||||||
|
this.context.classList.add('speech-plugin-is-reading')
|
||||||
|
}
|
||||||
|
|
||||||
|
_cleanupText(node) {
|
||||||
|
let text = node.textContent
|
||||||
|
text = this._removeShy(text)
|
||||||
|
return text
|
||||||
|
}
|
||||||
|
|
||||||
|
_removeShy(text) {
|
||||||
|
return text.replace(/\u00AD/g, '')
|
||||||
|
}
|
||||||
|
|
||||||
|
_activateButton() {
|
||||||
|
if (this.button) this.button.classList.add('active')
|
||||||
|
}
|
||||||
|
_deactivateButton() {
|
||||||
|
if (this.button) this.button.classList.remove('active')
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -15,7 +15,7 @@ export default class ScatterCard extends Card {
|
|||||||
* @param {*} htmlString
|
* @param {*} htmlString
|
||||||
* @param {*} basePath
|
* @param {*} basePath
|
||||||
* @param {*} [opts={}]
|
* @param {*} [opts={}]
|
||||||
* @memberof Card
|
* @memberof ScatterCard
|
||||||
*/
|
*/
|
||||||
static setup(context, htmlString, { basePath = './', modules = [] } = {}) {
|
static setup(context, htmlString, { basePath = './', modules = [] } = {}) {
|
||||||
context.classList.add('info-card')
|
context.classList.add('info-card')
|
||||||
@ -29,7 +29,7 @@ export default class ScatterCard extends Card {
|
|||||||
/**
|
/**
|
||||||
* Conflicts with the FindTarget method of the Abstract scatter.
|
* Conflicts with the FindTarget method of the Abstract scatter.
|
||||||
*/
|
*/
|
||||||
this._replaceAttributes(html, 'onclick', this._replaceCallback)
|
this._replaceAttributes(context, html, 'onclick', this._replaceCallback)
|
||||||
|
|
||||||
let content = html.querySelector('.mainview')
|
let content = html.querySelector('.mainview')
|
||||||
context.appendChild(content)
|
context.appendChild(content)
|
||||||
@ -51,7 +51,16 @@ export default class ScatterCard extends Card {
|
|||||||
element.onClose = callback
|
element.onClose = callback
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Removes the close listener from a card element.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @param {HTMLElement} element - Context of the Card.
|
||||||
|
* @memberof ScatterCard
|
||||||
|
*/
|
||||||
|
static removeOnCloseListener(element) {
|
||||||
|
element.onClose = null
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Creates a scatter for the card and applies the card to it,
|
* Creates a scatter for the card and applies the card to it,
|
||||||
*
|
*
|
||||||
@ -61,7 +70,7 @@ export default class ScatterCard extends Card {
|
|||||||
* @param {string} [basePath=""]
|
* @param {string} [basePath=""]
|
||||||
* @param {*} [opts={}]
|
* @param {*} [opts={}]
|
||||||
* @returns
|
* @returns
|
||||||
* @memberof Card
|
* @memberof ScatterCard
|
||||||
*/
|
*/
|
||||||
static createCardScatter(html, scatterContainer, { basePath = './', modules = [] } = {}) {
|
static createCardScatter(html, scatterContainer, { basePath = './', modules = [] } = {}) {
|
||||||
let element = document.createElement('div')
|
let element = document.createElement('div')
|
||||||
@ -79,6 +88,42 @@ export default class ScatterCard extends Card {
|
|||||||
return element
|
return element
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes but NOT removes the scatter element.
|
||||||
|
*
|
||||||
|
* The remove must be called separately, it may be used in the close callback
|
||||||
|
* of the scatter.
|
||||||
|
*/
|
||||||
|
static close(context) {
|
||||||
|
|
||||||
|
Card.close(context)
|
||||||
|
|
||||||
|
if (context['scatter']) {
|
||||||
|
console.error('CLOSED CARD')
|
||||||
|
context.scatter.close()
|
||||||
|
} else {
|
||||||
|
console.error('Expected a scatter element to close!', this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleans up the card.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @override
|
||||||
|
* @memberof ScatterCard
|
||||||
|
*/
|
||||||
|
static remove(context) {
|
||||||
|
if (context['scatter']) {
|
||||||
|
context.scatter = null
|
||||||
|
console.error('REMOVED CARD')
|
||||||
|
} else {
|
||||||
|
console.error('Expected a scatter element to remove!', this)
|
||||||
|
}
|
||||||
|
|
||||||
|
Card.remove(context)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*Utility function to create a fully functional card scatter.
|
*Utility function to create a fully functional card scatter.
|
||||||
*
|
*
|
||||||
|
BIN
lib/card/test/example/01/01.jpg
Normal file
After Width: | Height: | Size: 2.0 MiB |
25
lib/card/test/example/01/01.xml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<data>
|
||||||
|
<header>
|
||||||
|
<!-- Thumbnail of artwork with 512px large side -->
|
||||||
|
<thumbnail>01/thumbnail.jpg</thumbnail>
|
||||||
|
<!-- <artist> </artist>-->
|
||||||
|
<title>Das Rathaus</title>
|
||||||
|
<!-- <misc>erbaut 1435</misc>-->
|
||||||
|
<description>
|
||||||
|
Das Rathaus ist das wichtigste Gebäude auf dem Marktplatz. Mit dem Bau wurde 1435 begonnen, seitdem wurde es immer wieder verändert, sodass es Merkmale vieler Baustile vom Spätmittelalter bis zum 21. Jahrhundert aufweist. Die auffällige Fassadengestaltung stammt aus dem 19. Jahrhundert.
|
||||||
|
</description>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<card src="01/01_baugeschichte.xml"/>
|
||||||
|
|
||||||
|
<card src="01/01_funktiondamals.xml"/>
|
||||||
|
|
||||||
|
<card src="01/01_funktionheute.xml"/>
|
||||||
|
|
||||||
|
<card src="01/01_besonderheiten.xml"/>
|
||||||
|
|
||||||
|
<card src="01/01_besonderheiten2.xml"/>
|
||||||
|
|
||||||
|
<card src="01/01_besonderheiten3.xml"/>
|
||||||
|
</data>
|
42
lib/card/test/example/01/01_baugeschichte.html
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Article with 50% Columns</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<article>
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column content" data-link="Popup" tabindex=""><h2 contenteditable="false">Tübingen wird Stadt</h2> <p contenteditable="false" data-link="Popup">Bereits 1191 wurden in Tübingen Kaufleute erwähnt – ein Beweis für einen Handelsplatz und der erste Schritt hin zur Stadt. Schon damals dürfte Tübingen städtischen Charakter besessen haben, es wurde jedoch erst 1231 urkundlich als Stadt erwähnt. Das daraufhin erstarkte städtische Selbstbewusstsein und die erhebliche Wirtschaftskraft Tübingens ebneten den Weg für den Bau eines Rathauses, das in mehreren Bauphasen errichtet wurde.</p><h2 contenteditable="false">Bauphasen</h2> <p contenteditable="false" data-link="Popup">1435 Erster Rathausbau</p> <p contenteditable="false" data-link="Popup">1495 Erweiterung um ein Stockwerk</p> <p contenteditable="false" data-link="Popup">1510/11 Einbau der <a href="../01/astronomischeuhr.html" data-highlight-id="" onclick="Card.loadPopup(event)">Astronomischen Uhr</a></p> <p contenteditable="false" data-link="Popup">1543 Erster Rathausanbau an der Haaggasse</p> <p contenteditable="false" data-link="Popup">1598 Einbau des <a href="../01/ziergiebel.html" data-highlight-id="" onclick="Card.loadPopup(event)">Ziergiebels</a></p> <p contenteditable="false" data-link="Popup">1692 Erneute Renovierung</p> <p contenteditable="false" data-link="Popup">1876/77 Anbringung der <a href="../01/vorderheutigenfassade.html" data-highlight-id="" onclick="Card.loadPopup(event)">heutigen Fassade</a></p> <p contenteditable="false" data-link="Popup">1910 Erneuerung des Anbaus an der Haaggasse</p> <p contenteditable="false" data-link="Popup">1965 Grundlegende Sanierungen</p> <p contenteditable="false" data-link="Popup">2016 Grundlegende Sanierungen</p></div>
|
||||||
|
<div class="column content" data-link="Popup" tabindex=""><div class="zoomable-wrapper column" ondragstart="Card.dragStart(event)">
|
||||||
|
<figure style="display: block;" class="zoomable singlefig" id="zoomable1">
|
||||||
|
<div style="position:relative;" class="svg-wrapper">
|
||||||
|
<svg draggable="false" class="mainimg" onclick="Card.openPopupOrZoomable(event)" viewBox="0 0 345 387.5" width="345" height="387.5" contenteditable="false">
|
||||||
|
<!-- The defs section must be defined and cannot be generated in JavaScript-->
|
||||||
|
<defs></defs>
|
||||||
|
<image width="345" height="387.5" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../01/rathauszweigeschossig.png"></image>
|
||||||
|
<g stroke-width="3"></g>
|
||||||
|
</svg>
|
||||||
|
<div class="icon button corner-button bottom-right zoom zoomable-icon" onclick="Card.openZoomable(event)"></div>
|
||||||
|
</div>
|
||||||
|
<figcaption contenteditable="false" class="cap">Erster Rathausbau 15. Jh.</figcaption>
|
||||||
|
<figcaption contenteditable="false" class="zoomcap">Rekonstruktion des Rathauses im 15. Jahrhundert, Stadtarchiv Tübingen</figcaption>
|
||||||
|
</figure>
|
||||||
|
</div><h2 contenteditable="false">Der erste Rathausbau</h2> <p contenteditable="false" data-link="Popup">Um am Marktplatz ein großes <a href="../glossar/rathaus.html" data-highlight-id="" onclick="Card.loadPopup(event)">Rathaus</a> zu errichten, wurden dort wohl mehrere staatliche Bürgerhäuser abgerissen. Der erste Rathausbau 1435 war ein <a href="../glossar/fachwerk.html" data-highlight-id="" onclick="Card.loadPopup(event)">Fachwerkbau</a> mit drei Markthallen im Erdgeschoss und zwei Obergeschossen (siehe Abbildung). Im Erdgeschoss waren Verkaufsstände von Bäckern und Metzgern untergebracht, die sich bis dahin ohne Überdachung im Süden des Platzes befanden. Die Obergeschosse boten Raum für eine Verkaufshalle, die auch für Versammlungen und Feiern benutzt wurde, das Stadtgericht, das bis dahin ebenfalls auf dem Platz „direkt unter den Wolken“ tagte, sowie den Stadtrat.</p></div>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
55
lib/card/test/example/01/01_baugeschichte.xml
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<card type="artist">
|
||||||
|
<!-- <card type="thema"> -->
|
||||||
|
<!-- <card type="details"> -->
|
||||||
|
<!-- <card type="leben des kunstwerks"> -->
|
||||||
|
<!-- <card type="komposition"> -->
|
||||||
|
<!-- <card type="licht und farbe"> -->
|
||||||
|
<!-- <card type="extra info"> -->
|
||||||
|
<h1>Das wichtigste <br/>städtische Gebäude</h1>
|
||||||
|
<preview>
|
||||||
|
<text>
|
||||||
|
Nach 200 Jahren <br/>endlich ein Rathaus
|
||||||
|
</text>
|
||||||
|
</preview>
|
||||||
|
|
||||||
|
<content template="1">
|
||||||
|
<column>
|
||||||
|
<text><![CDATA[
|
||||||
|
<h2>Tübingen wird Stadt</h2>
|
||||||
|
<p>Bereits 1191 wurden in Tübingen Kaufleute erwähnt – ein Beweis für einen Handelsplatz und der erste Schritt hin zur Stadt. Schon damals dürfte Tübingen städtischen Charakter besessen haben, es wurde jedoch erst 1231 urkundlich als Stadt erwähnt. Das daraufhin erstarkte städtische Selbstbewusstsein und die erhebliche Wirtschaftskraft Tübingens ebneten den Weg für den Bau eines Rathauses, das in mehreren Bauphasen errichtet wurde.</p>
|
||||||
|
]]></text>
|
||||||
|
|
||||||
|
|
||||||
|
<text><![CDATA[
|
||||||
|
<h2>Bauphasen</h2>
|
||||||
|
<p>1435 Erster Rathausbau</p>
|
||||||
|
<p>1495 Erweiterung um ein Stockwerk</p>
|
||||||
|
<p>1510/11 Einbau der <a href="01/astronomischeuhr.xml" >Astronomischen Uhr</a></p>
|
||||||
|
<p>1543 Erster Rathausanbau an der Haaggasse</p>
|
||||||
|
<p>1598 Einbau des <a href="01/ziergiebel.xml" >Ziergiebels</a> </p>
|
||||||
|
<p>1692 Erneute Renovierung</p>
|
||||||
|
<p>1876/77 Anbringung der <a href="01/vorderheutigenfassade.xml" >heutigen Fassade</a></p>
|
||||||
|
<p>1910 Erneuerung des Anbaus an der Haaggasse</p>
|
||||||
|
<p>1965 Grundlegende Sanierungen</p>
|
||||||
|
<p>2016 Grundlegende Sanierungen</p>
|
||||||
|
|
||||||
|
]]></text>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
|
||||||
|
<img src="01/rathauszweigeschossig.png" maxHeight="310" caption="Erster Rathausbau 15. Jh." allowZoom="true" zoomCaption="Rekonstruktion des Rathauses im 15. Jahrhundert, Stadtarchiv Tübingen"/>
|
||||||
|
|
||||||
|
<text><![CDATA[
|
||||||
|
<h2>Der erste Rathausbau</h2>
|
||||||
|
<p>Um am Marktplatz ein großes <a href="glossar/rathaus.xml" >Rathaus</a> zu errichten, wurden dort wohl mehrere staatliche Bürgerhäuser abgerissen. Der erste Rathausbau 1435 war ein <a href="glossar/fachwerk.xml" >Fachwerkbau</a> mit drei Markthallen im Erdgeschoss und zwei Obergeschossen (siehe Abbildung). Im Erdgeschoss waren Verkaufsstände von Bäckern und Metzgern untergebracht, die sich bis dahin ohne Überdachung im Süden des Platzes befanden. Die Obergeschosse boten Raum für eine Verkaufshalle, die auch für Versammlungen und Feiern benutzt wurde, das Stadtgericht, das bis dahin ebenfalls auf dem Platz „direkt unter den Wolken“ tagte, sowie den Stadtrat.</p>
|
||||||
|
]]></text>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</column>
|
||||||
|
</content>
|
||||||
|
</card>
|
51
lib/card/test/example/01/01_besonderheiten.html
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Article with 50% Columns</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<article>
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column content" data-link="Popup" tabindex=""><h2 contenteditable="false">Die drei Schichten der Fassade</h2> <p contenteditable="false" data-link="Popup">Unter der heutigen Bemalung der Rathausfassade (siehe Abbildung) liegen <a href="../01/malschichten.html" data-highlight-id="" onclick="Card.loadPopup(event)">zwei ältere Malschichten</a>: eine einfache Ausfüllung der Fachwerkfelder und darüber eine <a href="../01/grisaillemalerei.html" data-highlight-id="" onclick="Card.loadPopup(event)">Grisaillemalerei</a>. Sein heutiges Aussehen erhielt das Rathaus 1876 zum 400. Universitätsjubiläum. Nach Entwürfen des Stuttgarter Hochschulprofessors Konrad Dollinger wurde die Fassade von Ludwig Lesker mit <a href="../glossar/sgraffittomalerei.html" data-highlight-id="" onclick="Card.loadPopup(event)">Sgraffittomalerei</a> im Neorenaissance-Stil versehen. Die aufwändige Gestaltung erinnert in Farben und Ornamentik vor allem an das 16. Jahrhundert, eine Blütezeit der Stadt und der Universität.</p> <div style="height: undefinedpx"> </div><div class="zoomable-wrapper column" ondragstart="Card.dragStart(event)">
|
||||||
|
<figure style="display: block;" class="zoomable singlefig" id="zoomable1">
|
||||||
|
<div style="position:relative;" class="svg-wrapper">
|
||||||
|
<svg draggable="false" class="mainimg" onclick="Card.openPopupOrZoomable(event)" viewBox="0 0 594 337.5" width="594" height="337.5" contenteditable="false">
|
||||||
|
<!-- The defs section must be defined and cannot be generated in JavaScript-->
|
||||||
|
<defs></defs>
|
||||||
|
<image width="594" height="337.5" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../01/fassadeneu.jpg"></image>
|
||||||
|
<g stroke-width="3"><circle xlink:href="../01/eberhardfassade.html" data-highlight-id="01.fassadeneu.jpg.h1" onclick="Card.loadHighlightPopup(event)" cx="320" cy="62" r="59"></circle>
|
||||||
|
<circle xlink:href="../01/breuning.html" data-highlight-id="01.fassadeneu.jpg.h2" onclick="Card.loadHighlightPopup(event)" cx="48" cy="199" r="30"></circle>
|
||||||
|
<circle xlink:href="../01/osiander.html" data-highlight-id="01.fassadeneu.jpg.h3" onclick="Card.loadHighlightPopup(event)" cx="155" cy="199" r="30"></circle>
|
||||||
|
<circle xlink:href="../01/dann.html" data-highlight-id="01.fassadeneu.jpg.h4" onclick="Card.loadHighlightPopup(event)" cx="250" cy="199" r="30"></circle>
|
||||||
|
<circle xlink:href="../01/huber.html" data-highlight-id="01.fassadeneu.jpg.h5" onclick="Card.loadHighlightPopup(event)" cx="348" cy="199" r="30"></circle>
|
||||||
|
<circle xlink:href="../01/cotta.html" data-highlight-id="01.fassadeneu.jpg.h6" onclick="Card.loadHighlightPopup(event)" cx="446" cy="199" r="30"></circle>
|
||||||
|
<circle xlink:href="../01/uhland.html" data-highlight-id="01.fassadeneu.jpg.h7" onclick="Card.loadHighlightPopup(event)" cx="541" cy="199" r="30"></circle>
|
||||||
|
<circle xlink:href="../01/gerechtigkeit.html" data-highlight-id="01.fassadeneu.jpg.h8" onclick="Card.loadHighlightPopup(event)" cx="106" cy="275" r="42"></circle>
|
||||||
|
<circle xlink:href="../01/wohlstand.html" data-highlight-id="01.fassadeneu.jpg.h9" onclick="Card.loadHighlightPopup(event)" cx="211" cy="275" r="42"></circle>
|
||||||
|
<circle xlink:href="../01/wissenschaft.html" data-highlight-id="01.fassadeneu.jpg.h10" onclick="Card.loadHighlightPopup(event)" cx="490" cy="275" r="42"></circle></g>
|
||||||
|
</svg>
|
||||||
|
<div class="icon button corner-button bottom-right zoom zoomable-icon" onclick="Card.openZoomable(event)"></div>
|
||||||
|
</div>
|
||||||
|
<figcaption contenteditable="false" class="cap">Die Fassade des Rathauses</figcaption>
|
||||||
|
<figcaption contenteditable="false" class="zoomcap">Die Fassade des Rathauses, Foto: Christoph Jäckle</figcaption>
|
||||||
|
</figure>
|
||||||
|
</div></div>
|
||||||
|
<div class="column content" data-link="Popup" tabindex=""><h2 contenteditable="false">Mutige Männer, allegorische Frauen</h2> <p contenteditable="false" data-link="Popup"><a href="../01/eberhardfassade.html" data-highlight-id="01.fassadeneu.jpg.h1" onclick="Card.loadPopup(event)">Graf Eberhard im Bart</a>, der Gründer der Universität, der für seine Verdienste um die politische Einheit Württembergs in den Herzogsstand erhoben wurde, ist im obersten Geschoss abgebildet. Er wacht als echter Ritter über Stadt und Bürger, das Herzogsschwert und die Gründungsurkunde der Universität in den Händen.</p> <p contenteditable="false" data-link="Popup">Unter ihm sind in sechs Medaillons Porträts wichtiger Männer der Tübinger Stadtgeschichte zu sehen, die sich alle in besonderer Weise um bürgerliche Rechte und Freiheiten verdient gemacht hatten, wie sie bereits im <a href="../glossar/tuebingervertrag.html" data-highlight-id="" onclick="Card.loadPopup(event)">Tübinger Vertrag</a> von 1514 festgelegt wurden. Es handelt sich um den Vogt <a href="../01/breuning.html" data-highlight-id="01.fassadeneu.jpg.h2" onclick="Card.loadPopup(event)">Konrad Breuning</a>, den Diplomaten <a href="../01/osiander.html" data-highlight-id="01.fassadeneu.jpg.h3" onclick="Card.loadPopup(event)">Johannes Osiander</a>, den Bürgermeister <a href="../01/dann.html" data-highlight-id="01.fassadeneu.jpg.h4" onclick="Card.loadPopup(event)">Jakob Heinrich Dann</a>, den Oberamtmann <a href="../01/huber.html" data-highlight-id="01.fassadeneu.jpg.h5" onclick="Card.loadPopup(event)">Johann Ludwig Huber</a>, den Verleger <a href="../01/cotta.html" data-highlight-id="01.fassadeneu.jpg.h6" onclick="Card.loadPopup(event)">Johann Friedrich Cotta</a> und den Politiker <a href="../01/uhland.html" data-highlight-id="01.fassadeneu.jpg.h7" onclick="Card.loadPopup(event)">Ludwig Uhland</a>.</p> <p contenteditable="false" data-link="Popup">Die drei allegorischen Frauenfiguren im untersten Stock symbolisieren die <a href="../01/gerechtigkeit.html" data-highlight-id="01.fassadeneu.jpg.h8" onclick="Card.loadPopup(event)">Gerechtigkeit</a>, den <a href="../01/wohlstand.html" data-highlight-id="01.fassadeneu.jpg.h9" onclick="Card.loadPopup(event)">wirtschaftlichen Wohlstand</a> und die <a href="../01/wissenschaft.html" data-highlight-id="01.fassadeneu.jpg.h10" onclick="Card.loadPopup(event)">Wissenschaft</a>. Während die ersten beiden allgemein städtischbürgerliche Tugenden verkörpern, betont die dritte den Charakter Tübingens als Universitätsstadt.</p></div>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
46
lib/card/test/example/01/01_besonderheiten.xml
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<!-- <card type="artist"> -->
|
||||||
|
<!-- <card type="thema"> -->
|
||||||
|
<card type="details">
|
||||||
|
<!-- <card type="leben des kunstwerks"> -->
|
||||||
|
<!-- <card type="komposition"> -->
|
||||||
|
<!-- <card type="licht und farbe"> -->
|
||||||
|
<!-- <card type="extra info"> -->
|
||||||
|
<h1>Fassadenmalerei</h1>
|
||||||
|
<preview>
|
||||||
|
<text>
|
||||||
|
Fassade aus <br/>Geist und Politik
|
||||||
|
</text>
|
||||||
|
</preview>
|
||||||
|
|
||||||
|
<content template="1">
|
||||||
|
<column>
|
||||||
|
<text><![CDATA[
|
||||||
|
<h2>Die drei Schichten der Fassade</h2>
|
||||||
|
<p>Unter der heutigen Bemalung der Rathausfassade (siehe Abbildung) liegen <a href="01/malschichten.xml">zwei ältere Malschichten</a>: eine einfache Ausfüllung der Fachwerkfelder und darüber eine <a href="01/grisaillemalerei.xml">Grisaillemalerei</a>. Sein heutiges Aussehen erhielt das Rathaus 1876 zum 400. Universitätsjubiläum. Nach Entwürfen des Stuttgarter Hochschulprofessors Konrad Dollinger wurde die Fassade von Ludwig Lesker mit <a href="glossar/sgraffittomalerei.xml" >Sgraffittomalerei</a> im Neorenaissance-Stil versehen. Die aufwändige Gestaltung erinnert in Farben und Ornamentik vor allem an das 16. Jahrhundert, eine Blütezeit der Stadt und der Universität.</p>
|
||||||
|
]]></text>
|
||||||
|
<space lines="1"/>
|
||||||
|
<img src="01/fassadeneu.jpg" maxHeight="270" caption="Die Fassade des Rathauses" allowZoom="true" zoomCaption="Die Fassade des Rathauses, Foto: Christoph Jäckle">
|
||||||
|
<highlight x="0.44" y="0.01" radius="0.1" href="01/eberhardfassade.xml" id="01.fassadeneu.jpg.h1"/>
|
||||||
|
<highlight x="0.03" y="0.5" radius="0.05" href="01/breuning.xml" id="01.fassadeneu.jpg.h2"/>
|
||||||
|
<highlight x="0.21" y="0.5" radius="0.05" href="01/osiander.xml" id="01.fassadeneu.jpg.h3"/>
|
||||||
|
<highlight x="0.37" y="0.5" radius="0.05" href="01/dann.xml" id="01.fassadeneu.jpg.h4"/>
|
||||||
|
<highlight x="0.535" y="0.5" radius="0.05" href="01/huber.xml" id="01.fassadeneu.jpg.h5"/>
|
||||||
|
<highlight x="0.7" y="0.5" radius="0.05" href="01/cotta.xml" id="01.fassadeneu.jpg.h6"/>
|
||||||
|
<highlight x="0.86" y="0.5" radius="0.05" href="01/uhland.xml" id="01.fassadeneu.jpg.h7"/>
|
||||||
|
<highlight x="0.107" y="0.69" radius="0.07" href="01/gerechtigkeit.xml" id="01.fassadeneu.jpg.h8"/>
|
||||||
|
<highlight x="0.285" y="0.69" radius="0.07" href="01/wohlstand.xml" id="01.fassadeneu.jpg.h9"/>
|
||||||
|
<highlight x="0.754" y="0.69" radius="0.07" href="01/wissenschaft.xml" id="01.fassadeneu.jpg.h10"/>
|
||||||
|
</img>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<text><![CDATA[
|
||||||
|
<h2>Mutige Männer, allegorische Frauen</h2>
|
||||||
|
<p><a href="01/eberhardfassade.xml" imageHighlightId="01.fassadeneu.jpg.h1">Graf Eberhard im Bart</a>, der Gründer der Universität, der für seine Verdienste um die politische Einheit Württembergs in den Herzogsstand erhoben wurde, ist im obersten Geschoss abgebildet. Er wacht als echter Ritter über Stadt und Bürger, das Herzogsschwert und die Gründungsurkunde der Universität in den Händen.</p>
|
||||||
|
<p>Unter ihm sind in sechs Medaillons Porträts wichtiger Männer der Tübinger Stadtgeschichte zu sehen, die sich alle in besonderer Weise um bürgerliche Rechte und Freiheiten verdient gemacht hatten, wie sie bereits im <a href="glossar/tuebingervertrag.xml">Tübinger Vertrag</a> von 1514 festgelegt wurden. Es handelt sich um den Vogt <a href="01/breuning.xml" imageHighlightId="01.fassadeneu.jpg.h2">Konrad Breuning</a>, den Diplomaten <a href="01/osiander.xml" imageHighlightId="01.fassadeneu.jpg.h3">Johannes Osiander</a>, den Bürgermeister <a href="01/dann.xml" imageHighlightId="01.fassadeneu.jpg.h4">Jakob Heinrich Dann</a>, den Oberamtmann <a href="01/huber.xml" imageHighlightId="01.fassadeneu.jpg.h5">Johann Ludwig Huber</a>, den Verleger <a href="01/cotta.xml" imageHighlightId="01.fassadeneu.jpg.h6">Johann Friedrich Cotta</a> und den Politiker <a href="01/uhland.xml" imageHighlightId="01.fassadeneu.jpg.h7">Ludwig Uhland</a>.</p>
|
||||||
|
<p>Die drei allegorischen Frauenfiguren im untersten Stock symbolisieren die <a href="01/gerechtigkeit.xml" imageHighlightId="01.fassadeneu.jpg.h8">Gerechtigkeit</a>, den <a href="01/wohlstand.xml" imageHighlightId="01.fassadeneu.jpg.h9">wirtschaftlichen Wohlstand</a> und die <a href="01/wissenschaft.xml" imageHighlightId="01.fassadeneu.jpg.h10">Wissenschaft</a>. Während die ersten beiden allgemein städtisch-bürgerliche Tugenden verkörpern, betont die dritte den Charakter Tübingens als Universitätsstadt.</p>
|
||||||
|
]]></text>
|
||||||
|
</column>
|
||||||
|
|
||||||
|
</content>
|
||||||
|
</card>
|
44
lib/card/test/example/01/01_besonderheiten2.html
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Article with 50% Columns</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<article>
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column content" data-link="Popup" tabindex=""><h2 contenteditable="false">Wer ist das Rebmännle am Rathaus?</h2> <p contenteditable="false" data-link="Popup">Die kleine Skulptur „Rebmännle“, die um 1600 an der <a href="../01/rebmaennle.html" data-highlight-id="" onclick="Card.loadPopup(event)">Südostecke des Rathauses</a> angebracht wurde, stellt eindeutig eine unbekleidete weibliche Figur dar (siehe Abbildung). Sie tanzt auf einer <a href="../01/weintraube.html" data-highlight-id="01.rebmaennleneu.jpg.h1" onclick="Card.loadPopup(event)">vollen Weintraube</a>, um ihren Körper ist eine <a href="../01/girlandeausweinblaettern.html" data-highlight-id="01.rebmaennleneu.jpg.h2" onclick="Card.loadPopup(event)">Girlande aus Weinblättern</a> geschlungen und ihr nach hinten geworfener <a href="../01/umhang.html" data-highlight-id="01.rebmaennleneu.jpg.h4" onclick="Card.loadPopup(event)">Umhang</a> erinnert an ein Weinblatt. Es handelt sich um eine Frau aus dem Gefolge des Weingottes <a href="../glossar/bacchus.html" data-highlight-id="" onclick="Card.loadPopup(event)">Bacchus</a>, eine sogenannte Bacchantin. Die Platzierung an der prominenten Stelle soll die Bedeutung des Weinbaus für Tübingen symbolisieren.</p> <div style="height: undefinedpx"> </div><h2 contenteditable="false">Nackte Frau im öffentlichen Raum</h2> <p contenteditable="false" data-link="Popup">Um 1600 konnte nur eine Figur aus der antiken Mythologie nackt im öffentlichen Raum aufgestellt werden, ohne Scham und Anstand zu verletzen. Zudem bot das Personal der antiken Götterwelt den Künstlern der frühen Neuzeit zum ersten Mal die Möglichkeit, nackte Figuren zu repräsentieren. Das Aussehen des „Rebmännles“ mit den stämmigen Beinen, dem üppigen Bauch und dem lachenden Gesicht entspricht der Vorstellung von <a href="../01/schoenheitsideal.html" data-highlight-id="" onclick="Card.loadPopup(event)">weiblicher Schönheit</a> zwischen Renaissance und Frühbarock.</p></div>
|
||||||
|
<div class="column content" data-link="Popup" tabindex=""><div class="zoomable-wrapper column" ondragstart="Card.dragStart(event)">
|
||||||
|
<figure style="display: block;" class="zoomable singlefig" id="zoomable1">
|
||||||
|
<div style="position:relative;" class="svg-wrapper">
|
||||||
|
<svg draggable="false" class="mainimg" onclick="Card.openPopupOrZoomable(event)" viewBox="0 0 467 875" width="467" height="875" contenteditable="false">
|
||||||
|
<!-- The defs section must be defined and cannot be generated in JavaScript-->
|
||||||
|
<defs></defs>
|
||||||
|
<image width="467" height="875" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../01/rebmaennleneu.jpg"></image>
|
||||||
|
<g stroke-width="3"><circle xlink:href="../01/weintraube.html" data-highlight-id="01.rebmaennleneu.jpg.h1" onclick="Card.loadHighlightPopup(event)" cx="228" cy="767" r="93"></circle>
|
||||||
|
<circle xlink:href="../01/umhang.html" data-highlight-id="01.rebmaennleneu.jpg.h4" onclick="Card.loadHighlightPopup(event)" cx="182" cy="68" r="42"></circle>
|
||||||
|
<circle xlink:href="../01/girlandeausweinblaettern.html" data-highlight-id="01.rebmaennleneu.jpg.h2" onclick="Card.loadHighlightPopup(event)" cx="243" cy="406" r="56"></circle></g>
|
||||||
|
</svg>
|
||||||
|
<div class="icon button corner-button bottom-right zoom zoomable-icon" onclick="Card.openZoomable(event)"></div>
|
||||||
|
</div>
|
||||||
|
<figcaption contenteditable="false" class="cap">Tübinger Rebmännle</figcaption>
|
||||||
|
<figcaption contenteditable="false" class="zoomcap">Tübinger Rebmännle, Foto: Rose Hajdu, Stadtarchiv Tübingen</figcaption>
|
||||||
|
</figure>
|
||||||
|
</div></div>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
42
lib/card/test/example/01/01_besonderheiten2.xml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<!-- <card type="artist"> -->
|
||||||
|
<!-- <card type="thema"> -->
|
||||||
|
<card type="details">
|
||||||
|
<!-- <card type="leben des kunstwerks"> -->
|
||||||
|
<!-- <card type="komposition"> -->
|
||||||
|
<!-- <card type="licht und farbe"> -->
|
||||||
|
<!-- <card type="extra info"> -->
|
||||||
|
<h1>Tübinger Rebmännle</h1>
|
||||||
|
<preview>
|
||||||
|
<text>
|
||||||
|
Eine unbekleidete Frau?
|
||||||
|
</text>
|
||||||
|
</preview>
|
||||||
|
<content template="1">
|
||||||
|
<column>
|
||||||
|
<text><![CDATA[
|
||||||
|
<h2>Wer ist das Rebmännle am Rathaus?</h2>
|
||||||
|
<p>Die kleine Skulptur „Rebmännle“, die um 1600 an der <a href="01/rebmaennle.xml" >Südostecke des Rathauses</a> angebracht wurde, stellt eindeutig eine unbekleidete weibliche Figur dar (siehe Abbildung). Sie tanzt auf einer <a href="01/weintraube.xml" imageHighlightId="01.rebmaennleneu.jpg.h1">vollen Weintraube</a>, um ihren Körper ist eine <a href="01/girlandeausweinblaettern.xml" imageHighlightId="01.rebmaennleneu.jpg.h2">Girlande aus Weinblättern</a> geschlungen und ihr nach hinten geworfener <a href="01/umhang.xml" imageHighlightId="01.rebmaennleneu.jpg.h4">Umhang</a> erinnert an ein Weinblatt. Es handelt sich um eine Frau aus dem Gefolge des Weingottes <a href="glossar/bacchus.xml">Bacchus</a>, eine sogenannte Bacchantin. Die Platzierung an der prominenten Stelle soll die Bedeutung des Weinbaus für Tübingen symbolisieren.</p>
|
||||||
|
]]></text>
|
||||||
|
<space lines="2"/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<h2>Nackte Frau im öffentlichen Raum</h2>
|
||||||
|
<p>Um 1600 konnte nur eine Figur aus der antiken Mythologie nackt im öffentlichen Raum aufgestellt werden, ohne Scham und Anstand zu verletzen. Zudem bot das Personal der antiken Götterwelt den Künstlern der frühen Neuzeit zum ersten Mal die Möglichkeit, nackte Figuren zu repräsentieren. Das Aussehen des „Rebmännles“ mit den stämmigen Beinen, dem üppigen Bauch und dem lachenden Gesicht entspricht der Vorstellung von <a href="01/schoenheitsideal.xml" >weiblicher Schönheit</a> zwischen Renaissance und Frühbarock.</p>
|
||||||
|
]]></text>
|
||||||
|
<!-- <text><![CDATA[
|
||||||
|
<h2>Symbol des Tübinger Weinbaus</h2>
|
||||||
|
<p>Die Platzierung an der prominenten Stelle soll die Bedeutung des Weinbaus für Tübingen symbolisieren. Um 1600 konnte eigentlich nur eine Figur aus der antiken Mythologie nackt im öffentlichen Raum aufgestellt werden, ohne Scham und Anstand zu ver-letzen. Zudem bot das Personal der antiken Götter-welt den Künstlern der frühen Neuzeit auch neue Möglichkeiten künstlerischen Ausdrucks, wie sie bei den Heiligenfiguren des Mittelalters kaum möglich gewesen waren: An der Bacchantin fallen die stäm-migen Beine, der üppige Bauch und das lachende Gesicht als besonders <a href="01/lebensnahundrealistisch.xml" >lebensnah und realistisch</a> auf.</p>
|
||||||
|
]]></text> -->
|
||||||
|
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
|
||||||
|
<img src="01/rebmaennleneu.jpg" maxHeight="700" caption="Tübinger Rebmännle" allowZoom="true" zoomCaption="Tübinger Rebmännle, Foto: Rose Hajdu, Stadtarchiv Tübingen">
|
||||||
|
<highlight x="0.29" y="0.77" radius="0.2" href="01/weintraube.xml" id="01.rebmaennleneu.jpg.h1"/>
|
||||||
|
<highlight x="0.3" y="0.03" radius="0.09" href="01/umhang.xml" id="01.rebmaennleneu.jpg.h4"/>
|
||||||
|
<!-- <highlight x="0.39" y="0.12" radius="0.12" href="01/gesicht.xml" id="01.rebmaennle2.jpg.h3"/> -->
|
||||||
|
<highlight x="0.4" y="0.4" radius="0.12" href="01/girlandeausweinblaettern.xml" id="01.rebmaennleneu.jpg.h2"/>
|
||||||
|
</img>
|
||||||
|
</column>
|
||||||
|
</content>
|
||||||
|
</card>
|
47
lib/card/test/example/01/01_besonderheiten3.html
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Article with 50% Columns</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<article>
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column content" data-link="Popup" tabindex=""><h2 contenteditable="false">500 Jahre schwäbische Qualitätsarbeit</h2> <p contenteditable="false" data-link="Popup">Die <a href="../01/astronomischeuhr.html" data-highlight-id="" onclick="Card.loadPopup(event)">Astronomische Uhr</a> im <a href="../01/ziergiebel2.html" data-highlight-id="" onclick="Card.loadPopup(event)">Ziergiebel</a> des Rathauses ist ein Meisterwerk der Technik (siehe Abbildung). Sie wurde 1511 mit großer Wahrscheinlichkeit von <a href="../glossar/stoefflerjohannes.html" data-highlight-id="" onclick="Card.loadPopup(event)">Johannes Stöffler</a> entworfen und wohl von einem ortsansässigen Schmid gebaut. Sie gehört zu einem Ensemble von fünf Uhren im und am Rathaus, von denen vier die Zeit anzeigen. Sie ist nicht nur die älteste Uhr weltweit, die Sonnen- und Mondfinsternisse mit einem Drachenzeiger anzeigen kann, sondern läuft auch heute noch so präzise, dass sie nur alle zwanzig Jahre neu justiert werden muss.</p><div class="zoomable-wrapper column" ondragstart="Card.dragStart(event)">
|
||||||
|
<figure style="display: block;" class="zoomable singlefig" id="zoomable1">
|
||||||
|
<div style="position:relative;" class="svg-wrapper">
|
||||||
|
<svg draggable="false" class="mainimg" onclick="Card.openPopupOrZoomable(event)" viewBox="0 0 496 500" width="496" height="500" contenteditable="false">
|
||||||
|
<!-- The defs section must be defined and cannot be generated in JavaScript-->
|
||||||
|
<defs></defs>
|
||||||
|
<image width="496" height="500" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../01/astronomischeuhrneu.jpg"></image>
|
||||||
|
<g stroke-width="3"><circle xlink:href="../01/mondphasen.html" data-highlight-id="01.astronomischeuhrneu.jpg.h1" onclick="Card.loadHighlightPopup(event)" cx="248" cy="94" r="60"></circle>
|
||||||
|
<circle xlink:href="../01/tierkreis.html" data-highlight-id="01.astronomischeuhrneu.jpg.h2" onclick="Card.loadHighlightPopup(event)" cx="129" cy="290" r="35"></circle>
|
||||||
|
<circle xlink:href="../01/sonnenzeiger.html" data-highlight-id="01.astronomischeuhrneu.jpg.h3" onclick="Card.loadHighlightPopup(event)" cx="323" cy="335" r="30"></circle>
|
||||||
|
<circle xlink:href="../01/mondzeiger.html" data-highlight-id="01.astronomischeuhrneu.jpg.h4" onclick="Card.loadHighlightPopup(event)" cx="214" cy="240" r="30"></circle>
|
||||||
|
<circle xlink:href="../01/drachenzeiger.html" data-highlight-id="01.astronomischeuhrneu.jpg.h5" onclick="Card.loadHighlightPopup(event)" cx="293" cy="265" r="30"></circle></g>
|
||||||
|
</svg>
|
||||||
|
<div class="icon button corner-button bottom-right zoom zoomable-icon" onclick="Card.openZoomable(event)"></div>
|
||||||
|
</div>
|
||||||
|
<figcaption contenteditable="false" class="cap">Die Astronomische Uhr</figcaption>
|
||||||
|
<figcaption contenteditable="false" class="zoomcap">Die Astronomische Uhr im Ziergiebel des Rathauses, Foto: Christoph Jäckle</figcaption>
|
||||||
|
</figure>
|
||||||
|
</div></div>
|
||||||
|
<div class="column content" data-link="Popup" tabindex=""><h2 contenteditable="false">Was zeigt die Uhr an?</h2> <p contenteditable="false" data-link="Popup">Die Astronomische Uhr besteht aus
|
||||||
|
einer <a href="../01/mondphasen.html" data-highlight-id="01.astronomischeuhrneu.jpg.h1" onclick="Card.loadPopup(event)">Mondphasenanzeige</a> und einem <a href="../01/astronomischeszifferblatt.html" data-highlight-id="" onclick="Card.loadPopup(event)">astronomischen Zifferblatt</a> mit einem <a href="../01/tierkreis.html" data-highlight-id="01.astronomischeuhrneu.jpg.h2" onclick="Card.loadPopup(event)">Tierkreis</a>. Die Uhr besitzt drei Zeiger. Der <a href="../01/sonnenzeiger.html" data-highlight-id="01.astronomischeuhrneu.jpg.h3" onclick="Card.loadPopup(event)">Sonnenzeiger</a> bewegt sich ein „knappes“ Grad pro Tag, da 360 Grad in 365 Tagen durchlaufen werden. Er zeigt das aktuelle Tierkreiszeichen an. Der <a href="../01/mondzeiger.html" data-highlight-id="01.astronomischeuhrneu.jpg.h4" onclick="Card.loadPopup(event)">Mondzeiger</a> zeigt die scheinbare Position des Mondes zur Position der Sonne an. Er benötigt für einen vollen Umlauf 27 Tage, 7 Stunden, 43 Minuten (Siderischer Mondmonat). Da aber in dieser Zeit auch der Sonnenzeiger weitergelaufen ist, benötigt der Mondzeiger noch etwas länger um erneut über das Sonnen- bzw. -Sternsymbol des Sonnenzeigers zu laufen. Daraus resultiert eine Zeitspanne von 29 Tagen, 12 Stunden und 44 Minuten, welche dann dem synodischen Mondmonat von Vollmond zu Vollmond entspricht. Am langsamsten ist der <a href="../01/drachenzeiger.html" data-highlight-id="01.astronomischeuhrneu.jpg.h5" onclick="Card.loadPopup(event)">Drachenzeiger</a>, der in 18 Jahren und 224 Tagen einmal gegen den Uhrzeigersinn läuft. Kommen nun Sonnen-, Mond- und Drachenzeiger zur Deckung, so findet irgendwo auf der Erde eine Mond- oder Sonnenfinsternis statt. Im Durchschnitt wiederholt sich dieses Ereignis etwa viermal im Jahr.</p> <p contenteditable="false" data-link="Popup">Die Uhr war mehr als nur ein raffiniertes technisches Spielzeug: Sie steht auch für einen selbstbewussten Umgang naturwissenschaftlichen Fragen zu einer Zeit in der sich langsam die Astronomie als Wissenschaft von der mythologischen Astrologie trennte.</p></div>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
43
lib/card/test/example/01/01_besonderheiten3.xml
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<!-- <card type="artist"> -->
|
||||||
|
<!-- <card type="thema"> -->
|
||||||
|
<card type="details">
|
||||||
|
<!-- <card type="leben des kunstwerks"> -->
|
||||||
|
<!-- <card type="komposition"> -->
|
||||||
|
<!-- <card type="licht und farbe"> -->
|
||||||
|
<!-- <card type="extra info"> -->
|
||||||
|
<h1>Die Astronomische Uhr</h1>
|
||||||
|
<preview>
|
||||||
|
<text>
|
||||||
|
Revolutionäres <br/>Meisterwerk der Technik
|
||||||
|
</text>
|
||||||
|
</preview>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<content template="1">
|
||||||
|
<column>
|
||||||
|
<text><![CDATA[
|
||||||
|
<h2>500 Jahre schwäbische Qualitätsarbeit </h2>
|
||||||
|
<p>Die <a href="01/astronomischeuhr.xml" >Astronomische Uhr</a> im <a href="01/ziergiebel2.xml">Ziergiebel</a> des Rathauses ist ein Meisterwerk der Technik (siehe Abbildung). Sie wurde 1511 mit großer Wahrscheinlichkeit von <a href="glossar/stoefflerjohannes.xml">Johannes Stöffler</a> entworfen und wohl von einem ortsansässigen Schmid gebaut. Sie gehört zu einem Ensemble von fünf Uhren im und am Rathaus, von denen vier die Zeit anzeigen. Sie ist nicht nur die älteste Uhr weltweit, die Sonnen- und Mondfinsternisse mit einem Drachenzeiger anzeigen kann, sondern läuft auch heute noch so präzise, dass sie nur alle zwanzig Jahre neu justiert werden muss.</p>
|
||||||
|
]]></text>
|
||||||
|
|
||||||
|
<img src="01/astronomischeuhrneu.jpg" maxHeight="400" caption="Die Astronomische Uhr" allowZoom="true" zoomCaption="Die Astronomische Uhr im Ziergiebel des Rathauses, Foto: Christoph Jäckle">
|
||||||
|
<highlight x="0.38" y="0.068" radius="0.12" href="01/mondphasen.xml" id="01.astronomischeuhrneu.jpg.h1"/>
|
||||||
|
<highlight x="0.19" y="0.51" radius="0.07" href="01/tierkreis.xml" id="01.astronomischeuhrneu.jpg.h2"/>
|
||||||
|
<highlight x="0.59" y="0.61" radius="0.06" href="01/sonnenzeiger.xml" id="01.astronomischeuhrneu.jpg.h3"/>
|
||||||
|
<highlight x="0.37" y="0.42" radius="0.06" href="01/mondzeiger.xml" id="01.astronomischeuhrneu.jpg.h4"/>
|
||||||
|
<highlight x="0.53" y="0.47" radius="0.06" href="01/drachenzeiger.xml" id="01.astronomischeuhrneu.jpg.h5"/>
|
||||||
|
</img>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<text><![CDATA[
|
||||||
|
<h2>Was zeigt die Uhr an?</h2>
|
||||||
|
<p>Die Astronomische Uhr besteht aus
|
||||||
|
einer <a href="01/mondphasen.xml" imageHighlightId="01.astronomischeuhrneu.jpg.h1">Mondphasenanzeige</a> und einem <a href="01/astronomischeszifferblatt.xml">astronomischen Zifferblatt</a> mit einem <a href="01/tierkreis.xml" imageHighlightId="01.astronomischeuhrneu.jpg.h2">Tierkreis</a>. Die Uhr besitzt drei Zeiger. Der <a href="01/sonnenzeiger.xml" imageHighlightId="01.astronomischeuhrneu.jpg.h3" >Sonnenzeiger</a> bewegt sich ein „knappes“ Grad pro Tag, da 360 Grad in 365 Tagen durchlaufen werden. Er zeigt das aktuelle Tierkreiszeichen an. Der <a href="01/mondzeiger.xml" imageHighlightId="01.astronomischeuhrneu.jpg.h4">Mondzeiger</a> zeigt die scheinbare Position des Mondes zur Position der Sonne an. Er benötigt für einen vollen Umlauf 27 Tage, 7 Stunden, 43 Minuten (Siderischer Mondmonat). Da aber in dieser Zeit auch der Sonnenzeiger weitergelaufen ist, benötigt der Mondzeiger noch etwas länger um erneut über das Sonnen- bzw. -Sternsymbol des Sonnenzeigers zu laufen. Daraus resultiert eine Zeitspanne von 29 Tagen, 12 Stunden und 44 Minuten, welche dann dem synodischen Mondmonat von Vollmond zu Vollmond entspricht. Am langsamsten ist der <a href="01/drachenzeiger.xml" imageHighlightId="01.astronomischeuhrneu.jpg.h5">Drachenzeiger</a>, der in 18 Jahren und 224 Tagen einmal gegen den Uhrzeigersinn läuft. Kommen nun Sonnen-, Mond- und Drachenzeiger zur Deckung, so findet irgendwo auf der Erde eine Mond- oder Sonnenfinsternis statt. Im Durchschnitt wiederholt sich dieses Ereignis etwa viermal im Jahr.</p>
|
||||||
|
<p>Die Uhr war mehr als nur ein raffiniertes technisches Spielzeug: Sie steht auch für einen selbstbewussten Umgang naturwissenschaftlichen Fragen zu einer Zeit in der sich langsam die Astronomie als Wissenschaft von der mythologischen Astrologie trennte.</p>
|
||||||
|
]]></text>
|
||||||
|
|
||||||
|
</column>
|
||||||
|
</content>
|
||||||
|
</card>
|
42
lib/card/test/example/01/01_funktiondamals.html
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Article with 50% Columns</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<article>
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column content" data-link="Popup" tabindex=""><h2 contenteditable="false">Erdgeschoss: Handel und Lager</h2> <p contenteditable="false" data-link="Popup">Das Rathaus war vom Marktplatz und von der Haaggasse aus zugänglich. Im Erdgeschoss befanden sich drei etwa gleich große Hallen. Im linken Bereich waren die Metzger untergebracht, die dort ihre Fleischbänke unterhielten. Im mittleren Raum verkauften Bäcker ihre Waren. Rechts erkennt man einen Torbogen für eine Durchfahrt in die Rathausgasse. 1543 wurde ein Salzhaus angebaut, unter dem ein geräumiger Keller zusätzlich Lagerplatz für Wein bot, der vom <a href="../01/spital.html" data-highlight-id="" onclick="Card.loadPopup(event)">Spital</a> hier eingelagert wurde.</p><h2 contenteditable="false">1. Geschoss: Ein Saal für Gerber und Bürgerschaft</h2> <p contenteditable="false" data-link="Popup">Im ersten Geschoss nutzten die Gerber den Saal, in dem heute der Gemeinderat tagt, zum Verkauf von Leder. Die <a href="../01/lederbuehne.html" data-highlight-id="" onclick="Card.loadPopup(event)">„Lederbühne“</a> diente gleichzeitig der Tübinger Bürgerschaft als Festsaal.</p><h2 contenteditable="false">2. Geschoss: Gericht und Rat der Stadt</h2> <p contenteditable="false" data-link="Popup">Stadtgericht und Rat tagten im zweiten Geschoss. Im ehemaligen Sitzungssaal, der heute als Trauzimmer genutzt wird, ist noch die bemalte <a href="../01/holzvertaefelung.html" data-highlight-id="" onclick="Card.loadPopup(event)">Holzvertäfelung</a> erhalten. Der repräsentative Empfangsraum, der sogenannte <a href="../01/oehrn.html" data-highlight-id="" onclick="Card.loadPopup(event)">Öhrn</a>, wurde 1596 von <a href="../glossar/zueberlinjakob.html" data-highlight-id="" onclick="Card.loadPopup(event)">Jakob Züberlin</a> mit <a href="../01/grisaillemalerei.html" data-highlight-id="" onclick="Card.loadPopup(event)">Grisaillemalereien</a> nach Vorlagen von Tobias Stimmer ausgestattet (siehe Abbildung). Die <a href="../01/motive.html" data-highlight-id="" onclick="Card.loadPopup(event)">Motive</a> haben alle mit Recht und Gerechtigkeit zu tun.</p></div>
|
||||||
|
<div class="column content" data-link="Popup" tabindex=""><h2 contenteditable="false">3. Geschoss: Hofgericht des Landes</h2> <p contenteditable="false" data-link="Popup">Im dritten Geschoss des Rathauses, das 1495 aufgestockt worden war, fanden von 1514 bis 1806 die Sitzungen des Hofgerichts in dem sogenannten <a href="../01/hofgerichtssaal.html" data-highlight-id="" onclick="Card.loadPopup(event)">Hofgerichtssaal</a> statt. Das Hofgericht war im Mittelalter und in der Frühen Neuzeit das höchste Gericht des Landes Württemberg. Es tagte immer dort, wo sich der Graf oder Herzog gerade aufhielt, wo er „Hof hielt“. Im Zuge des <a href="../glossar/tuebingervertrag.html" data-highlight-id="" onclick="Card.loadPopup(event)">Tübinger Vertrags</a> von 1514 wurde das württembergische Hofgericht nach Tübingen verlegt.</p> <div style="height: undefinedpx"> </div><div class="zoomable-wrapper column" ondragstart="Card.dragStart(event)">
|
||||||
|
<figure style="display: block;" class="zoomable singlefig" id="zoomable1">
|
||||||
|
<div style="position:relative;" class="svg-wrapper">
|
||||||
|
<svg draggable="false" class="mainimg" onclick="Card.openPopupOrZoomable(event)" viewBox="0 0 584 537.5" width="584" height="537.5" contenteditable="false">
|
||||||
|
<!-- The defs section must be defined and cannot be generated in JavaScript-->
|
||||||
|
<defs></defs>
|
||||||
|
<image width="584" height="537.5" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../01/oehrn2.jpg"></image>
|
||||||
|
<g stroke-width="3"></g>
|
||||||
|
</svg>
|
||||||
|
<div class="icon button corner-button bottom-right zoom zoomable-icon" onclick="Card.openZoomable(event)"></div>
|
||||||
|
</div>
|
||||||
|
<figcaption contenteditable="false" class="cap">Der Öhrn mit Grisaillemalereien</figcaption>
|
||||||
|
<figcaption contenteditable="false" class="zoomcap">Der Öhrn im Rathaus, Basketballer aus Aix-en-Provence, Foto: Alfred Göhner, 1966, Stadtarchiv Tübingen</figcaption>
|
||||||
|
</figure>
|
||||||
|
</div></div>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
41
lib/card/test/example/01/01_funktiondamals.xml
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<!-- <card type="artist"> -->
|
||||||
|
<card type="thema">
|
||||||
|
<!-- <card type="details"> -->
|
||||||
|
<!-- <card type="leben des kunstwerks"> -->
|
||||||
|
<!-- <card type="komposition"> -->
|
||||||
|
<!-- <card type="licht und farbe"> -->
|
||||||
|
<!-- <card type="extra info"> -->
|
||||||
|
<h1>Alles unter einem Dach</h1>
|
||||||
|
<preview>
|
||||||
|
<text>
|
||||||
|
Räte, Richter, Händler <br/> und Halunken
|
||||||
|
</text>
|
||||||
|
</preview>
|
||||||
|
|
||||||
|
<content template="1">
|
||||||
|
<column>
|
||||||
|
<text><![CDATA[
|
||||||
|
<h2>Erdgeschoss: Handel und Lager</h2>
|
||||||
|
<p>Das Rathaus war vom Marktplatz und von der Haaggasse aus zugänglich. Im Erdgeschoss befanden sich drei etwa gleich große Hallen. Im linken Bereich waren die Metzger untergebracht, die dort ihre Fleischbänke unterhielten. Im mittleren Raum verkauften Bäcker ihre Waren. Rechts erkennt man einen Torbogen für eine Durchfahrt in die Rathausgasse. 1543 wurde ein Salzhaus angebaut, unter dem ein geräumiger Keller zusätzlich Lagerplatz für Wein bot, der vom <a href="01/spital.xml">Spital</a> hier eingelagert wurde.</p>
|
||||||
|
]]></text>
|
||||||
|
<text><![CDATA[
|
||||||
|
<h2>1. Geschoss: Ein Saal für Gerber und Bürgerschaft</h2>
|
||||||
|
<p>Im ersten Geschoss nutzten die Gerber den Saal, in dem heute der Gemeinderat tagt, zum Verkauf von Leder. Die <a href="01/lederbuehne.xml">„Lederbühne“</a> diente gleichzeitig der Tübinger Bürgerschaft als Festsaal.</p>
|
||||||
|
]]></text>
|
||||||
|
<text><![CDATA[
|
||||||
|
<h2>2. Geschoss: Gericht und Rat der Stadt</h2>
|
||||||
|
<p>Stadtgericht und Rat tagten im zweiten Geschoss. Im ehemaligen Sitzungssaal, der heute als Trauzimmer genutzt wird, ist noch die bemalte <a href="01/holzvertaefelung.xml">Holzvertäfelung</a> erhalten. Der repräsentative Empfangsraum, der sogenannte <a href="01/oehrn.xml">Öhrn</a>, wurde 1596 von <a href="glossar/zueberlinjakob.xml" >Jakob Züberlin</a> mit <a href="01/grisaillemalerei.xml">Grisaillemalereien</a> nach Vorlagen von Tobias Stimmer ausgestattet (siehe Abbildung). Die <a href="01/motive.xml" >Motive</a> haben alle mit Recht und Gerechtigkeit zu tun. </p>
|
||||||
|
]]></text>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<text><![CDATA[
|
||||||
|
<h2>3. Geschoss: Hofgericht des Landes</h2>
|
||||||
|
<p>Im dritten Geschoss des Rathauses, das 1495 aufgestockt worden war, fanden von 1514 bis 1806 die Sitzungen des Hofgerichts in dem sogenannten <a href="01/hofgerichtssaal.xml" >Hofgerichtssaal</a> statt. Das Hofgericht war im Mittelalter und in der Frühen Neuzeit das höchste Gericht des Landes Württemberg. Es tagte immer dort, wo sich der Graf oder Herzog gera-de aufhielt, wo er „Hof hielt“. Im Zuge des <a href="glossar/tuebingervertrag.xml">Tübinger Vertrags</a> von 1514 wurde das württembergische Hofgericht nach Tübingen verlegt.</p>
|
||||||
|
]]></text>
|
||||||
|
<space lines="1"/>
|
||||||
|
<img src="01/oehrn2.jpg" maxHeight="430" caption="Der Öhrn mit Grisaillemalereien" allowZoom="true" zoomCaption="Der Öhrn im Rathaus, Basketballer aus Aix-en-Provence, Foto: Alfred Göhner, 1966, Stadtarchiv Tübingen"/>
|
||||||
|
|
||||||
|
</column>
|
||||||
|
</content>
|
||||||
|
</card>
|
42
lib/card/test/example/01/01_funktionheute.html
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Article with 50% Columns</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<article>
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column content" data-link="Popup" tabindex=""><h2 contenteditable="false">Zentrum der Stadtpolitik</h2> <p contenteditable="false" data-link="Popup">Das Rathaus ist noch heute das Zentrum für Stadtpolitik und -verwaltung. Im Ratssaal im ersten Obergeschoss tagt der Gemeinderat (siehe Abbildung). In der ehemaligen Großen Gerichtsstube im zweiten Obergeschoss befindet sich das Trauzimmer, das Amtszimmer des Oberbürgermeisters in der ehemaligen Kleinen Gerichtsstube. Sie wurde 1760 neu ausgebaut und mit Rokokodekor versehen. Außer einem weiteren Besprechungsraum im ehemaligen Hofgerichtssaal im dritten Obergeschoss, sind unter anderem Büros der städtischen Verwaltung untergebracht.</p> <div style="height: undefinedpx"> </div><h2 contenteditable="false">Wohin mit der Stadtarchiv?</h2> <p contenteditable="false" data-link="Popup">Das Stadtarchiv war auch bis 2012 im Dachgeschoss und im Rathausanbau untergebracht. Seine umfangreichen Bestände an historischen Dokumenten belasteten nicht nur die Fachwerkkonstruktion des Rathauses, sondern waren auch in Gefahr, bei einem Brand vernichtet zu werden. Während der Restaurierungsmaßnahmen 2012 bis 2016 zog das Archiv in das hinter dem Rathaus stehenden Breuninghaus um. Langfristig ist ein Umzug auf das Gelände des ehemaligen Güterbahnhofs geplant.</p></div>
|
||||||
|
<div class="column content" data-link="Popup" tabindex=""><h2 contenteditable="false">Restaurierung 2012-2016</h2> <p contenteditable="false" data-link="Popup">Auslöser für die letzte Restaurierung waren, neben veralteter Haustechnik, Brandschutz und unzeitgemäßen Büro- und Besprechungsräumen, vor allem statische Probleme.</p> <p contenteditable="false" data-link="Popup">Bei der Sanierung kamen sensationelle Entdeckungen im Eingangsbereich zu Tage: Eine einheitliche Halle im Erdgeschoss gab es nie. Stattdessen befanden sich dort drei kleine Hallen zum Verkauf von Brot, Salz und Fleisch. An der Stütze neben dem Eingang zum Treppenhaus ist noch der Ansatz eines Brustriegels sichtbar, der die Halle abgeteilt hat. In der nördlichen Halle fand man an den Deckenbalken noch <a href="../01/baeckerzeichenneu.html" data-highlight-id="" onclick="Card.loadPopup(event)">Zeichen der Bäcker</a>. Die nördliche, bräunlich verputzte Außenwand ist das älteste Bauteil des Rathauses.</p><div class="zoomable-wrapper column" ondragstart="Card.dragStart(event)">
|
||||||
|
<figure style="display: block;" class="zoomable singlefig" id="zoomable1">
|
||||||
|
<div style="position:relative;" class="svg-wrapper">
|
||||||
|
<svg draggable="false" class="mainimg" onclick="Card.openPopupOrZoomable(event)" viewBox="0 0 581 387.5" width="581" height="387.5" contenteditable="false">
|
||||||
|
<!-- The defs section must be defined and cannot be generated in JavaScript-->
|
||||||
|
<defs></defs>
|
||||||
|
<image width="581" height="387.5" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../01/ratssaalneu.jpg"></image>
|
||||||
|
<g stroke-width="3"></g>
|
||||||
|
</svg>
|
||||||
|
<div class="icon button corner-button bottom-right zoom zoomable-icon" onclick="Card.openZoomable(event)"></div>
|
||||||
|
</div>
|
||||||
|
<figcaption contenteditable="false" class="cap">Ratssaal im ersten Obergeschoss</figcaption>
|
||||||
|
<figcaption contenteditable="false" class="zoomcap">Ratssaal nach der Sanierung des Rathauses, Foto: Universitätsstadt Tübingen</figcaption>
|
||||||
|
</figure>
|
||||||
|
</div></div>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
42
lib/card/test/example/01/01_funktionheute.xml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<!-- <card type="artist"> -->
|
||||||
|
<card type="thema">
|
||||||
|
<!-- <card type="details"> -->
|
||||||
|
<!-- <card type="leben des kunstwerks"> -->
|
||||||
|
<!-- <card type="komposition"> -->
|
||||||
|
<!-- <card type="licht und farbe"> -->
|
||||||
|
<!-- <card type="extra info"> -->
|
||||||
|
<h1>Im Wandel der Zeit</h1>
|
||||||
|
<preview>
|
||||||
|
<text>
|
||||||
|
Was ist geblieben – <br/>was hat sich verändert?
|
||||||
|
</text>
|
||||||
|
</preview>
|
||||||
|
|
||||||
|
<content template="1">
|
||||||
|
<column>
|
||||||
|
<text><![CDATA[
|
||||||
|
<h2>Zentrum der Stadtpolitik</h2>
|
||||||
|
<p>Das Rathaus ist noch heute das Zentrum für Stadtpolitik und -verwaltung. Im Ratssaal im ersten Obergeschoss tagt der Gemeinderat (siehe Abbildung). In der ehemaligen Großen Gerichtsstube im zweiten Obergeschoss befindet sich das Trauzimmer, das Amtszimmer des Oberbürgermeisters in der ehemaligen Kleinen Gerichtsstube. Sie wurde 1760 neu ausgebaut und mit Rokokodekor versehen. Außer einem weiteren Besprechungsraum im ehemaligen Hofgerichtssaal im dritten Obergeschoss, sind unter anderem Büros der städtischen Verwaltung untergebracht.</p>
|
||||||
|
]]></text>
|
||||||
|
<space lines="2"/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<h2>Wohin mit der Stadtarchiv?</h2>
|
||||||
|
<p>Das Stadtarchiv war auch bis 2012 im Dachgeschoss und im Rathausanbau untergebracht. Seine umfangreichen Bestände an historischen Dokumenten belasteten nicht nur die Fachwerkkonstruktion des Rathauses, sondern waren auch in Gefahr, bei einem Brand vernichtet zu werden. Während der Restaurierungsmaßnahmen 2012 bis 2016 zog das Archiv in das hinter dem Rathaus stehenden Breuninghaus um. Langfristig ist ein Umzug auf das Gelände des ehemaligen Güterbahnhofs geplant.</p>
|
||||||
|
]]></text>
|
||||||
|
|
||||||
|
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<text><![CDATA[
|
||||||
|
<h2>Restaurierung 2012-2016</h2>
|
||||||
|
<p>Auslöser für die letzte Restaurierung waren, neben veralteter Haustechnik, Brandschutz und unzeitgemäßen Büro- und Besprechungsräumen, vor allem statische Probleme.</p>
|
||||||
|
<p>Bei der Sanierung kamen sensationelle Entdeckungen im Eingangsbereich zu Tage: Eine einheitliche Halle im Erdgeschoss gab es nie. Stattdessen befanden sich dort drei kleine Hallen zum Verkauf von Brot, Salz und Fleisch. An der Stütze neben dem Eingang zum Treppenhaus ist noch der Ansatz eines Brustriegels sichtbar, der die Halle abgeteilt hat. In der nördlichen Halle fand man an den Deckenbalken noch <a href="01/baeckerzeichenneu.xml" >Zeichen der Bäcker</a>. Die nördliche, bräunlich verputzte Außenwand ist das älteste Bauteil des Rathauses.</p>
|
||||||
|
]]></text>
|
||||||
|
<img src="01/ratssaalneu.jpg" maxHeight="310" caption="Ratssaal im ersten Obergeschoss" allowZoom="true" zoomCaption="Ratssaal nach der Sanierung des Rathauses, Foto: Universitätsstadt Tübingen"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</column>
|
||||||
|
</content>
|
||||||
|
</card>
|
22
lib/card/test/example/01/astronomischeszifferblatt.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/astronomischeszifferblattneu.jpg"><p contenteditable="false" data-link="Popup"><span>Das astronomische Zifferblatt, Foto: Christoph Jäckle</span></p><p contenteditable="false" data-link="Popup"><span>Das astronomische Zifferblatt zeigt Jahreszeiten, Tag- und Nachtlängen sowie andere astromische Ereignisse. Das originale Zifferblatt mit dem Tierkreiszeichen von 1511 war nach erheblichen Wetterschäden unbrauchbar. Deswegen wurde es beim Umsetzen der Uhr vom ersten Geschoss in den Ziergiebel im Jahr 1849 wahrscheinlich außer Betrieb genommen, aber weiterhin auf dem Dachboden des Rathauses aufbewahrt. Dieses ursprüngliche Zifferblatt (siehe Abbildung unten) befindet sich im Stadtmuseum Tübingen und kann dort in der Dauerausstellung besichtigt werden.</span></p><img contenteditable="false" src="../01/urspruenglicheszifferblattneu.jpg"><p contenteditable="false" data-link="Popup"><span>Das ursprüngliche Zifferblatt der Astronomischen Uhr, Foto: Stadtmuseum Tübingen</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
BIN
lib/card/test/example/01/astronomischeszifferblatt.jpg
Normal file
After Width: | Height: | Size: 206 KiB |
15
lib/card/test/example/01/astronomischeszifferblatt.xml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/astronomischeszifferblattneu.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Das astronomische Zifferblatt, Foto: Christoph Jäckle</span></p>
|
||||||
|
]]></text>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Das astronomische Zifferblatt zeigt Jahreszeiten, Tag- und Nachtlängen sowie andere astromische Ereignisse. Das originale Zifferblatt mit dem Tierkreiszeichen von 1511 war nach erheblichen Wetterschäden unbrauchbar. Deswegen wurde es beim Umsetzen der Uhr vom ersten Geschoss in den Ziergiebel im Jahr 1849 wahrscheinlich außer Betrieb genommen, aber weiterhin auf dem Dachboden des Rathauses aufbewahrt. Dieses ursprüngliche Zifferblatt (siehe Abbildung unten) befindet sich im Stadtmuseum Tübingen und kann dort in der Dauerausstellung besichtigt werden.</span></p>
|
||||||
|
]]></text>
|
||||||
|
<img src="01/urspruenglicheszifferblattneu.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Das ursprüngliche Zifferblatt der Astronomischen Uhr, Foto: Stadtmuseum Tübingen</span></p>
|
||||||
|
]]></text>
|
||||||
|
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/astronomischeszifferblattneu.jpg
Normal file
After Width: | Height: | Size: 196 KiB |
22
lib/card/test/example/01/astronomischeuhr.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><p contenteditable="false" data-link="Popup"><span>Eine astronomische Uhr ist eine mechanische Uhr, die astronomische Gegebenheiten anzeigt, wie die Position von Sonne und Mond im Tierkreis, die Mondphasen oder die Planetenstellungen. Astronomische Uhren wurden seit dem späten Mittelalter als monumentale Uhren an Türmen oder Rathäusern angebracht.</span></p><img contenteditable="false" src="../01/uhrfrueher.jpg"><p contenteditable="false" data-link="Popup"><span>Die Astronomische Uhr des Tübinger Rathauses, 1826, Foto: Deutsches Literatuarchiv Marbach</span></p><p contenteditable="false" data-link="Popup"><span>Die Astronomische Uhr des Tübinger Rathauses war vorher im ersten Geschoss über dem Haupteingang neben der Rathauskanzel angebracht und wurde erst 1849 in den Ziergiebel versetzt.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
15
lib/card/test/example/01/astronomischeuhr.xml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Eine astronomische Uhr ist eine mechanische Uhr, die astronomische Gegebenheiten anzeigt, wie die Position von Sonne und Mond im Tierkreis, die Mondphasen oder die Planetenstellungen. Astronomische Uhren wurden seit dem späten Mittelalter als monumentale Uhren an Türmen oder Rathäusern angebracht.</span></p>
|
||||||
|
]]></text>
|
||||||
|
<img src="01/uhrfrueher.jpg"/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Die Astronomische Uhr des Tübinger Rathauses, 1826, Foto: Deutsches Literatuarchiv Marbach</span></p>
|
||||||
|
]]></text>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Die Astronomische Uhr des Tübinger Rathauses war vorher im ersten Geschoss über dem Haupteingang neben der Rathauskanzel angebracht und wurde erst 1849 in den Ziergiebel versetzt.</span></p>
|
||||||
|
]]></text>
|
||||||
|
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/astronomischeuhr3.jpg
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
lib/card/test/example/01/astronomischeuhrneu.jpg
Normal file
After Width: | Height: | Size: 2.4 MiB |
22
lib/card/test/example/01/baeckerzeichenneu.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/baeckerzeichenneu.jpg"><p contenteditable="false" data-link="Popup"><span>Bäckerzeichen im Rathaus, Brezel mit gekreuztem Backschieber, EG, eingeritzt in einem Balken an der Decke, Foto und Bearbeitung: Tilmann Marstaller</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
BIN
lib/card/test/example/01/baeckerzeichenneu.jpg
Normal file
After Width: | Height: | Size: 226 KiB |
8
lib/card/test/example/01/baeckerzeichenneu.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/baeckerzeichenneu.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Bäckerzeichen im Rathaus, Brezel mit gekreuztem Backschieber, EG, eingeritzt in einem Balken an der Decke, Foto und Bearbeitung: Tilmann Marstaller</span></p>
|
||||||
|
]]></text>
|
||||||
|
|
||||||
|
</content>
|
22
lib/card/test/example/01/breuning.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/breuningneu.jpg"><p contenteditable="false" data-link="Popup"><span>Konrad Breuning (1440 – 1517) gehörte zu einer einflussreichen Tübinger Familie und bekleidete eine Reihe wichtiger politischer Ämter, unter anderem war er Tübinger Vogt und Mitglied des Hofgerichts. Als Kaiser Maximilian den völlig unfähigen Herzog Eberhard II. absetzte, gehörte Breuning als früherer Berater und Vertrauter von Eberhard im Bart zu dem Zwischenregiment, das solange eingerichtet wurde, bis Herzog Ulrich alt genug war, um die Regierungsgeschäfte zu übernehmen. Als Ulrich angesichts der Bauernaufstände vom „Armen Konrad“ 1514 einen Landtag in Tübingen einberief, leitete Breuning die Verhandlungen. Es gelang ihm für das Bürgertum weit reichende politische Mitspracherechte und weitere Privilegien auszuhandeln. 1517 ließ ihn Herzog Ulrich wegen vermeintlichen Hochverrats hinrichten.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
8
lib/card/test/example/01/breuning.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/breuningneu.jpg" caption=" "/>
|
||||||
|
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Konrad Breuning (1440 – 1517) gehörte zu einer einflussreichen Tübinger Familie und bekleidete eine Reihe wichtiger politischer Ämter, unter anderem war er Tübinger Vogt und Mitglied des Hofgerichts. Als Kaiser Maximilian den völlig unfähigen Herzog Eberhard II. absetzte, gehörte Breuning als früherer Berater und Vertrauter von Eberhard im Bart zu dem Zwischenregiment, das solange eingerichtet wurde, bis Herzog Ulrich alt genug war, um die Regierungsgeschäfte zu übernehmen. Als Ulrich angesichts der Bauernaufstände vom „Armen Konrad“ 1514 einen Landtag in Tübingen einberief, leitete Breuning die Verhandlungen. Es gelang ihm für das Bürgertum weit reichende politische Mitspracherechte und weitere Privilegien auszuhandeln. 1517 ließ ihn Herzog Ulrich wegen vermeintlichen Hochverrats hinrichten.</span></p>
|
||||||
|
]]></text>
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/breuningneu.jpg
Normal file
After Width: | Height: | Size: 216 KiB |
22
lib/card/test/example/01/cotta.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/cottaneu.jpg"><p contenteditable="false" data-link="Popup"><span>Johann Friedrich Cotta (1764 in Stuttgart – 1832 in Stuttgart) betrieb in Tübingen einen der größten europäischen Verlage, gründete die erste überregionale Tageszeitung in Deutschland, erfand das Taschenbuch und setzte sich für Pressefreiheit und Urheberrecht ein. Als Landtagsabgeordneter machte er sich für die Freiheiten des Tübinger Vertrags stark.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
8
lib/card/test/example/01/cotta.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/cottaneu.jpg" caption=" "/>
|
||||||
|
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Johann Friedrich Cotta (1764 in Stuttgart – 1832 in Stuttgart) betrieb in Tübingen einen der größten europäischen Verlage, gründete die erste überregionale Tageszeitung in Deutschland, erfand das Taschenbuch und setzte sich für Pressefreiheit und Urheberrecht ein. Als Landtagsabgeordneter machte er sich für die Freiheiten des Tübinger Vertrags stark.</span></p>
|
||||||
|
]]></text>
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/cottaneu.jpg
Normal file
After Width: | Height: | Size: 207 KiB |
22
lib/card/test/example/01/dann.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/dannneu.jpg"><p contenteditable="false" data-link="Popup"><span>Jakob Heinrich Dann (1720 in Tübingen – 1790 in Tübingen) setzte sich als Tübinger Bürgermeister und Landtagsabgeordneter für die im „Tübinger Vertrag“ vereinbarten Rechte gegenüber Herzog Karl Eugen ein. Als er bei seinem Versuch gegen Korruption vorzugehen keine Mehrheiten erhielt, trat er von seinen Ämtern zurück.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
9
lib/card/test/example/01/dann.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/dannneu.jpg" caption=" "/>
|
||||||
|
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Jakob Heinrich Dann (1720 in Tübingen – 1790 in Tübingen) setzte sich als Tübinger Bürgermeister und Landtagsabgeordneter für die im „Tübinger Vertrag“ vereinbarten Rechte gegenüber Herzog Karl Eugen ein. Als er bei seinem Versuch gegen Korruption vorzugehen keine Mehrheiten erhielt, trat er von seinen Ämtern zurück.</span></p>
|
||||||
|
]]></text>
|
||||||
|
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/dannneu.jpg
Normal file
After Width: | Height: | Size: 215 KiB |
BIN
lib/card/test/example/01/detailuhr.jpg
Normal file
After Width: | Height: | Size: 84 KiB |
BIN
lib/card/test/example/01/detailuhrneu.jpg
Normal file
After Width: | Height: | Size: 153 KiB |
22
lib/card/test/example/01/drachenzeiger.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/drachenzeigerneu.jpg"><p contenteditable="false" data-link="Popup"><span>Der Drachenzeiger hat die Form eines Drachens mit Flügel. Die Verwendung der Drachenform für diesen Zeiger geht auf einen alten chinesischen Glauben zurück, wonach ein Drache Sonne oder Mond bei einer Finsternis verschlingt und wieder ausspuckt.</span></p> <p contenteditable="false" data-link="Popup"><span>Je nach seiner Position im Verhältnis zum Sonnen- und Mondzeiger, zeigt der Drachenzeiger totale und partielle Sonnen- und Mondfinsternisse.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
8
lib/card/test/example/01/drachenzeiger.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/drachenzeigerneu.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Der Drachenzeiger hat die Form eines Drachens mit Flügel. Die Verwendung der Drachenform für diesen Zeiger geht auf einen alten chinesischen Glauben zurück, wonach ein Drache Sonne oder Mond bei einer Finsternis verschlingt und wieder ausspuckt.</span></p>
|
||||||
|
<p><span class="popuptext">Je nach seiner Position im Verhältnis zum Sonnen- und Mondzeiger, zeigt der Drachenzeiger totale und partielle Sonnen- und Mondfinsternisse.</span></p>
|
||||||
|
]]></text>
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/drachenzeigerneu.jpg
Normal file
After Width: | Height: | Size: 190 KiB |
22
lib/card/test/example/01/eberhardfassade.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/eberhardfassadeneu.jpg"><p contenteditable="false" data-link="Popup"><span>Ganzfigurporträt von Graf Eberhard im Bart auf der Fassade des Rathauses, Foto: Christoph Jäckle</span></p><p contenteditable="false" data-link="Popup"><span>Eberhard im Bart (1445 in Urach – 1496 in Tübingen), Graf und später Herzog von Württemberg, übernahm bereits mit 14 Jahren die Regierungsgeschäfte. Den Beinamen „im Bart“ erhielt er, weil er den Bart, der ihm auf einer Pilgerfahrt nach Jerusalem gewachsen war, nicht mehr abnahm. 1474 heiratete er die steinreiche Markgrafentochter Barbara von Mantua aus dem Hause Gonzaga, wodurch Württemberg mit einem der glanzvollsten Zentren der italienischen Renaissance in Kontakt kam. Er gründete 1477 mit Unterstützung seiner Mutter und seiner Frau die Universität Tübingen. Daneben galt als seine größte politische Leistung die Wiedervereinigung Württembergs — das Land war seit 1442 in einen Stuttgarter und einen Uracher Teil gespalten, was es gegenüber dem Kaiser und den freien Reichsstädten dauerhaft geschwächt hatte. 1495 wurde Eberhard in den Herzogsstand erhoben und verlegte die Residenz von Urach nach Stuttgart. Sein Lebensmotto „Attempto“ - „Ich wag's!“ wurde zur Devise der Tübinger Universität, seine Beliebtheit wurde vor allem im 19. Jahrhundert legendär.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
12
lib/card/test/example/01/eberhardfassade.xml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/eberhardfassadeneu.jpg" caption=" "/>
|
||||||
|
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Ganzfigurporträt von Graf Eberhard im Bart auf der Fassade des Rathauses, Foto: Christoph Jäckle</span></p>
|
||||||
|
]]></text>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Eberhard im Bart (1445 in Urach – 1496 in Tübingen), Graf und später Herzog von Württemberg, übernahm bereits mit 14 Jahren die Regierungsgeschäfte. Den Beinamen „im Bart“ erhielt er, weil er den Bart, der ihm auf einer Pilgerfahrt nach Jerusalem gewachsen war, nicht mehr abnahm. 1474 heiratete er die steinreiche Markgrafentochter Barbara von Mantua aus dem Hause Gonzaga, wodurch Württemberg mit einem der glanzvollsten Zentren der italienischen Renaissance in Kontakt kam. Er gründete 1477 mit Unterstützung seiner Mutter und seiner Frau die Universität Tübingen. Daneben galt als seine größte politische Leistung die Wiedervereinigung Württembergs — das Land war seit 1442 in einen Stuttgarter und einen Uracher Teil gespalten, was es gegenüber dem Kaiser und den freien Reichsstädten dauerhaft geschwächt hatte. 1495 wurde Eberhard in den Herzogsstand erhoben und verlegte die Residenz von Urach nach Stuttgart. Sein Lebensmotto „Attempto“ - „Ich wag's!“ wurde zur Devise der Tübinger Universität, seine Beliebtheit wurde vor allem im 19. Jahrhundert legendär.</span></p>
|
||||||
|
]]></text>
|
||||||
|
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/eberhardfassadeneu.jpg
Normal file
After Width: | Height: | Size: 361 KiB |
BIN
lib/card/test/example/01/fassadeneu.jpg
Normal file
After Width: | Height: | Size: 1003 KiB |
22
lib/card/test/example/01/gerechtigkeit.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/gerechtigkeitneu.jpg"><p contenteditable="false" data-link="Popup"><span>Unten links an der Rathausfassade sieht man Justitia, die Personifizierung der Gerechtigkeit, mit ihren Attributen Schwert und Waage.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
7
lib/card/test/example/01/gerechtigkeit.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/gerechtigkeitneu.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Unten links an der Rathausfassade sieht man Justitia, die Personifizierung der Gerechtigkeit, mit ihren Attributen Schwert und Waage.</span></p>
|
||||||
|
]]></text>
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/gerechtigkeitneu.jpg
Normal file
After Width: | Height: | Size: 384 KiB |
22
lib/card/test/example/01/girlandeausweinblaettern.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/girlandeausweinblaettern.jpg"><p contenteditable="false" data-link="Popup"><span>Eine Girlande aus Weinblättern ist um den Körper der weiblichen Figur geschlungen.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
BIN
lib/card/test/example/01/girlandeausweinblaettern.jpg
Normal file
After Width: | Height: | Size: 118 KiB |
7
lib/card/test/example/01/girlandeausweinblaettern.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/girlandeausweinblaettern.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Eine Girlande aus Weinblättern ist um den Körper der weiblichen Figur geschlungen.</span></p>
|
||||||
|
]]></text>
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/gleichnis.jpg
Normal file
After Width: | Height: | Size: 206 KiB |
22
lib/card/test/example/01/grisaillemalerei.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><p contenteditable="false" data-link="Popup"><span>Grisaillemalerei bezeichnet eine Malerei, die ausschließlich in Weiß, Schwarz und Grautönen ausgeführt ist. Der Begriff leitet sich von dem französischen „gris“ ab und bedeutet grau. Die Grisaillemalerei wurde gerne eingesetzt, um dreidimensionale, skulpturale Effekte zu schaffen.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
10
lib/card/test/example/01/grisaillemalerei.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Grisaillemalerei bezeichnet eine Malerei, die ausschließlich in Weiß, Schwarz und Grautönen ausgeführt ist. Der Begriff leitet sich von dem französischen „gris“ ab und bedeutet grau. Die Grisaillemalerei wurde gerne eingesetzt, um dreidimensionale, skulpturale Effekte zu schaffen.</span></p>
|
||||||
|
]]></text>
|
||||||
|
<!--<img src="01/grisaillemalerei.jpg" caption=" "/> -->
|
||||||
|
<!-- <text><![CDATA[
|
||||||
|
<p><span class="popuptext">Noch heute ist am Rathaus von der Haaggasse aus die Grisaillemalerei aus dem 16. und 17. Jahrhundert von Ornamenten mit Ranken, Girlanden, Vasen, Menschen, Tieren, Masken und architektonischen Formen zu sehen.</span></p>
|
||||||
|
]]></text> -->
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/grisaillemalereineu.jpg
Normal file
After Width: | Height: | Size: 140 KiB |
22
lib/card/test/example/01/grisaillemalereirathaus.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><p contenteditable="false" data-link="Popup"><span>Grisaillemalerei bezeichnet eine Malerei, die ausschließlich in Weiß, Schwarz und Grautönen ausgeführt ist. Der Begriff leitet sich ab von dem französischen „gris“ und bedeutet grau. Die Grisaillemalerei wurde gerne eingesetzt, um dreidimensionale, skulpturale Effekte zu schaffen.</span></p><img contenteditable="false" src="../01/grisaillemalereirathaus.jpg"></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
BIN
lib/card/test/example/01/grisaillemalereirathaus.jpg
Normal file
After Width: | Height: | Size: 1.4 MiB |
10
lib/card/test/example/01/grisaillemalereirathaus.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Grisaillemalerei bezeichnet eine Malerei, die ausschließlich in Weiß, Schwarz und Grautönen ausgeführt ist. Der Begriff leitet sich ab von dem französischen „gris“ und bedeutet grau. Die Grisaillemalerei wurde gerne eingesetzt, um dreidimensionale, skulpturale Effekte zu schaffen.</span></p>
|
||||||
|
]]></text>
|
||||||
|
<img src="01/grisaillemalereirathaus.jpg" caption=" "/>
|
||||||
|
<!-- <text><![CDATA[
|
||||||
|
<p><span class="popuptext">Rathaus, Diaserie von Peter Neumann für eine geplante Neuauflage des Rathausführers.Aufnahmen aus dem Jahr 2001.Stadtarchiv Tübingen, D 150/363-140/18</span></p>
|
||||||
|
]]></text>-->
|
||||||
|
</content>
|
22
lib/card/test/example/01/hofgerichtssaal.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/hofgerichtssaal.jpg"><p contenteditable="false" data-link="Popup"><span>Hofgerichtssaal des Rathauses nach der Sanierung 2016, Stadtarchiv Tübingen</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
BIN
lib/card/test/example/01/hofgerichtssaal.jpg
Normal file
After Width: | Height: | Size: 111 KiB |
8
lib/card/test/example/01/hofgerichtssaal.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/hofgerichtssaal.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Hofgerichtssaal des Rathauses nach der Sanierung 2016, Stadtarchiv Tübingen</span></p>
|
||||||
|
]]></text>
|
||||||
|
|
||||||
|
</content>
|
22
lib/card/test/example/01/holzvertaefelung.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/trauzimmer.jpg"><p contenteditable="false" data-link="Popup"><span>Die bemalte Holzvertäfelung im Trauzimmer, Foto: Christoph Jäckle</span></p><p contenteditable="false" data-link="Popup"><span>Eine Holzvertäfelung ist eine hölzerne Wand- oder Deckenverkleidung von Innenräumen zum Schmuck, zur Wärmedämmung oder zum Schutz von darunterliegenden Schichten.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
13
lib/card/test/example/01/holzvertaefelung.xml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/trauzimmer.jpg" caption=" "/>
|
||||||
|
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Die bemalte Holzvertäfelung im Trauzimmer, Foto: Christoph Jäckle</span></p>
|
||||||
|
]]></text>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Eine Holzvertäfelung ist eine hölzerne Wand- oder Deckenverkleidung von Innenräumen zum Schmuck, zur Wärmedämmung oder zum Schutz von darunterliegenden Schichten.</span></p>
|
||||||
|
]]></text>
|
||||||
|
|
||||||
|
|
||||||
|
</content>
|
22
lib/card/test/example/01/huber.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/huberneu.jpg"><p contenteditable="false" data-link="Popup"><span>Johann Ludwig Huber (1723 in Großheppach – 1800 in Stuttgart) war Jurist und ab 1762 Oberamtmann von Tübingen. Er wurde auf Befehl des Herzogs Karl Eugen abgesetzt und auf dem Hohenasperg inhaftiert, nachdem er es abgelehnt hatte, eine Militärsteuer ohne die Zustimmung der Landstände einzutreiben. Mit der Steuer wollte Karl Eugen Soldaten rekrutieren, um sie nach Frankreich zu „verkaufen“.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
7
lib/card/test/example/01/huber.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/huberneu.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Johann Ludwig Huber (1723 in Großheppach – 1800 in Stuttgart) war Jurist und ab 1762 Oberamtmann von Tübingen. Er wurde auf Befehl des Herzogs Karl Eugen abgesetzt und auf dem Hohenasperg inhaftiert, nachdem er es abgelehnt hatte, eine Militärsteuer ohne die Zustimmung der Landstände einzutreiben. Mit der Steuer wollte Karl Eugen Soldaten rekrutieren, um sie nach Frankreich zu „verkaufen“.</span></p>
|
||||||
|
]]></text>
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/huberneu.jpg
Normal file
After Width: | Height: | Size: 215 KiB |
123
lib/card/test/example/01/index.html
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Das Rathaus</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/editor.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/subcard.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
|
||||||
|
<script src="../../../../../node_modules/jquery/dist/jquery.min.js"></script>
|
||||||
|
<script src="../../../../../lib/3rdparty/jquery.hypher.js"></script>
|
||||||
|
<script src="../../../../../lib/3rdparty/hyphenation/de.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="info-card" style="width: 1400px; height: 1200px;">
|
||||||
|
<div class="mainview">
|
||||||
|
<header class="columns">
|
||||||
|
<figure class="thumbnail-wrapper">
|
||||||
|
<img draggable="false" contenteditable="false" class="thumbnail" src="../01/thumbnail.jpg">
|
||||||
|
</figure>
|
||||||
|
<div class="overview column content">
|
||||||
|
<h1 contenteditable="false">Das Rathaus</h1>
|
||||||
|
<p class="misc" contenteditable="false"></p>
|
||||||
|
<p contenteditable="false">Das Rathaus ist das wichtigste Gebäude auf dem Marktplatz. Mit dem Bau wurde 1435 begonnen, seitdem wurde es immer wieder verändert, sodass es Merkmale vieler Baustile vom Spätmittelalter bis zum 21. Jahrhundert aufweist. Die auffällige Fassadengestaltung stammt aus dem 19. Jahrhundert.</p>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<main class="subcards-container columns is-multiline is-centered" tabindex="" data-blocks="Card,Card with Image,Card with Figure"><div class="subcard-wrapper column is-one-third" ondragstart="Card.dragStart(event)">
|
||||||
|
<div class="subcard artist" onclick="Card.openIndexCard(event, '../01/01_baugeschichte.html')">
|
||||||
|
<div class="subcard-content content">
|
||||||
|
<div class="titlebar">
|
||||||
|
<h2 contenteditable="false">Das wichtigste <br>städtische Gebäude</h2>
|
||||||
|
</div>
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="preview content"><p contenteditable="false">Nach 200 Jahren <br>endlich ein Rathaus</p></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- This is outside the content, that the content can have an overflow:hidden without effecting the scalability of the close button. -->
|
||||||
|
<div class="icon card-icon info button"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="subcard-wrapper column is-one-third" ondragstart="Card.dragStart(event)">
|
||||||
|
<div class="subcard thema" onclick="Card.openIndexCard(event, '../01/01_funktiondamals.html')">
|
||||||
|
<div class="subcard-content content">
|
||||||
|
<div class="titlebar">
|
||||||
|
<h2 contenteditable="false">Alles unter einem Dach</h2>
|
||||||
|
</div>
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="preview content"><p contenteditable="false">Räte, Richter, Händler <br> und Halunken</p></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- This is outside the content, that the content can have an overflow:hidden without effecting the scalability of the close button. -->
|
||||||
|
<div class="icon card-icon info button"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="subcard-wrapper column is-one-third" ondragstart="Card.dragStart(event)">
|
||||||
|
<div class="subcard thema" onclick="Card.openIndexCard(event, '../01/01_funktionheute.html')">
|
||||||
|
<div class="subcard-content content">
|
||||||
|
<div class="titlebar">
|
||||||
|
<h2 contenteditable="false">Im Wandel der Zeit</h2>
|
||||||
|
</div>
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="preview content"><p contenteditable="false">Was ist geblieben – <br>was hat sich verändert?</p></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- This is outside the content, that the content can have an overflow:hidden without effecting the scalability of the close button. -->
|
||||||
|
<div class="icon card-icon info button"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="subcard-wrapper column is-one-third" ondragstart="Card.dragStart(event)">
|
||||||
|
<div class="subcard details" onclick="Card.openIndexCard(event, '../01/01_besonderheiten.html')">
|
||||||
|
<div class="subcard-content content">
|
||||||
|
<div class="titlebar">
|
||||||
|
<h2 contenteditable="false">Fassadenmalerei</h2>
|
||||||
|
</div>
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="preview content"><p contenteditable="false">Fassade aus <br>Geist und Politik</p></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- This is outside the content, that the content can have an overflow:hidden without effecting the scalability of the close button. -->
|
||||||
|
<div class="icon card-icon info button"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="subcard-wrapper column is-one-third" ondragstart="Card.dragStart(event)">
|
||||||
|
<div class="subcard details" onclick="Card.openIndexCard(event, '../01/01_besonderheiten2.html')">
|
||||||
|
<div class="subcard-content content">
|
||||||
|
<div class="titlebar">
|
||||||
|
<h2 contenteditable="false">Tübinger Rebmännle</h2>
|
||||||
|
</div>
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="preview content"><p contenteditable="false">Eine unbekleidete Frau?</p></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- This is outside the content, that the content can have an overflow:hidden without effecting the scalability of the close button. -->
|
||||||
|
<div class="icon card-icon info button"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="subcard-wrapper column is-one-third" ondragstart="Card.dragStart(event)">
|
||||||
|
<div class="subcard details" onclick="Card.openIndexCard(event, '../01/01_besonderheiten3.html')">
|
||||||
|
<div class="subcard-content content">
|
||||||
|
<div class="titlebar">
|
||||||
|
<h2 contenteditable="false">Die Astronomische Uhr</h2>
|
||||||
|
</div>
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="preview content"><p contenteditable="false">Revolutionäres <br>Meisterwerk der Technik</p></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- This is outside the content, that the content can have an overflow:hidden without effecting the scalability of the close button. -->
|
||||||
|
<div class="icon card-icon info button"></div>
|
||||||
|
</div>
|
||||||
|
</div></main>
|
||||||
|
<div class="button icon close view-button inverted transparent-background" onclick="Card.close(event)"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
22
lib/card/test/example/01/lederbuehne.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><p contenteditable="false" data-link="Popup"><span>Die sogenannte „Lederbühne“ befand sich im ersten Geschoss. Dennoch konnten die Lederwaren fast ebenerdig angeliefert werden, da der Saal ursprünglich einen direkten Zugang von der Haaggasse aus besaß.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
10
lib/card/test/example/01/lederbuehne.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Die sogenannte „Lederbühne“ befand sich im ersten Geschoss. Dennoch konnten die Lederwaren fast ebenerdig angeliefert werden, da der Saal ursprünglich einen direkten Zugang von der Haaggasse aus besaß.</span></p>
|
||||||
|
]]></text>
|
||||||
|
<!-- <text><![CDATA[
|
||||||
|
<p><span class="popuptext">Der Saal besaß ursprünglich einen direkten Zugang von der Haaggasse aus, sodass die Lederwaren fast ebener-dig angeliefert werden konnten.</span></p>
|
||||||
|
]]></text> -->
|
||||||
|
</content>
|
22
lib/card/test/example/01/malschichten.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/malschichten.png"><p contenteditable="false" data-link="Popup"><span>Die zwei älteren Malschichten des Rathauses, eine Ausfüllung der Fachwerkfelder und eine Grisaillemalerei, Zeichnung: Hochbauamt, Stadtarchiv Tübingen</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
BIN
lib/card/test/example/01/malschichten.png
Normal file
After Width: | Height: | Size: 1.0 MiB |
10
lib/card/test/example/01/malschichten.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/malschichten.png" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Die zwei älteren Malschichten des Rathauses, eine Ausfüllung der Fachwerkfelder und eine Grisaillemalerei, Zeichnung: Hochbauamt, Stadtarchiv Tübingen</span></p>
|
||||||
|
]]></text>
|
||||||
|
<!-- <text><![CDATA[
|
||||||
|
<p><span class="popuptext">Die ursprüngliche Bemalung des Rathauses mag ähnlich ausgesehen haben, wie diese Abbildung von Fachwerkfeldern mit schmaler Umrandung.</span></p>
|
||||||
|
]]></text> -->
|
||||||
|
</content>
|
22
lib/card/test/example/01/mondphasen.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/mondphasenanzeigeneu.jpg"><p contenteditable="false" data-link="Popup"><span>Die Mondphasenanzeige hat einen feststehenden Teil aus einem silbernen Halbkreis mit zwei kleineren Halbkreisen und einen beweglichen Teil, nämlich einen Zeiger, der an beiden Enden vergoldete Vollmondscheiben mit einem Gesicht hat. Durch seine Bewegung stellt der Zeiger die passende Mondphase dar, wie z. B. den Neu- oder Vollmond.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
10
lib/card/test/example/01/mondphasen.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
|
||||||
|
<img src="01/mondphasenanzeigeneu.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[<p>
|
||||||
|
<span class="popuptext">Die Mondphasenanzeige hat einen feststehenden Teil aus einem silbernen Halbkreis mit zwei kleineren Halbkreisen und einen beweglichen Teil, nämlich einen Zeiger, der an beiden Enden vergoldete Vollmondscheiben mit einem Gesicht hat. Durch seine Bewegung stellt der Zeiger die passende Mondphase dar, wie z. B. den Neu- oder Vollmond.</span></p>
|
||||||
|
]]></text>
|
||||||
|
<!-- <text><![CDATA[<p><span class="popuptext"><span class="popuptext">Das Mondphasen-Zifferblatt hat einen feststehenden Teil aus einem silbernen Halbkreis mit zwei kleineren Halbkreisen und einen beweglichen Teil, nämlich einen Zeiger, der an seinen beiden Enden vergoldete Vollmondscheiben mit einem Gesicht hat. Durch seine Bewegung stellt der Zeiger die passende Mondphase dar, wie z. B. Neu- oder Vollmond an.</span></p>
|
||||||
|
]]></text> -->
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/mondphasenanzeigeneu.jpg
Normal file
After Width: | Height: | Size: 115 KiB |
22
lib/card/test/example/01/mondzeiger.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/mondzeigerneu.jpg"><p contenteditable="false" data-link="Popup"><span>Der Mondzeiger besitzt an einem Ende einen vergoldeten Halbmond mit Gesicht und am anderen Ende eine goldene Kugel. Er zeigt die scheinbare Position des Mondes zur Position der Sonne an. Steht beispielsweise die Sichel des Mondzeigers auf dem Sonnensymbol des Sonnenzeigers so ist Neumond, steht sie dagegen auf dem Sternsymbol des Sonnenzeigers so ist Vollmond.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
11
lib/card/test/example/01/mondzeiger.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
|
||||||
|
<img src="01/mondzeigerneu.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Der Mondzeiger besitzt an einem Ende einen vergoldeten Halbmond mit Gesicht und am anderen Ende eine goldene Kugel. Er zeigt die scheinbare Position des Mondes zur Position der Sonne an. Steht beispielsweise die Sichel des Mondzeigers auf dem Sonnensymbol des Sonnenzeigers so ist Neumond, steht sie dagegen auf dem Sternsymbol des Sonnenzeigers so ist Vollmond.</span></p>
|
||||||
|
]]></text>
|
||||||
|
<!-- <text><![CDATA[
|
||||||
|
<p><span class="popuptext">Der Mondzeiger besitzt an einem Ende einen vergoldeten Halbmond mit Gesicht (links in der Abbildung) und am andern Ende eine goldene Kugel (rechts in der Abbildung). Er braucht 27 Tage, 7 Stunden und 43 Minuten für einen Umlauf. Exakt so lange braucht der Mond, um die Erde einmal zu umkreisen. Seine Stellung zum Sonnenzeiger gibt die Mondphase an, die zusätzlich auch am Mondphasenzifferblatt angezeigt wird. Liegen die beiden Zeiger einander gegenüber ist Vollmond, decken sie sich ist Neumond.</span></p>
|
||||||
|
]]></text> -->
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/mondzeigerneu.jpg
Normal file
After Width: | Height: | Size: 174 KiB |
22
lib/card/test/example/01/motive.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><p contenteditable="false" data-link="Popup"><span>Im Öhrn des Rathauses befinden sich acht Gerechtigkeitsbilder. Darunter auch das biblische „Gleichnis vom Splitter und Balken“. Es fordert dazu auf, sich zuerst eigener Fehler bewusst zu werden, bevor man die Fehler anderer verurteilt. Hier appelliert es an verantwortungsvolle Rechtsprechung.</span></p><img contenteditable="false" src="../01/gleichnis.jpg"><p contenteditable="false" data-link="Popup"><span>„Gleichnis vom Splitter und Balken“ im Öhrn des Rathauses, Foto: Peter Neumann, Stadtarchiv Tübingen</span></p><p contenteditable="false" data-link="Popup"><span>Solche allegorische Darstellungen, die die Idee von Recht und Gerechtigkeit zum Ausdruck bringen, waren im Mittelalter und der frühen Neuzeit häufig an Orten der Rechtsprechung angebracht, also an Rathäusern, Pfalzen, Gerichtsportalen oder Justizpalästen.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
14
lib/card/test/example/01/motive.xml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Im Öhrn des Rathauses befinden sich acht Gerechtigkeitsbilder. Darunter auch das biblische „Gleichnis vom Splitter und Balken“. Es fordert dazu auf, sich zuerst eigener Fehler bewusst zu werden, bevor man die Fehler anderer verurteilt. Hier appelliert es an verantwortungsvolle Rechtsprechung.</span></p>
|
||||||
|
]]></text>
|
||||||
|
<img src="01/gleichnis.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">„Gleichnis vom Splitter und Balken“ im Öhrn des Rathauses, Foto: Peter Neumann, Stadtarchiv Tübingen</span></p>
|
||||||
|
]]></text>
|
||||||
|
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Solche allegorische Darstellungen, die die Idee von Recht und Gerechtigkeit zum Ausdruck bringen, waren im Mittelalter und der frühen Neuzeit häufig an Orten der Rechtsprechung angebracht, also an Rathäusern, Pfalzen, Gerichtsportalen oder Justizpalästen.</span></p>
|
||||||
|
]]></text>
|
||||||
|
</content>
|
22
lib/card/test/example/01/oehrn.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><p contenteditable="false" data-link="Popup"><span>Der Öhrn ist eine süddeutsche Bezeichnung für Gang oder Flur, ein Raum, der zur Erschließung weiterer Räume dient.</span></p><img contenteditable="false" src="../01/oehrn.jpg"><p contenteditable="false" data-link="Popup"><span>Der Öhrn des Rathauses, Wandmalereien nach der Renovierung 1952, Foto: Gisela Fendel, Stadtarchiv Tübingen</span></p><p contenteditable="false" data-link="Popup"><span>Im Rathaus war der Öhrn nicht nur Vorraum für die beiden Gerichtsstuben, sondern diente früher wie heute als offizieller Empfangsraum der Stadt. Er war ursprünglich über eine freiliegende Holztreppe von der Haaggasse aus zu betreten, die der Erweiterung 1908 zum Opfer fiel.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
BIN
lib/card/test/example/01/oehrn.jpg
Normal file
After Width: | Height: | Size: 175 KiB |
13
lib/card/test/example/01/oehrn.xml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Der Öhrn ist eine süddeutsche Bezeichnung für Gang oder Flur, ein Raum, der zur Erschließung weiterer Räume dient.</span></p>
|
||||||
|
]]></text>
|
||||||
|
<img src="01/oehrn.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Der Öhrn des Rathauses, Wandmalereien nach der Renovierung 1952, Foto: Gisela Fendel, Stadtarchiv Tübingen</span></p>
|
||||||
|
]]></text>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Im Rathaus war der Öhrn nicht nur Vorraum für die beiden Gerichtsstuben, sondern diente früher wie heute als offizieller Empfangsraum der Stadt. Er war ursprünglich über eine freiliegende Holztreppe von der Haaggasse aus zu betreten, die der Erweiterung 1908 zum Opfer fiel.</span></p>
|
||||||
|
]]></text>
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/oehrn2.jpg
Normal file
After Width: | Height: | Size: 1.3 MiB |
22
lib/card/test/example/01/osiander.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/osianderneu.jpg"><p contenteditable="false" data-link="Popup"><span>Johannes Osiander (1657 in Tübingen – 1724 in Tübingen) war Theologe, Professor für Griechisch, Hebräisch und Geographie und Diplomat. Er wirkte ab 1688 als Unterhändler im Pfälzischen Erbfolgekrieg. 1693 bewahrte er Tübingen durch sein Verhandlungsgeschick vor der Zerstörung durch die Franzosen.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
12
lib/card/test/example/01/osiander.xml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/osianderneu.jpg" caption=" "/>
|
||||||
|
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Johannes Osiander (1657 in Tübingen – 1724 in Tübingen) war Theologe, Professor für Griechisch, Hebräisch und Geographie und Diplomat. Er wirkte ab 1688 als Unterhändler im Pfälzischen Erbfolgekrieg. 1693 bewahrte er Tübingen durch sein Verhandlungsgeschick vor der Zerstörung durch die Franzosen.</span></p>
|
||||||
|
]]></text>
|
||||||
|
|
||||||
|
<!-- <text><![CDATA[
|
||||||
|
<p><span class="popuptext">Angeblich soll während der Verhandlungen auf dem Schlachtfeld eine Kugel direkt neben der Delegation eingeschlagen sein, zu der Osiander gehörte und ihm die Perücke vom Kopf gerissen haben. Dass er sie einfach kaltblütig wieder aufsetzte und in aller Ruhe weiter verhandelte, soll die Franzosen so beeindruckt haben, dass sie von einem weiteren Vorrücken absahen.</span></p>
|
||||||
|
]]></text> -->
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/osianderneu.jpg
Normal file
After Width: | Height: | Size: 237 KiB |
BIN
lib/card/test/example/01/rathauszweigeschossig.png
Normal file
After Width: | Height: | Size: 3.8 MiB |
22
lib/card/test/example/01/ratssaal.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><p contenteditable="false" data-link="Popup"><span>Der Ratssaal im ersten Obergeschoss wurde bei den durchgreifenden Sanierungsarbeiten Mitte des 20. Jahrhunderts von späteren Einbauten befreit, die ursprüngliche Holzkonstruktion mit den fünf mächtigen Pfeilern ertüchtigt sowie eine neue Holzdecke eingezogen.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
9
lib/card/test/example/01/ratssaal.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Der Ratssaal im ersten Obergeschoss wurde bei den durchgreifenden Sanierungsarbeiten Mitte des 20. Jahrhunderts von späteren Einbauten befreit, die ursprüngliche Holzkonstruktion mit den fünf mächtigen Pfeilern ertüchtigt sowie eine neue Holzdecke eingezogen.</span></p>
|
||||||
|
]]></text>
|
||||||
|
<!-- <text><![CDATA[
|
||||||
|
<p><span class="popuptext">Der Saal des ersten Obergeschosses wurde bei den durchgreifenden Sanierungsarbeiten Mitte des 20. Jahrhunderts von späteren Einbauten befreit, die ursprüngliche Holzkonstruktion mit den fünf mächtigen Pfeilern erneuert sowie eine neue Holzdecke eingezogen. Die Aufstellung der Tische für die Bürgermeister an der Längswand und für die Gemeinderatsmitglieder gegenüber vermeidet die Sichtbehinderung trotz der dicken Pfeiler.</span></p>
|
||||||
|
]]></text>-->
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/ratssaalneu.jpg
Normal file
After Width: | Height: | Size: 1.3 MiB |
22
lib/card/test/example/01/rebmaennle.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/rebmaennle.jpg"><p contenteditable="false" data-link="Popup"><span>Das Rebmännle befindet sich an der Südostecke des Rathauses (siehe roter Kreis). Foto: Otto Buchegger, Stadtarchiv Tübingen</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
BIN
lib/card/test/example/01/rebmaennle.jpg
Normal file
After Width: | Height: | Size: 146 KiB |
8
lib/card/test/example/01/rebmaennle.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/rebmaennle.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Das Rebmännle befindet sich an der Südostecke des Rathauses (siehe roter Kreis). Foto: Otto Buchegger, Stadtarchiv Tübingen</span></p>
|
||||||
|
]]></text>
|
||||||
|
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/rebmaennleneu.jpg
Normal file
After Width: | Height: | Size: 452 KiB |
22
lib/card/test/example/01/restaurierungsmassnahmen.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><p contenteditable="false" data-link="Popup"><span>Insgesamt wurde bei der neuesten Restaurierung darauf geachtet, das Rathaus wieder „historischer“ zu machen. Zum Beispiel orientierte man sich bei den Fenstern im ersten und zweiten Geschoss alten Bildern aus dem 19. Jahrhundert. Auch die dreiteilige Halle im Erdgeschoss wurde wieder sichtbar gemacht.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
9
lib/card/test/example/01/restaurierungsmassnahmen.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Insgesamt wurde bei der neuesten Restaurierung darauf geachtet, das Rathaus wieder „historischer“ zu machen. Zum Beispiel orientierte man sich bei den Fenstern im ersten und zweiten Geschoss alten Bildern aus dem 19. Jahrhundert. Auch die dreiteilige Halle im Erdgeschoss wurde wieder sichtbar gemacht.</span></p>
|
||||||
|
]]></text>
|
||||||
|
<!-- <text><![CDATA[
|
||||||
|
<p><span class="popuptext">Insgesamt wurde bei der neuesten Restaurierung darauf geachtet, das Rathaus wieder „historischer“ zu machen. Bei den Fenstern im ersten und zweiten Geschoss orientierte man sich an alten Bildern aus dem 19. Jahrhundert. Auch die dreiteilige Halle im Erdgeschoss wurde wieder sichtbar gemacht.</span></p>
|
||||||
|
]]></text> -->
|
||||||
|
</content>
|
22
lib/card/test/example/01/schoenheitsideal.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><p contenteditable="false" data-link="Popup"><span>Beispielsweise beschreibt der Arzt Jean Liebault in seinem Buch „Drei Werke zu Verschönerung und zum Schmuck des menschlichen Körpers“ von 1582 schöne Frauen seiner Zeit als die, die „[…] einen vollen, ausladenden, weißen Oberköper haben mit zwei runden festen Äpfeln, die wie kleine Wellen auf und ab wogen; die Arme sollen fleischig und kräftig sein; die Hände weiß, keinesfalls länglich und nicht sehr breit und auf dem Handrücken darf man keine Knoten oder Venen sehen; die Füße sollen klein, kurz, trocken und rund sein, frisch und leicht. [...] Das Kinn kurz und in der Mitte vertieft und im unteren Bereich so fleischig und fett, dass es zum Hals hin hinabhängt und ein zweites Kinn zu formen scheint; die leuchtenden, blutroten Wangen müssen hoch sein, mit kleinen Grübchen in der Mitte, in denen ein hübsches Lachen sitzt; die Ohren sollen rund, kurz und nicht hängend sein, Hals und Kehle wohlgerundet […]. Dies ist das Bild und das perfekte Beispiel wahrhafter und naiver weiblicher Schönheit.“</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
10
lib/card/test/example/01/schoenheitsideal.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Beispielsweise beschreibt der Arzt Jean Liebault in seinem Buch „Drei Werke zu Verschönerung und zum Schmuck des menschlichen Körpers“ von 1582 schöne Frauen seiner Zeit als die, die „[…] einen vollen, ausladenden, weißen Oberköper haben mit zwei runden festen Äpfeln, die wie kleine Wellen auf und ab wogen; die Arme sollen fleischig und kräftig sein; die Hände weiß, keinesfalls länglich und nicht sehr breit und auf dem Handrücken darf man keine Knoten oder Venen sehen; die Füße sollen klein, kurz, trocken und rund sein, frisch und leicht. [...] Das Kinn kurz und in der Mitte vertieft und im unteren Bereich so fleischig und fett, dass es zum Hals hin hinabhängt und ein zweites Kinn zu formen scheint; die leuchtenden, blutroten Wangen müssen hoch sein, mit kleinen Grübchen in der Mitte, in denen ein hübsches Lachen sitzt; die Ohren sollen rund, kurz und nicht hängend sein, Hals und Kehle wohlgerundet […]. Dies ist das Bild und das perfekte Beispiel wahrhafter und naiver weiblicher Schönheit.“</span></p>
|
||||||
|
]]></text>
|
||||||
|
<!-- <text><![CDATA[
|
||||||
|
<p><span class="popuptext">Das Aussehen des „Rebmännles“ entspricht ziemlich genau dem Schönheitsideal zwischen Renaissance und Frühbarock. Der Arzt Jean Liebault beschreibt in seinem Buch „Drei Werke zu Verschönerung und zum Schmuck des menschlichen Körpers“ von 1582 schöne Frauen seiner Zeit als die, die „[…] einen vollen, ausladenden, weißen Oberköper haben mit zwei runden festen Äpfeln, die wie kleine Wellen auf und ab wogen; die Arme sollen fleischig und kräftig sein; die Hände weiß, keinesfalls länglich und nicht sehr breit und auf dem Handrücken darf man keine Knoten oder Venen sehen; die Füße sollen klein, kurz, trocken und rund sein, frisch und leicht. [...] Das Kinn kurz und in der Mitte vertieft und im unteren Bereich so fleischig und fett, dass es zum Hals hin hinabhängt und ein zweites Kinn zu formen scheint; die leuchtenden, blutroten Wangen müssen hoch sein, mit kleinen Grübchen in der Mitte, in denen ein hübsches Lachen sitzt; die Ohren sollen rund, kurz und nicht hängend sein, Hals und Kehle wohlgerundet […]. Dies ist das Bild und das perfekte Beispiel wahrhafter und naiver weiblicher Schönheit.“</span></p>
|
||||||
|
]]></text> -->
|
||||||
|
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/sitzungssaal.jpg
Normal file
After Width: | Height: | Size: 125 KiB |
22
lib/card/test/example/01/sitzungssaelen.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><p contenteditable="false" data-link="Popup"><span>Für kleinere Zusammenkünfte ist der kleine Sitzungssaal oder der ehemalige Hofgerichtssaal vorgesehen.</span></p><img contenteditable="false" src="../01/sitzungssaal.jpg"><p contenteditable="false" data-link="Popup"><span>Der kleine Sitzungssaal im zweiten Geschoss des Rathauses, Foto: Peter Neumann, Stadtarchiv</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
10
lib/card/test/example/01/sitzungssaelen.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Für kleinere Zusammenkünfte ist der kleine Sitzungssaal oder der ehemalige Hofgerichtssaal vorgesehen.</span></p>
|
||||||
|
]]></text>
|
||||||
|
<img src="01/sitzungssaal.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Der kleine Sitzungssaal im zweiten Geschoss des Rathauses, Foto: Peter Neumann, Stadtarchiv</span></p>
|
||||||
|
]]></text>
|
||||||
|
</content>
|
22
lib/card/test/example/01/sonnenundmondfinsternis.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><p contenteditable="false" data-link="Popup"><span>An der Astronomischen Uhr können Sonnen- und Mondfinsternisse abgelesen werden. Wenn Sonnen-, Mond- und Drachenzeiger übereinanderstehen zeigt dies eine Sonnenfinsternis an. Wenn sich Sonnen- und Mondzeiger genau gegenüberliegen und mit dem Drachenzeiger eine Linie bilden, zeigt dies eine Mondfinsternis an.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
7
lib/card/test/example/01/sonnenundmondfinsternis.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">An der Astronomischen Uhr können Sonnen- und Mondfinsternisse abgelesen werden. Wenn Sonnen-, Mond- und Drachenzeiger übereinanderstehen zeigt dies eine Sonnenfinsternis an. Wenn sich Sonnen- und Mondzeiger genau gegenüberliegen und mit dem Drachenzeiger eine Linie bilden, zeigt dies eine Mondfinsternis an.</span></p>
|
||||||
|
]]></text>
|
||||||
|
</content>
|
22
lib/card/test/example/01/sonnenzeiger.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/sonnenzeigerneu.jpg"><p contenteditable="false" data-link="Popup"><span>Der Sonnenzeiger hat an einem Ende eine vergoldete Sonne mit Gesicht und am anderen Ende einen goldenen Stern. Er bewegt sich täglich ein „knappes“ Grad und braucht 365 Tage, 5 Stunden, 48 Minuten und 46 Sekunden für einen Umlauf durch die Tierkreiszeichen. In diesem Zeitraum wird die Sonne auch einmal von der Erde umkreist.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
10
lib/card/test/example/01/sonnenzeiger.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/sonnenzeigerneu.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Der Sonnenzeiger hat an einem Ende eine vergoldete Sonne mit Gesicht und am anderen Ende einen goldenen Stern. Er bewegt sich täglich ein „knappes“ Grad und braucht 365 Tage, 5 Stunden, 48 Minuten und 46 Sekunden für einen Umlauf durch die Tierkreiszeichen. In diesem Zeitraum wird die Sonne auch einmal von der Erde umkreist.</span></p>
|
||||||
|
]]></text>
|
||||||
|
<!-- <text><![CDATA[
|
||||||
|
<p><span class="popuptext">Der Sonnenzeiger hat an einem Ende eine vergoldete Sonne mit Gesicht (links in der Abbildung) und am anderen Ende einen goldenen Stern (rechts in der Abbildung). Er bewegt sich täglich um ca. 1 Grad weiter und braucht 365 Tage, 5 Stunden, 48 Minuten und 46 Sekunden für einen Umlauf durch die Tierkreiszeichen. In diesem Zeitraum wird die Sonne auch einmal von der Erde umkreist.</span></p>
|
||||||
|
]]></text> -->
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/sonnenzeigerneu.jpg
Normal file
After Width: | Height: | Size: 89 KiB |
22
lib/card/test/example/01/spital.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/spital.jpg"><p contenteditable="false" data-link="Popup"><span>Das Spital (heutiges Bürgerheim), Foto: Christoph Jäckle</span></p><p contenteditable="false" data-link="Popup"><span>Das ehemalige Tübinger Spital (heutiges Bürgerheim) wurde im 13. Jahrhundert gegründet und befand sich in der Schmiedtorstraße 2.</span></p> <p contenteditable="false" data-link="Popup"><span>Der Begriff Spital existiert seit dem 4. Jahrhundert und bezeichnete eine Einrichtung, die unterschiedliche Aufgaben der sozialen Fürsorge erfüllte: Zum Beispiel als Alten- oder Pflegeheim, Armen- oder Waisenhaus. Erst im 18. Jahrhundert wurden Kranke aufgenommen und im 19. Jahrhundert bezeichnete man ein Krankenhaus als Spital.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
BIN
lib/card/test/example/01/spital.jpg
Normal file
After Width: | Height: | Size: 158 KiB |
17
lib/card/test/example/01/spital.xml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<!-- <text><![CDATA[
|
||||||
|
<p><span class="popuptext">Das Wort „Spital“ ist aus dem lateinischen Wort „hospes“ (Gast) abgeleitet und eine alte Bezeichnung für ein Pflege- oder Altenheim.</span></p>
|
||||||
|
]]></text> -->
|
||||||
|
<img src="01/spital.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Das Spital (heutiges Bürgerheim), Foto: Christoph Jäckle</span></p>
|
||||||
|
]]></text>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Das ehemalige Tübinger Spital (heutiges Bürgerheim) wurde im 13. Jahrhundert gegründet und befand sich in der Schmiedtorstraße 2.</span></p>
|
||||||
|
<p><span class="popuptext">Der Begriff Spital existiert seit dem 4. Jahrhundert und bezeichnete eine Einrichtung, die unterschiedliche Aufgaben der sozialen Fürsorge erfüllte: Zum Beispiel als Alten- oder Pflegeheim, Armen- oder Waisenhaus. Erst im 18. Jahrhundert wurden Kranke aufgenommen und im 19. Jahrhundert bezeichnete man ein Krankenhaus als Spital.</span></p>
|
||||||
|
]]></text>
|
||||||
|
<!-- <text><![CDATA[
|
||||||
|
<p><span class="popuptext">Der Begriff Spital existiert seit dem 4. Jahrhundert und bezeichnete eine Einrichtung, die unterschiedliche Aufgaben der sozialen Fürsorge erfüllte: Zum Beispiel als Pilgerherberge, Alten- oder Pflegeheim, Armen- oder Waisenhaus. Erst in 18. Jahrhundert werden Kranke aufgenommen und im 19. Jahrhundert bezeichnet man ein Krankenhaus als Spital.</span></p>
|
||||||
|
]]></text> -->
|
||||||
|
</content>
|
22
lib/card/test/example/01/tagnacht.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/tagnacht.jpg"><p contenteditable="false" data-link="Popup"><span>Die Position des Sonnenzeigers auf dem mittleren Ring – außen schwarzweiß gezahnt, innen rotbraun – gibt die Tag- und Nachtlängen an. Auf diesem Ring befinden sich vergoldete Zahlen von 8 bis 16 – beginnend bei sechs Uhr. Sie sind einmal im und einmal gegen den Uhrzeigerdrehsinn angeordnet. Während die Zahl, die sich auf dem Schnittpunkt der Zeigerstande unter des Sonnenkopfes mit dem braunen Ring des Sonnenzeigers befindet, die Tageslänge (tägliche Sonnenscheindauer) angibt, zeigt der Schnittpunkt unter der Sternseite des Sonnenzeigers die Nachtlänge. So sieht man z. B. in der Abbildung, dass der Tag ca. 11 Stunden und die Nacht ca. 13 Stunden dauert.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
BIN
lib/card/test/example/01/tagnacht.jpg
Normal file
After Width: | Height: | Size: 75 KiB |
7
lib/card/test/example/01/tagnacht.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/tagnacht.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Die Position des Sonnenzeigers auf dem mittleren Ring – außen schwarz-weiß gezahnt, innen rotbraun – gibt die Tag- und Nachtlängen an. Auf diesem Ring befinden sich vergoldete Zahlen von 8 bis 16 – beginnend bei sechs Uhr. Sie sind einmal im und einmal gegen den Uhrzeigerdrehsinn angeordnet. Während die Zahl, die sich auf dem Schnittpunkt der Zeigerstande unter des Sonnenkopfes mit dem braunen Ring des Sonnenzeigers befindet, die Tageslänge (tägliche Sonnenscheindauer) angibt, zeigt der Schnittpunkt unter der Sternseite des Sonnenzeigers die Nachtlänge. So sieht man z. B. in der Abbildung, dass der Tag ca. 11 Stunden und die Nacht ca. 13 Stunden dauert.</span></p>
|
||||||
|
]]></text>
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/teaseruhr2.jpg
Normal file
After Width: | Height: | Size: 206 KiB |
BIN
lib/card/test/example/01/thumbnail.jpg
Normal file
After Width: | Height: | Size: 78 KiB |
22
lib/card/test/example/01/tierkreis.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/detailuhrneu.jpg"><p contenteditable="false" data-link="Popup"><span>Auf dem äußersten Ring des astronomischen Zifferblatts sind die zwölf Tierkreiszeichen aufgemalt. Sie zeigen in drei Gruppen beginnend mit dem Widder als Frühlingsanfang (siehe Abbildung) die vier Jahreszeiten. Der sich anschließende Ring – außen schwarzweiß gezahnt, innen rotbraun – teilt die Tierkreiszeichen in 30° Segmente. Deshalb findet sich am Beginn jeden Tierkreiszeichens eine vergoldete 30.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
8
lib/card/test/example/01/tierkreis.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
|
||||||
|
<img src="01/detailuhrneu.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Auf dem äußersten Ring des astronomischen Zifferblatts sind die zwölf Tierkreiszeichen aufgemalt. Sie zeigen in drei Gruppen beginnend mit dem Widder als Frühlingsanfang (siehe Abbildung) die vier Jahreszeiten. Der sich anschließende Ring – außen schwarz-weiß gezahnt, innen rotbraun – teilt die Tierkreiszeichen in 30° Segmente. Deshalb findet sich am Beginn jeden Tierkreiszeichens eine vergoldete 30.</span></p>
|
||||||
|
]]></text>
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/trauzimmer.jpg
Normal file
After Width: | Height: | Size: 139 KiB |
22
lib/card/test/example/01/uhland.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/uhlandneu.jpg"><p contenteditable="false" data-link="Popup"><span>Ludwig Uhland (1787 in Tübingen – 1862 in Tübingen) war nicht nur Dichter und Sprachwissenschaftler, sondern vor allem einer der bedeutendsten Politiker seiner Zeit, der als unabhängiges Mitglied des Frankfurter Parlamentes couragiert für Freiheit und Menschenwürde kämpfte. Als württembergischer Abgeordneter setzte er sich bei der Diskussion um eine Verfassung für das Königreich Württemberg für das „gute, alte Recht“ des Tübinger Vertrags ein.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
8
lib/card/test/example/01/uhland.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/uhlandneu.jpg" caption=" "/>
|
||||||
|
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Ludwig Uhland (1787 in Tübingen – 1862 in Tübingen) war nicht nur Dichter und Sprachwissenschaftler, sondern vor allem einer der bedeutendsten Politiker seiner Zeit, der als unabhängiges Mitglied des Frankfurter Parlamentes couragiert für Freiheit und Menschenwürde kämpfte. Als württembergischer Abgeordneter setzte er sich bei der Diskussion um eine Verfassung für das Königreich Württemberg für das „gute, alte Recht“ des Tübinger Vertrags ein.</span></p>
|
||||||
|
]]></text>
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/uhlandneu.jpg
Normal file
After Width: | Height: | Size: 208 KiB |
BIN
lib/card/test/example/01/uhrfrueher.jpg
Normal file
After Width: | Height: | Size: 221 KiB |
22
lib/card/test/example/01/umhang.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/umhang.jpg"><p contenteditable="false" data-link="Popup"><span>Der Umhang von Rebmännle erinnert an die Form eines Weinblatts. Foto: Peter Neumann, Stadtarchiv Tübingen</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
BIN
lib/card/test/example/01/umhang.jpg
Normal file
After Width: | Height: | Size: 109 KiB |
7
lib/card/test/example/01/umhang.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/umhang.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Der Umhang von Rebmännle erinnert an die Form eines Weinblatts. Foto: Peter Neumann, Stadtarchiv Tübingen</span></p>
|
||||||
|
]]></text>
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/urspruenglicheszifferblattneu.jpg
Normal file
After Width: | Height: | Size: 225 KiB |
22
lib/card/test/example/01/vorderheutigenfassade.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/vorderheutigenfassade.jpg"><p contenteditable="false" data-link="Popup"><span>Das Rathaus vor der Renovierung 1876, Foto: Paul Sinner, Stadtarchiv Tübingen</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
BIN
lib/card/test/example/01/vorderheutigenfassade.jpg
Normal file
After Width: | Height: | Size: 1.8 MiB |
7
lib/card/test/example/01/vorderheutigenfassade.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/vorderheutigenfassade.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Das Rathaus vor der Renovierung 1876, Foto: Paul Sinner, Stadtarchiv Tübingen</span></p>
|
||||||
|
]]></text>
|
||||||
|
</content>
|
22
lib/card/test/example/01/weintraube.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/weintraube.jpg"><p contenteditable="false" data-link="Popup"><span>Auf einer vollen Weintraube tanzt die nackte, weibliche Figur.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
BIN
lib/card/test/example/01/weintraube.jpg
Normal file
After Width: | Height: | Size: 80 KiB |
7
lib/card/test/example/01/weintraube.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/weintraube.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Auf einer vollen Weintraube tanzt die nackte, weibliche Figur.</span></p>
|
||||||
|
]]></text>
|
||||||
|
</content>
|
22
lib/card/test/example/01/wissenschaft.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/wissenschaftneu.jpg"><p contenteditable="false" data-link="Popup"><span>Rechts unten auf der Fassade sieht man Minerva als Göttin der Weisheit, der Kriegsführung und der Wissenschaft. Zu ihrer Linken sieht man ein Schild, was als eines ihrer Attribute gilt.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
7
lib/card/test/example/01/wissenschaft.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/wissenschaftneu.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Rechts unten auf der Fassade sieht man Minerva als Göttin der Weisheit, der Kriegsführung und der Wissenschaft. Zu ihrer Linken sieht man ein Schild, was als eines ihrer Attribute gilt.</span></p>
|
||||||
|
]]></text>
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/wissenschaftneu.jpg
Normal file
After Width: | Height: | Size: 473 KiB |
22
lib/card/test/example/01/wohlstand.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/wohlstandneu.jpg"><p contenteditable="false" data-link="Popup"><span>Ceres, Göttin des Ackerbaus, befindet sich als Personifizierung des wirtschaftlichen Wohlstands an der Rathausfassade links neben dem Balkon. Sie hält ihre Attribute Ährengarbe und Füllhorn mit Früchten in den Armen.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
10
lib/card/test/example/01/wohlstand.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/wohlstandneu.jpg"/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Ceres, Göttin des Ackerbaus, befindet sich als Personifizierung des wirtschaftlichen Wohlstands an der Rathausfassade links neben dem Balkon. Sie hält ihre Attribute Ährengarbe und Füllhorn mit Früchten in den Armen.</span></p>
|
||||||
|
]]></text>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/wohlstandneu.jpg
Normal file
After Width: | Height: | Size: 372 KiB |
22
lib/card/test/example/01/ziergiebel.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><p contenteditable="false" data-link="Popup"><span>Ein Ziergiebel ist ein als Ornament ausgestalteter oberer Abschluss eines Bauteils in der Form eines Giebels.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
8
lib/card/test/example/01/ziergiebel.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Ein Ziergiebel ist ein als Ornament ausgestalteter oberer Abschluss eines Bauteils in der Form eines Giebels.</span></p>
|
||||||
|
]]></text>
|
||||||
|
<!-- <img src="01/ziergiebel.jpg" caption=" "/> -->
|
||||||
|
|
||||||
|
</content>
|
22
lib/card/test/example/01/ziergiebel2.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex=""><img contenteditable="false" src="../01/ziergiebelneu.jpg"><p contenteditable="false" data-link="Popup"><span>Der Ziergiebel des Rathauses, Foto: Christoph Jäckle</span></p><p contenteditable="false" data-link="Popup"><span>Ein Ziergiebel ist ein als Ornament ausgestalteter oberer Abschluss eines Bauteils in der Form eines Giebels.</span></p></div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
12
lib/card/test/example/01/ziergiebel2.xml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<content>
|
||||||
|
<img src="01/ziergiebelneu.jpg" caption=" "/>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Der Ziergiebel des Rathauses, Foto: Christoph Jäckle</span></p>
|
||||||
|
]]></text>
|
||||||
|
<text><![CDATA[
|
||||||
|
<p><span class="popuptext">Ein Ziergiebel ist ein als Ornament ausgestalteter oberer Abschluss eines Bauteils in der Form eines Giebels.</span></p>
|
||||||
|
]]></text>
|
||||||
|
|
||||||
|
|
||||||
|
</content>
|
BIN
lib/card/test/example/01/ziergiebelneu.jpg
Normal file
After Width: | Height: | Size: 244 KiB |
5
lib/card/test/example/_theme/config.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"card": "03",
|
||||||
|
"cards": ["01"],
|
||||||
|
"tueschDirectory": "../../../../../dev/tuesch/var/cards/"
|
||||||
|
}
|
11
lib/card/test/example/_theme/css/article.css
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
body {
|
||||||
|
background-color: white;
|
||||||
|
color: black;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
article {
|
||||||
|
top: 66px;
|
||||||
|
}
|
10719
lib/card/test/example/_theme/css/bulma.css
vendored
Normal file
1
lib/card/test/example/_theme/css/bulma.css.map
Normal file
1241
lib/card/test/example/_theme/css/bundle.css
Normal file
649
lib/card/test/example/_theme/css/card.css
Normal file
@ -0,0 +1,649 @@
|
|||||||
|
/* Color */
|
||||||
|
/* Font Properties */
|
||||||
|
/* Spacing */
|
||||||
|
/* Borders */
|
||||||
|
/* Shadows */
|
||||||
|
/*
|
||||||
|
$context: "../../../../../..";
|
||||||
|
$white: #FEFEFE;
|
||||||
|
$shady-white: rgb(240, 240, 240);
|
||||||
|
$gray: #CCC;
|
||||||
|
$dark: #333;
|
||||||
|
$black: #222;
|
||||||
|
|
||||||
|
$small-edge-radius: 3px;
|
||||||
|
$big-edge-radius: 10px;
|
||||||
|
|
||||||
|
$small-pad: 16px;
|
||||||
|
$big-pad: 32px;
|
||||||
|
$tuebingen-red: #e73230;
|
||||||
|
|
||||||
|
$increased-letter-spacing: 0.1em;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$font-color: $black;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$text-font-size: 26px;
|
||||||
|
$medium-font-size: 28px;
|
||||||
|
$large-font-size: 32px;
|
||||||
|
|
||||||
|
$regular-font-size: 1.451rem;
|
||||||
|
|
||||||
|
|
||||||
|
$subtitle-font-size: $medium-font-size;
|
||||||
|
$title-font-size: $subtitle-font-size * 1.641;
|
||||||
|
|
||||||
|
/* Font Weights */
|
||||||
|
/*
|
||||||
|
$strong-font-weight: 700;
|
||||||
|
$medium-font-weight: 500;
|
||||||
|
$light-font-weight: 300;
|
||||||
|
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
The essential.scss defines proerties that
|
||||||
|
are essential for the basic features of an
|
||||||
|
info card and are completely
|
||||||
|
*/
|
||||||
|
.unselectable {
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card {
|
||||||
|
position: absolute;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zoomable-wrapper {
|
||||||
|
display: inline-block;
|
||||||
|
-ms-flex-item-align: center;
|
||||||
|
-ms-grid-row-align: center;
|
||||||
|
align-self: center;
|
||||||
|
font-size: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zoomable-wrapper figure {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zoomable-wrapper figcaption {
|
||||||
|
font-size: initial;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zoomable-wrapper > figure > div {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zoomable-wrapper svg {
|
||||||
|
overflow: visible;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
div {
|
||||||
|
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
If any default style by the browser or
|
||||||
|
certain plugins (e.g. Bulma) needs to be overwritten,
|
||||||
|
this can be done in this file.
|
||||||
|
*/
|
||||||
|
/* Remove the negative margin from Bulma's columns. */
|
||||||
|
.columns {
|
||||||
|
margin: 0 !important;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content h1, .content h2, .content h3, .content h4, .content h5, .content h6 {
|
||||||
|
color: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content:not(:last-child) {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
border-color: unset;
|
||||||
|
border: unset;
|
||||||
|
border-radius: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button:active, .button:hover {
|
||||||
|
border-color: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
width: unset;
|
||||||
|
height: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Color */
|
||||||
|
/* Font Properties */
|
||||||
|
/* Spacing */
|
||||||
|
/* Borders */
|
||||||
|
/* Shadows */
|
||||||
|
/*
|
||||||
|
$context: "../../../../../..";
|
||||||
|
$white: #FEFEFE;
|
||||||
|
$shady-white: rgb(240, 240, 240);
|
||||||
|
$gray: #CCC;
|
||||||
|
$dark: #333;
|
||||||
|
$black: #222;
|
||||||
|
|
||||||
|
$small-edge-radius: 3px;
|
||||||
|
$big-edge-radius: 10px;
|
||||||
|
|
||||||
|
$small-pad: 16px;
|
||||||
|
$big-pad: 32px;
|
||||||
|
$tuebingen-red: #e73230;
|
||||||
|
|
||||||
|
$increased-letter-spacing: 0.1em;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$font-color: $black;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$text-font-size: 26px;
|
||||||
|
$medium-font-size: 28px;
|
||||||
|
$large-font-size: 32px;
|
||||||
|
|
||||||
|
$regular-font-size: 1.451rem;
|
||||||
|
|
||||||
|
|
||||||
|
$subtitle-font-size: $medium-font-size;
|
||||||
|
$title-font-size: $subtitle-font-size * 1.641;
|
||||||
|
|
||||||
|
/* Font Weights */
|
||||||
|
/*
|
||||||
|
$strong-font-weight: 700;
|
||||||
|
$medium-font-weight: 500;
|
||||||
|
$light-font-weight: 300;
|
||||||
|
|
||||||
|
*/
|
||||||
|
@font-face {
|
||||||
|
font-family: "Material Icons";
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url(../fonts/material-icon-font/MaterialIcons-Regular.eot);
|
||||||
|
/* For IE6-8 */
|
||||||
|
src: local("Material Icons"), local("MaterialIcons-Regular"), url(../fonts/material-icon-font/MaterialIcons-Regular.woff2) format("woff2"), url(../fonts/material-icon-font/MaterialIcons-Regular.woff) format("woff"), url(../fonts/material-icon-font/MaterialIcons-Regular.ttf) format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
.material-icons {
|
||||||
|
font-family: 'Material Icons';
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
font-size: 24px;
|
||||||
|
/* Preferred icon size */
|
||||||
|
display: inline-block;
|
||||||
|
line-height: 1;
|
||||||
|
text-transform: none;
|
||||||
|
letter-spacing: normal;
|
||||||
|
word-wrap: normal;
|
||||||
|
white-space: nowrap;
|
||||||
|
direction: ltr;
|
||||||
|
/* Support for all WebKit browsers. */
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
/* Support for Safari and Chrome. */
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
/* Support for Firefox. */
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
/* Support for IE. */
|
||||||
|
-webkit-font-feature-settings: 'liga';
|
||||||
|
font-feature-settings: 'liga';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The card.scss is responsible for styling the top level of the card.
|
||||||
|
*
|
||||||
|
* + Info-Card
|
||||||
|
* ++ Header
|
||||||
|
* +++ Thubnail
|
||||||
|
* +++ Overview
|
||||||
|
* ++ Subcards-Container
|
||||||
|
* +++ n * Subcards
|
||||||
|
*/
|
||||||
|
.info-card {
|
||||||
|
font-family: "Calibri", sans-serif;
|
||||||
|
color: white;
|
||||||
|
background-color: #333;
|
||||||
|
-webkit-box-shadow: 1px 3px 8px rgba(0, 0, 0, 0.5);
|
||||||
|
box-shadow: 1px 3px 8px rgba(0, 0, 0, 0.5);
|
||||||
|
border-radius: 3px;
|
||||||
|
/*
|
||||||
|
This mixin selects the elements of $selector
|
||||||
|
and adjust the style it there are n children of this selector
|
||||||
|
inside the parent.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .ui {
|
||||||
|
width: 100%;
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-box-pack: end;
|
||||||
|
-ms-flex-pack: end;
|
||||||
|
justify-content: flex-end;
|
||||||
|
padding: 10px;
|
||||||
|
z-index: 11;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .speech {
|
||||||
|
width: 52px;
|
||||||
|
height: 52px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card:before {
|
||||||
|
content: '';
|
||||||
|
display: block;
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
z-index: -1;
|
||||||
|
border-radius: 3px;
|
||||||
|
top: -8px;
|
||||||
|
left: -8px;
|
||||||
|
width: calc(100% + 16px);
|
||||||
|
height: calc(100% + 16px);
|
||||||
|
-webkit-box-shadow: 0 0 15px #008bd2;
|
||||||
|
box-shadow: 0 0 15px #008bd2;
|
||||||
|
background: repeating-linear-gradient(-45deg, #008bd2, #008bd2 20px, #33a2db 20px, #33a2db 40px);
|
||||||
|
background-size: 56px 56px;
|
||||||
|
/* This is unique for this background, need to find a pattern and develop a formula */
|
||||||
|
background-position-x: 0%;
|
||||||
|
-webkit-animation: 'slide' 20s infinite linear forwards;
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-transition: opacity 1s;
|
||||||
|
transition: opacity 1s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card.speech-plugin-is-reading .speech.button:before {
|
||||||
|
content: 'stop';
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card.speech-plugin-is-reading:before {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes 'slide' {
|
||||||
|
0% {
|
||||||
|
background-position-x: 0%;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
background-position-x: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .img-overlay {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(0, 0, 0, 0.3);
|
||||||
|
z-index: 200;
|
||||||
|
display: none;
|
||||||
|
-webkit-box-align: center;
|
||||||
|
-ms-flex-align: center;
|
||||||
|
align-items: center;
|
||||||
|
-webkit-box-pack: center;
|
||||||
|
-ms-flex-pack: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .img-overlay img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
-o-object-fit: contain;
|
||||||
|
object-fit: contain;
|
||||||
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes pulse {}
|
||||||
|
|
||||||
|
@keyframes pulse {}.info-card nav {
|
||||||
|
z-index: 200;
|
||||||
|
position: absolute;
|
||||||
|
top: 20px;
|
||||||
|
right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card nav > * {
|
||||||
|
margin-right: 6.66667px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card a {
|
||||||
|
color: #008bd2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card a:hover {
|
||||||
|
color: #008bd2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .mainview {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-box-direction: normal;
|
||||||
|
-ms-flex-direction: column;
|
||||||
|
flex-direction: column;
|
||||||
|
height: 100%;
|
||||||
|
border-radius: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card p {
|
||||||
|
font-size: 26px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card header {
|
||||||
|
height: 35%;
|
||||||
|
color: #f2f2f2;
|
||||||
|
background: -webkit-gradient(linear, left bottom, left top, from(#333333), color-stop(200%, #6f6f6e));
|
||||||
|
background: linear-gradient(to top, #333333, #6f6f6e 200%);
|
||||||
|
padding: 60px;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
border-radius: inherit;
|
||||||
|
display: -ms-grid;
|
||||||
|
display: grid;
|
||||||
|
-ms-grid-columns: 1fr 2fr;
|
||||||
|
grid-template-columns: 1fr 2fr;
|
||||||
|
grid-gap: 20px;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card header h1 {
|
||||||
|
-webkit-margin-before: 0;
|
||||||
|
font-size: 52px;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: -2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card header .overview {
|
||||||
|
padding: 0 20px;
|
||||||
|
margin-top: 0;
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-box-direction: normal;
|
||||||
|
-ms-flex-direction: column;
|
||||||
|
flex-direction: column;
|
||||||
|
-ms-grid-column: 2;
|
||||||
|
grid-column-start: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card header p {
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card header p.misc {
|
||||||
|
font-size: 26px;
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 300;
|
||||||
|
opacity: 0.5;
|
||||||
|
margin-bottom: 0.641em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .thumbnail-wrapper {
|
||||||
|
overflow: hidden;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .thumbnail-wrapper:before {
|
||||||
|
content: ' ';
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
-webkit-box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.8);
|
||||||
|
box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .thumbnail-wrapper .button {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .thumbnail {
|
||||||
|
height: 100%;
|
||||||
|
min-width: 100%;
|
||||||
|
-o-object-fit: cover;
|
||||||
|
object-fit: cover;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container {
|
||||||
|
background-color: #333333;
|
||||||
|
height: 65%;
|
||||||
|
display: -ms-grid;
|
||||||
|
display: grid;
|
||||||
|
grid-auto-rows: 1fr;
|
||||||
|
grid-gap: 20px;
|
||||||
|
padding: 60px;
|
||||||
|
padding-top: 20px;
|
||||||
|
-ms-grid-columns: (1fr)[9];
|
||||||
|
grid-template-columns: repeat(9, 1fr);
|
||||||
|
grid-template-areas: '. tl tl tl . tr tr tr .' '. bl bl bl . br br br .';
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .subcard-wrapper:first-child:nth-last-child(5):nth-child(4),
|
||||||
|
.info-card .subcards-container .subcard-wrapper:first-child:nth-last-child(5) ~ .subcard-wrapper:nth-child(4) {
|
||||||
|
-ms-grid-row: 2;
|
||||||
|
-ms-grid-column: 2;
|
||||||
|
-ms-grid-column-span: 3;
|
||||||
|
grid-area: bl;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .subcard-wrapper:first-child:nth-last-child(5):nth-child(5),
|
||||||
|
.info-card .subcards-container .subcard-wrapper:first-child:nth-last-child(5) ~ .subcard-wrapper:nth-child(5) {
|
||||||
|
-ms-grid-row: 2;
|
||||||
|
-ms-grid-column: 6;
|
||||||
|
-ms-grid-column-span: 3;
|
||||||
|
grid-area: br;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .subcard-wrapper:first-child:nth-last-child(4):first-child,
|
||||||
|
.info-card .subcards-container .subcard-wrapper:first-child:nth-last-child(4) ~ .subcard-wrapper:first-child {
|
||||||
|
-ms-grid-row: 1;
|
||||||
|
-ms-grid-column: 2;
|
||||||
|
-ms-grid-column-span: 3;
|
||||||
|
grid-area: tl;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .subcard-wrapper:first-child:nth-last-child(4):nth-child(2),
|
||||||
|
.info-card .subcards-container .subcard-wrapper:first-child:nth-last-child(4) ~ .subcard-wrapper:nth-child(2) {
|
||||||
|
-ms-grid-row: 1;
|
||||||
|
-ms-grid-column: 6;
|
||||||
|
-ms-grid-column-span: 3;
|
||||||
|
grid-area: tr;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .subcard-wrapper:first-child:nth-last-child(4):nth-child(3),
|
||||||
|
.info-card .subcards-container .subcard-wrapper:first-child:nth-last-child(4) ~ .subcard-wrapper:nth-child(3) {
|
||||||
|
-ms-grid-row: 2;
|
||||||
|
-ms-grid-column: 2;
|
||||||
|
-ms-grid-column-span: 3;
|
||||||
|
grid-area: bl;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .subcard-wrapper:first-child:nth-last-child(4):nth-child(4),
|
||||||
|
.info-card .subcards-container .subcard-wrapper:first-child:nth-last-child(4) ~ .subcard-wrapper:nth-child(4) {
|
||||||
|
-ms-grid-row: 2;
|
||||||
|
-ms-grid-column: 6;
|
||||||
|
-ms-grid-column-span: 3;
|
||||||
|
grid-area: br;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .subcard-wrapper:first-child:nth-last-child(3):first-child,
|
||||||
|
.info-card .subcards-container .subcard-wrapper:first-child:nth-last-child(3) ~ .subcard-wrapper:first-child {
|
||||||
|
-ms-grid-row: 1;
|
||||||
|
-ms-grid-column: 2;
|
||||||
|
-ms-grid-column-span: 3;
|
||||||
|
grid-area: tl;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .subcard-wrapper:first-child:nth-last-child(3):nth-child(2),
|
||||||
|
.info-card .subcards-container .subcard-wrapper:first-child:nth-last-child(3) ~ .subcard-wrapper:nth-child(2) {
|
||||||
|
-ms-grid-row: 1;
|
||||||
|
-ms-grid-column: 6;
|
||||||
|
-ms-grid-column-span: 3;
|
||||||
|
grid-area: tr;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .subcard-wrapper:first-child:nth-last-child(3):nth-child(3),
|
||||||
|
.info-card .subcards-container .subcard-wrapper:first-child:nth-last-child(3) ~ .subcard-wrapper:nth-child(3) {
|
||||||
|
-ms-grid-row: 2;
|
||||||
|
grid-row: 2;
|
||||||
|
-ms-grid-column: 4;
|
||||||
|
-ms-grid-column-span: 3;
|
||||||
|
grid-column: 4 / 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .subcard-wrapper {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container > div {
|
||||||
|
width: auto;
|
||||||
|
grid-column: span 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-icon,
|
||||||
|
.zoomable-icon {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.speech-only-text {
|
||||||
|
opacity: 0;
|
||||||
|
position: absolute;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
pointer-events: none;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure {
|
||||||
|
position: relative;
|
||||||
|
border: 3px solid #f2f2f2;
|
||||||
|
-webkit-box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.5);
|
||||||
|
box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.5);
|
||||||
|
-webkit-margin-before: 0;
|
||||||
|
-webkit-margin-after: 0;
|
||||||
|
-webkit-margin-start: 0;
|
||||||
|
-webkit-margin-end: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure .icon {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
border-radius: 3px 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.view-button.icon {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
padding: 26px 26px;
|
||||||
|
margin: -23px -13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.view-button.icon.inverted:before {
|
||||||
|
color: #f2f2f2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.view-button.icon:before {
|
||||||
|
color: #333333;
|
||||||
|
font-size: 36px;
|
||||||
|
text-shadow: 0 0 3px rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
min-width: 44px;
|
||||||
|
min-height: 44px;
|
||||||
|
color: #191919;
|
||||||
|
background-color: #f2f2f2;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon.button {
|
||||||
|
pointer-events: all;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon.button.corner-button {
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon.button.corner-button.bottom-right {
|
||||||
|
border-top-left-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon.inverted {
|
||||||
|
color: #f2f2f2;
|
||||||
|
background-color: #191919;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon.transparent-background {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon.active {
|
||||||
|
color: #f2f2f2;
|
||||||
|
background-color: #008bd2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon:before {
|
||||||
|
font-family: "Material Icons";
|
||||||
|
font-size: 36px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon.info:before {
|
||||||
|
content: 'info_outline';
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon.close:before {
|
||||||
|
content: 'close';
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon.zoom:before {
|
||||||
|
content: 'search';
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon.speech:before {
|
||||||
|
content: 'record_voice_over';
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon.language:before {
|
||||||
|
content: 'language';
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card.debug .view-button {
|
||||||
|
background-color: rgba(255, 0, 0, 0.5) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card.debug .view-button.disabled {
|
||||||
|
-webkit-filter: grayscale(1);
|
||||||
|
filter: grayscale(1);
|
||||||
|
}
|
15
lib/card/test/example/_theme/css/card.css.map
Normal file
6
lib/card/test/example/_theme/css/editor.css
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
html, body {
|
||||||
|
position: relative;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
height: 100%;
|
||||||
|
}
|
10
lib/card/test/example/_theme/css/highlight.css
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
circle {
|
||||||
|
stroke-width: 1;
|
||||||
|
stroke: white;
|
||||||
|
fill: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
mask circle {
|
||||||
|
stroke-width: 0;
|
||||||
|
fill: white;
|
||||||
|
}
|
1
lib/card/test/example/_theme/css/icons.css
Normal file
@ -0,0 +1 @@
|
|||||||
|
/* No CSS */
|
163
lib/card/test/example/_theme/css/popup.css
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
/* Color */
|
||||||
|
/* Font Properties */
|
||||||
|
/* Spacing */
|
||||||
|
/* Borders */
|
||||||
|
/* Shadows */
|
||||||
|
/*
|
||||||
|
$context: "../../../../../..";
|
||||||
|
$white: #FEFEFE;
|
||||||
|
$shady-white: rgb(240, 240, 240);
|
||||||
|
$gray: #CCC;
|
||||||
|
$dark: #333;
|
||||||
|
$black: #222;
|
||||||
|
|
||||||
|
$small-edge-radius: 3px;
|
||||||
|
$big-edge-radius: 10px;
|
||||||
|
|
||||||
|
$small-pad: 16px;
|
||||||
|
$big-pad: 32px;
|
||||||
|
$tuebingen-red: #e73230;
|
||||||
|
|
||||||
|
$increased-letter-spacing: 0.1em;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$font-color: $black;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$text-font-size: 26px;
|
||||||
|
$medium-font-size: 28px;
|
||||||
|
$large-font-size: 32px;
|
||||||
|
|
||||||
|
$regular-font-size: 1.451rem;
|
||||||
|
|
||||||
|
|
||||||
|
$subtitle-font-size: $medium-font-size;
|
||||||
|
$title-font-size: $subtitle-font-size * 1.641;
|
||||||
|
|
||||||
|
/* Font Weights */
|
||||||
|
/*
|
||||||
|
$strong-font-weight: 700;
|
||||||
|
$medium-font-weight: 500;
|
||||||
|
$light-font-weight: 300;
|
||||||
|
|
||||||
|
*/
|
||||||
|
/* Color */
|
||||||
|
/* Font Properties */
|
||||||
|
/* Spacing */
|
||||||
|
/* Borders */
|
||||||
|
/* Shadows */
|
||||||
|
/*
|
||||||
|
$context: "../../../../../..";
|
||||||
|
$white: #FEFEFE;
|
||||||
|
$shady-white: rgb(240, 240, 240);
|
||||||
|
$gray: #CCC;
|
||||||
|
$dark: #333;
|
||||||
|
$black: #222;
|
||||||
|
|
||||||
|
$small-edge-radius: 3px;
|
||||||
|
$big-edge-radius: 10px;
|
||||||
|
|
||||||
|
$small-pad: 16px;
|
||||||
|
$big-pad: 32px;
|
||||||
|
$tuebingen-red: #e73230;
|
||||||
|
|
||||||
|
$increased-letter-spacing: 0.1em;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$font-color: $black;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$text-font-size: 26px;
|
||||||
|
$medium-font-size: 28px;
|
||||||
|
$large-font-size: 32px;
|
||||||
|
|
||||||
|
$regular-font-size: 1.451rem;
|
||||||
|
|
||||||
|
|
||||||
|
$subtitle-font-size: $medium-font-size;
|
||||||
|
$title-font-size: $subtitle-font-size * 1.641;
|
||||||
|
|
||||||
|
/* Font Weights */
|
||||||
|
/*
|
||||||
|
$strong-font-weight: 700;
|
||||||
|
$medium-font-weight: 500;
|
||||||
|
$light-font-weight: 300;
|
||||||
|
|
||||||
|
*/
|
||||||
|
@font-face {
|
||||||
|
font-family: "Material Icons";
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url(../fonts/material-icon-font/MaterialIcons-Regular.eot);
|
||||||
|
/* For IE6-8 */
|
||||||
|
src: local("Material Icons"), local("MaterialIcons-Regular"), url(../fonts/material-icon-font/MaterialIcons-Regular.woff2) format("woff2"), url(../fonts/material-icon-font/MaterialIcons-Regular.woff) format("woff"), url(../fonts/material-icon-font/MaterialIcons-Regular.ttf) format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
.material-icons {
|
||||||
|
font-family: 'Material Icons';
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
font-size: 24px;
|
||||||
|
/* Preferred icon size */
|
||||||
|
display: inline-block;
|
||||||
|
line-height: 1;
|
||||||
|
text-transform: none;
|
||||||
|
letter-spacing: normal;
|
||||||
|
word-wrap: normal;
|
||||||
|
white-space: nowrap;
|
||||||
|
direction: ltr;
|
||||||
|
/* Support for all WebKit browsers. */
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
/* Support for Safari and Chrome. */
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
/* Support for Firefox. */
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
/* Support for IE. */
|
||||||
|
-webkit-font-feature-settings: 'liga';
|
||||||
|
font-feature-settings: 'liga';
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup {
|
||||||
|
width: 800px;
|
||||||
|
width: -webkit-fit-content;
|
||||||
|
width: -moz-fit-content;
|
||||||
|
width: fit-content;
|
||||||
|
min-width: 400px;
|
||||||
|
color: #191919;
|
||||||
|
background-color: #f2f2f2;
|
||||||
|
border-radius: 3px;
|
||||||
|
-webkit-box-shadow: 0 0 100px rgba(0, 0, 0, 0.3), 2px 3px 25px rgba(0, 0, 0, 0.3), 0 0 4px rgba(0, 0, 0, 0.8);
|
||||||
|
box-shadow: 0 0 100px rgba(0, 0, 0, 0.3), 2px 3px 25px rgba(0, 0, 0, 0.3), 0 0 4px rgba(0, 0, 0, 0.8);
|
||||||
|
padding: 25.64px 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup img {
|
||||||
|
display: block;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup img:not(:first-child) {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup img:not(:last-child) {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup .notch {
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
border-color: #f2f2f2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.PopupContent p:not(:last-child) {
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
12
lib/card/test/example/_theme/css/popup.css.map
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"mappings": "ACEA,WAAW;AA2CX,qBAAqB;AAcrB,aAAa;AAOb,aAAa;AAGb,aAAa;AAIb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAmCkB;AAAA;;;;;EAKhB;AA/GF,WAAW;AA2CX,qBAAqB;AAcrB,aAAa;AAOb,aAAa;AAGb,aAAa;AAIb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAmCkB;AAAA;;;;;EAKhB;AC7GF,UAAU;EACN,WAAW,EAHc,gBAAgB;EAIzC,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,GAAG;EAChB,GAAG,EAAE,0DAA0D;EAAE,eAAe;EAChF,GAAG,EAAE,uBAAuB,EACvB,8BAA8B,EAC9B,4DAA4D,CAAC,eAAe,EAC5E,2DAA2D,CAAC,cAAc,EAC1E,0DAA0D,CAAC,kBAAkB;;;AAGpF,AAAA,eAAe,CAAC;EACd,WAAW,EAAE,gBAAgB;EAC7B,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,MAAM;EAClB,SAAS,EAAE,IAAI;EAAG,yBAAyB;EAC3C,OAAO,EAAE,YAAY;EACrB,WAAW,EAAE,CAAC;EACd,cAAc,EAAE,IAAI;EACpB,cAAc,EAAE,MAAM;EACtB,SAAS,EAAE,MAAM;EACjB,WAAW,EAAE,MAAM;EACnB,SAAS,EAAE,GAAG;EAEd,sCAAsC;EACtC,sBAAsB,EAAE,WAAW;EACnC,oCAAoC;EACpC,cAAc,EAAE,kBAAkB;EAElC,0BAA0B;EAC1B,uBAAuB,EAAE,SAAS;EAElC,qBAAqB;EACrB,qBAAqB,EAAE,MAAM;CAC9B;;AFpCH,AAAA,MAAM,CAAC;EACH,KAAK,EAAE,KAAK;EACZ,KAAK,EAAE,WAAW;EAClB,SAAS,EAAE,KAAK;EAChB,KAAK,ECHD,OAAO;EDIX,gBAAgB,ECHZ,OAAO;EDIX,aAAa,EC0DA,GAAG;EDzDhB,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAe,EC6DnB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAe,ED7Dc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAe;EACnF,OAAO,EAAE,OAAwB,CAAC,IAAgB;CAqBrD;;AA7BD,AAUI,MAVE,CAUF,GAAG,CAAC;EACA,OAAO,EAAE,KAAK;EACd,MAAM,EAAG,IAAI;CAUhB;;AAtBL,AAcQ,MAdF,CAUF,GAAG,AAIE,IAAK,CAAA,YAAY,EAAC;EACf,UAAU,EC2CN,IAAI;CD1CX;;AAhBT,AAkBQ,MAlBF,CAUF,GAAG,AAQE,IAAK,CAAA,WAAW,EAAC;EACd,aAAa,ECuCT,IAAI;CDtCX;;AApBT,AAwBI,MAxBE,CAwBF,MAAM,CAAC;EACH,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,YAAY,ECzBZ,OAAO;CD0BV;;AAGL,AACI,aADS,CACT,CAAC,AAAA,IAAK,CAAA,WAAW,EAAE;EACf,aAAa,EC0BL,IAAI;CDzBf",
|
||||||
|
"sources": [
|
||||||
|
"popup.scss",
|
||||||
|
"_variables.scss",
|
||||||
|
"_icons.scss",
|
||||||
|
"_variables.scss"
|
||||||
|
],
|
||||||
|
"names": [],
|
||||||
|
"file": "popup.css"
|
||||||
|
}
|
416
lib/card/test/example/_theme/css/subcard.css
Normal file
@ -0,0 +1,416 @@
|
|||||||
|
/* Color */
|
||||||
|
/* Font Properties */
|
||||||
|
/* Spacing */
|
||||||
|
/* Borders */
|
||||||
|
/* Shadows */
|
||||||
|
/*
|
||||||
|
$context: "../../../../../..";
|
||||||
|
$white: #FEFEFE;
|
||||||
|
$shady-white: rgb(240, 240, 240);
|
||||||
|
$gray: #CCC;
|
||||||
|
$dark: #333;
|
||||||
|
$black: #222;
|
||||||
|
|
||||||
|
$small-edge-radius: 3px;
|
||||||
|
$big-edge-radius: 10px;
|
||||||
|
|
||||||
|
$small-pad: 16px;
|
||||||
|
$big-pad: 32px;
|
||||||
|
$tuebingen-red: #e73230;
|
||||||
|
|
||||||
|
$increased-letter-spacing: 0.1em;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$font-color: $black;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$text-font-size: 26px;
|
||||||
|
$medium-font-size: 28px;
|
||||||
|
$large-font-size: 32px;
|
||||||
|
|
||||||
|
$regular-font-size: 1.451rem;
|
||||||
|
|
||||||
|
|
||||||
|
$subtitle-font-size: $medium-font-size;
|
||||||
|
$title-font-size: $subtitle-font-size * 1.641;
|
||||||
|
|
||||||
|
/* Font Weights */
|
||||||
|
/*
|
||||||
|
$strong-font-weight: 700;
|
||||||
|
$medium-font-weight: 500;
|
||||||
|
$light-font-weight: 300;
|
||||||
|
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
The subcards.scss is responsible for all css of the subcards.
|
||||||
|
Historically, it was always used for the preview-cards on the info-card
|
||||||
|
and the article page of the corresponding subcard.
|
||||||
|
|
||||||
|
Discuss: Personally I would prefer a strict separation from front page
|
||||||
|
and article page. But there may be advantages, when the unit 'subcard'
|
||||||
|
has a stylesheet on it's own.
|
||||||
|
|
||||||
|
- SO
|
||||||
|
|
||||||
|
Structure:
|
||||||
|
|
||||||
|
1. Shared (Preview and Expanded)
|
||||||
|
2. Preview Subcards
|
||||||
|
3. Expanded Subcards
|
||||||
|
*/
|
||||||
|
.info-card {
|
||||||
|
/*
|
||||||
|
1. Shared Properties
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
2. Preview Properties
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
3. Article Properties
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
Colors for the card topics.
|
||||||
|
*/
|
||||||
|
/* Remap the colors to the 'bundled' groups. */
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcard {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-box-direction: normal;
|
||||||
|
-ms-flex-direction: column;
|
||||||
|
flex-direction: column;
|
||||||
|
color: #191919;
|
||||||
|
position: relative;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcard-content {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .titlebar {
|
||||||
|
min-height: 84px;
|
||||||
|
background: -webkit-gradient(linear, left bottom, left top, color-stop(-100%, #333333), color-stop(200%, #6f6f6e));
|
||||||
|
background: linear-gradient(to top, #333333 -100%, #6f6f6e 200%);
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-box-align: center;
|
||||||
|
-ms-flex-align: center;
|
||||||
|
align-items: center;
|
||||||
|
-webkit-box-pack: center;
|
||||||
|
-ms-flex-pack: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .titlebar h2 {
|
||||||
|
color: #f2f2f2;
|
||||||
|
font-size: 26px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 2px;
|
||||||
|
line-height: 1.3em;
|
||||||
|
text-align: center;
|
||||||
|
margin: 0;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .subcard-wrapper {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .subcard {
|
||||||
|
-webkit-box-flex: 1;
|
||||||
|
-ms-flex: 1;
|
||||||
|
flex: 1;
|
||||||
|
z-index: 1;
|
||||||
|
-webkit-box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.5);
|
||||||
|
box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.5);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .titlebar {
|
||||||
|
min-height: 27%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .subcard-content {
|
||||||
|
-webkit-box-flex: 1;
|
||||||
|
-ms-flex: 1;
|
||||||
|
flex: 1;
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-box-direction: normal;
|
||||||
|
-ms-flex-direction: column;
|
||||||
|
flex-direction: column;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .wrapper {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
overflow: hidden;
|
||||||
|
-webkit-box-flex: 1;
|
||||||
|
-ms-flex: 1;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .wrapper .preview {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
background-color: #f2f2f2;
|
||||||
|
-webkit-box-align: center;
|
||||||
|
-ms-flex-align: center;
|
||||||
|
align-items: center;
|
||||||
|
-webkit-box-pack: center;
|
||||||
|
-ms-flex-pack: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .wrapper .preview p {
|
||||||
|
font-style: italic;
|
||||||
|
color: #6f6f6e;
|
||||||
|
font-weight: 500;
|
||||||
|
text-align: center;
|
||||||
|
padding: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .wrapper .preview img {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
-o-object-fit: cover;
|
||||||
|
object-fit: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .icon {
|
||||||
|
border-radius: 3px 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container .subcard.visited .icon.info:before {
|
||||||
|
content: "check";
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcards-container figure {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .mainview > .subcard {
|
||||||
|
background-color: rgba(25, 25, 25, 0.8);
|
||||||
|
-webkit-box-pack: center;
|
||||||
|
-ms-flex-pack: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .mainview > .subcard .column.content {
|
||||||
|
-webkit-box-flex: 1;
|
||||||
|
-ms-flex: 1;
|
||||||
|
flex: 1;
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-box-direction: normal;
|
||||||
|
-ms-flex-direction: column;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .mainview > .subcard .column.content.wide {
|
||||||
|
-webkit-box-flex: 1;
|
||||||
|
-ms-flex: 1 0 55%;
|
||||||
|
flex: 1 0 55%;
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-box-direction: normal;
|
||||||
|
-ms-flex-direction: column;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .mainview > .subcard .column.content.narrow {
|
||||||
|
-webkit-box-flex: 1;
|
||||||
|
-ms-flex: 1 0 35%;
|
||||||
|
flex: 1 0 35%;
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-box-direction: normal;
|
||||||
|
-ms-flex-direction: column;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .mainview > .subcard article {
|
||||||
|
background-color: #f2f2f2;
|
||||||
|
max-height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .mainview > .subcard article p {
|
||||||
|
line-height: 1.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .mainview > .subcard article p:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .mainview > .subcard article p:not(:last-child) {
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .mainview > .subcard article h2 {
|
||||||
|
font-size: 36px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .mainview > .subcard article h2:not(:first-child) {
|
||||||
|
margin-top: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .mainview > .subcard article .column:not(.zoomable-wrapper) {
|
||||||
|
margin: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .mainview > .subcard article a {
|
||||||
|
margin: -0px -5px -20px -5px;
|
||||||
|
padding: 0px 5px 10px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .mainview > .subcard .subcard-content {
|
||||||
|
overflow: hidden;
|
||||||
|
background-color: #f2f2f2;
|
||||||
|
-webkit-box-shadow: 1px 3px 8px rgba(0, 0, 0, 0.5);
|
||||||
|
box-shadow: 1px 3px 8px rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .mainview > .subcard .subcard-content.dynamic-height {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .mainview > .subcard .subcard-content:not(.dynamic-height) {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .mainview > .subcard .zoomable-wrapper {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding-top: 30px;
|
||||||
|
padding-bottom: 60px;
|
||||||
|
-ms-flex-item-align: center;
|
||||||
|
-ms-grid-row-align: center;
|
||||||
|
align-self: center;
|
||||||
|
-webkit-box-flex: 0;
|
||||||
|
-ms-flex: 0;
|
||||||
|
flex: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .mainview > .subcard .imggroup {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding-top: 30px;
|
||||||
|
padding-bottom: 60px;
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-box-pack: space-evenly;
|
||||||
|
-ms-flex-pack: space-evenly;
|
||||||
|
justify-content: space-evenly;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card > .zoomable-wrapper figcaption,
|
||||||
|
.info-card .mainview > .subcard figcaption {
|
||||||
|
width: 100%;
|
||||||
|
position: absolute;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card > .zoomable-wrapper figcaption.zoomcap,
|
||||||
|
.info-card .mainview > .subcard figcaption.zoomcap {
|
||||||
|
font-size: 8px;
|
||||||
|
display: none;
|
||||||
|
top: calc(100% + 10px);
|
||||||
|
padding: 10px;
|
||||||
|
background-color: #f2f2f2;
|
||||||
|
-webkit-box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.5);
|
||||||
|
box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.5);
|
||||||
|
color: #191919;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card > .zoomable-wrapper figcaption.cap,
|
||||||
|
.info-card .mainview > .subcard figcaption.cap {
|
||||||
|
bottom: -40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcard.leben_des_kunstwerks .titlebar {
|
||||||
|
border-bottom: 10px solid #80b1d3;
|
||||||
|
z-index: 10;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcard.licht_und_farbe .titlebar {
|
||||||
|
border-bottom: 10px solid #80b1d3;
|
||||||
|
z-index: 10;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcard.extra_info .titlebar {
|
||||||
|
border-bottom: 10px solid #80b1d3;
|
||||||
|
z-index: 10;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcard.artist .titlebar {
|
||||||
|
border-bottom: 10px solid #fdb462;
|
||||||
|
z-index: 10;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcard.komposition .titlebar {
|
||||||
|
border-bottom: 10px solid #80b1d3;
|
||||||
|
z-index: 10;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcard.details .titlebar {
|
||||||
|
border-bottom: 10px solid #bc80bd;
|
||||||
|
z-index: 10;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .subcard.thema .titlebar {
|
||||||
|
border-bottom: 10px solid #fb8072;
|
||||||
|
z-index: 10;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card.debug .mainview > .subcard a {
|
||||||
|
background-color: rgba(102, 51, 153, 0.239);
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card.debug article {
|
||||||
|
background-color: rgba(0, 255, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card.debug .subcard .view-button {
|
||||||
|
background-color: rgba(0, 255, 0, 0.5) !important;
|
||||||
|
}
|
11
lib/card/test/example/_theme/css/subcard.css.map
Normal file
After Width: | Height: | Size: 275 KiB |
@ -0,0 +1,9 @@
|
|||||||
|
The recommended way to use the Material Icons font is by linking to the web font hosted on Google Fonts:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
|
||||||
|
rel="stylesheet">
|
||||||
|
```
|
||||||
|
|
||||||
|
Read more in our full usage guide:
|
||||||
|
http://google.github.io/material-design-icons/#icon-font-for-the-web
|
932
lib/card/test/example/_theme/fonts/material-icon-font/codepoints
Normal file
@ -0,0 +1,932 @@
|
|||||||
|
3d_rotation e84d
|
||||||
|
ac_unit eb3b
|
||||||
|
access_alarm e190
|
||||||
|
access_alarms e191
|
||||||
|
access_time e192
|
||||||
|
accessibility e84e
|
||||||
|
accessible e914
|
||||||
|
account_balance e84f
|
||||||
|
account_balance_wallet e850
|
||||||
|
account_box e851
|
||||||
|
account_circle e853
|
||||||
|
adb e60e
|
||||||
|
add e145
|
||||||
|
add_a_photo e439
|
||||||
|
add_alarm e193
|
||||||
|
add_alert e003
|
||||||
|
add_box e146
|
||||||
|
add_circle e147
|
||||||
|
add_circle_outline e148
|
||||||
|
add_location e567
|
||||||
|
add_shopping_cart e854
|
||||||
|
add_to_photos e39d
|
||||||
|
add_to_queue e05c
|
||||||
|
adjust e39e
|
||||||
|
airline_seat_flat e630
|
||||||
|
airline_seat_flat_angled e631
|
||||||
|
airline_seat_individual_suite e632
|
||||||
|
airline_seat_legroom_extra e633
|
||||||
|
airline_seat_legroom_normal e634
|
||||||
|
airline_seat_legroom_reduced e635
|
||||||
|
airline_seat_recline_extra e636
|
||||||
|
airline_seat_recline_normal e637
|
||||||
|
airplanemode_active e195
|
||||||
|
airplanemode_inactive e194
|
||||||
|
airplay e055
|
||||||
|
airport_shuttle eb3c
|
||||||
|
alarm e855
|
||||||
|
alarm_add e856
|
||||||
|
alarm_off e857
|
||||||
|
alarm_on e858
|
||||||
|
album e019
|
||||||
|
all_inclusive eb3d
|
||||||
|
all_out e90b
|
||||||
|
android e859
|
||||||
|
announcement e85a
|
||||||
|
apps e5c3
|
||||||
|
archive e149
|
||||||
|
arrow_back e5c4
|
||||||
|
arrow_downward e5db
|
||||||
|
arrow_drop_down e5c5
|
||||||
|
arrow_drop_down_circle e5c6
|
||||||
|
arrow_drop_up e5c7
|
||||||
|
arrow_forward e5c8
|
||||||
|
arrow_upward e5d8
|
||||||
|
art_track e060
|
||||||
|
aspect_ratio e85b
|
||||||
|
assessment e85c
|
||||||
|
assignment e85d
|
||||||
|
assignment_ind e85e
|
||||||
|
assignment_late e85f
|
||||||
|
assignment_return e860
|
||||||
|
assignment_returned e861
|
||||||
|
assignment_turned_in e862
|
||||||
|
assistant e39f
|
||||||
|
assistant_photo e3a0
|
||||||
|
attach_file e226
|
||||||
|
attach_money e227
|
||||||
|
attachment e2bc
|
||||||
|
audiotrack e3a1
|
||||||
|
autorenew e863
|
||||||
|
av_timer e01b
|
||||||
|
backspace e14a
|
||||||
|
backup e864
|
||||||
|
battery_alert e19c
|
||||||
|
battery_charging_full e1a3
|
||||||
|
battery_full e1a4
|
||||||
|
battery_std e1a5
|
||||||
|
battery_unknown e1a6
|
||||||
|
beach_access eb3e
|
||||||
|
beenhere e52d
|
||||||
|
block e14b
|
||||||
|
bluetooth e1a7
|
||||||
|
bluetooth_audio e60f
|
||||||
|
bluetooth_connected e1a8
|
||||||
|
bluetooth_disabled e1a9
|
||||||
|
bluetooth_searching e1aa
|
||||||
|
blur_circular e3a2
|
||||||
|
blur_linear e3a3
|
||||||
|
blur_off e3a4
|
||||||
|
blur_on e3a5
|
||||||
|
book e865
|
||||||
|
bookmark e866
|
||||||
|
bookmark_border e867
|
||||||
|
border_all e228
|
||||||
|
border_bottom e229
|
||||||
|
border_clear e22a
|
||||||
|
border_color e22b
|
||||||
|
border_horizontal e22c
|
||||||
|
border_inner e22d
|
||||||
|
border_left e22e
|
||||||
|
border_outer e22f
|
||||||
|
border_right e230
|
||||||
|
border_style e231
|
||||||
|
border_top e232
|
||||||
|
border_vertical e233
|
||||||
|
branding_watermark e06b
|
||||||
|
brightness_1 e3a6
|
||||||
|
brightness_2 e3a7
|
||||||
|
brightness_3 e3a8
|
||||||
|
brightness_4 e3a9
|
||||||
|
brightness_5 e3aa
|
||||||
|
brightness_6 e3ab
|
||||||
|
brightness_7 e3ac
|
||||||
|
brightness_auto e1ab
|
||||||
|
brightness_high e1ac
|
||||||
|
brightness_low e1ad
|
||||||
|
brightness_medium e1ae
|
||||||
|
broken_image e3ad
|
||||||
|
brush e3ae
|
||||||
|
bubble_chart e6dd
|
||||||
|
bug_report e868
|
||||||
|
build e869
|
||||||
|
burst_mode e43c
|
||||||
|
business e0af
|
||||||
|
business_center eb3f
|
||||||
|
cached e86a
|
||||||
|
cake e7e9
|
||||||
|
call e0b0
|
||||||
|
call_end e0b1
|
||||||
|
call_made e0b2
|
||||||
|
call_merge e0b3
|
||||||
|
call_missed e0b4
|
||||||
|
call_missed_outgoing e0e4
|
||||||
|
call_received e0b5
|
||||||
|
call_split e0b6
|
||||||
|
call_to_action e06c
|
||||||
|
camera e3af
|
||||||
|
camera_alt e3b0
|
||||||
|
camera_enhance e8fc
|
||||||
|
camera_front e3b1
|
||||||
|
camera_rear e3b2
|
||||||
|
camera_roll e3b3
|
||||||
|
cancel e5c9
|
||||||
|
card_giftcard e8f6
|
||||||
|
card_membership e8f7
|
||||||
|
card_travel e8f8
|
||||||
|
casino eb40
|
||||||
|
cast e307
|
||||||
|
cast_connected e308
|
||||||
|
center_focus_strong e3b4
|
||||||
|
center_focus_weak e3b5
|
||||||
|
change_history e86b
|
||||||
|
chat e0b7
|
||||||
|
chat_bubble e0ca
|
||||||
|
chat_bubble_outline e0cb
|
||||||
|
check e5ca
|
||||||
|
check_box e834
|
||||||
|
check_box_outline_blank e835
|
||||||
|
check_circle e86c
|
||||||
|
chevron_left e5cb
|
||||||
|
chevron_right e5cc
|
||||||
|
child_care eb41
|
||||||
|
child_friendly eb42
|
||||||
|
chrome_reader_mode e86d
|
||||||
|
class e86e
|
||||||
|
clear e14c
|
||||||
|
clear_all e0b8
|
||||||
|
close e5cd
|
||||||
|
closed_caption e01c
|
||||||
|
cloud e2bd
|
||||||
|
cloud_circle e2be
|
||||||
|
cloud_done e2bf
|
||||||
|
cloud_download e2c0
|
||||||
|
cloud_off e2c1
|
||||||
|
cloud_queue e2c2
|
||||||
|
cloud_upload e2c3
|
||||||
|
code e86f
|
||||||
|
collections e3b6
|
||||||
|
collections_bookmark e431
|
||||||
|
color_lens e3b7
|
||||||
|
colorize e3b8
|
||||||
|
comment e0b9
|
||||||
|
compare e3b9
|
||||||
|
compare_arrows e915
|
||||||
|
computer e30a
|
||||||
|
confirmation_number e638
|
||||||
|
contact_mail e0d0
|
||||||
|
contact_phone e0cf
|
||||||
|
contacts e0ba
|
||||||
|
content_copy e14d
|
||||||
|
content_cut e14e
|
||||||
|
content_paste e14f
|
||||||
|
control_point e3ba
|
||||||
|
control_point_duplicate e3bb
|
||||||
|
copyright e90c
|
||||||
|
create e150
|
||||||
|
create_new_folder e2cc
|
||||||
|
credit_card e870
|
||||||
|
crop e3be
|
||||||
|
crop_16_9 e3bc
|
||||||
|
crop_3_2 e3bd
|
||||||
|
crop_5_4 e3bf
|
||||||
|
crop_7_5 e3c0
|
||||||
|
crop_din e3c1
|
||||||
|
crop_free e3c2
|
||||||
|
crop_landscape e3c3
|
||||||
|
crop_original e3c4
|
||||||
|
crop_portrait e3c5
|
||||||
|
crop_rotate e437
|
||||||
|
crop_square e3c6
|
||||||
|
dashboard e871
|
||||||
|
data_usage e1af
|
||||||
|
date_range e916
|
||||||
|
dehaze e3c7
|
||||||
|
delete e872
|
||||||
|
delete_forever e92b
|
||||||
|
delete_sweep e16c
|
||||||
|
description e873
|
||||||
|
desktop_mac e30b
|
||||||
|
desktop_windows e30c
|
||||||
|
details e3c8
|
||||||
|
developer_board e30d
|
||||||
|
developer_mode e1b0
|
||||||
|
device_hub e335
|
||||||
|
devices e1b1
|
||||||
|
devices_other e337
|
||||||
|
dialer_sip e0bb
|
||||||
|
dialpad e0bc
|
||||||
|
directions e52e
|
||||||
|
directions_bike e52f
|
||||||
|
directions_boat e532
|
||||||
|
directions_bus e530
|
||||||
|
directions_car e531
|
||||||
|
directions_railway e534
|
||||||
|
directions_run e566
|
||||||
|
directions_subway e533
|
||||||
|
directions_transit e535
|
||||||
|
directions_walk e536
|
||||||
|
disc_full e610
|
||||||
|
dns e875
|
||||||
|
do_not_disturb e612
|
||||||
|
do_not_disturb_alt e611
|
||||||
|
do_not_disturb_off e643
|
||||||
|
do_not_disturb_on e644
|
||||||
|
dock e30e
|
||||||
|
domain e7ee
|
||||||
|
done e876
|
||||||
|
done_all e877
|
||||||
|
donut_large e917
|
||||||
|
donut_small e918
|
||||||
|
drafts e151
|
||||||
|
drag_handle e25d
|
||||||
|
drive_eta e613
|
||||||
|
dvr e1b2
|
||||||
|
edit e3c9
|
||||||
|
edit_location e568
|
||||||
|
eject e8fb
|
||||||
|
email e0be
|
||||||
|
enhanced_encryption e63f
|
||||||
|
equalizer e01d
|
||||||
|
error e000
|
||||||
|
error_outline e001
|
||||||
|
euro_symbol e926
|
||||||
|
ev_station e56d
|
||||||
|
event e878
|
||||||
|
event_available e614
|
||||||
|
event_busy e615
|
||||||
|
event_note e616
|
||||||
|
event_seat e903
|
||||||
|
exit_to_app e879
|
||||||
|
expand_less e5ce
|
||||||
|
expand_more e5cf
|
||||||
|
explicit e01e
|
||||||
|
explore e87a
|
||||||
|
exposure e3ca
|
||||||
|
exposure_neg_1 e3cb
|
||||||
|
exposure_neg_2 e3cc
|
||||||
|
exposure_plus_1 e3cd
|
||||||
|
exposure_plus_2 e3ce
|
||||||
|
exposure_zero e3cf
|
||||||
|
extension e87b
|
||||||
|
face e87c
|
||||||
|
fast_forward e01f
|
||||||
|
fast_rewind e020
|
||||||
|
favorite e87d
|
||||||
|
favorite_border e87e
|
||||||
|
featured_play_list e06d
|
||||||
|
featured_video e06e
|
||||||
|
feedback e87f
|
||||||
|
fiber_dvr e05d
|
||||||
|
fiber_manual_record e061
|
||||||
|
fiber_new e05e
|
||||||
|
fiber_pin e06a
|
||||||
|
fiber_smart_record e062
|
||||||
|
file_download e2c4
|
||||||
|
file_upload e2c6
|
||||||
|
filter e3d3
|
||||||
|
filter_1 e3d0
|
||||||
|
filter_2 e3d1
|
||||||
|
filter_3 e3d2
|
||||||
|
filter_4 e3d4
|
||||||
|
filter_5 e3d5
|
||||||
|
filter_6 e3d6
|
||||||
|
filter_7 e3d7
|
||||||
|
filter_8 e3d8
|
||||||
|
filter_9 e3d9
|
||||||
|
filter_9_plus e3da
|
||||||
|
filter_b_and_w e3db
|
||||||
|
filter_center_focus e3dc
|
||||||
|
filter_drama e3dd
|
||||||
|
filter_frames e3de
|
||||||
|
filter_hdr e3df
|
||||||
|
filter_list e152
|
||||||
|
filter_none e3e0
|
||||||
|
filter_tilt_shift e3e2
|
||||||
|
filter_vintage e3e3
|
||||||
|
find_in_page e880
|
||||||
|
find_replace e881
|
||||||
|
fingerprint e90d
|
||||||
|
first_page e5dc
|
||||||
|
fitness_center eb43
|
||||||
|
flag e153
|
||||||
|
flare e3e4
|
||||||
|
flash_auto e3e5
|
||||||
|
flash_off e3e6
|
||||||
|
flash_on e3e7
|
||||||
|
flight e539
|
||||||
|
flight_land e904
|
||||||
|
flight_takeoff e905
|
||||||
|
flip e3e8
|
||||||
|
flip_to_back e882
|
||||||
|
flip_to_front e883
|
||||||
|
folder e2c7
|
||||||
|
folder_open e2c8
|
||||||
|
folder_shared e2c9
|
||||||
|
folder_special e617
|
||||||
|
font_download e167
|
||||||
|
format_align_center e234
|
||||||
|
format_align_justify e235
|
||||||
|
format_align_left e236
|
||||||
|
format_align_right e237
|
||||||
|
format_bold e238
|
||||||
|
format_clear e239
|
||||||
|
format_color_fill e23a
|
||||||
|
format_color_reset e23b
|
||||||
|
format_color_text e23c
|
||||||
|
format_indent_decrease e23d
|
||||||
|
format_indent_increase e23e
|
||||||
|
format_italic e23f
|
||||||
|
format_line_spacing e240
|
||||||
|
format_list_bulleted e241
|
||||||
|
format_list_numbered e242
|
||||||
|
format_paint e243
|
||||||
|
format_quote e244
|
||||||
|
format_shapes e25e
|
||||||
|
format_size e245
|
||||||
|
format_strikethrough e246
|
||||||
|
format_textdirection_l_to_r e247
|
||||||
|
format_textdirection_r_to_l e248
|
||||||
|
format_underlined e249
|
||||||
|
forum e0bf
|
||||||
|
forward e154
|
||||||
|
forward_10 e056
|
||||||
|
forward_30 e057
|
||||||
|
forward_5 e058
|
||||||
|
free_breakfast eb44
|
||||||
|
fullscreen e5d0
|
||||||
|
fullscreen_exit e5d1
|
||||||
|
functions e24a
|
||||||
|
g_translate e927
|
||||||
|
gamepad e30f
|
||||||
|
games e021
|
||||||
|
gavel e90e
|
||||||
|
gesture e155
|
||||||
|
get_app e884
|
||||||
|
gif e908
|
||||||
|
golf_course eb45
|
||||||
|
gps_fixed e1b3
|
||||||
|
gps_not_fixed e1b4
|
||||||
|
gps_off e1b5
|
||||||
|
grade e885
|
||||||
|
gradient e3e9
|
||||||
|
grain e3ea
|
||||||
|
graphic_eq e1b8
|
||||||
|
grid_off e3eb
|
||||||
|
grid_on e3ec
|
||||||
|
group e7ef
|
||||||
|
group_add e7f0
|
||||||
|
group_work e886
|
||||||
|
hd e052
|
||||||
|
hdr_off e3ed
|
||||||
|
hdr_on e3ee
|
||||||
|
hdr_strong e3f1
|
||||||
|
hdr_weak e3f2
|
||||||
|
headset e310
|
||||||
|
headset_mic e311
|
||||||
|
healing e3f3
|
||||||
|
hearing e023
|
||||||
|
help e887
|
||||||
|
help_outline e8fd
|
||||||
|
high_quality e024
|
||||||
|
highlight e25f
|
||||||
|
highlight_off e888
|
||||||
|
history e889
|
||||||
|
home e88a
|
||||||
|
hot_tub eb46
|
||||||
|
hotel e53a
|
||||||
|
hourglass_empty e88b
|
||||||
|
hourglass_full e88c
|
||||||
|
http e902
|
||||||
|
https e88d
|
||||||
|
image e3f4
|
||||||
|
image_aspect_ratio e3f5
|
||||||
|
import_contacts e0e0
|
||||||
|
import_export e0c3
|
||||||
|
important_devices e912
|
||||||
|
inbox e156
|
||||||
|
indeterminate_check_box e909
|
||||||
|
info e88e
|
||||||
|
info_outline e88f
|
||||||
|
input e890
|
||||||
|
insert_chart e24b
|
||||||
|
insert_comment e24c
|
||||||
|
insert_drive_file e24d
|
||||||
|
insert_emoticon e24e
|
||||||
|
insert_invitation e24f
|
||||||
|
insert_link e250
|
||||||
|
insert_photo e251
|
||||||
|
invert_colors e891
|
||||||
|
invert_colors_off e0c4
|
||||||
|
iso e3f6
|
||||||
|
keyboard e312
|
||||||
|
keyboard_arrow_down e313
|
||||||
|
keyboard_arrow_left e314
|
||||||
|
keyboard_arrow_right e315
|
||||||
|
keyboard_arrow_up e316
|
||||||
|
keyboard_backspace e317
|
||||||
|
keyboard_capslock e318
|
||||||
|
keyboard_hide e31a
|
||||||
|
keyboard_return e31b
|
||||||
|
keyboard_tab e31c
|
||||||
|
keyboard_voice e31d
|
||||||
|
kitchen eb47
|
||||||
|
label e892
|
||||||
|
label_outline e893
|
||||||
|
landscape e3f7
|
||||||
|
language e894
|
||||||
|
laptop e31e
|
||||||
|
laptop_chromebook e31f
|
||||||
|
laptop_mac e320
|
||||||
|
laptop_windows e321
|
||||||
|
last_page e5dd
|
||||||
|
launch e895
|
||||||
|
layers e53b
|
||||||
|
layers_clear e53c
|
||||||
|
leak_add e3f8
|
||||||
|
leak_remove e3f9
|
||||||
|
lens e3fa
|
||||||
|
library_add e02e
|
||||||
|
library_books e02f
|
||||||
|
library_music e030
|
||||||
|
lightbulb_outline e90f
|
||||||
|
line_style e919
|
||||||
|
line_weight e91a
|
||||||
|
linear_scale e260
|
||||||
|
link e157
|
||||||
|
linked_camera e438
|
||||||
|
list e896
|
||||||
|
live_help e0c6
|
||||||
|
live_tv e639
|
||||||
|
local_activity e53f
|
||||||
|
local_airport e53d
|
||||||
|
local_atm e53e
|
||||||
|
local_bar e540
|
||||||
|
local_cafe e541
|
||||||
|
local_car_wash e542
|
||||||
|
local_convenience_store e543
|
||||||
|
local_dining e556
|
||||||
|
local_drink e544
|
||||||
|
local_florist e545
|
||||||
|
local_gas_station e546
|
||||||
|
local_grocery_store e547
|
||||||
|
local_hospital e548
|
||||||
|
local_hotel e549
|
||||||
|
local_laundry_service e54a
|
||||||
|
local_library e54b
|
||||||
|
local_mall e54c
|
||||||
|
local_movies e54d
|
||||||
|
local_offer e54e
|
||||||
|
local_parking e54f
|
||||||
|
local_pharmacy e550
|
||||||
|
local_phone e551
|
||||||
|
local_pizza e552
|
||||||
|
local_play e553
|
||||||
|
local_post_office e554
|
||||||
|
local_printshop e555
|
||||||
|
local_see e557
|
||||||
|
local_shipping e558
|
||||||
|
local_taxi e559
|
||||||
|
location_city e7f1
|
||||||
|
location_disabled e1b6
|
||||||
|
location_off e0c7
|
||||||
|
location_on e0c8
|
||||||
|
location_searching e1b7
|
||||||
|
lock e897
|
||||||
|
lock_open e898
|
||||||
|
lock_outline e899
|
||||||
|
looks e3fc
|
||||||
|
looks_3 e3fb
|
||||||
|
looks_4 e3fd
|
||||||
|
looks_5 e3fe
|
||||||
|
looks_6 e3ff
|
||||||
|
looks_one e400
|
||||||
|
looks_two e401
|
||||||
|
loop e028
|
||||||
|
loupe e402
|
||||||
|
low_priority e16d
|
||||||
|
loyalty e89a
|
||||||
|
mail e158
|
||||||
|
mail_outline e0e1
|
||||||
|
map e55b
|
||||||
|
markunread e159
|
||||||
|
markunread_mailbox e89b
|
||||||
|
memory e322
|
||||||
|
menu e5d2
|
||||||
|
merge_type e252
|
||||||
|
message e0c9
|
||||||
|
mic e029
|
||||||
|
mic_none e02a
|
||||||
|
mic_off e02b
|
||||||
|
mms e618
|
||||||
|
mode_comment e253
|
||||||
|
mode_edit e254
|
||||||
|
monetization_on e263
|
||||||
|
money_off e25c
|
||||||
|
monochrome_photos e403
|
||||||
|
mood e7f2
|
||||||
|
mood_bad e7f3
|
||||||
|
more e619
|
||||||
|
more_horiz e5d3
|
||||||
|
more_vert e5d4
|
||||||
|
motorcycle e91b
|
||||||
|
mouse e323
|
||||||
|
move_to_inbox e168
|
||||||
|
movie e02c
|
||||||
|
movie_creation e404
|
||||||
|
movie_filter e43a
|
||||||
|
multiline_chart e6df
|
||||||
|
music_note e405
|
||||||
|
music_video e063
|
||||||
|
my_location e55c
|
||||||
|
nature e406
|
||||||
|
nature_people e407
|
||||||
|
navigate_before e408
|
||||||
|
navigate_next e409
|
||||||
|
navigation e55d
|
||||||
|
near_me e569
|
||||||
|
network_cell e1b9
|
||||||
|
network_check e640
|
||||||
|
network_locked e61a
|
||||||
|
network_wifi e1ba
|
||||||
|
new_releases e031
|
||||||
|
next_week e16a
|
||||||
|
nfc e1bb
|
||||||
|
no_encryption e641
|
||||||
|
no_sim e0cc
|
||||||
|
not_interested e033
|
||||||
|
note e06f
|
||||||
|
note_add e89c
|
||||||
|
notifications e7f4
|
||||||
|
notifications_active e7f7
|
||||||
|
notifications_none e7f5
|
||||||
|
notifications_off e7f6
|
||||||
|
notifications_paused e7f8
|
||||||
|
offline_pin e90a
|
||||||
|
ondemand_video e63a
|
||||||
|
opacity e91c
|
||||||
|
open_in_browser e89d
|
||||||
|
open_in_new e89e
|
||||||
|
open_with e89f
|
||||||
|
pages e7f9
|
||||||
|
pageview e8a0
|
||||||
|
palette e40a
|
||||||
|
pan_tool e925
|
||||||
|
panorama e40b
|
||||||
|
panorama_fish_eye e40c
|
||||||
|
panorama_horizontal e40d
|
||||||
|
panorama_vertical e40e
|
||||||
|
panorama_wide_angle e40f
|
||||||
|
party_mode e7fa
|
||||||
|
pause e034
|
||||||
|
pause_circle_filled e035
|
||||||
|
pause_circle_outline e036
|
||||||
|
payment e8a1
|
||||||
|
people e7fb
|
||||||
|
people_outline e7fc
|
||||||
|
perm_camera_mic e8a2
|
||||||
|
perm_contact_calendar e8a3
|
||||||
|
perm_data_setting e8a4
|
||||||
|
perm_device_information e8a5
|
||||||
|
perm_identity e8a6
|
||||||
|
perm_media e8a7
|
||||||
|
perm_phone_msg e8a8
|
||||||
|
perm_scan_wifi e8a9
|
||||||
|
person e7fd
|
||||||
|
person_add e7fe
|
||||||
|
person_outline e7ff
|
||||||
|
person_pin e55a
|
||||||
|
person_pin_circle e56a
|
||||||
|
personal_video e63b
|
||||||
|
pets e91d
|
||||||
|
phone e0cd
|
||||||
|
phone_android e324
|
||||||
|
phone_bluetooth_speaker e61b
|
||||||
|
phone_forwarded e61c
|
||||||
|
phone_in_talk e61d
|
||||||
|
phone_iphone e325
|
||||||
|
phone_locked e61e
|
||||||
|
phone_missed e61f
|
||||||
|
phone_paused e620
|
||||||
|
phonelink e326
|
||||||
|
phonelink_erase e0db
|
||||||
|
phonelink_lock e0dc
|
||||||
|
phonelink_off e327
|
||||||
|
phonelink_ring e0dd
|
||||||
|
phonelink_setup e0de
|
||||||
|
photo e410
|
||||||
|
photo_album e411
|
||||||
|
photo_camera e412
|
||||||
|
photo_filter e43b
|
||||||
|
photo_library e413
|
||||||
|
photo_size_select_actual e432
|
||||||
|
photo_size_select_large e433
|
||||||
|
photo_size_select_small e434
|
||||||
|
picture_as_pdf e415
|
||||||
|
picture_in_picture e8aa
|
||||||
|
picture_in_picture_alt e911
|
||||||
|
pie_chart e6c4
|
||||||
|
pie_chart_outlined e6c5
|
||||||
|
pin_drop e55e
|
||||||
|
place e55f
|
||||||
|
play_arrow e037
|
||||||
|
play_circle_filled e038
|
||||||
|
play_circle_outline e039
|
||||||
|
play_for_work e906
|
||||||
|
playlist_add e03b
|
||||||
|
playlist_add_check e065
|
||||||
|
playlist_play e05f
|
||||||
|
plus_one e800
|
||||||
|
poll e801
|
||||||
|
polymer e8ab
|
||||||
|
pool eb48
|
||||||
|
portable_wifi_off e0ce
|
||||||
|
portrait e416
|
||||||
|
power e63c
|
||||||
|
power_input e336
|
||||||
|
power_settings_new e8ac
|
||||||
|
pregnant_woman e91e
|
||||||
|
present_to_all e0df
|
||||||
|
print e8ad
|
||||||
|
priority_high e645
|
||||||
|
public e80b
|
||||||
|
publish e255
|
||||||
|
query_builder e8ae
|
||||||
|
question_answer e8af
|
||||||
|
queue e03c
|
||||||
|
queue_music e03d
|
||||||
|
queue_play_next e066
|
||||||
|
radio e03e
|
||||||
|
radio_button_checked e837
|
||||||
|
radio_button_unchecked e836
|
||||||
|
rate_review e560
|
||||||
|
receipt e8b0
|
||||||
|
recent_actors e03f
|
||||||
|
record_voice_over e91f
|
||||||
|
redeem e8b1
|
||||||
|
redo e15a
|
||||||
|
refresh e5d5
|
||||||
|
remove e15b
|
||||||
|
remove_circle e15c
|
||||||
|
remove_circle_outline e15d
|
||||||
|
remove_from_queue e067
|
||||||
|
remove_red_eye e417
|
||||||
|
remove_shopping_cart e928
|
||||||
|
reorder e8fe
|
||||||
|
repeat e040
|
||||||
|
repeat_one e041
|
||||||
|
replay e042
|
||||||
|
replay_10 e059
|
||||||
|
replay_30 e05a
|
||||||
|
replay_5 e05b
|
||||||
|
reply e15e
|
||||||
|
reply_all e15f
|
||||||
|
report e160
|
||||||
|
report_problem e8b2
|
||||||
|
restaurant e56c
|
||||||
|
restaurant_menu e561
|
||||||
|
restore e8b3
|
||||||
|
restore_page e929
|
||||||
|
ring_volume e0d1
|
||||||
|
room e8b4
|
||||||
|
room_service eb49
|
||||||
|
rotate_90_degrees_ccw e418
|
||||||
|
rotate_left e419
|
||||||
|
rotate_right e41a
|
||||||
|
rounded_corner e920
|
||||||
|
router e328
|
||||||
|
rowing e921
|
||||||
|
rss_feed e0e5
|
||||||
|
rv_hookup e642
|
||||||
|
satellite e562
|
||||||
|
save e161
|
||||||
|
scanner e329
|
||||||
|
schedule e8b5
|
||||||
|
school e80c
|
||||||
|
screen_lock_landscape e1be
|
||||||
|
screen_lock_portrait e1bf
|
||||||
|
screen_lock_rotation e1c0
|
||||||
|
screen_rotation e1c1
|
||||||
|
screen_share e0e2
|
||||||
|
sd_card e623
|
||||||
|
sd_storage e1c2
|
||||||
|
search e8b6
|
||||||
|
security e32a
|
||||||
|
select_all e162
|
||||||
|
send e163
|
||||||
|
sentiment_dissatisfied e811
|
||||||
|
sentiment_neutral e812
|
||||||
|
sentiment_satisfied e813
|
||||||
|
sentiment_very_dissatisfied e814
|
||||||
|
sentiment_very_satisfied e815
|
||||||
|
settings e8b8
|
||||||
|
settings_applications e8b9
|
||||||
|
settings_backup_restore e8ba
|
||||||
|
settings_bluetooth e8bb
|
||||||
|
settings_brightness e8bd
|
||||||
|
settings_cell e8bc
|
||||||
|
settings_ethernet e8be
|
||||||
|
settings_input_antenna e8bf
|
||||||
|
settings_input_component e8c0
|
||||||
|
settings_input_composite e8c1
|
||||||
|
settings_input_hdmi e8c2
|
||||||
|
settings_input_svideo e8c3
|
||||||
|
settings_overscan e8c4
|
||||||
|
settings_phone e8c5
|
||||||
|
settings_power e8c6
|
||||||
|
settings_remote e8c7
|
||||||
|
settings_system_daydream e1c3
|
||||||
|
settings_voice e8c8
|
||||||
|
share e80d
|
||||||
|
shop e8c9
|
||||||
|
shop_two e8ca
|
||||||
|
shopping_basket e8cb
|
||||||
|
shopping_cart e8cc
|
||||||
|
short_text e261
|
||||||
|
show_chart e6e1
|
||||||
|
shuffle e043
|
||||||
|
signal_cellular_4_bar e1c8
|
||||||
|
signal_cellular_connected_no_internet_4_bar e1cd
|
||||||
|
signal_cellular_no_sim e1ce
|
||||||
|
signal_cellular_null e1cf
|
||||||
|
signal_cellular_off e1d0
|
||||||
|
signal_wifi_4_bar e1d8
|
||||||
|
signal_wifi_4_bar_lock e1d9
|
||||||
|
signal_wifi_off e1da
|
||||||
|
sim_card e32b
|
||||||
|
sim_card_alert e624
|
||||||
|
skip_next e044
|
||||||
|
skip_previous e045
|
||||||
|
slideshow e41b
|
||||||
|
slow_motion_video e068
|
||||||
|
smartphone e32c
|
||||||
|
smoke_free eb4a
|
||||||
|
smoking_rooms eb4b
|
||||||
|
sms e625
|
||||||
|
sms_failed e626
|
||||||
|
snooze e046
|
||||||
|
sort e164
|
||||||
|
sort_by_alpha e053
|
||||||
|
spa eb4c
|
||||||
|
space_bar e256
|
||||||
|
speaker e32d
|
||||||
|
speaker_group e32e
|
||||||
|
speaker_notes e8cd
|
||||||
|
speaker_notes_off e92a
|
||||||
|
speaker_phone e0d2
|
||||||
|
spellcheck e8ce
|
||||||
|
star e838
|
||||||
|
star_border e83a
|
||||||
|
star_half e839
|
||||||
|
stars e8d0
|
||||||
|
stay_current_landscape e0d3
|
||||||
|
stay_current_portrait e0d4
|
||||||
|
stay_primary_landscape e0d5
|
||||||
|
stay_primary_portrait e0d6
|
||||||
|
stop e047
|
||||||
|
stop_screen_share e0e3
|
||||||
|
storage e1db
|
||||||
|
store e8d1
|
||||||
|
store_mall_directory e563
|
||||||
|
straighten e41c
|
||||||
|
streetview e56e
|
||||||
|
strikethrough_s e257
|
||||||
|
style e41d
|
||||||
|
subdirectory_arrow_left e5d9
|
||||||
|
subdirectory_arrow_right e5da
|
||||||
|
subject e8d2
|
||||||
|
subscriptions e064
|
||||||
|
subtitles e048
|
||||||
|
subway e56f
|
||||||
|
supervisor_account e8d3
|
||||||
|
surround_sound e049
|
||||||
|
swap_calls e0d7
|
||||||
|
swap_horiz e8d4
|
||||||
|
swap_vert e8d5
|
||||||
|
swap_vertical_circle e8d6
|
||||||
|
switch_camera e41e
|
||||||
|
switch_video e41f
|
||||||
|
sync e627
|
||||||
|
sync_disabled e628
|
||||||
|
sync_problem e629
|
||||||
|
system_update e62a
|
||||||
|
system_update_alt e8d7
|
||||||
|
tab e8d8
|
||||||
|
tab_unselected e8d9
|
||||||
|
tablet e32f
|
||||||
|
tablet_android e330
|
||||||
|
tablet_mac e331
|
||||||
|
tag_faces e420
|
||||||
|
tap_and_play e62b
|
||||||
|
terrain e564
|
||||||
|
text_fields e262
|
||||||
|
text_format e165
|
||||||
|
textsms e0d8
|
||||||
|
texture e421
|
||||||
|
theaters e8da
|
||||||
|
thumb_down e8db
|
||||||
|
thumb_up e8dc
|
||||||
|
thumbs_up_down e8dd
|
||||||
|
time_to_leave e62c
|
||||||
|
timelapse e422
|
||||||
|
timeline e922
|
||||||
|
timer e425
|
||||||
|
timer_10 e423
|
||||||
|
timer_3 e424
|
||||||
|
timer_off e426
|
||||||
|
title e264
|
||||||
|
toc e8de
|
||||||
|
today e8df
|
||||||
|
toll e8e0
|
||||||
|
tonality e427
|
||||||
|
touch_app e913
|
||||||
|
toys e332
|
||||||
|
track_changes e8e1
|
||||||
|
traffic e565
|
||||||
|
train e570
|
||||||
|
tram e571
|
||||||
|
transfer_within_a_station e572
|
||||||
|
transform e428
|
||||||
|
translate e8e2
|
||||||
|
trending_down e8e3
|
||||||
|
trending_flat e8e4
|
||||||
|
trending_up e8e5
|
||||||
|
tune e429
|
||||||
|
turned_in e8e6
|
||||||
|
turned_in_not e8e7
|
||||||
|
tv e333
|
||||||
|
unarchive e169
|
||||||
|
undo e166
|
||||||
|
unfold_less e5d6
|
||||||
|
unfold_more e5d7
|
||||||
|
update e923
|
||||||
|
usb e1e0
|
||||||
|
verified_user e8e8
|
||||||
|
vertical_align_bottom e258
|
||||||
|
vertical_align_center e259
|
||||||
|
vertical_align_top e25a
|
||||||
|
vibration e62d
|
||||||
|
video_call e070
|
||||||
|
video_label e071
|
||||||
|
video_library e04a
|
||||||
|
videocam e04b
|
||||||
|
videocam_off e04c
|
||||||
|
videogame_asset e338
|
||||||
|
view_agenda e8e9
|
||||||
|
view_array e8ea
|
||||||
|
view_carousel e8eb
|
||||||
|
view_column e8ec
|
||||||
|
view_comfy e42a
|
||||||
|
view_compact e42b
|
||||||
|
view_day e8ed
|
||||||
|
view_headline e8ee
|
||||||
|
view_list e8ef
|
||||||
|
view_module e8f0
|
||||||
|
view_quilt e8f1
|
||||||
|
view_stream e8f2
|
||||||
|
view_week e8f3
|
||||||
|
vignette e435
|
||||||
|
visibility e8f4
|
||||||
|
visibility_off e8f5
|
||||||
|
voice_chat e62e
|
||||||
|
voicemail e0d9
|
||||||
|
volume_down e04d
|
||||||
|
volume_mute e04e
|
||||||
|
volume_off e04f
|
||||||
|
volume_up e050
|
||||||
|
vpn_key e0da
|
||||||
|
vpn_lock e62f
|
||||||
|
wallpaper e1bc
|
||||||
|
warning e002
|
||||||
|
watch e334
|
||||||
|
watch_later e924
|
||||||
|
wb_auto e42c
|
||||||
|
wb_cloudy e42d
|
||||||
|
wb_incandescent e42e
|
||||||
|
wb_iridescent e436
|
||||||
|
wb_sunny e430
|
||||||
|
wc e63d
|
||||||
|
web e051
|
||||||
|
web_asset e069
|
||||||
|
weekend e16b
|
||||||
|
whatshot e80e
|
||||||
|
widgets e1bd
|
||||||
|
wifi e63e
|
||||||
|
wifi_lock e1e1
|
||||||
|
wifi_tethering e1e2
|
||||||
|
work e8f9
|
||||||
|
wrap_text e25b
|
||||||
|
youtube_searched_for e8fa
|
||||||
|
zoom_in e8ff
|
||||||
|
zoom_out e900
|
||||||
|
zoom_out_map e56b
|
@ -0,0 +1,36 @@
|
|||||||
|
@font-face {
|
||||||
|
font-family: 'Material Icons';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url(MaterialIcons-Regular.eot); /* For IE6-8 */
|
||||||
|
src: local('Material Icons'),
|
||||||
|
local('MaterialIcons-Regular'),
|
||||||
|
url(MaterialIcons-Regular.woff2) format('woff2'),
|
||||||
|
url(MaterialIcons-Regular.woff) format('woff'),
|
||||||
|
url(MaterialIcons-Regular.ttf) format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
.material-icons {
|
||||||
|
font-family: 'Material Icons';
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
font-size: 24px; /* Preferred icon size */
|
||||||
|
display: inline-block;
|
||||||
|
line-height: 1;
|
||||||
|
text-transform: none;
|
||||||
|
letter-spacing: normal;
|
||||||
|
word-wrap: normal;
|
||||||
|
white-space: nowrap;
|
||||||
|
direction: ltr;
|
||||||
|
|
||||||
|
/* Support for all WebKit browsers. */
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
/* Support for Safari and Chrome. */
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
|
||||||
|
/* Support for Firefox. */
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
|
||||||
|
/* Support for IE. */
|
||||||
|
font-feature-settings: 'liga';
|
||||||
|
}
|
138
lib/card/test/example/_theme/index.html
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||||
|
<title>HTML Cards</title>
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="css/card.css">
|
||||||
|
<link rel="stylesheet" href="css/subcard.css">
|
||||||
|
<link rel="stylesheet" href="css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="css/popup.css">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
position: fixed;
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box {
|
||||||
|
width: 200px;
|
||||||
|
height: 200px;
|
||||||
|
background-color: blueviolet;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!--
|
||||||
|
<h1>HTML Cards</h1>
|
||||||
|
<p>Some Text on the page. Eiusmod nostrud laborum non nulla in sunt ex cillum quis. Nulla mollit minim Lorem in. Deserunt
|
||||||
|
aliquip cillum dolor adipisicing.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Ea velit consectetur est cillum consectetur adipisicing dolor sunt nostrud. Qui eu ut anim incididunt aute irure do occaecat
|
||||||
|
reprehenderit ea irure ex. Ullamco cupidatat ut duis incididunt consectetur in cillum et Lorem. Ullamco voluptate
|
||||||
|
laborum non consectetur non laborum voluptate minim. Non cillum do eiusmod magna consequat anim exercitation occaecat
|
||||||
|
proident velit.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Qui adipisicing dolor occaecat cupidatat dolore ipsum velit excepteur magna Lorem aliqua consectetur consectetur ipsum. Sunt
|
||||||
|
tempor excepteur amet laborum id enim sunt aute dolor culpa dolor non. Eu anim veniam minim eu cupidatat enim culpa
|
||||||
|
quis dolore. Amet consectetur anim et culpa aliquip consequat reprehenderit fugiat. Aute labore ullamco minim deserunt
|
||||||
|
dolore quis ipsum magna consequat culpa do. Velit proident aliqua ipsum qui dolor veniam amet proident est veniam
|
||||||
|
cillum.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Cupidatat esse ut proident consectetur irure velit esse sint consectetur id est consectetur mollit. Nisi ullamco sunt deserunt
|
||||||
|
consequat tempor adipisicing. Labore reprehenderit tempor aliquip veniam amet culpa excepteur dolore. Tempor aute
|
||||||
|
dolor est sit. Duis laboris mollit est irure dolore pariatur deserunt velit velit elit sit. Labore laborum officia
|
||||||
|
officia anim ipsum officia anim nostrud cillum est anim qui. Dolore non minim eu eiusmod amet in deserunt exercitation
|
||||||
|
anim consectetur commodo occaecat.</p> -->
|
||||||
|
|
||||||
|
<script src="../../../../../lib/3rdparty/all.js"></script>
|
||||||
|
<script src="../../../../../lib/bootstrap.js"></script>
|
||||||
|
<script src="../../../../../lib/3rdparty/inobounce.js"></script>
|
||||||
|
<script src="../../../../../lib/3rdparty/hammer.propagating.js"></script>
|
||||||
|
<script src="./js/all.js"></script>
|
||||||
|
<script src="./js/card.js"></script>
|
||||||
|
<script src="./js/highlight.js"></script>
|
||||||
|
<script src="../../../js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script>
|
||||||
|
setup()
|
||||||
|
async function setup() {
|
||||||
|
|
||||||
|
console.log("Setting up card ...")
|
||||||
|
let config = await Theme.loadConfig()
|
||||||
|
|
||||||
|
console.log("Config loaded ...")
|
||||||
|
|
||||||
|
let scatterContainer = new DOMScatterContainer(document.body, {
|
||||||
|
stopEvents: false,
|
||||||
|
useCapture: false
|
||||||
|
})
|
||||||
|
|
||||||
|
Card.dynamicHeight = true
|
||||||
|
|
||||||
|
function createScatterCard(id) {
|
||||||
|
return ScatterCard.loadAndCreateScatterCard(scatterContainer, id, {
|
||||||
|
basePath: config.tueschDirectory,
|
||||||
|
modules: [
|
||||||
|
// new CardPlugin.LightBox("img-overlay"),
|
||||||
|
// new CardPlugin.EnlargeableThumbnail(".thumbnail-wrapper", ".img-overlay"),
|
||||||
|
// new CardPlugin.Ui("ui"),
|
||||||
|
// new CardPlugin.Speech(".ui", "speech")
|
||||||
|
],
|
||||||
|
onCreated: () => {
|
||||||
|
console.log("Hello")
|
||||||
|
},
|
||||||
|
onClose: () => {
|
||||||
|
console.log("Tried to close the card. This is forbidden here! ;)")
|
||||||
|
}
|
||||||
|
}).catch(e => console.error(e))
|
||||||
|
}
|
||||||
|
|
||||||
|
function enableDebug(element) {
|
||||||
|
element.classList.add("debug")
|
||||||
|
|
||||||
|
}
|
||||||
|
const debug = true
|
||||||
|
|
||||||
|
if (config.cards) {
|
||||||
|
let promises = []
|
||||||
|
config.cards.forEach(card => {
|
||||||
|
let promise = createScatterCard(card)
|
||||||
|
promise.then(el => {
|
||||||
|
if (debug)
|
||||||
|
enableDebug(el)
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
await Promise.all(promises)
|
||||||
|
} else {
|
||||||
|
element = await createScatterCard(config.card)
|
||||||
|
if (debug) enableDebug(element)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
console.log("Card loaded!")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
7
lib/card/test/example/_theme/sass/_colors_001.sass
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
$a: #ff77a5
|
||||||
|
$b: #1eb4e9
|
||||||
|
$c: #22d5a5
|
||||||
|
$d: #f65d3b
|
||||||
|
$e: #fcb95a
|
||||||
|
$f: #1eb4e9
|
||||||
|
$g: #ff77a5
|
7
lib/card/test/example/_theme/sass/_colors_002.sass
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
$a: #f5f3ad //OLD
|
||||||
|
$b: #FF0000 //OLD
|
||||||
|
$c: #99d1ed
|
||||||
|
$d: #aed3b3
|
||||||
|
$e: #FF0000 //OLD
|
||||||
|
$f: #f5adac //
|
||||||
|
$g: #c499ed
|
7
lib/card/test/example/_theme/sass/_colors_003.sass
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
$a: #fb8072
|
||||||
|
$b: #80b1d3
|
||||||
|
$c: #8dd3c7
|
||||||
|
$d: #fdb462
|
||||||
|
$e: #ffed6f
|
||||||
|
$f: #bc80bd
|
||||||
|
$g: #ccebc5
|
7
lib/card/test/example/_theme/sass/_colors_old.sass
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
$a: #e1dea7
|
||||||
|
$b: #dec1b2
|
||||||
|
$c: #c8d9d7
|
||||||
|
$d: #b0c6b2
|
||||||
|
$e: #bebebe
|
||||||
|
$f: #dec1b2
|
||||||
|
$g: #c3c0d1
|
52
lib/card/test/example/_theme/sass/_essentials.scss
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/**
|
||||||
|
The essential.scss defines proerties that
|
||||||
|
are essential for the basic features of an
|
||||||
|
info card and are completely
|
||||||
|
*/
|
||||||
|
.unselectable {
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card {
|
||||||
|
position: absolute;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zoomable-wrapper {
|
||||||
|
display: inline-block;
|
||||||
|
align-self: center;
|
||||||
|
|
||||||
|
figure {
|
||||||
|
// Is required that the zoomable tween works properly.
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Problem with display-block is, that it produces spaces
|
||||||
|
// when elements contain a linebreak. Setting the font-size
|
||||||
|
// to 0 prevents that.
|
||||||
|
font-size: 0;
|
||||||
|
|
||||||
|
figcaption {
|
||||||
|
font-size: initial;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Discuss: There is a weird div that needs to be scaled
|
||||||
|
// alongside. Maybe this introduces the jittering of the graphic.
|
||||||
|
// Try to get rid of it
|
||||||
|
// - SO
|
||||||
|
& > figure > div {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
svg {
|
||||||
|
overflow: visible;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
div {
|
||||||
|
// Resets a weird styling, when certain elements
|
||||||
|
// are (long) clicked on using a touch screen.
|
||||||
|
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||||
|
}
|
43
lib/card/test/example/_theme/sass/_icons.scss
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
|
||||||
|
@import "_variables.scss";
|
||||||
|
$material-icons-font-family: "Material Icons";
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: $material-icons-font-family;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url(../fonts/material-icon-font/MaterialIcons-Regular.eot); /* For IE6-8 */
|
||||||
|
src: local('Material Icons'),
|
||||||
|
local('MaterialIcons-Regular'),
|
||||||
|
url(../fonts/material-icon-font/MaterialIcons-Regular.woff2) format('woff2'),
|
||||||
|
url(../fonts/material-icon-font/MaterialIcons-Regular.woff) format('woff'),
|
||||||
|
url(../fonts/material-icon-font/MaterialIcons-Regular.ttf) format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
.material-icons {
|
||||||
|
font-family: 'Material Icons';
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
font-size: 24px; /* Preferred icon size */
|
||||||
|
display: inline-block;
|
||||||
|
line-height: 1;
|
||||||
|
text-transform: none;
|
||||||
|
letter-spacing: normal;
|
||||||
|
word-wrap: normal;
|
||||||
|
white-space: nowrap;
|
||||||
|
direction: ltr;
|
||||||
|
|
||||||
|
/* Support for all WebKit browsers. */
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
/* Support for Safari and Chrome. */
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
|
||||||
|
/* Support for Firefox. */
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
|
||||||
|
/* Support for IE. */
|
||||||
|
font-feature-settings: 'liga';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
5
lib/card/test/example/_theme/sass/_mixins.scss
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
@mixin beforeClass($selector){
|
||||||
|
@at-root #{selector-unify(&, $selector + ":before")} {
|
||||||
|
@content
|
||||||
|
}
|
||||||
|
}
|
38
lib/card/test/example/_theme/sass/_overrides.scss
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
If any default style by the browser or
|
||||||
|
certain plugins (e.g. Bulma) needs to be overwritten,
|
||||||
|
this can be done in this file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Remove the negative margin from Bulma's columns. */
|
||||||
|
.columns {
|
||||||
|
margin: 0 !important;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
h1,h2,h3,h4,h5,h6 {
|
||||||
|
color: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(:last-child){
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
border-color: unset;
|
||||||
|
border: unset;
|
||||||
|
border-radius: unset;
|
||||||
|
|
||||||
|
&:active,
|
||||||
|
&:hover
|
||||||
|
{
|
||||||
|
border-color: unset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
width: unset;
|
||||||
|
height: unset;
|
||||||
|
}
|
114
lib/card/test/example/_theme/sass/_variables.scss
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
|
||||||
|
|
||||||
|
/* Color */
|
||||||
|
|
||||||
|
$black: #191919;
|
||||||
|
$white: #f2f2f2;
|
||||||
|
$gray-light: #e5e5e5;
|
||||||
|
$gray: #6f6f6e;
|
||||||
|
$gray-dark: #333333;
|
||||||
|
|
||||||
|
|
||||||
|
$blue: #008bd2;
|
||||||
|
$blue-light: #33a2db;
|
||||||
|
$blue-lighter: #99d1ed;
|
||||||
|
$blue-dark: #004669;
|
||||||
|
$blue-darker: #002335;
|
||||||
|
|
||||||
|
$red: #e73230;
|
||||||
|
$red-light: #ff5f5d;
|
||||||
|
$red-lighter: #f5adac;
|
||||||
|
$red-dark: #741918;
|
||||||
|
$red-darker: #3a0c0c;
|
||||||
|
|
||||||
|
$yellow: #e5e133;
|
||||||
|
$yellow-light: #eae75c;
|
||||||
|
$yellow-lighter: #f5f3ad;
|
||||||
|
$yellow-dark: #807d1c;
|
||||||
|
$yellow-darker: #0d2510;
|
||||||
|
|
||||||
|
$green: #349240;
|
||||||
|
$green-light: #85be8c;
|
||||||
|
$green-lighter: #aed3b3;
|
||||||
|
$green-dark: #1a4920;
|
||||||
|
$green-darker: #002335;
|
||||||
|
|
||||||
|
$purple: #6b00d1;
|
||||||
|
$purple-light: #8933da;
|
||||||
|
$purple-lighter: #c499ed;
|
||||||
|
$purple-dark: #360069;
|
||||||
|
$purple-darker: #1b0034;
|
||||||
|
|
||||||
|
|
||||||
|
$tuebingen-red: $red;
|
||||||
|
$link-color: $blue;
|
||||||
|
|
||||||
|
/* Font Properties */
|
||||||
|
$card-font-color: $white;
|
||||||
|
$font-family: "Calibri", sans-serif;
|
||||||
|
|
||||||
|
$tiny-font-size: 8px;
|
||||||
|
$small-font-size: 18px;
|
||||||
|
$regular-font-size: 26px;
|
||||||
|
$large-font-size: 36px;
|
||||||
|
$title-font-size: 52px;
|
||||||
|
|
||||||
|
$strong-font-weight: 700;
|
||||||
|
$medium-font-weight: 500;
|
||||||
|
$light-font-weight: 300;
|
||||||
|
|
||||||
|
/* Spacing */
|
||||||
|
$grid-space: 25px;
|
||||||
|
$default-space: 20px;
|
||||||
|
$article-space: 30px;
|
||||||
|
$border-space: 3* $default-space;
|
||||||
|
|
||||||
|
|
||||||
|
/* Borders */
|
||||||
|
$default-radius: 3px;
|
||||||
|
|
||||||
|
/* Shadows */
|
||||||
|
$near-hover-shadow: 1px 2px 5px rgba(0,0,0,0.5);
|
||||||
|
$medium-hover-shadow: 2px 3px 25px rgba(0,0,0,0.3);
|
||||||
|
|
||||||
|
/*
|
||||||
|
$context: "../../../../../..";
|
||||||
|
$white: #FEFEFE;
|
||||||
|
$shady-white: rgb(240, 240, 240);
|
||||||
|
$gray: #CCC;
|
||||||
|
$dark: #333;
|
||||||
|
$black: #222;
|
||||||
|
|
||||||
|
$small-edge-radius: 3px;
|
||||||
|
$big-edge-radius: 10px;
|
||||||
|
|
||||||
|
$small-pad: 16px;
|
||||||
|
$big-pad: 32px;
|
||||||
|
$tuebingen-red: #e73230;
|
||||||
|
|
||||||
|
$increased-letter-spacing: 0.1em;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$font-color: $black;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$text-font-size: 26px;
|
||||||
|
$medium-font-size: 28px;
|
||||||
|
$large-font-size: 32px;
|
||||||
|
|
||||||
|
$regular-font-size: 1.451rem;
|
||||||
|
|
||||||
|
|
||||||
|
$subtitle-font-size: $medium-font-size;
|
||||||
|
$title-font-size: $subtitle-font-size * 1.641;
|
||||||
|
|
||||||
|
/* Font Weights *//*
|
||||||
|
$strong-font-weight: 700;
|
||||||
|
$medium-font-weight: 500;
|
||||||
|
$light-font-weight: 300;
|
||||||
|
|
||||||
|
*/
|
4
lib/card/test/example/_theme/sass/bundle.sass
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
@import 'card.scss'
|
||||||
|
@import 'subcard.scss'
|
||||||
|
@import 'highlight.scss'
|
||||||
|
@import 'popup.scss'
|
474
lib/card/test/example/_theme/sass/card.scss
Normal file
@ -0,0 +1,474 @@
|
|||||||
|
@import '_mixins.scss';
|
||||||
|
@import '_variables.scss';
|
||||||
|
@import '_essentials.scss';
|
||||||
|
@import '_overrides.scss';
|
||||||
|
@import '_icons.scss';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The card.scss is responsible for styling the top level of the card.
|
||||||
|
*
|
||||||
|
* + Info-Card
|
||||||
|
* ++ Header
|
||||||
|
* +++ Thubnail
|
||||||
|
* +++ Overview
|
||||||
|
* ++ Subcards-Container
|
||||||
|
* +++ n * Subcards
|
||||||
|
*/
|
||||||
|
|
||||||
|
.info-card {
|
||||||
|
font-family: $font-family;
|
||||||
|
color: white;
|
||||||
|
background-color: #333;
|
||||||
|
box-shadow: 1px 3px 8px rgba(0, 0, 0, 0.5);
|
||||||
|
border-radius: 3px;
|
||||||
|
|
||||||
|
.ui {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
padding: 10px;
|
||||||
|
z-index: 11;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.speech {
|
||||||
|
width: 52px;
|
||||||
|
height: 52px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
content: '';
|
||||||
|
|
||||||
|
display: block;
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
z-index: -1;
|
||||||
|
|
||||||
|
// SIZE
|
||||||
|
|
||||||
|
$border: 16px;
|
||||||
|
border-radius: 3px;
|
||||||
|
|
||||||
|
top: -$border/2;
|
||||||
|
left: -$border/2;
|
||||||
|
width: calc(100% + #{$border});
|
||||||
|
height: calc(100% + #{$border});
|
||||||
|
|
||||||
|
// BACKGROUND
|
||||||
|
|
||||||
|
box-shadow: 0 0 15px #008bd2;
|
||||||
|
|
||||||
|
background: repeating-linear-gradient(
|
||||||
|
-45deg,
|
||||||
|
#008bd2,
|
||||||
|
#008bd2 20px,
|
||||||
|
#33a2db 20px,
|
||||||
|
#33a2db 40px
|
||||||
|
);
|
||||||
|
|
||||||
|
// ANIMATION
|
||||||
|
background-size: 56px 56px; /* This is unique for this background, need to find a pattern and develop a formula */
|
||||||
|
background-position-x: 0%;
|
||||||
|
-webkit-animation: 'slide' 20s infinite linear forwards;
|
||||||
|
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 1s;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.speech-plugin-is-reading {
|
||||||
|
.speech.button:before {
|
||||||
|
content: 'stop';
|
||||||
|
}
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes 'slide' {
|
||||||
|
0% {
|
||||||
|
background-position-x: 0%;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
background-position-x: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.img-overlay {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(0, 0, 0, 0.3);
|
||||||
|
z-index: 200;
|
||||||
|
|
||||||
|
//padding: $default-space;
|
||||||
|
|
||||||
|
display: none;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
img {
|
||||||
|
// padding: $default-space;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: contain;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes pulse {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nav {
|
||||||
|
z-index: 200;
|
||||||
|
position: absolute;
|
||||||
|
top: $default-space;
|
||||||
|
right: $default-space;
|
||||||
|
|
||||||
|
> * {
|
||||||
|
margin-right: $default-space / 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
// display: inline-block;
|
||||||
|
color: $link-color;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: $link-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mainview {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
//Inherits from info-card
|
||||||
|
border-radius: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
font-size: $regular-font-size;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
height: 35%;
|
||||||
|
color: $white;
|
||||||
|
background: linear-gradient(to top, $gray-dark, $gray 200%);
|
||||||
|
padding: $default-space * 3;
|
||||||
|
padding-bottom: $default-space;
|
||||||
|
border-radius: inherit;
|
||||||
|
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 2fr;
|
||||||
|
grid-gap: 20px;
|
||||||
|
|
||||||
|
//box-shadow: $near-hover-box-shadow;
|
||||||
|
z-index: 1;
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
-webkit-margin-before: 0;
|
||||||
|
font-size: $title-font-size;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: -2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.overview {
|
||||||
|
// margin-left: $default-space;
|
||||||
|
padding: 0 $default-space;
|
||||||
|
margin-top: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
grid-column-start:2;
|
||||||
|
//justify-content: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.misc {
|
||||||
|
font-size: $regular-font-size;
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 300;
|
||||||
|
opacity: 0.5;
|
||||||
|
margin-bottom: 0.641em;
|
||||||
|
|
||||||
|
// // Added an icon before the build date.
|
||||||
|
// // Just for testing.
|
||||||
|
// &:before {
|
||||||
|
// opacity: 0.5;
|
||||||
|
// position: relative;
|
||||||
|
// top: 5px;
|
||||||
|
// margin-right: 10px;
|
||||||
|
// font-style: normal;
|
||||||
|
// content: "build";
|
||||||
|
// font: {
|
||||||
|
// family: $material-icons-font-family;
|
||||||
|
// };
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.thumbnail-wrapper {
|
||||||
|
overflow: hidden;
|
||||||
|
border-radius: $default-radius;
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
content: ' ';
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
// z-index: 1;
|
||||||
|
box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Discuss: I added this for the thumbnail zoom icon
|
||||||
|
// explicitly. I got rid of the .zoomicon class, because
|
||||||
|
// everything was a zoomicon.
|
||||||
|
// Now every icon is just an icon. The icons directly on the
|
||||||
|
// subcards are card-icons.
|
||||||
|
//
|
||||||
|
// But a name for icons that can be on content elements of any
|
||||||
|
// card page is yet to be found. (e.g. zoomables).
|
||||||
|
.button {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.thumbnail {
|
||||||
|
height: 100%;
|
||||||
|
min-width: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
This mixin selects the elements of $selector
|
||||||
|
and adjust the style it there are n children of this selector
|
||||||
|
inside the parent.
|
||||||
|
*/
|
||||||
|
@mixin childCountIs($selector, $n) {
|
||||||
|
// #{$var} just prints the string to css.
|
||||||
|
#{$selector}:first-child:nth-last-child(#{$n}),
|
||||||
|
#{$selector}:first-child:nth-last-child(#{$n}) ~ #{$selector} {
|
||||||
|
// @content prints the content to the mixin.
|
||||||
|
@content;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.subcards-container {
|
||||||
|
// flex: 1;
|
||||||
|
background-color: $gray-dark;
|
||||||
|
height: 65%;
|
||||||
|
|
||||||
|
// We should use css-grids instead of flexbox here:
|
||||||
|
// https://www.w3.org/TR/css-grid-1/
|
||||||
|
//"Unlike Flexible Box Layout, which is single-axis–oriented,
|
||||||
|
// Grid Layout is optimized for 2-dimensional layouts:
|
||||||
|
// those in which alignment of content is desired in both dimensions."
|
||||||
|
display: grid;
|
||||||
|
|
||||||
|
// Not sure why, but 1fr does not behave in the rows as expected:
|
||||||
|
// Expectation: All space is available and therefore 1fr means
|
||||||
|
// Half of the space available.
|
||||||
|
grid-auto-rows: 1fr;
|
||||||
|
grid-gap: $default-space;
|
||||||
|
padding: $default-space * 3;
|
||||||
|
padding-top: $default-space;
|
||||||
|
|
||||||
|
// The fr stands for fraction and should be preferably used with css grids.
|
||||||
|
grid-template-columns: repeat(9, 1fr);
|
||||||
|
grid-template-areas: '. tl tl tl . tr tr tr .' '. bl bl bl . br br br .';
|
||||||
|
|
||||||
|
@include childCountIs('.subcard-wrapper', 5) {
|
||||||
|
&:nth-child(4) {
|
||||||
|
grid-area: bl;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(5) {
|
||||||
|
grid-area: br;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include childCountIs('.subcard-wrapper', 4) {
|
||||||
|
&:first-child {
|
||||||
|
grid-area: tl;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(2) {
|
||||||
|
grid-area: tr;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(3) {
|
||||||
|
grid-area: bl;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(4) {
|
||||||
|
grid-area: br;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include childCountIs('.subcard-wrapper', 3) {
|
||||||
|
&:first-child {
|
||||||
|
grid-area: tl;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(2) {
|
||||||
|
grid-area: tr;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(3) {
|
||||||
|
grid-row: 2;
|
||||||
|
grid-column: 4 / 7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.subcard-wrapper {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
> div {
|
||||||
|
width: auto;
|
||||||
|
grid-column: span 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-icon,
|
||||||
|
.zoomable-icon {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.speech-only-text {
|
||||||
|
opacity: 0;
|
||||||
|
position: absolute;
|
||||||
|
user-select: none;
|
||||||
|
pointer-events: none;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure {
|
||||||
|
position: relative;
|
||||||
|
border: 3px solid $white;
|
||||||
|
box-shadow: $near-hover-shadow;
|
||||||
|
-webkit-margin-before: 0;
|
||||||
|
-webkit-margin-after: 0;
|
||||||
|
-webkit-margin-start: 0;
|
||||||
|
-webkit-margin-end: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure .icon {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
border-radius: $default-radius 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.view-button.icon {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
padding: 26px 26px;
|
||||||
|
margin: -23px -13px;
|
||||||
|
|
||||||
|
// padding: $default-space/2 $default-space;
|
||||||
|
|
||||||
|
&.inverted {
|
||||||
|
// background-color: transparent;
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
color: $gray-dark;
|
||||||
|
font-size: $large-font-size;
|
||||||
|
text-shadow: 0 0 3px rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
min-width: 44px;
|
||||||
|
min-height: 44px;
|
||||||
|
color: $black;
|
||||||
|
background-color: $white;
|
||||||
|
pointer-events: none;
|
||||||
|
|
||||||
|
&.button {
|
||||||
|
pointer-events: all;
|
||||||
|
border-radius: $default-radius;
|
||||||
|
|
||||||
|
&.corner-button {
|
||||||
|
border-radius: 0;
|
||||||
|
|
||||||
|
&.bottom-right {
|
||||||
|
border-top-left-radius: $default-radius;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.inverted {
|
||||||
|
color: $white;
|
||||||
|
background-color: $black;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.transparent-background {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
color: $white;
|
||||||
|
background-color: $link-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
// This is a nice feature of SASS
|
||||||
|
// It lets you split attributes into
|
||||||
|
// namespaces.
|
||||||
|
//
|
||||||
|
// font-family:#, font-weight:#, font-size:#
|
||||||
|
// ==> font {family: #, weight: #, size: # }
|
||||||
|
font: {
|
||||||
|
family: $material-icons-font-family;
|
||||||
|
size: 36px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include beforeClass('.info') {
|
||||||
|
content: 'info_outline';
|
||||||
|
}
|
||||||
|
|
||||||
|
@include beforeClass('.close') {
|
||||||
|
content: 'close';
|
||||||
|
}
|
||||||
|
|
||||||
|
@include beforeClass('.zoom') {
|
||||||
|
content: 'search';
|
||||||
|
}
|
||||||
|
|
||||||
|
@include beforeClass('.speech') {
|
||||||
|
content: 'record_voice_over';
|
||||||
|
}
|
||||||
|
|
||||||
|
@include beforeClass('.language') {
|
||||||
|
content: 'language';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card.debug {
|
||||||
|
.view-button {
|
||||||
|
background-color: rgba(255, 0, 0, 0.5) !important;
|
||||||
|
|
||||||
|
&.disabled {
|
||||||
|
filter: grayscale(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
6
lib/card/test/example/_theme/sass/editor.scss
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
html, body {
|
||||||
|
position: relative;
|
||||||
|
margin:0;
|
||||||
|
padding:0;
|
||||||
|
height:100%;
|
||||||
|
}
|
12
lib/card/test/example/_theme/sass/highlight.scss
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
circle
|
||||||
|
{
|
||||||
|
stroke-width: 1;
|
||||||
|
stroke: white;
|
||||||
|
fill: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
mask circle
|
||||||
|
{
|
||||||
|
stroke-width: 0;
|
||||||
|
fill: white;
|
||||||
|
}
|
39
lib/card/test/example/_theme/sass/popup.scss
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
@import "_variables.scss";
|
||||||
|
@import "_icons.scss";
|
||||||
|
|
||||||
|
.popup {
|
||||||
|
width: 800px;
|
||||||
|
width: fit-content;
|
||||||
|
min-width: 400px;
|
||||||
|
color: $black;
|
||||||
|
background-color: $white;
|
||||||
|
border-radius: $default-radius;
|
||||||
|
box-shadow: 0 0 100px rgba(0,0,0,0.3),$medium-hover-shadow, 0 0 4px rgba(0,0,0,0.8);
|
||||||
|
padding: $default-space *2* 0.641 $default-space*2;
|
||||||
|
|
||||||
|
img {
|
||||||
|
display: block;
|
||||||
|
margin: auto;
|
||||||
|
|
||||||
|
&:not(:first-child){
|
||||||
|
margin-top: $default-space;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(:last-child){
|
||||||
|
margin-bottom: $default-space;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.notch {
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
border-color: $white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.PopupContent {
|
||||||
|
p:not(:last-child) {
|
||||||
|
margin-bottom: $article-space;
|
||||||
|
}
|
||||||
|
}
|
345
lib/card/test/example/_theme/sass/subcard.scss
Normal file
@ -0,0 +1,345 @@
|
|||||||
|
@import "_variables.scss";
|
||||||
|
|
||||||
|
/**
|
||||||
|
The subcards.scss is responsible for all css of the subcards.
|
||||||
|
Historically, it was always used for the preview-cards on the info-card
|
||||||
|
and the article page of the corresponding subcard.
|
||||||
|
|
||||||
|
Discuss: Personally I would prefer a strict separation from front page
|
||||||
|
and article page. But there may be advantages, when the unit 'subcard'
|
||||||
|
has a stylesheet on it's own.
|
||||||
|
|
||||||
|
- SO
|
||||||
|
|
||||||
|
Structure:
|
||||||
|
|
||||||
|
1. Shared (Preview and Expanded)
|
||||||
|
2. Preview Subcards
|
||||||
|
3. Expanded Subcards
|
||||||
|
*/
|
||||||
|
|
||||||
|
.info-card {
|
||||||
|
/*
|
||||||
|
1. Shared Properties
|
||||||
|
*/
|
||||||
|
.subcard {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
color: $black;
|
||||||
|
position: relative;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subcard-content{
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.titlebar {
|
||||||
|
min-height: 84px;
|
||||||
|
background: linear-gradient(to top, $gray-dark -100%, $gray 200%);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: inherit;
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
color: $white;
|
||||||
|
font-size: $regular-font-size;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 2px;
|
||||||
|
line-height: 1.3em;
|
||||||
|
|
||||||
|
// font-weight: $normal-font-weight;
|
||||||
|
text-align: center;
|
||||||
|
margin: 0;
|
||||||
|
padding: $default-space / 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
2. Preview Properties
|
||||||
|
*/
|
||||||
|
.subcards-container {
|
||||||
|
.subcard-wrapper {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subcard {
|
||||||
|
flex: 1;
|
||||||
|
// Put the subcards before the close button
|
||||||
|
// to avoid closing when pushing subcard.
|
||||||
|
z-index: 1;
|
||||||
|
|
||||||
|
box-shadow: $near-hover-shadow;
|
||||||
|
|
||||||
|
//Required for round borders.
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
$titlebar-height: 27%;
|
||||||
|
|
||||||
|
.titlebar {
|
||||||
|
min-height: $titlebar-height;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subcard-content {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
display: flex;
|
||||||
|
overflow: hidden;
|
||||||
|
flex:1;
|
||||||
|
// height: 100% - $titlebar-height;
|
||||||
|
|
||||||
|
.preview {
|
||||||
|
display: flex;
|
||||||
|
background-color: $white;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
p {
|
||||||
|
//font-size: $large-font-size;
|
||||||
|
// line-height: $large-font-size*1.3;
|
||||||
|
font-style: italic;
|
||||||
|
color: $gray;
|
||||||
|
font-weight: 500;
|
||||||
|
text-align: center;
|
||||||
|
padding: 2 * $default-space;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cover the whole preview area!
|
||||||
|
img {
|
||||||
|
// The position is set to absolute
|
||||||
|
// then we can use the 1fr unit on the
|
||||||
|
// grid element.
|
||||||
|
//
|
||||||
|
// Otherwise it stretches with content.
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
border-radius: $default-radius 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subcard.visited {
|
||||||
|
.icon.info:before {
|
||||||
|
content: "check";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
figure {
|
||||||
|
//Reset some Bulma default styling.
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
3. Article Properties
|
||||||
|
*/
|
||||||
|
.mainview > .subcard {
|
||||||
|
|
||||||
|
background-color: rgba($black,0.8);
|
||||||
|
justify-content: center;
|
||||||
|
.column.content {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.column.content.wide {
|
||||||
|
flex: 1 0 55%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.column.content.narrow {
|
||||||
|
flex: 1 0 35%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
article {
|
||||||
|
|
||||||
|
background-color: $white;
|
||||||
|
max-height: 100%;
|
||||||
|
|
||||||
|
p {
|
||||||
|
line-height: 1.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
p:last-child{
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
p:not(:last-child) {
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: $large-font-size;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2:not(:first-child) {
|
||||||
|
margin-top: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.column:not(.zoomable-wrapper) {
|
||||||
|
margin: $article-space;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
|
||||||
|
margin: -0px -5px -20px -5px;
|
||||||
|
padding: 0px 5px 10px 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.subcard-content{
|
||||||
|
overflow: hidden;
|
||||||
|
background-color: $white;
|
||||||
|
box-shadow: 1px 3px 8px rgba(0, 0, 0, 0.5)
|
||||||
|
}
|
||||||
|
|
||||||
|
.subcard-content.dynamic-height {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subcard-content:not(.dynamic-height){
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zoomable-wrapper {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding-top: $article-space;
|
||||||
|
padding-bottom: 2* $article-space;
|
||||||
|
align-self: center;
|
||||||
|
flex: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.imggroup {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding-top: $article-space;
|
||||||
|
padding-bottom: 2* $article-space;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-evenly;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
& > .zoomable-wrapper,
|
||||||
|
.mainview > .subcard {
|
||||||
|
// figure {
|
||||||
|
// position: relative;
|
||||||
|
// border: 5px solid white;
|
||||||
|
// box-shadow: $near-hover-shadow;
|
||||||
|
// }
|
||||||
|
|
||||||
|
figcaption {
|
||||||
|
width: 100%;
|
||||||
|
position: absolute;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
&.zoomcap {
|
||||||
|
font-size: $tiny-font-size;
|
||||||
|
display: none;
|
||||||
|
top: calc(100% + 10px);
|
||||||
|
padding: $default-space / 2;
|
||||||
|
background-color: $white;
|
||||||
|
box-shadow: $near-hover-shadow;
|
||||||
|
color: $black;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.cap {
|
||||||
|
bottom: -40px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Colors for the card topics.
|
||||||
|
*/
|
||||||
|
@import "_colors_003.sass";
|
||||||
|
|
||||||
|
/* Remap the colors to the 'bundled' groups. */
|
||||||
|
$g: $a;
|
||||||
|
$a: $b;
|
||||||
|
$c: $b;
|
||||||
|
$e: $b;
|
||||||
|
|
||||||
|
@mixin subcard-style($topic-color) {
|
||||||
|
// border: 2px solid $topic-color;
|
||||||
|
.titlebar {
|
||||||
|
border-bottom: 10px solid $topic-color;
|
||||||
|
// box-shadow: 0 2px 5px rgba($topic-color, 0.5);
|
||||||
|
z-index: 10;
|
||||||
|
// background-color: $topic-color;
|
||||||
|
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.subcard.leben_des_kunstwerks {
|
||||||
|
@include subcard-style($a);
|
||||||
|
}
|
||||||
|
|
||||||
|
.subcard.licht_und_farbe {
|
||||||
|
@include subcard-style($b);
|
||||||
|
}
|
||||||
|
|
||||||
|
.subcard.extra_info {
|
||||||
|
@include subcard-style($c);
|
||||||
|
}
|
||||||
|
|
||||||
|
.subcard.artist {
|
||||||
|
@include subcard-style($d);
|
||||||
|
}
|
||||||
|
|
||||||
|
.subcard.komposition {
|
||||||
|
@include subcard-style($e);
|
||||||
|
}
|
||||||
|
|
||||||
|
.subcard.details {
|
||||||
|
@include subcard-style($f);
|
||||||
|
}
|
||||||
|
|
||||||
|
.subcard.thema {
|
||||||
|
@include subcard-style($g);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card.debug {
|
||||||
|
.mainview > .subcard a {
|
||||||
|
background-color: rgba(102, 51, 153, 0.239);
|
||||||
|
}
|
||||||
|
|
||||||
|
article {
|
||||||
|
background-color: rgba(0,255,0,0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.subcard .view-button{
|
||||||
|
background-color: rgba(0, 255, 0, 0.5) !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
40
lib/card/test/example/_theme/templates/article1.html
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Article with 50% Columns</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<article>
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column content" data-innerhtml="col1" data-link="Popup" tabindex="0">
|
||||||
|
<p>Vom Kriegsgott Mars existieren 2 unterschiedlich hochwertige Abgüsse, die nach dem Modell Giambolognas angefertigt
|
||||||
|
wurden. Die unterschiedliche Qualität von Abgüssen ergibt sich aus dem Aufwand der Oberflächenbearbeitung
|
||||||
|
nach dem Guss.</p>
|
||||||
|
</div>
|
||||||
|
<div class="column content" data-innerhtml="col2" data-link="Popup" tabindex="0">
|
||||||
|
<p>Der früheste nachgewiesene Abguss gelangte 1587 als persönliches Geschenk des Künstlers an den sächsischen
|
||||||
|
Kurfürsten Christian I., der dem Bildhauer als Dank eine goldene Kette zukommen ließ. Dieses Dresdner
|
||||||
|
Exemplar ist noch qualitätsvoller als die Braunschweiger Version. Aus dem mit ihm verknüpften Datum wird
|
||||||
|
übrigens auf eine Entstehungszeit des Modells vor 1587 geschlossen.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
38
lib/card/test/example/_theme/templates/article2.html
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Article with 2/3 & 1/3 Columns</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<article>
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column content wide" data-innerhtml="col1" data-link="Popup" tabindex="0">
|
||||||
|
<p>Vom Kriegsgott Mars existieren 2 unterschiedlich hochwertige Abgüsse, die nach dem Modell Giambolognas angefertigt
|
||||||
|
wurden. Die unterschiedliche Qualität von Abgüssen ergibt sich aus dem Aufwand der Oberflächenbearbeitung
|
||||||
|
nach dem Guss.</p>
|
||||||
|
</div>
|
||||||
|
<div class="column content narrow" data-innerhtml="col2" data-link="Popup" tabindex="0">
|
||||||
|
<p>Der früheste nachgewiesene Abguss gelangte 1587 als persönliches Geschenk des Künstlers an den sächsischen
|
||||||
|
Kurfürsten Christian I., der dem Bildhauer als Dank eine goldene Kette zukommen ließ. Dieses Dresdner
|
||||||
|
Exemplar ist noch qualitätsvoller als die Braunschweiger Version. Aus dem mit ihm verknüpften Datum wird
|
||||||
|
übrigens auf eine Entstehungszeit des Modells vor 1587 geschlossen.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
53
lib/card/test/example/_theme/templates/article3.html
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Article with 50% Columns and Imagegroup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
<link rel="import" href="../_theme/templates/templates.html">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<article>
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column content" data-innerhtml="col1" data-link="Popup" tabindex="0">
|
||||||
|
<p>Vom Kriegsgott Mars existieren 2 unterschiedlich hochwertige Abgüsse, die nach dem Modell Giambolognas angefertigt
|
||||||
|
wurden. Die unterschiedliche Qualität von Abgüssen ergibt sich aus dem Aufwand der Oberflächenbearbeitung
|
||||||
|
nach dem Guss.</p>
|
||||||
|
</div>
|
||||||
|
<div class="column content" data-innerhtml="col2" data-link="Popup" tabindex="0">
|
||||||
|
<p>Der früheste nachgewiesene Abguss gelangte 1587 als persönliches Geschenk des Künstlers an den sächsischen
|
||||||
|
Kurfürsten Christian I., der dem Bildhauer als Dank eine goldene Kette zukommen ließ. Dieses Dresdner
|
||||||
|
Exemplar ist noch qualitätsvoller als die Braunschweiger Version. Aus dem mit ihm verknüpften Datum wird
|
||||||
|
übrigens auf eine Entstehungszeit des Modells vor 1587 geschlossen.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="columns is-multiline is-centered" data-innerhtml="bottom" tabindex="0" data-blocks="Zoomable Figure" placeholder="Add zoomable figures here...">
|
||||||
|
<div class="column" data-blocks="Zoomable Figure">
|
||||||
|
<figure>
|
||||||
|
<img src="../assets/women.jpeg">
|
||||||
|
<figcaption>A Lady</figcaption>
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
<div class="column" data-blocks="Zoomable Figure">
|
||||||
|
<figure>
|
||||||
|
<img src="../assets/women.jpeg">
|
||||||
|
<figcaption>A Lady</figcaption>
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
42
lib/card/test/example/_theme/templates/index.html
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Card</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/editor.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/subcard.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
|
||||||
|
<script src="../../../../../node_modules/jquery/dist/jquery.min.js"></script>
|
||||||
|
<script src="../../../../../lib/3rdparty/jquery.hypher.js"></script>
|
||||||
|
<script src="../../../../../lib/3rdparty/hyphenation/de.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="info-card" style="width: 1400px; height: 1200px;">
|
||||||
|
<div class="mainview">
|
||||||
|
<header class="columns">
|
||||||
|
<figure class="thumbnail-wrapper">
|
||||||
|
<img draggable="false" contenteditable="true" data-replace="src" class="thumbnail" src="../assets/women.jpeg">
|
||||||
|
</figure>
|
||||||
|
<div class="overview column content">
|
||||||
|
<h1 data-innerhtml="title" contenteditable="true">Titel</h1>
|
||||||
|
<p data-innerhtml="misc" class="misc" contenteditable="true">Misc</p>
|
||||||
|
<p data-innerhtml="description" contenteditable="true">Verschiedenes</p>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<main data-innerhtml="cards" class="subcards-container columns is-multiline is-centered" tabindex="0" data-blocks="Card,Card with Image,Card with Figure"></main>
|
||||||
|
<div class="button icon close view-button inverted transparent-background" onclick="Card.close(event)"></div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
26
lib/card/test/example/_theme/templates/popup.html
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title data-innerhtml="title">Popup</title>
|
||||||
|
<link rel="stylesheet" href="../_theme/css/bulma.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/card.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/article.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/highlight.css">
|
||||||
|
<link rel="stylesheet" href="../_theme/css/popup.css">
|
||||||
|
<!-- disable zooming -->
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
|
||||||
|
<script src="../_theme/js/all.js"></script>
|
||||||
|
<script src="../_theme/js/3rdparty/all.js"></script>
|
||||||
|
<script src="../_theme/js/card.js"></script>
|
||||||
|
<script src="../_theme/js/highlight.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- IMPORTANT: Deleted style overwrite here which set a rigid width. -->
|
||||||
|
<div class="popupHtml" tabindex="0" data-innerhtml="content">
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
94
lib/card/test/example/_theme/templates/templates.html
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
<!-- To be consistent overall, with css-naming and bulma.
|
||||||
|
Classes should be named lower-case using hyphens to seperate words: e.g. subcard-wrapper -->
|
||||||
|
|
||||||
|
<template class="card" data-allowed-within=".columns" id="Card">
|
||||||
|
<div class="subcard-wrapper column is-one-third" ondragstart="Card.dragStart(event)">
|
||||||
|
<div class="subcard" data-append="class" data-onclick="Card.openIndexCard(event, 'articlePath')" onclick="Card.openIndexCard(event, './article1.html')">
|
||||||
|
<div class="subcard-content content">
|
||||||
|
<div class="titlebar">
|
||||||
|
<h2 data-innerhtml="h1" contenteditable="true">Eine Überschrift</h2>
|
||||||
|
</div>
|
||||||
|
<div class="wrapper">
|
||||||
|
<div data-innerhtml="preview" class="preview content">
|
||||||
|
<p data-innerhtml="text" contenteditable="true">Ein kurzer Teaser</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- This is outside the content, that the content can have an overflow:hidden without effecting the scalability of the close button. -->
|
||||||
|
<div class="icon card-icon info button"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- When is this used? The id seems to be invalid. -->
|
||||||
|
<template class="cardImage" data-allowed-within=".columns" id="Card with Image">
|
||||||
|
<div class="column is-one-third" ondragstart="Card.dragStart(event)">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-content content">
|
||||||
|
<h1 contenteditable="true">Eine Überschrift</h1>
|
||||||
|
<div class="wrapper">
|
||||||
|
<div data-innerhtml="preview" class="preview">
|
||||||
|
<figure>
|
||||||
|
<!-- Here it's important to disable the image's dragable property. -->
|
||||||
|
<img draggable="false" data-replace="src" contenteditable="true" src="../assets/king.jpeg">
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- The id seems to be invalid! -->
|
||||||
|
<template class="zoomableImage" data-allowed-within=".columns" id="Zoomable Image">
|
||||||
|
<!-- This wrapper was not identifiable. So I made it a zoomable-wrapper. -->
|
||||||
|
<div class="zoomable-wrapper column" ondragstart="Card.dragStart(event)">
|
||||||
|
<figure style="display: block;" class="zoomable singlefig" id="zoomable1">
|
||||||
|
<div style="position:relative;" class="svg-wrapper">
|
||||||
|
<svg draggable="false" class="mainimg" onclick="Card.openPopupOrZoomable(event)" data-replace="viewBox width height" viewBox="0 6.6 100 86.8"
|
||||||
|
width="128" height="128" contenteditable="true">
|
||||||
|
<!-- The defs section must be defined and cannot be generated in JavaScript-->
|
||||||
|
<defs></defs>
|
||||||
|
<image data-replace="width height xlink:href" width="100" height="100" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../assets/gelehrter.jp"></image>
|
||||||
|
<g stroke-width="3" data-innerhtml="circles"></g>
|
||||||
|
</svg>
|
||||||
|
<div class="icon button corner-button bottom-right zoom zoomable-icon" onclick="Card.openZoomable(event)"></div>
|
||||||
|
</div>
|
||||||
|
<figcaption contenteditable="true" data-innerhtml="caption" class="cap">Gelehrter in seiner Studierstube</figcaption>
|
||||||
|
<figcaption contenteditable="true" data-innerhtml="zoomCaption" class="zoomcap">Rembrandt:
|
||||||
|
<i>Gelehrter in seiner Studierstube</i>, Radierung, um 1652, Braunschweig, Herzog Anton Ulrich-Museum, Kupferstichkabinett.</figcaption>
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template class="zoomableVideo" data-allowed-within=".columns" id="Zoomable Video">
|
||||||
|
<div class="zoomable-wrapper column" ondragstart="Card.dragStart(event)">
|
||||||
|
<figure class="zoomable singlefig" data-style="maxHeight" id="zoomable1">
|
||||||
|
<div style="position:relative;">
|
||||||
|
<video class="mainimg" onclick="Card.openZoomable(event)" data-replace="width src" width="100" src="../assets/small.mp4"></video>
|
||||||
|
<div class="icon button corner-button bottom-right zoom zoomable-icon" onclick="Card.openZoomable(event)"></div>
|
||||||
|
</div>
|
||||||
|
<figcaption contenteditable="true" data-innerhtml="caption" class="cap">Gelehrter in seiner Studierstube</figcaption>
|
||||||
|
<figcaption contenteditable="true" data-innerhtml="zoomCaption" class="zoomcap">Rembrandt:
|
||||||
|
<i>Gelehrter in seiner Studierstube</i>, Radierung, um 1652, Braunschweig, Herzog Anton Ulrich-Museum, Kupferstichkabinett.</figcaption>
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template class="link" data-allowed-within="p" id="Link">
|
||||||
|
<a ondragstart="Card.dragStart(event)" href="URL">SELECTED</a>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<template class="link" data-allowed-within="p" id="Popup">
|
||||||
|
<a ondragstart="Card.dragStart(event)" onclick="Card.loadPopup(event)" href="FILE">SELECTED</a>
|
||||||
|
</template>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<template class="paragraph" data-allowed-within=".column,.popup" id="Paragraph">
|
||||||
|
<p contenteditable="true" data-append="class" data-link="Popup" data-innerhtml="text">Ein Beispiel für einen Absatz</p>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template class="header" data-allowed-within=".column,.popup" id="Header">
|
||||||
|
<h2 contenteditable="true" data-innerhtml="text">Eine Überschrift</h2>
|
||||||
|
</template>
|
94
lib/card/test/index.html
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
|
||||||
|
<title>Card Debugging</title>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#scatter-container-dom {
|
||||||
|
background-color: red;
|
||||||
|
width: 800px;
|
||||||
|
height: 600px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<link rel="stylesheet" href="../../../css/bulma.css" />
|
||||||
|
<link rel="stylesheet" href="./example/_theme/css/bundle.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="rows">
|
||||||
|
<div id="scatter-container-dom" class="row"></div>
|
||||||
|
<div class="columns row">
|
||||||
|
<div class="column">
|
||||||
|
<div id="add-button" class="button is-success">Add</div>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<div id="delete-button" class="button is-danger">Delete</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="../../../dist/iwmlib.3rdparty.js"></script>
|
||||||
|
<script src="../../../dist/iwmlib.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const domContainer = document.getElementById("scatter-container-dom")
|
||||||
|
const scatterContainer = new DOMScatterContainer(domContainer)
|
||||||
|
|
||||||
|
let addBtn = document.getElementById('add-button')
|
||||||
|
let deleteBtn = document.getElementById('delete-button')
|
||||||
|
|
||||||
|
addBtn.addEventListener('click', createCard)
|
||||||
|
|
||||||
|
deleteBtn.addEventListener('click', () => {
|
||||||
|
Array.from(domContainer.childNodes).forEach(child =>{
|
||||||
|
ScatterCard.close(child)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
function createCard() {
|
||||||
|
const path = './example/01/index.html'
|
||||||
|
|
||||||
|
let card = null
|
||||||
|
ScatterCard.loadHTML(path).then(response => {
|
||||||
|
console.log("Nothing happening here")
|
||||||
|
card = document.createElement('div')
|
||||||
|
|
||||||
|
// // For debugging purpose to find the card fast with the debugging tools.
|
||||||
|
card.setAttribute('data-source', path)
|
||||||
|
|
||||||
|
scatterContainer.element.appendChild(card)
|
||||||
|
new DOMScatter(card, scatterContainer, {
|
||||||
|
width: 1400,
|
||||||
|
height: 1200,
|
||||||
|
scale: 0.5,
|
||||||
|
minScale: 0.2,
|
||||||
|
maxScale: 1
|
||||||
|
})
|
||||||
|
|
||||||
|
ScatterCard.setup(card, response, {
|
||||||
|
basePath: './example/THE_USELESS_PART'
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
3
package-lock.json
generated
@ -2224,8 +2224,7 @@
|
|||||||
"version": "0.1.2",
|
"version": "0.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
|
||||||
"integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
|
"integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"expand-brackets": {
|
"expand-brackets": {
|
||||||
"version": "2.1.4",
|
"version": "2.1.4",
|
||||||
|