1
1
import marked from 'marked'
2
2
import Prism from 'prismjs'
3
3
import * as tpl from './tpl'
4
- import { activeLink , scrollActiveSidebar , bindToggle , scroll2Top } from './event'
5
- import { genTree , getRoute } from './util'
4
+ import { activeLink , scrollActiveSidebar , bindToggle , scroll2Top , sticky } from './event'
5
+ import { genTree , getRoute , isMobile } from './util'
6
6
7
7
let OPTIONS = { }
8
8
const CACHE = { }
@@ -32,7 +32,7 @@ renderer.heading = function (text, level) {
32
32
33
33
toc . push ( { level, slug : `${ route } #${ encodeURIComponent ( slug ) } ` , title : text } )
34
34
35
- return `<h ${ level } id ="${ slug } "><a href ="${ route } # ${ slug } " class="anchor"></a >${ text } </h${ level } >`
35
+ return `<a href ="${ route } # ${ slug } " data-id ="${ slug } " class="anchor"><h ${ level } id=" ${ slug } " >${ text } </h${ level } ></a >`
36
36
}
37
37
// highlight code
38
38
renderer . code = function ( code , lang = '' ) {
@@ -55,11 +55,21 @@ marked.setOptions({ renderer })
55
55
export function renderApp ( dom , replace ) {
56
56
const nav = document . querySelector ( 'nav' ) || document . createElement ( 'nav' )
57
57
58
- dom [ replace ? 'outerHTML' : 'innerHTML' ] = tpl . toggle ( OPTIONS . sidebarToggle ) + tpl . corner ( OPTIONS . repo ) + tpl . main ( )
58
+ if ( ! OPTIONS . repo ) nav . classList . add ( 'no-badge' )
59
+
60
+ dom [ replace ? 'outerHTML' : 'innerHTML' ] = tpl . corner ( OPTIONS . repo ) +
61
+ ( OPTIONS . coverpage ? tpl . cover ( ) : '' ) +
62
+ tpl . main ( OPTIONS . sidebarToggle ? tpl . toggle ( ) : '' )
59
63
document . body . insertBefore ( nav , document . body . children [ 0 ] )
60
64
61
65
// bind toggle
62
66
bindToggle ( 'button.sidebar-toggle' )
67
+ // bind sticky effect
68
+ if ( OPTIONS . coverpage ) {
69
+ ! isMobile ( ) && window . addEventListener ( 'scroll' , sticky )
70
+ } else {
71
+ document . body . classList . add ( 'sticky' )
72
+ }
63
73
}
64
74
65
75
/**
@@ -110,6 +120,20 @@ export function renderSidebar (content) {
110
120
toc = [ ]
111
121
}
112
122
123
+ /**
124
+ * Cover Page
125
+ */
126
+ export function renderCover ( content ) {
127
+ renderCover . dom = renderCover . dom || document . querySelector ( 'section.cover' )
128
+ if ( ! content ) {
129
+ renderCover . dom . classList . add ( 'hidden' )
130
+ } else {
131
+ renderCover . dom . classList . remove ( 'hidden' )
132
+ ! renderCover . rendered && renderTo ( '.cover-main' , marked ( content ) )
133
+ renderCover . rendered = true
134
+ }
135
+ }
136
+
113
137
/**
114
138
* render loading bar
115
139
* @return {[type] } [description]
0 commit comments