Skip to content

Commit e2df7b6

Browse files
authored
Merge pull request #1498 from lowcoder-org/dev
Dev -> Main for 2.6.1 Release
2 parents 73ad9ee + 6a3d7d3 commit e2df7b6

File tree

89 files changed

+6304
-13483
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+6304
-13483
lines changed

client/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.6.0
1+
2.6.1

client/packages/lowcoder-comps/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "lowcoder-comps",
3-
"version": "2.6.1",
3+
"version": "2.6.2",
44
"type": "module",
55
"license": "MIT",
66
"dependencies": {

client/packages/lowcoder-comps/src/comps/basicChartComp/chartUtils.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,11 @@ export function getEchartsConfig(
146146
mapOptions,
147147
showCharts,
148148
} = props;
149+
let newMapOptions: any = {...mapOptions};
150+
newMapOptions.series = [{...newMapOptions.series[0]}];
151+
if(props.echartsData && props.echartsData.length > 0) newMapOptions.series[0].data = props.echartsData;
149152

150-
const echartsOption = mapOptions && showCharts ? mapOptions : {};
153+
const echartsOption = newMapOptions && showCharts ? newMapOptions : {};
151154
return {
152155
gmap: {
153156
center: [mapCenterLng, mapCenterLat],

client/packages/lowcoder-comps/src/comps/candleStickChartComp/candleStickChartConstants.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,9 +251,10 @@ export const chartUiModeChildren = {
251251
};
252252

253253
let chartJsonModeChildren: any = {
254-
echartsData: jsonControl(toArray),
254+
echartsData: jsonControl(toArray, i18nObjs.defaultCandleStickChartOption.data),
255255
echartsOption: jsonControl(toObject, i18nObjs.defaultCandleStickChartOption),
256256
echartsTitle: withDefault(StringControl, trans("candleStickChart.defaultTitle")),
257+
echartsTitleData: jsonControl(toArray, i18nObjs.defaultCandleStickChartOption.xAxis.data),
257258
echartsTitleVerticalConfig: EchartsTitleVerticalConfig,
258259
echartsLabelConfig: EchartsLabelConfig,
259260
echartsTitleConfig:EchartsTitleConfig,

client/packages/lowcoder-comps/src/comps/candleStickChartComp/candleStickChartPropertyView.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export function candleStickChartPropertyView(
1818
<Section name={trans("chart.config")}>
1919
{children.echartsData.propertyView({ label: trans("chart.data") })}
2020
{children.echartsTitleConfig.getPropertyView()}
21+
{children.echartsTitleData.propertyView({ label: trans("chart.xAxisLabels"), tooltip: trans("chart.xAxisLabelsTooltip") })}
2122
{children.echartsTitleVerticalConfig.getPropertyView()}
2223
{children.echartsTitle.propertyView({ label: trans("candleStickChart.title"), tooltip: trans("echarts.titleTooltip") })}
2324
{children.left.propertyView({ label: trans("candleStickChart.left"), tooltip: trans("echarts.leftTooltip") })}

client/packages/lowcoder-comps/src/comps/candleStickChartComp/candleStickChartUtils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ export function getEchartsConfig(
187187
},
188188
xAxis: props?.echartsOption && {
189189
type: 'category',
190-
data: props?.echartsData.xAxis && props?.echartsData.xAxis.data || props?.echartsOption.xAxis && props?.echartsOption.xAxis.data,
190+
data: props?.echartsTitleData.length && props?.echartsTitleData || props?.echartsData.xAxis && props?.echartsData.xAxis.data || props?.echartsOption.xAxis && props?.echartsOption.xAxis.data,
191191
splitArea: !props?.axisFlagVisibility && {
192192
show: true,
193193
areaStyle: {

client/packages/lowcoder-comps/src/comps/funnelChartComp/funnelChartConstants.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ export const chartUiModeChildren = {
256256
};
257257

258258
let chartJsonModeChildren: any = {
259-
echartsData: jsonControl(toArray),
259+
echartsData: jsonControl(toArray, i18nObjs.defaultFunnelChartOption.data),
260260
echartsOption: jsonControl(toObject, i18nObjs.defaultFunnelChartOption),
261261
echartsTitle: withDefault(StringControl, trans("funnelChart.defaultTitle")),
262262
echartsTitleVerticalConfig: EchartsTitleVerticalConfig,

client/packages/lowcoder-comps/src/comps/graphChartComp/graphChartConstants.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,9 @@ export const chartUiModeChildren = {
254254
};
255255

256256
let chartJsonModeChildren: any = {
257-
echartsData: jsonControl(toArray),
257+
echartsCategories: jsonControl(toArray, i18nObjs.defaultGraphChartOption.categories),
258+
echartsLinks: jsonControl(toArray, i18nObjs.defaultGraphChartOption.links),
259+
echartsNodes: jsonControl(toArray, i18nObjs.defaultGraphChartOption.nodes),
258260
echartsOption: jsonControl(toObject, i18nObjs.defaultGraphChartOption),
259261
echartsTitle: withDefault(StringControl, trans("graphChart.defaultTitle")),
260262
echartsLegendConfig: EchartsLegendConfig,

client/packages/lowcoder-comps/src/comps/graphChartComp/graphChartPropertyView.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ export function graphChartPropertyView(
1616
const jsonModePropertyView = (
1717
<>
1818
<Section name={trans("chart.config")}>
19-
{children.echartsData.propertyView({ label: trans("chart.data") })}
19+
{children.echartsCategories.propertyView({ label: trans("graphChart.categories") })}
20+
{children.echartsLinks.propertyView({ label: trans("graphChart.links") })}
21+
{children.echartsNodes.propertyView({ label: trans("graphChart.nodes") })}
2022
{children.echartsTitle.propertyView({ label: trans("graphChart.title"), tooltip: trans("echarts.titleTooltip") })}
2123
{children.echartsTitleConfig.getPropertyView()}
2224
{children.echartsTitleVerticalConfig.getPropertyView()}

client/packages/lowcoder-comps/src/comps/graphChartComp/graphChartUtils.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,8 @@ export function getEchartsConfig(
154154

155155
"type": "graph",
156156
"layout": "force",
157-
'categories': props?.echartsData?.categories || props.echartsOption.categories,
158-
'links': props?.echartsData.length !== 0 && props?.echartsData || props.echartsOption.links,
157+
'categories': props?.echartsCategories.length !== 0 && props?.echartsCategories || props.echartsOption.categories,
158+
'links': props?.echartsLinks.length !== 0 && props?.echartsLinks || props.echartsOption.links,
159159
"force": {
160160
"repulsion": props.repulsion,
161161
"gravity": props?.gravity,
@@ -165,20 +165,20 @@ export function getEchartsConfig(
165165
edgeSymbolSize: [0, props?.arrowSize],
166166
symbolSize: props?.pointSize,
167167
lineStyle: {
168-
color: props.echartsData?.color?.lineColor || props.echartsOption?.color?.lineColor || "#00000033",
168+
color: props.echartsOption?.color?.lineColor || "#00000033",
169169
...chartStyleWrapper(props?.chartStyle,theme?.chartStyle),
170170
width: props?.lineWidth || 1,
171171
curveness: props?.curveness
172172
},
173-
'nodes': props?.echartsData?.nodes || props.echartsOption.nodes,
173+
'nodes': props?.echartsNodes.length !==0 && props?.echartsNodes || props.echartsOption.nodes,
174174
itemStyle: {
175-
"color": props.echartsData?.color?.pointColor || props.echartsOption?.color?.pointColor || "#0000ff",
175+
"color": props.echartsOption?.color?.pointColor || "#0000ff",
176176
...chartStyleWrapper(props?.chartStyle,theme?.chartStyle),
177177
},
178178
}
179179
],
180180
}
181-
return props.echartsData || props.echartsOption ? opt : {};
181+
return props.echartsOption ? opt : {};
182182

183183
}
184184

client/packages/lowcoder-comps/src/comps/heatmapChartComp/heatmapChartConstants.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,10 @@ export const chartUiModeChildren = {
254254
};
255255

256256
let chartJsonModeChildren: any = {
257-
echartsData: jsonControl(toArray),
257+
echartsData: jsonControl(toArray, i18nObjs.defaultHeatmapChartOption.data),
258+
echartsDataX: jsonControl(toArray, i18nObjs.defaultHeatmapChartOption.xAxis),
259+
echartsDataY: jsonControl(toArray, i18nObjs.defaultHeatmapChartOption.yAxis),
260+
echartsColor: jsonControl(toArray, i18nObjs.defaultHeatmapChartOption.color),
258261
echartsOption: jsonControl(toObject, i18nObjs.defaultHeatmapChartOption),
259262
echartsTitle: withDefault(StringControl, trans("heatmapChart.defaultTitle")),
260263
echartsLegendConfig: EchartsLegendConfig,

client/packages/lowcoder-comps/src/comps/heatmapChartComp/heatmapChartPropertyView.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ export function heatmapChartPropertyView(
1717
<>
1818
<Section name={trans("chart.config")}>
1919
{children.echartsData.propertyView({ label: trans("chart.data") })}
20+
{children.echartsDataX.propertyView({ label: trans("heatmapChart.xAxisData") })}
21+
{children.echartsDataY.propertyView({ label: trans("heatmapChart.yAxisData") })}
22+
{children.echartsColor.propertyView({ label: trans("heatmapChart.color") })}
2023
{children.echartsTitleConfig.getPropertyView()}
2124
{children.echartsTitleVerticalConfig.getPropertyView()}
2225
{children.echartsLegendAlignConfig.getPropertyView()}

client/packages/lowcoder-comps/src/comps/radarChartComp/radarChartConstants.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,8 @@ export const chartUiModeChildren = {
255255
};
256256

257257
let chartJsonModeChildren: any = {
258-
echartsData: jsonControl(toArray),
258+
echartsData: jsonControl(toArray, i18nObjs.defaultRadarChartOption.series),
259+
echartsIndicators: jsonControl(toArray, i18nObjs.defaultRadarChartOption.indicator),
259260
echartsOption: jsonControl(toObject, i18nObjs.defaultRadarChartOption),
260261
echartsTitle: withDefault(StringControl, trans("radarChart.defaultTitle")),
261262
echartsLegendConfig: EchartsLegendConfig,

client/packages/lowcoder-comps/src/comps/radarChartComp/radarChartPropertyView.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export function radarChartPropertyView(
1717
<>
1818
<Section name={trans("chart.config")}>
1919
{children.echartsData.propertyView({ label: trans("chart.data") })}
20-
20+
{children.echartsIndicators.propertyView({ label: trans("radarChart.indicators") })}
2121
{children.echartsTitleConfig.getPropertyView()}
2222
{children.echartsTitleVerticalConfig.getPropertyView()}
2323
{children.legendVisibility.getView() && children.echartsLegendAlignConfig.getPropertyView()}

client/packages/lowcoder-comps/src/comps/radarChartComp/radarChartUtils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ export function getEchartsConfig(
169169
},
170170
radar: [
171171
{
172-
indicator: props.echartsData.indicator || props.echartsOption.indicator,
172+
indicator: (props.echartsIndicators.length !== 0 && props.echartsIndicators) || props.echartsOption.indicator,
173173
center: [`${props?.position_x}%`, `${props?.position_y}%`],
174174
startAngle: props?.startAngle,
175175
endAngle: props?.endAngle,

client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartConstants.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,8 @@ export const chartUiModeChildren = {
254254
};
255255

256256
let chartJsonModeChildren: any = {
257-
echartsData: jsonControl(toArray),
257+
echartsData: jsonControl(toArray, i18nObjs.defaultSankeyChartOption.data),
258+
echartsLinks: jsonControl(toArray, i18nObjs.defaultSankeyChartOption.links),
258259
echartsOption: jsonControl(toObject, i18nObjs.defaultSankeyChartOption),
259260
echartsTitle: withDefault(StringControl, trans("sankeyChart.defaultTitle")),
260261
echartsLegendConfig: EchartsLegendConfig,

client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartPropertyView.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export function sankeyChartPropertyView(
1717
<>
1818
<Section name={trans("chart.config")}>
1919
{children.echartsData.propertyView({ label: trans("chart.data") })}
20+
{children.echartsLinks.propertyView({ label: trans("chart.links") })}
2021

2122
{children.echartsTitleConfig.getPropertyView()}
2223
{children.echartsTitleVerticalConfig.getPropertyView()}

client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartUtils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ export function getEchartsConfig(
173173
name: item.name,
174174
itemStyle: isColorString(item.color) && {color: item.color}
175175
})),
176-
links: props.echartsData.links || props.echartsOption.links,
176+
links: (props.echartsLinks.length !== 0 && props.echartsLinks) || props.echartsOption.links,
177177
emphasis: {
178178
focus: props?.focus ? 'adjacency' : undefined,
179179
},

client/packages/lowcoder-comps/src/comps/sunburstChartComp/sunburstChartConstants.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,8 @@ export const chartUiModeChildren = {
253253
};
254254

255255
let chartJsonModeChildren: any = {
256-
echartsData: jsonControl(toArray),
256+
echartsData: jsonControl(toArray, i18nObjs.defaultSunburstChartOption.data),
257+
echartsLevels: jsonControl(toArray, i18nObjs.defaultSunburstChartOption.levels),
257258
echartsOption: jsonControl(toObject, i18nObjs.defaultSunburstChartOption),
258259
echartsTitle: withDefault(StringControl, trans("sunburstChart.defaultTitle")),
259260
echartsLegendConfig: EchartsLegendConfig,

client/packages/lowcoder-comps/src/comps/sunburstChartComp/sunburstChartPropertyView.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export function sunburstChartPropertyView(
1717
<>
1818
<Section name={trans("chart.config")}>
1919
{children.echartsData.propertyView({ label: trans("chart.data") })}
20+
{children.echartsLevels.propertyView({ label: trans("sunburstChart.levels") })}
2021

2122
{children.echartsTitleConfig.getPropertyView()}
2223
{children.echartsTitleVerticalConfig.getPropertyView()}

client/packages/lowcoder-comps/src/comps/sunburstChartComp/sunburstChartUtils.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ export function getEchartsConfig(
149149
backgroundColor: parseBackground(
150150
props?.chartStyle?.background || theme?.chartStyle?.backgroundColor || "#FFFFFF"
151151
),
152-
color: props.echartsData.data?.map(data => data.color) || props.echartsOption.data?.map(data => data.color),
152+
color: props.echartsOption.data?.map(data => data.color),
153153
tooltip: props.tooltip&&{
154154
trigger: "item",
155155
formatter: "{b}: {c}"
@@ -161,7 +161,7 @@ export function getEchartsConfig(
161161
center: [`${props?.position_x}%`, `${props?.position_y}%`],
162162
symbolSize: 7,
163163
data: props?.echartsData.length !== 0 && props?.echartsData || props.echartsOption.data,
164-
levels: props.echartsData.levels || props.echartsOption.levels,
164+
levels: props.echartsLevels.length !==0 && props.echartsLevels || props.echartsOption.levels,
165165
itemStyle: {
166166
...chartStyleWrapper(props?.chartStyle, theme?.chartStyle)
167167
},
@@ -173,7 +173,7 @@ export function getEchartsConfig(
173173
}
174174
],
175175
}
176-
return props.echartsData || props.echartsOption ? opt : {};
176+
return props.echartsOption ? opt : {};
177177

178178
}
179179

client/packages/lowcoder-comps/src/comps/themeriverChartComp/themeriverChartConstants.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,8 @@ export const chartUiModeChildren = {
254254
};
255255

256256
let chartJsonModeChildren: any = {
257-
echartsData: jsonControl(toArray),
257+
echartsData: jsonControl(toArray, i18nObjs.defaultThemeriverChartOption.data),
258+
echartsColors: jsonControl(toArray, i18nObjs.defaultThemeriverChartOption.color),
258259
echartsOption: jsonControl(toObject, i18nObjs.defaultThemeriverChartOption),
259260
echartsTitle: withDefault(StringControl, trans("themeriverChart.defaultTitle")),
260261
echartsLegendConfig: EchartsLegendConfig,

client/packages/lowcoder-comps/src/comps/themeriverChartComp/themeriverChartPropertyView.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export function themeriverChartPropertyView(
1717
<>
1818
<Section name={trans("chart.config")}>
1919
{children.echartsData.propertyView({ label: trans("chart.data") })}
20+
{children.echartsColors.propertyView({ label: trans("themeriverChart.colors") })}
2021

2122
{children.echartsTitleConfig.getPropertyView()}
2223
{children.echartsTitleVerticalConfig.getPropertyView()}

client/packages/lowcoder-comps/src/comps/themeriverChartComp/themeriverChartUtils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,12 +204,12 @@ export function getEchartsConfig(
204204
shadowColor: "rgba(0, 0, 0, 0.8)"
205205
}
206206
},
207-
color: props.echartsData?.color && props.echartsData.color || props.echartsOption?.color && props.echartsOption.color
207+
color: props.echartsColors.length !== 0 && props.echartsColors || props.echartsOption?.color && props.echartsOption.color
208208
},
209209
]
210210
}
211211

212-
return props.echartsData || props.echartsOption ? opt : {};
212+
return props.echartsOption ? opt : {};
213213

214214
}
215215

client/packages/lowcoder-comps/src/comps/treeChartComp/treeChartConstants.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ export const chartUiModeChildren = {
254254
};
255255

256256
let chartJsonModeChildren: any = {
257-
echartsData: jsonControl(toArray),
257+
echartsData: jsonControl(toArray, i18nObjs.defaultTreeChartOption.data),
258258
echartsOption: jsonControl(toObject, i18nObjs.defaultTreeChartOption),
259259
echartsTitle: withDefault(StringControl, trans("treeChart.defaultTitle")),
260260
echartsLegendConfig: EchartsLegendConfig,

client/packages/lowcoder-comps/src/comps/treemapChartComp/treemapChartConstants.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ export const chartUiModeChildren = {
253253
};
254254

255255
let chartJsonModeChildren: any = {
256-
echartsData: jsonControl(toArray),
256+
echartsData: jsonControl(toArray, i18nObjs.defaultTreemapChartOption.data),
257257
echartsOption: jsonControl(toObject, i18nObjs.defaultTreemapChartOption),
258258
echartsTitle: withDefault(StringControl, trans("treemapChart.defaultTitle")),
259259
echartsLegendConfig: EchartsLegendConfig,

client/packages/lowcoder-comps/src/i18n/comps/locales/en.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export const en = {
77
},
88
themeriverChart: {
99
themeriverType: 'Themeriver Chart Type',
10+
colors: 'Colors',
1011
title: 'Title',
1112
defaultTitle: 'Themeriver Chart',
1213
tooltip: 'Tooltip',
@@ -23,6 +24,7 @@ export const en = {
2324
},
2425
sunburstChart: {
2526
sunburstType: 'Sunburst Chart Type',
27+
levels: 'Levels',
2628
title: 'Title',
2729
defaultTitle: 'Sunburst Chart',
2830
tooltip: 'Tooltip',
@@ -73,6 +75,9 @@ export const en = {
7375
lineWidthTooltip: "Set the Line Width of the Chart."
7476
},
7577
graphChart: {
78+
categories: 'Categories',
79+
nodes: 'Nodes',
80+
links: 'Links',
7681
graphType: 'Graph Chart Type',
7782
title: 'Title',
7883
defaultTitle: 'Graph Chart',
@@ -105,6 +110,9 @@ export const en = {
105110
},
106111
heatmapChart: {
107112
heatmapType: 'Heatmap Chart Type',
113+
color: 'Colors',
114+
xAxisData: 'X-Axis Data',
115+
yAxisData: 'Y-Axis Data',
108116
title: 'Title',
109117
left: 'Left',
110118
defaultLeft:'15',
@@ -145,6 +153,7 @@ export const en = {
145153
areaFlagTooltip: "Divide the area into a Line or a Circle.",
146154
indicatorVisibility: "Indicator",
147155
indicatorVisibilityTooltip: "Show or hide the Indicator of the Chart.",
156+
indicators: 'Indicators',
148157
},
149158
candleStickChart: {
150159
candleStickType: 'CandleStick Chart Type',
@@ -361,6 +370,7 @@ export const en = {
361370
chart: {
362371
delete: "Delete",
363372
data: "Data",
373+
links: "Links",
364374
mode: "Mode",
365375
config: "Configuration",
366376
UIMode: "UI Mode",
@@ -374,6 +384,8 @@ export const en = {
374384
dataColumns: "Data Columns",
375385
title: "Title",
376386
tooltip:'Tooltip',
387+
xAxisLabels: "Labels-X",
388+
xAxisLabelsTooltip: "Label data for Axis-X (JSON Array)",
377389
xAxisDirection: "X-axis Direction",
378390
xAxisName: "X-axis Name",
379391
xAxisType: "X-axis Type",

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy