Browse Source

Update JSFunctionForAAChartEventsComposer.kt

An An 2 years ago
parent
commit
182085c96e

+ 708 - 1
sample/src/main/java/com/github/aachartmodel/aainfographics/demo/chartcomposer/JSFunctionForAAChartEventsComposer.kt

@@ -3,9 +3,10 @@ package com.github.aachartmodel.aainfographics.demo.chartcomposer
 import com.github.aachartmodel.aainfographics.aachartcreator.*
 import com.github.aachartmodel.aainfographics.aaoptionsmodel.*
 import com.github.aachartmodel.aainfographics.aatools.AAColor
+import com.github.aachartmodel.aainfographics.aatools.AADate.AADateUTC
 import java.util.*
 
-class JSFunctionForAAChartEventsComposer {
+object JSFunctionForAAChartEventsComposer {
     //https://github.com/AAChartModel/AAChartKit-Swift/issues/345
     fun setCrosshairAndTooltipToTheDefaultPositionAfterLoadingChart(): AAOptions {
         val aaChartModel: AAChartModel = AAChartModel()
@@ -79,6 +80,712 @@ class JSFunctionForAAChartEventsComposer {
         return aaOptions
     }
 
+    fun generalDrawingChart(): AAOptions? {
+        return AAOptions()
+            .chart(
+                AAChart()
+                    .backgroundColor(AAColor.White)
+                    .events(
+                        AAChartEvents()
+                            .load(
+                                """function () {
+                var ren = this.renderer,
+                    colors = Highcharts.getOptions().colors,
+                    rightArrow = ['M', 0, 0, 'L', 100, 0, 'L', 95, 5, 'M', 100, 0, 'L', 95, -5],
+                    leftArrow = ['M', 100, 0, 'L', 0, 0, 'L', 5, 5, 'M', 0, 0, 'L', 5, -5];
+
+
+                ren.path(['M', 120, 40, 'L', 120, 330])
+                    .attr({
+                        'stroke-width': 2,
+                        stroke: 'silver',
+                        dashstyle: 'dash'
+                    })
+                    .add();
+
+                ren.path(['M', 420, 40, 'L', 420, 330])
+                    .attr({
+                        'stroke-width': 2,
+                        stroke: 'silver',
+                        dashstyle: 'dash'
+                    })
+                    .add();
+
+                ren.label('Web client', 20, 40)
+                    .css({
+                        fontWeight: 'bold'
+                    })
+                    .add();
+                ren.label('Web service / CLI', 220, 40)
+                    .css({
+                        fontWeight: 'bold'
+                    })
+                    .add();
+                ren.label('Command line client', 440, 40)
+                    .css({
+                        fontWeight: 'bold'
+                    })
+                    .add();
+
+                ren.label('SaaS client<br/>(browser or<br/>script)', 10, 82)
+                    .attr({
+                        fill: colors[0],
+                        stroke: 'white',
+                        'stroke-width': 2,
+                        padding: 5,
+                        r: 5
+                    })
+                    .css({
+                        color: 'white'
+                    })
+                    .add()
+                    .shadow(true);
+
+                ren.path(rightArrow)
+                    .attr({
+                        'stroke-width': 2,
+                        stroke: colors[3]
+                    })
+                    .translate(95, 95)
+                    .add();
+
+                ren.label('POST options in JSON', 90, 75)
+                    .css({
+                        fontSize: '10px',
+                        color: colors[3]
+                    })
+                    .add();
+
+                ren.label('PhantomJS', 210, 82)
+                    .attr({
+                        r: 5,
+                        width: 100,
+                        fill: colors[1]
+                    })
+                    .css({
+                        color: 'white',
+                        fontWeight: 'bold'
+                    })
+                    .add();
+
+                ren.path(['M', 250, 110, 'L', 250, 185, 'L', 245, 180, 'M', 250, 185, 'L', 255, 180])
+                    .attr({
+                        'stroke-width': 2,
+                        stroke: colors[3]
+                    })
+                    .add();
+
+                ren.label('SVG', 255, 120)
+                    .css({
+                        color: colors[3],
+                        fontSize: '10px'
+                    })
+                    .add();
+
+                ren.label('Batik', 210, 200)
+                    .attr({
+                        r: 5,
+                        width: 100,
+                        fill: colors[1]
+                    })
+                    .css({
+                        color: 'white',
+                        fontWeight: 'bold'
+                    })
+                    .add();
+
+                ren
+                    .path([
+                        'M', 235, 185,
+                        'L', 235, 155,
+                        'C', 235, 130, 235, 130, 215, 130,
+                        'L', 95, 130,
+                        'L', 100, 125,
+                        'M', 95, 130,
+                        'L', 100, 135
+                    ])
+                    .attr({
+                        'stroke-width': 2,
+                        stroke: colors[3]
+                    })
+                    .add();
+
+                ren.label('Rasterized image', 100, 110)
+                    .css({
+                        color: colors[3],
+                        fontSize: '10px'
+                    })
+                    .add();
+
+                ren.label('Browser<br/>running<br/>Highcharts', 10, 180)
+                    .attr({
+                        fill: colors[0],
+                        stroke: 'white',
+                        'stroke-width': 2,
+                        padding: 5,
+                        r: 5
+                    })
+                    .css({
+                        color: 'white',
+                        width: '100px'
+                    })
+                    .add()
+                    .shadow(true);
+
+
+                ren.path(rightArrow)
+                    .attr({
+                        'stroke-width': 2,
+                        stroke: colors[1]
+                    })
+                    .translate(95, 205)
+                    .add();
+
+                ren.label('POST SVG', 110, 185)
+                    .css({
+                        color: colors[1],
+                        fontSize: '10px'
+                    })
+                    .add();
+
+                ren.path(leftArrow)
+                    .attr({
+                        'stroke-width': 2,
+                        stroke: colors[1]
+                    })
+                    .translate(95, 215)
+                    .add();
+
+                ren.label('Rasterized image', 100, 215)
+                    .css({
+                        color: colors[1],
+                        fontSize: '10px'
+                    })
+                    .add();
+
+                ren.label('Script', 450, 82)
+                    .attr({
+                        fill: colors[2],
+                        stroke: 'white',
+                        'stroke-width': 2,
+                        padding: 5,
+                        r: 5
+                    })
+                    .css({
+                        color: 'white',
+                        width: '100px'
+                    })
+                    .add()
+                    .shadow(true);
+
+                ren.path(leftArrow)
+                    .attr({
+                        'stroke-width': 2,
+                        stroke: colors[2]
+                    })
+                    .translate(330, 90)
+                    .add();
+
+                ren.label('Command', 340, 70)
+                    .css({
+                        color: colors[2],
+                        fontSize: '10px'
+                    })
+                    .add();
+
+                ren.path(rightArrow)
+                    .attr({
+                        'stroke-width': 2,
+                        stroke: colors[2]
+                    })
+                    .translate(330, 100)
+                    .add();
+
+                ren.label('Rasterized image', 330, 100)
+                    .css({
+                        color: colors[2],
+                        fontSize: '10px'
+                    })
+                    .add();
+            }"""
+                            )
+                    )
+            )
+            .title(
+                AATitle()
+                    .text("Highcharts export server overview")
+                    .style(AAStyle.style(AAColor.Black))
+            )
+    }
+
+    fun advancedTimeLineChart(): AAOptions? {
+        return AAOptions()
+            .chart(
+                AAChart()
+                    .backgroundColor(AAColor.Red)
+                    .events(
+                        AAChartEvents()
+                            .load(
+                                """function () {
+                        var centerX = 140;
+                        var centerY = 110;
+                        var path = [];
+                        var angle;
+                        var radius;
+                        var badgeColor = Highcharts.color(Highcharts.getOptions().colors[0]).brighten(-0.2).get();
+                        var spike;
+                        var empImage;
+                        var big5;
+                        var label;
+                        var left;
+                        var right;
+                        var years;
+                        var renderer;
+
+                        if (this.chartWidth < 530) {
+                            return;
+                        }
+
+                        for (angle = 0; angle < 2 * Math.PI; angle += Math.PI / 24) {
+                            radius = spike ? 80 : 70;
+                            path.push(
+                                'L',
+                                centerX + radius * Math.cos(angle),
+                                centerY + radius * Math.sin(angle)
+                            );
+                            spike = !spike;
+                        }
+                        path[0] = 'M';
+                        path.push('z');
+                        this.renderer.path(path)
+                            .attr({
+                                fill: badgeColor,
+                                zIndex: 6
+                            })
+                            .add();
+
+                        empImage = this.renderer.path(path)
+                            .attr({
+                                zIndex: 7,
+                                opacity: 0,
+                                stroke: badgeColor,
+                                'stroke-width': 1
+                            })
+                            .add();
+
+                        big5 = this.renderer.text('5')
+                            .attr({
+                                zIndex: 6
+                            })
+                            .css({
+                                color: 'white',
+                                fontSize: '100px',
+                                fontStyle: 'italic',
+                                fontFamily: '\'Brush Script MT\', sans-serif'
+                            })
+                            .add();
+                        big5.attr({
+                            x: centerX - big5.getBBox().width / 2,
+                            y: centerY + 14
+                        });
+
+                        label = this.renderer.text('Highcharts Anniversary')
+                            .attr({
+                                zIndex: 6
+                            })
+                            .css({
+                                color: '#FFFFFF'
+                            })
+                            .add();
+
+                        left = centerX - label.getBBox().width / 2;
+                        right = centerX + label.getBBox().width / 2;
+
+                        label.attr({
+                            x: left,
+                            y: centerY + 44
+                        });
+
+                        left = centerX - 90;
+                        right = centerX + 90;
+                        this.renderer
+                            .path([
+                                'M', left, centerY + 30,
+                                'L', right, centerY + 30,
+                                right, centerY + 50,
+                                left, centerY + 50,
+                                'z',
+                                'M', left, centerY + 40,
+                                'L', left - 20, centerY + 40,
+                                left - 10, centerY + 50,
+                                left - 20, centerY + 60,
+                                left + 10, centerY + 60,
+                                left, centerY + 50,
+                                left + 10, centerY + 60,
+                                left + 10, centerY + 50,
+                                left, centerY + 50,
+                                'z',
+                                'M', right, centerY + 40,
+                                'L', right + 20, centerY + 40,
+                                right + 10, centerY + 50,
+                                right + 20, centerY + 60,
+                                right - 10, centerY + 60,
+                                right, centerY + 50,
+                                right - 10, centerY + 60,
+                                right - 10, centerY + 50,
+                                right, centerY + 50,
+                                'z'
+                            ])
+                            .attr({
+                                fill: badgeColor,
+                                stroke: '#FFFFFF',
+                                'stroke-width': 1,
+                                zIndex: 5
+                            })
+                            .add();
+
+                        years = this.renderer.text('2009-2014')
+                            .attr({
+                                zIndex: 6
+                            })
+                            .css({
+                                color: '#FFFFFF',
+                                fontStyle: 'italic',
+                                fontSize: '10px'
+                            })
+                            .add();
+                        years.attr({
+                            x: centerX - years.getBBox().width / 2,
+                            y: centerY + 62
+                        });
+
+                        renderer = this.renderer;
+                        if (renderer.defs) {
+                            this.get('employees').points.forEach(point => {
+                                let pattern;
+                                if (point.image) {
+                                    pattern = renderer.createElement('pattern').attr({
+                                        id: 'pattern-' + point.image,
+                                        patternUnits: 'userSpaceOnUse',
+                                        width: 400,
+                                        height: 400
+                                    }).add(renderer.defs);
+                                    renderer.image(
+                                        'https://www.highcharts.com/images/employees2014/' + point.image + '.jpg',
+                                        centerX - 80,
+                                        centerY - 80,
+                                        160,
+                                        213
+                                    ).add(pattern);
+
+                                    Highcharts.addEvent(point, 'mouseOver', function () {
+                                        empImage
+                                            .attr({
+                                                fill: 'url(#pattern-' + point.image + ')'
+                                            })
+                                            .animate({ opacity: 1 }, { duration: 500 });
+                                    });
+                                    Highcharts.addEvent(point, 'mouseOut', function () {
+                                        empImage.animate({ opacity: 0 }, { duration: 500 });
+                                    });
+                                }
+                            });
+                        }
+                    }"""
+                            )
+                    )
+            ) //
+            .xAxis(
+                AAXAxis()
+                    .type(AAChartAxisType.Datetime)
+                    .minTickInterval(315360000)
+                    .labels(
+                        AALabels()
+                            .align(AAChartAlignType.Left)
+                    )
+                    .plotBands(
+                        arrayOf(
+                            AAPlotBandsElement()
+                                .from(1259280000)
+                                .to(1291161600)
+                                .color("#EFFFFF")
+                                .label(
+                                    AALabel()
+                                        .text("办事处:Torstein的地下室")
+                                        .style(
+                                            AAStyle()
+                                                .color("#999999")
+                                        )
+                                        .y(180)
+                                ),
+                            AAPlotBandsElement()
+                                .from(1291161600)
+                                .to(1380585600)
+                                .color("#FFFFEF")
+                                .label(
+                                    AALabel()
+                                        .text("办事处:Tomtebu")
+                                        .style(
+                                            AAStyle()
+                                                .color("#999999")
+                                        )
+                                        .y(30)
+                                ),
+                            AAPlotBandsElement()
+                                .from(1380585600)
+                                .to(1417046400)
+                                .color("#FFEFFF")
+                                .label(
+                                    AALabel()
+                                        .text("办事处:VikØrsta")
+                                        .style(
+                                            AAStyle()
+                                                .color("#999999")
+                                        )
+                                        .y(30)
+                                )
+                        )
+                    )
+            )
+            .title(
+                AATitle()
+                    .text("Highsoft 公司发展历程")
+            )
+            .tooltip(
+                AATooltip()
+                    .style(
+                        AAStyle()
+                            .width(250)
+                    )
+            )
+            .yAxisArray(
+                arrayOf(
+                    AAYAxis()
+                        .max(100)
+                        .labels(
+                            AALabels()
+                                .enabled(false)
+                        )
+                        .title(
+                            AATitle()
+                                .text("")
+                        )
+                        .gridLineColor("rgba(0, 0, 0, 0.07)"),
+                    AAYAxis()
+                        .allowDecimals(false)
+                        .max(15)
+                        .labels(
+                            AALabels()
+                                .style(
+                                    AAStyle()
+                                        .color("#90ed7d")
+                                )
+                        )
+                        .title(
+                            AATitle()
+                                .text("雇员")
+                                .style(
+                                    AAStyle()
+                                        .color("#90ed7d")
+                                )
+                        )
+                        .opposite(true)
+                        .gridLineWidth(0)
+                )
+            )
+            .plotOptions(
+                AAPlotOptions()
+                    .series(
+                        AASeries()
+                            .marker(
+                                AAMarker()
+                                    .enabled(false)
+                                    .symbol(AAChartSymbolType.Circle.value)
+                                    .radius(2)
+                            ) //                .fillOpacity(0.5)
+                    ) //            .flags(AAFlags.new
+                //                .tooltip(new AATooltip()
+                //                    .xDateFormat("%B %e, %Y")))
+            )
+            .series(
+                arrayOf(
+                    AASeriesElement()
+                        .type(AAChartType.Line) //                .id("google-trends")
+                        .dashStyle(AAChartLineDashStyleType.LongDashDotDot)
+                        .name("Google search for highcharts")
+                        .data(
+                            arrayOf(
+                                AADataElement().x(1258322400) /* November 2009 */.y(0),
+                                AADataElement().x(1260961200).y(5),
+                                AADataElement().x(1263639600).y(7),
+                                AADataElement().x(1266188400).y(5),
+                                AADataElement().x(1268740800).y(6),
+                                AADataElement().x(1271368800).y(8),
+                                AADataElement().x(1274004000).y(11),
+                                AADataElement().x(1276639200).y(9),
+                                AADataElement().x(1279274400).y(12),
+                                AADataElement().x(1281952800).y(13),
+                                AADataElement().x(1284588000).y(17),
+                                AADataElement().x(1287223200).y(17),
+                                AADataElement().x(1289858400).y(18),
+                                AADataElement().x(1292497200).y(20),
+                                AADataElement().x(1295175600).y(20),
+                                AADataElement().x(1297724400).y(27),
+                                AADataElement().x(1300276800).y(32),
+                                AADataElement().x(1302904800).y(29),
+                                AADataElement().x(1305540000).y(34),
+                                AADataElement().x(1308175200).y(34),
+                                AADataElement().x(1310810400).y(36),
+                                AADataElement().x(1313488800).y(43),
+                                AADataElement().x(1316124000).y(44),
+                                AADataElement().x(1318759200).y(42),
+                                AADataElement().x(1321394400).y(47),
+                                AADataElement().x(1324033200).y(46),
+                                AADataElement().x(1326711600).y(50),
+                                AADataElement().x(1329303600).y(57),
+                                AADataElement().x(1331899200).y(54),
+                                AADataElement().x(1334527200).y(59),
+                                AADataElement().x(1337162400).y(62),
+                                AADataElement().x(1339797600).y(66),
+                                AADataElement().x(1342432800).y(61),
+                                AADataElement().x(1345111200).y(68),
+                                AADataElement().x(1347746400).y(67),
+                                AADataElement().x(1350381600).y(73),
+                                AADataElement().x(1353016800).y(63),
+                                AADataElement().x(1355655600).y(54),
+                                AADataElement().x(1358334000).y(67),
+                                AADataElement().x(1360882800).y(74),
+                                AADataElement().x(1363435200).y(81),
+                                AADataElement().x(1366063200).y(89),
+                                AADataElement().x(1368698400).y(83),
+                                AADataElement().x(1371333600).y(88),
+                                AADataElement().x(1373968800).y(86),
+                                AADataElement().x(1376647200).y(81),
+                                AADataElement().x(1379282400).y(83),
+                                AADataElement().x(1381917600).y(95),
+                                AADataElement().x(1384552800).y(86),
+                                AADataElement().x(1387191600).y(83),
+                                AADataElement().x(1389870000).y(89),
+                                AADataElement().x(1392418800).y(90),
+                                AADataElement().x(1394971200).y(94),
+                                AADataElement().x(1397599200).y(0),
+                                AADataElement().x(1400234400).y(0),
+                                AADataElement().x(1402869600).y(99),
+                                AADataElement().x(1405504800).y(99),
+                                AADataElement().x(1408183200).y(93),
+                                AADataElement().x(1410818400).y(97),
+                                AADataElement().x(1413453600).y(9)
+                            )
+                        ) //                .tooltip(new AATooltip()
+                    //                    .xDateFormat("%B %Y")
+                    //                    .valueSuffix(" % of best month"))
+                    ,
+                    AASeriesElement()
+                        .name("收入") //                .id("revenue")
+                        .type(AAChartType.Area)
+                        .data(
+                            arrayOf(
+                                AADataElement().x(1257033600).y(2),
+                                AADataElement().x(1259625600).y(3),
+                                AADataElement().x(1262304000).y(2),
+                                AADataElement().x(1264982400).y(3),
+                                AADataElement().x(1267401600).y(4),
+                                AADataElement().x(1270080000).y(4),
+                                AADataElement().x(1272672000).y(4),
+                                AADataElement().x(1275350400).y(4),
+                                AADataElement().x(1277942400).y(5),
+                                AADataElement().x(1280620800).y(7),
+                                AADataElement().x(1283299200).y(6),
+                                AADataElement().x(1285891200).y(9),
+                                AADataElement().x(1288569600).y(10),
+                                AADataElement().x(1291161600).y(8),
+                                AADataElement().x(1293840000).y(10),
+                                AADataElement().x(1296518400).y(13),
+                                AADataElement().x(1298937600).y(15),
+                                AADataElement().x(1301616000).y(14),
+                                AADataElement().x(1304208000).y(15),
+                                AADataElement().x(1306886400).y(16),
+                                AADataElement().x(1309478400).y(22),
+                                AADataElement().x(1312156800).y(19),
+                                AADataElement().x(1314835200).y(20),
+                                AADataElement().x(1317427200).y(32),
+                                AADataElement().x(1320105600).y(34),
+                                AADataElement().x(1322697600).y(36),
+                                AADataElement().x(1325376000).y(34),
+                                AADataElement().x(1328054400).y(40),
+                                AADataElement().x(1330560000).y(37),
+                                AADataElement().x(1333238400).y(35),
+                                AADataElement().x(1335830400).y(40),
+                                AADataElement().x(1338508800).y(38),
+                                AADataElement().x(1341100800).y(39),
+                                AADataElement().x(1343779200).y(43),
+                                AADataElement().x(1346457600).y(49),
+                                AADataElement().x(1349049600).y(43),
+                                AADataElement().x(1351728000).y(54),
+                                AADataElement().x(1354320000).y(44),
+                                AADataElement().x(1356998400).y(43),
+                                AADataElement().x(1359676800).y(43),
+                                AADataElement().x(1362096000).y(52),
+                                AADataElement().x(1364774400).y(52),
+                                AADataElement().x(1367366400).y(56),
+                                AADataElement().x(1370044800).y(62),
+                                AADataElement().x(1372636800).y(66),
+                                AADataElement().x(1375315200).y(62),
+                                AADataElement().x(1377993600).y(63),
+                                AADataElement().x(1380585600).y(60),
+                                AADataElement().x(1383264000).y(60),
+                                AADataElement().x(1385856000).y(58),
+                                AADataElement().x(1388534400).y(65),
+                                AADataElement().x(1391212800).y(52),
+                                AADataElement().x(1393632000).y(72),
+                                AADataElement().x(1396310400).y(57),
+                                AADataElement().x(1398902400).y(70),
+                                AADataElement().x(1401580800).y(63),
+                                AADataElement().x(1404172800).y(65),
+                                AADataElement().x(1406851200).y(65),
+                                AADataElement().x(1409529600).y(89),
+                                AADataElement().x(1412121600).y(0)
+                            )
+                        ) //                .tooltip(new AATooltip()
+                    //                    .xDateFormat("%B %Y")
+                    //                    .valueSuffix(" % of best month")
+                    //            )
+                    ,
+                    AASeriesElement()
+                        .yAxis(1)
+                        .name("Highsoft 员工") //                .id("employees")
+                        .type(AAChartType.Area)
+                        .step("left")
+                        .tooltip(
+                            AATooltip()
+                                .headerFormat("{point.x:%B %e, %Y}")
+                                .pointFormat("{point.name}{point.y}")
+                                .valueSuffix(" employees")
+                        )
+                        .data(
+                            arrayOf(
+                                AADataElement().x(AADateUTC(2009, 10, 1)).y(1)
+                                    .name("Torstein 一个人工作"),
+                                AADataElement().x(AADateUTC(2010, 10, 20)).y(2).name("Grethe 加入"),
+                                AADataElement().x(AADateUTC(2011, 3, 1)).y(3).name("Erik 加入"),
+                                AADataElement().x(AADateUTC(2011, 7, 1)).y(4).name("Gert 加入"),
+                                AADataElement().x(AADateUTC(2011, 7, 15)).y(5).name("Hilde 加入"),
+                                AADataElement().x(AADateUTC(2012, 5, 1)).y(6).name("Guro 加入"),
+                                AADataElement().x(AADateUTC(2012, 8, 1)).y(5).name("Erik left"),
+                                AADataElement().x(AADateUTC(2012, 8, 15)).y(6).name("Anne Jorunn"),
+                                AADataElement().x(AADateUTC(2013, 0, 1)).y(7).name("Hilde T"),
+                                AADataElement().x(AADateUTC(2013, 7, 1)).y(8).name("Jon Arild"),
+                                AADataElement().x(AADateUTC(2013, 7, 20)).y(9).name("Øystein 加入"),
+                                AADataElement().x(AADateUTC(2013, 9, 1)).y(1).name("Stephane 加入"),
+                                AADataElement().x(AADateUTC(2014, 9, 1)).y(1).name("Anita 加入"),
+                                AADataElement().x(AADateUTC(2014, 10, 27)).y(1).name("")
+                            )
+                        )
+                )
+            )
+    }
+
+
     //https://github.com/AAChartModel/AAChartKit/issues/1093
     //https://github.com/highcharts/highcharts-ios/issues/97
     fun automaticallyHideTooltipAfterItIsShown(): AAOptions? {