Svelte - How to make array forEach method reactive to <svelte:window> bindings? - foreach

I have this Svelte code that essentially takes a html text from a database and for each tooltip checks whether there may be an overflow on the right side, if so the code flips the tooltip to the left side.
Svelte REPL.
<script>
import {onMount} from 'svelte'
let newInnerHTML = `<article identifier="061">
<ti.art>Článek 61</ti.art>
<sti.art>Změna nařízení (EU) č. 1093/2010</sti.art>
<alinea>
<parg>V čl. 4 bodu 2 nařízení (EU) č. 1093/2010 se doplňuje nový podbod, který zní:</parg>
<quot.s level="1">
<list type="OTHER">
<item>
<np>
<no.p>
<quotstart>"</quotstart>
viii)
</no.p>
<txt>
pokud jde o nařízení Evropského parlamentu a Rady (EU) 2019/2033
<note note.id="E0028" numbering="STAR" type="QUOTATION">
<parg>
Nařízení Evropského parlamentu a Rady (EU) 2019/2033 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostních požadavcích na investiční podniky a o změně nařízení (EU) č. 1093/2010 (EU) č. 575/2013, (EU) č. 600/2014 a (EU) č. 806/2014 (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 1 ).
</parg>
</note>
a směrnici Evropského parlamentu a Rady (EU) 2019/2034
<note note.id="E0029" numbering="STAR" type="QUOTATION">
<parg>
Směrnice Evropského parlamentu a Rady (EU) 2019/2034 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostním dohledu nad investičními podniky a o změně směrnic 2002/87/ES, 2009/65/ES, 2011/61/ES, 2013/36/EU, 2014/59/EU a 2014/65/EU (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 64).
<quotend>"</quotend>
</parg>
</note>
, příslušné orgány ve smyslu čl. 3 odst. 1 bodu 5 uvedené směrnice.
</txt>
</np>
</item>
</list>
<div>----------------------</div>
<note note.id="E0028" numbering="STAR" type="QUOTATION" class="under">
<parg>
Nařízení Evropského parlamentu a Rady (EU) 2019/2033 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostních požadavcích na investiční podniky a o změně nařízení (EU) č. 1093/2010 (EU) č. 575/2013, (EU) č. 600/2014 a (EU) č. 806/2014 (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 1 ).
</parg>
</note>
<note note.id="E0029" numbering="STAR" type="QUOTATION" class="under">
<parg>
Směrnice Evropského parlamentu a Rady (EU) 2019/2034 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostním dohledu nad investičními podniky a o změně směrnic 2002/87/ES, 2009/65/ES, 2011/61/ES, 2013/36/EU, 2014/59/EU a 2014/65/EU (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 64).
<quotend>"</quotend>
</parg>
</note>
</quot.s>
</alinea>
</article>
<article identifier="064">
<ti.art>Článek 64</ti.art>
<sti.art>Změny nařízení (EU) č. 806/2014</sti.art>
<alinea>
<parg>
V článku 12a nařízení Evropského parlamentu a Rady (EU) č. 806/2014
<note note.id="E0038" numbering="ARAB" numbering.continued="YES" type="FOOTNOTE">
<parg>
Nařízení Evropského parlamentu a Rady (EU) č. 806/2014 ze dne
<date iso="20140715">15. července 2014</date>
, kterým se stanoví jednotná pravidla a jednotný postup pro řešení krize úvěrových institucí a některých investičních podniků v rámci jednotného mechanismu pro řešení krizí a Jednotného fondu pro řešení krizí a mění nařízení (EU) č. 1093/2010 (
<ref.doc.oj coll="L" date.pub="20140730" no.oj="225" page.first="1">Úř. věst. L 225, 30.7.2014, s. 1</ref.doc.oj>
).
</parg>
</note>
se doplňuje nový odstavec, který zní:
</parg>
<quot.s level="1">
<parag identifier="012A.003">
<no.parag>
<quotstart>"</quotstart>
3.
</no.parag>
<alinea>
<parg>
Pokud jde o požadavky na kapitál na individuálním základě investičních podniků uvedených v čl. 2 písm. c) tohoto nařízení, které nejsou investičními podniky uvedenými v čl. 1 odst. 2 nebo 5 nařízení (EU) 2019/2033, jsou v souladu s článkem 65 nařízení Evropského parlamentu a Rady (EU) 2019/2033
<note note.id="E0039" numbering="STAR" type="QUOTATION">
<parg>
Nařízení Evropského parlamentu a Rady (EU) 2019/2033 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostních požadavcích na investiční podniky a o změně nařízení (EU) č. 1093/2010 (EU) č. 575/2013, (EU) č. 600/2014 a (EU) č. 806/2014 (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 1).
</parg>
</note>
v tomto nařízení odkazy na článek 92 nařízení (EU) č. 575/2013 chápány takto:
</parg>
<list type="alpha">
<item>
<np>
<no.p>a)</no.p>
<txt>odkazy na čl. 92 odst. 1 písm. c) nařízení (EU) č. 575/2013, pokud jde o požadavek na celkový kapitálový poměr, v tomto nařízení se považují za odkazy na čl. 11 odst. 1 nařízení (EU) 2019/2033;</txt>
</np>
</item>
<item>
<np>
<no.p>b)</no.p>
<txt>odkazy na čl. 92 odst. 3 nařízení (EU) č. 575/2013, pokud jde o celkový objem rizikové expozice, v tomto nařízení se považují za odkazy na příslušný požadavek podle čl. 11 odst. 1 nařízení (EU) 2019/2033 vynásobený koeficientem 12,5.</txt>
</np>
</item>
</list>
</alinea>
<alinea>
Pokud jde o dodatečné kapitálové požadavky na investiční podniky uvedené v čl. 2 písm. c) tohoto nařízení, které nejsou investičními podniky uvedenými v čl. 1 odst. 2 nebo 5 nařízení (EU) 2019/2034, považují se v souladu s článkem 65 směrnice Evropského parlamentu a Rady (EU) 2019/2034
<note note.id="E0040" numbering="STAR" type="QUOTATION">
<parg>
Směrnice Evropského parlamentu a Rady (EU) 2019/2034 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostním dohledu nad investičními podniky a o změně směrnic 2002/87/ES, 2009/65/ES, 2011/61/ES, 2013/36/EU, 2014/59/EU a 2014/65/EU (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 64).
<quotend>"</quotend>
</parg>
</note>
v tomto nařízení odkazy na článek 104a směrnice 2013/36/EU za odkazy na článek 40 směrnice (EU) 2019/2034.
</alinea>
</parag>
<div>----------------------</div>
<note note.id="E0039" numbering="STAR" type="QUOTATION" class="under">
<parg>
Nařízení Evropského parlamentu a Rady (EU) 2019/2033 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostních požadavcích na investiční podniky a o změně nařízení (EU) č. 1093/2010 (EU) č. 575/2013, (EU) č. 600/2014 a (EU) č. 806/2014 (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 1).
</parg>
</note>
<note note.id="E0040" numbering="STAR" type="QUOTATION" class="under">
<parg>
Směrnice Evropského parlamentu a Rady (EU) 2019/2034 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostním dohledu nad investičními podniky a o změně směrnic 2002/87/ES, 2009/65/ES, 2011/61/ES, 2013/36/EU, 2014/59/EU a 2014/65/EU (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 64).
<quotend>"</quotend>
</parg>
</note>
</quot.s>
</alinea>
</article>`;
let windowInnerWidthy;
let windowscrollX;
onMount(() => {
let tooltips = document.querySelectorAll("note:not(.under) parg");
tooltips.forEach(element => {
let tooltip = element.getBoundingClientRect();
let offset = tooltip.left + windowscrollX;
let width = tooltip.width;
let smaller = (offset + width <= windowInnerWidthy);
if (!smaller) {
element.classList.add('edge');
} else {
element.classList.remove('edge');
}
});
});
</script>
<svelte:window bind:innerWidth={windowInnerWidthy} bind:scrollX={windowscrollX}/>
<container>
{#html newInnerHTML}
</container>
<style>
:global(ti, preamble\.init, visa, sti, gr\.consid\.init, consid, article, ti\.art, sti\.art, parag, alinea, item)
{
display: block;
padding-top: 5px;
padding-bottom: 5px;
}
:global(no\.p, no\.parag)
{
padding-right: 6px;
}
:global(alinea:first-of-type)
{
display: inline
}
:global(doctitle, ti, ti\.art, sti, sti\.art)
{
text-align: center;
}
:global(note)
{
display: inline-block;
position: relative;
}
:global(note:not(.under) parg)
{
visibility: hidden;
position: absolute;
background-color: black;
color: #fff;
padding: 5px 5px;
border-radius: 6px;
z-index: 1;
width: 50vw;
top: 50%;
}
:global(.edge)
{
right: 0;
}
:global(note::before)
{
content: attr(note\.id);
font-size: x-small;
vertical-align: top;
color: blue;
padding-left: 6px;
}
:global(note:hover parg)
{
visibility: visible;
}
:global(quot\.s)
{
background: #ffe574;
display: inline-block;
}
</style>
With the onMount() this works great. The goal is to have it interactive reacting to a user resizing the window, not just with onMount of the component. But I have no clue how to achieve this reactive behavior with forEach method.
This is my code so far:
Svelte REPL.
<script>
import {onMount} from 'svelte'
let newInnerHTML = `<article identifier="061">
<ti.art>Článek 61</ti.art>
<sti.art>Změna nařízení (EU) č. 1093/2010</sti.art>
<alinea>
<parg>V čl. 4 bodu 2 nařízení (EU) č. 1093/2010 se doplňuje nový podbod, který zní:</parg>
<quot.s level="1">
<list type="OTHER">
<item>
<np>
<no.p>
<quotstart>"</quotstart>
viii)
</no.p>
<txt>
pokud jde o nařízení Evropského parlamentu a Rady (EU) 2019/2033
<note note.id="E0028" numbering="STAR" type="QUOTATION">
<parg>
Nařízení Evropského parlamentu a Rady (EU) 2019/2033 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostních požadavcích na investiční podniky a o změně nařízení (EU) č. 1093/2010 (EU) č. 575/2013, (EU) č. 600/2014 a (EU) č. 806/2014 (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 1 ).
</parg>
</note>
a směrnici Evropského parlamentu a Rady (EU) 2019/2034
<note note.id="E0029" numbering="STAR" type="QUOTATION">
<parg>
Směrnice Evropského parlamentu a Rady (EU) 2019/2034 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostním dohledu nad investičními podniky a o změně směrnic 2002/87/ES, 2009/65/ES, 2011/61/ES, 2013/36/EU, 2014/59/EU a 2014/65/EU (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 64).
<quotend>"</quotend>
</parg>
</note>
, příslušné orgány ve smyslu čl. 3 odst. 1 bodu 5 uvedené směrnice.
</txt>
</np>
</item>
</list>
<div>----------------------</div>
<note note.id="E0028" numbering="STAR" type="QUOTATION" class="under">
<parg>
Nařízení Evropského parlamentu a Rady (EU) 2019/2033 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostních požadavcích na investiční podniky a o změně nařízení (EU) č. 1093/2010 (EU) č. 575/2013, (EU) č. 600/2014 a (EU) č. 806/2014 (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 1 ).
</parg>
</note>
<note note.id="E0029" numbering="STAR" type="QUOTATION" class="under">
<parg>
Směrnice Evropského parlamentu a Rady (EU) 2019/2034 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostním dohledu nad investičními podniky a o změně směrnic 2002/87/ES, 2009/65/ES, 2011/61/ES, 2013/36/EU, 2014/59/EU a 2014/65/EU (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 64).
<quotend>"</quotend>
</parg>
</note>
</quot.s>
</alinea>
</article>
<article identifier="064">
<ti.art>Článek 64</ti.art>
<sti.art>Změny nařízení (EU) č. 806/2014</sti.art>
<alinea>
<parg>
V článku 12a nařízení Evropského parlamentu a Rady (EU) č. 806/2014
<note note.id="E0038" numbering="ARAB" numbering.continued="YES" type="FOOTNOTE">
<parg>
Nařízení Evropského parlamentu a Rady (EU) č. 806/2014 ze dne
<date iso="20140715">15. července 2014</date>
, kterým se stanoví jednotná pravidla a jednotný postup pro řešení krize úvěrových institucí a některých investičních podniků v rámci jednotného mechanismu pro řešení krizí a Jednotného fondu pro řešení krizí a mění nařízení (EU) č. 1093/2010 (
<ref.doc.oj coll="L" date.pub="20140730" no.oj="225" page.first="1">Úř. věst. L 225, 30.7.2014, s. 1</ref.doc.oj>
).
</parg>
</note>
se doplňuje nový odstavec, který zní:
</parg>
<quot.s level="1">
<parag identifier="012A.003">
<no.parag>
<quotstart>"</quotstart>
3.
</no.parag>
<alinea>
<parg>
Pokud jde o požadavky na kapitál na individuálním základě investičních podniků uvedených v čl. 2 písm. c) tohoto nařízení, které nejsou investičními podniky uvedenými v čl. 1 odst. 2 nebo 5 nařízení (EU) 2019/2033, jsou v souladu s článkem 65 nařízení Evropského parlamentu a Rady (EU) 2019/2033
<note note.id="E0039" numbering="STAR" type="QUOTATION">
<parg>
Nařízení Evropského parlamentu a Rady (EU) 2019/2033 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostních požadavcích na investiční podniky a o změně nařízení (EU) č. 1093/2010 (EU) č. 575/2013, (EU) č. 600/2014 a (EU) č. 806/2014 (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 1).
</parg>
</note>
v tomto nařízení odkazy na článek 92 nařízení (EU) č. 575/2013 chápány takto:
</parg>
<list type="alpha">
<item>
<np>
<no.p>a)</no.p>
<txt>odkazy na čl. 92 odst. 1 písm. c) nařízení (EU) č. 575/2013, pokud jde o požadavek na celkový kapitálový poměr, v tomto nařízení se považují za odkazy na čl. 11 odst. 1 nařízení (EU) 2019/2033;</txt>
</np>
</item>
<item>
<np>
<no.p>b)</no.p>
<txt>odkazy na čl. 92 odst. 3 nařízení (EU) č. 575/2013, pokud jde o celkový objem rizikové expozice, v tomto nařízení se považují za odkazy na příslušný požadavek podle čl. 11 odst. 1 nařízení (EU) 2019/2033 vynásobený koeficientem 12,5.</txt>
</np>
</item>
</list>
</alinea>
<alinea>
Pokud jde o dodatečné kapitálové požadavky na investiční podniky uvedené v čl. 2 písm. c) tohoto nařízení, které nejsou investičními podniky uvedenými v čl. 1 odst. 2 nebo 5 nařízení (EU) 2019/2034, považují se v souladu s článkem 65 směrnice Evropského parlamentu a Rady (EU) 2019/2034
<note note.id="E0040" numbering="STAR" type="QUOTATION">
<parg>
Směrnice Evropského parlamentu a Rady (EU) 2019/2034 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostním dohledu nad investičními podniky a o změně směrnic 2002/87/ES, 2009/65/ES, 2011/61/ES, 2013/36/EU, 2014/59/EU a 2014/65/EU (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 64).
<quotend>"</quotend>
</parg>
</note>
v tomto nařízení odkazy na článek 104a směrnice 2013/36/EU za odkazy na článek 40 směrnice (EU) 2019/2034.
</alinea>
</parag>
<div>----------------------</div>
<note note.id="E0039" numbering="STAR" type="QUOTATION" class="under">
<parg>
Nařízení Evropského parlamentu a Rady (EU) 2019/2033 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostních požadavcích na investiční podniky a o změně nařízení (EU) č. 1093/2010 (EU) č. 575/2013, (EU) č. 600/2014 a (EU) č. 806/2014 (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 1).
</parg>
</note>
<note note.id="E0040" numbering="STAR" type="QUOTATION" class="under">
<parg>
Směrnice Evropského parlamentu a Rady (EU) 2019/2034 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostním dohledu nad investičními podniky a o změně směrnic 2002/87/ES, 2009/65/ES, 2011/61/ES, 2013/36/EU, 2014/59/EU a 2014/65/EU (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 64).
<quotend>"</quotend>
</parg>
</note>
</quot.s>
</alinea>
</article>`;
let windowInnerWidthy;
let windowscrollX;
let tooltips = document.querySelectorAll("note:not(.under) parg");
tooltips.forEach(element => {
let tooltip = element.getBoundingClientRect();
let offset = tooltip.left + windowscrollX;
let width = tooltip.width;
let smaller = (offset + width <= windowInnerWidthy);
if (!smaller) {
element.classList.add('edge');
} else {
element.classList.remove('edge');
}
});
tooltips = tooltips;
</script>
<svelte:window bind:innerWidth={windowInnerWidthy} bind:scrollX={windowscrollX}/>
<container>
{#html newInnerHTML}
</container>
<style>
:global(ti, preamble\.init, visa, sti, gr\.consid\.init, consid, article, ti\.art, sti\.art, parag, alinea, item)
{
display: block;
padding-top: 5px;
padding-bottom: 5px;
}
:global(no\.p, no\.parag)
{
padding-right: 6px;
}
:global(alinea:first-of-type)
{
display: inline
}
:global(doctitle, ti, ti\.art, sti, sti\.art)
{
text-align: center;
}
:global(note)
{
display: inline-block;
position: relative;
}
:global(note:not(.under) parg)
{
visibility: hidden;
position: absolute;
background-color: black;
color: #fff;
padding: 5px 5px;
border-radius: 6px;
z-index: 1;
width: 50vw;
top: 50%;
}
:global(.edge)
{
right: 0;
}
:global(note::before)
{
content: attr(note\.id);
font-size: x-small;
vertical-align: top;
color: blue;
padding-left: 6px;
}
:global(note:hover parg)
{
visibility: visible;
}
:global(quot\.s)
{
background: #ffe574;
display: inline-block;
}
</style>

Instead of onMount you can make it in a function and call it reactively:
function calculateTooltips() {
// code goes here
}
// this line will be called everytime windowInnerWidthy changes
$: windowInnerWidthy, calculateTooltips();

So this seems like a working code. I added debounce as well to optimize it a little bit.
Svelte REPL
<script>
import { onMount } from "svelte";
let newInnerHTML = `<article identifier="061">
<ti.art>Článek 61</ti.art>
<sti.art>Změna nařízení (EU) č. 1093/2010</sti.art>
<alinea>
<parg>V čl. 4 bodu 2 nařízení (EU) č. 1093/2010 se doplňuje nový podbod, který zní:</parg>
<quot.s level="1">
<list type="OTHER">
<item>
<np>
<no.p>
<quotstart>"</quotstart>
viii)
</no.p>
<txt>
pokud jde o nařízení Evropského parlamentu a Rady (EU) 2019/2033
<note note.id="E0028" numbering="STAR" type="QUOTATION">
<parg>
Nařízení Evropského parlamentu a Rady (EU) 2019/2033 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostních požadavcích na investiční podniky a o změně nařízení (EU) č. 1093/2010 (EU) č. 575/2013, (EU) č. 600/2014 a (EU) č. 806/2014 (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 1 ).
</parg>
</note>
a směrnici Evropského parlamentu a Rady (EU) 2019/2034
<note note.id="E0029" numbering="STAR" type="QUOTATION">
<parg>
Směrnice Evropského parlamentu a Rady (EU) 2019/2034 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostním dohledu nad investičními podniky a o změně směrnic 2002/87/ES, 2009/65/ES, 2011/61/ES, 2013/36/EU, 2014/59/EU a 2014/65/EU (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 64).
<quotend>"</quotend>
</parg>
</note>
, příslušné orgány ve smyslu čl. 3 odst. 1 bodu 5 uvedené směrnice.
</txt>
</np>
</item>
</list>
<div>----------------------</div>
<note note.id="E0028" numbering="STAR" type="QUOTATION" class="under">
<parg>
Nařízení Evropského parlamentu a Rady (EU) 2019/2033 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostních požadavcích na investiční podniky a o změně nařízení (EU) č. 1093/2010 (EU) č. 575/2013, (EU) č. 600/2014 a (EU) č. 806/2014 (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 1 ).
</parg>
</note>
<note note.id="E0029" numbering="STAR" type="QUOTATION" class="under">
<parg>
Směrnice Evropského parlamentu a Rady (EU) 2019/2034 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostním dohledu nad investičními podniky a o změně směrnic 2002/87/ES, 2009/65/ES, 2011/61/ES, 2013/36/EU, 2014/59/EU a 2014/65/EU (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 64).
<quotend>"</quotend>
</parg>
</note>
</quot.s>
</alinea>
</article>
<article identifier="064">
<ti.art>Článek 64</ti.art>
<sti.art>Změny nařízení (EU) č. 806/2014</sti.art>
<alinea>
<parg>
V článku 12a nařízení Evropského parlamentu a Rady (EU) č. 806/2014
<note note.id="E0038" numbering="ARAB" numbering.continued="YES" type="FOOTNOTE">
<parg>
Nařízení Evropského parlamentu a Rady (EU) č. 806/2014 ze dne
<date iso="20140715">15. července 2014</date>
, kterým se stanoví jednotná pravidla a jednotný postup pro řešení krize úvěrových institucí a některých investičních podniků v rámci jednotného mechanismu pro řešení krizí a Jednotného fondu pro řešení krizí a mění nařízení (EU) č. 1093/2010 (
<ref.doc.oj coll="L" date.pub="20140730" no.oj="225" page.first="1">Úř. věst. L 225, 30.7.2014, s. 1</ref.doc.oj>
).
</parg>
</note>
se doplňuje nový odstavec, který zní:
</parg>
<quot.s level="1">
<parag identifier="012A.003">
<no.parag>
<quotstart>"</quotstart>
3.
</no.parag>
<alinea>
<parg>
Pokud jde o požadavky na kapitál na individuálním základě investičních podniků uvedených v čl. 2 písm. c) tohoto nařízení, které nejsou investičními podniky uvedenými v čl. 1 odst. 2 nebo 5 nařízení (EU) 2019/2033, jsou v souladu s článkem 65 nařízení Evropského parlamentu a Rady (EU) 2019/2033
<note note.id="E0039" numbering="STAR" type="QUOTATION">
<parg>
Nařízení Evropského parlamentu a Rady (EU) 2019/2033 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostních požadavcích na investiční podniky a o změně nařízení (EU) č. 1093/2010 (EU) č. 575/2013, (EU) č. 600/2014 a (EU) č. 806/2014 (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 1).
</parg>
</note>
v tomto nařízení odkazy na článek 92 nařízení (EU) č. 575/2013 chápány takto:
</parg>
<list type="alpha">
<item>
<np>
<no.p>a)</no.p>
<txt>odkazy na čl. 92 odst. 1 písm. c) nařízení (EU) č. 575/2013, pokud jde o požadavek na celkový kapitálový poměr, v tomto nařízení se považují za odkazy na čl. 11 odst. 1 nařízení (EU) 2019/2033;</txt>
</np>
</item>
<item>
<np>
<no.p>b)</no.p>
<txt>odkazy na čl. 92 odst. 3 nařízení (EU) č. 575/2013, pokud jde o celkový objem rizikové expozice, v tomto nařízení se považují za odkazy na příslušný požadavek podle čl. 11 odst. 1 nařízení (EU) 2019/2033 vynásobený koeficientem 12,5.</txt>
</np>
</item>
</list>
</alinea>
<alinea>
Pokud jde o dodatečné kapitálové požadavky na investiční podniky uvedené v čl. 2 písm. c) tohoto nařízení, které nejsou investičními podniky uvedenými v čl. 1 odst. 2 nebo 5 nařízení (EU) 2019/2034, považují se v souladu s článkem 65 směrnice Evropského parlamentu a Rady (EU) 2019/2034
<note note.id="E0040" numbering="STAR" type="QUOTATION">
<parg>
Směrnice Evropského parlamentu a Rady (EU) 2019/2034 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostním dohledu nad investičními podniky a o změně směrnic 2002/87/ES, 2009/65/ES, 2011/61/ES, 2013/36/EU, 2014/59/EU a 2014/65/EU (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 64).
<quotend>"</quotend>
</parg>
</note>
v tomto nařízení odkazy na článek 104a směrnice 2013/36/EU za odkazy na článek 40 směrnice (EU) 2019/2034.
</alinea>
</parag>
<div>----------------------</div>
<note note.id="E0039" numbering="STAR" type="QUOTATION" class="under">
<parg>
Nařízení Evropského parlamentu a Rady (EU) 2019/2033 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostních požadavcích na investiční podniky a o změně nařízení (EU) č. 1093/2010 (EU) č. 575/2013, (EU) č. 600/2014 a (EU) č. 806/2014 (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 1).
</parg>
</note>
<note note.id="E0040" numbering="STAR" type="QUOTATION" class="under">
<parg>
Směrnice Evropského parlamentu a Rady (EU) 2019/2034 ze dne
<date iso="20191127">27. listopadu 2019</date>
o obezřetnostním dohledu nad investičními podniky a o změně směrnic 2002/87/ES, 2009/65/ES, 2011/61/ES, 2013/36/EU, 2014/59/EU a 2014/65/EU (Úř. věst. L 314,
<date iso="20191205">5.12.2019</date>
, s. 64).
<quotend>"</quotend>
</parg>
</note>
</quot.s>
</alinea>
</article>`;
let windowInnerWidthy;
const debounce = (func, delay) => {
let timer;
return function () {
const context = this;
const args = arguments;
clearTimeout(timer);
timer = setTimeout(() => func.apply(context, args), delay);
};
};
function calculateTooltips() {
let tooltips = document.querySelectorAll("note:not(.under) parg");
tooltips.forEach((element, i) => {
let rect = element.getBoundingClientRect();
let rectParent = element.parentElement.getBoundingClientRect();
let tooltipLeft = rectParent.left + rectParent.width;
let tooltiWidth = rect.width;
let tooltipFromRightToEnd = tooltipLeft + tooltiWidth;
let overflow = tooltipFromRightToEnd + 60 > windowInnerWidthy;
if (overflow) {
element.classList.add("flip");
} else {
element.classList.remove("flip");
}
});
tooltips = tooltips;
}
const debouncedcalculateTooltips = debounce(calculateTooltips, 300);
onMount(() => {
calculateTooltips();
window.addEventListener("resize", debouncedcalculateTooltips);
return () => {
window.removeEventListener("resize", debouncedcalculateTooltips);
};
});
</script>
<svelte:window bind:innerWidth={windowInnerWidthy} />
<container>
{#html newInnerHTML}
</container>
<style>
:global(ti, preamble\.init, visa, sti, gr\.consid\.init, consid, article, ti\.art, sti\.art, parag, alinea, item) {
display: block;
padding-top: 5px;
padding-bottom: 5px;
}
:global(no\.p, no\.parag) {
padding-right: 6px;
}
:global(alinea:first-of-type) {
display: inline;
}
:global(doctitle, ti, ti\.art, sti, sti\.art) {
text-align: center;
}
:global(note) {
display: inline-block;
position: relative;
}
:global(note:not(.under) parg) {
visibility: hidden;
position: absolute;
background-color: black;
color: #fff;
padding: 5px 10px;
border-radius: 6px;
z-index: 1;
width: 40vw;
top: 50%;
}
:global(.flip) {
right: 0;
}
:global(note::before) {
content: attr(note\.id);
font-size: x-small;
vertical-align: top;
color: blue;
padding-left: 6px;
}
:global(note:hover parg) {
visibility: visible;
}
:global(quot\.s) {
background: #fff8d7;
display: inline-block;
}
</style>

Related

SVG textPath with linear gradient is damaged in Safari

The textPath is damaged when I fill linear gradient.
How to fix it?
Thanks.
[[the broken image]]: https://i.stack.imgur.com/200t3.png
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" width="1000" height="1000">
<g font-size="42.5" font-weight="800">
<path d="M 400, 400
m -100, 0
a 100, 100 0 1,0 200, 0
a 100, 100 0 1,0 -200, 0" fill="transparent" stroke="black" id="SvgjsPath1000"></path>
<circle r="4" cx="400" cy="400" fill="#000000"></circle>
<text stroke-width="10" svgjs:data="{"leading":"1.3"}">
<textPath xlink:href="#SvgjsPath1000" fill="transparent" stroke="#ffffff" svgjs:data="{"leading":"1.3"}">
<tspan alignment-baseline="middle">RRRRRRRRRRRRRRRRRRRRR</tspan>
</textPath>
</text>
<text svgjs:data="{"leading":"1.3"}">
<textPath xlink:href="#SvgjsPath1000" fill="url("#SvgjsLinearGradient1001")" svgjs:data="{"leading":"1.3"}">
<tspan alignment-baseline="middle">RRRRRRRRRRRRRRRRRRRRR</tspan>
</textPath>
</text>
</g>
<defs>
<linearGradient x1="0%" y1="0%" x2="100%" y2="0%" id="SvgjsLinearGradient1001">
<stop offset="0" style="stop-color:#007cf0"></stop>
<stop offset="1" style="stop-color:#ff0080"></stop>
</linearGradient>
</defs>
</svg>
Apparently, a safari specific rendering bug when applying gradients to <textPath> elements.
I could also reproduce this issue with a simplified example (testing in iOS safari):
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="myGradient" gradientTransform="rotate(90)">
<stop offset="5%" stop-color="gold" />
<stop offset="95%" stop-color="red" />
</linearGradient>
</defs>
<path
id="MyPath"
fill="none"
stroke="red"
d="M10,90 Q90,90 90,45 Q90,10 50,10 Q10,10 10,40 Q10,70 45,70 Q70,70 75,50" />
<text>
<textPath fill="url('#myGradient')" href="#MyPath">Quick brown fox jumps over the lazy dog.</textPath>
</text>
</svg>
Workaround: create a <mask> containing the text path:
body {
background: #ccc
}
svg {
width: 50%;
border: 1px solid #000
}
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" viewBox="250 250 300 300">
<defs>
<linearGradient x1="0%" y1="0%" x2="100%" y2="0%" id="SvgjsLinearGradient1001">
<stop offset="0" style="stop-color:#007cf0"></stop>
<stop offset="1" style="stop-color:#ff0080"></stop>
</linearGradient>
<mask id="mask" x="0" y="0" width="200%" height="200%">
<rect fill="#000" x="0" y="0" width="200%" height="200%" />
<text>
<textPath class="textPath" font-size="42.5" font-weight="800" href="#SvgjsPath1000" dominant-baseline="middle" fill="#fff">
RRRRRRRRRRRRRRRRRRRRR
</textPath>
</text>
</mask>
</defs>
<g>
<path d="M 300 400 a 100 100 0 1 0 200 0 a 100 100 0 1 0 -200 0 z" fill="transparent" stroke="black" id="SvgjsPath1000" />
<circle r="4" cx="400" cy="400" fill="#000000" />
<text>
<textPath class="textPath" font-size="42.5" font-weight="800" href="#SvgjsPath1000" dominant-baseline="middle" fill="transparent" stroke="#fff" stroke-width="10">
RRRRRRRRRRRRRRRRRRRRR
</textPath>
</text>
<rect mask="url(#mask)" fill="url(#SvgjsLinearGradient1001)" x="0" y="0" width="200%" height="200%" />
</g>
</svg>

SVG transparency not preserved on iOS (iPad/iPhone)

I have an SVG that doesn't seem to work with iOS devices.
I've tried in both chrome and safari only the SVG appears as a solid blue block colour and doesn't preserve the different layers and their opacity levels...
https://jsfiddle.net/2fLuspdm/
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1920 3840" style="enable-background:new 0 0 1920 3840;" xml:space="preserve">
<style type="text/css">
.st0{opacity:6.000000e-02;fill:#609FD0;enable-background:new ;}
</style>
<polygon class="st0" points="1920,2614 1920,3641 1470,3005.1 "/>
<polygon class="st0" points="1920,1612.4 1210,780 1920,0.4 "/>
<polyline class="st0" points="0,0 650,0 0,1184.3 1,0 "/>
<polygon class="st0" points="0,898.4 960,1457 0,2778.4 "/>
<polygon class="st0" points="0,3837.4 0,2654 1040,3840 "/>
<polygon class="st0" points="1920,2926 1424,2239 1920,1046 "/>
<polygon class="st0" points="829,3840 1920,2926 1936,3840 "/>
<polygon class="st0" points="0,2530 0,1760 960,2909 "/>
<polygon class="st0" points="1920,0.4 1920,622 40,0.4 "/>
<polygon class="st0" points="1920,1634.5 1920,2404.5 1150,1435.5 "/>
</svg>
Simply compute the exponential (not sure if it's valid SVG syntax, but Safari doesn't like it).
<style type="text/css">
.st0{opacity:.06; fill:#609FD0; enable-background:new ;}
</style>

jQuery draggable(), resizable() in jsf doesn't work perfectly

I'm having a problem with jQuery: resizable() and draggable. When I move the div on datatable works perfectly and when I resize too, but after resize if drag the div it moves 1px on top and 1px on left. I can do this from the container div on top of the page. The divs on the rich:dataTable had been generated from jsf with h:outputtext/escape=false
I have considered this bug: http://bugs.jqueryui.com/ticket/4696 and this http://bugs.jquery.com/ticket/2793 and I have applied the patches
This is my xhtml code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>TC</title>
<h:outputScript name="jsf.js" library="javax.faces" />
<h:outputScript name="jquery.js" />
<script type="text/javascript"
src="resources/js/jquery-ui-1.10.1.custom.js" />
<h:outputScript library="js" name="jquery.json-2.4.js" />
<style type="text/css">
.ui-resizable {
position: relative;
}
.ui-resizable-handle {
position: absolute;
font-size: 0.1px;
z-index: 99999;
display: block;
}
.ui-resizable-e {
cursor: e-resize;
width: 2px;
right: 0;
top: 0;
height: 100%;
background-color: black;
}
</style>
</h:head>
<h:body>
<a4j:outputPanel rendered="false">
<rich:dataTable/>
</a4j:outputPanel>
<h:form id="formulario">
<script type="text/javascript">
function extenderHoras(div, index){
var contenedor = '#'+div.id;
var left = jQuery(contenedor).css("left");
var contenedorPadre = jQuery(contenedor).parent();
var padreDePadre = jQuery(contenedorPadre).parent();
var cantidadHijos = contenedorPadre[0].childElementCount;
jQuery(document).mousemove(function(e){
window.mouseXPos = e.pageX;
window.mouseYPos = e.pageY;
});
jQuery(contenedor).droppable({
accept: ".ui-draggable-dragging",
tolerance: 'pointer'
}).resizable({
handles: 'e',
minWidth: 41,
grid: [ 41, 0 ],
containment: contenedorPadre,
stop: function(event, ui) {
if(!index){
//Si no tiene index
var divArray = new Array();
var colorDiv = div.style.background;
var idPadreDePadre = padreDePadre[0].id;
var fila = idPadreDePadre.split(':');
index = fila[2];//Obtenemos el index
var cantidadHijosDiv = contenedorPadre[0].childElementCount; //Obtenemos Todos los hijos que se tiene en la fila
cantidadHijosDiv = cantidadHijosDiv - 1; //La lista es empieza desde 0 se le quita un elemento (tamaño -1)
var sumaTotalDiv = 0;
if(cantidadHijosDiv==0){//Si solo tiene un hijo obtenemos el tamaño de ese hijo para ponerlo como margen del div que estamos colocando
sumaTotalDiv = contenedorPadre[0].children[cantidadHijosDiv].style.width;
sumaTotalDiv = sumaTotalDiv.replace('px','');
}else{//Si tiene más de un hijo tenemos que recorrer el arreglo y sumar el tamaño de todos los div
for(var i = 0; i <= cantidadHijosDiv; i++){
var ancho = contenedorPadre[0].children[i].style.width;
sumaTotalDiv = sumaTotalDiv + parseInt(ancho.replace('px',''));
}
}
var leftUbicacion = sumaTotalDiv * -1;
var csstxt = jQuery(div.id).css('cssText') + ';top:0;left:'+leftUbicacion+' px;background-color:'+colorDiv+';height:'+ui.element.height()+'; width:'+ui.element.width()+';float:left;margin-left:'+sumaTotalDiv;
jQuery(div.id).css('cssText', csstxt);
} else {
jQuery(contenedor).css({
'width': ui.element.width(),
'height': ui.element.height(),
'top': ui.element[0].style.top,
'left': ui.element[0].style.left,
'float': 'left',
position: 'absolute'
});
};
var divArray = [{
"id":ui.element[0].id,
"width":ui.element[0].style.width,
"height":ui.element[0].style.height,
"top":ui.element[0].style.top,
"left":ui.element[0].style.left,
"right":ui.element[0].style.right,
"top":ui.element[0].style.top,
"backgroundColor":ui.element[0].style.background
}];
var json = jQuery.toJSON(divArray);
convertirJson(json, index);
}
}).draggable({
containment: contenedorPadre,
grid: [ 41, 0 ],
revert: 'valid',
stop: function(event, ui) {
if(!cantidadHijos){
//Si no tiene hijos que no haga nada, por si lo coloca en otro lado que no sea la tabla
} else {
}
}
}).removeClass("ui-draggable");
}
function arrastrarALado(div){
var contenedor = '#'+div.id;
var colorDiv = div.style.background;
jQuery(contenedor).draggable({
helper: 'clone',
revert: 'valid',
stop: function(event, ui) {
var elem = document.elementFromPoint(event.pageX, event.pageY);
event.stopPropagation();
var tag = elem.tagName;
var cantidadHijosDiv = elem.childElementCount; //Obtenemos Todos los hijos que se tiene en la fila
cantidadHijosDiv = cantidadHijosDiv - 1; //quitamos un elemento men la lista es (tamaño -1)
var sumaTotalDiv = 0;
if(cantidadHijosDiv==0){//Si solo tiene un hijo obtenemos el tamaño de ese hijo para ponerlo como margen del div que estamos colocando
sumaTotalDiv = elem.children[cantidadHijosDiv].style.width;
sumaTotalDiv = sumaTotalDiv.replace('px','');
}
else{//Si tiene más de un hijo tenemos que recorrer el arreglo y sumar el tamaño de todos los div
for(var i = 0; i <= cantidadHijosDiv; i++){
var ancho = elem.children[i].style.width;
sumaTotalDiv = sumaTotalDiv + parseInt(ancho.replace('px',''));
}
}
var divHijo = elem.children[cantidadHijosDiv];//Obtenemos el último hijo de la lista
if(!divHijo){//Si es undefined no tiene hijos o ha puesta fuera de la barra - Propenso a cambios
alert('No puede colocar la barra aquí');
} else if(divHijo.tagName=='TH'){//Si el hijo
alert('No puede colocar la barra aquí');
}
else if(divHijo.tagName=='SPAN'){//Si el hijo es un SPAN es que crea richfaces
var divHijo = elem.children[cantidadHijosDiv+1];//obtenemos el siguiente hijo, solo ocurre en el caso de que sea el span padre
divHijo = divHijo.id;
} else {//Si no usamos el nombre del ultimo div
divHijo = divHijo.id;
}
if(tag == 'TD'){
var leftUbicacion = sumaTotalDiv * -1;
var divNuevo = divHijo+cantidadHijosDiv+div.id;
//Implementando cssText de Jquery ya que no se puede insertar el estilo de forma normal al crear el div, tengo que agregarlo
var csstxt = jQuery('#'+divNuevo).css('cssText') + ';top:0;left:'+leftUbicacion+' !important;background-color:'+colorDiv+';height:25px; width:82px;float:left;margin-left:'+sumaTotalDiv;
jQuery('<div/>', {
id: divNuevo, //obtenemos el ultimo hijo, luego le ponemos la cantidad y el id del div que estoy arrastrando
//onmousedown: 'arrastrarBarra(this);',
onmouseover: 'extenderHoras(this);'
}).appendTo(elem);
jQuery('#'+divNuevo).css('cssText', csstxt);
}
}
});
}
</script>
<a4j:jsFunction name="convertirJson"
action="#{pruebasmb.obtenerDiv()}" >
<a4j:param name="divArray" assignTo="#{pruebasmb.divJSON}" ></a4j:param>
<a4j:param name="index" assignTo="#{pruebasmb.indexPersonaSeleccionada}"></a4j:param>
</a4j:jsFunction>
<div id="contenedores" style="width: 600px; height: 30px; background-color: #f0f0f0; ">
<div id="divBlue" style="width: 82px; height: 25px; background-color: blue; float: left; " onmouseover="arrastrarALado(this);"></div>
<div id="divRojo" style="width: 82px; height: 25px; background-color: red; float: left; " onmouseover="arrastrarALado(this);"></div>
<div id="divVerde" style="width: 82px; height: 25px; background-color: green; float: left; " onmouseover="arrastrarALado(this);"></div>
</div>
<a4j:commandButton action="#{pruebasmb.llenarlista()}"
value="Llenar lista" render="dataTablePersonas"></a4j:commandButton>
<br />
<br />
<a4j:outputPanel ajaxRendered="false">
<rich:dataTable var="persona" value="#{pruebasmb.personas}"
id="dataTablePersonas" rowKeyVar="index">
<f:facet name="header">
<rich:columnGroup>
<rich:column rowspan="2" >
<h:outputText value="Persona" style="padding: 0px;" />
</rich:column>
<rich:column colspan="24" style="padding: 0px;">
<h:outputText value="Horas" />
</rich:column>
<rich:column breakRowBefore="true"
style="width: 40px; padding: 0px;">
<h:outputText value="00h00" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="00h30" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="01h00" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="01h30" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="02h00" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="02h30" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="03h00" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="03h30" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="04h00" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="04h30" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="05h00" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="05h30" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="06h00" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="06h30" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="07h00" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="07h30" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="08h00" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="08h30" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="09h00" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="09h30" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="10h00" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="10h30" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="11h00" />
</rich:column>
<rich:column style="width: 40px; padding: 0px;">
<h:outputText value="11h30" />
</rich:column>
</rich:columnGroup>
</f:facet>
<rich:column>
<h:outputText value="#{persona.apellido}" />
</rich:column>
<rich:column colspan="24" style="padding: 0px; height:25px; position: relative;" >
<h:outputText value="#{pruebasmb.divDefault.get(index)}" escape="false" />
</rich:column>
</rich:dataTable>
</a4j:outputPanel>
</h:form>
</h:body>
</html>
pruebasmb Bean
import java.awt.Color;
import java.io.Serializable;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
#ManagedBean(name = "pruebasmb")
#SessionScoped
public class PruebasMB implements Serializable {
private static final long serialVersionUID = 2290961655122569612L;
private List<Persona> personas = new ArrayList<Persona>();
private String valorDelSlider;
private String celdaClickeada;
private String estiloBarra;
private String indexPersonaSeleccionada;
private EstilosCss estilos = new EstilosCss();
private List<String> divDefault = new ArrayList<String>();
private String divJSON;
public void llenarlista() {
divDefault.clear();
personas.clear();
for (int i = 1; i <= 10; i++) {
Integer horasTrabajadas;
// Para generar un temporal de las horas trabajadas aleatoriamente
horasTrabajadas = (int) Math.round((Math.random() * 16));
if (horasTrabajadas == 0)
horasTrabajadas = 1;
else
horasTrabajadas = horasTrabajadas * 41;
estiloBarra = estilos.generarEstilo(horasTrabajadas.toString(), "25", "yellow", "0", "0", "0", "0", "0", "0", "left", null, null);
Persona p = new Persona("nombre" + i, "apellido" + i, i + 20, "Calle J y la " + i, estiloBarra, horasTrabajadas, (i/2));
generarBarras(p, horasTrabajadas, i);
personas.add(p);
}
}
public void obtenerDiv(){
Gson gson = new Gson();
Type type = new TypeToken<List<Div>>(){}.getType();
List<Div> div = gson.fromJson(divJSON.toString(), type);
Integer index = Integer.valueOf(indexPersonaSeleccionada);
if(index==null){
index=0;
}
valorDelSlider = div.get(0).getWidth().replace("px", "");
System.out.println("Width: "+div.get(0).getWidth());
Integer valor = Integer.valueOf(valorDelSlider);
int valorTemporal = valor;
int horasTrabajadas = personas.get(index).getHorasTrabajadas();
if (horasTrabajadas == 1) {
valor = valor - 1;
valorTemporal = valorTemporal - 1;
valor = valor / 82;
} else
valor = valor / 82;
if ((valorTemporal % 82) > 0) {
System.out.println("El total de horas es " + valor + " y media ");
} else
System.out.println("Ha realizado " + valor + " horas");
System.out.println(valor * 82);
estiloBarra = "left: 0px; background-color: yellow; height: 25px; width: " + (valor * 82) + "px; top: 0px !important; float: left;";
personas.get(index).setEstiloUsuario(estiloBarra);
}
public void generarBarras(Persona p, Integer horasTrabajadas, Integer i) {
Integer horasSegundoDiv=0;
String rgb="";
String estiloBarra2 ="";
String div ="";
for(int j = 0; j<= 2; j ++){
horasSegundoDiv = (int) Math.round((Math.random() * 16));
if (horasSegundoDiv == 0)
horasSegundoDiv = 1;
else
horasSegundoDiv = horasSegundoDiv * 41;
rgb = Color2Hex();
estiloBarra2 = estilos.generarEstilo(horasSegundoDiv.toString(), "25", rgb, "0", "0", "0", "0", "0", "0", "left", null, null);
div = div + "<div id='nombrediv" + i+"_"+j + "' style='" + estiloBarra2 + "' onmouseover='extenderHoras(this," + (i) + ");'> </div>";
}
divDefault.add(div);
}
/**
* Se genera un color al azar en rgb y se convierte a hexadecimal
*
* #return Color en hexadecimal
*/
public String Color2Hex() {
int R = (int) Math.round((Math.random() * 256));
int G = (int) Math.round((Math.random() * 256));
int B = (int) Math.round((Math.random() * 256));
Color c = new Color(R, G, B);
String rgb = Integer.toHexString(c.getRGB() & 0xffffff);
if(rgb.length()<6)
rgb = "0"+rgb;
return "#"+rgb;
}
//getter and setter
}
and Estilos.css where I generate the Style of div
import java.io.Serializable;
public class EstilosCss implements Serializable {
private static final long serialVersionUID = -1279423720796129516L;
private String width;
private String height;
private String backgroundColor;
private String leftMargin;
private String rightMargin;
private String left;
private String right;
private String top;
private String bottom;
private String floatEstilo;
private String gradientColor1;
private String gradientColor2;
public String generarEstilo(String width, String height, String backgroundColor, String leftMargin, String rightMargin, String left, String right,
String top, String bottom, String floatEstilo, String gradientColor1, String gradientColor2) {
String estilo = "";
estilo = "width:" + width + "px; height:" + height + "px; background-color:" + backgroundColor + "; left-margin:" + leftMargin
+ "px; right-margin:" + rightMargin + "px; left:" + left + "px; right:" + right + "px; top:" + top + "px; bottom:" + bottom + "px; float:"+floatEstilo+" !important;";
//Si ingresa los colores del gradient del div
if(gradientColor1!=null&&gradientColor2!=null){
estilo = estilo + "background-image: -ms-linear-gradient(bottom, "+gradientColor1+" 0%, "+gradientColor2 +" 100%);";
estilo = estilo + "background-image: -moz-linear-gradient(bottom, "+gradientColor1+" 0%, "+gradientColor2 +" 100%);";
estilo = estilo + "background-image: -o-linear-gradient(bottom, "+gradientColor1+" 0%, "+gradientColor2 +" 100%);";
estilo = estilo + "background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, "+gradientColor1+"), color-stop(1,"+gradientColor2 +"));";
estilo = estilo + "background-image: -webkit-linear-gradient(bottom, "+gradientColor1+" 0%, "+gradientColor2 +" 100%);";
estilo = estilo + "background-image: linear-gradient(to top, "+gradientColor1+" 0%, "+gradientColor2 +" 100%);";
estilo = estilo + "filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='"+gradientColor1+"', endColorstr='"+gradientColor2 +"');";
}
return estilo;
}
//getter and setter
}

JQuery datepicker language

I'm using the jQuery datepicker from jqueryui.com and I have a problem changing the calendar to Swedish, I have this code:
<script type="text/javascript">
$(function() {
$.datepicker.setDefaults($.datepicker.regional['sv']);
$("#StartDate").datepicker();
$('#StartDate').datepicker('option', 'dateFormat', 'yy-mm-dd');
});
</script>
Still it shows as an English calendar.
What might be missing?
Maybe you don't have a language file:
Language files are here: https://github.com/jquery/jquery-ui/tree/master/ui/i18n
A new localization should be created
in a separate JavaScript file named
ui.datepicker-.js. Within a
document.ready event it should add a
new entry into the
$.datepicker.regional array, indexed
by the language code, with the
following attributes:
http://api.jqueryui.com/datepicker/
This is for the dutch people.
$.datepicker.regional['nl'] = {clearText: 'Effacer', clearStatus: '',
closeText: 'sluiten', closeStatus: 'Onveranderd sluiten ',
prevText: '<vorige', prevStatus: 'Zie de vorige maand',
nextText: 'volgende>', nextStatus: 'Zie de volgende maand',
currentText: 'Huidige', currentStatus: 'Bekijk de huidige maand',
monthNames: ['januari','februari','maart','april','mei','juni',
'juli','augustus','september','oktober','november','december'],
monthNamesShort: ['jan','feb','mrt','apr','mei','jun',
'jul','aug','sep','okt','nov','dec'],
monthStatus: 'Bekijk een andere maand', yearStatus: 'Bekijk nog een jaar',
weekHeader: 'Sm', weekStatus: '',
dayNames: ['zondag','maandag','dinsdag','woensdag','donderdag','vrijdag','zaterdag'],
dayNamesShort: ['zo', 'ma','di','wo','do','vr','za'],
dayNamesMin: ['zo', 'ma','di','wo','do','vr','za'],
dayStatus: 'Gebruik DD als de eerste dag van de week', dateStatus: 'Kies DD, MM d',
dateFormat: 'dd/mm/yy', firstDay: 1,
initStatus: 'Kies een datum', isRTL: false};
$.datepicker.setDefaults($.datepicker.regional['nl']);
You need to do something like this,
$.datepicker.regional['fr'] = {clearText: 'Effacer', clearStatus: '',
closeText: 'Fermer', closeStatus: 'Fermer sans modifier',
prevText: '<Préc', prevStatus: 'Voir le mois précédent',
nextText: 'Suiv>', nextStatus: 'Voir le mois suivant',
currentText: 'Courant', currentStatus: 'Voir le mois courant',
monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
'Jul','Aoû','Sep','Oct','Nov','Déc'],
monthStatus: 'Voir un autre mois', yearStatus: 'Voir un autre année',
weekHeader: 'Sm', weekStatus: '',
dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
dayStatus: 'Utiliser DD comme premier jour de la semaine', dateStatus: 'Choisir le DD, MM d',
dateFormat: 'dd/mm/yy', firstDay: 0,
initStatus: 'Choisir la date', isRTL: false};
$.datepicker.setDefaults($.datepicker.regional['fr']);
for sv data follow the following link
http://code.google.com/p/logicss/source/browse/trunk/media/jquery/jquery.ui.i18n.all.min.js?r=41
You need the following line:
<script src="../jquery/development-bundle/ui/i18n/jquery.ui.datepicker-sv.js"></script>
Adjust the path depending on where you put the jquery-files.
Here is example how you can do localization by yourself.
jQuery(function($) {
$('input.datetimepicker').datepicker({
duration: '',
changeMonth: false,
changeYear: false,
yearRange: '2010:2020',
showTime: false,
time24h: true
});
$.datepicker.regional['cs'] = {
closeText: 'Zavřít',
prevText: '<Dříve',
nextText: 'Později>',
currentText: 'Nyní',
monthNames: ['leden', 'únor', 'březen', 'duben', 'květen', 'červen', 'červenec', 'srpen',
'září', 'říjen', 'listopad', 'prosinec'
],
monthNamesShort: ['led', 'úno', 'bře', 'dub', 'kvě', 'čer', 'čvc', 'srp', 'zář', 'říj', 'lis', 'pro'],
dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'],
dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],
dayNamesMin: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],
weekHeader: 'Týd',
dateFormat: 'dd/mm/yy',
firstDay: 1,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: ''
};
$.datepicker.setDefaults($.datepicker.regional['cs']);
});
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link data-require="jqueryui#*" data-semver="1.10.0" rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.0/css/smoothness/jquery-ui-1.10.0.custom.min.css" />
<script data-require="jqueryui#*" data-semver="1.10.0" src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.0/jquery-ui.js"></script>
<script src="datepicker-cs.js"></script>
<script type="text/javascript">
$(document).ready(function() {
console.log("test");
$("#test").datepicker({
dateFormat: "dd.m.yy",
minDate: 0,
showOtherMonths: true,
firstDay: 1
});
});
</script>
</head>
<body>
<h1>Here is your datepicker</h1>
<input id="test" type="text" />
</body>
</html>
Include language file source in your head script of the HTML body.
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/i18n/jquery-ui-i18n.min.js"></script>
Example on JSFiddle
A quick Update, for the text "Today", the right names are:
todayText: 'Huidige', todayStatus: 'Bekijk de huidige maand',
Try Adding this
$('input[name="daterangepicker"]').daterangepicker({
"locale": {
"firstDay" :1 // 0 Tuesday - 6 - Monday between
}});
It must be completed within the locale object of the defined daterangepicker.
detailed information can be found here.
In 2020, just do
$.datetimepicker.setLocale('en');
Of course, replace 'en' with the correct language ('sv', 'fr', ...)
Include js files of datepicker and language (locales)
'resource/bower_components/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js',
'resource/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.sv.min.js',
In the options of the datepicker, set the language as below:
$('.datepicker').datepicker({'language' : 'sv'});

Stucked with Getting null values in iReport, JasperReports, Struts 2 plugin

I am using JasperReports and Struts2 to make to make some reports in my web application .
I am doing all this stuff with NetBeans IDE and iReport 3.5.1 plugin for designing purpose.
I am configuring my struts2-jasperreports plugin by following xml code.
<package name="jasper1" extends="jasperreports-default,struts-default">
<result-types>
<result-type name="jasper" class="org.apache.struts2.views.jasperreports.JasperReportsResult"/>
</result-types>
<action name="myJasperTest" class="testJasperAccountAction">
<result name="success" type="jasper">
<param name="location">/reports/account.jasper</param>
<param name="dataSource">accounts</param>
<param name="format">PDF</param>
</result>
<result name="error" type="jasper">/error.jsp</result>
</action>
</package>
My action class is as follows.
public class JasperAccountAction extends ActionSupport {
private IAccountSecurityProcessor accountSecurityProcessor;
private static ArrayList<Account> accounts;
public void setAccounts(ArrayList<Account> accounts) {
JasperAccountAction.accounts = accounts;
}
#Override
public String execute() throws Exception {
return SUCCESS;
}
public void setAccountSecurityProcessor(IAccountSecurityProcessor accountSecurityProcessor) {
this.accountSecurityProcessor = accountSecurityProcessor;
}
public ArrayList<Account> getAccounts() throws Exception {
try {
accounts = (ArrayList<Account>) this.accountSecurityProcessor.findByAll(0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, false, false, null, null, null, null, 0);
JasperCompileManager.compileReportToFile("E:\\Final_copy_of_erp\\SufalamERP\\build\\web\\reports\\account.jrxml", "E:\\Final_copy_of_erp\\SufalamERP\\build\\web\\reports\\account.jasper");
System.out.println("*******************************Accounts list for japser = =" + accounts + " ****************************************");
} catch (SufalamException ex) {
ex.printStackTrace();
System.out.println("*******************************Exception in sufalam ==>" + ex);
Logger.getLogger(JasperAccountAction.class.getName()).log(Level.SEVERE, null, ex);
}
return accounts;
}
}
my jasper report is as follows:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="null" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<queryString language="SQL">
<![CDATA[SELECT
account_master."id" AS account_master_id,
account_master."name" AS account_master_name
FROM
"public"."account_master" account_master]]>
</queryString>
<field name="account_master_id" class="java.lang.Integer">
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="account_master_name" class="java.lang.String">
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<group name="account_master_id">
<groupExpression><![CDATA[$F{account_master_id}]]></groupExpression>
<groupHeader>
<band height="27">
<staticText>
<reportElement mode="Opaque" x="0" y="0" width="139" height="27" forecolor="#FFFFFF" backcolor="#000000"/>
<textElement>
<font size="18"/>
</textElement>
<text><![CDATA[account_master_id]]></text>
</staticText>
<textField>
<reportElement mode="Opaque" x="139" y="0" width="416" height="27" forecolor="#FFFFFF" backcolor="#000000"/>
<textElement>
<font size="18" isBold="true"/>
</textElement>
<textFieldExpression class="java.lang.Integer"><![CDATA[$F{account_master_id}]]></textFieldExpression>
</textField>
</band>
</groupHeader>
<groupFooter>
<band height="8">
<line direction="BottomUp">
<reportElement key="line" x="1" y="4" width="554" height="1"/>
</line>
</band>
</groupFooter>
</group>
<background>
<band/>
</background>
<title>
<band height="58">
<line>
<reportElement x="0" y="8" width="555" height="1"/>
</line>
<line>
<reportElement positionType="FixRelativeToBottom" x="0" y="51" width="555" height="1"/>
</line>
<staticText>
<reportElement x="65" y="13" width="424" height="35"/>
<textElement textAlignment="Center">
<font size="26" isBold="true"/>
</textElement>
<text><![CDATA[Classic template]]></text>
</staticText>
</band>
</title>
<pageHeader>
<band/>
</pageHeader>
<columnHeader>
<band/>
</columnHeader>
<detail>
<band height="20">
<staticText>
<reportElement x="0" y="0" width="139" height="20"/>
<textElement>
<font size="12"/>
</textElement>
<text><![CDATA[account_master_name]]></text>
</staticText>
<textField>
<reportElement x="139" y="0" width="416" height="20"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{account_master_name}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band/>
</columnFooter>
<pageFooter>
<band height="26">
<textField evaluationTime="Report" pattern="" isBlankWhenNull="false">
<reportElement key="textField" x="516" y="6" width="36" height="19" forecolor="#000000" backcolor="#FFFFFF"/>
<box>
<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement>
<font size="10"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA["" + $V{PAGE_NUMBER}]]></textFieldExpression>
</textField>
<textField pattern="" isBlankWhenNull="false">
<reportElement key="textField" x="342" y="6" width="170" height="19" forecolor="#000000" backcolor="#FFFFFF"/>
<box>
<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement textAlignment="Right">
<font size="10"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA["Page " + $V{PAGE_NUMBER} + " of "]]></textFieldExpression>
</textField>
<textField pattern="" isBlankWhenNull="false">
<reportElement key="textField" x="1" y="6" width="209" height="19" forecolor="#000000" backcolor="#FFFFFF"/>
<box>
<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement>
<font size="10"/>
</textElement>
<textFieldExpression class="java.util.Date"><![CDATA[new Date()]]></textFieldExpression>
</textField>
</band>
</pageFooter>
<summary>
<band/>
</summary>
</jasperReport>
and i using following jars in my project.
asm.jar
cglib.jar
commons-fileupload-1.2.1.jar
displaytag-export-poi-1.2.jar
hibernate3.jar
jasperreports-3.0.0.jar
org.apache.commons.logging_1.0.4.jar
struts2-core-2.0.11.1.jar
tiles-core-2.1.2.jar
xwork-2.1.2.jar
batik-dom.jar
batik-svg-dom.jar
groovy-all-1.5.5.jar
jaxen-1.1.1.jar
jxl-2.6.jar
rhino-1.7R1.jar
commons-lang-2.3.jar
displaytag-portlet-1.2.jar
hibernate-annotations.jar
jdt-compiler-3.1.1.jar
postgresql-8.3-603.jdbc3.jar
struts2-jasperreports-plugin-2.0.11.1.jar
tiles-jsp-2.1.2.jar
batik-anim.jar
batik-ext.jar
batik-svggen.jar
jakarta-bcel-20050813.jar
jcommon-1.0.15.jar
kxml2-2.3.0.jar
xalan.jar
commons-beanutils-1.7.0.jar
commons-logging-1.0.4.jar
dom4j.jar
hibernate-commons-annotations.jar
jta.jar
slf4j-api.jar
struts2-spring-plugin-2.0.11.1.jar
tiles-portlet-2.1.2.jar
batik-awt-util.jar
batik-gvt.jar
batik-util.jar
jasperreports-chart-themes-3.5.1.jar
xml-apis-ext.jar
kxml2-min-2.3.0.jar
xercesImpl.jar
commons-collections.jar
commons-logging-api-1.1.jar
ejb3-persistence.jar
hibernate-core.jar
log4j.jar
slf4j-log4j12.jar
struts2-tiles-plugin-2.1.6.jar
tiles-servlet-2.1.2.jar
batik-bridge.jar
batik-parser.jar
batik-xml.jar
jasperreports-dejavu-fonts.jar
jfreechart-1.0.0.jar
png-encoder-1.5.jar
commons-digester-1.8.1.jar
displaytag-1.2.jar
freemarker-2.3.8.jar
itext-1.3.1.jar
ognl-2.6.11.jar
spring.jar
tiles-api-2.1.2.jar
xwork-2.0.4.jar
batik-css.jar
batik-script.jar
castor-1.2.jar
JasperReportViewer.jar
jfreechart-1.0.12.jar
poi-3.2-FINAL-20081019.jar
an i am getting the following error.
2009-05-29 12:38:58,078 ERROR (org.apache.commons.digester.Digester:1646) - Parse Error at line 2 column 387: Document root element "jasperReport", must match DOCTYPE root "null".
org.xml.sax.SAXParseException: Document root element "jasperReport", must match DOCTYPE root "null".
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.rootElementSpecified(XMLDTDValidator.java:1621)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1900)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:764)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1359)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(XMLDocumentScannerImpl.java:1316)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3095)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:921)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at org.apache.commons.digester.Digester.parse(Digester.java:1764)
at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:239)
at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:226)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:214)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:168)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:152)
at net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:115)
at com.sufalam.presentation.finance.action.JasperAccountAction.getAccounts(JasperAccountAction.java:99)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:517)
at ognl.OgnlRuntime.getMethodValue(OgnlRuntime.java:931)
at ognl.ObjectPropertyAccessor.getPossibleProperty(ObjectPropertyAccessor.java:53)
at ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:121)
at com.opensymphony.xwork2.util.OgnlValueStack$ObjectAccessor.getProperty(OgnlValueStack.java:58)
at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:1643)
at com.opensymphony.xwork2.util.CompoundRootAccessor.getProperty(CompoundRootAccessor.java:101)
at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:1643)
at ognl.ASTProperty.getValueBody(ASTProperty.java:92)
at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170)
at ognl.SimpleNode.getValue(SimpleNode.java:210)
at ognl.Ognl.getValue(Ognl.java:333)
at ognl.Ognl.getValue(Ognl.java:310)
at com.opensymphony.xwork2.util.OgnlUtil.getValue(OgnlUtil.java:190)
at com.opensymphony.xwork2.util.OgnlValueStack.findValue(OgnlValueStack.java:208)
at org.apache.struts2.views.jasperreports.ValueStackDataSource.<init>(ValueStackDataSource.java:59)
at org.apache.struts2.views.jasperreports.JasperReportsResult.doExecute(JasperReportsResult.java:204)
at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:178)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:348)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:167)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.ap
ache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:121)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:504)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:313)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:218)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:222)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:288)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:647)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:579)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:831)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(Def
aultReadTask.java:341)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
2009-05-29 12:38:58,078 WARN (com.opensymphony.xwork2.util.OgnlValueStack:269) - Caught an exception while evaluating expression 'accounts' against value stack
Caught an Ognl exception while getting property accounts - Class: ognl.OgnlRuntime
File: OgnlRuntime.java
Method: getMethodValue
Line: 935 - ognl/OgnlRuntime.java:935:-1
at com.opensymphony.xwork2.util.CompoundRootAccessor.getProperty(CompoundRootAccessor.java:106)
at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:1643)
at ognl.ASTProperty.getValueBody(ASTProperty.java:92)
at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170)
Looks like your JasperReport.xml is simply missing a doctype. Try starting the file this way:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="null" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
the field names shold be similar to the account bean's property names
I was facing the same problem, I could fix it just putting the correct field name from my bean
<fieldDescription><![CDATA[correct_name_of_field]]></fieldDescription>, of course in your .jrxml ;)
I was on it for a couple of days.
By the way put all the jars of jasper, apache commons*, poi, itext, jxl.

Resources