Esempio n. 1
0
        private Task OnPrePublishFile(ILocation outLoc, PrePublishFileArgs args)
        {
            var path = args.File.Location.ToPath();

            var opts = m_Settings.IgnoreMatchCase ? RegexOptions.IgnoreCase : RegexOptions.None;

            if (m_Settings.MatchPattern.Any(p => Regex.IsMatch(path, p, opts)))
            {
                var quantizer = new WuQuantizer();

                using (var inStr = new MemoryStream(args.File.Content))
                {
                    inStr.Seek(0, SeekOrigin.Begin);

                    using (var img = Image.FromStream(inStr))
                    {
                        using (var bmp = new Bitmap(img))
                        {
                            using (var outStr = new MemoryStream())
                            {
                                using (var quantized = quantizer.QuantizeImage(bmp))
                                {
                                    quantized.Save(outStr, img.RawFormat);
                                    outStr.Seek(0, SeekOrigin.Begin);
                                    args.File = new PluginFile(outStr.GetBuffer(), args.File.Location);
                                }
                            }
                        }
                    }
                }
            }

            return(Task.CompletedTask);
        }
Esempio n. 2
0
        private Task OnPrePublishFile(ILocation outLoc, PrePublishFileArgs args)
        {
            args.SkipFile = m_Settings.ExcludeSnippets &&
                            m_SnippetFileIds.Contains(args.File.Id);

            return(Task.CompletedTask);
        }
Esempio n. 3
0
 public Task PrePublishFile(ILocation outLoc, PrePublishFileArgs args)
 {
     if (RequestPrePublishFile != null)
     {
         return(RequestPrePublishFile.Invoke(outLoc, args));
     }
     else
     {
         return(Task.CompletedTask);
     }
 }
Esempio n. 4
0
        private async Task OnRequestPrePublishFile(ILocation outLoc, PrePublishFileArgs args)
        {
            if (PrePublishFile != null)
            {
                foreach (PrePublishFileDelegate del in PrePublishFile.GetInvocationList())
                {
                    var thisArg = new PrePublishFileArgs()
                    {
                        File     = args.File,
                        SkipFile = false
                    };

                    await del.Invoke(outLoc, thisArg);

                    args.File      = thisArg.File;
                    args.SkipFile |= thisArg.SkipFile;
                }
            }
        }
Esempio n. 5
0
        public async Task Write(ILocation loc, IAsyncEnumerable <IFile> files)
        {
            var outDir = loc.ToPath();

            await m_TargetCleaner.ClearDirectory(loc);

            await foreach (var file in files)
            {
                var outFilePath = file.Location.ToPath();

                if (!Path.IsPathRooted(outFilePath))
                {
                    outFilePath = Path.Combine(outDir, outFilePath);
                }

                var outLoc = Location.FromPath(outFilePath);

                var args = new PrePublishFileArgs()
                {
                    File     = new Data.File(outLoc, file.Content, file.Id),
                    SkipFile = false
                };

                await m_Ext.PrePublishFile(loc, args);

                if (!args.SkipFile)
                {
                    await WriteFile(args.File);
                }
            }

            var additionalFiles = m_Ext.PostAddPublishFiles(loc);

            if (additionalFiles != null)
            {
                await foreach (var addFile in additionalFiles)
                {
                    await WriteFile(addFile);
                }
            }

            await m_Ext.PostPublish(loc);
        }
Esempio n. 6
0
        private Task OnPrePublishFile(ILocation outLoc, PrePublishFileArgs args)
        {
            var ext = Path.GetExtension(args.File.Location.FileName).ToLower();
            var url = args.File.Location.GetRelative(outLoc).ToUrl();

            var isInScope = m_Setts.AssetsScopePaths?.Any(s => PathHelper.Matches(url, s)) != false;

            var bundle = m_Setts.Bundles.FirstOrDefault(
                b => b.Value.Contains(url, StringComparer.InvariantCultureIgnoreCase)).Key;

            if (isInScope)
            {
                switch (ext)
                {
                case ".css":

                    if (m_Setts.MinifyCss)
                    {
                        if (!args.File.Location.FileName
                            .EndsWith(".min.css", StringComparison.CurrentCultureIgnoreCase))
                        {
                            var txt = args.File.AsTextContent();
                            var css = new CssCompressor();
                            if (!string.IsNullOrEmpty(txt))
                            {
                                var cssComp = css.Compress(txt);
                                args.File = new PluginFile(cssComp, args.File.Location, args.File.Id);
                            }
                        }
                    }

                    if (m_Setts.DeleteUnusedCss)
                    {
                        m_DeferredStyles.Add(args.File);
                        args.SkipFile = true;
                    }

                    break;

                case ".js":

                    if (m_Setts.MinifyJs)
                    {
                        if (!args.File.Location.FileName
                            .EndsWith(".min.js", StringComparison.CurrentCultureIgnoreCase))
                        {
                            var txt = args.File.AsTextContent();

                            if (!string.IsNullOrEmpty(txt))
                            {
                                var js     = new JavaScriptCompressor();
                                var jsComp = js.Compress(txt);
                                args.File = new PluginFile(jsComp, args.File.Location, args.File.Id);
                            }
                        }
                    }

                    if (m_Setts.DeleteUnusedJs)
                    {
                        m_DeferredScripts.Add(args.File);
                        args.SkipFile = true;
                    }

                    break;
                }
            }

            if (!string.IsNullOrEmpty(bundle))
            {
                m_BundlesContent[bundle].AppendLine(args.File.AsTextContent());
            }

            return(Task.CompletedTask);
        }