Add pug and html renderer. Implement hidden flag.
This commit is contained in:
parent
aa563e60ea
commit
3684688cdc
16 changed files with 119 additions and 33 deletions
15
.nvim.lua
Normal file
15
.nvim.lua
Normal file
|
@ -0,0 +1,15 @@
|
|||
return {
|
||||
fzf_ignore_dirs = {
|
||||
"node_modules",
|
||||
"dist",
|
||||
"build",
|
||||
".next",
|
||||
"coverage"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
use('prettier/vim-prettier')
|
||||
vim.g['prettier#autoformat'] = 1
|
||||
vim.g['prettier#quickfix_enabled'] = 0
|
||||
|
|
@ -4,7 +4,7 @@ nav
|
|||
h2(style="font-size: 15px; margin-top: -0.5em;") and this is my notepad.
|
||||
hr.hr-text(data-content="Contents")
|
||||
ul#blog-posts.posts
|
||||
each page in context.pages
|
||||
each page in context.pages.filter(it => it.showInMenu)
|
||||
li
|
||||
span »
|
||||
a(href=page.url, style=(page.isCurrent ? "font-weight: bold;" : ""))= page.title
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/artur-gurgul-pro/sajt.git"
|
||||
"url": "https://gurgul.pro/app/sajt.git"
|
||||
},
|
||||
"keywords": [
|
||||
"generator",
|
||||
|
@ -31,7 +31,7 @@
|
|||
"bugs": {
|
||||
"url": "https://github.com/artur-gurgul-pro/sajt/issues"
|
||||
},
|
||||
"homepage": "https://github.com/artur-gurgul-pro/sajt#readme",
|
||||
"homepage": "http://gurgul.pro/",
|
||||
"dependencies": {
|
||||
"chalk": "^5.4.1",
|
||||
"commander": "^14.0.0",
|
||||
|
|
|
@ -41,10 +41,11 @@ export default class Page {
|
|||
this.fileName = dirArray.pop() || ""
|
||||
dirArray.shift()
|
||||
this.dir = dirArray
|
||||
this.hidden = this.file.data?.hidden || false
|
||||
|
||||
// TODO: if tilte do not exists search in markdown for # title
|
||||
this.title = this.file.data.title
|
||||
this.layout = this.file.data.layout || "default"
|
||||
|
||||
this.hidden = this.file.data?.hidden || this.title == undefined || this.title.trim() == ""
|
||||
}
|
||||
}
|
|
@ -9,8 +9,11 @@ import pug from 'pug'
|
|||
|
||||
import utils from "./utils.js"
|
||||
|
||||
import Markdown from './markdown.js'
|
||||
import Yaml from './yaml.js'
|
||||
import Markdown from './renderer/markdown.js'
|
||||
import Yaml from './renderer/yaml.js'
|
||||
import Pug from './renderer/pug.js'
|
||||
import Html from './renderer/html.js'
|
||||
|
||||
import Page from './page.js'
|
||||
|
||||
export default class Project {
|
||||
|
@ -38,16 +41,19 @@ export default class Project {
|
|||
}
|
||||
|
||||
loadPages(): Page[] {
|
||||
const mdParser = new Markdown()
|
||||
const yamlParser = new Yaml()
|
||||
const parsers = [new Markdown(), new Yaml(), new Pug(), new Html()]
|
||||
const pages = Array<Page>()
|
||||
|
||||
let listMD = utils.getAllFilesWithExtension('.',".md", this.config.config.ignore)
|
||||
.map(path => new Page(path, mdParser))
|
||||
for(const parser of parsers) {
|
||||
for(const extension of parser.fileExtensions) {
|
||||
let newPages = utils
|
||||
.getAllFilesWithExtension('.', `.${extension}`, this.config.config.ignore)
|
||||
.map(path => new Page(path, parser))
|
||||
pages.push(...newPages)
|
||||
}
|
||||
}
|
||||
|
||||
let listYML = utils.getAllFilesWithExtension('.',".yml", this.config.config.ignore)
|
||||
.map(path => new Page(path, yamlParser))
|
||||
|
||||
return listMD.concat(listYML)
|
||||
return pages
|
||||
}
|
||||
|
||||
compile(page: Page) {
|
||||
|
@ -75,6 +81,7 @@ export default class Project {
|
|||
pages: this.pages.map(it => { return {
|
||||
title: it.title,
|
||||
isCurrent: page == it,
|
||||
showInMenu: it.hidden == false,
|
||||
url: it.finalPath,
|
||||
isDir: false
|
||||
}})
|
||||
|
|
|
@ -6,5 +6,6 @@ export interface File {
|
|||
|
||||
export default interface Renderer {
|
||||
get name(): string
|
||||
get fileExtensions(): Array<string>
|
||||
loadAsHTML(path: string): File
|
||||
}
|
19
src/renderer/html.ts
Normal file
19
src/renderer/html.ts
Normal file
|
@ -0,0 +1,19 @@
|
|||
import Renderer , {File} from "../renderer.js"
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import matter from 'gray-matter'
|
||||
|
||||
export default class Html implements Renderer {
|
||||
name = "html"
|
||||
fileExtensions = ["htm", "html"]
|
||||
|
||||
loadAsHTML(filePath: string): File {
|
||||
const fileContents = fs.readFileSync(path.join("./", filePath), 'utf8')
|
||||
const { data: metadata, content: htmlContent } = matter(fileContents)
|
||||
|
||||
return {
|
||||
data: metadata,
|
||||
html: htmlContent
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
import Parser , {File} from "./renderer.js"
|
||||
import Parser , {File} from "./../renderer.js"
|
||||
|
||||
import hljs from 'highlight.js'
|
||||
import { marked } from 'marked'
|
||||
|
@ -17,6 +17,7 @@ marked.use(markedHighlight({
|
|||
|
||||
export default class Markdown implements Parser {
|
||||
name = "md"
|
||||
fileExtensions = ["md", "markdown"]
|
||||
|
||||
loadAsHTML(filePath: string): File {
|
||||
const fileContents = fs.readFileSync(path.join("./", filePath), 'utf8')
|
||||
|
@ -35,7 +36,6 @@ renderer.paragraph = (text) => {
|
|||
return text.text
|
||||
}
|
||||
|
||||
|
||||
export function parseMarkdown(obj: any) {
|
||||
for (let key in obj) {
|
||||
if (typeof obj[key] === 'object' && obj[key] !== null) {
|
20
src/renderer/pug.ts
Normal file
20
src/renderer/pug.ts
Normal file
|
@ -0,0 +1,20 @@
|
|||
import pug from 'pug'
|
||||
import Renderer , {File} from "../renderer.js"
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import matter from 'gray-matter'
|
||||
|
||||
export default class Pug implements Renderer {
|
||||
name = "pug"
|
||||
fileExtensions = ["pug"]
|
||||
|
||||
loadAsHTML(filePath: string): File {
|
||||
const fileContents = fs.readFileSync(path.join("./", filePath), 'utf8')
|
||||
const { data: metadata, content: pugContent } = matter(fileContents)
|
||||
|
||||
return {
|
||||
data: metadata,
|
||||
html: pug.render(pugContent)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,17 +1,14 @@
|
|||
import yaml from 'js-yaml'
|
||||
import Renderer , {File} from "./renderer.js"
|
||||
import Renderer , {File} from "../renderer.js"
|
||||
import fs from 'fs'
|
||||
|
||||
export default class Yaml implements Renderer {
|
||||
name = "yml"
|
||||
fileExtensions = ["yml"]
|
||||
|
||||
loadAsHTML(file: string): File {
|
||||
const fileContents = fs.readFileSync(file, 'utf8')
|
||||
|
||||
// let data = {...site.data}
|
||||
// delete data.layout
|
||||
// parseMarkdown(data)
|
||||
|
||||
return {
|
||||
data: yaml.load(fileContents) as { [key: string]: any },
|
||||
html: ""
|
1
types/renderer.d.ts
vendored
1
types/renderer.d.ts
vendored
|
@ -6,5 +6,6 @@ export interface File {
|
|||
}
|
||||
export default interface Renderer {
|
||||
get name(): string;
|
||||
get fileExtensions(): Array<string>;
|
||||
loadAsHTML(path: string): File;
|
||||
}
|
||||
|
|
6
types/renderer/html.d.ts
vendored
Normal file
6
types/renderer/html.d.ts
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
import Renderer, { File } from "../renderer.js";
|
||||
export default class Html implements Renderer {
|
||||
name: string;
|
||||
fileExtensions: string[];
|
||||
loadAsHTML(filePath: string): File;
|
||||
}
|
7
types/renderer/markdown.d.ts
vendored
Normal file
7
types/renderer/markdown.d.ts
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
import Parser, { File } from "./../renderer.js";
|
||||
export default class Markdown implements Parser {
|
||||
name: string;
|
||||
fileExtensions: string[];
|
||||
loadAsHTML(filePath: string): File;
|
||||
}
|
||||
export declare function parseMarkdown(obj: any): void;
|
6
types/renderer/pug.d.ts
vendored
Normal file
6
types/renderer/pug.d.ts
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
import Renderer, { File } from "../renderer.js";
|
||||
export default class Pug implements Renderer {
|
||||
name: string;
|
||||
fileExtensions: string[];
|
||||
loadAsHTML(filePath: string): File;
|
||||
}
|
6
types/renderer/yaml.d.ts
vendored
Normal file
6
types/renderer/yaml.d.ts
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
import Renderer, { File } from "../renderer.js";
|
||||
export default class Yaml implements Renderer {
|
||||
name: string;
|
||||
fileExtensions: string[];
|
||||
loadAsHTML(file: string): File;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue