papoGen

papoGen

npm version npm downloads

Using paper.css and Pug to generate.

If you feel papogen is good, hope you can give a star!


About

papoGen is a static webpage's generator. To generate a webpage, you won't need to have web develop experience. Only need do is know the format of Markdown, JSON and YAML. Then you can generate your own webpage by our pre-defined templates. Besides, if you want to design your own style of web page, you can also develop your own template by papoGen without having too much time. papoGen is developed by Toolbuddy. If you have like papoGen or our other tools, please give us a "star"! If you have any problem or suggestion, please feel free to contact with us. We'd love to help you.


Demo

JSON format:

YAML format:

Markdown format:

papogen format:

Demonstration

以下展示了如何透過 papoGen 來快速生成一個網頁,使用者可以透過 CLI 指令來做產生; 以下會展示如何使用、以及指令參數的意義

  • 測試來源腳本放置於 src/ 底下,並透過不同來源種類做資料夾分類
  • 產生的結果放置於 out/ 底下,一樣透過來源種類做分類

Get Started

  • 安裝 Node.js
    • Linux 可以透過指令安裝:
      $ source <(curl -s https://raw.githubusercontent.com/toolbuddy/ssfw/master/install_nodejs.sh)
      
  • 透過 npm 安裝 papogen
    $ [sudo] npm install -g papogen
    

Help Manual:

任何疑惑可以下 -h 的參數做察看

papogen -h

完成基本需求後,可以進到下面的練習部份囉!

(注意! 以下練習都是在這個 example/ 資料夾中做的演示!)

Markdown (Recommended)

  • 運行範例指令:
    $ papogen -s src/md -o out/md -g md -m md_doc
    
  • 解釋
    • -s 指定了來源,這邊因為要使用 Markdown 格式,所以使用 test/md 底下的所有檔案
    • -o 則是指定輸出的位置,這邊會輸出一份靜態網頁(可以透過 google-chrome-stable out/md/index.html 或是 firefox out/md/index.html 來做開啟 )
    • -g 則是指定我們要用的來源格式,這邊我們要用的是 Markdown 格式,所以給予 md 的值
    • -m 這邊則是指定網站的版型,目前 Markdown 的支援只有 md_doc,也就是 document 的格式 (支援版型可以參考根目錄中 lib/template/ 裡頭的 Pug.js
  • 額外內容
    • -t 可以指定產生網頁的標題
    • --theme 可以指定 CSS theme template (正在籌備其他 CSS 主題當中)

JSON

  • 運行範例指令

    # 產生 document 版型 - doc
    $ papogen -s src/json -o out/json -m doc
    # 產生 resume 版型 - resume
    $ papogen -s src/json -o out/json -m resume
    
  • 解釋

    • -s 指定了來源,這邊因為要使用 JSON 格式,所以使用 test/json 底下的所有檔案
    • -o 則是指定輸出的位置,這邊會輸出一份靜態網頁
    • 由於 papogen 預設是以 JSON 格式來做輸出,所以如果要產生 JSON 格式,可以不需要指定!
    • -m 這邊則是指定網站的版型,JSON 格式目前支援兩種 - doc, resume,可以依據需求做指定
  • 額外內容

    • -t 可以指定產生網頁的標題
    • --theme 可以指定 CSS theme template (正在籌備其他 CSS 主題當中)
  • 如何編輯 JSON 格式可以參考 這裡

YAML

  • 運行範例指令
    # 產生 document 版型 - doc
    $ papogen -s src/yaml -o out/yaml -m doc -g yaml
    # 產生 resume 版型 - resume
    $ papogen -s src/yaml -o out/yaml -m resume -g yaml
    
  • 解釋
    • -s 指定了來源,這邊因為要使用 YAML 格式,所以使用 test/yaml 底下的所有檔案
    • -o 則是指定輸出的位置,這邊會輸出一份靜態網頁
    • -g 由於 papoGen 預設是以 YAML 格式來做輸出,所以如果要產生 yaml 格式,就必須透過 -g yaml 來做指定
    • -m 這邊則是指定網站的版型,YAML 格式目前支援兩種 - doc, resume,可以依據需求做指定
  • 額外內容
    • -t 可以指定產生網頁的標題
    • --theme 可以指定 CSS theme template (正在籌備其他 css 主題當中)
  • 如何編輯 YAML 格式可以參考 這裡 (和 JSON 格式寫法相同!).

透過指令產生腳本範本

  • 0.0.12 版開始,可以支援透過 papoGen 產生可支援的腳本格式!
  • 利用 papogen -h 來列出有支援哪些後,便可以利用 <script>以及 <format>的組合,來產生腳本;
    • 組合方式: <script>/<format>
    • <script> 目前支援 JSON / YAML / Markdown。
    • <format> 則有多種,可以透過 papogen -h 來做察看。
  • 示範指令
    • 產生一個 JSON 格式中 text 樣式的腳本到目前的工作目錄
      $ papogen -c json/text -o .
      
    • 多個樣式 (生成 text.json, list.json, 以及 table.json)
      $ papogen -c json/text/list/table -o .
      
    • 全部範本都做生成
      $ papogen -c json/all -o .
      

JSON 規格的使用

papoGen 如何使用 JSON ?

  • papoGen 當中,目前支援的 JSON 格式
  • 而可以在主頁的 README.md 中看到 command 的使用情況,可以指定一個資料夾作為生成來源的依據
  • 我們可以指定一個 folder 來做生成;而這時我們就可以把所有 JSON 檔案放在這裏面!
  • 每個 JSON 都會佔據一個 tab ,並以其檔案名稱當作該 tab 的顯示名稱 (網站中的其中一頁,詳情請參考 repo 首頁上方的 demo 連結)
  • 而其內部內容就會轉換成為那一頁的顯示內容
  • 依據 command 指定的 template,在生成上會有些微的差異
  • 接下來我們就可以進到每個 JSON 檔內支援什麼格式囉

Type support

  • 先來看到一個 JSON 檔案內概況:
    • 每個檔案內都有個欄位 article 作為該頁的主題(顯示於內文最上方)
    • 並跟隨一個 json array: article_content
{
    article: "Title name",
    article_content: [ ... ]
}
  • article_content 格式:
    • 每個 element 都有以下的欄位:
      • title: Subtitle name
      • content: 為 json array,內部會裝載各式各樣支援的格式(以下會詳細介紹),papoGen 則會依據你所指定的以下格式來做轉換,成為美美的 document!
{
    title: "Subtitle Name",
    content: [ ... ]
}
  • 那麼接下來就開始介紹 content 內部格式吧!
  • 以下每個種類都是放置於 content 內的元件!

Normal Article

  • 為一般文字支援
  • 每個 data 裡頭的 element 都會自成獨立的一行
[
    ... (assume inside `content` array)
    {
        "type": "text",
        "data": [
            "sentence 1",
            "sentence 2"
        ]
    },
    ...
]
  • 為超連結支援
  • 可與一般文字混用
    • 注意在這個型態使用底下時,換行字元要自行加在要換行的字串後面!
    • 容許超連結與文章混合
[
    ... (assume inside `content` array)
    {
        "type": "hyper",
        "data": [
            {
                "text": [
                    "sentence1","sentence2",...
                ]
            },
            {
                "hyper":[
                    { "text": "display text", "link":"<url>" } ...
                ]
            }
        ]
    },
    ...
]

Image support

  • 為圖片支援
  • 來源位置是為跟該 JSON 檔案的相對位置
[
    ... (assume inside `content` array)
    {
        "type": "image",
        "data": [ 
            {
                "url": "../path/to/your/img or http://....",
                "size": 300 // px
            }
        ]
    },
    ...
]

Code support

  • 為原始碼支援,支援兩種來源
    • url: 透過檔案的方式做引入
    • raw: 可以直接輸入程式碼
  • 來源位置是為跟該 JSON 檔案的相對位置
[
    ... (assume inside `content` array)
    {
        "type": "code",
        "data": [ 
            {
                "url": "../path/to/your/code"
            },
            {
                "raw": "const var = require('meme')"
            }
        ]
    },
    ...
]

Formula support

  • 數學式的支援,支援 MathJax 的格式
[
    ... (assume inside `content` array)
    {
        "type": "formula",
        "data": [
            "`x = (-b +- sqrt(b^2-4ac))/(2a) .`"
        ]
    },
    ...
]

Table support

  • 表格的支援
    • 每個 data 內的元素,都是一條獨立的 column
    • 而各自都 items 的 JSON array 來裝屬於該 column 的 elements
  • 注意! 每個 items 內的欄位數目要相同!否則會有 undefined behavior 發生!
{
    ... (assume inside `content` array)
    {
        "type": "table",
        "data": [
            {
                "name": "column title 1",
                "items": [
                    "var1", "var2" ,...
                ]
            },
            {
                "name": "column title 2",
                "items": [
                    "var1-attr", "var2-attr" ,...
                ]
            }
        ]
    },
    ...
}

Card Support

  • 這個支援主要是依照 paper.css 的 card 格式產生
  • 產生結果可以參考 DEMO page,而格式參考下方:
{
    ...
    {
        "type": "card",
        "data":[
            {
                "url": "<img url>",
                "title": "Card example with image",
                "subtitle": "I am subtitle!",
                "text": [
                    "Example sentence 1.",
                    "Example sentence 2."
                ],
                "tag": [
                    "example",
                    "tag"
                ]
            },
    }
}

Top

Created by @ToolBuddy/papoGen(papercss)