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); }
private Task OnPrePublishFile(ILocation outLoc, PrePublishFileArgs args) { args.SkipFile = m_Settings.ExcludeSnippets && m_SnippetFileIds.Contains(args.File.Id); return(Task.CompletedTask); }
public Task PrePublishFile(ILocation outLoc, PrePublishFileArgs args) { if (RequestPrePublishFile != null) { return(RequestPrePublishFile.Invoke(outLoc, args)); } else { return(Task.CompletedTask); } }
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; } } }
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); }
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); }