diff --git a/packages/knowledge-base-web-page-element-view/vpu-kb-wpe-view-demo.js b/packages/knowledge-base-web-page-element-view/vpu-kb-wpe-view-demo.js index aa842ecf3697d7f3208aa8e075f19ab8d34ead23..5224368bd80ba3a0257d71d09cff2c65b7209b3a 100644 --- a/packages/knowledge-base-web-page-element-view/vpu-kb-wpe-view-demo.js +++ b/packages/knowledge-base-web-page-element-view/vpu-kb-wpe-view-demo.js @@ -37,12 +37,22 @@ class KnowledgeBaseWebPageElementViewDemo extends LitElement { </div> <div class="content"> <h2 class="subtitle">Deutsch</h2> + Ein Buch ausleihen... <vpu-knowledge-base-web-page-element-view entry-point-url="${utils.getAPiUrl()}" lang="de" value="bedienstete/bibliothek/buch-ausleihen"></vpu-knowledge-base-web-page-element-view> </div> <div class="content"> <h2 class="subtitle">Englisch</h2> + Borrow a book... <vpu-knowledge-base-web-page-element-view entry-point-url="${utils.getAPiUrl()}" lang="en" value="bedienstete/bibliothek/buch-ausleihen"></vpu-knowledge-base-web-page-element-view> </div> + <hr> + <div class="content"> + FAQ... + <vpu-knowledge-base-web-page-element-view lang="${this.lang}" value="abc/def/xyz"></vpu-knowledge-base-web-page-element-view> + <br> + Kontaktieren Sie uns unter... + <vpu-knowledge-base-web-page-element-view lang="${this.lang}" value="abc/def/klm"></vpu-knowledge-base-web-page-element-view> + </div> </section> `; } diff --git a/packages/knowledge-base-web-page-element-view/vpu-kb-wpe-view.js b/packages/knowledge-base-web-page-element-view/vpu-kb-wpe-view.js index adbb7f659d3cf9a58c76fea2e4f554ae591f500c..cfcdc80c9fb1d4279b7f12970c6972d623595b9f 100644 --- a/packages/knowledge-base-web-page-element-view/vpu-kb-wpe-view.js +++ b/packages/knowledge-base-web-page-element-view/vpu-kb-wpe-view.js @@ -16,6 +16,11 @@ class VPUKnowledgeBaseWebPageElementView extends VPULitElement { this.value = ''; this.html = ''; this.entryPointUrl = utils.getAPiUrl(); + this.error = ''; + this.id = String.fromCharCode(65 + Math.floor(Math.random() * 26)) + Date.now(); + this.eyeClose = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA1ElEQVQ4ja3SMU5CURCF4c+ejpiILe5DZAGyASuJS5CKEoMGKhdAwWKgMkriKjQWFkAkBizgmckNPEgeJ7nVuee/M3eGI2mCehFAHZ/Hgtygizd84wsjPOHsEMgUqx1njvtd4R7uAmSIMipo4SeAHtLwdTCbG8gHLsOdVlJN9LwEY4nSFsh5AhhHwGtinoY/ySDlPEAjMbvByyDDvBbgOZi/eNxUkrUTp9NJw3CCNhbJS0vcBshgWzjqAn28W899Zr1U1dBObR8kT9nGXhWFTIoA/vUHQydS/iUcHx4AAAAASUVORK5CYII='; + this.eyeOpen = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA5UlEQVQ4jc3SvS7EURAF8B+JioSsCokHUFgNiWewQqvzICRew2v4WLFUnoNS/msrazUaFOYm12RlVeIkk9ycM2fmztzLf8U02tiPaAc3EbM4Rh8fKfo4wdxP5nXcV4YhLnGO54p/wEY2b6akHhYqfR7dVHyriMt4qsQRWtiNaw+wFwWHaaQlcc161l4UblIyXKTcM7hL5FUk14tsgsvNumIhb2NG6ISxiXMrtJI3wErZwyHeK/E2DAWLuKn0F2xLOEgdRriOeK34sc9YsIpT37dd4hFHvj7bRMxElw52sIap3xj/Hp9rzGFBhiMSxAAAAABJRU5ErkJggg=='; + //this.css = 'kb.css'; } /** @@ -27,6 +32,9 @@ class VPUKnowledgeBaseWebPageElementView extends VPULitElement { value: { type: String }, html: { type: String, attribute: false }, entryPointUrl: { type: String, attribute: 'entry-point-url' }, + id: { type: String, attribute: false}, + error: { type: String, attribute: false}, + //css: { type: String }, }; } @@ -56,20 +64,45 @@ class VPUKnowledgeBaseWebPageElementView extends VPULitElement { encodeURIComponent(commonUtils.base64EncodeUnicode(encodeURIComponent(this.value))) + "?lang=" + encodeURIComponent(this.lang); + var that = this; fetch(apiUrl, { headers: { 'Content-Type': 'application/ld+json', 'Authorization': 'Bearer ' + window.VPUAuthToken, }, }) - .then(res => res.json()) - .then(webPageElement => { - if (webPageElement !== undefined && webPageElement.text !== undefined) { - this.html = webPageElement.text; + .then(function (res) { + if (!res.ok) { + let status_msg; + switch (res.status) { + case 403: + status_msg = that.lang === 'de' ? 'ist verboten' : 'is forbidden'; + break; + case 404: + status_msg = that.lang === 'de' ? 'wurde nicht gefunden' : 'was not found'; + break; + case 500: + status_msg = that.lang === 'de' ? 'macht Probleme am Server' : 'troubled server'; + break; + default: + status_msg = that.lang === 'de' ? 'mit unbekanntem Problem' : 'with unknown problems'; } - }) - // catch e.g. 404 errors - .catch(); + if (that.lang === 'de') { + that.error = html`<p>FEHLER: Information "<b>${that.value}</b>" ${status_msg} (${res.status}).</p>`; + } else { + that.error = html`<p>ERROR: information "<b>${that.value}</b>" ${status_msg} (${res.status}).</p>`; + } + throw new Error('HTTP error: ' +that.value + ' ' + status_msg + ', status = ' + res.status); + } + return res.json(); + }) + .then(webPageElement => { + if (webPageElement !== undefined && webPageElement.text !== undefined) { + that.html = webPageElement.text; + } + }) + // catch e.g. 404 errors + .catch(); } updated(changedProperties) { @@ -77,7 +110,6 @@ class VPUKnowledgeBaseWebPageElementView extends VPULitElement { if (propName === "lang") { i18n.changeLanguage(this.lang); } - switch(propName) { case "lang": case "value": @@ -88,21 +120,32 @@ class VPUKnowledgeBaseWebPageElementView extends VPULitElement { }); } + toggle(e) { + const id = this.id; + const element = this.shadowRoot.querySelector('#' + id); + const img = e.target; + const d = element.style.display; + if(d === '' || d === 'none') { + element.style.display = 'flex'; + img.src = this.eyeClose; + } else { + element.style.display = 'none'; + img.src = this.eyeOpen; + } + } + render() { + //<link rel="stylesheet" href="${this.css}"> + const id = this.id; return html` <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.5/css/bulma.min.css"> <style> </style> - <div class="columns"> - <div class="column"> - Hier kann man dann etwas aufklappen. - </div> - </div> - <div class="columns"> - <div class="column"> - ${unsafeHTML(this.html)} - </div> + <img src='${this.eyeOpen}' @click="${this.toggle}" alt="open/close"> + <div class='kb' id="${id}"> + ${unsafeHTML(this.html)} + ${this.error} </div> `; }