public static HtmlBuilder GanttBody(
     this HtmlBuilder hb,
     Context context,
     SiteSettings ss,
     Column groupBy,
     Column sortBy,
     int period,
     DateTime startDate,
     GanttRange range,
     EnumerableRowCollection <DataRow> dataRows,
     bool inRange)
 {
     hb
     .Hidden(
         controlId: "GanttMinDate",
         value: startDate.ToLocal(context: context).ToString(
             "d", context.CultureInfo()))
     .Hidden(
         controlId: "GanttMaxDate",
         value: startDate.AddDays(period).ToLocal(context: context).ToString(
             "d", context.CultureInfo()))
     .Hidden(
         controlId: "GanttPrevious",
         value: startDate.AddDays(-7).ToLocal(context: context).ToString(
             "d", context.CultureInfo()))
     .Hidden(
         controlId: "GanttNext",
         value: startDate.AddDays(7).ToLocal(context: context).ToString(
             "d", context.CultureInfo()))
     .Hidden(
         controlId: "GanttFirstDay",
         value: range.Min.ToLocal(context: context).ToString(
             "d", context.CultureInfo()))
     .Hidden(
         controlId: "GanttToday",
         value: DateTime.Today.ToLocal(context: context).ToString(
             "d", context.CultureInfo()))
     .Hidden(
         controlId: "ShowGanttProgressRate",
         value: ss.ShowGanttProgressRate.ToBool().ToOneOrZeroString());
     if (!inRange)
     {
         return(hb);
     }
     return(dataRows != null
         ? hb
            .Svg(id : "Gantt")
            .Svg(id: "GanttAxis")
            .Hidden(
                controlId: "GanttJson",
                value: new Gantt(
                    context: context,
                    ss: ss,
                    dataRows: dataRows,
                    groupBy: groupBy,
                    sortBy: sortBy)
                .Json(groupBy, sortBy))
         : hb);
 }
 public static HtmlBuilder Gantt(
     this HtmlBuilder hb,
     SiteSettings ss,
     string groupBy,
     string sortBy,
     int period,
     DateTime startDate,
     GanttRange range,
     EnumerableRowCollection <DataRow> dataRows,
     bool inRange = true)
 {
     return(hb.Div(css: "both", action: () => hb
                   .FieldDropDown(
                       controlId: "GanttGroupBy",
                       fieldCss: "field-auto-thin",
                       controlCss: " auto-postback",
                       labelText: Displays.GroupBy(),
                       optionCollection: ss.GanttGroupByOptions(),
                       selectedValue: groupBy,
                       insertBlank: true,
                       method: "post")
                   .FieldDropDown(
                       controlId: "GanttSortBy",
                       fieldCss: "field-auto-thin",
                       controlCss: " auto-postback",
                       labelText: Displays.SortBy(),
                       optionCollection: ss.GanttSortByOptions(),
                       selectedValue: sortBy,
                       insertBlank: true,
                       method: "post")
                   .Div(css: "field-auto-thin", action: () => hb
                        .FieldTextBox(
                            textType: HtmlTypes.TextTypes.DateTime,
                            fieldCss: "field-auto-thin",
                            controlId: "GanttStartDate",
                            controlCss: " w100 auto-postback",
                            labelText: Displays.StartDate(),
                            text: startDate.ToLocal().InRange()
                     ? startDate.ToLocal().ToString(
                                "d", Sessions.CultureInfo())
                     : string.Empty,
                            format: Displays.YmdDatePickerFormat(),
                            method: "post")
                        .Button(
                            controlId: "GanttPreviousButton",
                            text: Displays.Previous(),
                            controlCss: "button-icon",
                            accessKey: "b",
                            onClick: "$p.moveGantt('Previous');",
                            icon: "ui-icon-seek-prev")
                        .Button(
                            controlId: "GanttNextButton",
                            text: Displays.Next(),
                            controlCss: "button-icon",
                            accessKey: "n",
                            onClick: "$p.moveGantt('Next');",
                            icon: "ui-icon-seek-next")
                        .Button(
                            controlId: "GanttFirstDayButton",
                            text: Displays.FirstDay(),
                            controlCss: "button-icon",
                            onClick: "$p.moveGantt('FirstDay');",
                            icon: "ui-icon-calendar")
                        .Button(
                            controlId: "GanttTodayButton",
                            text: Displays.Today(),
                            controlCss: "button-icon",
                            onClick: "$p.moveGantt('Today');",
                            icon: "ui-icon-calendar"))
                   .FieldSlider(
                       controlId: "GanttPeriod",
                       fieldCss: "field-auto-thin",
                       controlCss: " auto-postback",
                       labelText: Displays.Period(),
                       min: Parameters.General.GanttPeriodMin,
                       max: range.Period,
                       step: 1,
                       value: period,
                       method: "post")
                   .Div(id: "GanttBody", action: () => hb
                        .GanttBody(
                            ss: ss,
                            groupBy: groupBy,
                            sortBy: sortBy,
                            period: period,
                            startDate: startDate,
                            range: range,
                            dataRows: dataRows,
                            inRange: inRange))));
 }