/// <summary> /// Render "set data" part of script /// </summary> /// <param name="context"></param> /// <param name="config"></param> /// <returns></returns> private string RenderDataScript(IMvcContext context, IChartConfig config) { var source = config.NativeResult; if (null == source) { config.State.Message = "Отсутствуют данные для отрисовки"; config.State.Level = ErrorLevel.Error; return(null); } if (source is XElement) { var xElement = source as XElement; config.DataType = "XML"; config.Type = xElement.Attr("graphtype"); RemoveComments(xElement); return(source.ToString()); } else if (source is string) { return(source as string); } return(string.Empty); }
/// <summary> /// Проверяет доступность атрибута для данного элемента в конфигурации /// </summary> /// <param name="element"></param> /// <param name="name"></param> /// <param name="config"></param> /// <returns></returns> public static bool IsMatch(string element, string name, IChartConfig config) { var elementType = element.To <FusionChartElementType>(); var chartType = config.Type.To <FusionChartType>(); return(IsMatch(name, chartType, elementType, config)); }
/// <summary> /// /// </summary> /// <param name="element"></param> /// <param name="config"></param> /// <exception cref="NotImplementedException"></exception> public FusionChartWrapper(IChartElement element, IChartConfig config) { _element = element; _config = config??_config; _elementName = determineName(_element); _eltype = _elementName.To<FusionChartElementType>(); _charttype = config.Type.To<FusionChartType>(); }
/// <summary> /// /// </summary> /// <param name="element"></param> /// <param name="config"></param> /// <exception cref="NotImplementedException"></exception> public FusionChartWrapper(IChartElement element, IChartConfig config) { _element = element; _config = config ?? _config; _elementName = determineName(_element); _eltype = _elementName.To <FusionChartElementType>(); _charttype = config.Type.To <FusionChartType>(); }
/// <summary> /// Возвращает адаптер для работы с графиком в API FusionChart /// </summary> /// <param name="chart"></param> /// <param name="config"></param> /// <returns></returns> public static FusionChartWrapper AsFusion(this IChartElement chart, IChartConfig config = null) { config = config ?? new ChartConfig() { Type = FusionChartType.Column2D.ToString() }; return(new FusionChartWrapper(chart, config)); }
/// <summary> /// Проверяет доступность атрибута для данного элемента в конфигурации /// </summary> /// <param name="name"></param> /// <param name="chartType"></param> /// <param name="elementType"></param> /// <param name="config"></param> /// <returns></returns> private static bool IsMatch(string name, FusionChartType chartType, FusionChartElementType elementType = FusionChartElementType.Chart, IChartConfig config = null) { var key = (elementType.ToString() + "_" + name).ToLower(); if (Attributes.ContainsKey(key)) { return 0 != (Attributes[key].Charts & chartType); } //custom attribute return true; }
/// <summary> /// Установка конфига для <see cref="Chart"/> /// </summary> /// <param name="chart">Исходное представление чарта</param> /// <param name="chartConfig">Конфиг чарта</param> /// <returns>Замыкание на чарт</returns> public static IChart SetConfig(this IChart chart, IChartConfig chartConfig) { if (chart is Chart) { (chart as Chart).Config = chartConfig; } return(chart); }
private string GetErrorChartContent(IMvcContext context, IChartConfig config) { if (context.Get("format", context.Get("__format")) == "json") { dynamic result = new UObj(); result.config = config; result.error = config.State.Message; context.ContentType = MimeHelper.JSON; return(result.ToJson()); } var id = "g" + Guid.NewGuid().ToString().Replace("-", ""); var script = @"<div class='chart_Error chart_Error_'" + config.State.Level + "'>"; if (!string.IsNullOrWhiteSpace(config.State.Title)) { script += "<h3>" + config.State.Title + "</h3>"; } else if (null != config.State.Exception) { script += "<p>Произошла ошибка " + config.State.Exception.GetType().Name + "</p>"; } if (!string.IsNullOrWhiteSpace(config.State.Message)) { script += "<p>" + config.State.Message.Replace("\r\n", "<br/>") + "</p>"; } else if (null != config.State.Exception) { script += "<p>" + config.State.Exception.Message.Replace("\r\n", "<br/>") + "</p>"; } if (null != config.State.Exception) { script += "<button onclick='$(\"#" + id + "\").toggle()'>Показать подробности ошибки</button>"; script += "<BR /><textarea rows='30' cols='120' id='" + id + "' style='display:none'>" + config.State.Exception + "</textarea>"; } script += "</div>"; if (!string.IsNullOrWhiteSpace(context.Get("standalone"))) { script = @" <html> <header> </header> <body> <script type=""text/javascript"" src=""../scripts/jquery.min.js""></script> " + script + @" </body> </html>"; } return(script); }
public ChartViewModel( IChartConfig config, IList <Build> builds, TimeSpan longestBuildtime, TimeSpan shortestBuildTime, TimeSpan averageBuildTime, bool showStats) { Config = config; Builds = builds; LongestBuildTime = longestBuildtime; ShortestBuildTime = shortestBuildTime; AverageBuildTime = averageBuildTime; ShowStats = showStats; }
/// <summary> /// Renders given context /// </summary> /// <param name="context"></param> public override void Render(IMvcContext context) { IChartConfig config = PrepareChartConfig(context); var script = string.Empty; if (config.State.IsNormal) { script = GetNormalChartContent(context, config); } else { script = GetErrorChartContent(context, config); } context.Output.Write(script); }
/// <summary> /// /// </summary> /// <param name="error"></param> public static IChartConfig Create(Exception error) { IChartConfig result = null; if (error is ChartException) { result = ((ChartException)error).Config ?? new ChartConfig(); } else { result = new ChartConfig(); } result.State.Level = ErrorLevel.Fatal; result.State.Exception = error; return(result); }
private string GetErrorChartContent(IMvcContext context, IChartConfig config) { if (context.Get("format", context.Get("__format")) == "json") { dynamic result = new UObj(); result.config = config; result.error = config.State.Message; context.ContentType = MimeHelper.JSON; return result.ToJson(); } var id = "g"+Guid.NewGuid().ToString().Replace("-", ""); var script = @"<div class='chart_Error chart_Error_'"+config.State.Level+"'>"; if (!string.IsNullOrWhiteSpace(config.State.Title)){ script += "<h3>" + config.State.Title + "</h3>"; } else if (null != config.State.Exception) { script += "<p>Произошла ошибка " + config.State.Exception.GetType().Name + "</p>"; } if (!string.IsNullOrWhiteSpace(config.State.Message)) { script += "<p>" + config.State.Message.Replace("\r\n", "<br/>") + "</p>"; } else if (null != config.State.Exception) { script += "<p>" + config.State.Exception.Message.Replace("\r\n", "<br/>") + "</p>"; } if (null != config.State.Exception){ script += "<button onclick='$(\"#" + id + "\").toggle()'>Показать подробности ошибки</button>"; script += "<BR /><textarea rows='30' cols='120' id='" + id + "' style='display:none'>" + config.State.Exception + "</textarea>"; } script += "</div>"; if (!string.IsNullOrWhiteSpace(context.Get("standalone"))) { script = @" <html> <header> </header> <body> <script type=""text/javascript"" src=""../scripts/jquery.min.js""></script> " + script + @" </body> </html>"; } return script; }
/// <summary> /// Проверяет доступность атрибута для данного элемента в конфигурации /// </summary> /// <param name="element"></param> /// <param name="name"></param> /// <param name="config"></param> /// <returns></returns> public static bool IsMatch(string element, string name, IChartConfig config) { var elementType = element.To<FusionChartElementType>(); var chartType = config.Type.To<FusionChartType>(); return IsMatch(name, chartType, elementType, config); }
/// <summary> /// Проверяет доступность атрибута для данного элемента в конфигурации /// </summary> /// <param name="name"></param> /// <param name="chartType"></param> /// <param name="elementType"></param> /// <param name="config"></param> /// <returns></returns> private static bool IsMatch(string name, FusionChartType chartType, FusionChartElementType elementType = FusionChartElementType.Chart, IChartConfig config = null) { var key = (elementType.ToString() + "_" + name).ToLower(); if (Attributes.ContainsKey(key)) { return(0 != (Attributes[key].Charts & chartType)); } //custom attribute return(true); }
/// <summary> /// Вычисляет укрупненную группу графика /// </summary> /// <param name="config"></param> /// <returns></returns> public static FusionChartGroupedType GetChartGroup(this IChartConfig config) { return(GetChartGroup(config.Type.To <FusionChartType>())); }
/// <summary> /// Собирается XML-представление чарата по его конфигу /// </summary> /// <param name="chartConfig">Конфиг чарта</param> /// <returns>XML-представление чарата</returns> public XElement GenerateChartXml(IChartConfig chartConfig) { throw new NotSupportedException(); }
/// <summary> /// Установка высоты графика /// </summary> /// <param name="chartConfig">Представление конфига</param> /// <param name="height">Высота</param> /// <returns>Замыкание на конфиг</returns> public static IChartConfig SetHeight(this IChartConfig chartConfig, double height) { chartConfig.Height = height.ToString(CultureInfo.InvariantCulture); return(chartConfig); }
private string GetNormalChartContent(IMvcContext context, IChartConfig config) { var comments = GetComments(context).Aggregate(string.Empty, (_, __) => _ + __); var datascript = RenderDataScript(context, config); if (string.IsNullOrWhiteSpace(datascript)) { return(GetErrorChartContent(context, config)); } var script = ""; var error = string.Empty; if (string.IsNullOrWhiteSpace(datascript)) { error = "Нет данных для отображения"; } if (context.Get("format", context.Get("__format")) == "json") { dynamic result = new UObj(); result.config = config; result.data = datascript; result.error = error; context.ContentType = MimeHelper.JSON; return(result.ToJson().Replace("\\\'", "'")); } var id = config.Id; var container = config.Container; if (string.IsNullOrWhiteSpace(container)) { container = "fc-container-" + id; script += string.Format(@" <div class=""assoiGraphContainer""><div class=""fusinchart-container{0}"" id=""{1}"">{2}</div>{3}</div>", string.IsNullOrEmpty(error) ? " fusionchart-error" : "", container, error, comments); } if (string.IsNullOrWhiteSpace(error)) { script += string.Format(@" <div style=""display:none"" id=""fc-data-{1}"">{5}</div> <script type=""text/javascript""><!-- FusionCharts.setCurrentRenderer('javascript'); var myChart = new FusionCharts('../charts/{0}.swf', 'fc-chart-{1}', '{2}', '{3}', '{4}'); myChart.set{7}Data($('#fc-data-{1}').text()); myChart.render('{6}'); // --> </script>", config.Type, id, config.Width, config.Height, config.Debug, datascript.Replace("<", "<").Replace(""", "&quot;"), container, config.DataType); context.ContentType = "text/html"; } if (!string.IsNullOrWhiteSpace(context.Get("standalone"))) { script = @" <html> <header> <style type=""text/css""> .assoiGraphContainer { position: relative;} .assoiGraphComment { position: absolute; background: #FFFED6; border: 1px #006699 dotted; color: #000; padding: 5px 8px 5px 8px; } </style> <title>График АССОИ</title> </header> <body> <script type=""text/javascript"" src=""../scripts/jquery.min.js""></script> <script type=""text/javascript"" src=""../scripts/FusionCharts.js""></script> <script type=""text/javascript"" src=""../scripts/FusionCharts.HC.js""></script> <script type=""text/javascript"" src=""../scripts/FusionCharts.HC.PowerCharts.js""></script> <script type=""text/javascript"" src=""../scripts/FusionCharts.HC.Widgets.js""></script> " + script + @" </body> </html>"; } return(script); }
/// <summary> /// /// </summary> /// <param name="chart">Исходное представление чарта</param> /// <param name="chartConfig">Исходный конфиг чарта</param> public ChartRenderResult(IChart chart, IChartConfig chartConfig) { Chart = chart; ChartConfig = chartConfig; }
/// <summary> /// /// </summary> /// <param name="message"></param> /// <param name="config"></param> public ChartException(string message, IChartConfig config) : base(message) { this.Config = config; }
private string GetNormalChartContent(IMvcContext context, IChartConfig config) { var comments = GetComments(context).Aggregate(string.Empty, (_, __) => _ + __); var datascript = RenderDataScript(context, config); if (string.IsNullOrWhiteSpace(datascript)) { return GetErrorChartContent(context, config); } var script = ""; var error = string.Empty; if (string.IsNullOrWhiteSpace(datascript)) { error = "Нет данных для отображения"; } if (context.Get("format", context.Get("__format")) == "json") { dynamic result = new UObj(); result.config = config; result.data = datascript; result.error = error; context.ContentType = MimeHelper.JSON; return result.ToJson().Replace("\\\'", "'"); } var id = config.Id; var container = config.Container; if (string.IsNullOrWhiteSpace(container)) { container = "fc-container-" + id; script += string.Format(@" <div class=""assoiGraphContainer""><div class=""fusinchart-container{0}"" id=""{1}"">{2}</div>{3}</div>", string.IsNullOrEmpty(error) ? " fusionchart-error" : "", container, error, comments); } if (string.IsNullOrWhiteSpace(error)) { script += string.Format(@" <div style=""display:none"" id=""fc-data-{1}"">{5}</div> <script type=""text/javascript""><!-- FusionCharts.setCurrentRenderer('javascript'); var myChart = new FusionCharts('../charts/{0}.swf', 'fc-chart-{1}', '{2}', '{3}', '{4}'); myChart.set{7}Data($('#fc-data-{1}').text()); myChart.render('{6}'); // --> </script>", config.Type, id, config.Width, config.Height, config.Debug, datascript.Replace("<", "<").Replace(""","&quot;"), container, config.DataType); context.ContentType = "text/html"; } if (!string.IsNullOrWhiteSpace(context.Get("standalone"))) { script = @" <html> <header> <style type=""text/css""> .assoiGraphContainer { position: relative;} .assoiGraphComment { position: absolute; background: #FFFED6; border: 1px #006699 dotted; color: #000; padding: 5px 8px 5px 8px; } </style> <title>График АССОИ</title> </header> <body> <script type=""text/javascript"" src=""../scripts/jquery.min.js""></script> <script type=""text/javascript"" src=""../scripts/FusionCharts.js""></script> <script type=""text/javascript"" src=""../scripts/FusionCharts.HC.js""></script> <script type=""text/javascript"" src=""../scripts/FusionCharts.HC.PowerCharts.js""></script> <script type=""text/javascript"" src=""../scripts/FusionCharts.HC.Widgets.js""></script> " + script + @" </body> </html>"; } return script; }
/// <summary> /// Render "set data" part of script /// </summary> /// <param name="context"></param> /// <param name="config"></param> /// <returns></returns> private string RenderDataScript(IMvcContext context, IChartConfig config) { var source = config.NativeResult; if (null == source) { config.State.Message = "Отсутствуют данные для отрисовки"; config.State.Level = ErrorLevel.Error; return null; } if (source is XElement) { var xElement =source as XElement; config.DataType = "XML"; config.Type = xElement.Attr("graphtype"); RemoveComments(xElement); return source.ToString(); } else if(source is string) { return source as string; } return string.Empty; }
protected BuildHistoryController(IBuildHistoryClient buildHistoryClient, IBuildStatistics buildStatistics, IChartConfig chartConfig) { _buildHistoryClient = buildHistoryClient; _buildStatistics = buildStatistics; _chartConfig = chartConfig; }
/// <summary> /// Установка длины графика /// </summary> /// <param name="chartConfig">Представление конфига</param> /// <param name="width">Длина</param> /// <returns>Замыкание на конфиг</returns> public static IChartConfig SetWidth(this IChartConfig chartConfig, double width) { chartConfig.Width = width.ToString(CultureInfo.InvariantCulture); return(chartConfig); }
/// <summary> /// Возвращает адаптер для работы с графиком в API FusionChart /// </summary> /// <param name="chart"></param> /// <param name="config"></param> /// <returns></returns> public static FusionChartWrapper AsFusion(this IChartElement chart, IChartConfig config=null) { config = config ?? new ChartConfig(){Type = FusionChartType.Column2D.ToString()}; return new FusionChartWrapper(chart,config); }
/// <summary> /// Перекрыть, чтобы создать класс рендера для данного класса /// </summary> /// <param name="chartConfig"></param> /// <returns></returns> protected virtual IChartRender CreateChartRender(IChartConfig chartConfig) { throw new NotSupportedException(); }
public AppVeyorController(IBuildStatistics buildStatistics, IChartConfig chartConfig) : base(new AppVeyorFactory().CreateBuildHistoryClient(), buildStatistics, chartConfig) { }
/// <summary> /// /// </summary> /// <param name="message"></param> /// <param name="config"></param> /// <param name="inner"></param> public ChartException(string message, IChartConfig config, Exception inner) : base(message, inner) { Config = config; }
/// <summary> /// Установка типа графика в конфиг /// </summary> /// <param name="chartConfig">Представление конфига</param> /// <param name="type">Тип графика</param> /// <returns>Замыкание на конфиг</returns> public static IChartConfig SetChartType(this IChartConfig chartConfig, FusionChartType type) { chartConfig.Type = type.ToString(); return(chartConfig); }
public TravisCIController(IBuildStatistics buildStatistics, IChartConfig chartConfig) : base(new TravisCIFactory().CreateBuildHistoryClient(), buildStatistics, chartConfig) { }