import Card from './card.js' /** * Extends the card with scatter functionality. * * @class ScatterCard */ export default class ScatterCard extends Card { /** * TODO: Find a more suitable name. * Adjusts the HTML to work in the new context. * * @static * @param {*} domElement * @param {*} htmlString * @param {*} basePath * @param {*} [opts={}] * @memberof Card */ static setup(context, htmlString, { basePath = './', modules = [] } = {}) { context.classList.add('info-card') this.relativePath = basePath htmlString = this._adjustRelativeLinks(htmlString) let parser = new DOMParser() let html = parser.parseFromString(htmlString, 'text/html') /** * Conflicts with the FindTarget method of the Abstract scatter. */ this._replaceAttributes(html, 'onclick', this._replaceCallback) let content = html.querySelector('.mainview') context.appendChild(content) super.setup(context, modules) return context } /** * Appends a close listener to the scatter element. * * @static * @param {*} element * @param {*} callback * @memberof Card */ static addOnCloseListener(element, callback) { if (callback) { element.onClose = callback } } /** * Creates a scatter for the card and applies the card to it, * * @static * @param {*} html * @param {*} scatterContainer * @param {string} [basePath=""] * @param {*} [opts={}] * @returns * @memberof Card */ static createCardScatter( html, scatterContainer, { basePath = './', modules = [] } = {} ) { let element = document.createElement('div') scatterContainer.element.appendChild(element) new DOMScatter(element, scatterContainer, { width: 1400, height: 1200 }) this.setup(element, html, { basePath, modules }) return element } /** *Utility function to create a fully functional card scatter. * * @static * @param {*} scatterContainer * @param {*} path * @param {string} [basePath="."] * @param {*} opts * @returns * @memberof CardScatter */ static loadAndCreateScatterCard( scatterContainer, item, { basePath = '../', modules = [], onClose = null } = {} ) { console.log(basePath) return new Promise((resolve, reject) => { let url = basePath + '/' + item + '/index.html' console.log('Loading', url) this.loadHTML(url) .then(html => { console.log('Received', html) let element = this.createCardScatter( html, scatterContainer, { basePath, modules } ) if (onClose) this.addOnCloseListener(element, onClose) resolve(element) }) .catch(e => reject(e)) }) } static _setLanguage(context, language) { context.language = language } static _getLanguage(context) { return context.language } } ScatterCard.selectedLanguage = 0 ScatterCard.languages = ['Deutsch', 'English'] ScatterCard.languageTags = { Deutsch: 'de', English: 'en' } ScatterCard.scatterContainer = null