parent
49602e5a53
commit
014dbe61a7
9 changed files with 117 additions and 1399 deletions
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,47 @@ |
||||
"use strict"; |
||||
|
||||
const {lexer} = require("marked"); |
||||
|
||||
class Slide { |
||||
content; |
||||
|
||||
constructor(content = []) { |
||||
this.content = content; |
||||
} |
||||
|
||||
append(object) { |
||||
this.content.push(object); |
||||
} |
||||
} |
||||
|
||||
const tokenize = string => { |
||||
return lexer(string); |
||||
}; |
||||
|
||||
const parser = string => { |
||||
const tokenStream = tokenize(string); |
||||
const slideDeck = []; |
||||
let currentSlide = new Slide(); |
||||
|
||||
for (const token of tokenStream) { |
||||
if ( token.type === "space" || token.type === "heading" && token.depth === 1) { |
||||
if (currentSlide.content.length > 0) { |
||||
slideDeck.push(currentSlide); |
||||
currentSlide = new Slide(); |
||||
} |
||||
|
||||
if (token.type === "heading") |
||||
slideDeck.push(new Slide([token])); |
||||
continue; |
||||
} |
||||
currentSlide.append(token); |
||||
} |
||||
if (currentSlide.content.length > 0) |
||||
slideDeck.push(currentSlide); |
||||
|
||||
return slideDeck; |
||||
}; |
||||
|
||||
module.exports = { |
||||
parser |
||||
} |
@ -1,3 +1,4 @@ |
||||
.slides-list { |
||||
background: #222; |
||||
overflow-y: auto; |
||||
} |
@ -0,0 +1,20 @@ |
||||
import React from "react"; |
||||
|
||||
const Slide = ({data}) => { |
||||
console.log(data); |
||||
return ( |
||||
<article className="slide"> |
||||
{data.content.map(item => { |
||||
switch (item.type) { |
||||
case "heading": |
||||
return <h1>{item.raw}</h1> |
||||
break; |
||||
default: |
||||
return JSON.stringify(item); |
||||
} |
||||
})} |
||||
</article> |
||||
); |
||||
}; |
||||
|
||||
export default Slide; |
Loading…
Reference in new issue