public static void AddElementName(ElementRequest request, HtmlTag tag) { if (tag.IsInputElement()) { tag.Attr("name", request.ElementId); tag.Attr("id", idRegex.Replace(request.ElementId, "_")); } }
public override HtmlTag Build(ElementRequest request) { HtmlTag root = new HtmlTag("a"); root.Attr("href", "mailto:" + request.StringValue()); root.Attr("name", request.Accessor.FieldName + "Link"); root.Append(new HtmlTag("span").Text(request.StringValue())); return root; }
public InputConventions() { Editors.Always .Modify((request, tag) => tag.Attr("id", request.Accessor.Name)); Editors .If(x => x.Accessor.FieldName.Contains("Password") && x.Accessor.PropertyType.IsString()) .Attr("type", "password"); Editors .If(x => x.Accessor.FieldName.Contains("Email") && x.Accessor.PropertyType.IsString()) .Attr("type", "email"); Editors .If(x => x.Accessor.FieldName.Contains("Body") && x.Accessor.PropertyType.IsString()) .Modify((r, x) => { x.TagName("textarea"); x.Text(r.StringValue()); }); Editors .If(x => x.Accessor.InnerProperty.HasAttribute<RequiredAttribute>()) .Modify(x => x.AddClass("required")); Editors .If(x => x.Accessor.InnerProperty.HasAttribute<MinLengthAttribute>()) .Modify((request, tag) => { var length = request.Accessor.InnerProperty.GetAttribute<MinLengthAttribute>().Length; tag.Attr("minlength", length); }); Editors .If(x => x.Accessor.InnerProperty.HasAttribute<MaxLengthAttribute>()) .Modify((request, tag) => { var length = request.Accessor.InnerProperty.GetAttribute<MaxLengthAttribute>().Length; tag.Attr("maxlength", length); }); Editors.Always .Modify((request, tag) => { var result = request.Get<IFubuRequest>().Get<ValidationResult>(); if (result == null || result.IsValid) return; var error = result.Errors.FirstOrDefault(x => x.PropertyName == request.Accessor.InnerProperty.Name); if (error == null) return; var errorLabel = new HtmlTag("label"); errorLabel.Text(error.ErrorMessage); errorLabel.AddClass("error"); errorLabel.Attr("for", request.Accessor.InnerProperty.Name); errorLabel.Attr("generated", "true"); tag.Next = errorLabel; }); }
public override HtmlTag Build(ElementRequest request) { HtmlTag root = new HtmlTag("a"); root.Attr("href", request.RawValue); root.Attr("target", "_blank"); root.Id(request.Accessor.FieldName); var img = new HtmlTag("img"); img.Attr("src", request.RawValue); root.Append(img); return root; }
public override HtmlTag Build(ElementRequest request) { var tag = new HtmlTag("div").Text(request.StringValue()).AddClass("editable").Id(request.Accessor.Name); var options = new EditOptions(); if (request.Accessor.HasAttribute<MarkdownAttribute>()) { tag.UnEncoded().Text(new Markdown().Transform(request.RawValue== null ? "" : request.RawValue.ToString())); options.Markdown = true; } options.MultiLine = request.Accessor.Name == "Details"; options.RequiresExplicitUserActionForSave = true; options.MaximumLength = request.Accessor.PropertyType.Equals(typeof(string)) ? Entity.UnboundedStringLength : 0; options.IsDate = request.Accessor.PropertyType.IsDateTime(); options.IsTime = request.Accessor.Name.ToLower().Contains("time"); options.IsNumber = request.Accessor.PropertyType.IsIntegerBased() || request.Accessor.PropertyType.IsFloatingPoint(); options.Required = request.Accessor.HasAttribute<RequiredAttribute>(); options.PlaceholderText = "Double-Click to edit " + request.Accessor.Name.ToLower() + "."; var data = options.ToJson(); tag.Attr("data", "{editoptions:"+data+"}"); return tag; }
public void AssertValid(HtmlTag tag, string tagName, string name, string type = "", object value = null) { Assert.Equal(tagName, tag.TagName()); Assert.Equal(name, tag.Attr("name")); Assert.Equal(name, tag.Attr("id")); if (type == null) Assert.False(tag.HasAttr("type")); else Assert.Equal(type, tag.Attr("type")); if (value == null) Assert.True(!tag.HasAttr("value") || tag.Attr("value") == ""); else Assert.Equal(value.ToString(), tag.Attr("value")); }
public override HtmlTag Build(ElementRequest request) { HtmlTag root = new HtmlTag("a"); root.Attr("data-bind", "attr: { href: mailto:" + CCHtmlConventionsKO.DeriveElementName(request)+"}"); root.Children.Add(new HtmlTag("span").Attr("data-bind", "text:" + CCHtmlConventionsKO.DeriveElementName(request))); return root; }
private void AssertOptionGroup( HtmlTag optgroup, string display) { Assert.Equal("optgroup", optgroup.TagName()); Assert.Equal(display, optgroup.Attr("label")); }
public static void AddElementName(ElementRequest request, HtmlTag tag) { if (tag.IsInputElement()) { tag.Attr("name", request.ElementId); } }
public static void AddElementName(ElementRequest request, HtmlTag tag) { if (tag.IsInputElement()) { tag.Attr(HtmlAttributeConstants.Name, request.ElementId); } }
private void MarkOptionAsSelected(HtmlTag optionTag) { var prevSelected = Children.FirstOrDefault(x => x.HasAttr(SelectedAttributeKey)); prevSelected?.RemoveAttr(SelectedAttributeKey); optionTag.Attr(SelectedAttributeKey, SelectedAttributeKey); }
public override HtmlTags.HtmlTag Build(ElementRequest request) { HtmlTag el = new HtmlTag("ul").AddClass("pizza-type"); IRepository repository = request.Get<IRepository>(); IEnumerable<PizzaType> pizzaTypes = repository.GetAll<PizzaType>().Cast<PizzaType>(); var stringifier = request.Get<Stringifier>(); foreach (PizzaType pt in pizzaTypes) { HtmlTag radio = new HtmlTag("input"); radio.Attr("type", "radio").Attr("name", "PizzaType"); radio.Attr("value", pt.Id); radio.Text(stringifier.GetString(pt)); el.Append(new HtmlTag("li").Append(radio)); } return el; }
private HtmlTag getLiItem(MenuItem item) { if (item == null) return null; var li = new HtmlTag("li"); if(item.CssClass.IsNotEmpty()) li.AddClass(item.CssClass); var anchor = new HtmlTag("a"); anchor.Attr("href", "#"); anchor.Attr("rel", item.Url); anchor.Text(item.Text); li.Children.Add(anchor); if(item.Children!=null) { var ul = new HtmlTag("ul"); renderListItems(ul, item.Children); li.Children.Add(ul); } return li; }
private void writeChildren(MenuItemToken item, HtmlTag link) { link.AddClass("dropdown-toggle"); link.Attr("data-toggle", "dropdown"); link.Add("b").AddClass("caret"); var ul = Add("ul").AddClass("dropdown-menu"); item.Children.Each(child => { var childTag = new MenuItemTag(child); ul.Append(childTag); }); }
public static HtmlTag GetRatingStars(int rating) { var t = new HtmlTag("span"); for (int i = 0; i < rating; i++) { var img = new HtmlTag("img"); img.Attr("src", "/Public/images/rating.png"); img.AddClass("ratingImage"); t.Append(img); } return t; }
private void ModifyWithValidationGraph(ElementRequest request, HtmlTag tag) { // check for partials var modelType = (request.Accessor is SingleProperty) ? request.Model.GetType() : request.Accessor.OwnerType; var calls = _graph .FindChain(modelType) .CallsFor(request.Accessor.FieldName); calls .Where(call => !typeof(ComparisonValidationRule<>).IsAssignableFrom(call.RuleType)) .Each(call => tag.Modify(t => t.AddClass(call.ToRuleDef().Name.ToLower()))); tag.Attr("id", request.ElementId); }
public static void AddElementName(ElementRequest request, HtmlTag tag) { if (tag.IsInputElement()) { var name = request.Accessor.Name; if (request.Accessor is PropertyChain) { name = ((PropertyChain)(request.Accessor)).PropertyNames.Aggregate((current, next) => current + "." + next); if (new InheritsFromDomainEntity().execute(request.Accessor.PropertyType)) name += ".EntityId"; } //var name = request.Accessor.Name.Substring(0, request.Accessor.Name.IndexOf(request.Accessor.FieldName)) + "." + request.Accessor.FieldName; //tag.Attr("name", name); tag.Attr("name", name); } }
public HtmlTag ToHtmlTag() { var root = new HtmlTag("form"); if (!string.IsNullOrEmpty(_id)) { root.Attr("id", _id); } var innerDiv = new HtmlTag("div"); innerDiv.Append(new StyledButtonExpression("all", true).NonLocalizedText("All").ToHtmlTag()); for (int i = 65; i < 91; i++) { string letter = ((char)i).ToString(); innerDiv.Append(new StyledButtonExpression(letter, true).NonLocalizedText(letter).ToHtmlTag()); } root.Append(innerDiv); return root; }
private static HtmlTag ListItemFor(object enumValue, ElementRequest request) { var radioId = string.Format("{0}_{1}", request.ElementId, enumValue); var radioButton = new HtmlTag("input") .Attr("id", radioId) .Attr("name", request.ElementId) .Attr("type", "radio") .Attr("value", enumValue.ToString()); if (enumValue.ToString() == request.StringValue()) { radioButton.Attr("checked", "checked"); } var label = new HtmlTag("label") .Attr("for", radioId) .Encoded(false) .Text(enumValue.ToDescriptionString()); return new HtmlTag("li", tag => tag.Children.AddMany(new[] {radioButton, label})); }
public static void AddElementName(ElementRequest request, HtmlTag tag) { if (tag.IsInputElement()) { var name = request.Accessor.Name; if (request.Accessor is FubuMVC.Core.Util.PropertyChain) { name = ((FubuMVC.Core.Util.PropertyChain)(request.Accessor)).Names.Aggregate((current, next) => current + "." + next); var isDomainEntity =false; var de = request.Accessor.PropertyType.BaseType; while(de.Name!="Object") { if (de.Name == "DomainEntity") isDomainEntity = true; de = de.BaseType; } if (isDomainEntity) name += ".EntityId"; } //var name = request.Accessor.Name.Substring(0, request.Accessor.Name.IndexOf(request.Accessor.FieldName)) + "." + request.Accessor.FieldName; //tag.Attr("name", name); tag.Attr("name", name); } }
public void AddLengthClasses(IEnumerable<ValidationAttribute> propertyValidators, HtmlTag htmlTag, RequestData requestData) { var lengthValidator = propertyValidators.OfType<StringLengthAttribute>().FirstOrDefault(); if (lengthValidator != null) { htmlTag.Attr("maxlength", lengthValidator.MaximumLength); } }
public void AddLengthClasses(IEnumerable<PropertyValidatorResult> propertyValidators, HtmlTag htmlTag, RequestData requestData) { var result = propertyValidators.FirstOrDefault(x => x.PropertyValidator is LengthValidator); if (result != null) { htmlTag.Attr("maxlength", result.PropertyValidator.As<LengthValidator>().Max); } }
private static void SetColspan(HtmlTag cell, ExportCell exportCell) { if (!cell.HasAttr(HtmlAttributeConstants.Colspan)) { return; } int colspan; if(int.TryParse(cell.Attr(HtmlAttributeConstants.Colspan), out colspan)) { exportCell.ColumnSpan = colspan; } }
public void SetsOn() { var tag = new HtmlTag("input"); tag.Autocomplete(true); tag.Attr("autocomplete").ShouldEqual("on"); }
public void AddsPlaceholderAttribute() { var tag = new HtmlTag("input"); tag.Placeholder("dummy text"); tag.Attr("placeholder").ShouldEqual("dummy text"); }
private void addClassesAndAttributesToRoot(HtmlTag root) { HtmlAttributes.Each(x => root.Attr(x.Key, x.Value)); }
public NTCodingFubuRegistry() { IncludeDiagnostics(true); Routes .IgnoreNamespaceText("Endpoints") .IgnoreClassSuffix("Endpoint") .IgnoreClassSuffix("Index") .IgnoreMethodsNamed("get") .IgnoreMethodsNamed("post") .ConstrainToHttpMethod(x => x.Method.Name.Equals("Get"), "Get") .ConstrainToHttpMethod(x => x.Method.Name.Equals("Post"), "Post") .RootAtAssemblyNamespace() .HomeIs<IndexEndpoint>(e => e.Get(new HomepageLinkModel())); Actions .IncludeTypes(t => t.Namespace.Contains("Web.Endpoints") && t.Name.EndsWith("Endpoint")); Views .TryToAttach(x => x.by_ViewModel()) .RegisterActionLessViews(t => t.ViewModelType == typeof (Notification)); Output.To<RenderImageNode>().WhenTheOutputModelIs<ImageModel>(); Services(x => x.ReplaceService<IAuthorizationFailureHandler, NTCodingAuthorizationFailureHandler>()); Policies .Add<NTCodingValidationConvention>() .Add<RemapFormValuesOnValidationFailurePolicy>() .WrapBehaviorChainsWith<RavenSessionBehaviour>() .Add<AuthenticationConvention>(); // TODO - move into conventions / policies? Put Html building logic into helpers HtmlConvention(x => x.Displays .If(e => e.Accessor.Name.EndsWith("Html") && e.Accessor.PropertyType == typeof (String)) .BuildBy(er => new HtmlTag("div").AppendHtml(er.Value<String>()))); HtmlConvention(x => x.Labels .If(e => e.Accessor.Name.EndsWith("_BigText")) .BuildBy(er => new HtmlTag("label").Text(er.Accessor.Name.Replace("_BigText", ""))) ); HtmlConvention(x => x.Displays .If(e => e.Accessor.PropertyType.IsAssignableFrom(typeof (IEnumerable<String>))) .BuildBy(er => { var list = new HtmlTag("ul"); foreach (var item in er.Value<IEnumerable<String>>()) { list.Append(new HtmlTag("li", t => t.Text(item))); } return list; } )); HtmlConvention(x => x.Displays .If(e => e.Accessor.PropertyType.IsAssignableFrom(typeof(ImageDisplayModel))) .BuildBy(er => { // TODO - New convention to blog about - mention how we are making url's irrelevant to the internals of the application var model = er.Value<ImageDisplayModel>(); var urlForImage = String.Format("/Image?id={0}&width={1}&height={2}", model.Id, model.Width, model.Height); return new HtmlTag("img").Attr("src", urlForImage); } )); HtmlConvention(x => x.Editors .If(e => e.Accessor.Name.EndsWith("_BigText")) .BuildBy(er => new HtmlTag("textarea").Text(er.Value<String>())) ); HtmlConvention(x => x.Editors .If(e => e.Accessor.PropertyType.IsEnum) .BuildBy(er => { var name = er.Accessor.Name; // TODO - duplicated logic for creating select lists var tag = new HtmlTag("select"); tag.Children.Add(new HtmlTag("option").Text(GetDefaultValue(er, name)).Attr("value", "-")); var enumValues = Enum.GetValues(er.Accessor.PropertyType); foreach (var enumValue in enumValues) { var option = new HtmlTag("option").Text(enumValue.ToString()); if (GetSelectedValue(er, name) == enumValue.ToString()) { option.Attr("selected", "selected"); } tag.Children.Add(option); } return tag; }) ); HtmlConvention(x => x.Editors .If(e => e.Accessor.PropertyType.IsAssignableFrom(typeof (IDictionary<String, String>))) .BuildBy(er => { // TODO - getting ugly - make this a class / method itself string name = er.Accessor.PropertyNames[0].Substring(0, er.Accessor.PropertyNames[0].Length - 1); string selectedValue = GetSelectedValue(er, name); string defaultValue = GetDefaultValue(er, name); var dictionary = er.Value<IDictionary<String, String>>(); var tag = new HtmlTag("select").Attr("name", name); tag.Children.Add(new HtmlTag("option").Text(defaultValue).Attr("value", "-")); foreach (var item in dictionary) { var option = new HtmlTag("option").Text(item.Value).Attr("value", item.Key); // TODO - new convention for next blog post if (selectedValue != null && selectedValue == item.Value) { option.Attr("selected", "selected"); } tag.Children.Add(option); } return tag; }) ); HtmlConvention(x => x.Editors .If(e => e.Accessor.PropertyType.IsAssignableFrom(typeof (IList<StringWrapper>))) .BuildBy(er => { var tag = new HtmlTag("div").AddClass("hasHiddenGroup"); tag.Children.Add( new HtmlTag("input") .Attr("type", "text") .Attr("name", er.Accessor.Name) ); tag.Children.Add( new HtmlTag("a") .Attr("href", "#") .Text("add") .AddClass("addItem") ); var list = new HtmlTag("ul"); tag.Children.Add(list); var values = er.Value<IEnumerable<StringWrapper>>() ?? Enumerable.Empty<StringWrapper>(); foreach (var s in values) { // add a list item showing the value and a delete link var li = new HtmlTag("li"); li.Text(s.Text + " "); var deleteLInk = new HtmlTag("a") .AddClass("listDelete") .Text("delete") .Attr("href", "#"); li.Children.Add(deleteLInk); list.Children.Add(li); // add a hidden element so magic javascript can delete and manage indices var hidden = new HtmlTag("input") .Attr("type", "hidden") .Attr("name", er.Accessor.PropertyNames[0]) .Attr("value", s.Text); tag.Children.Add(hidden); } return tag; })); HtmlConvention(x => x.Editors .If(e => e.Accessor.PropertyType.IsAssignableFrom(typeof(HttpPostedFileBase))) .BuildBy(er => new HtmlTag("input").Attr("type", "file")) ); HtmlConvention(x => x.Editors .If(e => e.Accessor.Name.Equals("Id")) .BuildBy(er => new HtmlTag("input").Attr("type", "hidden").Attr("value", er.Value<String>())) ); this.UseSpark(); }
public void AddsAutofocusAttribute() { var tag = new HtmlTag("input"); tag.Autofocus(); tag.Attr("autofocus").ShouldEqual("autofocus"); }
public void SetsOff() { var tag = new HtmlTag("input"); tag.Autocomplete(false); tag.Attr("autocomplete").ShouldEqual("off"); }
private void addClassesAndAttributesToRoot(HtmlTag root) { HtmlAttributes.ForEachItem(x => root.Attr(x.Key, x.Value)); CssClasses.ForEachItem(x => root.AddClass(x)); }