This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new a30bad4  [OPENMEETINGS-2335] save WB is refactored
a30bad4 is described below

commit a30bad4d92198503aea8f108bd671cc5ead87b9a
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Sun Jun 7 00:31:30 2020 +0700

    [OPENMEETINGS-2335] save WB is refactored
---
 .../web/app/Application.properties.xml             |  1 -
 .../web/app/Application_ar.properties.xml          |  1 -
 .../web/app/Application_bg.properties.xml          |  1 -
 .../web/app/Application_bn.properties.xml          |  1 -
 .../web/app/Application_ca.properties.xml          |  1 -
 .../web/app/Application_cs.properties.xml          |  1 -
 .../web/app/Application_da.properties.xml          |  1 -
 .../web/app/Application_de.properties.xml          |  1 -
 .../web/app/Application_el.properties.xml          |  1 -
 .../web/app/Application_es.properties.xml          |  1 -
 .../web/app/Application_fa.properties.xml          |  1 -
 .../web/app/Application_fi.properties.xml          |  1 -
 .../web/app/Application_fr.properties.xml          |  1 -
 .../web/app/Application_gl.properties.xml          |  1 -
 .../web/app/Application_hi.properties.xml          |  1 -
 .../web/app/Application_hu.properties.xml          |  1 -
 .../web/app/Application_in.properties.xml          |  1 -
 .../web/app/Application_it.properties.xml          |  1 -
 .../web/app/Application_iw.properties.xml          |  1 -
 .../web/app/Application_ja.properties.xml          |  1 -
 .../web/app/Application_ko.properties.xml          |  1 -
 .../web/app/Application_nl.properties.xml          |  1 -
 .../web/app/Application_pl.properties.xml          |  1 -
 .../web/app/Application_pt.properties.xml          |  1 -
 .../web/app/Application_pt_BR.properties.xml       |  1 -
 .../web/app/Application_ru.properties.xml          |  1 -
 .../web/app/Application_sk.properties.xml          |  1 -
 .../web/app/Application_sv.properties.xml          |  1 -
 .../web/app/Application_ta.properties.xml          |  1 -
 .../web/app/Application_th.properties.xml          |  1 -
 .../web/app/Application_tr.properties.xml          |  1 -
 .../web/app/Application_uk.properties.xml          |  1 -
 .../web/app/Application_zh_CN.properties.xml       |  1 -
 .../web/app/Application_zh_TW.properties.xml       |  1 -
 .../apache/openmeetings/web/room/RoomPanel.java    | 40 +++++-----
 .../apache/openmeetings/web/room/wb/WbAction.java  |  2 +-
 .../apache/openmeetings/web/room/wb/WbPanel.html   |  4 -
 .../apache/openmeetings/web/room/wb/WbPanel.java   | 37 +--------
 .../apache/openmeetings/web/room/wb/raw-wb-area.js | 44 ++++++-----
 .../openmeetings/webservice/WbWebService.java      | 88 ++++++++++++++++++++++
 40 files changed, 136 insertions(+), 113 deletions(-)

diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
index e02ef04..e4217a5 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Download as PDF]]></entry>
        <entry key="download.png"><![CDATA[Download as PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
index 9bcf3d6..e7ba2b3 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Download as PDF]]></entry>
        <entry key="download.png"><![CDATA[Download as PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
index 696dd5c..bfe2fb4 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Сваляне в PDF]]></entry>
        <entry key="download.png"><![CDATA[Сваляне в PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml
index 807ca56..b5594c5 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Download as PDF]]></entry>
        <entry key="download.png"><![CDATA[Download as PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
index 250527a..1e4fe73 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Descarregar com PDF]]></entry>
        <entry key="download.png"><![CDATA[Descarregar com PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
index 76d3855..3f57247 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Načti jako PDF]]></entry>
        <entry key="download.png"><![CDATA[Načti jako PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
index c609801..60da6af 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Download som PDF]]></entry>
        <entry key="download.png"><![CDATA[Download som PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml
index 07b468a..2bbf082 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Wollen sie 
wirklich alle Temporären Dateien löschen? Diese Vorgang kann nicht rückgängig 
gemacht werden.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[Allgemeine 
Admin-Funktionen]]></entry>
        <entry 
key="dashboard.widget.admin.title"><![CDATA[Admin-Funktionen]]></entry>
-       <entry key="download.image.steps"><![CDATA[Bitte Rechtsklick auf das 
Bild und "Speichere Bild als" wählen]]></entry>
        <entry key="download.pdf"><![CDATA[Download als PDF]]></entry>
        <entry key="download.png"><![CDATA[Download als PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Benutzername/E-Mail 
und/oder Passwort ist/sind falsch.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
index 40600ee..3fcbf94 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Αποθήκευση ως PDF]]></entry>
        <entry key="download.png"><![CDATA[Αποθήκευση ως PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml
index 4913676..cd8e5e2 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[¿Estás seguro 
de querer borrar todos los ficheros temporales? Esta operación no se puede 
deshacer.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[Funciones de 
administración general]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Funciones de 
administración]]></entry>
-       <entry key="download.image.steps"><![CDATA[Haz click derecho sobre la 
imagen y elige "Salvar como"]]></entry>
        <entry key="download.pdf"><![CDATA[Descargar como PDF]]></entry>
        <entry key="download.png"><![CDATA[Descargar como PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Usuario/correo y/o 
contraseña son incorrectos]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
index ed053dd..291ea66 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[مطمئن هستید 
می خواهید تمام پوشه های جاری را حذف کنید؟این عملیات نمی تواند انجام نشده 
بماند.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[عملیات کلی 
مدیر]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[عملکردهای 
مدیر]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[دریافت به عنوان PDF]]></entry>
        <entry key="download.png"><![CDATA[بارگذاری به عنوان PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[نام کاربری/پست الکترونیک 
و/یا رمز عبور صحیح نیست]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
index df762fd..e51b577 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Lataa PDF]]></entry>
        <entry key="download.png"><![CDATA[Lataa PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
index e56a363..53e2995 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Etes-vous sur 
de vouloir supprimer tous les fichiers temporaires ? Cette opération ne peut 
être annulée.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[Fonctions d'admin 
générales]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Fonctions 
d'admin]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Télécharger en PDF]]></entry>
        <entry key="download.png"><![CDATA[Télécharger en PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
index 5ae80e5..320cba3 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Descargar como PDF]]></entry>
        <entry key="download.png"><![CDATA[Descargar como PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hi.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hi.properties.xml
index 9af9219..c81e1eb 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hi.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hi.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Download as PDF]]></entry>
        <entry key="download.png"><![CDATA[Download as PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
index bdfe5b6..392f3c5 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Letöltés mint PDF]]></entry>
        <entry key="download.png"><![CDATA[Letöltés mint PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_in.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_in.properties.xml
index 78bbcc8..da64b25 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_in.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_in.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Download as PDF]]></entry>
        <entry key="download.png"><![CDATA[Download as PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml
index 5485bbd..8cacd5b 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Sei sicuro di 
voler cancellare tutti i file temporanei? Questa operazione non potrà essere 
annullata.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[Funzioni generali per 
l'Amministratore]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Funzioni 
Amministratore]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Scarica come PDF]]></entry>
        <entry key="download.png"><![CDATA[Scarica come PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_iw.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_iw.properties.xml
index 733818f..5605491 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_iw.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_iw.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Download as PDF]]></entry>
        <entry key="download.png"><![CDATA[Download as PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
index fceb117..1894f11 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry 
key="dashboard.widget.admin.cleanup.warn"><![CDATA[全ての一時ファイルを削除してよろしいですか?(この作業は実行後、元に戻せません)]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[一般管理機能]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[管理機能]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[PDFとしてダウンロード]]></entry>
        <entry key="download.png"><![CDATA[PNGとしてダウンロード]]></entry>
        <entry 
key="error.bad.credentials"><![CDATA[ユーザー名/電子メール・アドレス、またはパスワードが不正です。]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
index f25e3b8..abdbcf9 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Download as PDF]]></entry>
        <entry key="download.png"><![CDATA[Download as PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
index 1d593d9..fe4edeb 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Opslaan als PDF]]></entry>
        <entry key="download.png"><![CDATA[Opslaan als PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
index 5e0b069..562e104 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Pobierz jako PDF]]></entry>
        <entry key="download.png"><![CDATA[Pobierz jako PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Nazwa użytkownika / adres 
e-mail i / lub hasło są nieprawidłowe.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
index ca4aa37..1ce59c5 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Download as PDF]]></entry>
        <entry key="download.png"><![CDATA[Download as PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
index 1791f49..0419f5d 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Funções 
Administrativas]]></entry>
-       <entry key="download.image.steps"><![CDATA[Clique com o botão direito 
na imagem e escolha "Salvar imagem como"]]></entry>
        <entry key="download.pdf"><![CDATA[Download como PDF]]></entry>
        <entry key="download.png"><![CDATA[Download como PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
index 9d4d10a..a918ec3 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Вы уверены 
что хотите удалить все временные файлы? Эту операцию нельзя будет 
отменить.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[Основные 
административные фукции]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Административные 
функции]]></entry>
-       <entry key="download.image.steps"><![CDATA[Кликните правой кнопкой на 
картинке и выберите "Сохранить как"]]></entry>
        <entry key="download.pdf"><![CDATA[Сохранить как PDF]]></entry>
        <entry key="download.png"><![CDATA[Сохранить как PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Имя пользователя/e-mail 
и/или пароль не верны.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
index 0ba987b..16b3d38 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Stiahnúť ako PDF]]></entry>
        <entry key="download.png"><![CDATA[Stiahnúť ako PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
index c8f3339..fcea845 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
@@ -632,7 +632,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Är du säker 
att du vill radera alla temporära filer? Denna operation kan inte 
ångras.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[Allmänna 
administrativa funktioner]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Administrativa 
funktioner]]></entry>
-       <entry key="download.image.steps"><![CDATA[Vänligen högerklicka på 
bilden och välj "Spara bilden som"]]></entry>
        <entry key="download.pdf"><![CDATA[Ladda ner som PDF]]></entry>
        <entry key="download.png"><![CDATA[Ladda ner som PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Felaktigt 
användarnamn/e-postadress och/eller lösenord.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ta.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ta.properties.xml
index 9c099e1..cf67f36 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ta.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ta.properties.xml
@@ -632,7 +632,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Download as PDF]]></entry>
        <entry key="download.png"><![CDATA[Download as PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
index f3258ec..2c98b91 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[ดาวน์โหลดเป็น PDF]]></entry>
        <entry key="download.png"><![CDATA[ดาวน์โหลดเป็น PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
index dc0e9c2..92ed570 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[PDF Olarak Yükle]]></entry>
        <entry key="download.png"><![CDATA[PNG Olarak Yükle]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
index 25114c4..e49534b 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Ви впевнені, 
що хочете видалити всі тимчасові файли? Цю операцію не можна буде 
скасувати.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[Основні 
адміністративні фукції]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Адміністративні 
функції]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Завантажити як PDF]]></entry>
        <entry key="download.png"><![CDATA[Завантажити як PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
index cce3b9d..155d3ec 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[下载为 PDF]]></entry>
        <entry key="download.png"><![CDATA[下载为 PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
index b4535fc..d1411eb 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
@@ -631,7 +631,6 @@ see https://openmeetings.apache.org/LanguageEditor.html for 
Details
        <entry key="dashboard.widget.admin.cleanup.warn"><![CDATA[Are you sure 
you want to delete all temporary files? This operation cannot be 
undone.]]></entry>
        <entry key="dashboard.widget.admin.desc"><![CDATA[General Admin 
functions]]></entry>
        <entry key="dashboard.widget.admin.title"><![CDATA[Admin 
functions]]></entry>
-       <entry key="download.image.steps"><![CDATA[Please right click the image 
and choose "Save image as"]]></entry>
        <entry key="download.pdf"><![CDATA[Download as PDF]]></entry>
        <entry key="download.png"><![CDATA[Download as PNG]]></entry>
        <entry key="error.bad.credentials"><![CDATA[Username/email and/or 
password are incorrect.]]></entry>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
index c1a44d3..fba8f99 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
@@ -20,14 +20,15 @@ package org.apache.openmeetings.web.room;
 
 import static java.time.Duration.ZERO;
 import static 
org.apache.openmeetings.core.util.ChatWebSocketHelper.ID_USER_PREFIX;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PDF;
 import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 import static 
org.apache.openmeetings.web.room.wb.InterviewWbPanel.INTERVIEWWB_JS_REFERENCE;
 import static org.apache.openmeetings.web.room.wb.WbPanel.WB_JS_REFERENCE;
 
-import java.io.ByteArrayInputStream;
 import java.io.IOException;
-import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.Calendar;
 import java.util.List;
 import java.util.Map.Entry;
@@ -93,9 +94,8 @@ import 
org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
 import org.apache.wicket.request.resource.ResourceStreamResource;
 import org.apache.wicket.spring.injection.annot.SpringBean;
-import org.apache.wicket.util.resource.AbstractResourceStream;
+import org.apache.wicket.util.resource.FileResourceStream;
 import org.apache.wicket.util.resource.IResourceStream;
-import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
 import org.apache.wicket.util.string.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -201,30 +201,19 @@ public class RoomPanel extends BasePanel {
        private RoomMenuPanel menu;
        private RoomSidebar sidebar;
        private final AbstractWbPanel wb;
-       private byte[] pdfWb;
+       private String fuid;
+       private String ftype;
        private final AjaxDownloadBehavior download = new 
AjaxDownloadBehavior(new ResourceStreamResource() {
                private static final long serialVersionUID = 1L;
 
                {
                        setCacheDuration(ZERO);
-                       setFileName("whiteboard.pdf");
                }
 
                @Override
                protected IResourceStream getResourceStream(Attributes 
attributes) {
-                       return new AbstractResourceStream() {
-                               private static final long serialVersionUID = 1L;
-
-                               @Override
-                               public InputStream getInputStream() throws 
ResourceStreamNotFoundException {
-                                       return new ByteArrayInputStream(pdfWb);
-                               }
-
-                               @Override
-                               public void close() throws IOException {
-                                       //no-op
-                               }
-                       };
+                       setFileName(EXTENSION_PDF.equals(ftype) ? 
"whiteboard.pdf" : "slide.png");
+                       return new 
FileResourceStream(Paths.get(System.getProperty("java.io.tmpdir"), 
fuid).toFile());
                }
        }) {
                private static final long serialVersionUID = 1L;
@@ -232,7 +221,13 @@ public class RoomPanel extends BasePanel {
                @Override
                protected void onDownloadCompleted(AjaxRequestTarget target) {
                        super.onDownloadCompleted(target);
-                       pdfWb = null;
+                       try {
+                               
Files.deleteIfExists(Paths.get(System.getProperty("java.io.tmpdir"), fuid));
+                       } catch (IOException e) {
+                               log.error("unexcepted error while clean-up", e);
+                       }
+                       fuid = null;
+                       ftype = null;
                }
        };
        Component eventDetail = new 
WebMarkupContainer(EVENT_DETAILS_ID).setVisible(false);
@@ -259,8 +254,9 @@ public class RoomPanel extends BasePanel {
                this.wb = interview ? new InterviewWbPanel("whiteboard", this) 
: new WbPanel("whiteboard", this);
        }
 
-       public void startDownload(IPartialPageRequestHandler handler, byte[] 
bb) {
-               pdfWb = bb;
+       public void startDownload(IPartialPageRequestHandler handler, String 
type, String fuid) {
+               this.fuid = fuid;
+               ftype = type;
                download.initiate(handler);
        }
 
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbAction.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbAction.java
index 6eaca7e..f3ba2dd 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbAction.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbAction.java
@@ -34,7 +34,7 @@ public enum WbAction {
        , load
        , undo
        , setSize
-       , downloadPdf
+       , download
        , startRecording
        , stopRecording
        , videoStatus
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html
index dee65c8..08b390c 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html
@@ -208,10 +208,6 @@
                        </div>
                        <div class="status"></div>
                </div>
-               <div id="download-png" wicket:message="title:867">
-                       <img width="320" height="240"/>
-                       <div><wicket:message key="download.image.steps"/></div>
-               </div>
        </div>
        <div id="wb-settings" class="wb-settings modal fade" tabindex="-1" 
role="dialog" data-backdrop="false" aria-hidden="true">
                <div class="modal-dialog modal-sm" role="document">
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
index f55dcb7..661ec92 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
@@ -34,10 +34,7 @@ import static 
org.apache.openmeetings.web.room.wb.WbWebSocketHelper.getObjWbJson
 import static org.apache.openmeetings.web.room.wb.WbWebSocketHelper.getWbJson;
 import static org.apache.wicket.AttributeModifier.append;
 
-import java.awt.image.BufferedImage;
 import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
@@ -52,9 +49,6 @@ import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
-import javax.imageio.ImageIO;
-
-import org.apache.commons.codec.binary.Base64;
 import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dto.room.Whiteboard;
 import org.apache.openmeetings.db.dto.room.Whiteboard.ZoomMode;
@@ -70,13 +64,6 @@ import org.apache.openmeetings.util.OmFileHelper;
 import org.apache.openmeetings.web.app.WhiteboardManager;
 import org.apache.openmeetings.web.common.NameDialog;
 import org.apache.openmeetings.web.room.RoomPanel;
-import org.apache.pdfbox.pdmodel.PDDocument;
-import org.apache.pdfbox.pdmodel.PDPage;
-import org.apache.pdfbox.pdmodel.PDPageContentStream;
-import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode;
-import org.apache.pdfbox.pdmodel.common.PDRectangle;
-import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
-import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.html.list.ListItem;
@@ -216,30 +203,12 @@ public class WbPanel extends AbstractWbPanel {
                                }
                        }
                                break;
-                       case downloadPdf:
+                       case download:
                        {
                                boolean moder = 
c.hasRight(Room.Right.MODERATOR);
                                Room r = rp.getRoom();
-                               if ((moder && 
!r.isHidden(RoomElement.ACTION_MENU)) || (!moder && r.isAllowUserQuestions())) {
-                                       try (PDDocument doc = new PDDocument()) 
{
-                                               JSONArray arr = 
obj.getJSONArray("slides");
-                                               for (int i = 0; i < 
arr.length(); ++i) {
-                                                       String base64Image = 
arr.getString(i).split(",")[1];
-                                                       byte[] bb = 
Base64.decodeBase64(base64Image);
-                                                       BufferedImage img = 
ImageIO.read(new ByteArrayInputStream(bb));
-                                                       float width = 
img.getWidth();
-                                                       float height = 
img.getHeight();
-                                                       PDPage page = new 
PDPage(new PDRectangle(width, height));
-                                                       PDImageXObject 
pdImageXObject = LosslessFactory.createFromImage(doc, img);
-                                                       try 
(PDPageContentStream contentStream = new PDPageContentStream(doc, page, 
AppendMode.APPEND, false)) {
-                                                               
contentStream.drawImage(pdImageXObject, 0, 0, width, height);
-                                                       }
-                                                       doc.addPage(page);
-                                               }
-                                               ByteArrayOutputStream baos = 
new ByteArrayOutputStream();
-                                               doc.save(baos);
-                                               rp.startDownload(handler, 
baos.toByteArray());
-                                       }
+                               if (moder && 
!r.isHidden(RoomElement.ACTION_MENU)) {
+                                       rp.startDownload(handler, 
obj.getString("type"), obj.getString("fuid"));
                                }
                                return;
                        }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-wb-area.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-wb-area.js
index 4de7c04..6413eba 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-wb-area.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-wb-area.js
@@ -392,30 +392,38 @@ var DrawWbArea = function() {
                if (!_inited) {
                        return;
                }
-               const wb = getActive().data();
+               const wb = getActive().data()
+                       , url = location.pathname.substring(0, 
location.pathname.indexOf('/', 1)) + '/services/wb/uploadwb/'
+                       , arr = [];
+               let type;
                if ('pdf' === fmt) {
-                       const arr = [];
                        wb.eachCanvas(function(cnv) {
                                arr.push(_getImage(cnv));
                        });
-                       OmUtil.wbAction({action: 'downloadPdf', data: {
-                               slides: arr
-                       }});
+                       type = 'pdf';
                } else {
-                       const cnv = wb.getCanvas()
-                               , dataUri = _getImage(cnv);
-                       try {
-                               const dlg = $('#download-png');
-                               dlg.find('img').attr('src', dataUri);
-                               dlg.dialog({
-                                       width: 350
-                                       , appendTo: '.room-block .wb-block'
-                               });
-                               fixJQueryUIDialogTouch(dlg);
-                       } catch (e) {
-                               console.error(e);
-                       }
+                       const cnv = wb.getCanvas();
+                       arr.push(_getImage(cnv));
+                       type = 'png';
                }
+               $.ajax({
+                       type: "POST"
+                       , url: url + type + '?sid=' + Room.getOptions().sid
+                       , data: {data: JSON.stringify(arr)}
+                       , dataType: 'json'
+                       , cache: false
+               }).done(function(res) {
+                       if ('SUCCESS' === res.serviceResult.type) {
+                               OmUtil.wbAction({action: 'download', data: {
+                                       type: type
+                                       , fuid: res.serviceResult.message
+                               }});
+                       } else {
+                               OmUtil.error(res.serviceResult.message);
+                       }
+               }).fail(function(err) {
+                       OmUtil.error(err);
+               });
        }
        self.videoStatus = _videoStatus;
        self.loadVideos = function() {
diff --git 
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/WbWebService.java
 
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/WbWebService.java
index 79d5b6e..6d5327d 100644
--- 
a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/WbWebService.java
+++ 
b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/WbWebService.java
@@ -18,28 +18,54 @@
  */
 package org.apache.openmeetings.webservice;
 
+import static java.util.UUID.randomUUID;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PDF;
 import static org.apache.openmeetings.webservice.Constants.TNS;
 
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.nio.file.Paths;
+
+import javax.imageio.ImageIO;
 import javax.jws.WebMethod;
 import javax.jws.WebParam;
 import javax.jws.WebService;
+import javax.ws.rs.FormParam;
 import javax.ws.rs.GET;
+import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.io.FileUtils;
 import org.apache.cxf.feature.Features;
 import org.apache.openmeetings.db.dto.basic.ServiceResult;
 import org.apache.openmeetings.db.dto.basic.ServiceResult.Type;
+import org.apache.openmeetings.db.entity.basic.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.manager.IClientManager;
 import org.apache.openmeetings.db.manager.IWhiteboardManager;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.pdmodel.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
+import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
+import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import com.github.openjson.JSONArray;
+
 /**
  * WbService contains methods to manipulate whiteboard contents
  *
@@ -54,6 +80,8 @@ public class WbWebService extends BaseWebService {
 
        @Autowired
        private IWhiteboardManager wbManager;
+       @Autowired
+       private IClientManager cm;
 
        /**
         * This method will remove all whiteboards from given room
@@ -124,4 +152,64 @@ public class WbWebService extends BaseWebService {
                        return new ServiceResult("", Type.SUCCESS);
                });
        }
+
+       /**
+        * This method will recive WB as binary data (png) and store it to 
temporary PDF/PNG file
+        *
+        * unlike other web service methods this one uses internal client sid
+        * NOT web service sid
+        *
+        * @param sid - internal client sid
+        * @param type - the type of document being saved PNG/PDF
+        * @param data - binary data
+        * @return - serviceResult object with the result
+        */
+       @WebMethod
+       @POST
+       @Path("/uploadwb/{type}")
+       public ServiceResult uploadWb(@WebParam(name="sid") @QueryParam("sid") 
String sid
+                       , @WebParam(name="type") @PathParam("type") String type
+                       , @WebParam(name="data") @FormParam("data") String data
+                       )
+       {
+               log.debug("[uploadwb] type {}", type);
+               Client c = cm.getBySid(sid);
+               final boolean allowed = c != null
+                               && c.getRoom() != null
+                               && c.hasRight(Room.Right.MODERATOR)
+                               && 
!c.getRoom().isHidden(RoomElement.ACTION_MENU);
+               return performCall(null, sd -> allowed, sd -> {
+                       try {
+                               String tDir = 
System.getProperty("java.io.tmpdir");
+                               String fuid = randomUUID().toString();
+                               if (EXTENSION_PDF.equals(type)) {
+                                       try (PDDocument doc = new PDDocument(); 
OutputStream os = new FileOutputStream(Paths.get(tDir, fuid).toFile())) {
+                                               JSONArray arr = new 
JSONArray(data);
+                                               for (int i = 0; i < 
arr.length(); ++i) {
+                                                       String base64Image = 
arr.getString(i).split(",")[1];
+                                                       byte[] bb = 
Base64.decodeBase64(base64Image);
+                                                       BufferedImage img = 
ImageIO.read(new ByteArrayInputStream(bb));
+                                                       float width = 
img.getWidth();
+                                                       float height = 
img.getHeight();
+                                                       PDPage page = new 
PDPage(new PDRectangle(width, height));
+                                                       PDImageXObject 
pdImageXObject = LosslessFactory.createFromImage(doc, img);
+                                                       try 
(PDPageContentStream contentStream = new PDPageContentStream(doc, page, 
AppendMode.APPEND, false)) {
+                                                               
contentStream.drawImage(pdImageXObject, 0, 0, width, height);
+                                                       }
+                                                       doc.addPage(page);
+                                               }
+                                               doc.save(os);
+                                       }
+                               } else {
+                                       JSONArray arr = new JSONArray(data);
+                                       String base64Image = 
arr.getString(0).split(",")[1];
+                                       byte[] bb = 
Base64.decodeBase64(base64Image);
+                                       FileUtils.copyInputStreamToFile(new 
ByteArrayInputStream(bb), Paths.get(tDir, fuid).toFile());
+                               }
+                               return new ServiceResult(fuid, Type.SUCCESS);
+                       } catch (Exception e) {
+                               return new ServiceResult(e.getMessage(), 
Type.ERROR);
+                       }
+               });
+       }
 }

Reply via email to