private void AddTagMatchingRules(INamedTypeSymbol type, TagHelperDescriptorBuilder descriptorBuilder) { var targetElementAttributes = type .GetAttributes() .Where(attribute => SymbolEqualityComparer.Default.Equals(attribute.AttributeClass, _htmlTargetElementAttributeSymbol)); // If there isn't an attribute specifying the tag name derive it from the name if (!targetElementAttributes.Any()) { var name = type.Name; if (name.EndsWith(TagHelperNameEnding, StringComparison.OrdinalIgnoreCase)) { name = name.Substring(0, name.Length - TagHelperNameEnding.Length); } descriptorBuilder.TagMatchingRule(ruleBuilder => { var htmlCasedName = HtmlConventions.ToHtmlCase(name); ruleBuilder.TagName = htmlCasedName; }); return; } foreach (var targetElementAttribute in targetElementAttributes) { descriptorBuilder.TagMatchingRule(ruleBuilder => { var tagName = HtmlTargetElementAttribute_Tag(targetElementAttribute); ruleBuilder.TagName = tagName; var parentTag = HtmlTargetElementAttribute_ParentTag(targetElementAttribute); ruleBuilder.ParentTag = parentTag; var tagStructure = HtmlTargetElementAttribute_TagStructure(targetElementAttribute); ruleBuilder.TagStructure = tagStructure; var requiredAttributeString = HtmlTargetElementAttribute_Attributes(targetElementAttribute); RequiredAttributeParser.AddRequiredAttributes(requiredAttributeString, ruleBuilder); }); } }
private static void AddTagMatchingRules(Type type, TagHelperDescriptorBuilder descriptorBuilder) { var targetElementAttributes = type.GetCustomAttributes <HtmlTargetElementAttribute>(); // If there isn't an attribute specifying the tag name derive it from the name if (!targetElementAttributes.Any()) { var name = type.Name; if (name.EndsWith("TagHelper", StringComparison.OrdinalIgnoreCase)) { name = name.Substring(0, name.Length - "TagHelper".Length); } descriptorBuilder.TagMatchingRule(ruleBuilder => { var htmlCasedName = HtmlConventions.ToHtmlCase(name); ruleBuilder.TagName = htmlCasedName; }); return; } foreach (var targetElementAttribute in targetElementAttributes) { descriptorBuilder.TagMatchingRule(ruleBuilder => { var tagName = targetElementAttribute.Tag; ruleBuilder.TagName = tagName; var parentTag = targetElementAttribute.ParentTag; ruleBuilder.ParentTag = parentTag; var tagStructure = targetElementAttribute.TagStructure; ruleBuilder.TagStructure = (Microsoft.AspNetCore.Razor.Language.TagStructure)tagStructure; var requiredAttributeString = targetElementAttribute.Attributes; RequiredAttributeParser.AddRequiredAttributes(requiredAttributeString, ruleBuilder); }); } }
public static TagHelperDescriptorBuilder TagMatchingRuleDescriptor( this TagHelperDescriptorBuilder builder, Action <TagMatchingRuleDescriptorBuilder> configure) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.TagMatchingRule(configure); return(builder); }
private static void ReadTagMatchingRule(JsonReader reader, TagHelperDescriptorBuilder builder) { if (!reader.Read()) { return; } if (reader.TokenType != JsonToken.StartObject) { return; } builder.TagMatchingRule(rule => { reader.ReadProperties(propertyName => { switch (propertyName) { case nameof(TagMatchingRuleDescriptor.TagName): if (reader.Read()) { var tagName = (string)reader.Value; rule.TagName = tagName; } break; case nameof(TagMatchingRuleDescriptor.ParentTag): if (reader.Read()) { var parentTag = (string)reader.Value; rule.ParentTag = parentTag; } break; case nameof(TagMatchingRuleDescriptor.TagStructure): rule.TagStructure = (TagStructure)reader.ReadAsInt32(); break; case nameof(TagMatchingRuleDescriptor.Attributes): ReadRequiredAttributeValues(reader, rule); break; case nameof(TagMatchingRuleDescriptor.Diagnostics): ReadDiagnostics(reader, rule.Diagnostics); break; } }); }); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType != JsonToken.StartObject) { return(null); } JObject jObject = JObject.Load(reader); string kind = jObject["Kind"].Value <string>(); string name = jObject["Name"].Value <string>(); string assemblyName = jObject["AssemblyName"].Value <string>(); JArray jArray = jObject["TagMatchingRules"].Value <JArray>(); JArray jArray2 = jObject["BoundAttributes"].Value <JArray>(); JArray jArray3 = jObject["AllowedChildTags"].Value <JArray>(); string documentation = jObject["Documentation"].Value <string>(); string tagOutputHint = jObject["TagOutputHint"].Value <string>(); bool caseSensitive = jObject["CaseSensitive"].Value <bool>(); JArray jArray4 = jObject["Diagnostics"].Value <JArray>(); JObject jObject2 = jObject["Metadata"].Value <JObject>(); TagHelperDescriptorBuilder tagHelperDescriptorBuilder = TagHelperDescriptorBuilder.Create(kind, name, assemblyName); tagHelperDescriptorBuilder.Documentation = documentation; tagHelperDescriptorBuilder.TagOutputHint = tagOutputHint; tagHelperDescriptorBuilder.CaseSensitive = caseSensitive; foreach (JToken item2 in jArray) { JObject rule = item2.Value <JObject>(); tagHelperDescriptorBuilder.TagMatchingRule(delegate(TagMatchingRuleDescriptorBuilder b) { ReadTagMatchingRule(b, rule, serializer); }); } foreach (JToken item3 in jArray2) { JObject attribute = item3.Value <JObject>(); tagHelperDescriptorBuilder.BindAttribute(delegate(BoundAttributeDescriptorBuilder b) { ReadBoundAttribute(b, attribute, serializer); }); } foreach (JToken item4 in jArray3) { JObject tag = item4.Value <JObject>(); tagHelperDescriptorBuilder.AllowChildTag(delegate(AllowedChildTagDescriptorBuilder childTagBuilder) { ReadAllowedChildTag(childTagBuilder, tag, serializer); }); } foreach (JToken item5 in jArray4) { JsonReader reader2 = item5.CreateReader(); RazorDiagnostic item = serializer.Deserialize <RazorDiagnostic>(reader2); tagHelperDescriptorBuilder.Diagnostics.Add(item); } JsonReader reader3 = jObject2.CreateReader(); foreach (KeyValuePair <string, string> item6 in serializer.Deserialize <Dictionary <string, string> >(reader3)) { tagHelperDescriptorBuilder.Metadata[item6.Key] = item6.Value; } return(tagHelperDescriptorBuilder.Build()); }