Date: Fri, 29 Mar 2024 17:28:24 +0800 (CST) Message-ID: <1794067475.5799.1711704504049@Server-5008d9af-f3ea-4e56-8156-0d40b48ec653> Subject: Exported From Confluence MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_Part_5798_1217842509.1711704504049" ------=_Part_5798_1217842509.1711704504049 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/exported.html
=E5=9B=BE=E8=A1=A8=E6=8F=92=E4=BB=B6=E6=98=AF=E7=94=A8=E4=BA=8E=E4=B8=B0= =E5=AF=8C=E5=B8=86=E8=BD=AF=E7=9A=84=E5=9B=BE=E8=A1=A8=E7=B1=BB=E5=9E=8B=EF= =BC=8C=E6=97=A8=E5=9C=A8=E5=B8=AE=E5=8A=A9=E7=94=A8=E6=88=B7=E6=9B=B4=E5=A5= =BD=E5=9C=B0=E5=81=9A=E6=95=B0=E6=8D=AE=E5=8F=AF=E8=A7=86=E5=8C=96=E5=B1=95= =E7=8E=B0=E3=80=82=E5=BC=80=E5=8F=91=E8=80=85=E9=9C=80=E8=A6=81=E9=80=9A=E8= =BF=87=E5=B8=86=E8=BD=AF=E5=BC=80=E6=94=BE=E7=9A=84=E6=8E=A5=E5=8F=A3=EF=BC= =8C=E5=8F=82=E8=80=83=E4=B8=8B=E9=9D=A2=E7=9A=84demo=E5=92=8C=E6=96=87=E6= =A1=A3=E6=9D=A5=E5=88=B6=E4=BD=9C=E6=8F=92=E4=BB=B6=E3=80=82
=E6=88=91=E4=BB=AC=E5=BB=BA=E8=AE=AE=E6=82=A8=E5=9C=A8=E4=B8=8A=E6=89=8B= =E5=BC=80=E5=8F=91=E6=8F=92=E4=BB=B6=E4=B9=8B=E5=89=8D=EF=BC=8C=E5=85=88=E4= =BD=93=E9=AA=8C=E4=B8=80=E4=B8=8B=E6=8F=92=E4=BB=B6=E4=BD=BF=E7=94=A8=E7=9A= =84=E5=85=B7=E4=BD=93=E6=83=85=E5=BD=A2=EF=BC=8C=E6=90=AD=E5=BB=BA=E7=8E=AF= =E5=A2=83=E7=9A=84=E5=85=B7=E4=BD=93=E6=AD=A5=E9=AA=A4=E5=9C=A8=E5=85=B6=E4= =BB=96=E6=96=87=E6=A1=A3=E4=B8=AD=E5=86=99=E7=9A=84=E5=BE=88=E5=85=B7=E4=BD= =93=EF=BC=8C=E8=BF=99=E9=87=8C=E4=B8=8D=E5=8E=BB=E8=B5=98=E8=BF=B0=E3=80=82=
plugins= -calendarchart --src --com.fr.plugins.calendarchart --custompie --ChartConfigPane.java --DemoChartsPie.java --demoChartsPieUI.java --PieChart.java --images --pie256.png --web --echarts.bridge.js --echarts.loader.js --echarts.min.js --EChartsFileLoader.java --build.xml --plugin.xml --plugins-calendarchart.iml=20
=E6=AD=A4=E7=9B=AE=E5=BD=95=E4=B8=8B=E5=AD=98=E6=94=BE=E7=AC=AC=E4=B8=89= =E6=96=B9=E5=9B=BE=E8=A1=A8=E6=8F=92=E4=BB=B6=E6=8E=A5=E5=8F=A3=E8=B0=83=E7= =94=A8=E7=B1=BB=EF=BC=8C=E9=9C=80=E8=A6=81=E5=AE=9E=E7=8E=B0=E7=9B=B8=E5=BA= =94=E7=9A=84=E6=96=B9=E6=B3=95=E3=80=82
=E6=AD=A4=E7=9B=AE=E5=BD=95=E4=B8=8B=E5=AD=98=E6=94=BE=E6=8F=92=E4=BB=B6= =E7=9A=84=E7=9B=B8=E5=85=B3=E5=9B=BE=E7=89=87=EF=BC=8C=E4=BE=9B=E6=8A=A5=E8= =A1=A8=E8=A1=A8=E5=8D=95=E9=A1=B5=E9=9D=A2=E5=B1=95=E7=A4=BA=E3=80=82
=E6=AD=A4=E7=9B=AE=E5=BD=95=E4=B8=8B=E5=AD=98=E6=94=BE=E5=89=8D=E5=8F=B0= js=EF=BC=8C=E4=BE=9B=E5=9B=BE=E8=A1=A8=E9=A2=84=E8=A7=88=E6=97=B6=E5=B1=95= =E7=A4=BA=E3=80=82
=E8=AF=A5=E6=96=87=E4=BB=B6=E7=94=A8=E4=BA=8E=E6=8F=92=E4=BB=B6=E5=8C=85= =E6=9E=84=E5=BB=BA=EF=BC=8C=E8=AF=B7=E5=8F=82=E8=80=83=E6=96=87=E6=A1=A3=E3=80=82
=E8=AF=A5=E6=96=87=E4=BB=B6=E5=8C=85=E5=90=AB=E6=8F=92=E4=BB=B6=E7=9A=84= =E6=8E=A5=E5=85=A5=E7=82=B9=E6=8F=8F=E8=BF=B0=E4=BF=A1=E6=81=AF=EF=BC=8C=E8= =AF=B7=E5=8F=82=E8=80=83= =E6=96=87=E6=A1=A3=E3=80=82
IEDA=E9=A1=B9=E7=9B=AE=E7=9A=84=E9=85=8D=E7=BD=AE=E3=80=82
=E6=8E=A5=E5=8F=A3=E8=AF=A6=E7=BB=86=E4=BB=8B=E7=BB=8D=EF=BC=8C=E8=AF=B7= =E5=8F=82=E9=98=85=E6=96= =87=E6=A1=A3=E3=80=82
1=EF=BC=89 =E5=BC=80=E5=8F=91=E8=BF=87=E7= =A8=8B=EF=BC=9A=E4=B8=80=E5=85=B1=E4=B8=89=E4=B8=AA=E9=83=A8=E5=88=86
=E6=95=B0=E6=8D=AE=E6=8A=BD=E5=8F=96=E9= =83=A8=E5=88=86=EF=BC=9A=E8=AE=BE=E8=AE=A1=E5=99=A8=E5=8F=B3=E4=BE=A7=E7=9A= =84=E5=9B=BE=E8=A1=A8=E5=B1=9E=E6=80=A7=E8=A1=A8-=E6=95=B0=E6=8D=AE=E9=83= =A8=E5=88=86
=E5=89=8D=E7=AB=AF=E5=B1=95=E7=A4=BA=E6= =A0=B7=E5=BC=8F=EF=BC=9A=E8=AE=BE=E8=AE=A1=E5=99=A8=E5=8F=B3=E4=BE=A7=E7=9A= =84=E5=9B=BE=E8=A1=A8=E5=B1=9E=E6=80=A7=E8=A1=A8-=E6=A0=B7=E5=BC=8F=E9=83= =A8=E5=88=86
=E5=89=8D=E7=AB=AF=E5=B1=95=E7=A4=BA=E7= =9A=84js=EF=BC=9A=E5=9B=BE=E8=A1=A8=E9=A2=84=E8=A7=88=E5=B1=95=E7=A4=BA=E7= =9A=84=E9=A1=B5=E9=9D=A2
2=EF=BC=89 =E6=8C=89=E7=85=A7=E8=87=AA=E5= =B7=B1=E5=BC=80=E5=8F=91=E7=9A=84=E7=B1=BB=E4=BF=AE=E6=94=B9plugin.xml=E4= =BB=A5=E5=8F=8Abuild.xml=EF=BC=8C=E8=AF=B7=E4=B8=8A=E9=9D=A2=E6=8F=90=E5=88= =B0=E7=9A=84=E6=96=87=E6=A1=A3=E3=80=82
1) =E9=BB=98=E8=AE=A4=E6=95=B0=E6=8D=AE=E9=9B=86=E5=92=8C=E5=9B=BE=E8=A1= =A8=E5=B1=9E=E6=80=A7+ js=EF=BC=8C=E9=99=A4=E4=BA=86js=EF=BC=8C=E6=88=91=E4= =BB=AC=E9=9C=80=E8=A6=81=E7=BB=A7=E6=89=BF=E4=BB=A5=E4=B8=8B=E4=B8=89=E4=B8= =AA=E7=B1=BB=EF=BC=8C=E5=B9=B6=E5=AE=9E=E7=8E=B0=E9=87=8C=E9=9D=A2=E5=85=B7= =E4=BD=93=E7=9A=84=E6=96=B9=E6=B3=95=EF=BC=9A
Charts=E7=B1=BB=EF=BC=9A=E5=9B=BE=E8=A1= =A8=E7=B1=BB
AbstractIndependentChartsProvider=E7=B1= =BB=EF=BC=9A=E6=8F=92=E4=BB=B6=E5=9B=BE=E8=A1=A8=E6=8E=A5=E5=8F=A3
AbstractJavaScriptFileHandler=E7=B1=BB=EF= =BC=9A=E6=8F=92=E4=BB=B6=E5=9B=BE=E8=A1=A8=E7=95=8C=E9=9D=A2=E6=8E=A5=E5=8F= =A3
=E7=AC=AC=E4=B8=80=E6=AD=A5=EF=BC=8C=E7=BB=A7=E6=89=BFCharts=E7=B1=BB=EF= =BC=8C=E5=AE=9E=E7=8E=B0=E4=BB=A5=E4=B8=8B=E5=87=A0=E4=B8=AA=E6=96=B9=E6=B3= =95=EF=BC=9A
toJSON()=EF=BC=9A=E9=80=9A=E8=BF=87getCha= rtData()=EF=BC=8C=E8=BF=99=E9=87=8C=E6=9C=89=E4=BD=A0=E9=9C=80=E8=A6=81=E7= =9A=84=E6=95=B0=E6=8D=AE=EF=BC=8C=E5=B9=B6=E8=BD=AC=E6=88=90json=EF=BC=8C= =E5=89=8D=E7=AB=AF=E4=BC=9A=E6=8B=BF=E5=88=B0=E8=BF=99=E4=B8=AAjson
getChartID():=E8=BF=94=E5=9B=9E=E7=9A=84= =E5=BA=94=E8=AF=A5=E5=92=8Cplugin.xml=E9=85=8D=E7=BD=AE=E4=B8=AD=E7=9A=84= =E7=9B=B8=E5=90=8C
writeXML=E5=92=8CreadXML=E5=8F=AF=E4=BB= =A5=E8=80=83=E8=99=91=E4=B8=8D=E8=87=AA=E5=AE=9A=E4=B9=89=E5=AE=9E=E7=8E=B0= =EF=BC=8C=E5=A6=82=E9=9C=80=E8=87=AA=E5=AE=9A=E4=B9=89=E5=AE=9E=E7=8E=B0=E4= =B8=8B=E9=9D=A2=E4=BC=9A=E6=9C=89=E4=BB=8B=E7=BB=8D
public = class YourCharts extends Charts { @Override public JSONObject toJSON(Repository repo) throws JSONException { //=E9=80=9A=E8=BF=87getChartData()=E5=BE=97=E5=88=B0=E4=BD=A0=E9=9C= =80=E8=A6=81=E7=9A=84=E6=95=B0=E6=8D=AE=EF=BC=8C=E6=8A=8A=E8=BF=99=E4=BA=9B= =E6=95=B0=E6=8D=AE=E8=BD=AC=E6=88=90=E8=87=AA=E5=AE=9A=E4=B9=89=E7=9A=84jso= n=E6=A0=BC=E5=BC=8F=EF=BC=8C=E5=89=8D=E7=AB=AF=E4=BC=9A=E6=94=B6=E5=88=B0= =E8=BF=99=E4=B8=AAjson return null; } @Override public String getChartID() { //=E8=BF=99=E9=87=8C=E8=BF=94=E5=9B=9E=E5=80=BC=E4=B8=8Eplugin.xml= =E9=85=8D=E7=BD=AE=E4=B8=AD=E7=9A=84plotID=E4=B8=80=E8=87=B4=E3=80=82 return yourPlotID; } @Override public void writeXML(XMLPrintWriter xmlPrintWriter) { //=E5=9B=BE=E8=A1=A8=E5=B1=9E=E6=80=A7=E9=85=8D=E7=BD=AE=E4=BF=A1= =E6=81=AF=E4=BC=9A=E8=A2=AB=E5=AD=98=E5=82=A8=E5=9C=A8xml=E4=B8=AD=EF=BC=8C= =E4=B8=8D=E8=80=83=E8=99=91=E8=87=AA=E5=AE=9A=E4=B9=89=E5=9B=BE=E8=A1=A8=E6= =A0=B7=E5=BC=8F=EF=BC=8C=E4=B8=8D=E7=94=A8=E5=AE=9E=E7=8E=B0=E3=80=82 } @Override public void readXML(XMLableReader xmLableReader) { //=E5=92=8CwriteXML=E4=B8=80=E6=A0=B7=EF=BC=8C=E8=BF=99=E9=87=8C=E6= =98=AF=E8=AF=BB=E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF =09} }=20
=E7=AC=AC=E4=BA=8C=E6=AD=A5=EF=BC=8C=E7=BB=A7=E6=89=BFAbstractIndependen= tChartsProvider=E7=B1=BB=EF=BC=8C=E5=AE=9E=E7=8E=B0=E4=BB=A5=E4=B8=8B=E5=87= =A0=E4=B8=AA=E6=96=B9=E6=B3=95=EF=BC=9A
getChartName()=EF=BC=9A=E8=BF=94=E5=9B=9E= =E6=8F=92=E4=BB=B6=E7=9A=84=E5=90=8D=E5=AD=97=EF=BC=8C=E4=BE=9B=E6=8A=A5=E8= =A1=A8=E9=A1=B5=E9=9D=A2=E6=96=B0=E5=A2=9E=E5=9B=BE=E8=A1=A8=E4=BD=BF=E7=94= =A8
getChartTypes()=EF=BC=9A=E8=BF=94=E5=9B= =9E=E4=B8=8A=E4=B8=80=E6=AD=A5=E5=88=9B=E5=BB=BA=E7=9A=84=E5=AD=98=E5=82=A8= =E5=9B=BE=E8=A1=A8=E6=95=B0=E6=8D=AE=E7=9A=84=E7=B1=BB
getRequiredJS()=EF=BC=9A=E4=BD=A0=E7=9A= =84=E5=9B=BE=E8=A1=A8=E4=BA=A4=E4=BA=92=E7=9A=84js
getWrapperName()=EF=BC=9AJS=E5=AF=B9=E8= =B1=A1=E5=90=8D=EF=BC=8C=E8=AF=A5=E5=AF=B9=E8=B1=A1=E4=B8=80=E8=88=AC=E6=98= =AF=E4=B8=80=E4=B8=AA=E5=87=BD=E6=95=B0=EF=BC=8C=E6=89=A7=E8=A1=8C=E5=90=8E= =E4=BC=9A=E5=9C=A8=E7=BB=99=E5=AE=9A=E7=9A=84dom=E4=B8=AD=E7=BB=98=E5=88=B6= =E5=9B=BE=E8=A1=A8
getChartImagePath()=EF=BC=9A=E5=9B=BE=E8= =A1=A8=E7=9A=84=E5=9B=BE=E6=A0=87=EF=BC=8C=E6=96=87=E4=BB=B6=E5=AD=98=E5=9C= =A8images=E4=B8=8B=E9=9D=A2
currentAPILevel()=EF=BC=9A=E5=BD=93=E5=89= =8D=E6=8E=A5=E5=8F=A3=E7=9A=84API=E7=AD=89=E7=BA=A7=E7=94=A8=E4=BA=8E=E5=88= =A4=E6=96=AD=E6=98=AF=E5=90=A6=E8=A6=81=E5=8D=87=E7=BA=A7=E6=8F=92=E4=BB=B6=
public = class YourChartsProvider extends AbstractIndependentChartsProvider { @Override public String getChartName() { return "=E4=BD=A0=E7=9A=84=E5=9B=BE=E8=A1=A8=E6=8F=92=E4=BB=B6=E5= =90=8D=E5=AD=97"; } @Override public Chart[] getChartTypes() { //=E8=BF=94=E5=9B=9E=E4=B8=8A=E4=B8=80=E6=AD=A5=E5=88=9B=E5=BB=BA= =E7=9A=84=E5=AD=98=E5=82=A8=E5=9B=BE=E8=A1=A8=E6=95=B0=E6=8D=AE=E7=9A=84=E7= =B1=BB=EF=BC=8C=E5=8D=B3YourCharts return new YourCharts[]{new YourCharts()}; } @Override public String[] getRequiredJS() { //=E4=BD=A0=E7=9A=84=E5=9B=BE=E8=A1=A8=E4=BA=A4=E4=BA=92=E7=9A=84js= =EF=BC=8C=E6=89=80=E4=BE=9D=E8=B5=96=E7=9A=84=E5=85=B6=E4=BB=96js=E6=96=87= =E4=BB=B6=EF=BC=8C=E6=AF=94=E5=A6=82echarts.js=E5=9C=A8=E5=8F=A6=E5=A4=96= =E5=9C=B0=E6=96=B9=E9=85=8D=E7=BD=AE=EF=BC=8C=E5=90=8E=E8=BE=B9=E4=BC=9A=E6= =8F=90=E5=88=B0 return new String[]{ =09=09=09"/com/fr/plugins/xxx/web/echarts.bridge.js" }; } @Override public String getWrapperName() { //JS=E5=AF=B9=E8=B1=A1=E5=90=8D=EF=BC=8C=E8=AF=A5=E5=AF=B9=E8=B1=A1= =E4=B8=80=E8=88=AC=E6=98=AF=E4=B8=80=E4=B8=AA=E5=87=BD=E6=95=B0=EF=BC=8C=E6= =89=A7=E8=A1=8C=E5=90=8E=E4=BC=9A=E5=9C=A8=E7=BB=99=E5=AE=9A=E7=9A=84dom=E4= =B8=AD=E7=BB=98=E5=88=B6=E5=9B=BE=E8=A1=A8=20 return "EChartsFactory"; } @Override public String getChartImagePath() { //=E4=BD=A0=E7=9A=84=E5=9B=BE=E8=A1=A8=E6=8F=92=E4=BB=B6=E7=9A=84= =E5=9B=BE=E6=A0=87 return "com/fr/plugins/xxx/images/xxx.png"; } @Override=20 public int currentAPILevel() { //=E5=BD=93=E5=89=8D=E6=8E=A5=E5=8F=A3=E7=9A=84API=E7=AD=89=E7=BA= =A7=E7=94=A8=E4=BA=8E=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6=E8=A6=81=E5=8D=87= =E7=BA=A7=E6=8F=92=E4=BB=B6 return CURRENT_API_LEVEL; } }=20
=E7=AC=AC=E4=B8=89=E6=AD=A5=EF=BC=8C=E7=BB=A7=E6=89=BFAbstractJavaScript= FileHandler=E7=B1=BB=EF=BC=8C=E5=AE=9E=E7=8E=B0=E4=BB=A5=E4=B8=8B=E5=87=A0= =E4=B8=AA=E6=96=B9=E6=B3=95=EF=BC=9A
pathsForFiles()=EF=BC=9A=E5=A6=82=E6=9E=9C=E4=BD=A0=E7=94=A8=E7=9A=84=E6= =98=AFEcharts=E7=9A=84=E8=AF=9D=EF=BC=8C=E8=BF=94=E5=9B=9Eecharts=E7=9A=84j= s=EF=BC=8C=E4=BE=8B=E5=A6=82=EF=BC=9A
return = new String[]{ =09"/com/fr/plugin/parallelchart/web/echarts.loader.js", =09"/com/fr/plugin/parallelchart/web/echarts.min.js" };=20
=E5=A6=82=E6=9E=9C=E4=BD=A0=E7=94=A8=E7=9A=84=E6=98=AFg2=E7=9A=84=E8=AF= =9D=EF=BC=8C=E8=BF=94=E5=9B=9Eg2=E7=9A=84js=EF=BC=8C=E4=BE=8B=E5=A6=82=EF= =BC=9A
return = new String[]{ =09"/com/fr/plugin/parallelchart/web/g2.js" };=20
encode()=EF=BC=9A=E7=BC=96=E7=A0=81=E6=A0=BC=E5=BC=8F
public = class EchartFileLoader extends AbstractJavaScriptFileHandler { @Override public String[] pathsForFiles() { =09=09 =09=09//=E5=8A=A0=E8=BD=BDjs return new String[]{ "/com/fr/plugin/parallelchart/web/echarts.loader.js", =09=09=09"/com/fr/plugin/parallelchart/web/echarts.min.js" }; } @Override public String encode() { return EncodeConstants.ENCODING_UTF_8; }=20
2=EF=BC=89 =E8=87=AA=E5=AE=9A=E4=B9=89=E5=9B=BE=E8=A1=A8=E5=B1=9E=E6=80= =A7+=E9=BB=98=E8=AE=A4=E6=95=B0=E6=8D=AE=E9=9B=86 +js
=E5=9C=A8=E4=B8=8A=E8=BE=B9=E7=9A=84=E4=BE=8B=E5=AD=90=E5=9F=BA=E7=A1=80= =E4=B8=8A=EF=BC=8C=E5=8A=A0=E4=B8=8A=E4=B8=80=E4=B8=AA=E8=87=AA=E5=AE=9A=E4= =B9=89=E5=B1=9E=E6=80=A7=E7=9A=84=E9=85=8D=E7=BD=AE=EF=BC=8C=E4=BB=A5=E9=85= =8D=E7=BD=AE=E5=9B=BE=E8=A1=A8=E7=9A=84=E6=A0=87=E9=A2=98=E4=B8=BA=E4=BE=8B= =E3=80=82
=E7=AC=AC=E4=B8=80=E6=AD=A5=EF=BC=8C=E7=BB=A7=E6=89=BFChartsConfigPane= =E7=9A=84YourChartsConfigPane=EF=BC=8C=E9=80=9A=E8=BF=87=E8=BF=99=E4=B8=AA= =E7=B1=BB=E7=9A=84populate=E5=92=8Cupdate=E6=96=B9=E6=B3=95=E4=B8=8ECharts= =E7=B1=BB=E5=81=9A=E4=BA=A4=E4=BA=92=EF=BC=8C=E5=AE=9E=E7=8E=B0=E4=BB=A5=E4= =B8=8B=E5=87=A0=E4=B8=AA=E6=96=B9=E6=B3=95=EF=BC=9A
YourChartsConfigPane()=EF=BC=9A=E6=9E=84= =E5=BB=BA=E5=9B=BE=E8=A1=A8=E5=B1=9E=E6=80=A7=E9=9D=A2=E6=9D=BF=EF=BC=8C=E4= =BB=A5=E8=87=AA=E5=AE=9A=E4=B9=89=E6=A0=87=E9=A2=98=E4=B8=BA=E4=BE=8B
Populate():=E6=8A=8AYourCharts=E4=B8=AD= =E5=9B=BE=E8=A1=A8=E9=85=8D=E7=BD=AE=E7=9A=84=E6=95=B0=E6=8D=AE=E5=9C=A8=E5= =B1=9E=E6=80=A7=E9=9D=A2=E6=9D=BF=E4=B8=8A=E5=B1=95=E7=A4=BA
Update():=E6=8A=8A=E9=9D=A2=E6=9D=BF=E4= =B8=8A=E7=9A=84=E6=95=B0=E6=8D=AE=E5=AD=98=E5=88=B0YourCharts=E4=B8=AD=E5= =8E=BB
public = class YourChartsConfigPane extends ChartsConfigPane<YourCharts> { =09private ChartCollection chartCollection; private UITextField value; public YourChartsConfigPane() { =09=09//=E8=BF=99=E9=87=8C=E6=9E=84=E5=BB=BA=E4=BA=86=E4=B8=80=E4=B8=AA=E5= =9B=BE=E8=A1=A8=E5=B1=9E=E6=80=A7=E9=9D=A2=E6=9D=BF=EF=BC=8C=E5=88=9B=E5=BB= =BA=E4=BA=86=E4=B8=80=E4=B8=AA=E6=96=87=E6=9C=AC=E6=A1=86=EF=BC=8C=E7=94=A8= =E6=9D=A5=E8=AE=A9=E7=94=A8=E6=88=B7=E8=BE=93=E5=85=A5=E5=B0=86=E5=B1=95=E7= =A4=BA=E7=9A=84=E5=9B=BE=E8=A1=A8=E7=9A=84=E6=A0=87=E9=A2=98 =09=09this.setLayout(new BorderLayout()); =09=09northJpane.setLayout(new GridLayout(4, 1, 10,10)); =09=09northJpane.add(nameUILabel); =09=09northJpane.add(value); =09=09northJpane.add(demoUILabel); =09=09northJpane.add(customTextArea); =09=09this.add(northJpane, BorderLayout.NORTH); =09=09this.add(centerJpane, BorderLayout.CENTER); =09=09this.setSize(200, 200); =09=09this.setVisible(true); =09=09//=E5=88=9D=E5=A7=8B=E5=8C=96=E6=89=80=E6=9C=89=E7=BB=84=E4=BB=B6=E5= =90=8E=E5=BF=85=E9=A1=BB=E8=B0=83=E7=94=A8=E6=AD=A4=E6=96=B9=E6=B3=95=E4=B8= =BA=E4=BB=96=E4=BB=AC=E6=B7=BB=E5=8A=A0=E7=9B=91=E5=90=AC=E3=80=82=E6=B3=A8= =E6=84=8F=EF=BC=9A=E6=AD=A4=E6=96=B9=E6=B3=95=E5=BF=85=E9=A1=BB=E5=AE=9E=E7= =8E=B0=EF=BC=8C=E4=B8=8D=E5=AE=9E=E7=8E=B0=E6=97=A0=E6=B3=95=E7=9B=91=E5=90= =AC=E6=9B=B4=E6=96=B0=E4=BF=9D=E5=AD=98=EF=BC=81=EF=BC=81 =09=09initAllListeners(); } =09//=E8=BF=99=E4=B8=AA=E7=B1=BB=E6=98=AF=E7=82=B9=E5=87=BB=E7=A1=AE=E8=AE= =A4=E6=8C=89=E9=92=AE=E6=97=B6=E7=9A=84=E7=9B=91=E5=90=AC class ColorEventListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { =20 =09=09=09update(chartCollection); } } @Override //=E8=BF=94=E5=9B=9E=E7=9A=84=E7=B1=BB=E6=98=AF=E7=B1=BB=E5=AE=9A=E4=B9= =89=E4=B8=AD=E7=9A=84=E6=B3=9B=E5=9E=8B=E7=B1=BB public Class<?extends Charts> accptType() { return YourCharts.class; } @Override public void populate(ChartCollection collection, YourCharts selectedCha= rt) { chartCollection =3D collection; //=E6=8A=8AYourCharts=E4=B8=AD=E5=9B=BE=E8=A1=A8=E9=85=8D=E7=BD=AE= =E7=9A=84=E6=95=B0=E6=8D=AE=E8=BF=99=E8=BE=B9=E7=9A=84=E9=9D=A2=E6=9D=BF=E4= =B8=8A =09value.setText(selectedChart.getCustomData()); } @Override public void update(ChartCollection collection, YourCharts selectedChart= ) { //=E6=8A=8A=E9=9D=A2=E6=9D=BF=E4=B8=8A=E7=9A=84=E6=95=B0=E6=8D=AE= =E5=AD=98=E5=88=B0YourCharts=E4=B8=AD=E5=8E=BB selectedChart.setCustomData(value.getText()); } }=20
=E7=AC=AC=E4=BA=8C=E6=AD=A5=EF=BC=8C=E7=BB=A7=E6=89=BFCharts=E7=9A=84You= rCharts=EF=BC=8C=E9=BB=98=E8=AE=A4=E5=9B=BE=E8=A1=A8=E5=B1=9E=E6=80=A7=E6= =97=B6=EF=BC=8CwriteXML=E5=92=8CreadXML=E4=B8=8D=E9=9C=80=E8=A6=81=E5=AE=9E= =E7=8E=B0=EF=BC=8C=E8=87=AA=E5=AE=9A=E4=B9=89=E5=9B=BE=E8=A1=A8=E5=B1=9E=E6= =80=A7=E9=9C=80=E8=A6=81=E5=AE=9E=E7=8E=B0=E8=BF=99=E4=B8=A4=E4=B8=AA=E6=96= =B9=E6=B3=95=E3=80=82
writeXML():=E6=8A=8A=E6=95=B0=E6=8D=AE=E5= =AD=98=E5=88=B0XML=E4=B8=AD=EF=BC=8C=E5=85=B7=E4=BD=93=E8=BF=87=E7=A8=8B=E5= =8F=82=E8=80=83demo=E6=88=96=E8=80=85=E6=9F=A5=E7=9C=8B=E6=96=87=E6=A1=A3
readXML():=E4=BB=8Exml=E4=B8=AD=E5=8F=96= =E6=95=B0=E6=8D=AE=EF=BC=8C=E5=85=B7=E4=BD=93=E8=BF=87=E7=A8=8B=E5=8F=82=E8= =80=83demo=E6=88=96=E8=80=85=E6=9F=A5=E7=9C=8B=E6=96=87=E6=A1=A3
public = class YourCharts extends Charts { =09//=E8=BF=99=E4=B8=AA=E7=B1=BB=E4=B9=8B=E5=89=8D=E5=8F=AA=E9=9C=80=E8=A6= =81=E4=BF=AE=E6=94=B9writeXML=E5=92=8CreadXML=E4=B8=A4=E4=B8=AA=E6=96=B9=E6= =B3=95=20 @Override public void writeXML(XMLPrintWriter xmlPrintWriter) { =09//=E8=BF=99=E9=87=8C=E5=B0=86=E6=95=B0=E6=8D=AE=E5=AD=98=E5=9C=A8XML= =E4=B8=AD =09xmlPrintWriter.startTAG(TAG_NAME) =09=09=09.attr("custom", getCustomData()) .end(); writeDefinition(xmlPrintWriter); } @Override public void readXML(XMLableReader xmLableReader) { //=E8=BF=99=E9=87=8C=E5=B0=86XML=E4=B8=AD=E7=9A=84=E6=95=B0=E6=8D= =AE=E8=AF=BB=E5=87=BA=E6=9D=A5 if (xmLableReader.isChildNode()) { String tagName =3D xmLableReader.getTagName(); if (tagName.equals("customChartDemo")) { =09setCustomData(xmLableReader.getAttrAsString("custom","111"))= ; } } } }=20
3=EF=BC=89 =E8=87=AA=E5=AE=9A=E4=B9=89=E5=9B=BE=E8=A1=A8=E5=B1=9E=E6=80= =A7+=E8=87=AA=E5=AE=9A=E4=B9=89=E6=95=B0=E6=8D=AE=E9=9B=86+js
=E5=9C=A8=E4=B8=8A=E8=BE=B9=E5=9F=BA=E7=A1=80=E4=B8=8A=EF=BC=8C=E6=96=B0= =E5=8A=A03=E4=B8=AA=E7=B1=BB=EF=BC=8C=E5=88=86=E5=88=AB=E6=98=AF=EF=BC=9A= =E5=AE=9A=E4=B9=89=E6=95=B0=E6=8D=AE=E9=9B=86=E7=9A=84=E9=9D=A2=E6=9D=BF=E7= =B1=BB=EF=BC=8C=E6=95=B0=E6=8D=AE=E9=9B=86=E7=9A=84=E5=AE=9A=E4=B9=89=E5=92= =8C=E6=9F=A5=E8=AF=A2=E7=B1=BB=EF=BC=8C=E6=9F=A5=E8=AF=A2=E7=BB=93=E6=9E=9C= =E5=AD=98=E5=82=A8=E7=B1=BB=E3=80=82
=E7=AC=AC=E4=B8=80=E6=AD=A5=EF=BC=8C=E7=BB=A7=E6=89=BFAbstractTableDataC= ontentPane=EF=BC=8C=E5=AE=9A=E4=B9=89=E6=95=B0=E6=8D=AE=E9=9B=86=E7=9A=84= =E9=9D=A2=E6=9D=BF=E7=B1=BB=EF=BC=8C=E5=B0=B1=E6=98=AF=E4=BD=A0=E7=9A=84=E6= =8F=92=E4=BB=B6=E7=94=A8=E6=88=B7=E5=9C=A8=E8=BF=99=E4=B8=AA=E9=9D=A2=E6=9D= =BF=E4=B8=8A=E9=85=8D=E7=BD=AE=E4=BB=96=E4=BB=AC=E6=83=B3=E8=A6=81=E7=9A=84= =E6=95=B0=E6=8D=AE=EF=BC=8C=E6=AF=94=E5=A6=82=E8=A6=81=E7=94=A8=E5=93=AA=E4= =B8=AA=E8=A1=A8=E7=9A=84=E5=93=AA=E4=B8=80=E5=88=97=E6=95=B0=E6=8D=AE=EF=BC= =8C=E9=87=8C=E8=BE=B9=E9=9C=80=E8=A6=81=E5=AE=9E=E7=8E=B0=E7=9A=84=E6=8E=A5= =E5=8F=A3=E4=BD=9C=E7=94=A8=EF=BC=8C=E5=A6=82=E4=B8=8B=EF=BC=9A
populateBean=EF=BC=9A=E5=90=8C=E6=AD=A5=
=E9=85=8D=E7=BD=AE=E5=88=B0=E9=9D=A2=E6=9D=BF=E3=80=82
updateBean=EF=BC=
=9A=E5=B0=86=E9=9D=A2=E6=9D=BF=E9=85=8D=E7=BD=AE=E6=9B=B4=E6=96=B0
check=
BoxUse=EF=BC=9A=E6=A3=80=E6=9F=A5=E6=9F=90=E4=BA=9Bbox=E6=98=AF=E5=90=A6=E5=
=8F=AF=E7=94=A8
clearAllBoxList=EF=BC=9A=E6=B8=85=E7=A9=BA=E8=AE=BE=E7=
=BD=AEbox=E7=9A=84=E8=AE=BE=E7=BD=AE
refreshBoxListWithSelectTableData=
=EF=BC=9A=E5=88=B7=E6=96=B0box
public = class TableDataContentPane extends AbstractTableDataContentPane { private UIComboBox dateComboBox; private UIComboBox valueComboBox; public TableDataContentPane(ChartDataPane parent) { dateComboBox =3D new UIComboBox(); valueComboBox =3D new UIComboBox(); =09=09dateComboBox.setPreferredSize(new Dimension(100, 20)); =09=09valueComboBox.setPreferredSize(new Dimension(100, 20)); Component[][] components =3D new Component[][]{ new Component[]{new UILabel("=E5=90=8D=E7=A7=B0", SwingConstant= s.RIGHT), dateComboBox}, new Component[]{new UILabel("=E5=80=BC", SwingConstants.RIGHT),= valueComboBox}}; =09double p =3D TableLayout.PREFERRED; =09 double[] columnSize =3D {p, p}; =09 double[] rowSize =3D {p, p, p}; JPanel panel =3D TableLayoutHelper.createTableLayoutPane(components= , rowSize, columnSize); setLayout(new BorderLayout()); add(panel, BorderLayout.CENTER); } @Override public void populateBean(ChartCollection collection) { =20 =09=09DefaultTableDataDefinition configuration =3D (DefaultTableDataDefinit= ion) =09=09collection.getSelectedChart().getFilterDefinition(); if (configuration =3D=3D null) return; combineCustomEditValue(dateComboBox, configuration.getDate()); combineCustomEditValue(valueComboBox, configuration.getValue()); } @Override public void updateBean(ChartCollection ob) { =09DefaultTableDataDefinition myConfiguration =3D new DefaultTableDataD= efinition(); Object wname =3D dateComboBox.getSelectedItem(); Object wvalue =3D valueComboBox.getSelectedItem(); if (wname !=3D null) { =09myConfiguration.setDate(wname.toString()); } if (wvalue !=3D null) { =09myConfiguration.setValue(wvalue.toString()); } ob.getSelectedChart().setFilterDefinition(myConfiguration); } @Override public void clearAllBoxList() { =09=09dateComboBox.removeAll(); valueComboBox.removeAll(); } @Override protected void refreshBoxListWithSelectTableData(List columnNameList) { =20 =09=09refreshBoxItems(dateComboBox, columnNameList); =09=09refreshBoxItems(valueComboBox, columnNameList) } }=20
=E7=AC=AC=E4=BA=8C=E6=AD=A5=EF=BC=8C=E7=BB=A7=E6=89=BFTableDataDefinitio= n=EF=BC=8C=E5=AE=9A=E4=B9=89=E6=95=B0=E6=8D=AE=E9=9B=86=E7=9A=84=E5=AE=9A= =E4=B9=89=E5=92=8C=E6=9F=A5=E8=AF=A2=E7=B1=BB=EF=BC=8C=E8=BF=99=E4=B8=AA=E7= =B1=BB=E7=9A=84=E5=8A=9F=E8=83=BD=E4=B8=BB=E8=A6=81=E6=98=AF=E6=8A=8A=E7=94= =A8=E6=88=B7=E5=AE=9A=E4=B9=89=E7=9A=84=E5=93=AA=E4=B8=AA=E8=A1=A8=E5=93=AA= =E4=B8=AA=E5=88=97=E8=BF=99=E6=A0=B7=E7=9A=84=E4=BF=A1=E6=81=AF=EF=BC=8C=E8= =BD=AC=E6=8D=A2=E6=88=90=E7=9C=9F=E6=AD=A3=E7=9A=84=E6=95=B0=E6=8D=AE=EF=BC= =88=E6=AF=94=E5=A6=82=E8=BF=99=E4=B8=80=E5=88=97=E7=9A=84=E6=89=80=E6=9C=89= =E5=80=BC=EF=BC=89=EF=BC=8C=E7=84=B6=E5=90=8E=E5=B0=86=E8=BF=99=E4=BA=9B=E6= =9F=A5=E8=AF=A2=E7=BB=93=E6=9E=9C=E6=94=BE=E5=9C=A83=E4=B8=AD=E6=8F=90=E5= =88=B0=E7=9A=84=E6=9F=A5=E8=AF=A2=E7=BB=93=E6=9E=9C=E5=AD=98=E5=82=A8=E7=B1= =BB=E3=80=82
public = class DefaultTableDataDefinition extends TableDataDefinition { public static final String XML_TAG =3D "DefaultTableDataDefinition"; private String date; private String value; public String getDate() { return date; } public void setDate(String date) { this.date =3D date; } public String getValue() { return value; } public void setValue(String value) { this.value =3D value; } @Override public ChartData createChartData(DataModel resultSet, DataProcessor dat= aProcessor) { Map<String, String> data =3D new HashMap<>(); try { int wordNameCol =3D DataCoreUtils.getColumnIndexByName(resultSe= t, getDate()); int wordValueCol =3D DataCoreUtils.getColumnIndexByName(resultS= et, getValue()); Map<Object, List<Object>> map =3D new HashMap<&g= t;(); for (int rowIndex =3D 0; rowIndex < resultSet.getRowCount();= rowIndex++) { Object wordName =3D resultSet.getValueAt(rowIndex, wordName= Col); Object wordValue =3D resultSet.getValueAt(rowIndex, wordVal= ueCol); if (wordName !=3D null && wordValue !=3D null) { if (!map.containsKey(wordName)) { =09map.put(wordName, new ArrayList<>()); } =20 =09=09=09=09=09map.get(wordName).add(wordValue); } } for (Map.Entry<Object, List<Object>> entry : map.en= trySet()){ =09data.put(entry.getKey().toString(), =09entry.getValue().get(0).toString()); } } catch (Exception e) { =20 =09=09=09FRLogger.getLogger().error(e.getMessage(), e); } return new TableDataContent(data); } public void writeXML(XMLPrintWriter writer) { =09=09writer.startTAG(XML_TAG) =09.attr("date", getDate()) =20 =09=09=09.attr("value", getValue()); super.writeXML(writer); writer.end(); } public void readXML(XMLableReader reader) { =20 =09=09super.readXML(reader); if (reader.isAttr()) { String tmpVal; if ((tmpVal =3D reader.getAttrAsString("date", null)) !=3D null= ){ =09this.setDate(tmpVal); } if ((tmpVal =3D reader.getAttrAsString("value", null)) !=3D nul= l){ =20 =09=09=09=09this.setValue(tmpVal); } } } public boolean equals(Object ob) { return ob instanceof DefaultTableDataDefinition && ComparatorUtils.equals(((DefaultTableDataDefinition) ob).getDate= (), this.getDate()) && ComparatorUtils.equals(((DefaultTableDataDefinition) ob).getValu= e(), this.getValue()) && super.equals(ob); } public Object clone() throws CloneNotSupportedException { =20 =09=09DefaultTableDataDefinition cloned =3D (DefaultTableDataDefinition) su= per.clone(); cloned.setDate(getDate()); cloned.setValue(getValue()); return cloned; } }=20
=E7=AC=AC=E4=B8=89=E6=AD=A5=EF=BC=8C=E7=BB=A7=E6=89=BFNormalChartData=EF= =BC=8C=E5=AE=9A=E4=B9=89=E5=AD=98=E5=82=A82=E4=B8=AD=E6=8F=90=E5=88=B0=E7= =9A=84=E6=9F=A5=E8=AF=A2=E7=BB=93=E6=9E=9C=E7=9A=84=E5=AD=98=E5=82=A8=E7=B1= =BB=E3=80=82
public = class TableDataContent extends NormalChartData { private final Map<String, String> data; =09TableDataContent(Map<String, String> data) { =09=09this.data =3D data; } public Map<String, String> getData() { return data; } }=20
=E7=AC=AC=E5=9B=9B=E6=AD=A5=EF=BC=8C=E5=B0=86=E8=87=AA=E5=AE=9A=E4=B9=89= =E7=9A=84=E6=95=B0=E6=8D=AE=E9=9B=86=E9=9D=A2=E6=9D=BF=EF=BC=8C=E8=A6=86=E7= =9B=96=E5=8E=9F=E5=85=88=E9=BB=98=E8=AE=A4=E7=9A=84=E3=80=82=E6=96=B9=E6=B3= =95=E6=98=AF=E4=B9=8B=E5=89=8D=E6=9C=89=E4=B8=80=E4=B8=AA=E7=BB=A7=E6=89=BF= =E4=BA=86AbstractIndependentChartsUI=E7=9A=84=E7=B1=BB=EF=BC=8C=E5=9C=A8=E9= =87=8C=E8=BE=B9Override=E8=BF=99=E4=B8=AA=E6=96=B9=E6=B3=95=E5=8D=B3=E5=8F= =AF=E3=80=82
@Overri= de public AbstractTableDataContentPane getTableDataSourcePane(Plot plot, Chart= DataPane parent) { =09//=E8=BF=99=E9=87=8C=E6=94=B9=E6=88=90=E4=BD=A0=E7=9A=84=E7=B1=BB=E5=90= =8D=E5=8D=B3=E5=8F=AF =09return new YourDataContentPane(parent); }=20
4=EF=BC=89=E5=BC=80=E5=8F=91JS
echarts.bridge.js=E6=96=87=E4=BB=B6=E4=B8=AD=E5=AE=9A=E4=B9=89=E9=A2=84= =E8=A7=88=E6=97=B6=E8=B0=83=E7=94=A8=E7=9A=84=E5=87=BD=E6=95=B0EChartsFacto= ry=EF=BC=8C=E4=B8=BB=E8=A6=81=E5=88=86=E4=B8=BA=E4=BB=A5=E4=B8=8B=E5=87=A0= =E9=83=A8=E5=88=86=EF=BC=9A
=E9=83=A8=E5=88=86=E4=B8=80=EF=BC=8Cfunction=EF=BC=9A=E5=AE=9A=E4=B9=89= =E4=B8=80=E4=BA=9B=E5=8F=82=E6=95=B0=E5=8F=96=E5=80=BC=EF=BC=8C=E4=B8=8D=E9= =9C=80=E8=A6=81=E5=8F=98=E3=80=82
EChartsFa= ctory =3D function(options, $dom) { this.options =3D options; this.$dom =3D $dom; this.chartID =3D options.chartID; this.autoRefreshTime =3D options.autoRefreshTime || 0; this.width =3D options.width || $dom.width();// =E8=A1=A5=E5=85=85=E4= =BB=8Edom=E8=8E=B7=E5=8F=96. this.height =3D options.height || $dom.height(); this.sheetIndex =3D options.sheetIndex || 0; this.ecName =3D options.ecName || ''; =20 =09FR.Chart.WebUtils._installChart(this, this.chartID); };=20
=E9=83=A8=E5=88=86=E4=BA=8C=EF=BC=8Cprototype=EF=BC=9A=E9=A1=B5=E9=9D=A2= =E5=B1=95=E7=A4=BA=EF=BC=88=E5=A6=82=E6=9E=9C=E5=BC=80=E5=8F=91=E8=80=85=E4= =B9=9F=E6=98=AF=E7=94=A8=E7=9A=84Echarts=E7=9A=84=E8=AF=9D=EF=BC=8C=E5=8F= =AA=E8=A6=81=E8=87=AA=E5=AE=9A=E4=B9=89prototype=E5=8D=B3=E5=8F=AF=EF=BC=89=
EChartsFa= ctory.prototype =3D { constructor : EChartsFactory, inits : function() { //=E5=90=8E=E5=8F=B0=E4=BC=A0=E8=BF=87=E6=9D=A5=E7=9A=84=E6=95=B0= =E6=8D=AE=E6=88=96=E8=80=85=E6=A0=B7=E5=BC=8F=E9=83=BD=E5=9C=A8 this.option= s.chartAttr=E4=B8=AD var ct =3D this.options.chartAttr; //=E6=96=B0=E5=BB=BA=E4=B8=80=E4=B8=AAEcharts=E5=9B=BE=E8=A1=A8myCh= art =09=09var myChart =3D echarts.init(this.$dom[0]); //=E8=8E=B7=E5=8F=96=E5=90=8E=E5=8F=B0=E4=BC=A0=E8=BF=87=E6=9D=A5= =E7=9A=84data=EF=BC=8C=E5=B9=B6=E8=A7=A3=E6=9E=90 var data =3D ct.data; var max =3D 0; for (var i =3D 0; i < data.length; i +=3D 1) { if (parseInt(max) < parseInt(data[i][1])) { max =3D data[i][1]; } } var year =3D echarts.number.parseDate(data[0][0]).getFullYear(); max =3D max / 20; //=E8=8E=B7=E5=8F=96=E5=90=8E=E5=8F=B0=E4=BC=A0=E8=BF=87=E6=9D=A5= =E7=9A=84title var title =3D ct.title; //=E8=AE=BE=E7=BD=AE=E5=9B=BE=E8=A1=A8=E7=9A=84=E5=8F=82=E6=95=B0ti= tle=E3=80=81tooltip=E3=80=81legend=E7=AD=89 option =3D { } =20 =09=09this.newCharts.setOption(ct); }, resize : function() { =09=09this.newCharts.resize(); }, refresh:function() { }, refreshData:function(options){ }, //=E6=95=B0=E6=8D=AE=E7=9B=91=E6=8E=A7=E7=9A=84=E5=88=B7=E6=96=B0=E6=96= =B9=E5=BC=8F setData:function(options, aimation){ } };=20
=E4=B8=BA=E4=BA=86=E5=87=8F=E5=B0=91=E4=BB=A3=E7=A0=81=E4=B8=AD=E7=9A=84= =E4=B8=AD=E6=96=87=E5=92=8C=E7=A1=AC=E7=BC=96=E7=A0=81=EF=BC=8C=E6=88=91=E4= =BB=AC=E5=8F=AF=E4=BB=A5=E5=AF=B9=E5=85=B6=E8=BF=9B=E8=A1=8C=E5=9B=BD=E9=99= =85=E5=8C=96=E3=80=82
import = com.fr.stable.fun.impl.AbstractLocaleFinder; public class youclassname extends AbstractLocaleFinder { @Override public int currentAPILevel() { return CURRENT_LEVEL; } @Override public String find() { return "com/fr/plugin-XXX/locale/XXX"; } }=20
=E5=9C=A8com/fr/plugin-XXX/locale/=E7=9B=AE=E5=BD=95=E4=B8=8B=EF=BC=8C= =E6=B7=BB=E5=8A=A0XXX.properties=E6=96=87=E4=BB=B6=E3=80=82
Plugin-XXX=3DXX=E5=9B=BE
Plugin-XXX_title=3D=E6=A0=87=E9=A2=98
=E2=80=A6.
=E5=9C=A8plugin.xml=E4=B8=AD=E6=B7=BB=E5=8A=A0youclassname=EF=BC=8C=E5= =A6=82=E4=B8=8B
<extr= a-core> <LocaleFinder class=3D"com.fr.plugin.xxx.youclassname"/> </extra-core>=20
1=EF=BC=89JAVA=E4=B8=AD=E7=94=A8Inter.getLocText("Plugin-XXX")=E6=9B=BF= =E6=8D=A2XX=E5=9B=BE
2=EF=BC=89JS=E4=B8=AD=E7=94=A8FR.i18nText("Plugin-XXX ")=E6=9B=BF=E6=8D= =A2XX=E5=9B=BE