public override IInjectedNodeContext CreateInjectedNodeContext(IInjectedFileContext fileContext, ITreeNode originalNode) { var htmlAttributeValue = originalNode as IHtmlAttributeValue; if (htmlAttributeValue == null) { Logger.Fail("Original node is not IHtmlAttributeValue"); return(null); } // Ignore the attribute quotes var stringBuilder = new StringBuilder(htmlAttributeValue.GetTextLength() - 2); // TODO: Why do html attributes have multiple value elements? foreach (var valueElement in htmlAttributeValue.ValueElements) { valueElement.GetText(stringBuilder); } var buffer = new StringBuilderBuffer(stringBuilder); var languageService = AngularJsLanguage.Instance.LanguageService(); var originalStartOffset = htmlAttributeValue.LeadingQuote == null ? 0 : htmlAttributeValue.LeadingQuote.GetTextLength(); var originalEndOffset = originalStartOffset + buffer.Length; var context = CreateInjectedFileAndContext(fileContext, originalNode, buffer, languageService, originalStartOffset, originalEndOffset); Assertion.Assert(context.RangeTranslator is InjectedRangeTranslator, "RangeTranslator is not an instance of InjectedRangeTranslator"); // TODO: This is funky. We need a better way of passing context to the generated file // IAngularJsFile? Have a secondary file with islands rather than individual files? var htmlEntry = HtmlAttributeValueEntry.CreateFromElement(htmlAttributeValue); if (!htmlEntry.IsEmpty) { var declaredElement = htmlEntry.AttributeResolution as IHtmlAttributeDeclaredElement; if (declaredElement != null) { context.GeneratedFile.UserData.PutData(AngularJsFileData.OriginalAttributeType, declaredElement.ValueType.Name); } } return(context); }
public override IInjectedNodeContext CreateInjectedNodeContext(IInjectedFileContext fileContext, ITreeNode originalNode) { var htmlAttributeValue = originalNode as IHtmlAttributeValue; if (htmlAttributeValue == null) { Logger.Fail("Original node is not IHtmlAttributeValue"); return null; } // Ignore the attribute quotes var stringBuilder = new StringBuilder(htmlAttributeValue.GetTextLength() - 2); // TODO: Why do html attributes have multiple value elements? foreach (var valueElement in htmlAttributeValue.ValueElements) valueElement.GetText(stringBuilder); var buffer = new StringBuilderBuffer(stringBuilder); var languageService = AngularJsLanguage.Instance.LanguageService(); var originalStartOffset = htmlAttributeValue.LeadingQuote == null ? 0 : htmlAttributeValue.LeadingQuote.GetTextLength(); var originalEndOffset = originalStartOffset + buffer.Length; var context = CreateInjectedFileAndContext(fileContext, originalNode, buffer, languageService, originalStartOffset, originalEndOffset); Assertion.Assert(context.RangeTranslator is InjectedRangeTranslator, "RangeTranslator is not an instance of InjectedRangeTranslator"); // TODO: This is funky. We need a better way of passing context to the generated file // IAngularJsFile? Have a secondary file with islands rather than individual files? var htmlEntry = HtmlAttributeValueEntry.CreateFromElement(htmlAttributeValue); if (!htmlEntry.IsEmpty) { var declaredElement = htmlEntry.AttributeResolution as IHtmlAttributeDeclaredElement; if (declaredElement != null) { context.GeneratedFile.UserData.PutData(AngularJsFileData.OriginalAttributeType, declaredElement.ValueType.Name); } } return context; }