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.
|
h2(style="font-size: 15px; margin-top: -0.5em;") and this is my notepad.
|
||||||
hr.hr-text(data-content="Contents")
|
hr.hr-text(data-content="Contents")
|
||||||
ul#blog-posts.posts
|
ul#blog-posts.posts
|
||||||
each page in context.pages
|
each page in context.pages.filter(it => it.showInMenu)
|
||||||
li
|
li
|
||||||
span »
|
span »
|
||||||
a(href=page.url, style=(page.isCurrent ? "font-weight: bold;" : ""))= page.title
|
a(href=page.url, style=(page.isCurrent ? "font-weight: bold;" : ""))= page.title
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git+https://github.com/artur-gurgul-pro/sajt.git"
|
"url": "https://gurgul.pro/app/sajt.git"
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"generator",
|
"generator",
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/artur-gurgul-pro/sajt/issues"
|
"url": "https://github.com/artur-gurgul-pro/sajt/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/artur-gurgul-pro/sajt#readme",
|
"homepage": "http://gurgul.pro/",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"chalk": "^5.4.1",
|
"chalk": "^5.4.1",
|
||||||
"commander": "^14.0.0",
|
"commander": "^14.0.0",
|
||||||
|
|
|
@ -41,10 +41,11 @@ export default class Page {
|
||||||
this.fileName = dirArray.pop() || ""
|
this.fileName = dirArray.pop() || ""
|
||||||
dirArray.shift()
|
dirArray.shift()
|
||||||
this.dir = dirArray
|
this.dir = dirArray
|
||||||
this.hidden = this.file.data?.hidden || false
|
|
||||||
|
|
||||||
// TODO: if tilte do not exists search in markdown for # title
|
// TODO: if tilte do not exists search in markdown for # title
|
||||||
this.title = this.file.data.title
|
this.title = this.file.data.title
|
||||||
this.layout = this.file.data.layout || "default"
|
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 utils from "./utils.js"
|
||||||
|
|
||||||
import Markdown from './markdown.js'
|
import Markdown from './renderer/markdown.js'
|
||||||
import Yaml from './yaml.js'
|
import Yaml from './renderer/yaml.js'
|
||||||
|
import Pug from './renderer/pug.js'
|
||||||
|
import Html from './renderer/html.js'
|
||||||
|
|
||||||
import Page from './page.js'
|
import Page from './page.js'
|
||||||
|
|
||||||
export default class Project {
|
export default class Project {
|
||||||
|
@ -38,16 +41,19 @@ export default class Project {
|
||||||
}
|
}
|
||||||
|
|
||||||
loadPages(): Page[] {
|
loadPages(): Page[] {
|
||||||
const mdParser = new Markdown()
|
const parsers = [new Markdown(), new Yaml(), new Pug(), new Html()]
|
||||||
const yamlParser = new Yaml()
|
const pages = Array<Page>()
|
||||||
|
|
||||||
let listMD = utils.getAllFilesWithExtension('.',".md", this.config.config.ignore)
|
for(const parser of parsers) {
|
||||||
.map(path => new Page(path, mdParser))
|
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)
|
return pages
|
||||||
.map(path => new Page(path, yamlParser))
|
|
||||||
|
|
||||||
return listMD.concat(listYML)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
compile(page: Page) {
|
compile(page: Page) {
|
||||||
|
@ -75,6 +81,7 @@ export default class Project {
|
||||||
pages: this.pages.map(it => { return {
|
pages: this.pages.map(it => { return {
|
||||||
title: it.title,
|
title: it.title,
|
||||||
isCurrent: page == it,
|
isCurrent: page == it,
|
||||||
|
showInMenu: it.hidden == false,
|
||||||
url: it.finalPath,
|
url: it.finalPath,
|
||||||
isDir: false
|
isDir: false
|
||||||
}})
|
}})
|
||||||
|
|
|
@ -6,5 +6,6 @@ export interface File {
|
||||||
|
|
||||||
export default interface Renderer {
|
export default interface Renderer {
|
||||||
get name(): string
|
get name(): string
|
||||||
|
get fileExtensions(): Array<string>
|
||||||
loadAsHTML(path: string): File
|
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 hljs from 'highlight.js'
|
||||||
import { marked } from 'marked'
|
import { marked } from 'marked'
|
||||||
|
@ -17,6 +17,7 @@ marked.use(markedHighlight({
|
||||||
|
|
||||||
export default class Markdown implements Parser {
|
export default class Markdown implements Parser {
|
||||||
name = "md"
|
name = "md"
|
||||||
|
fileExtensions = ["md", "markdown"]
|
||||||
|
|
||||||
loadAsHTML(filePath: string): File {
|
loadAsHTML(filePath: string): File {
|
||||||
const fileContents = fs.readFileSync(path.join("./", filePath), 'utf8')
|
const fileContents = fs.readFileSync(path.join("./", filePath), 'utf8')
|
||||||
|
@ -35,7 +36,6 @@ renderer.paragraph = (text) => {
|
||||||
return text.text
|
return text.text
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export function parseMarkdown(obj: any) {
|
export function parseMarkdown(obj: any) {
|
||||||
for (let key in obj) {
|
for (let key in obj) {
|
||||||
if (typeof obj[key] === 'object' && obj[key] !== null) {
|
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 yaml from 'js-yaml'
|
||||||
import Renderer , {File} from "./renderer.js"
|
import Renderer , {File} from "../renderer.js"
|
||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
|
|
||||||
export default class Yaml implements Renderer {
|
export default class Yaml implements Renderer {
|
||||||
name = "yml"
|
name = "yml"
|
||||||
|
fileExtensions = ["yml"]
|
||||||
|
|
||||||
loadAsHTML(file: string): File {
|
loadAsHTML(file: string): File {
|
||||||
const fileContents = fs.readFileSync(file, 'utf8')
|
const fileContents = fs.readFileSync(file, 'utf8')
|
||||||
|
|
||||||
// let data = {...site.data}
|
|
||||||
// delete data.layout
|
|
||||||
// parseMarkdown(data)
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
data: yaml.load(fileContents) as { [key: string]: any },
|
data: yaml.load(fileContents) as { [key: string]: any },
|
||||||
html: ""
|
html: ""
|
1
types/renderer.d.ts
vendored
1
types/renderer.d.ts
vendored
|
@ -6,5 +6,6 @@ export interface File {
|
||||||
}
|
}
|
||||||
export default interface Renderer {
|
export default interface Renderer {
|
||||||
get name(): string;
|
get name(): string;
|
||||||
|
get fileExtensions(): Array<string>;
|
||||||
loadAsHTML(path: string): File;
|
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