Ejemplo n.º 1
0
        private string DoTransform <T>(string preTransform, StringBuilder urls, List <string> transformableMatches, string noCommentTransform) where T : IResourceType
        {
            var resource = RRContainer.Current.GetInstance <T>();

            RRTracer.Trace("Looking for reduction for {0}", urls);
            var transform = reductionRepository.FindReduction(urls.ToString());

            if (transform != null)
            {
                RRTracer.Trace("Reduction found for {0}", urls);
                if (uriBuilder.ParseSignature(transform) != Guid.Empty.RemoveDashes())
                {
                    var firstScript =
                        RRContainer.Current.GetInstance <JavaScriptResource>().ResourceRegex.Match(noCommentTransform);
                    var firstScriptIndex = firstScript.Success ? preTransform.IndexOf(firstScript.ToString(), StringComparison.Ordinal) : -1;
                    var insertionIdx     = (firstScript.Success && firstScriptIndex <
                                            preTransform.IndexOf(transformableMatches[0], StringComparison.Ordinal) && resource is CssResource)
                                           ? firstScriptIndex - 1
                                           : preTransform.IndexOf(transformableMatches[0], StringComparison.Ordinal) - 1;
                    preTransform = preTransform.Insert(insertionIdx + 1, resource.TransformedMarkupTag(transform));
                }
                var result = preTransform;
                foreach (var match in transformableMatches)
                {
                    var idx = result.IndexOf(match, StringComparison.Ordinal);
                    result = result.Remove(idx, match.Length);
                    if (idx == result.Length)
                    {
                        continue;
                    }
                    if (result[idx] == '\r')
                    {
                        result = result.Remove(idx, 1);
                    }
                    if (result[idx] == '\n')
                    {
                        result = result.Remove(idx, 1);
                    }
                }
                return(result);
            }
            var host = string.Empty;

            if (!string.IsNullOrEmpty(config.ContentHost))
            {
                var uri = context.Request.Url;
                if (uri != null)
                {
                    host = string.Format("{0}://{1}/", uri.Scheme, uri.Host);
                }
            }
            reducingQueue.Enqueue(new QueueItem <T> {
                Urls = urls.ToString(), Host = host
            });
            RRTracer.Trace("No reduction found for {0}. Enqueuing.", urls);
            return(preTransform);
        }
Ejemplo n.º 2
0
        private string DoTransform <T>(string preTransform, StringBuilder urls, List <string> transformableMatches) where T : IResourceType
        {
            var resource = RRContainer.Current.GetInstance <T>();

            RRTracer.Trace("Looking for reduction for {0}", urls);
            var transform = reductionRepository.FindReduction(urls.ToString());

            if (transform != null)
            {
                RRTracer.Trace("Reduction found for {0}", urls);
                var closeHeadIdx = (preTransform.StartsWith("<head", StringComparison.OrdinalIgnoreCase) && resource is CssResource) ? preTransform.IndexOf('>') : preTransform.IndexOf(transformableMatches[0]) - 1;
                preTransform = preTransform.Insert(closeHeadIdx + 1, resource.TransformedMarkupTag(transform));
                return(transformableMatches.Aggregate(preTransform, (current, match) => current.Remove(current.IndexOf(match), match.Length)));
            }
            reducingQueue.Enqueue(new QueueItem <T> {
                Urls = urls.ToString()
            });
            RRTracer.Trace("No reduction found for {0}. Enqueuing.", urls);
            return(preTransform);
        }