PageSourceSearch

https://www.esteri.it/wp-content/plugins/iwy-extabman/public/js/bilancio.js?ver=1.0.0

js esteri.it collected 2026-10-01 08:31:36 UTC 7,329 bytes, 241 lines download raw bytes

1function onloadComponent(rootSite, dato, lastlevel) {
2  graficoBilancio(rootSite, dato, lastlevel);
3}
4
5function graficoBilancio(rootSite, dato, lastlevel) {
6  var ctx = jQuery("#myChart, #myCharttime").get(0).getContext("2d");
7  var originalData = dato;
8
9  const tooltipFunction = function (tooltipModel) {
10    // Tooltip element
11    const tooltipEl = document.getElementById("chartjs-tooltip");
12
13    // Nascondi il tooltip se non è visibile
14    const tooltip = tooltipModel;
15    if (tooltip.opacity === 0) {
16      tooltipEl.style.opacity = 0;
17      return;
18    }
19
20    // Imposta il contenuto del tooltip
21    // Imposta il contenuto del tooltip
22    if (tooltip.body) {
23      const titleLines = tooltip.title || [];
24      const bodyLines = tooltip.body.map((b) => b.lines);
25
26      // Aggiungi dati personalizzati
27      const dataIndex = tooltip.dataPoints[0].index;
28      const datasetIndex = tooltip.dataPoints[0].datasetIndex;
29
30      const additionalData =
31        this._chart.config.data.datasets[datasetIndex].numericLabel[dataIndex];
32      const title =
33        this._chart.config.data.datasets[datasetIndex].label[dataIndex];
34      let innerHtml = "<thead>";
35
36      innerHtml += `<tr><th>${title}</th></tr>`;
37
38      innerHtml += "</thead><tbody>";
39      bodyLines.forEach((body, i) => {
40        const colors = tooltip.labelColors[i];
41        const style = `background:${colors.backgroundColor}; border-color:${colors.borderColor}`;
42        const span = `<span style="${style}"></span>`;
43        innerHtml += `<tr><td>${span}  ${additionalData}</td></tr>`;
44      });
45      innerHtml += "</tbody>";
46
47      tooltipEl.innerHTML = `<table>${innerHtml}</table>`;
48    }
49
50    // Calcola la dimensione del tooltip
51    const tooltipRect = tooltipEl.getBoundingClientRect();
52
53    const position = this._chart.canvas.getBoundingClientRect();
54
55    let left = tooltip.caretX + tooltipRect.width + window.scrollX;
56    let top = tooltip.caretY + tooltipRect.height + window.scrollY;
57
58    // Adegua la posizione per evitare che il tooltip vada fuori dal canvas
59    if (left + tooltipRect.width > position.right) {
60      left = tooltip.left;
61    }
62    if (top + tooltipRect.height > position.bottom) {
63      top = tooltip.top;
64    }
65
66    // Applica la posizione calcolata
67    tooltipEl.style.opacity = 1;
68    tooltipEl.style.left = `${left}px`;
69    tooltipEl.style.top = `${top}px`;
70    tooltipEl.style.padding = tooltip.padding + "px " + tooltip.padding + "px";
71    tooltipEl.style.pointerEvents = "none";
72  };
73
74  // Trasforma originalData in array se è un oggetto
75  let dataArray = Array.isArray(originalData)
76    ? originalData
77    : Object.values(originalData);
78
79  const chartData = {
80    labels: dataArray.map((item) => item.label),
81    datasets: [
82      {
83        data: dataArray.map((item) => parseFloat(item.value)),
84        backgroundColor: dataArray.map((item) => item.color),
85        hoverBackgroundColor: dataArray.map((item) => item.highlight),
86
87        // Aggiungi qui i dati aggiuntivi
88        azione: dataArray.map((item) => item.azione || 0),
89        sezione: dataArray.map((item) => item.sezione || 0),
90        id: dataArray.map((item) => item.id || 0),
91        nv: dataArray.map((item) => item.nv || 0),
92        fv: dataArray.map((item) => item.fv || 0),
93        group: dataArray.map((item) => item.group || 0),
94        anno: dataArray.map((item) => item.anno || 0),
95        haslink: dataArray.map((item) => item.haslink || 0),
96        numericLabel: dataArray.map((item) => item.numericLabel || 0),
97        label: dataArray.map((item) => item.label || ""),
98      },
99    ],
100  };
101
102  const options = {
103    legend: false,
104    responsive: false,
105    animation: {
106      animateRotate: true,
107      animateScale: true,
108      easing: "easeInOutExpo",
109
110      onProgress: function (animation) {
111        jQuery(".preloader").toggleClass();
112      },
113      onComplete: function (animation) {
114        jQuery(".titolosezionebilancio").css("opacity", "1");
115      },
116    },
117
118    tooltips: {
119      enabled: false,
120      //  position: "nearest",
121      custom: tooltipFunction,
122    },
123
124    cutout: "60%",
125  };
126
127  grafico = new Chart(ctx, {
128    type: "doughnut",
129    data: chartData,
130    options: options,
131  });
132
133  jQuery("#myChart").click(function (evt) {
134    var activeElement = grafico.getElementAtEvent(evt);
135    if (activeElement.length > 0) {
136      var firstElement = activeElement[0];
137      var datasetIndex = firstElement._datasetIndex;
138      var elementIndex = firstElement._index;
139      var dataset = grafico.data.datasets[datasetIndex];
140
141      // Assumi che ogni attributo (azione, sezione, ecc.) sia un array nel dataset
142      var azione = dataset.azione[elementIndex] || 0;
143      var sezione = dataset.sezione[elementIndex] || 0;
144      var id = dataset.id[elementIndex] || 0;
145      var nv = dataset.nv[elementIndex] || 0;
146      var fv = dataset.fv[elementIndex] || 0;
147      var group = dataset.group[elementIndex] || 0;
148      var anno = dataset.anno[elementIndex] || 0;
149      var haslink = dataset.haslink[elementIndex] || 0;
150
151      if (haslink === 1) {
152        lastlevel = 0;
153      }
154      if (lastlevel !== 1 && group === 0) {
155        window.location.href =
156          "?anno=" +
157          anno +
158          "&sr=" +
159          sezione +
160          "&cap=" +
161          id +
162          "&az=" +
163          azione +
164          "&nv=" +
165          nv +
166          "&fv=" +
167          fv;
168      }
169      // ajaxBilancio(rootSite, id, grafico); // Se necessario
170    }
171  });
172
173  jQuery("#myCharttime").click(function (evt) {
174    var activeElement = grafico.getElementAtEvent(evt);
175    if (activeElement.length > 0) {
176      var firstElement = activeElement[0];
177      var datasetIndex = firstElement._datasetIndex;
178      var elementIndex = firstElement._index;
179      var dataset = grafico.data.datasets[datasetIndex];
180
181      // Assumi che ogni attributo (azione, sezione, ecc.) sia un array nel dataset
182      var azione = dataset.azione[elementIndex] || 0;
183      var sezione = dataset.sezione[elementIndex] || 0;
184      var id = dataset.id[elementIndex] || 0;
185      var nv = dataset.nv[elementIndex] || 0;
186      var fv = dataset.fv[elementIndex] || 0;
187      var group = dataset.group[elementIndex] || 0;
188      var anno = dataset.anno[elementIndex] || 0;
189      var haslink = dataset.haslink[elementIndex] || 0;
190
191      if (haslink === 1) {
192        lastlevel = 0;
193      }
194      if (lastlevel !== 1 && group === 0) {
195        window.location.href =
196          "?anno=" +
197          anno +
198          "&sr=" +
199          sezione +
200          "&cap=" +
201          id +
202          "&az=" +
203          azione +
204          "&nv=" +
205          nv;
206      }
207      // ajaxBilancio(rootSite, id, grafico); // Se necessario
208    }
209    //ajaxBilancio(rootSite, activePoints[0].id, grafico);
210  });
211}
212
213function alertX(data) {
214  alert(data);
215}
216function _resetChartData(chart, new_segments) {
217  // remove all the segments
218  while (chart.segments.length) {
219    chart.removeData();
220  }
221  // add the new data fresh
222  jQuery.each(JSON.parse(new_segments), function (segment, index) {
223    chart.addData(index, segment);
224  });
225}
226
227function ajaxBilancio(rootSite, id, grafico) {
228  var page = rootSite + "modules/mod_bilancio/helper.php";
229
230  jQuery.get(
231    page,
232    {
233      cap: id,
234    },
235    function (data) {
236      _resetChartData(grafico, data);
237
238      grafico.update();
239    }
240  );
241}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.