diff --git a/src/converse-chatboxviews.js b/src/converse-chatboxviews.js index 2ffdf7bbc..b7133ac1c 100644 --- a/src/converse-chatboxviews.js +++ b/src/converse-chatboxviews.js @@ -5,7 +5,7 @@ */ import './components/converse.js'; import "@converse/headless/converse-chatboxes"; -import tpl_avatar from "templates/avatar.svg"; +import tpl_avatar from "templates/avatar.js"; import tpl_background_logo from "templates/background_logo.js"; import tpl_converse from "templates/converse.js"; import { Overview } from "@converse/skeletor/src/overview"; @@ -30,11 +30,10 @@ const AvatarMixin = { 'classes': avatar_el.getAttribute('class'), 'width': avatar_el.getAttribute('width'), 'height': avatar_el.getAttribute('height'), + 'image_type': this.model.vcard.get('image_type'), + 'image': this.model.vcard.get('image') } - const image_type = this.model.vcard.get('image_type'); - const image = this.model.vcard.get('image'); - data['image'] = "data:" + image_type + ";base64," + image; - avatar_el.outerHTML = tpl_avatar(data); + avatar_el.outerHTML = u.getElementFromTemplateResult(tpl_avatar(data)).outerHTML; } }, }; diff --git a/src/templates/avatar.js b/src/templates/avatar.js index 4bcd3ccfc..64c45fb55 100644 --- a/src/templates/avatar.js +++ b/src/templates/avatar.js @@ -1,6 +1,11 @@ import { html } from "lit-html"; +const getImgHref = (image, image_type) => { + return image.startsWith('data:') ? image : `data:${image_type};base64,${image}`; +} + export default (o) => html` - - + + `; + diff --git a/src/templates/avatar.svg b/src/templates/avatar.svg deleted file mode 100644 index da8f11275..000000000 --- a/src/templates/avatar.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/templates/directives/avatar.js b/src/templates/directives/avatar.js index 7f7353057..73e60461a 100644 --- a/src/templates/directives/avatar.js +++ b/src/templates/directives/avatar.js @@ -1,28 +1,13 @@ -import xss from "xss/dist/xss"; -import { directive, html } from "lit-html"; -import { unsafeSVG } from 'lit-html/directives/unsafe-svg.js'; - - -const whitelist_opts = { - 'whiteList': { - 'svg': ['xmlns', 'class', 'width', 'height'], - 'image': ['width', 'height', 'preserveAspectRatio', 'href'] - } -}; -const tpl_svg = (o) => xss.filterXSS(``, whitelist_opts); - -const tpl_avatar = (o) => html` - - ${ unsafeSVG(tpl_svg(o)) } - -`; +import tpl_avatar from '../avatar.js'; +import { directive } from "lit-html"; export const renderAvatar = directive(o => part => { const data = { - 'classes': o.classes || '', + 'classes': o.classes ? `${o.classes} avatar` : 'avatar', 'height': o.width || 36, 'image': o.image, + 'image_type': o.image_type, 'width': o.height || 36, } part.setValue(tpl_avatar(data)); diff --git a/src/utils/html.js b/src/utils/html.js index d84b582fe..3c2c3fb14 100644 --- a/src/utils/html.js +++ b/src/utils/html.js @@ -177,10 +177,14 @@ u.applyDragResistance = function (value, default_value) { }; +/** + * Return the height of the passed in DOM element, + * based on the heights of its children. + * @method u#calculateElementHeight + * @param {HTMLElement} el + * @returns {integer} + */ u.calculateElementHeight = function (el) { - /* Return the height of the passed in DOM element, - * based on the heights of its children. - */ return Array.from(el.children).reduce((result, child) => result + child.offsetHeight, 0); }