James Moger
2014-05-15 f612b5cbaf719e05ad0fcbdd46553cd9345bc646
Merged #77 "A single quote in a chart label generates invalid JavaScript"
3 files modified
91 ■■■■ changed files
src/main/java/com/gitblit/wicket/charting/Flotr2BarChart.java 39 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/charting/Flotr2LineChart.java 30 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/charting/Flotr2PieChart.java 22 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/charting/Flotr2BarChart.java
@@ -40,27 +40,28 @@
    @Override
    protected void appendChart(StringBuilder sb) {
        String dName = "data_" + dataName;
        sb.append("var labels_" + dataName + " = [");
        if(xAxisIsDate){
            // Generate labels for the dates
            SimpleDateFormat df = new SimpleDateFormat(dateFormat);
            df.setTimeZone(getTimeZone());
            // Sort the values first
            Collections.sort(values, new Comparator<ChartValue>() {
                public int compare(ChartValue o1, ChartValue o2) {
                @Override
                public int compare(ChartValue o1, ChartValue o2) {
                    long long1 = Long.parseLong(o1.name);
                    long long2 = Long.parseLong(o2.name);
                    return (int) (long2 - long1);
                }
            });
            for (int i = 0; i < values.size(); i++) {
                ChartValue value = values.get(i);
                Date date = new Date(Long.parseLong(value.name));
@@ -70,7 +71,7 @@
                }
                sb.append("[\"" + label + "\", " + value.name + "]");
            }
        }
        else {
            for (int i = 0; i < values.size(); i++) {
@@ -82,9 +83,9 @@
            }
        }
        line(sb, "];");
        line(sb, MessageFormat.format("var {0} = Flotr.draw(document.getElementById(''{1}''),", dName, tagId));
        // Add the data
        line(sb, "[");
        line(sb, "{ data : [ ");
@@ -99,22 +100,22 @@
            else {
                line(sb, MessageFormat.format("[{0}, {1}] ",  Integer.toString(i), Float.toString(value.value)));
            }
        }
        line(sb, MessageFormat.format(" ], label : ''{0}'', color: ''#FF9900'' '}'", valueName));
        line(sb, MessageFormat.format(" ], label : \"{0}\", color: ''#FF9900'' '}'", valueName));
        line(sb, "]");
        // Add the options
        line(sb, ", {");
        if(title != null && title.isEmpty() == false){
            line(sb, MessageFormat.format("title : ''{0}'',", title));
            line(sb, MessageFormat.format("title : \"{0}\",", title));
        }
        line(sb, "bars : {");
        line(sb, "  show : true,");
        line(sb, "  horizontal : false,");
        line(sb, "  barWidth : 1");
        line(sb, "},");
        line(sb, "points: { show: false },");
        line(sb, "points: { show: false },");
        line(sb, "mouse: {");
        line(sb, "  track: true,");
        line(sb, "  lineColor: '#002060',");
@@ -132,7 +133,7 @@
        line(sb, "      return labels_" + dataName + "[index];");
        line(sb, "    return \"\";");
        line(sb, "  },");
        line(sb, "  margin: 10");
        line(sb, "  margin: 10");
        line(sb, "},");
        line(sb, "yaxis: {");
        line(sb, "  showLabels: false,");
@@ -152,7 +153,7 @@
        line(sb, "  show: false");
        line(sb, "}");
        line(sb, "});");
    }
    @Override
@@ -161,7 +162,7 @@
        String name = String.valueOf(date.getTime());
        super.addValue(name, value);
    }
}
src/main/java/com/gitblit/wicket/charting/Flotr2LineChart.java
@@ -38,14 +38,14 @@
    @Override
    protected void appendChart(StringBuilder sb) {
        String dName = "data_" + dataName;
        sb.append("var labels_" + dataName + " = [");
        if(xAxisIsDate){
            // Generate labels for the dates
            SimpleDateFormat df = new SimpleDateFormat(dateFormat);
            df.setTimeZone(getTimeZone());
            df.setTimeZone(getTimeZone());
            for (int i = 0; i < values.size(); i++) {
                ChartValue value = values.get(i);
                Date date = new Date(Long.parseLong(value.name));
@@ -55,7 +55,7 @@
                }
                sb.append("\"" + label + "\"");
            }
        }
        else {
            for (int i = 0; i < values.size(); i++) {
@@ -67,9 +67,9 @@
            }
        }
        line(sb, "];");
        line(sb, MessageFormat.format("var {0} = Flotr.draw(document.getElementById(''{1}''),", dName, tagId));
        // Add the data
        line(sb, "[");
        line(sb, "{ data : [ ");
@@ -80,8 +80,8 @@
            }
            line(sb, MessageFormat.format("[{0}, {1}] ",  value.name, Float.toString(value.value)));
        }
        line(sb, MessageFormat.format(" ], label : ''{0}'', lines : '{' show : true '}', color: ''#ff9900'' '}'", valueName));
        line(sb, MessageFormat.format(" ], label : \"{0}\", lines : '{' show : true '}', color: ''#ff9900'' '}'", valueName));
        if(highlights.size() > 0){
            // get the highlights
            line(sb, ", { data : [ ");
@@ -92,14 +92,14 @@
                }
                line(sb, MessageFormat.format("[{0}, {1}] ",  value.name, Float.toString(value.value)));
            }
            line(sb, MessageFormat.format(" ], label : ''{0}'', points : '{' show : true, fill: true, fillColor:''#002060'' '}', color: ''#ff9900'' '}'", valueName));
            line(sb, MessageFormat.format(" ], label : \"{0}\", points : '{' show : true, fill: true, fillColor:''#002060'' '}', color: ''#ff9900'' '}'", valueName));
        }
        line(sb, "]");
        // Add the options
        line(sb, ", {");
        if(title != null && title.isEmpty() == false){
            line(sb, MessageFormat.format("title : ''{0}'',", title));
            line(sb, MessageFormat.format("title : \"{0}\",", title));
        }
        line(sb, "mouse: {");
        line(sb, "  track: true,");
@@ -114,7 +114,7 @@
        line(sb, "  showMinorLabels: false,");
        line(sb, "  autoscale: true,");
        line(sb, "  autoscaleMargin: 0,");
        line(sb, "  margin: 10");
        line(sb, "  margin: 10");
        line(sb, "},");
        line(sb, "yaxis: {");
        line(sb, "  showLabels: false,");
@@ -136,7 +136,7 @@
        line(sb, "  show: false");
        line(sb, "}");
        line(sb, "});");
    }
    @Override
@@ -144,7 +144,7 @@
        xAxisIsDate = true;
        super.addValue(date, value);
    }
}
src/main/java/com/gitblit/wicket/charting/Flotr2PieChart.java
@@ -35,11 +35,11 @@
    @Override
    protected void appendChart(StringBuilder sb) {
        String dName = "data_" + dataName;
        line(sb, "var selected_" + dataName + " = null;");
        line(sb, MessageFormat.format("var {0} = Flotr.draw(document.getElementById(''{1}''),", dName, tagId));
        // Add the data
        line(sb, "[");
        for (int i = 0; i < values.size(); i++) {
@@ -47,13 +47,13 @@
            if(i > 0){
                sb.append(",");
            }
            line(sb, MessageFormat.format("'{'data : [ [0, {0}] ], label : ''{1}'', color: ''{2}'' '}'", Float.toString(value.value), value.name, StringUtils.getColor(value.name)));
            line(sb, MessageFormat.format("'{'data : [ [0, {0}] ], label : \"{1}\", color: ''{2}'' '}'", Float.toString(value.value), value.name, StringUtils.getColor(value.name)));
        }
        line(sb, "]");
        // Add the options
        line(sb, ", {");
        line(sb, MessageFormat.format("title : ''{0}'',", title));
        line(sb, MessageFormat.format("title : \"{0}\",", title));
        line(sb, "fontSize : 2,");
        line(sb, "pie : {");
        line(sb, "  show : true,");
@@ -90,7 +90,7 @@
        line(sb, "  outlineWidth: 0");
        line(sb, "}");
        line(sb, ", legend: {");
        if(showLegend){
        if(showLegend){
            line(sb, "  show: true");
        }
        else {
@@ -98,15 +98,15 @@
        }
        line(sb, "}");
        line(sb, "});");
        if(clickUrl != null && clickUrl.isEmpty() == false){
            line(sb, MessageFormat.format("Flotr.EventAdapter.observe(document.getElementById(''{0}''), ''flotr:click'', function (mouse, a, b, c) '{'", tagId));
            line(sb, "  window.location.href = \"" + clickUrl + "\" + selected_" + dataName + ";");
            line(sb, "});");
            line(sb, "});");
        }
    }
}