Пример #1
0
        private TranslatorOutputItem Combine(TranslatorOutputItem target, List <TranslatorOutputItem> outputs, string fileName, string message, TranslatorOutputKind outputKind, TranslatorOutputType[] filter = null)
        {
            this.Log.Trace("There are " + outputs.Count + " " + message);

            if (outputs.Count <= 0)
            {
                this.Log.Trace("Skipping combining " + message + " as empty.");
                return(null);
            }

            if (filter == null)
            {
                filter = new[] { TranslatorOutputType.JavaScript };
            }

            if (target != null)
            {
                this.Log.Trace("Using exisiting target " + target.Name);
            }
            else
            {
                this.Log.Trace("Using " + fileName + " as a fileName for combined " + message);
            }

            StringBuilder buffer         = null;
            StringBuilder minifiedBuffer = null;

            if (this.AssemblyInfo.OutputFormatting != JavaScriptOutputType.Minified)
            {
                buffer = target != null
                            ? target.Content.Builder
                            : new StringBuilder();
            }

            if (this.AssemblyInfo.OutputFormatting != JavaScriptOutputType.Formatted)
            {
                minifiedBuffer = (target != null && target.MinifiedVersion != null)
                                    ? target.MinifiedVersion.Content.Builder
                                    : new StringBuilder();
            }

            bool firstLine = true;

            foreach (var output in outputs)
            {
                if (filter != null && !filter.Contains(output.OutputType))
                {
                    continue;
                }

                string formattedContent = null;
                string minifiedContent  = null;

                if (!output.IsEmpty)
                {
                    formattedContent = output.Content.GetContentAsString();
                }

                if (output.MinifiedVersion != null && !output.MinifiedVersion.IsEmpty)
                {
                    minifiedContent = output.MinifiedVersion.Content.GetContentAsString();
                }

                if (formattedContent == null && minifiedContent == null)
                {
                    output.IsEmpty = true;
                    if (output.MinifiedVersion != null)
                    {
                        output.MinifiedVersion.IsEmpty = true;
                    }

                    this.Log.Trace("Skipping " + output.Name + " as it does not have formatted content nor minified.");
                    continue;
                }

                if (buffer != null)
                {
                    if (!firstLine)
                    {
                        firstLine = false;
                        NewLine(buffer);
                    }

                    firstLine = false;

                    if (formattedContent != null)
                    {
                        buffer.Append(formattedContent);
                    }
                    else if (minifiedContent != null)
                    {
                        buffer.Append(minifiedContent);
                    }
                }

                if (minifiedBuffer != null)
                {
                    if (minifiedContent != null)
                    {
                        minifiedBuffer.Append(minifiedContent);
                    }
                    else
                    {
                        this.Log.Warn("Output " + output.Name + " does not contain minified version");
                    }
                }

                output.IsEmpty = true;

                if (output.MinifiedVersion != null)
                {
                    output.MinifiedVersion.IsEmpty = true;
                }
            }

            if (target != null)
            {
                return(target);
            }

            var adjustedFileName = fileName.Replace(":", "_");
            var fileNameLenth    = fileName.Length;

            while (Path.IsPathRooted(adjustedFileName))
            {
                adjustedFileName = adjustedFileName.TrimStart(Path.DirectorySeparatorChar, '/', '\\');

                if (adjustedFileName.Length == fileNameLenth)
                {
                    break;
                }

                fileNameLenth = adjustedFileName.Length;
            }

            if (adjustedFileName != fileName)
            {
                fileName = adjustedFileName;
                this.Log.Trace("Adjusted fileName: " + fileName);
            }

            var checkExtentionFileName = FileHelper.CheckFileNameAndOutputType(fileName, TranslatorOutputType.JavaScript);

            if (checkExtentionFileName != null)
            {
                fileName = checkExtentionFileName;
                this.Log.Trace("Extention checked fileName: " + fileName);
            }

            var r = new TranslatorOutputItem
            {
                Content    = buffer,
                OutputType = TranslatorOutputType.JavaScript,
                OutputKind = outputKind | TranslatorOutputKind.Combined,
                Name       = fileName
            };

            if (minifiedBuffer != null)
            {
                var minifiedName = FileHelper.GetMinifiedJSFileName(r.Name);

                r.MinifiedVersion = new TranslatorOutputItem
                {
                    IsMinified = true,
                    Name       = minifiedName,
                    OutputType = r.OutputType,
                    OutputKind = r.OutputKind | TranslatorOutputKind.Minified,
                    Location   = r.Location,
                    Content    = minifiedBuffer
                };
            }

            return(r);
        }
Пример #2
0
        internal static bool AddOutputItem(List <TranslatorOutputItem> target, string fileName, TranslatorOutputItemContent content, TranslatorOutputKind outputKind, string location = null, string assembly = null)
        {
            var fileHelper = new FileHelper();

            var outputType = fileHelper.GetOutputType(fileName);

            TranslatorOutputItem output = null;

            bool isMinJs = fileHelper.IsMinJS(fileName);

            var searchName = fileName;

            if (isMinJs)
            {
                searchName = fileHelper.GetNonMinifiedJSFileName(fileName);
            }

            output = target.FirstOrDefault(x => string.Compare(x.Name, searchName, StringComparison.InvariantCultureIgnoreCase) == 0);

            if (output != null)
            {
                bool isAdded;

                if (isMinJs)
                {
                    isAdded = output.MinifiedVersion == null;

                    output.MinifiedVersion = new TranslatorOutputItem
                    {
                        Name       = fileName,
                        OutputType = outputType,
                        OutputKind = outputKind | TranslatorOutputKind.Minified,
                        Location   = location,
                        Content    = content,
                        IsMinified = true,
                        Assembly   = assembly
                    };
                }
                else
                {
                    isAdded        = output.IsEmpty;
                    output.IsEmpty = false;
                }

                return(isAdded);
            }

            output = new TranslatorOutputItem
            {
                Name       = searchName,
                OutputType = outputType,
                OutputKind = outputKind,
                Location   = location,
                Content    = new TranslatorOutputItemContent((string)null),
                Assembly   = assembly
            };

            if (isMinJs)
            {
                output.IsEmpty = true;

                output.MinifiedVersion = new TranslatorOutputItem
                {
                    Name       = fileName,
                    OutputType = outputType,
                    OutputKind = outputKind | TranslatorOutputKind.Minified,
                    Location   = location,
                    Content    = content,
                    IsMinified = true,
                    Assembly   = assembly
                };
            }
            else
            {
                output.Content = content;
            }

            target.Add(output);

            return(true);
        }