Пример #1
0
        /// <summary>
        /// 构造函数。
        /// </summary>
        public LeftMenu()
        {
            this.dtSource = new DataTable();
            this.dtSource.Columns.Add("ModuleID", typeof(System.String));
            this.dtSource.Columns.Add("ParentModuleID", typeof(System.String));
            this.dtSource.Columns.Add("ModuleName", typeof(System.String));
            this.dtSource.Columns.Add("ModuleUri", typeof(System.String));
            this.dtSource.Columns.Add("OrderNo", typeof(System.Int32));
            this.dtSource.PrimaryKey = new DataColumn[] { this.dtSource.Columns["ModuleID"] };

            this.presenter = new ModulePresenter<IModuleView>(this);
        }
Пример #2
0
 /// <summary>
 /// 构造函数。
 /// </summary>
 public Footer()
 {
     this.presenter = new ModulePresenter<IModuleView>(this);
 }
Пример #3
0
 /// <summary>
 /// 构造函数。
 /// </summary>
 public Default()
 {
     this.presenter = new ModulePresenter<IModuleView>(this);
 }
Пример #4
0
 /// <summary>
 /// 构造函数。
 /// </summary>
 public ErrorPage()
 {
     this.presenter = new ModulePresenter<IModuleView>(this);
 }
Пример #5
0
        /// <summary>
        /// Generates the output.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="repository">The repository.</param>
        private static void GenerateOutput <T>(ModulePresenter presenter, IGenerator generator, T repository) where T : IRepository <IContentFile>
        {
            foreach (var page in repository.All())
            {
                string strTemplatePath = Path.Combine(TemplateFolder, page.Template);

                if (File.Exists(strTemplatePath) == false)
                {
                    continue;
                }

                string template = Files.ReadAllText(strTemplatePath);

                if (String.IsNullOrEmpty(template))
                {
                    return;
                }

                FileInfo fileInfo      = new FileInfo(page.Filename);
                string   strOutputPath = Path.Combine(OutputFolder, fileInfo.Name.Replace(".md", ".html"));

                dynamic d = new ExpandoObject();
                d.Title     = page.Title;
                d.Slug      = page.Slug;
                d.Permalink = page.Permalink;
                d.Date      = page.Date;
                d.Author    = page.Author;
                d.Excerpt   = page.Excerpt;
                d.Content   = page.ToHtml();

                string output = generator.GenerateOutput(d, template);

                if (String.IsNullOrEmpty(output))
                {
                    return;
                }
                else
                {
                    System.Console.Write("  Writing " + strOutputPath + "... ");
                    Files.WriteAllText(strOutputPath, output, false);

                    foreach (IModuleInfo module in presenter.GetModulesByType(ModuleType.GeneratedFile))
                    {
                        try
                        {
                            module.Execute(new ModuleParameter
                            {
                                Folder      = OutputFolder,
                                Filename    = strOutputPath,
                                ContentFile = page
                            });
                        }
                        catch (Exception)
                        {
                            System.Console.WriteLine("");
                            System.Console.WriteLine($"Failed at {module.GetType().FullName} running {strOutputPath}");
                            System.Console.WriteLine("");
                        }
                    }

                    System.Console.WriteLine("OK.");
                }
            }
        }
Пример #6
0
        /// <summary>
        /// Mains the specified arguments.
        /// </summary>
        /// <param name="args">The arguments.</param>
        static int Main(string[] args)
        {
            if (AppDomain.CurrentDomain.IsDefaultAppDomain())
            {
                return(RunInSecondAppDomain());
            }

            System.Console.WriteLine("Sprint v.1.0 - Static Site Generator for Razor and markdown");
            System.Console.WriteLine("Created by Pedro Fernandes @ Patreo");
            System.Console.WriteLine("-----------------------------------------------------------");
            System.Console.WriteLine("");
            System.Console.WriteLine("Command line parameters:");
            System.Console.WriteLine("  -o | -out: Output folder");
            System.Console.WriteLine("  -t | -templates: Template folder where contains razor and assets files");
            System.Console.WriteLine("");

            CommandLineArgs _args = new CommandLineArgs(args);

            if (_args.TryGetValue("out", out string outputDir))
            {
                OutputFolder = outputDir;
            }
            else
            {
                OutputFolder = Consts.OutputFolder;
            }

            if (_args.TryGetValue("template", out string templateDir))
            {
                TemplateFolder = templateDir;
            }
            else
            {
                TemplateFolder = Consts.TemplateFolder;
            }

            ModulePresenter presenter = new ModulePresenter();

            presenter.Initialize();

            // Create output folder
            System.Console.Write("Creating output folder... ");
            Directories.CreateDirectory(OutputFolder);
            System.Console.WriteLine(Files.GetFileInfo(OutputFolder).FullName);

            // Copy all assets to output folder
            System.Console.Write("Copying assets folder to output folder... ");
            AssetsCopier copier = new AssetsCopier(Path.Combine(TemplateFolder, Consts.AssetsFolder));

            foreach (IModuleInfo module in presenter.GetModulesByType(ModuleType.AssetsFolder))
            {
                try
                {
                    module.Execute(new ModuleParameter
                    {
                        Folder = copier.AssetsFolder
                    });
                }
                catch (Exception)
                {
                    System.Console.WriteLine("");
                    System.Console.WriteLine($"Failed at {module.GetType().FullName} running { copier.AssetsFolder}");
                    System.Console.WriteLine("");
                }
            }

            copier.CopyTo(Path.Combine(OutputFolder, Consts.AssetsFolder));

            foreach (var fileInfo in Directories.FileList(Path.Combine(OutputFolder, Consts.AssetsFolder)))
            {
                foreach (IModuleInfo module in presenter.GetModulesByType(ModuleType.AssetsFile))
                {
                    try
                    {
                        module.Execute(new ModuleParameter
                        {
                            Folder   = fileInfo.Directory.FullName,
                            Filename = fileInfo.FullName
                        });
                    }
                    catch (Exception)
                    {
                        System.Console.WriteLine("");
                        System.Console.WriteLine($"Failed at {module.GetType().FullName} running {fileInfo.FullName}");
                        System.Console.WriteLine("");
                    }
                }
            }

            System.Console.WriteLine(System.IO.Path.Combine(Files.GetFileInfo(OutputFolder).FullName, Consts.AssetsFolder));

            // Initialize render
            System.Console.WriteLine("Starting rendering content...");
            IGenerator generator = new RazorGenerator(new DelegateTemplateManager(name =>
            {
                return(Files.ReadAllText(Path.Combine(TemplateFolder, name)));
            }));

            // Generate pages and posts
            foreach (IModuleInfo module in presenter.GetModulesByType(ModuleType.ProcessingStarted))
            {
                try
                {
                    module.Execute(new ModuleParameter
                    {
                        Folder = OutputFolder
                    });
                }
                catch (Exception)
                {
                    System.Console.WriteLine("");
                    System.Console.WriteLine($"Failed at {module.GetType().FullName} running {OutputFolder}");
                    System.Console.WriteLine("");
                }
            }

            GenerateOutput(presenter, generator, new GenericRepository());
            GenerateOutput(presenter, generator, new PageRepository());
            GenerateOutput(presenter, generator, new PostRepository());

            foreach (IModuleInfo module in presenter.GetModulesByType(ModuleType.ProcessingEnded))
            {
                try
                {
                    module.Execute(new ModuleParameter
                    {
                        Folder = OutputFolder
                    });
                }
                catch (Exception)
                {
                    System.Console.WriteLine("");
                    System.Console.WriteLine($"Failed at {module.GetType().FullName} running {OutputFolder}");
                    System.Console.WriteLine("");
                }
            }

            System.Console.WriteLine("");
            System.Console.WriteLine("Done.");
            System.Console.WriteLine("Thanks for your patience.");

            return(0);
        }
Пример #7
0
 /// <summary>
 /// 构造函数。
 /// </summary>
 public MainMenu()
 {
     this.presenter = new ModulePresenter<IModuleView>(this);
 }
Пример #8
0
 /// <summary>
 /// 构造函数。
 /// </summary>
 public UCIndexBanner()
 {
     this.presenter = new ModulePresenter<IModuleView>(this);
 }
Пример #9
0
 /// <summary>
 /// 构造函数。
 /// </summary>
 public TaskView()
 {
     this.presenter = new ModulePresenter<IModuleView>(this);
 }
Пример #10
0
 /// <summary>
 /// 构造函数。
 /// </summary>
 public Index()
 {
     this.presenter = new ModulePresenter<IModuleView>(this);
 }
Пример #11
0
 /// <summary>
 /// 构造函数。
 /// </summary>
 public DesktopCenter()
 {
     this.presenter = new ModulePresenter<IModuleView>(this);
 }