Browse Source

Eigenschaften unter styles (background-color etc.) werden jetzt übergeben

makro_datasrc
Daniel Quathamer 2 years ago
parent
commit
8c59a4984a
  1. 7
      build.xml
  2. 4
      src-modules/module/viz/conf/includes.txt
  3. 146
      src-modules/module/viz/conf/viz.xml
  4. 8
      src-modules/module/viz/masken/44000_felderinfo.unl
  5. 1
      src-modules/module/viz/masken/44000_maske_system_bez.unl
  6. 8
      src-modules/module/viz/masken/44000_masken_felder_bez.unl
  7. 20
      src-modules/module/viz/masken/44000_maskeninfo.unl
  8. 1
      src-modules/module/viz/masken/44000_sachgeb_maske_bez.unl
  9. 10
      src-modules/module/viz/schluesseltabellen/sachgebiete_fuellen.sql
  10. 22
      src-modules/module/viz/schluesseltabellen/sx_repository.unl
  11. 56
      src-modules/module/viz/schluesseltabellen/sx_repository_fuellen.sql
  12. 28
      src-modules/module/viz/schluesseltabellen/sx_repository_fuellen.x
  13. 10
      src-modules/module/viz/schluesseltabellen/viz_property.unl
  14. 4
      src-modules/module/viz/schluesseltabellen/viz_property_group.unl
  15. 4
      src-modules/module/viz/schluesseltabellen/viz_property_input_type.unl
  16. 2
      src-modules/module/viz/schluesseltabellen/viz_renderer.unl
  17. 80
      superx/images/icons/more.svg
  18. 154
      superx/xml/js/viz/viz_functions.js
  19. 164
      superx/xml/viz_html_chart.xsl

7
build.xml

@ -54,9 +54,9 @@ ant -DMODULE_PATH=$VIZ_PFAD -DWEBAPP_DIR=$WEBAPP -DMODULE=viz dist @@ -54,9 +54,9 @@ ant -DMODULE_PATH=$VIZ_PFAD -DWEBAPP_DIR=$WEBAPP -DMODULE=viz dist
<fileset dir="${MODULE_PATH}/../../conf" includes="module_scripts_create_ant.xml" />
</subant>
</target>
<!-- <target name="dist" description="Create Download package">
<target name="dist" description="Create Download package">
<subant target="erzeuge_paket">
<!--<property name="basedir" value="${MODULE_PATH}/../../conf/" />-->
<property name="MODULE" value="${MODULE}" />
<property name="PFAD" value="/home/superx/fertige_module" />
<property name="DATABASE" value="POSTGRES" />
@ -68,5 +68,6 @@ ant -DMODULE_PATH=$VIZ_PFAD -DWEBAPP_DIR=$WEBAPP -DMODULE=viz dist @@ -68,5 +68,6 @@ ant -DMODULE_PATH=$VIZ_PFAD -DWEBAPP_DIR=$WEBAPP -DMODULE=viz dist
<property name="SUPERX_BASE" value="${WEBAPP}/WEB-INF" />
<fileset dir="${MODULE_PATH}/../../conf" includes="build.xml" />
</subant>
</target>-->
</target>
</project>

4
src-modules/module/viz/conf/includes.txt

@ -1,9 +1,11 @@ @@ -1,9 +1,11 @@
doku/viz_modul/viz.html
images/icons/more.svg
images/icons/chart-bar.svg
style/sx_viz_muster.css
WEB-INF/conf/edustore/db/bin/SQL_ENV_viz.sam
xml/js/viz/viz_functions.js
xml/js/viz/d3.min.js
xml/js/viz/d3-license.txt
xml/viz_html_chart.xsl
images/icons/chart-bar.svg
xml/js/viz/plot.js

146
src-modules/module/viz/conf/viz.xml

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--<!DOCTYPE module SYSTEM "../../../conf/superx-module.dtd"> -->
<module name="viz" version="0.1" sachgebiet_id="320"
<module name="viz" version="0.2b" sachgebiet_id="320"
sachgebiet="Visualisierungen" systeminfo_id="320"
system="Visualisierungen" thema="Visualisierungen" thema_parent="Abfragen">
<database name="superx" system="superx">
@ -33,7 +33,75 @@ rightname="CS_BIA_STANDARDREPORTS_ADMIN[VIZ]" /> @@ -33,7 +33,75 @@ rightname="CS_BIA_STANDARDREPORTS_ADMIN[VIZ]" />
</indexes>
</table>
<table name="viz_property_input_type" thema="Visualisierungen" typ="Schlüsseltabelle"
releaseUnload="empty">
<description>Schlüsseltabelle für Dialogtypen von Visualisierungseigenschaften</description>
<columns>
<column name="tid" type="SERIAL" size="" default="" notnull="true" description="tid" isKey="true"/>
<column name="uniquename" type="VARCHAR" size="255" default="" notnull="true" description="Unique Name" />
<column name="caption" type="VARCHAR" size="255" default="" notnull="" description="Bezeichnung" />
</columns>
<primaryKeys><rs>
<row>
<fld name='table_cat'>superx</fld>
<fld name='table_schem'>superx</fld>
<fld name='table_name'>viz_property_input_type</fld>
<fld name='column_name'>tid</fld>
<fld name='key_seq'>1</fld>
<fld name='pk_name'>viz_property_input_type_pk</fld>
</row>
</rs>
</primaryKeys>
<indexes>
</indexes>
</table>
<table name="viz_property_group" thema="Visualisierungen" typ="Schlüsseltabelle"
releaseUnload="empty">
<description>Schlüsseltabelle für Gruppen von Visualisierungseigenschaften</description>
<columns>
<column name="tid" type="SERIAL" size="" default="" notnull="true" description="tid" isKey="true"/>
<column name="uniquename" type="VARCHAR" size="255" default="" notnull="true" description="Unique Name" />
<column name="caption" type="VARCHAR" size="255" default="" notnull="" description="Bezeichnung" />
</columns>
<primaryKeys><rs>
<row>
<fld name='table_cat'>superx</fld>
<fld name='table_schem'>superx</fld>
<fld name='table_name'>viz_property_group</fld>
<fld name='column_name'>tid</fld>
<fld name='key_seq'>1</fld>
<fld name='pk_name'>viz_property_group_pk</fld>
</row>
</rs>
</primaryKeys>
<indexes>
</indexes>
</table>
<table name="viz_renderer" thema="Visualisierungen" typ="Schlüsseltabelle"
releaseUnload="empty">
<description>Schlüsseltabelle für Renderer von Visualisierungen</description>
<columns>
<column name="tid" type="SERIAL" size="" default="" notnull="true" description="tid" isKey="true"/>
<column name="uniquename" type="VARCHAR" size="255" default="" notnull="true" description="Unique Name" />
<column name="caption" type="VARCHAR" size="255" default="" notnull="" description="Bezeichnung" />
</columns>
<primaryKeys><rs>
<row>
<fld name='table_cat'>superx</fld>
<fld name='table_schem'>superx</fld>
<fld name='table_name'>viz_renderer</fld>
<fld name='column_name'>tid</fld>
<fld name='key_seq'>1</fld>
<fld name='pk_name'>viz_renderer_pk</fld>
</row>
</rs>
</primaryKeys>
<indexes>
</indexes>
</table>
<table name="viz_chart" thema="Visualisierungen" typ="Datentabelle"
releaseUnload="empty">
<description>Diagrammentwürfe</description>
@ -94,6 +162,14 @@ rightname="CS_BIA_STANDARDREPORTS_ADMIN[VIZ]" /> @@ -94,6 +162,14 @@ rightname="CS_BIA_STANDARDREPORTS_ADMIN[VIZ]" />
<column name="prop_uniquename" type="VARCHAR" size="255" default="" notnull="" description="Bezeichnung" />
<column name="prop_default" type="VARCHAR" size="255" default="" notnull="false" description="Defaultwert" />
<column name="prop_unit" type="VARCHAR" size="255" default="" notnull="false" description="Einheit" />
<column name="is_generic" type="SMALLINT" size="255" default="1" notnull="false" description="Generische Eigenschaft" ><comment>1=ja, 0=nein</comment></column>
<column name="static_values" type="TEXT" size="255" default="" notnull="false" description="Wertebereich (statisch)" ><comment>Mit "|" getrennt</comment></column>
<column name="is_mandatory" type="SMALLINT" size="255" default="0" notnull="false" description="Pflichteingabe" ><comment>1=ja, 0=nein</comment></column>
<column name="input_type_id" type="INTEGER" size="255" default="1" notnull="false" description="Eingabedialog" ><comment></comment></column>
<column name="property_group_id" type="INTEGER" size="255" default="" notnull="false" description="Art der Eigenschaft" ><comment></comment></column>
<column name="explanation" type="TEXT" size="32255" default="" notnull="false" description="Erläuterung" ><comment>Wird als Tooltip angezeigt</comment></column>
</columns>
<primaryKeys><rs>
@ -142,17 +218,17 @@ rightname="CS_BIA_STANDARDREPORTS_ADMIN[VIZ]" /> @@ -142,17 +218,17 @@ rightname="CS_BIA_STANDARDREPORTS_ADMIN[VIZ]" />
</functions>
<themen>
<thema name="Administration Visualisierungen"
parent="Visualisierungen">Abfragen zur Administration von Visualisierungen </thema>
parent="Masken verwalten">Abfragen zur Administration von Visualisierungen </thema>
</themen>
<masken>
<!--
<maske tid="44000" name="Visualisierungen suchen" thema="Administration Visualisierungen">
<description>Visualisierungen verwalten</description>
<src>
<path>$VIZ_PFAD/masken</path>
</src>
</maske>
-->
</masken>
<data-integrity>
@ -179,6 +255,16 @@ parent="Visualisierungen">Abfragen zur Administration von Visualisierungen </the @@ -179,6 +255,16 @@ parent="Visualisierungen">Abfragen zur Administration von Visualisierungen </the
displayType="select" visibleFields="caption" format="%s">
<relation-column from="tid" to="viz_property_id" />
</relation>
<!--viz_property-->
<relation from="viz_property_input_type" to="viz_property" delete="FALSE"
displayType="select" visibleFields="caption" format="%s">
<relation-column from="tid" to="input_type_id" />
</relation>
<relation from="viz_property_group" to="viz_property" delete="FALSE"
displayType="select" visibleFields="caption" format="%s">
<relation-column from="tid" to="property_group_id" />
</relation>
</data-integrity>
</database>
@ -199,6 +285,10 @@ parent="Visualisierungen">Abfragen zur Administration von Visualisierungen </the @@ -199,6 +285,10 @@ parent="Visualisierungen">Abfragen zur Administration von Visualisierungen </the
<install-step name="Füllen der Modul-Tabellen">
<action error="stop">
<loadtable refresh="true" delimiter="^" header="false" tabname="viz_type"><file path="$VIZ_PFAD/schluesseltabellen/viz_type.unl"/></loadtable>
<loadtable refresh="true" delimiter="^" header="false" tabname="viz_property"><file path="$VIZ_PFAD/schluesseltabellen/viz_property.unl"/></loadtable>
<loadtable refresh="true" delimiter="^" header="false" tabname="viz_property_input_type"><file path="$VIZ_PFAD/schluesseltabellen/viz_property_input_type.unl"/></loadtable>
<loadtable refresh="true" delimiter="^" header="false" tabname="viz_property_group"><file path="$VIZ_PFAD/schluesseltabellen/viz_property_group.unl"/></loadtable>
<loadtable refresh="true" delimiter="^" header="false" tabname="viz_renderer"><file path="$VIZ_PFAD/schluesseltabellen/viz_renderer.unl"/></loadtable>
<!--
<loadtable refresh="true" delimiter="^" header="false" tabname="viz_type_type"><file path="$VIZ_PFAD/schluesseltabellen/viz_type_type.unl"/></loadtable>
@ -285,6 +375,54 @@ mode="full"> @@ -285,6 +375,54 @@ mode="full">
<customfield name="viz_type_id" visibleSize="10" nullFieldValue="" />
<customfield name="preview_svg" visibleSize="80" nullFieldValue="" />
</form>
<form name="viz_property_list"
table="viz_property"
path="/edit/viz/viz_property_list.jsp"
followUp=""
caption="Diagrammeigenschaften verwalten"
orderBy="name"
gotoHt=""
helpfile=""
maxRows="*"
mode="full">
<description>In diesem Formular können Sie Diagrammeigenschaften verwalten. Im Details-Formular können Sie Eigenschaften zuordnen.</description>
<filters>
</filters>
<field-selection complete="false" />
<customfield name="tid" nullFieldValue="" />
<customfield name="caption" nullFieldValue="" visibleSize="30" />
<customfield name="uniquename" nullFieldValue="" visibleSize="30" />
<customfield type="link" name="Details" path="/superx/edit/viz/viz_property_edit.jsp" linkid="tid"/>
</form>
<form name="viz_property_edit"
table="viz_property"
path="/edit/viz/viz_property_edit.jsp"
followUp=""
caption="Diagrammeigenschaften bearbeiten"
orderBy="caption"
gotoHt=""
helpfile=""
maxRows="1"
mode="full">
<description>In diesem Formular können Sie Diagramme verwalten.</description>
<filters>
<filter mandatory="true" type="equals">tid</filter>
</filters>
<field-selection complete="false" />
<customfield name="tid" />
<customfield name="caption" visibleSize="50" nullFieldValue="" />
<customfield name="prop_uniquename" visibleSize="50" nullFieldValue="" />
<customfield name="prop_default" visibleSize="50" nullFieldValue="" />
<customfield name="prop_unit" visibleSize="50" nullFieldValue="" />
<customfield name="is_generic" visibleSize="50" nullFieldValue="" />
<customfield name="is_mandatory" visibleSize="10" nullFieldValue="" />
<customfield name="input_type_id" visibleSize="10" nullFieldValue="" />
<customfield name="static_values" visibleSize="80" nullFieldValue="" />
<customfield name="property_group_id" visibleSize="10" nullFieldValue="" />
<customfield name="explanation" visibleSize="80" nullFieldValue="" />
</form>
</dbforms>
</module>

8
src-modules/module/viz/masken/44000_felderinfo.unl

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
44000^Benutzer/in^50^0^0^150^200^1^integer^200^0^1^<<SQL>> select tid,nvl(name,benutzer) from userinfo order by 2;^hidden^^
44001^Ausgabetabelle^10^0^0^150^80^1^integer^200^0^13^<<SQL>> select tid,name from qa_resultset where 1=1 /* and systeminfo_id=<<Komponente>> */ order by 2;^^^
44002^Eigenschaften verwalten^100^0^0^150^300^1^char^30^0^18^^^<<SQL>> select '../edit/viz/viz_property_list.jsp' from xdummy;^
44003^Name^20^0^0^150^150^1^sql^50^0^0^^^^
44004^Komponente^1^0^0^150^200^1^integer^200^0^13^<<SQL>> select tid,name from systeminfo order by 2;^ ^^
44005^Projekte verwalten^200^0^0^150^300^1^char^30^0^13^^^<<SQL>> select '../edit/qa/qa_project_list.jsp' from xdummy;^
44006^Projekt^5^0^0^150^200^1^integer^200^0^13^<<SQL>> select tid,name from qa_project where active=1 /* and systeminfo_id=<<Komponente>> */ order by 2;^^^
44007^Status Test^200^0^0^150^200^1^integer^200^0^13^<<SQL>> select 1,'nur aktive' from xdummy union select 0,'nur inaktive' from xdummy order by 2;^^ ^

1
src-modules/module/viz/masken/44000_maske_system_bez.unl

@ -0,0 +1 @@ @@ -0,0 +1 @@
44000^320^

8
src-modules/module/viz/masken/44000_masken_felder_bez.unl

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
44000^44000^
44000^44001^
44000^44002^
44000^44003^
44000^44004^
44000^44005^
44000^44006^
44000^44007^

20
src-modules/module/viz/masken/44000_maskeninfo.unl

@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
44000^Visualisierungen verwalten^--Autor: D. Quathamer\
--Datum: 2.8.2019\
--freemarker template\
\
select \
caption,\
uniquename\
from viz_chart\
order by 1\
;^XIL List\
drop_and_delete movable_columns sizable_columns horizontal_scrolling\
white_space_color=COLOR_WHITE fixed_columns=2\
min_heading_height=35\
Column CID=0 heading_text="Name" center_heading\
row_selectable col_selectable heading_platform readonly\
width=50 text_size=100\
Column CID=0 heading_text="Schlüssel" center_heading\
row_selectable col_selectable heading_platform readonly\
width=50 text_size=100\
@@@^^^Diagrammtypen und Eigenschaften verwalten^ ^^1^440^360^0^1^^

1
src-modules/module/viz/masken/44000_sachgeb_maske_bez.unl

@ -0,0 +1 @@ @@ -0,0 +1 @@
320^44000^

10
src-modules/module/viz/schluesseltabellen/sachgebiete_fuellen.sql

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
--Das Sachgebiet 320 wird installiert
delete from group_sachgeb_bez where sachgebiete_id in (320)
and groupinfo_id in (select G.tid from groupinfo G where G.name='Administratoren' or G.name='superx') ;
insert into group_sachgeb_bez
select G.tid,320 from groupinfo G where G.name='Administratoren' or G.name='superx';

22
src-modules/module/viz/schluesseltabellen/sx_repository.unl

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
1^CUSTOMXMLADD^<sqlvars> <sqlvar name="commonChartProperties" type="hash">\
SELECT tid,\
caption,\
prop_uniquename,\
prop_default,\
prop_unit\
\
FROM viz_property \
where is_generic=1\
;\
</sqlvar> </sqlvars>\
<chartProperties>\
<#if commonChartProperties?is_sequence><#foreach cp in commonChartProperties>\
<commonChartProperty tid="${cp.tid}" \
caption="${cp.caption}" \
prop_uniquename="${cp.prop_uniquename}" \
prop_default="${cp.prop_default}" \
prop_unit="${cp.prop_unit}" \
/>\
</#foreach>\
</#if>\
</chartProperties>^Chart-Eigenschaften^Hier werden Chart-Eigenschaften gefiltert^^VIZ_PROPERTIES^^^320^1^0^0^^1^01.01.1900^31.12.3000^

56
src-modules/module/viz/schluesseltabellen/sx_repository_fuellen.sql

@ -0,0 +1,56 @@ @@ -0,0 +1,56 @@
--freemarker template
<#if SQLdialect='Postgres'>
select sp_update_sequence('sx_repository');
</#if>
delete from tmp_repository where id in (select id from sx_repository);
insert into sx_repository
(
id,
content,
caption,
comment,
version,
art,
art2,
art3,
sachgebiete_id,
sort1,
sort2,
sort3,
geaendert_am,
aktiv,
gueltig_seit,
gueltig_bis
)
SELECT
id,
content,
caption,
comment,
version,
art,
art2,
art3,
sachgebiete_id,
sort1,
sort2,
sort3,
geaendert_am,
aktiv,
gueltig_seit,
gueltig_bis
FROM tmp_repository;
<#if SQLdialect='Postgres'>
select sp_update_sequence('sx_repository');
</#if>
drop table tmp_repository;

28
src-modules/module/viz/schluesseltabellen/sx_repository_fuellen.x

@ -0,0 +1,28 @@ @@ -0,0 +1,28 @@
#!/bin/bash
DOQUERY "create table tmp_repository(
tid SERIAL not null,
id CHAR(200) not null,
content TEXT ,
caption CHAR(200) ,
comment TEXT ,
version SMALLINT ,
art CHAR(200) ,
art2 CHAR(200) ,
art3 CHAR(200) ,
sachgebiete_id INTEGER ,
sort1 INTEGER ,
sort2 INTEGER ,
sort3 INTEGER ,
geaendert_am DATE ,
aktiv smallint ,
gueltig_seit DATE ,
gueltig_bis DATE
);"
sx_auto_upload_table.x tmp_repository sx_repository.unl
DOSQL sx_repository_fuellen.sql

10
src-modules/module/viz/schluesseltabellen/viz_property.unl

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
1^Höhe^height^500^px^1^^0^1^1^^
3^Werte-Label Breite^valueLabelWidth^20^px^1^^0^1^4^^
8^Füllfarbe^fill^blue^ ^1^ ^0^1^3^^
9^Grid-Label Höhe^gridLabelHeight^18^ ^1^ ^0^1^4^^
10^Grid Offset^gridChartOffset^3^ ^1^ ^0^1^4^^
2^Breite^chartWidth^600^px^1^^0^1^1^^
7^Schriftfamilie^fontFamily^sans-serif^ ^1^sans-serif|serif|monospace^0^2^4^^
6^Schriftgröße^fontSize^10^pt^1^^0^1^4^Text- und Diagrammelemente^
4^Hintergrundfarbe^background-color^#ffffeb^ ^1^^0^1^4^^
5^Vordergrundfarbe^color^#3333ff^ ^1^^0^1^4^Text- und Diagrammelemente^

4
src-modules/module/viz/schluesseltabellen/viz_property_group.unl

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
1^SIZE^Grafikgröße^
2^MARGIN^Abstände^
3^COLOR^Farben^
4^STYLES^Elementformatierung^

4
src-modules/module/viz/schluesseltabellen/viz_property_input_type.unl

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
1^TEXT^Texteingabe^
2^SELECT^Select-Liste^
3^COLOR^Farbauswahl^
4^LEVER^Schieberegler^

2
src-modules/module/viz/schluesseltabellen/viz_renderer.unl

@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
1^d3js^D3JS^
2^plot^Observalbe Plot^

80
superx/images/icons/more.svg

@ -0,0 +1,80 @@ @@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="56.220444mm"
height="8.3123283mm"
viewBox="0 0 56.220443 8.3123283"
version="1.1"
id="svg1472"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
sodipodi:docname="more.svg">
<defs
id="defs1466" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="1123.7292"
inkscape:cy="-506.1488"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1021"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata1469">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(403.9093,-6.6024704)">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:51.21004105px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#3273dc;fill-opacity:1;stroke:none;stroke-width:0.60011762"
x="-508.20319"
y="11.360815"
id="text2021"
transform="scale(0.81321686,1.2296843)"><tspan
sodipodi:role="line"
id="tspan2019"
x="-508.20319"
y="11.360815"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Tlwg Mono';-inkscape-font-specification:'Tlwg Mono Bold';fill:#3273dc;fill-opacity:1;stroke-width:0.60011762">...</tspan></text>
<flowRoot
xml:space="preserve"
id="flowRoot3382"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:85.33333588px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="matrix(0.26458333,0,0,0.26458333,-414.00595,-7.3928561)"><flowRegion
id="flowRegion3384"><rect
id="rect3386"
width="697.14288"
height="354.28571"
x="-197.14285"
y="-53.363335" /></flowRegion><flowPara
id="flowPara3388"></flowPara></flowRoot> </g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

154
superx/xml/js/viz/viz_functions.js

@ -38,7 +38,7 @@ this.value=value; @@ -38,7 +38,7 @@ this.value=value;
this.isDefault=isDefault;
}
function chartProperty(name,caption,isMeasure,isMandatory)
function dimensionProperty(name,caption,isMeasure,isMandatory)
{
this.name=name;
this.caption=caption;
@ -172,9 +172,9 @@ function prepareBarXForm() @@ -172,9 +172,9 @@ function prepareBarXForm()
{
var chartProperties=[];
var propertyCounter=0;
var myProp= new chartProperty("viz_dimension1","Kategorie-Dimension",false,true);
var myProp= new dimensionProperty("viz_dimension1","Kategorie-Dimension",false,true);
chartProperties[0]=myProp;
var myProp= new chartProperty("viz_measure1","Maß",true,true);
var myProp= new dimensionProperty("viz_measure1","Maß",true,true);
chartProperties[1]=myProp;
return chartProperties;
@ -184,11 +184,11 @@ function prepareBarYForm() @@ -184,11 +184,11 @@ function prepareBarYForm()
{
var chartProperties=[];
var propertyCounter=0;
var myProp= new chartProperty("viz_dimension1","Kategorie-Dimension",true,false,true,null,null,true);
var myProp= new dimensionProperty("viz_dimension1","Kategorie-Dimension",true,false,true,null,null,true);
chartProperties[0]=myProp;
var myProp= new chartProperty("viz_dimension2","Serien-Dimension",true,false,false,null,null,true);
var myProp= new dimensionProperty("viz_dimension2","Serien-Dimension",true,false,false,null,null,true);
chartProperties[1]=myProp;
var myProp= new chartProperty("viz_measure1","Maß",true,true,true,null,null,true);
var myProp= new dimensionProperty("viz_measure1","Maß",true,true,true,null,null,true);
chartProperties[2]=myProp;
return chartProperties;
@ -198,11 +198,11 @@ function prepareLineForm() @@ -198,11 +198,11 @@ function prepareLineForm()
{
var chartProperties=[];
var propertyCounter=0;
var myProp= new chartProperty("viz_dimension1","Kategorie-Dimension",true,false,true,null,null,true);
var myProp= new dimensionProperty("viz_dimension1","Kategorie-Dimension",true,false,true,null,null,true);
chartProperties[0]=myProp;
var myProp= new chartProperty("viz_dimension2","Serien-Dimension",true,false,false,null,null,true);
var myProp= new dimensionProperty("viz_dimension2","Serien-Dimension",true,false,false,null,null,true);
chartProperties[1]=myProp;
var myProp= new chartProperty("viz_measure1","Maß",true,true,true,null,null,true);
var myProp= new dimensionProperty("viz_measure1","Maß",true,true,true,null,null,true);
chartProperties[2]=myProp;
return chartProperties;
@ -212,9 +212,9 @@ function prepareLineForm_alt() @@ -212,9 +212,9 @@ function prepareLineForm_alt()
{
var chartProperties=[];
var propertyCounter=0;
var myProp= new chartProperty("dimension1","X-Achse",true,false,true,null,null,true);
var myProp= new dimensionProperty("dimension1","X-Achse",true,false,true,null,null,true);
chartProperties[0]=myProp;
var myProp= new chartProperty("measure1","Y-Achse",true,true,true,null,null,true);
var myProp= new dimensionProperty("measure1","Y-Achse",true,true,true,null,null,true);
chartProperties[1]=myProp;
return chartProperties;
@ -397,6 +397,12 @@ function renderForm(formDiv,myChartProperties) @@ -397,6 +397,12 @@ function renderForm(formDiv,myChartProperties)
*/
for(var k=0;k < myChartProperties.length;k++)
{
myForm.appendChild(renderDimensionField(myChartProperties[k]));
}
}
function renderDimensionField(dimensionProperty)
{
const fieldElem = document.createElement("div");
fieldElem.classList.add("field");
fieldElem.classList.add("is-grouped");
@ -407,7 +413,7 @@ function renderForm(formDiv,myChartProperties) @@ -407,7 +413,7 @@ function renderForm(formDiv,myChartProperties)
label.classList.add("label");
label.classList.add("is-required");
label.classList.add("is-small");
const textnode = document.createTextNode(myChartProperties[k].caption);
const textnode = document.createTextNode(dimensionProperty.caption);
label.appendChild(textnode);
labelElem.appendChild(label);
fieldElem.appendChild(labelElem);
@ -423,17 +429,18 @@ function renderForm(formDiv,myChartProperties) @@ -423,17 +429,18 @@ function renderForm(formDiv,myChartProperties)
inputSelectElem.classList.add("is-fullwidth");
const selElem = document.createElement("select");
selElem.name=myChartProperties[k].name;
selElem.id=myChartProperties[k].name;
fillSelectOptions(selElem,myChartProperties[k].getValueResultset(),myChartProperties[k].isMandatory);
selElem.name=dimensionProperty.name;
selElem.id=dimensionProperty.name;
selElem.onchange= function () {
createChart('chartDiv');
};
fillSelectOptions(selElem,dimensionProperty.getValueResultset(),dimensionProperty.isMandatory);
inputSelectElem.appendChild(selElem);
inputParaElem.appendChild(inputSelectElem);
inputFieldElem.appendChild(inputParaElem);
fieldElem.appendChild(inputFieldElem);
myForm.appendChild(fieldElem);
}
return fieldElem;
}
function renderFormDetails(formDiv,myCommonChartProperties)
@ -443,8 +450,8 @@ function renderFormDetails(formDiv,myCommonChartProperties) @@ -443,8 +450,8 @@ function renderFormDetails(formDiv,myCommonChartProperties)
while (myForm.firstChild) {
myForm.removeChild(myForm.firstChild);
}
/*
const tabElem = document.createElement("table");
//tabElem.caption="Eigenschaften";
for(var k=0;k < myCommonChartProperties.length;k++)
{
const rowElem = document.createElement("tr");
@ -452,7 +459,7 @@ function renderFormDetails(formDiv,myCommonChartProperties) @@ -452,7 +459,7 @@ function renderFormDetails(formDiv,myCommonChartProperties)
const textnode = document.createTextNode(myCommonChartProperties[k].caption);
tdCap.appendChild(textnode);
rowElem.appendChild(tdCap);
if(myCommonChartProperties[k].inputType==0)
if(myCommonChartProperties[k].inputType=="TEXT")
{
//Einfaches Texteingabefeld:
const tdInpElem = document.createElement("td");
@ -466,7 +473,7 @@ function renderFormDetails(formDiv,myCommonChartProperties) @@ -466,7 +473,7 @@ function renderFormDetails(formDiv,myCommonChartProperties)
}
else
{ // Klappmenü:
{
const tdSelElem = document.createElement("td");
const selElem = document.createElement("select");
selElem.name=myCommonChartProperties[k].name;
@ -475,11 +482,76 @@ function renderFormDetails(formDiv,myCommonChartProperties) @@ -475,11 +482,76 @@ function renderFormDetails(formDiv,myCommonChartProperties)
tdSelElem.appendChild(selElem);
rowElem.appendChild(tdSelElem);
}
//here values, and then:
tabElem.appendChild( rowElem);
}
myForm.appendChild(tabElem);
//TODO: myCommonChartProperties auf separatem TAB
}
*/
for(var k=0;k < myCommonChartProperties.length;k++)
{
myForm.appendChild(renderChartPropertyField(myCommonChartProperties[k]));
}
}
function renderChartPropertyField(commonChartProperty)
{
const fieldElem = document.createElement("div");
fieldElem.classList.add("field");
fieldElem.classList.add("is-grouped");
//label:
const labelElem = document.createElement("div");
labelElem.classList.add("label-container");
const label = document.createElement("label");
label.classList.add("label");
label.classList.add("is-required");
label.classList.add("is-small");
const textnode = document.createTextNode(commonChartProperty.caption);
label.appendChild(textnode);
labelElem.appendChild(label);
fieldElem.appendChild(labelElem);
//input:
const inputFieldElem = document.createElement("div");
inputFieldElem.classList.add("field");
//inputFieldElem.classList.add("is-active");
const inputParaElem = document.createElement("p");
inputParaElem.classList.add("control-new");
const inputElem = document.createElement("div");
inputElem.classList.add("is-small");
inputElem.classList.add("is-fullwidth");
if(commonChartProperty.inputType=="TEXT")
{
//Einfaches Texteingabefeld:
const inpElem = document.createElement("input");
inpElem.type="TEXT";
inpElem.size=15;
inpElem.title=commonChartProperty.explanation;
inpElem.name=commonChartProperty.name;
inpElem.id=commonChartProperty.name;
inpElem.value=commonChartProperty.defaultValue;
inpElem.onchange= function () {
createChart('chartDiv');
};
inputElem.appendChild(inpElem);
inputParaElem.appendChild(inputElem);
}
else
{
//select input:
inputElem.classList.add("select");
const selElem = document.createElement("select");
selElem.name=commonChartProperty.name;
selElem.id=commonChartProperty.name;
selElem.title=commonChartProperty.explanation;
selElem.onchange= function () {
createChart('chartDiv');
};
fillSelectOptions(selElem,commonChartProperty.getValueResultset(),commonChartProperty.isMandatory);
inputElem.appendChild(selElem);
inputParaElem.appendChild(inputElem);
}
inputFieldElem.appendChild(inputParaElem);
fieldElem.appendChild(inputFieldElem);
return fieldElem;
}
function fillSelectOptions(myCombo,myValues,isMandatory)
@ -642,15 +714,18 @@ for(row=1;row<rowcount;row++) @@ -642,15 +714,18 @@ for(row=1;row<rowcount;row++)
}
tableDiv.appendChild(tabElem);
}
function createChart(chartDivElem)
function showChartDiv(chartDivElem)
{
chartType=document.getElementById("viz_chart_type").value;
var myDiv=document.getElementById(chartDivElem);
if(myDiv.style.display=="block")
myDiv.style.display="none";
else
myDiv.style.display="block";
}
function createChart(chartDivElem)
{
chartType=document.getElementById("viz_chart_type").value;
var selectionRsMetaData=[];
var selectionRs=[];
@ -677,7 +752,8 @@ var svg = d3.select("#"+chartDivElem).append("svg") @@ -677,7 +752,8 @@ var svg = d3.select("#"+chartDivElem).append("svg")
.attr("text-anchor", "start")
.attr("id", "chartSVG")
;
svg.width=50;
switch (chartType)
{
case "sample":
@ -827,13 +903,27 @@ function getChartOptions(categoryDim,measureDim,marksArray,chartOrientationVerti @@ -827,13 +903,27 @@ function getChartOptions(categoryDim,measureDim,marksArray,chartOrientationVerti
var marginBottomDefault=100;
var categoryLabel=getColumnCaption(categoryDim);
var measureLabel=getColumnCaption(measureDim);
var styles={
var stylesString="{\"overflow\": \"visible\"";
for(var k=0;k < commonChartProperties.length;k++)
{
if(commonChartProperties[k].groupUniquename=="STYLES")
{
stylesString+=",\""+commonChartProperties[k].name+"\":\""+getCommonChartProperty(commonChartProperties[k].name)+"\"";
}
}
stylesString+=" }";
console.log("Styles:"+ stylesString);
var styles=JSON.parse(stylesString);
/*var styles={
backgroundColor: myBgColor,
color: myColor,
fontFamily: myFontFamily,
fontSize: fontSizeDefault,
overflow: "visible"
}
}*/
if(chartOrientationVertical)
{

164
superx/xml/viz_html_chart.xsl

@ -126,7 +126,7 @@ padding-bottom:10px; @@ -126,7 +126,7 @@ padding-bottom:10px;
//document.body.append(Plot.plot(options));
function commonChartProperty(name,caption,isMandatory,inputType,staticValues,defaultValue)
function commonChartProperty(name,caption,isMandatory,inputType,staticValues,defaultValue,explanation,groupUniquename)
{
this.name=name;
this.caption=caption;
@ -134,6 +134,8 @@ this.staticValues=staticValues; @@ -134,6 +134,8 @@ this.staticValues=staticValues;
this.isMandatory=isMandatory;
this.inputType=inputType;
this.defaultValue=defaultValue;
this.explanation=explanation;
this.groupUniquename=groupUniquename;
this.getValueResultset = function () {
var valueOptions=[];
var optionCounter=0;
@ -155,41 +157,41 @@ var staticValueArray = staticValues.split(/\|/); @@ -155,41 +157,41 @@ var staticValueArray = staticValues.split(/\|/);
}
var commonChartProperties=[];
var newCommonChartProperty = new commonChartProperty("valueLabelWidth","Werte-Label Breite", false, 0,null,20);
commonChartProperties.push(newCommonChartProperty);
var newCommonChartProperty = new commonChartProperty("gridLabelHeight","Grid-Label Höhe", false,0, null,18);
commonChartProperties.push(newCommonChartProperty);
var newCommonChartProperty = new commonChartProperty("background-color","Hintergrundfarbe", false,0, null,"#ffffeb");
commonChartProperties.push(newCommonChartProperty);
var newCommonChartProperty = new commonChartProperty("fill","Füllfarbe", false,0, null,"blue");
commonChartProperties.push(newCommonChartProperty);
var newCommonChartProperty = new commonChartProperty("color","Farbe Text- und Diagrammelemente", false,0, null,"#3333ff");
commonChartProperties.push(newCommonChartProperty);
var newCommonChartProperty = new commonChartProperty("gridChartOffset","Grid Offset", false,0, null,3);
commonChartProperties.push(newCommonChartProperty);
var newCommonChartProperty = new commonChartProperty("fontSize","Schriftgröße", false, 0, null,10);
commonChartProperties.push(newCommonChartProperty);
var newCommonChartProperty = new commonChartProperty("font-family","Schriftart", false, 1, "sans-serif|serif|monospace","sans-serif");
commonChartProperties.push(newCommonChartProperty);
var newCommonChartProperty = new commonChartProperty("chartWidth","Breite des Diagramms", false, 0,null,"800");
]]></xsl:text>
<xsl:for-each select="/ergebnisse/ergebnis/ergebniselement/chartProperties/commonChartProperty">
<xsl:text>
var newCommonChartProperty = new commonChartProperty("</xsl:text>
<xsl:value-of select="@prop_uniquename" />
<xsl:text>","</xsl:text>
<xsl:value-of select="@caption" />
<xsl:text>",</xsl:text><xsl:choose>
<xsl:when test="@is_mandatory=1"><xsl:text>true</xsl:text>
</xsl:when>
<xsl:otherwise>false</xsl:otherwise>
</xsl:choose>
<xsl:text>,"</xsl:text>
<xsl:value-of select="@input_type_uniquename" />
<xsl:text>"
,"</xsl:text>
<xsl:value-of select="@static_values" />
<xsl:text>","</xsl:text>
<xsl:value-of select="@prop_default" />
<xsl:text>","</xsl:text>
<xsl:value-of select="@explanation" />
<xsl:text>","</xsl:text>
<xsl:value-of select="@group_uniquename" />
<xsl:text>");
commonChartProperties.push(newCommonChartProperty);
var newCommonChartProperty = new commonChartProperty("chartCaption","Titel des Diagramms", false,0, null,"]]></xsl:text>
<xsl:value-of select="/ergebnisse/ergebnis/maskenname" /><xsl:text>");
</xsl:text>
</xsl:for-each>
<xsl:text>
var newCommonChartProperty = new commonChartProperty("chartCaption","Titel des Diagramms", false,"TEXT", "","</xsl:text>
<xsl:value-of select="/ergebnisse/ergebnis/maskenname" /><xsl:text>","wird unter dem Diagramm angezeigt","TITLE");
commonChartProperties.push(newCommonChartProperty);
</xsl:text>
</script>
<script language="Javascript" type="text/javascript" src="/superx/xml/js/viz/viz_functions.js" />
<script language="Javascript" type="text/javascript" src="../xml/js/viz/viz_functions.js" />
</xsl:template>
@ -1309,12 +1311,20 @@ rs.push(new dataRow(</xsl:text><xsl:value-of select="$rownr"/> @@ -1309,12 +1311,20 @@ rs.push(new dataRow(</xsl:text><xsl:value-of select="$rownr"/>
<span class="separator">&#160;</span>
<span class="separator">&#160;</span>
<button class="button is-small is-rounded is-white is-outlined"
<!--<button class="button is-small is-rounded is-white is-outlined"
onClick="showDataTable('dataDivTable',rs,rsMetaData,10);">
<span class="icon is-small"><i class="../images/more.svg"></i>
<img src="../images/more.svg" title="Laden" />
</span>
</button>
</button>-->
<a
onClick="showDataTable('dataDivTable',rs,rsMetaData,10);">
<span class="icon">
<img src="../images/icons/more.svg" title="Laden" />
</span>
</a>
</div>
<div id="dataDiv"> <!--class="section">-->
@ -1334,12 +1344,19 @@ rs.push(new dataRow(</xsl:text><xsl:value-of select="$rownr"/> @@ -1334,12 +1344,19 @@ rs.push(new dataRow(</xsl:text><xsl:value-of select="$rownr"/>
<span class="separator">&#160;</span>
<span class="separator">&#160;</span>
<button class="button is-small is-rounded is-white is-outlined"
<!--<button class="button is-small is-rounded is-white is-outlined"
onClick="fillDataSelectionForm('dataSelectionFormDiv');">
<span class="icon is-small"><i class="../images/more.svg"></i>
<img src="../images/more.svg" title="Laden" />
</span>
</button>
</button>-->
<a
onClick="fillDataSelectionForm('dataSelectionFormDiv');">
<span class="icon">
<img src="../images/icons/more.svg" title="Laden" />
</span>
</a>
</div>
<div id="dataSelectionDiv"> <!--class="section"-->
@ -1563,12 +1580,19 @@ rs.push(new dataRow(</xsl:text><xsl:value-of select="$rownr"/> @@ -1563,12 +1580,19 @@ rs.push(new dataRow(</xsl:text><xsl:value-of select="$rownr"/>
<span class="separator">&#160;</span>
<span class="separator">&#160;</span>
<button class="button is-small is-rounded is-white is-outlined"
<!--<button class="button is-small is-rounded is-white is-outlined"
onClick="selectionResultPreview('selectionResultPreviewTable');">
<span class="icon is-small"><i class="../images/more.svg"></i>
<img src="../images/more.svg" title="Laden" />
</span>
</button>
</button>-->
<a
onClick="selectionResultPreview('selectionResultPreviewTable');">
<span class="icon">
<img src="../images/icons/more.svg" title="Laden" />
</span>
</a>
</div>
<div id="selectionResultPreview"> <!--class="section">-->
@ -1604,7 +1628,7 @@ rs.push(new dataRow(</xsl:text><xsl:value-of select="$rownr"/> @@ -1604,7 +1628,7 @@ rs.push(new dataRow(</xsl:text><xsl:value-of select="$rownr"/>
</table>-->
<div class="label-container">
<label class="label is-required is-small"><strong>Allgemeine Layoutmerkmale</strong></label>
<label class="label is-required is-small"><strong>Basismerkmale</strong></label>
</div>
<span class="separator">&#160;</span>
@ -1639,7 +1663,9 @@ rs.push(new dataRow(</xsl:text><xsl:value-of select="$rownr"/> @@ -1639,7 +1663,9 @@ rs.push(new dataRow(</xsl:text><xsl:value-of select="$rownr"/>
</span>
</div>
<div id="chartPropertiesForm"> <!--style="visibility:hidden" class="section"--></div>
<!--Ende Formular Allg. Layoutmerkmale-->
<!--<div class="field is-grouped">
<div class="label-container">
<label class="label is-required is-small">Kategorie-Dimension</label>
@ -1720,22 +1746,30 @@ rs.push(new dataRow(</xsl:text><xsl:value-of select="$rownr"/> @@ -1720,22 +1746,30 @@ rs.push(new dataRow(</xsl:text><xsl:value-of select="$rownr"/>
<span class="separator">&#160;</span>
<!--Formular Erweiterte Layoutmerkmale-->
<div class="field is-grouped">
<div class="label-container">
<label class="label is-required is-small"><strong>Erweiterte Layoutmerkmale</strong></label>
<label class="label is-required is-small"><strong>Zusatzmerkmale</strong></label>
</div>
<span class="separator">&#160;</span>
<span class="separator">&#160;</span>
<a
onClick="showChartPropertiesForm();">
<span class="icon is-small"><i class="../images/more.svg"></i>
<img src="../images/more.svg" title="Laden" />
</span>
</a>
<div id="chartPropertiesFormDetails" style="display:none"><p>Eigenschaften</p> </div>
<!--<button class="button is-small is-rounded is-white is-outlined"
onClick="showChartPropertiesForm();">
<span class="icon is-small"><i class="../images/more.svg"></i>
<img src="../images/more.svg" title="Laden" />
</span>
</button>-->
<a
onClick="showChartPropertiesForm();">
<span class="icon">
<img src="../images/icons/more.svg" title="Laden" />
</span>
</a>
</div>
<div id="chartPropertiesFormDetails" style="display:none"><!--<p>Eigenschaften</p>--> </div>
</form>
</div>
<!--Ende Formular Erweiterte Layoutmerkmale-->
@ -1752,12 +1786,18 @@ rs.push(new dataRow(</xsl:text><xsl:value-of select="$rownr"/> @@ -1752,12 +1786,18 @@ rs.push(new dataRow(</xsl:text><xsl:value-of select="$rownr"/>
<span class="separator">&#160;</span>
<span class="separator">&#160;</span>
<button class="button is-small is-rounded is-white is-outlined"
<!--<button class="button is-small is-rounded"
onClick="createChart('chartDiv');">
<span class="icon is-small"><i class="../images/more.svg"></i>
<img src="../images/more.svg" title="Laden" />
</span>
</button>
</button>-->
<a
onClick="showChartDiv('chartDiv');">
<span class="icon">
<img src="../images/icons/more.svg" title="Laden" />
</span>
</a>
</div>
<div id="chartCanvas"> <!--class="section"-->
@ -1785,12 +1825,18 @@ rs.push(new dataRow(</xsl:text><xsl:value-of select="$rownr"/> @@ -1785,12 +1825,18 @@ rs.push(new dataRow(</xsl:text><xsl:value-of select="$rownr"/>
<span class="separator">&#160;</span>
<span class="separator">&#160;</span>
<button class="button is-small is-rounded is-white is-outlined"
<!--<button class="button is-small is-rounded is-white is-outlined"
onClick="createChart('chartDiv2');">
<span class="icon is-small"><i class="../images/more.svg"></i>
<img src="../images/more.svg" title="Laden" />
</span>
</button>
</button>-->
<a
onClick="showChartDiv('chartDiv2'); createChart('chartDiv2');">
<span class="icon">
<img src="../images/icons/more.svg" title="Laden" />
</span>
</a>
</div>
<div id="chartCanvas"> <!--class="section"-->
@ -1805,18 +1851,24 @@ rs.push(new dataRow(</xsl:text><xsl:value-of select="$rownr"/> @@ -1805,18 +1851,24 @@ rs.push(new dataRow(</xsl:text><xsl:value-of select="$rownr"/>
<!-- Aufruf/Anzeige SVG-Quellcode-->
<div class="field is-grouped">
<div class="label-container">
<label class="label is-required is-small"><strong>Diagramm-Quellcode (svg)</strong></label>
<label class="label is-required is-small"><strong>Diagramm-Code (svg)</strong></label>
</div>
<span class="separator">&#160;</span>
<span class="separator">&#160;</span>
<button class="button is-small is-rounded is-white is-outlined"
<!--<button class="button is-small is-rounded is-white is-outlined"
onClick="showSrcCode();">
<span class="icon is-small"><i class="../images/more.svg"></i>
<img src="../images/more.svg" title="Laden" />
</span>
</button>
</button>-->
<a
onClick="showSrcCode();">
<span class="icon">
<img src="../images/icons/more.svg" title="Laden" />
</span>
</a>
</div>
<div id="chartSVGsrcDiv"> <!--class="section">-->

Loading…
Cancel
Save