Skip to content

Commit

Permalink
markdown support improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
nin--jin committed May 22, 2018
1 parent 316ab5d commit 642688b
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 35 deletions.
15 changes: 13 additions & 2 deletions app/slides/slides.css
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@
[mol_app_slides_listener_content] {
flex: 0 1 auto;
margin: auto;
justify-content: space-around;
max-width: none;
flex-wrap: wrap;
align-content: space-around;
align-content: space-evenly;
align-items: flex-start;
box-shadow: none;
background: none;
flex-direction: row;
}

[mol_app_slides_slide_switcher] {
Expand All @@ -51,6 +51,17 @@
word-break: normal;
}

[mol_app_slides_listener_content_row] {
margin: 1rem;
}

[mol_app_slides_listener_content_quote] {
margin: 1rem;
box-shadow: none;
background: transparent;
color: inherit;
}

[mol_app_slides_listener_content] [mol_text_image] {
width: 100vw;
height: 100vh;
Expand Down
4 changes: 2 additions & 2 deletions app/slides/slides.view.tree
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ $mol_app_slides $mol_view
body /
<= Listener_content $mol_text
uri_base <= uri_base \
text <= listener_content \
tokens <= listener_content /
<= Progress $mol_portion
portion <= progress 0
<= Speaker $mol_page
Expand All @@ -81,7 +81,7 @@ $mol_app_slides $mol_view
body /
<= Speaker_content $mol_text
uri_base <= uri_base \
text <= speaker_content \
tokens <= speaker_content /
<= Loader $mol_view
dom_name \iframe
attr *
Expand Down
57 changes: 35 additions & 22 deletions app/slides/slides.view.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,34 +29,47 @@ namespace $.$$ {

@ $mol_mem
content_pages() {
const contents = this.contents().split( /^(?=#)/mg ) as string[]

const pages = contents
.map( content => {
return {
title : content.replace( /[^]*?^#*([^]*?)$(\r?\n?)*[^]*/mg , '$1' ) ,
speaker : content.replace( /^(?!>)[^]*?$(\r?\n?)*/mg , '' ) ,
listener : content.replace( /^[>#][^]*?$(\r?\n?)*/mg , '' ) ,
}
} )
.filter( page => page.speaker || page.listener )

return pages
return this.contents().split( /^(?=#)/mg ) as string[]
}

title() {
const page = this.content_pages()[ this.slide() ]
if( !page ) return super.title()

return page.title
@ $mol_mem_key
page_tokens( index : number ) {
return $mol_syntax_md_flow.tokenize( this.content_pages()[ index ] || '' )
}

@ $mol_mem_key
page_title( index : number ) {

for( let token of this.page_tokens( index ) ) {
if( token.name === 'header' ) return token.chunks[2]
}

return ''
}

@ $mol_mem
title() {
return this.page_title( this.slide() ) || super.title()
}

@ $mol_mem
speaker_content() {
return this.content_pages()[ this.slide() ].speaker
return this.page_tokens( this.slide() ).filter( token => {
if( token.name === 'header' ) return false
if( token.name !== 'block' ) return false
if( '!['.indexOf( token.found[0] ) >= 0 ) return false
return true
} )
}

@ $mol_mem
listener_content() {
return this.content_pages()[ this.slide() ].listener
return this.page_tokens( this.slide() ).filter( token => {
if( token.name === 'header' ) return false
if( token.name !== 'block' ) return true
if( '!['.indexOf( token.found[0] ) >= 0 ) return true
return false
} )
}

slide_local( uri : string , next : number ) {
Expand Down Expand Up @@ -111,7 +124,7 @@ namespace $.$$ {
while( matcher.length > 2 ) {

for( let i = 0 ; i < pages.length ; ++i ) {
if( !pages[i].title.toLowerCase().match( matcher ) ) continue
if( !this.page_title(i).toLowerCase().match( matcher ) ) continue

this.slide( i )
return
Expand All @@ -127,7 +140,7 @@ namespace $.$$ {

@ $mol_mem
timings() {
return this.content_pages().map( page => page.speaker.length )
return this.content_pages().map( page => page.length )
}

@ $mol_mem
Expand Down
4 changes: 2 additions & 2 deletions syntax/md/md.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
namespace $ {

export var $mol_syntax_md_flow = new $mol_syntax({
'quote' : /^(?:>\s+)(.*?)$([\n\r]*)/ ,
'quote' : /^((?:(?:> )(?:[^]*?)$(\r?\n?))+)([\n\r]*)/ ,
'header' : /^(#+)(\s*)(.*?)$([\n\r]*)/ ,
'list' : /^((?:[*+-]\s+(?:[^]*?)$(?:[\n\r]*))+)/ ,
'list' : /^((?:(?:\s?[*+-]|\d\.)\s+(?:[^]*?)$(?:\r?\n?))+)((?:\r?\n)*)/ ,
'code' : /^(```\s*)(\w*)[\r\n]+([^]*?)^(```)$([\n\r]*)/ ,
'code-indent' : /^((?:(?: |\t)(?:[^]*?)$([\n\r]*))+)/ ,
'table' : /((?:^\|.+?$\r?\n)+)([\n\r]*)/ ,
Expand Down
3 changes: 3 additions & 0 deletions text/text.view.tree
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
$mol_text $mol_list
uri_base \
text \
tokens /
Quote!id $mol_text
text <= quote_text!id \
Row!id $mol_text_row
sub <= block_content!id /
type <= block_type!id \
Expand Down
19 changes: 12 additions & 7 deletions text/text.view.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,40 @@ namespace $.$$ {
export class $mol_text extends $.$mol_text {

@ $mol_mem
tokens_flow() {
tokens() {
return $mol_syntax_md_flow.tokenize( this.text() )
}

rows() {
return this.tokens_flow().map( ( token , index )=> {
return this.tokens().map( ( token , index )=> {
switch( token.name ) {
case 'table' : return this.Table( index )
case 'header' : return this.Header( index )
case 'quote' : return this.Quote( index )
}
return this.Row( index )
} )
}

header_level( index : number ) {
return this.tokens_flow()[ index ].chunks[0].length
return this.tokens()[ index ].chunks[0].length
}

header_content( index : number ) {
return this.text2spans( `${ index }` , this.tokens_flow()[ index ].chunks[2] )
return this.text2spans( `${ index }` , this.tokens()[ index ].chunks[2] )
}

quote_text( index : number ) {
return this.tokens()[ index ].chunks[0].replace( /^> /mg , '' )
}

block_type( index : number ) {
return this.tokens_flow()[ index ].name
return this.tokens()[ index ].name
}

@ $mol_mem_key
cell_contents( indexBlock : number ) {
return this.tokens_flow()[ indexBlock ].chunks[ 0 ]
return this.tokens()[ indexBlock ].chunks[ 0 ]
.split( /\r?\n/g )
.filter( row => row && !/\|--/.test( row ) )
.map( ( row , rowId ) => {
Expand Down Expand Up @@ -141,7 +146,7 @@ namespace $.$$ {

block_content( indexBlock : number ) : ($mol_view|string)[] {

const token = this.tokens_flow()[ indexBlock ]
const token = this.tokens()[ indexBlock ]

switch( token.name ) {
case 'header' : return this.text2spans( `${ indexBlock }` , token.chunks[2] )
Expand Down

0 comments on commit 642688b

Please sign in to comment.