コード例 #1
0
        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);
        }
コード例 #2
0
        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;
        }