GithubHelp home page GithubHelp logo

ksky521 / nodeppt Goto Github PK

View Code? Open in Web Editor NEW
10.3K 10.3K 2.1K 25.55 MB

This is probably the best web presentation tool so far!

Home Page: https://nodeppt.js.org

License: MIT License

JavaScript 69.82% HTML 0.98% Shell 0.23% Less 28.97%
animation css3 html-presentation html5 javascript javascript-library keynote markdown markdown-it posthtml ppt presentation slides slideshow webpack webslide

nodeppt's Introduction

nodeppt 2.0

累死累活干不过做 PPT 的!
> 查看效果:https://nodeppt.js.org

Markpress npm badge

nodeppt 2.0 基于webslides、webpack、markdown-it、posthtml 重构,新效果

Install

npm install -g nodeppt

TODO

  • bug fix
  • 增加多页编辑公共资源,说人话就是 splitChunks

Usage

简化了,就三个命令:

  • new:使用线上模板创建一个新的 md 文件
  • serve:启动一个 md 文件的 webpack dev server
  • build:编译产出一个 md 文件
# create a new slide with an official template
$ nodeppt new slide.md

# create a new slide straight from a github template
$ nodeppt new slide.md -t username/repo

# start local sever show slide
$ nodeppt serve slide.md

# to build a slide
$ nodeppt build slide.md

帮助

# help
nodeppt -h
# 获取帮助
nodeppt serve -h

演讲者模式

nodeppt 有演讲者模式,在页面 url 后面增加?mode=speaker 既可以打开演讲者模式,双屏同步

Keyboard Shortcuts

  • Page: ↑/↓/←/→ Space Home End
  • Fullscreen: F
  • Overview: -/+
  • Speaker Note: N
  • Grid Background: Enter

公共资源:public 文件夹

如果项目文件夹下,存在public文件夹,可以直接通过 url 访问,参考webpack dev servercontentBase 选项。

build的时候,public 文件夹中的文件会完全 copy 到dist文件夹中

编写

最佳体验是 chrome 浏览器,本来就是给做演示用的,所以就别考虑非 Chrome 浏览器兼容问题了!

这里说下怎么编写。

基本语法

整个 markdown 文件分为两部分,第一部分是写在最前面的配置,然后是使用<slide>隔开的每页幻灯片内容。

配置

nodeppt 的配置是直接写在 md 文件顶部的,采用 yaml 语法,例如下面配置:

title: nodeppt markdown 演示
speaker: 三水清
url: https://github.com/ksky521/nodeppt
js:
    - https://www.echartsjs.com/asset/theme/shine.js
prismTheme: solarizedlight
plugins:
    - echarts
    - mermaid
    - katex
  • title: 演讲主题
  • speaker:演讲者
  • url:地址
  • js:js 文件数组,放到 body 之前
  • css:css 文件数组,放到头部
  • prismTheme:prism 配色,取值范围 ['dark', 'coy', 'funky', 'okaidia', 'tomorrow', 'solarizedlight', 'twilight']
  • plugins:目前支持 echartsmermaidkatex 三个插件

插件

目前 nodeppt 支持 图表 echarts流程图 mermaid数学符号 KaTeX 三个插件。

echarts

echarts 主题配色可以直接在yaml配置的 js 中引入。echarts 采用fence语法,如下:

{
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
        type: 'value'
    },
    series: [{
        data: [820, 932, 901, 934, 1290, 1330, 1320],
        type: 'line'
    }]
}

详见site/echarts.md

mermaid

mermaid 主题配色可以直接在yaml配置的 js 中引入。mermaid 采用fence语法,如下:

sequenceDiagram
    Alice ->> Bob: Hello Bob, how are you?
    Bob-->>John: How about you John?
    Bob--x Alice: I am good thanks!
    Bob-x John: I am good thanks!
    Note right of John: Bob thinks a long<br/>long time, so long<br/>that the text does<br/>not fit on a row.

    Bob-->Alice: Checking with John...
    Alice->John: Yes... John, how are you?

详见site/mermaid.md

ketex

参考:markdown-it-katex语法

<slide> 语法

nodeppt 会根据<slide>对整个 markdown 文件进行拆分,拆成单页的幻灯片内容。<slide> 标签支持下面标签:

  • class/style 等:正常的 class 类,可以通过这个控制居中(aligncenter),内容位置,背景色等
  • image:背景图片,基本语法 image="img_url"
  • video:背景视频,基本语法 video="video_src1,video_src2"
  • :class:wrap 的 class,下面详解

每个 slide 会解析成下面的 html 结构:

<section class="slide" attrs...><div class="wrap" wrap="true">// 具体 markdown 渲染的内容</div></section>

其中<slide>class等会被解析到 <section>标签上面,而:class则被解析到div.wrap上面,例如:

<slide :class="size-50" class="bg-primary"></slide>

output 为:

<section class="slide bg-primary"><div class="wrap size-50" wrap="true">// 具体 markdown 渲染的内容</div></section>

背景:图片

<slide>image 会被解析成背景大图,常见的支持方式有:

<slide image="https://source.unsplash.com/UJbHNoVPZW0/">

# 这是一个普通的背景图

<slide image="https://source.unsplash.com/UJbHNoVPZW0/ .dark">

# 这张背景图会在图片上面蒙一层偏黑色的透明层

<slide image="https://source.unsplash.com/UJbHNoVPZW0/ .light">

# 这张背景图会在图片上面蒙一层偏白色的透明层

<slide class="bg-black aligncenter" image="https://source.unsplash.com/n9WPPWiPPJw/ .anim">

# 这张背景图会缓慢动

详见site/background.md在线演示

样式

样式太多,具体详见site/classes.md在线演示

布局

nodeppt 这次使用webslides的布局,支持丰富的布局,实在太多了,直接看文档site/layout.md在线演示

attribute

参考markdown-it-attrs,支持了attribute,修改增加多 class 支持等功能。

其中:..class会往上一级节点添加 class,支持{.class1.class2}这种多 class 的语法。用法举例:

# header {.style-me.class2}

paragraph {data-toggle=modal}

Output:

<h1 class="style-me class2">header</h1>
<p data-toggle="modal">paragraph</p>
Use the css-module green on this paragraph. {.text-intro}

Output:

<p class="text-intro">Use the css-module green on this paragraph.</p>
-   list item **bold** {.red}

Output:

<ul>
    <li class="red">list item <strong>bold</strong></li>
</ul>
-   list item **bold**
    {.red}

Output:

<ul class="red">
    <li>list item <strong>bold</strong></li>
</ul>

image 增强

对于 image ,支持外面包裹一层的写法,具体语法 !![](图片地址 属性),例如:

!![](https://webslides.tv/static/images/iphone.png .size-50.alignleft)

Output:

<img src="https://webslides.tv/static/images/iphone.png" class="size-50 alignleft" />
!![figure](https://webslides.tv/static/images/setup.png .aligncenter)

Output:

<figure><img src="https://webslides.tv/static/images/setup.png" class="aligncenter" /></figure>

button

nodeppt 的 button 是类似link语法的,支持蓝色、圆角、空心和 icon 版本的 button:

[普通按钮](){.button} [圆角普通按钮](){.button.radius}

[空心](){.button.ghost} [:fa-github: 前面带 icon](){.button}

Icon:FontAwesome

nodeppt 的 icon 支持 FontAwesome 语法:

  • :fa-xxx:<i class="fa fa-xxx"></i>
  • :~fa-xxx:~<span><i class="fa fa-xxx"></i></span>
  • ::fa-xxx:: → 块级<i class="fa fa-xxx"></i>,即不会被p包裹

span

代码修改自markdown-it-span,支持 attr语法,基本用法:

:span:
:span: {.text-span}

动效

nodeppt 一如既往的支持动效,2.0 版本支持动效主要是页面内的动效。

支持动效包括:

  • fadeIn
  • zoomIn
  • rollIn
  • moveIn
  • fadeInUp
  • slow

在需要支持的动效父节点添加.build或者在具体的某个元素上添加.tobuild+动效 class即可。

按照惯例,nodeppt 还支持animate.css的动效哦~

详细查看文件:site/animation.md在线演示

使用强大的:::完成复杂布局

:::语法是扩展了 markdown-it-container 语法,默认是任意 tag,例如

:::div {.content-left}

## title

:::

Output:

<div class="content-left"><h2>title</h2></div>

还支持,tag 嵌套,除此之外,支持的组件包括:

  • card:卡片,一边是图片,一边是内容
  • column:column 多栏布局
  • shadowbox:带阴影的盒子
  • steps:步骤组件
  • cta:
  • gallery:图片
  • flexblock:flex block 布局,支持多个子类型
  • note: 演讲注释

基本语法是:

:::TYPE {.attrs}

## 第一部分

使用 hr 标签隔开

---

## 第二部分

这里的内容也是哦

:::

详细可以看 component 部分的 markdown 文件和在线演示

打印?导出 pdf?

chrome 浏览器,直接在第一页 command+P/ctrl+P 即可

高级玩法

如果上面

nodeppt.config.js

在 nodeppt 执行路径下创建nodeppt.config.js文件,可以配置跟webpack相关的选项,另外可以支持自研 nodeppt 插件。

默认内置的config.js内容如下:

/**
 * @file 默认配置
 */
module.exports = () => ({
    // project deployment base
    baseUrl: '/',

    // where to output built files
    outputDir: 'dist',

    // where to put static assets (js/css/img/font/...)
    assetsDir: '',

    // filename for index.html (relative to outputDir)
    indexPath: 'index.html',
    // 插件,包括 markdown 和 posthtml
    plugins: [],
    // chainWebpack: [],

    // whether filename will contain hash part
    filenameHashing: true,

    // boolean, use full build?
    runtimeCompiler: false,

    // deps to transpile
    transpileDependencies: [
        /* string or regex */
    ],

    // sourceMap for production build?
    productionSourceMap: true,

    // use thread-loader for babel & TS in production build
    // enabled by default if the machine has more than 1 cores
    parallel: () => {
        try {
            return require('os').cpus().length > 1;
        } catch (e) {
            return false;
        }
    },

    // multi-page config
    pages: undefined,

    // <script type="module" crossorigin="use-credentials">
    // #1656, #1867, #2025
    crossorigin: undefined,

    // subresource integrity
    integrity: false,

    css: {
        extract: true
        // modules: false,
        // localIdentName: '[name]_[local]_[hash:base64:5]',
        // sourceMap: false,
        // loaderOptions: {}
    },

    devServer: {
        /*
      host: '0.0.0.0',
      port: 8080,
      https: false,
      proxy: null, // string | Object
      before: app => {}
    */
    }
});

parser plugin

解析插件分两类: markdown-itposthtml

  • markdown-it:是解析 markdown 文件的,如果是增强 markdown 语法,可以用这类插件
  • posthtml:是处理 html 标签的,如果是修改输出的 html 内容,可以用这类插件

定义一个 plugin :

module.exports = {
    // 这里的 id 必须以 markdown/posthtml开头
    // 分别对应 markdown-it和 posthtml 插件语法
    id: 'markdown-xxx',
    // 这里的 apply 是插件实际的内容,详细查看 markdown-it和 posthtml 插件开发
    apply: () => {}
};

webslides plugin

WebSlides 插件需要写到一个 js 文件中,然后作为数组放到window.WSPlugins_中,然后通过在 md 页面的配置(yaml)添加 js 的方法引入。

js: - webslide_plugins.js
// webslide_plugins.js内容
window.WSPlugins_ = [
    {
        id: 'webslide_plugin_name',
        // 下面是对应的插件类
        apply: class Plugin {}
    }
];

参考WebSlides 文档

Template:自制模板

参考nodeppt-template-default

然后使用nodeppt new username/repo xxx.md使用

Thanks

nodeppt's People

Contributors

allen-b1 avatar antife-yinyue avatar bitdeli-chef avatar ciaranchen avatar classicemi avatar clippit avatar coolzilj avatar cospring avatar daviscai avatar hakurouken avatar ictliujie avatar jincdream avatar jk2k avatar jmxhyz avatar kimkit avatar ksky521 avatar leeqiang avatar moyi497475207 avatar myst729 avatar odirus avatar renxia avatar rrrene avatar shooterrao avatar utensil avatar wjer avatar xiaohaoliang avatar xinhualufang avatar xuexb avatar youxiachai avatar zl810881283 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nodeppt's Issues

屏幕方向键支持

有个朋友跟我反映..ipad 没法下一页....

我觉得..屏幕方向键这个可以作为可选项进行添加吧?

无法正常使用控制功能

在0.6.7版本中(我从NPM上安装的),使用二维码扫描无法进入控制界面,显示

This request URL /ppt/demo.html?iscontroller=1&clientid=1398340946492 was not found on this server.

node ppt 更加便捷的输出和分享

是否可以考虑在最终发布的时候添加一个 package.json 就是一般node模块那种项目描述..

添加这么一个json 有几点原因

  1. 方便给人去下载离线版本(可以用npm public & npm install)
  2. nodeppt 本身可以脱离socket.io模块,实现纯粹的ppt生成.例如你需要实时遥控.可以在发布目录安装socket.io, 对于有能力玩遥控的,socket.io 的安装对于他而已当然不是什么难事了.
  3. 更加容易的分享(对于已经安装过node的人而已, 你只需告诉他怎么npm install xx就行)

补充一下,是否可以考虑添加一个init project命令 ?

主要是方便进行管理...例如

使用npm script 方便命令使用

诸如

  1. npm build
  2. npm serve
  3. npm publich

对于入门级用户就不需要记一大串命令了...

LaTeX 公式

写入Latex公式,未能显示公式

是否不支持数学公式。。。。

mac 安装后无法运行

机型为mac air
npm install -g nodeppt后 执行nodeppt显示
env: node\r: No such file or directory

求解救

markdown演示有点问题

启动后,点击nodeppt markdown演示,是如下这样的
20131014115045

就显示第一个slide的内容,其它的slide,怎么按方向键盘,都出不来

nodeppt start 报错

   TypeError: Cannot read property '1' of null
    at /usr/local/lib/node_modules/nodeppt/lib/server.js:278:18
    at /usr/local/lib/node_modules/nodeppt/lib/helper.js:51:40
    at Array.forEach (native)
    at Object.$.recurse (/usr/local/lib/node_modules/nodeppt/lib/helper.js:45:29)
    at pptlist (/usr/local/lib/node_modules/nodeppt/lib/server.js:274:7)
    at Object.handle (/usr/local/lib/node_modules/nodeppt/lib/server.js:140:17)
    at next (/usr/local/lib/node_modules/nodeppt/node_modules/connect/lib/proto.js:193:15)
    at next (/usr/local/lib/node_modules/nodeppt/node_modules/connect/lib/middleware/session.js:318:9)
    at /usr/local/lib/node_modules/nodeppt/node_modules/connect/lib/middleware/session.js:335:9
    at /usr/local/lib/node_modules/nodeppt/node_modules/connect/lib/middleware/session/memory.js:55:7

生成pdf的时候是否支持修改画面大小

我在生成pdf的时候,发现默认的画面背景比较大,而其中的字很小,可否设置参数调整?比如,加一个背景缩放百分比的选项?

PS:用chrome的打印功能生成的pdf就大小正好,但是会有一些其他的问题,例如不能显示背景图片,部分动画效果的时候会插入一页全黑的。

有个bug

当一个slide里有[note]时,a标签的的链接点不了,是note覆盖在slide上面了

控制样式不是很方便

可以考虑抽离出一些接口,方便用户自定义

还有,files 参数里的 css 应该放 head 区

请问如何设置全局的背景图片样式?

看了文档,只知道可以对单个卡片设置背景图片:

[slide style="background-image:url(/img/mainBg.jpg)"]

不知是否支持全局的设置?
另外设置了背景图,在slide里添加宽高不大的图片,图片样式会被拉伸:
image

代码如下:

[slide style="background-image:url(/img/mainBg.jpg)"]
##ES5 模块化现状 --CommonJs
----
![CommonJs](/img/commonjs.png "commonJs")

0.8 的generate -a 会重复创建子目录...

例如

nodeppt generate . sharedppt -a

会生成

G:\NODEPPPTX\SHAREDPPT
├───css
├───img
├───js
│   ├───event
│   ├───highlight
│   │   ├───languages
│   │   └───styles
│   └───mixjs
│       ├───lib
│       │   └───event
│       ├───research
│       └───src
└───sharedppt

子目录里头又生成了一个sharedppt

mac下执行不了

npm install -g nodeppt后 执行nodeppt显示
env: node\r: No such file or directory

genrate path -a命令生成html出问题

报错:

ERROR: TypeError: ejs:51
    49|             width: 1100,
    50|             dir: '/js/',
 >> 51|             <% if (query.controller === 'socket'){ %>
    52|             control:{
    53|                 type: 'socket',
    54|                 args:{

环境:ubuntu12.04
NodeJs 0.10.25
NodePPT 0.6.4

PDF没法生成

装了phantomjs了,MAC OX。
提示生成成功,没有报错,但是生成的pdf是空白文件

ppt结尾处的q&a和powerby

做完ppt后,发现会自动增加两页,一页是q&a,一页是Powered By nodePPT v0.9.5
请问这个能够去掉吗?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.