Changes for page Plan Your Data Management

Last modified by Veronika Kocher on Friday, 04 Sep 2026 14:45

From version 4.7
edited by Veronika Kocher
on Wednesday, 02 Sep 2026 15:23
Change comment: There is no comment for this version
To version 4.8
edited by Veronika Kocher
on Thursday, 03 Sep 2026 9:18
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -257,3 +257,237 @@
257 257  </div>
258 258  {{/html}}
259 259  
260 +{{html clean="false"}}
261 +<!-- SN_HORIZONTAL_BOX_HARMONIZER_START -->
262 +<style data-sn-horizontal-box-harmonizer="1">
263 +[data-sn-equal-height-managed="1"]{box-sizing:border-box}
264 +@media(max-width:767px){
265 + [data-sn-equal-height-managed="1"]{min-height:0!important}
266 +}
267 +</style>
268 +<script data-sn-horizontal-box-harmonizer="1">
269 +(function(){
270 + "use strict";
271 +
272 + var MOBILE_MAX=767;
273 + var ROW_TOLERANCE=4;
274 + var MIN_W=150;
275 + var MIN_H=36;
276 +
277 + var root=
278 + document.getElementById("xwikicontent")||
279 + document.querySelector(".xwiki-rendering-content")||
280 + document.querySelector("main")||
281 + document.body;
282 +
283 + if(!root)return;
284 +
285 + var managed=new Set();
286 + var raf=0;
287 +
288 + function num(v){
289 + var n=parseFloat(v);
290 + return Number.isFinite(n)?n:0;
291 + }
292 +
293 + function visible(el){
294 + if(!el||el.nodeType!==1)return false;
295 + var s=getComputedStyle(el);
296 + if(s.display==="none"||s.visibility==="hidden"||Number(s.opacity)===0)return false;
297 + var r=el.getBoundingClientRect();
298 + return r.width>=MIN_W&&r.height>=MIN_H;
299 + }
300 +
301 + function excluded(el){
302 + return !el.matches||el.matches(
303 + "button,input,select,textarea,option,label,img,svg,canvas,table,thead,tbody,tfoot,tr,td,th,summary,script,style,noscript,template,.btn,.chip,[role=button]"
304 + );
305 + }
306 +
307 + function namedLikeBox(el){
308 + var c=typeof el.className==="string"?el.className:"";
309 + return /(^|[\s_-])(box|card|tile|panel|role|check|service|source|call|area|detail|resource|topic|warn|info)([\s_-]|$)/i.test(c);
310 + }
311 +
312 + function boxLike(el){
313 + if(!visible(el)||excluded(el))return false;
314 + var s=getComputedStyle(el);
315 + var r=el.getBoundingClientRect();
316 + var border=
317 + num(s.borderTopWidth)+num(s.borderRightWidth)+
318 + num(s.borderBottomWidth)+num(s.borderLeftWidth);
319 + var radius=Math.max(
320 + num(s.borderTopLeftRadius),num(s.borderTopRightRadius),
321 + num(s.borderBottomLeftRadius),num(s.borderBottomRightRadius)
322 + );
323 + var bg=s.backgroundColor&&s.backgroundColor!=="rgba(0, 0, 0, 0)"&&s.backgroundColor!=="transparent";
324 + var shadow=s.boxShadow&&s.boxShadow!=="none";
325 + return namedLikeBox(el)||border>=1||(bg&&radius>=3)||(shadow&&r.width>=180);
326 + }
327 +
328 + function pickTarget(child){
329 + if(!visible(child))return null;
330 + if(boxLike(child))return child;
331 +
332 + var cr=child.getBoundingClientRect();
333 + var q=[];
334 + Array.from(child.children||[]).forEach(function(el){
335 + q.push({el:el,depth:1});
336 + });
337 +
338 + var best=null,bestScore=-1;
339 +
340 + while(q.length){
341 + var item=q.shift();
342 + var el=item.el;
343 + if(!visible(el))continue;
344 +
345 + var r=el.getBoundingClientRect();
346 +
347 + if(r.width>=cr.width*.72&&boxLike(el)){
348 + var widthFit=1-Math.min(1,Math.abs(cr.width-r.width)/Math.max(1,cr.width));
349 + var topFit=1-Math.min(1,Math.abs(cr.top-r.top)/80);
350 + var score=widthFit*5+topFit*2+Math.min(r.height,600)/600;
351 + if(score>bestScore){
352 + best=el;
353 + bestScore=score;
354 + }
355 + }
356 +
357 + if(item.depth<3){
358 + Array.from(el.children||[]).forEach(function(next){
359 + q.push({el:next,depth:item.depth+1});
360 + });
361 + }
362 + }
363 +
364 + return best;
365 + }
366 +
367 + function reset(){
368 + managed.forEach(function(el){
369 + el.style.removeProperty("min-height");
370 + el.removeAttribute("data-sn-equal-height-managed");
371 + });
372 + managed.clear();
373 + }
374 +
375 + function horizontalLayout(parent){
376 + if(!visible(parent))return false;
377 + var s=getComputedStyle(parent);
378 + if(s.display==="grid"||s.display==="inline-grid")return true;
379 + if(s.display==="flex"||s.display==="inline-flex"){
380 + return s.flexDirection==="row"||s.flexDirection==="row-reverse";
381 + }
382 + return false;
383 + }
384 +
385 + function rowGroups(entries){
386 + var groups=[];
387 + entries.slice().sort(function(a,b){
388 + return a.rect.top-b.rect.top||a.rect.left-b.rect.left;
389 + }).forEach(function(entry){
390 + var group=null;
391 + for(var i=0;i<groups.length;i++){
392 + if(Math.abs(groups[i].top-entry.rect.top)<=ROW_TOLERANCE){
393 + group=groups[i];
394 + break;
395 + }
396 + }
397 + if(!group){
398 + group={top:entry.rect.top,entries:[]};
399 + groups.push(group);
400 + }
401 + group.entries.push(entry);
402 + });
403 + return groups;
404 + }
405 +
406 + function run(){
407 + reset();
408 +
409 + if(window.innerWidth<=MOBILE_MAX)return;
410 +
411 + var parents=Array.from(root.querySelectorAll("*")).filter(function(el){
412 + return el.children&&el.children.length>=2&&horizontalLayout(el);
413 + });
414 +
415 + parents.forEach(function(parent){
416 + var entries=[];
417 +
418 + Array.from(parent.children).forEach(function(child){
419 + if(!visible(child))return;
420 + var target=pickTarget(child);
421 + if(!target)return;
422 + entries.push({
423 + target:target,
424 + rect:target.getBoundingClientRect()
425 + });
426 + });
427 +
428 + if(entries.length<2)return;
429 +
430 + rowGroups(entries).forEach(function(group){
431 + if(group.entries.length<2)return;
432 +
433 + var lefts=group.entries.map(function(e){return e.rect.left;}).sort(function(a,b){return a-b;});
434 + if(lefts[lefts.length-1]-lefts[0]<80)return;
435 +
436 + var targets=[];
437 + var seen=new Set();
438 +
439 + group.entries.forEach(function(e){
440 + if(!seen.has(e.target)){
441 + seen.add(e.target);
442 + targets.push(e.target);
443 + }
444 + });
445 +
446 + if(targets.length<2)return;
447 +
448 + var max=0;
449 + targets.forEach(function(el){
450 + max=Math.max(max,el.getBoundingClientRect().height);
451 + });
452 +
453 + max=Math.ceil(max);
454 + if(max<MIN_H)return;
455 +
456 + targets.forEach(function(el){
457 + el.style.setProperty("min-height",max+"px");
458 + el.setAttribute("data-sn-equal-height-managed","1");
459 + managed.add(el);
460 + });
461 + });
462 + });
463 + }
464 +
465 + function schedule(){
466 + if(raf)cancelAnimationFrame(raf);
467 + raf=requestAnimationFrame(function(){
468 + raf=requestAnimationFrame(function(){
469 + raf=0;
470 + run();
471 + });
472 + });
473 + }
474 +
475 + addEventListener("resize",schedule,{passive:true});
476 + addEventListener("load",schedule,{once:true});
477 +
478 + root.addEventListener("click",function(){
479 + setTimeout(schedule,0);
480 + },true);
481 +
482 + if(document.fonts&&document.fonts.ready){
483 + document.fonts.ready.then(schedule);
484 + }
485 +
486 + schedule();
487 + setTimeout(schedule,250);
488 + setTimeout(schedule,900);
489 +})();
490 +</script>
491 +<!-- SN_HORIZONTAL_BOX_HARMONIZER_END -->
492 +{{/html}}
493 +