From 1dedd8a60e6ff2f6d91ae5893fb0eaacfde6424a Mon Sep 17 00:00:00 2001
From: Tony Ford <tonyford@strategy-investor.de>
Date: Thu, 12 Sep 2024 19:25:56 +0200
Subject: [PATCH] Optimierungen

---
 html/_layouts/default.php   |   8 ++-
 html/assets/css/custom.scss |   5 ++
 html/assets/js/script.js    | 133 +++++++++++++++++++++---------------
 3 files changed, 89 insertions(+), 57 deletions(-)

diff --git a/html/_layouts/default.php b/html/_layouts/default.php
index b12f083..de3353b 100644
--- a/html/_layouts/default.php
+++ b/html/_layouts/default.php
@@ -82,6 +82,7 @@ if( !empty($csv) ){
         T2ID[v.nt] = v.id;
       }
     );
+
     var STARTLISTE={{ page.startliste | jsonify }}; {% assign startliste_size = page.startliste[0] | size | append: '' %}
     var STARTLISTE_PARTIEN={{ site.data.partien | map: startliste_size | jsonify  }}[0];
     var STARTLISTE_PARTIEN_PAUSE={{ page.startliste_partien_pause | jsonify }};
@@ -132,7 +133,7 @@ if( !empty($csv) ){
     STAT_ALL.forEach(
       function(v,i){
         if( STATISTIK_ALL[v.SpielerID] == undefined ) STATISTIK_ALL[v.SpielerID]={ 'S' :0, 'T' : 0, 'A' : 0, 'Z' : 0, 'Zpos' : 0, 'Zneg' : 0, 'MID' : [], 'face' : '' };
-        STATISTIK_ALL[v.SpielerID].S++;
+        STATISTIK_ALL[v.SpielerID].S+=v.Spiele*1;
         STATISTIK_ALL[v.SpielerID].T+=v.Tore*1;
         STATISTIK_ALL[v.SpielerID].A+=v.Assists*1;
         STATISTIK_ALL[v.SpielerID].Z+=v.Zwk*1;
@@ -428,8 +429,11 @@ if( !empty($csv) ){
             <th>Nt</th>
             <th>Spieler</th>
             <th>Alter</th>
-            <th>S/T/A</th>
+            <th>S</th>
+            <th>T</th>
+            <th>A</th>
             <th>Zwk</th>
+            <th></th>
           </tr>
         </thead>
         <tbody>
diff --git a/html/assets/css/custom.scss b/html/assets/css/custom.scss
index c3edab2..1295d86 100644
--- a/html/assets/css/custom.scss
+++ b/html/assets/css/custom.scss
@@ -263,6 +263,11 @@ tr.stats {
       &:nth-child(1) { width: 20px; }
       &:nth-child(2) { width: 30px; }
       &:nth-child(3) { width: 270px; }
+      &:nth-child(4) { width: 60px; }
+      &:nth-child(5) { width: 30px; text-align: right; }
+      &:nth-child(6) { width: 30px; text-align: right; }
+      &:nth-child(7) { width: 30px; text-align: right; }
+      &:nth-child(8) { width: 100px; text-align: center; }
       /* &:nth-child(4) { width: 50px; } */
     }
   }
diff --git a/html/assets/js/script.js b/html/assets/js/script.js
index 13f0b9b..e7edfa7 100644
--- a/html/assets/js/script.js
+++ b/html/assets/js/script.js
@@ -25,7 +25,8 @@ function calculatePartien(saison,date){
       var G=[];
       g.forEach(
         function(v){
-            G.push( TEAMS.filter( (a) => (a.nt == v) )[0] );
+            //G.push( TEAMS.filter( (a) => (a.nt == v) )[0] );
+            G.push( TEAMS.filter( (a) => (a.nt == v) ).map((a) => ( [ Object.fromEntries( Object.entries(a).filter( (b) => ( ! ( b[0] < 1000 ) )) ), a[saison] ] ))[0] ); 
         }
       );
       Grps.push(G);
@@ -134,6 +135,7 @@ function calculatePartien(saison,date){
       );
     }
   } else if ( FINALTEAMS > 4 ){
+    
     if( VFdone ){
     } else {
       var Tabelle = [];
@@ -268,7 +270,7 @@ function grpPartien( date,steps,saison,runde,spieltag,Bg ){
         partie++;
 
         if( h1 == -1 || a1 == -1 ) return;
-        var ergebnis=ERGEBNISSE.filter( (a) => ( a.saison == saison && a.runde == runde && a.spieltag == spieltag && a.H.toLowerCase() == v[h1].nt.toLowerCase() && a.A.toLowerCase() == v[a1].nt.toLowerCase() ) );
+        var ergebnis=ERGEBNISSE.filter( (a) => ( a.saison == saison && a.runde == runde && a.spieltag == spieltag && a.H.toLowerCase() == v[h1][0].nt.toLowerCase() && a.A.toLowerCase() == v[a1][0].nt.toLowerCase() ) );
 
         if( ergebnis.length == 1 ){
 
@@ -280,7 +282,8 @@ function grpPartien( date,steps,saison,runde,spieltag,Bg ){
           ergebnis['partie']=partie;
           if( St != -1 ) St=spieltag;
           if( runde == 'VF' || runde == 'HF' || runde == 'F' ){
-            done.push( th > ta ? TEAMS.filter((a) => (a.nt == ergebnis.H ))[0] : TEAMS.filter((a) => (a.nt == ergebnis.A ))[0] );
+            //done.push( th > ta ? TEAMS.filter((a) => (a.nt == ergebnis.H ))[0] : TEAMS.filter((a) => (a.nt == ergebnis.A ))[0] );
+            done.push( th > ta ? Object.values(TEAMS).filter( (a) => ( ( a.nt == ergebnis.H  ) ) ).map((a) => ( [ Object.fromEntries( Object.entries(a).filter( (b) => ( ! ( b[0] < 1000 ) )) ), a[saison] ] ))[0] : Object.values(TEAMS).filter( (a) => ( ( a.nt == ergebnis.A  ) ) ).map((a) => ( [ Object.fromEntries( Object.entries(a).filter( (b) => ( ! ( b[0] < 1000 ) )) ), a[saison] ] ))[0] );
           } else {
             done = true;
           }
@@ -300,24 +303,24 @@ function grpPartien( date,steps,saison,runde,spieltag,Bg ){
         }
 
         var tr = _e('tr');
-        tr.classList = 'begegnungen ' + (( STARTLISTE.length > 1 ) ? 'gruppe' + i : '' ) + ' h_'+v[h1].nt+' a_'+v[a1].nt+' '+(( st ) ? 'stats' : '');
+        tr.classList = 'begegnungen ' + (( STARTLISTE.length > 1 ) ? 'gruppe' + i : '' ) + ' h_'+v[h1][0].nt+' a_'+v[a1][0].nt+' '+(( st ) ? 'stats' : '');
         var td = _e('td');
         td.innerHTML = dt;
         tr.append(td);
         
         var td = _e('td');
-        $(td).attr('data-id',v[h1].nt);
+        $(td).attr('data-id',v[h1][0].nt);
         var sup = _e('sup');
-        sup.innerHTML = v[h1].nt.toUpperCase();
+        sup.innerHTML = v[h1][0].nt.toUpperCase();
         td.append(sup);
 
         var span = _e('span')
-        span.innerHTML = ' '+v[h1].name.replace(/\(NL\)/g,'')+' ';
+        span.innerHTML = ' '+v[h1][0].name.replace(/\(NL\)/g,'')+' ';
         td.append(span);
 
         var img = _e('img');
         img.classList = 'flags';
-        img.src = './images/flags/'+(( v[h1].flag ) ? v[h1].flag : v[h1].nt.toLowerCase())+'.svg';
+        img.src = './images/flags/'+(( v[h1][0].flag ) ? v[h1][0].flag : v[h1][0].nt.toLowerCase())+'.svg';
         td.append(img);
         tr.append(td);
         
@@ -326,18 +329,18 @@ function grpPartien( date,steps,saison,runde,spieltag,Bg ){
         tr.append(td);
 
         var td = _e('td');
-        $(td).attr('data-id',v[a1].nt);
+        $(td).attr('data-id',v[a1][0].nt);
         var img = _e('img');
         img.classList = 'flags';
-        img.src = './images/flags/'+(( v[a1].flag ) ? v[a1].flag : v[a1].nt.toLowerCase())+'.svg';
+        img.src = './images/flags/'+(( v[a1][0].flag ) ? v[a1][0].flag : v[a1][0].nt.toLowerCase())+'.svg';
         td.append(img);
 
         var span = _e('span')
-        span.innerHTML = ' '+v[a1].name.replace(/\(NL\)/g,'')+' ';
+        span.innerHTML = ' '+v[a1][0].name.replace(/\(NL\)/g,'')+' ';
         td.append(span);
 
         var sup = _e('sup');
-        sup.innerHTML = v[a1].nt.toUpperCase();
+        sup.innerHTML = v[a1][0].nt.toUpperCase();
         td.append(sup);
         tr.append(td);
 
@@ -347,7 +350,7 @@ function grpPartien( date,steps,saison,runde,spieltag,Bg ){
         tr.append(td);
         
         var td = _e('td');
-        $(td).attr('onmouseenter', "showLastResults('"+v[h1].nt+"','"+v[a1].nt+"')" );
+        $(td).attr('onmouseenter', "showLastResults('"+v[h1][0].nt+"','"+v[a1][0].nt+"')" );
         $(td).attr('onmouseleave', 'hideLastResults()');
         $(td).attr('onclick','ignoreHideLastResults()');
         td.innerText = ':';
@@ -442,20 +445,25 @@ function calculatePunktestand(saison,runde,show=true){
 
   var startliste=STARTLISTE.reduce((a,b)=>(a));
 
-  var Tabelle=Object.values(TEAMS).filter( (a) => ( ( a.start <= saison || saison == 0 ) && ( startliste.indexOf( a.nt ) > -2 || ( saison == 0 && a.nt != 'xx' ) ) ) )
-  .sort(
-    function(a,b){
-      return a[saison].P < b[saison].P ||
-      ( a[saison].P == b[saison].P && a[saison].Td < b[saison].Td ) ||
-      ( a[saison].P == b[saison].P && a[saison].Td == b[saison].Td && a[saison].Tp < b[saison].Tp ) ||
-      ( a[saison].P == b[saison].P && a[saison].Td == b[saison].Td && a[saison].Tp == b[saison].Tp && a.nt > b.nt ) ? 1 : -1;
-    }
-  ).filter(
-    function(b){
-      if( ! b[saison].active && saison != 0 ) return false;
-      if( b[saison].P == 0 && b[saison].Tp == 0 && b[saison].Tn == 0 ) return false;
-      return true;
-    } );
+  var Tabelle=
+  Object.values(TEAMS)
+    .filter( (a) => ( ( a.start <= saison || saison == 0 ) && ( startliste.indexOf( a.nt ) > -2 || ( saison == 0 && a.nt != 'xx' ) ) ) )
+    .map((a) => ( [ Object.fromEntries( Object.entries(a).filter( (b) => ( ! ( b[0] < 1000 ) )) ), a[saison] ] ))
+    .sort(
+      function(a,b){
+        return a[1].P < b[1].P ||
+        ( a[1].P == b[1].P && a[1].Td < b[1].Td ) ||
+        ( a[1].P == b[1].P && a[1].Td == b[1].Td && a[1].Tp < b[1].Tp ) ||
+        ( a[1].P == b[1].P && a[1].Td == b[1].Td && a[1].Tp == b[1].Tp && a.nt > b.nt ) ? 1 : -1;
+      }
+    )
+    .filter(
+      function(b){
+        if( ! b[1].active && saison != 0 ) return false;
+        if( b[1].P == 0 && b[1].Tp == 0 && b[1].Tn == 0 ) return false;
+        return true;
+      } 
+    );
 
   if( !show ){
     return Tabelle;
@@ -470,8 +478,10 @@ function calculatePunktestand(saison,runde,show=true){
   STARTLISTE.forEach(
     function(w,j){
 
-      Tabelle.filter((a) => ( w.indexOf(a.nt) > -1 )).forEach(
+
+      Tabelle.filter((a) => ( w.indexOf(a[0].nt) > -1 )).forEach(
         function(v,i){
+
           var border=SAISON_SETTINGS[saison - 26] == i+1 ? 'dashed ' : '';
           
           var tr = _e('tr');
@@ -482,17 +492,18 @@ function calculatePunktestand(saison,runde,show=true){
           td.innerText = (i+1);
           tr.append(td);
           
-          var t=v[saison].Tr.map( (a) => ( a != 'X' ) ? 1 : 0 );
+          var t=v[1].Tr.map( (a) => ( a != 'X' ) ? 1 : 0 );
           var trophy=ERGEBNISSE.filter((a) => ( a.saison==SAISON-1 && a.runde=='F')).map((a) => ( a.TH > a.TA ? a.H : a.A ))[0];
           trophy = trophy == undefined ? '' : trophy;
-          var master=TabelleLast.length > 0 ? TabelleLast[0].nt : '';
+          var master=TabelleLast.length > 0 ? TabelleLast[0][0].nt : '';
+          
           if( t.length == 0 ) t.push(0);
     
           var S=t.reduce( (a,b) => a+b );
-          var pokal=ERGEBNISSE.filter((a) => ( ( a.saison*1 < saison || saison == 0 ) && a.runde=='F' && ( parseInt(a.TH) > parseInt(a.TA) && a.H.toLowerCase() == v.nt.toLowerCase() || parseInt(a.TH) < parseInt(a.TA) && a.A.toLowerCase() == v.nt.toLowerCase() ) ) ).length;
-          var finalist=ERGEBNISSE.filter((a) => ( ( a.saison*1 < saison || saison == 0 ) && a.runde=='F' && ( parseInt(a.TH) < parseInt(a.TA) && a.H.toLowerCase() == v.nt.toLowerCase() || parseInt(a.TH) > parseInt(a.TA) && a.A.toLowerCase() == v.nt.toLowerCase() ) ) ).length;
-          var meistertitel=M.filter( (a,i) => ( a == v.nt.toLowerCase() && ( i < saison - 26 || saison == 0 ) ) ).length;
-          var managervoted=Object.values(MANAGERVOTING_WINNER).filter((a) => (a == v.nt)).length;
+          var pokal=ERGEBNISSE.filter((a) => ( ( a.saison*1 < saison || saison == 0 ) && a.runde=='F' && ( parseInt(a.TH) > parseInt(a.TA) && a.H.toLowerCase() == v[0].nt.toLowerCase() || parseInt(a.TH) < parseInt(a.TA) && a.A.toLowerCase() == v[0].nt.toLowerCase() ) ) ).length;
+          var finalist=ERGEBNISSE.filter((a) => ( ( a.saison*1 < saison || saison == 0 ) && a.runde=='F' && ( parseInt(a.TH) < parseInt(a.TA) && a.H.toLowerCase() == v[0].nt.toLowerCase() || parseInt(a.TH) > parseInt(a.TA) && a.A.toLowerCase() == v[0].nt.toLowerCase() ) ) ).length;
+          var meistertitel=M.filter( (a,i) => ( a == v[0].nt.toLowerCase() && ( i < saison - 26 || saison == 0 ) ) ).length;
+          var managervoted=Object.values(MANAGERVOTING_WINNER).filter((a) => (a == v[0].nt)).length;
     
           var td = _e('td');
           td.classList = border;
@@ -516,7 +527,7 @@ function calculatePunktestand(saison,runde,show=true){
 
           var img = _e('img');
           img.classList = 'flags';
-          img.src = '/images/flags/'+(( v.flag ) ? v.flag : v.nt.toLowerCase())+'.svg';
+          img.src = '/images/flags/'+(( v[0].flag ) ? v[0].flag : v[0].nt.toLowerCase())+'.svg';
           td.append(img);
 
           var span = _e('span');
@@ -524,12 +535,12 @@ function calculatePunktestand(saison,runde,show=true){
           td.append(span);
 
           var _a = _e('a');
-          _a.href = "javascript:calculateTeam("+((saison == 0 && false) ? SAISON_NOW : saison)+",'"+v.nt+"\')";
-          _a.innerHTML = v.name.replace(/\(NL\)/g,'<sup>'+v.nt.toUpperCase()+'</sup></a>');
+          _a.href = "javascript:calculateTeam("+((saison == 0 && false) ? SAISON_NOW : saison)+",'"+v[0].nt+"\')";
+          _a.innerHTML = v[0].name.replace(/\(NL\)/g,'<sup>'+v[0].nt.toUpperCase()+'</sup></a>');
           td.append(_a);
 
           var _a = _e('a');
-          _a.href = v.link;
+          _a.href = v[0].link;
           _a.target = 'ultrasoccer';
 
           var _i = _e('i');
@@ -537,21 +548,21 @@ function calculatePunktestand(saison,runde,show=true){
           _a.append(_i);
           td.append(_a);
 
-          if( trophy.toLowerCase() == v.nt.toLowerCase() ){
+          if( trophy.toLowerCase() == v[0].nt.toLowerCase() ){
             var _i = _e('i');
             _i.classList = 'fas fa-trophy';
             _i.title = 'Amtierender Titelgewinner';
             td.append(_i);
           }
 
-          if( master.toLowerCase() == v.nt.toLowerCase() ){
+          if( master.toLowerCase() == v[0].nt.toLowerCase() ){
             var _i = _e('i');
             _i.classList = 'fas fa-crown';
             _i.title = 'Amtierender Meister';
             td.append(_i);
           }
 
-          if(  v.nt.toLowerCase() == MANAGERVOTING_TEAM ){
+          if(  v[0].nt.toLowerCase() == MANAGERVOTING_TEAM ){
             var _i = _e('i');
             _i.classList = 'managervoted fas fa-thumbs-up';
             _i.title = 'Team der Saison, gewählt von den Managern';
@@ -581,42 +592,42 @@ function calculatePunktestand(saison,runde,show=true){
           
           var td = _e('td');
           td.classList = border;
-          td.innerText = v[saison].Tr.map( (a) => ( ( a == 'S') ? 1 : 0 ) ).reduce( (a,b) => a+b );
+          td.innerText = v[1].Tr.map( (a) => ( ( a == 'S') ? 1 : 0 ) ).reduce( (a,b) => a+b );
           tr.append(td);
           
           var td = _e('td');
           td.classList = border;
-          td.innerText = v[saison].Tr.map( (a) => ( ( a == 'U') ? 1 : 0 ) ).reduce( (a,b) => a+b );
+          td.innerText = v[1].Tr.map( (a) => ( ( a == 'U') ? 1 : 0 ) ).reduce( (a,b) => a+b );
           tr.append(td);
           
           var td = _e('td');
           td.classList = border;
-          td.innerText = v[saison].Tr.map( (a) => ( ( a == 'N') ? 1 : 0 ) ).reduce( (a,b) => a+b );
+          td.innerText = v[1].Tr.map( (a) => ( ( a == 'N') ? 1 : 0 ) ).reduce( (a,b) => a+b );
           tr.append(td);
 
           var td = _e('td');
           td.classList = border;
-          td.innerHTML = v[saison].Tr.map( (a) => '<'+a+'></'+a+'>' ).slice(-6).join('');
+          td.innerHTML = v[1].Tr.map( (a) => '<'+a+'></'+a+'>' ).slice(-6).join('');
           tr.append(td);
 
           var td = _e('td');
           td.classList = border;
-          td.innerText = v[saison].Tp+'/'+v[saison].Tn;
+          td.innerText = v[1].Tp+'/'+v[1].Tn;
           tr.append(td);
           
           var td = _e('td');
-          td.classList = border + ' ' + ((v[saison].Td > 0 ) ? 'p' : (v[saison].Td == 0 ) ? 'u' : 'n');
-          td.innerText = ((v[saison].Td > 0 ) ? '+' : '') + v[saison].Td;
+          td.classList = border + ' ' + ((v[1].Td > 0 ) ? 'p' : (v[1].Td == 0 ) ? 'u' : 'n');
+          td.innerText = ((v[1].Td > 0 ) ? '+' : '') + v[1].Td;
           tr.append(td);
           
           var td = _e('td');
-          td.classList = border + ' ' + ((v[saison].Zwk > 0 ) ? 'p' : (v[saison].Zwk == 0 ) ? 'u' : 'n');
-          td.innerText = (v[saison].Zwk > 0 ? '+' : '')+(v[saison].Zwk / S).toFixed(2);
+          td.classList = border + ' ' + ((v[1].Zwk > 0 ) ? 'p' : (v[1].Zwk == 0 ) ? 'u' : 'n');
+          td.innerText = (v[1].Zwk > 0 ? '+' : '')+(v[1].Zwk / S).toFixed(2);
           tr.append(td);
           
           var td = _e('td');
           td.classList = border;
-          td.innerText = v[saison].P;
+          td.innerText = v[1].P;
           tr.append(td);
 
           $(tabelle).append(tr);
@@ -739,7 +750,6 @@ function calculateTeam(saison,nt){
 
   var n=SPIELER.filter( (a) => ( a.nt == nt ) ).map( (b) => ( [ b.id, STATISTIK[b.id] ] ) ).filter( (c) => ( c[1] !== undefined ) ).map(
     function(v,i){
-
       var team=TEAMS.filter( (a) => ( a.nt == v[1].nt ) );
 
       var tr=document.createElement('tr');
@@ -825,7 +835,15 @@ function calculateTeam(saison,nt){
       tr.append(td);
 
       var td=document.createElement('td');
-      td.innerText=v[1].S+'/'+v[1].T+'/'+v[1].A;
+      td.innerText=v[1].S;
+      tr.append(td);
+
+      var td=document.createElement('td');
+      td.innerText=v[1].T;
+      tr.append(td);
+
+      var td=document.createElement('td');
+      td.innerText=v[1].A;
       tr.append(td);
 
       var td=document.createElement('td');
@@ -833,6 +851,10 @@ function calculateTeam(saison,nt){
       td.classList=(( v[1].Z > 0 ) ? 'p' : (( v[1].Z < 0 ) ? 'n' : 'u' ) )
       tr.append(td);
 
+      var td=document.createElement('td');
+      td.innerText=' ';
+      tr.append(td);
+
       return tr;
     }
   );
@@ -871,12 +893,13 @@ function calculateHistorie(){
   var masters=ERGEBNISSE.filter((a) => ( a.runde == 'F' )).map((a) => (a.TH*1 > a.TA*1 ? a.H.toLowerCase(): a.A.toLowerCase() ));
   var mx=T.map((a)=>(a.length)).reduce((a,b) => (Math.max(a,b)));
 
+
   var tmp='';
   for( var p=0; p<mx; p++ ){
     tmp+='<tr><td>'+(p+1)+'</td>';
     for( var i=0; i<=SAISON_NOW-26; i++){
-      var nt=T[i][p] != undefined ? T[i][p].nt : undefined;
-      tmp+='<td class="'+(( MANAGERVOTING_WINNER[i+26] == nt && nt != undefined ) ? 'managervoted ' : '')+(( masters[i] == nt && nt != undefined ) ? 'master ' : '')+(( SAISON_SETTINGS[i] == p+1 ) ? 'dashed ' : '')+'">'+(( nt != undefined ) ? '<img class="flags" title="'+T[i][p].name+'" src="./images/flags/'+(( T[i][p].flag ) ? T[i][p].flag : T[i][p].nt.toLowerCase())+'.svg">' : '')+'</td>';
+      var nt=T[i][p] != undefined ? T[i][p][0].nt : undefined;
+      tmp+='<td class="'+(( MANAGERVOTING_WINNER[i+26] == nt && nt != undefined ) ? 'managervoted ' : '')+(( masters[i] == nt && nt != undefined ) ? 'master ' : '')+(( SAISON_SETTINGS[i] == p+1 ) ? 'dashed ' : '')+'">'+(( nt != undefined ) ? '<img class="flags" title="'+T[i][p][0].name+'" src="./images/flags/'+(( T[i][p][0].flag ) ? T[i][p].flag : T[i][p][0].nt.toLowerCase())+'.svg">' : '')+'</td>';
     }
     tmp+='</tr>';
   }
-- 
GitLab