public static IHtmlContent RACheckBoxFor <TModel>(
            this IHtmlHelper <TModel> htmlHelper,
            Expression <Func <TModel, bool> > expression,
            string label,
            object htmlAttributes = null,
            string wrapperClass   = null,
            string wrapperStyle   = null,
            string stateClass     = "ra-p-theme",
            string labelClass     = null,
            string labelStyle     = null)
        {
            var content = new HtmlContentBuilder();

            content.AppendFormat("<div class='pretty p-svg p-curve p-smooth {0}' style='{1}'>",
                                 wrapperClass, wrapperStyle);
            content.AppendHtml(htmlHelper.CheckBoxFor(expression, htmlAttributes));
            content.AppendFormat("<div class='state {0}'>", stateClass);
            content.AppendHtml("<svg class='svg svg-icon' viewBox='0 0 20 20'>");
            content.AppendHtml("<path d='M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z' " +
                               "style='stroke: white;fill:white;'></path>");
            content.AppendHtml("</svg>");
            content.AppendFormat("<label class='{0}' style='{1}'>", labelClass, labelStyle);
            content.AppendHtml(label);
            content.AppendHtml("</label></div></div>");

            return(content);
        }
        public static TagCloser RABeginDropdownButton(
            this IHtmlHelper htmlHelper,
            string buttonHtml,
            string buttonId,
            string buttonClass   = "btn-secondary",
            string buttonStyle   = null,
            string dropdownClass = "dropdown",
            string dropdownStyle = null)
        {
            var content = new HtmlContentBuilder();

            content.AppendFormat("<div class='{0}' style='{1}'>",
                                 dropdownClass, dropdownStyle);
            content.AppendHtml(htmlHelper.RAButton(buttonHtml, null, new
            {
                @data_toggle   = "dropdown",
                @aria_haspopup = "true",
                @aria_expanded = "false",
            }, buttonId, buttonClass + " dropdown-toggle", buttonStyle));
            content.AppendFormat("<div class='dropdown-menu' aria-labelledby='{0}'>",
                                 buttonId);

            htmlHelper.ViewContext.Writer.Write(content);
            return(new TagCloser(htmlHelper, "</div></div>"));
        }
Beispiel #3
0
        public static IHtmlContent RAPropertyBlockEditorFor <TModel, TProperty>(
            this IHtmlHelper <TModel> htmlHelper,
            Expression <Func <TModel, TProperty> > expression,
            object htmlAttributes           = null,
            SelectList selectList           = null,
            RAEditorType?editorTypeOverride = null,
            string displayLabel             = null,
            string selectListOptionLabel    = null,
            string descriptionOverride      = null)
        {
            var modelExplorer = htmlHelper.GetModelExplorer(expression);

            var content = new HtmlContentBuilder();

            content.AppendHtml("<div class='ra-propertyblock-editor'>");
            content.AppendFormat("<div class='ra-propertyblock-field-label'>{0}</div>",
                                 String.IsNullOrEmpty(displayLabel) ? modelExplorer.GetPropertyDisplayName() : displayLabel);
            content.AppendHtml("<div class='ra-propertyblock-field-editor'>");

            content.AppendHtml(htmlHelper.GetEditorFor(expression, modelExplorer, htmlAttributes,
                                                       selectList, editorTypeOverride, false, selectListOptionLabel));

            string description = !String.IsNullOrEmpty(descriptionOverride) ? descriptionOverride :
                                 modelExplorer.Metadata?.Description;

            content.AppendFormat("<div class='ra-description-info'>{0}</div>", description);

            content.AppendHtml("<div class='ra-validation-error'>");
            content.AppendHtml(htmlHelper.ValidationMessageFor(expression));
            content.AppendHtml("</div></div></div>");

            return(content);
        }
Beispiel #4
0
 private static void AppendPropertyBlockDisplayHtmlStart(
     this HtmlContentBuilder content,
     string displayLabel,
     string displayValueClass,
     string displayValueStyle)
 {
     content.AppendHtml("<div class='ra-propertyblock-display'>");
     content.AppendFormat("<div class='ra-propertyblock-field-label'>{0}</div>", displayLabel);
     content.AppendFormat("<div class='ra-propertyblock-field-value {0}' style='{1}'>", displayValueClass, displayValueStyle);
 }
        public static IHtmlContent ReCaptchaV2(string siteKey, string size, string theme, string language, string callback, string errorCallback, string expiredCallback)
        {
            var content = new HtmlContentBuilder();

            content.AppendFormat(@"<div class=""g-recaptcha"" data-sitekey=""{0}""", siteKey);

            if (!string.IsNullOrEmpty(size))
            {
                content.AppendFormat(@" data-size=""{0}""", size);
            }
            if (!string.IsNullOrEmpty(theme))
            {
                content.AppendFormat(@" data-theme=""{0}""", theme);
            }
            if (!string.IsNullOrEmpty(callback))
            {
                content.AppendFormat(@" data-callback=""{0}""", callback);
            }
            if (!string.IsNullOrEmpty(errorCallback))
            {
                content.AppendFormat(@" data-error-callback=""{0}""", errorCallback);
            }
            if (!string.IsNullOrEmpty(expiredCallback))
            {
                content.AppendFormat(@" data-expired-callback=""{0}""", expiredCallback);
            }

            content.AppendFormat("></div>");
            content.AppendLine();
            content.AppendFormat(@"<script src=""https://www.google.com/recaptcha/api.js?hl={0}"" defer></script>", language);

            return(content);
        }
Beispiel #6
0
        public static TagCloser RABeginToolbar(
            this IHtmlHelper htmlHelper,
            string toolbarClass = null,
            string toolbarStyle = null)
        {
            var content = new HtmlContentBuilder();

            content.AppendFormat("<nav class='navbar ra-toolbar {0}' style='{1}'>", toolbarClass, toolbarStyle);

            content.AppendFormat("<form class='form-inline' type='{0}' src='{1}'>", "POST",
                                 htmlHelper.ViewContext.HttpContext.Request.Path);

            htmlHelper.ViewContext.Writer.Write(content);
            return(new TagCloser(htmlHelper, "</form></nav>"));
        }
Beispiel #7
0
        public static TagCloser RABeginDynamicTableRow <TModel>(
            this IHtmlHelper <TModel> htmlHelper)
            where TModel : IDynamicTableRowItem
        {
            var    model = htmlHelper.ViewData.Model;
            string existingHtmlPrefixField = htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix;

            htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix = model.IndexedHtmlFieldPrefix;

            var contentStart = new HtmlContentBuilder();

            contentStart.AppendHtml("<tr>");
            htmlHelper.ViewContext.Writer.Write(contentStart);

            var contentEnd = new HtmlContentBuilder();

            contentEnd.AppendHtml("<td>");
            contentEnd.AppendHtml(htmlHelper.RAButton("<i class='fas fa-times'></i>",
                                                      "raRemoveDynamicTableRow(this);",
                                                      buttonClass: "btn-danger ra-btn-xs"));
            contentEnd.AppendHtml(htmlHelper.HiddenFor(x => x.HtmlFieldPrefix));
            contentEnd.AppendFormat("<input type=\"hidden\" id=\"{0}\" name=\"{1}\" value=\"{2}\" />",
                                    model.IndexId, model.IndexName, model.Index);
            contentEnd.AppendHtml("</td>");
            contentEnd.AppendHtml("</tr>");

            return(new TagCloser(htmlHelper, contentEnd, existingHtmlPrefixField));
        }
Beispiel #8
0
        public static IHtmlContent RAToolbarEditorFor <TModel, TProperty>(
            this IHtmlHelper <TModel> htmlHelper,
            Expression <Func <TModel, TProperty> > expression,
            object htmlAttributes           = null,
            SelectList selectList           = null,
            RAEditorType?editorTypeOverride = null,
            string displayLabel             = null,
            string displayLabelClass        = null,
            string selectListOptionLabel    = null)
        {
            var modelExplorer = htmlHelper.GetModelExplorer(expression);

            var content = new HtmlContentBuilder();

            var label = String.IsNullOrEmpty(displayLabel) ? modelExplorer.GetPropertyDisplayName() : displayLabel;

            if (!String.IsNullOrEmpty(label))
            {
                var id = htmlHelper.GenerateIdFromName(
                    htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlHelper.GetExpressionText(expression)));
                content.AppendFormat("<label for='{0}' class='ra-toolbar-label {1}'>{2}:</label>", id,
                                     displayLabelClass, label);
            }

            content.AppendHtml(htmlHelper.GetEditorFor(expression, modelExplorer, htmlAttributes, selectList,
                                                       editorTypeOverride, true, selectListOptionLabel));

            return(content);
        }
        private static void AppendDashboardItemCell(
            HtmlContentBuilder content,
            string mainClass,
            string text,
            string url,
            DashboardState state)
        {
            content.AppendFormat("<td class='ra-dashboard-cell-value-{0} ra-dashboard-cell-{1} {2}'",
                                 mainClass, state.ToString().ToLower(), !String.IsNullOrEmpty(url) ? "ra-clickable" : null);

            if (!String.IsNullOrEmpty(url))
            {
                content.AppendFormat(" onmouseup='navigateTo(\"{0}\");'", url);
            }

            content.AppendFormat(">{0}</td><td class='ra-dashboard-cell-spacer'></td>", text);
        }
Beispiel #10
0
        public static IHtmlContent RAAjaxContentSection(this IHtmlHelper htmlHelper,
                                                        string contentKey,
                                                        string contentUrl       = null,
                                                        string contentUrlScript = null,
                                                        string contentClass     = "ra-container ra-container-vertica",
                                                        string contentStyle     = null,
                                                        string postUpdateScript = null)
        {
            var content = new HtmlContentBuilder();

            content.AppendFormat("<div id=\"{0}AjaxContent\" class=\"{1}\" style=\"{2}\" data-content-url=\"{3}\" data-content-url-script=\"{4}\"></div>",
                                 contentKey, contentClass, contentStyle, contentUrl, contentUrlScript);

            content.AppendFormat("<script>raUpdateAjaxContentSection('{0}');{1}</script>", contentKey, postUpdateScript);

            return(content);
        }
        public static IHtmlContent ReCaptchaV3(string siteKey, string action, string language, string callBack)
        {
            var content = new HtmlContentBuilder();

            content.AppendHtml(@"<input id=""g-recaptcha-response"" name=""g-recaptcha-response"" type=""hidden"" value="""" />");
            content.AppendFormat(@"<script src=""https://www.google.com/recaptcha/api.js?render={0}&hl={1}""></script>", siteKey, language);
            content.AppendHtml("<script>");
            content.AppendHtml("function updateReCaptcha() {");
            content.AppendFormat("grecaptcha.execute('{0}', {{action: '{1}'}}).then(function(token){{", siteKey, action);
            content.AppendHtml("document.getElementById('g-recaptcha-response').value = token;");
            content.AppendHtml("});");
            content.AppendHtml("}");
            content.AppendHtml("grecaptcha.ready(function() {setInterval(updateReCaptcha, 100000); updateReCaptcha()});");
            content.AppendHtml("</script>");
            content.AppendLine();

            return(content);
        }
Beispiel #12
0
        public static IHtmlContent RADataGridSelectedRowList <TModel, TProperty>(this IHtmlHelper <TModel> htmlHelper,
                                                                                 Expression <Func <TModel, TProperty> > expression, string dataGridId, bool includeRowNames = true, string rowNameClass = null)
        {
            var content = new HtmlContentBuilder();

            content.AppendHtml("<div id=\"selectedDataGridItemsList\"></div>");
            content.AppendFormat("<script>createSelectedDataGridItemsList('{0}', '{1}', '{2}', '{3}');</script>",
                                 dataGridId, htmlHelper.GetExpressionText(expression), includeRowNames.ToString().ToLower(), rowNameClass);

            return(content);
        }
        public static IHtmlContent RATwoLineDateTime <TModel>(
            this IHtmlHelper <TModel> htmlHelper,
            DateTime?dateTimeUtc)
        {
            var content = new HtmlContentBuilder();

            content.AppendFormat("<div class='ra-nowrap'>{0}</div> <div class='ra-nowrap'>{1}</div>",
                                 dateTimeUtc.RAFormatAsShortDateForTimeZone(),
                                 dateTimeUtc.RAFormatAsShortTimeForTimeZone());

            return(content);
        }
        private IHtmlContent GenerateHeaderRow(ModelMetadata[] props)
        {
            var builder = new HtmlContentBuilder();

            builder.AppendHtml("<tr>");

            foreach (var prop in props)
            {
                builder.AppendFormat("<th>{0}</th>", prop.DisplayName);
            }

            builder.AppendHtml("</tr>");
            return(builder);
        }
        public static IHtmlContent RARadioButtonFor <TModel, TProperty>(
            this IHtmlHelper <TModel> htmlHelper,
            Expression <Func <TModel, TProperty> > expression,
            object value,
            string label,
            object htmlAttributes = null,
            string wrapperClass   = null,
            string wrapperStyle   = null,
            string stateClass     = "p-primary-o",
            string labelClass     = null,
            string labelStyle     = null)
        {
            var content = new HtmlContentBuilder();

            content.AppendFormat("<div class='pretty p-default p-round p-smooth {0}' style='{1}'>",
                                 wrapperClass, wrapperStyle);
            content.AppendHtml(htmlHelper.RadioButtonFor(expression, value, htmlAttributes));
            content.AppendFormat("<div class='state {0}'>", stateClass);
            content.AppendFormat("<label class='{0}' style='{1}'>{2}</label>", labelClass, labelStyle, label);
            content.AppendHtml("</div></div>");

            return(content);
        }
Beispiel #16
0
        public static TagCloser RABeginAjaxContentSection(this IHtmlHelper htmlHelper,
                                                          string contentKey,
                                                          string contentUrl       = null,
                                                          string contentUrlScript = null,
                                                          string contentClass     = "ra-container ra-container-vertica",
                                                          string contentStyle     = null)
        {
            var content = new HtmlContentBuilder();

            content.AppendFormat("<div id=\"{0}AjaxContent\" class=\"{1}\" style=\"{2}\" data-content-url=\"{3}\" data-content-url-script=\"{4}\">",
                                 contentKey, contentClass, contentStyle, contentUrl, contentUrlScript);
            htmlHelper.ViewContext.Writer.Write(content);
            return(new TagCloser(htmlHelper, "</div"));
        }
        public static IHtmlContent RADashboardTable(
            this IHtmlHelper htmlHelper,
            string title,
            List <RADashboardItem> dashboardItems,
            string noDashboardItemsText = null)
        {
            var content = new HtmlContentBuilder();

            content.AppendFormat("<div class='ra-dashboard-heading'>{0}</div>", title);
            content.AppendHtml("<table class=''><tbody>");

            if (dashboardItems.Count > 0)
            {
                content.AppendHtml("<tr>");
                foreach (var item in dashboardItems)
                {
                    AppendDashboardItemCell(content, "upper", item.Count.ToString(), item.Url, item.State);
                }
                content.AppendHtml("</tr>");

                content.AppendHtml("<tr>");
                foreach (var item in dashboardItems)
                {
                    AppendDashboardItemCell(content, "lower", item.Description, item.Url, item.State);
                }
                content.AppendHtml("</tr>");
            }
            else
            {
                content.AppendFormat("<tr><td class='ra-dashboard-cell-noitems'>{0}</td></tr>",
                                     noDashboardItemsText);
            }

            content.AppendHtml("</tbody></table>");
            return(content);
        }
Beispiel #18
0
        public static TagCloser RABeginContainer(
            this IHtmlHelper htmlHelper,
            ContainerScrolling scrolling = ContainerScrolling.None,
            string containerClass        = "ra-container",
            string containerStyle        = null)
        {
            var content = new HtmlContentBuilder();

            content.AppendFormat("<div class='{0} {1}' style='{2}'>",
                                 containerClass,
                                 GetScrollingClass(scrolling),
                                 containerStyle);

            htmlHelper.ViewContext.Writer.Write(content);
            return(new TagCloser(htmlHelper, "</div>"));
        }
Beispiel #19
0
        public static TagCloser RABeginDataGridSelectableRow(
            this IHtmlHelper htmlHelper,
            IIdObject idObject,
            bool canSelect    = true,
            string idOverride = null)
        {
            var id = !String.IsNullOrEmpty(idOverride) ? idOverride : idObject.Id.ToString();

            var content = new HtmlContentBuilder();

            content.AppendFormat("<tr class='{0}' data-row-id='{1}' data-row-name='{2}' onmouseup='{3}'",
                                 canSelect ? "ra-datagrid-row-selectable" : "", id, idObject.ToString(),
                                 canSelect ? "selectDataGridRow(this);" : "");
            content.AppendHtml(">");
            htmlHelper.ViewContext.Writer.Write(content);
            return(new TagCloser(htmlHelper, "</tr>"));
        }
        private IHtmlContent GenerateBodyRows(IEnumerable items, ModelMetadata[] props)
        {
            var builder = new HtmlContentBuilder();

            foreach (var item in items)
            {
                builder.AppendHtml("<tr>");
                foreach (var prop in props)
                {
                    // todo: use HtmlHelper.DisplpayFor
                    var value = prop.PropertyGetter(item);
                    builder.AppendFormat("<td>{0}</td>", value);
                }
                builder.AppendHtml("</tr>");
            }

            return(builder);
        }
Beispiel #21
0
        public static IHtmlContent RADynamicTable <TModel, TTableRowItem>(
            this IHtmlHelper <TModel> htmlHelper,
            Expression <Func <TModel, IList <TTableRowItem> > > tableRowItemsExpression,
            string rowViewName,
            string ajaxAddRowUrl,
            string addRowLinkText,
            string addButtonClass = "ra-btn-theme",
            string tHeadInnerHtml = null)
            where TTableRowItem : IDynamicTableRowItem
        {
            var    content = new HtmlContentBuilder();
            string tableId = Guid.NewGuid().ToString().Replace("-", "");

            content.AppendFormat("<table id=\"{0}\" class=\"ra-dynamictable\">", tableId);
            if (!String.IsNullOrEmpty(tHeadInnerHtml))
            {
                content.AppendHtml("<thead>" + tHeadInnerHtml + "</thead>");
            }
            content.AppendHtml("<tbody class=\"ra-dynamictable-body\">");

            var htmlFieldPrefix = htmlHelper.GetExpressionText(tableRowItemsExpression);
            var modelExplorer   = htmlHelper.GetModelExplorer(tableRowItemsExpression);

            foreach (var rowItem in (IList <TTableRowItem>)modelExplorer.Model)
            {
                rowItem.HtmlFieldPrefix = htmlFieldPrefix;
                content.AppendHtml(htmlHelper.Partial(rowViewName, rowItem)); //htmlHelper.EditorFor(x => rowItem));
            }

            var completeAjaxAddRowUrl = ajaxAddRowUrl += "&htmlFieldPrefix=" + htmlFieldPrefix;

            content.AppendHtml("</tbody>");
            content.AppendHtml("</table>");
            content.AppendHtml("<div>");
            content.AppendHtml(htmlHelper.RAButton("<i class='fas fa-plus'></i> " + addRowLinkText,
                                                   string.Format("raAddDynamicTableRow('{0}', '{1}');", tableId, completeAjaxAddRowUrl),
                                                   buttonClass: $"{addButtonClass} ra-btn-xs"));
            content.AppendHtml("</button>");
            content.AppendHtml("</div>");

            return(content);
        }
Beispiel #22
0
        public static TagCloser RABeginDataGrid(
            this IHtmlHelper htmlHelper,
            string tableClass    = null,
            string tableStyle    = null,
            int fixedHeight      = 0,
            bool sortable        = true,
            bool updateRowColors = true)
        {
            var tableId = Guid.NewGuid().ToString().Replace("-", "");

            var    userAgent  = htmlHelper.ViewContext.HttpContext.Request.Headers["User-Agent"];
            string uaString   = Convert.ToString(userAgent[0]);
            var    uaParser   = Parser.GetDefault();
            var    clientInfo = uaParser.Parse(uaString);

            // Safari on iPhone/iPad/Mac can use Overlay Scrollbars to scroll (important
            // as intrinsic scrollbars are hidden on iPhone/iPad), but non-Safari browsers won't
            // show the sticky headers on long down scroll, so we want to use intrinsic scrollbars instead.
            var scrollClass = clientInfo.ToString().Contains("Safari") ?
                              "ra-container-scrollable-both" :
                              "ra-datagrid-table-scroll";

            var content = new HtmlContentBuilder();

            content.AppendFormat("<table id='{0}' class='ra-datagrid-table {1} {2} {3}' style='{4}'>",
                                 tableId,
                                 scrollClass,
                                 sortable ? "sort" : null,
                                 tableClass,
                                 tableStyle);
            htmlHelper.ViewContext.Writer.Write(content);

            var sortCommand = String.Format("new Tablesort(document.getElementById('{0}'));", tableId);
            var closingTags = String.Format("</table><script>{0}setupDataGrid('{1}',{2},{3});</script>",
                                            sortable ? sortCommand : null,
                                            tableId,
                                            fixedHeight,
                                            updateRowColors.Totruefalse());

            return(new TagCloser(htmlHelper, closingTags));
        }
        public static IHtmlContent ReCaptchaV2Invisible(string siteKey, string text, string className, string language, string callback, string badge)
        {
            var content = new HtmlContentBuilder();

            content.AppendFormat(@"<button class=""g-recaptcha {0}""", className);
            content.AppendFormat(@" data-sitekey=""{0}""", siteKey);
            content.AppendFormat(@" data-callback=""{0}""", callback);
            content.AppendFormat(@" data-badge=""{0}""", badge);
            content.AppendFormat(@">{0}</button>", text);
            content.AppendLine();

            content.AppendFormat(@"<script src=""https://www.google.com/recaptcha/api.js?hl={0}"" defer></script>", language);

            return(content);
        }
Beispiel #24
0
        public static IHtmlContent RAPagePanel <TModel>(
            this IHtmlHelper <TModel> htmlHelper,
            string contentUrl     = null,
            string containerClass = "ra-container ra-container-vertical",
            string containerStyle = null)
        {
            var content = new HtmlContentBuilder();

            content.AppendFormat(
                "<div id='ra-pagePanel' data-content-url='{0}' class='{1}' style='{2}'></div>",
                contentUrl,
                containerClass,
                containerStyle);

            if (!string.IsNullOrEmpty(contentUrl))
            {
                content.AppendHtml("<script>$(document).ready(function() { raRefreshPagePanel(); });</script>");
            }

            return(content);
        }
Beispiel #25
0
        public static TagCloser RABeginStaticTableRow <TModel>(this IHtmlHelper <TModel> htmlHelper)
            where TModel : RATableRowItemBase
        {
            var    model = htmlHelper.ViewData.Model;
            string existingHtmlPrefixField = htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix;

            htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix = model.IndexedHtmlFieldPrefix;

            var contentStart = new HtmlContentBuilder();

            contentStart.AppendHtml("<tr>");
            htmlHelper.ViewContext.Writer.Write(contentStart);

            var contentEnd = new HtmlContentBuilder();

            contentEnd.AppendHtml("<td>");
            contentEnd.AppendHtml(htmlHelper.HiddenFor(x => x.HtmlFieldPrefix));
            contentEnd.AppendFormat("<input type=\"hidden\" id=\"{0}\" name=\"{1}\" value=\"{2}\" />",
                                    model.IndexId, model.IndexName, model.Index);
            contentEnd.AppendHtml("</td>");
            contentEnd.AppendHtml("</tr>");

            return(new TagCloser(htmlHelper, contentEnd, existingHtmlPrefixField));
        }