Exemplo n.º 1
0
        public DiffInfo UncommittedDiff(String filePath)
        {
            var targetFileInfo = fileInfoProvider.GetFileInfo(filePath, HttpContext.Request.PathBase);
            var diff           = commitRepository.UncommittedDiff(targetFileInfo);

            diff.FilePath = filePath;
            return(diff);
        }
Exemplo n.º 2
0
        public MergeInfo MergeInfo(String file)
        {
            var targetFileInfo = fileInfoProvider.GetFileInfo(file, pathBase);

            var repoPath = Path.Combine(repo.Info.WorkingDirectory, targetFileInfo.DerivedFileName);

            using (var stream = new StreamReader(fileFinder.ReadFile(fileFinder.GetProjectRelativePath(repoPath))))
            {
                return(new MergeInfo(stream, file));
            }
        }
Exemplo n.º 3
0
        public IActionResult Index(String file)
        {
            try
            {
                targetFileInfo = fileInfoProvider.GetFileInfo(file, HttpContext.Request.PathBase);
                PageDefinition pageSettings;

                switch (targetFileInfo.Extension)
                {
                case ".html":
                    if (targetFileInfo.IsProjectFile)
                    {
                        return(new FileStreamResult(fileFinder.ReadFile(targetFileInfo.HtmlFile), "text/html"));
                    }
                    return(Redirect(targetFileInfo.NoHtmlRedirect));

                case "":
                    var pageStack = CreatePageStack();
                    pageSettings = fileFinder.GetProjectPageDefinition(targetFileInfo);
                    return(buildAsEditor(pageStack, pageSettings.Layout));

                default:
                    pageSettings = fileFinder.GetProjectPageDefinition(targetFileInfo);
                    var  altExt     = targetFileInfo.Extension.TrimStart('.') + ".html";
                    var  layout     = Path.ChangeExtension(pageSettings.Layout, altExt);
                    bool seenBefore = seenExtensions.Contains(layout);
                    if (seenBefore)
                    {
                        //Don't combine these if statements
                        if (altLayoutExtensions.Contains(layout))
                        {
                            return(BuildAsAltPage(layout));
                        }
                    }
                    else
                    {
                        seenExtensions.Add(layout);
                        if (fileFinder.DoesLayoutExist(layout))
                        {
                            altLayoutExtensions.Add(layout);
                            return(BuildAsAltPage(layout));
                        }
                    }
                    return(returnFile(file));
                }
            }
            catch (FileNotFoundException ex)
            {
                var sb = new StringBuilder($"Could not find file '{ex.FileName}' building page for '{file}'. Message:{ex.Message}");
                WriteSearchLocations(sb, ex as PageStackFileNotFoundException);
                logger.LogInformation(sb.ToString());
                throw;
            }
        }
Exemplo n.º 4
0
        public async Task Upload([FromForm] UploadInput input, [FromServices] IFileVerifier fileVerifier)
        {
            var fileInfo = fileInfoProvider.GetFileInfo(input.File, HttpContext.Request.PathBase);

            using (var uploadStream = input.Content.OpenReadStream())
            {
                fileVerifier.Validate(uploadStream, fileInfo.DerivedFileName, input.Content.ContentType);
                using (Stream stream = fileFinder.WriteFile(fileInfo.DerivedFileName))
                {
                    await uploadStream.CopyToAsync(stream);
                }
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Get the current page settings.
        /// </summary>
        /// <param name="page">The name of the file to lookup.</param>
        /// <returns>The PageSettings for the file.</returns>
        public PageSettings GetSettings(String page)
        {
            var    targetFile = fileInfoProvider.GetFileInfo(page, pathBase);
            var    definition = fileFinder.GetProjectPageDefinition(targetFile);
            String title;

            if (!definition.Vars.TryGetValue("title", out title))
            {
                title = "Untitled";
            }
            return(new PageSettings()
            {
                Title = title,
                Visible = !definition.Hidden,
                FilePath = page,
                Layout = definition.Layout
            });
        }
Exemplo n.º 6
0
        /// <summary>
        /// Get the list of pages in draft.
        /// </summary>
        /// <returns>The list of drafted files.</returns>
        public async Task <DraftCollection> List(DraftQuery query)
        {
            DraftCollection collection;

            if (query.File != null) //If file is not null, looking for specific file.
            {
                collection = new DraftCollection(query, 1, new Draft[] { await GetInfo(query.File) });
            }
            else
            {
                IEnumerable <DraftInfo> draftQuery;
                int total = 0;
                if (query.ShowChangedOnly)
                {
                    draftQuery = fileFinder.GetAllDraftables()
                                 .Select(i => fileFinder.GetDraftStatus(i))
                                 .Where(i => i.Status != DraftStatus.UpToDate)
                                 .ToList(); //Cache this in a list, it is slow
                    total      = draftQuery.Count();
                    draftQuery = draftQuery
                                 .Skip(query.SkipTo(total))
                                 .Take(query.Limit);
                }
                else
                {
                    var draftables = fileFinder.GetAllDraftables();
                    total      = draftables.Count();
                    draftQuery = draftables
                                 .Skip(query.SkipTo(total))
                                 .Take(query.Limit)
                                 .Select(i => fileFinder.GetDraftStatus(i));
                }

                var convert = draftQuery.Select(i =>
                {
                    var fileInfo     = fileInfoProvider.GetFileInfo(i.File, pathBase);
                    var pageSettings = fileFinder.GetProjectPageDefinition(fileInfo);
                    return(new Draft(i, pageSettings.Title));
                });
                collection = new DraftCollection(query, total, convert);
            }

            return(collection);
        }
Exemplo n.º 7
0
        public void buildPage(string relativeFile)
        {
            relativeFile = relativeFile.TrimStartingPathChars();

            var outFile = Path.Combine(this.outDir, relativeFile);

            var extension = "json";

            if (OutputExtension != null)
            {
                extension = OutputExtension;
            }
            outFile = Path.ChangeExtension(outFile, extension);

            var fileInfo = fileInfoProvider.GetFileInfo(relativeFile, null);
            TemplateEnvironment environment = new TemplateEnvironment(fileInfo.FileNoExtension, fileFinder, overrideValuesProvider.OverrideVars, null, true);
            PageStack           pageStack   = new PageStack(environment, fileFinder);

            pageStack.ContentFile = fileInfo.HtmlFile;
            if (pageStack.Visible)
            {
                pageStack.ContentTransformer = (content) =>
                {
                    //This removes all html elements and formatting and cleans up the whitespace
                    HtmlDocument htmlDoc = new HtmlDocument();
                    htmlDoc.LoadHtml(content);
                    var escaped = HtmlEntity.DeEntitize(htmlDoc.DocumentNode.InnerText);
                    escaped = escaped.SingleSpaceWhitespace();
                    return(escaped.JsonEscape());
                };
                var pageSettings = fileFinder.GetProjectPageDefinition(fileInfo);
                var layout       = pageSettings.Layout;
                if (OutputExtension != null)
                {
                    layout = Path.ChangeExtension(layout, OutputExtension);
                }
                pageStack.pushLayout(layout);

                var dr       = new PlainTextRenderer(environment, StringExtensions.JsonEscape);
                var document = dr.getDocument(pageStack.Pages);
                var outDir   = Path.GetDirectoryName(outFile);
                if (!Directory.Exists(outDir))
                {
                    Directory.CreateDirectory(outDir);
                }
                using (var writer = new StreamWriter(File.Open(outFile, FileMode.Create, FileAccess.Write, FileShare.None), Encoding.UTF8))
                {
                    writer.Write(document);
                }
            }
        }
Exemplo n.º 8
0
        public void buildPage(String relativeFile)
        {
            relativeFile = relativeFile.TrimStartingPathChars();

            var outFile = Path.Combine(this.outDir, relativeFile);

            if (OutputExtension != null)
            {
                outFile = Path.ChangeExtension(outFile, OutputExtension);
            }

            ITargetFileInfo     fileInfo    = fileInfoProvider.GetFileInfo(relativeFile, null);
            TemplateEnvironment environment = new TemplateEnvironment(fileInfo.FileNoExtension, fileFinder, overrideValuesProvider.OverrideVars, version, true);
            PageStack           pageStack   = new PageStack(environment, fileFinder);

            pageStack.ContentFile = fileInfo.HtmlFile;
            if (pageStack.Visible)
            {
                var pageSettings = fileFinder.GetProjectPageDefinition(fileInfo);
                var layout       = pageSettings.Layout;
                if (OutputExtension != null)
                {
                    layout = Path.ChangeExtension(layout, OutputExtension);
                }
                pageStack.pushLayout(layout);

                var pathBase = environment.PathBase;

                HtmlDocumentRenderer dr = new HtmlDocumentRenderer(environment);
                dr.addTransform(new HashTreeMenus(fileFinder));
                dr.addTransform(new ExpandRootedPaths(pathBase));
                if (!String.IsNullOrEmpty(pathBase))
                {
                    //Safe to fix relative urls last since it wont replace any that already start with the path base.
                    dr.addTransform(new FixRelativeUrls(pathBase));
                }
                var document = dr.getDocument(pageStack.Pages);
                var outDir   = Path.GetDirectoryName(outFile);
                if (!Directory.Exists(outDir))
                {
                    Directory.CreateDirectory(outDir);
                }
                using (var writer = new StreamWriter(File.Open(outFile, FileMode.Create, FileAccess.Write, FileShare.None)))
                {
                    writer.Write(document.DocumentNode.OuterHtml);
                }
                fileFinder.CopyLinkedFiles(this.outDir, pageStack);
            }
        }