Skip to content

Commit 8972834

Browse files
committedJan 4, 2017
init config by window.
1 parent 7be6baa commit 8972834

File tree

3 files changed

+52
-38
lines changed

3 files changed

+52
-38
lines changed
 

‎src/index.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { load, camel2kebab, isNil, getRoute } from './util'
1+
import { load, camel2kebab, isNil, getRoute, merge } from './util'
22
import { scrollIntoView, activeLink } from './event'
33
import * as render from './render'
44

5-
const OPTIONS = {
5+
const OPTIONS = merge({
66
el: '#app',
77
repo: '',
88
maxLevel: 6,
@@ -16,7 +16,7 @@ const OPTIONS = {
1616
coverpage: '',
1717
basePath: '',
1818
auto2top: false
19-
}
19+
}, window.$docsify)
2020
const script = document.currentScript || [].slice.call(document.getElementsByTagName('script')).pop()
2121

2222
// load configuration for script attribute
@@ -32,7 +32,7 @@ if (script) {
3232
}
3333

3434
// load options
35-
render.config(OPTIONS)
35+
render.init(OPTIONS)
3636

3737
let cacheRoute = null
3838
let cacheXhr = null

‎src/render.js

+33-34
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ import marked from 'marked'
22
import Prism from 'prismjs'
33
import * as tpl from './tpl'
44
import { activeLink, scrollActiveSidebar, bindToggle, scroll2Top, sticky } from './event'
5-
import { genTree, getRoute, isMobile, slugify } from './util'
5+
import { genTree, getRoute, isMobile, slugify, merge } from './util'
66

77
let OPTIONS = {}
8+
let toc = []
89
const CACHE = {}
910

1011
const renderTo = function (dom, content) {
@@ -14,40 +15,47 @@ const renderTo = function (dom, content) {
1415

1516
return dom
1617
}
17-
let toc = []
18-
const renderer = new marked.Renderer()
1918

2019
/**
21-
* render anchor tag
22-
* @link https://github.com/chjj/marked#overriding-renderer-methods
20+
* init render
21+
* @param {Object} options
2322
*/
24-
renderer.heading = function (text, level) {
25-
const slug = slugify(text)
26-
let route = ''
23+
export function init (options) {
24+
OPTIONS = options
2725

28-
if (OPTIONS.router) {
29-
route = `#/${getRoute()}`
30-
}
26+
const renderer = new marked.Renderer()
27+
/**
28+
* render anchor tag
29+
* @link https://github.com/chjj/marked#overriding-renderer-methods
30+
*/
31+
renderer.heading = function (text, level) {
32+
const slug = slugify(text)
33+
let route = ''
34+
35+
if (OPTIONS.router) {
36+
route = `#/${getRoute()}`
37+
}
3138

32-
toc.push({ level, slug: `${route}#${encodeURIComponent(slug)}`, title: text })
39+
toc.push({ level, slug: `${route}#${encodeURIComponent(slug)}`, title: text })
3340

34-
return `<h${level} id="${slug}"><a href="${route}#${slug}" data-id="${slug}" class="anchor"><span>${text}</span></a></h${level}>`
35-
}
36-
// highlight code
37-
renderer.code = function (code, lang = '') {
38-
const hl = Prism.highlight(code, Prism.languages[lang] || Prism.languages.markup)
39-
.replace(/{{/g, '<span>{{</span>')
41+
return `<h${level} id="${slug}"><a href="${route}#${slug}" data-id="${slug}" class="anchor"><span>${text}</span></a></h${level}>`
42+
}
43+
// highlight code
44+
renderer.code = function (code, lang = '') {
45+
const hl = Prism.highlight(code, Prism.languages[lang] || Prism.languages.markup)
46+
.replace(/{{/g, '<span>{{</span>')
4047

41-
return `<pre data-lang="${lang}"><code class="lang-${lang}">${hl}</code></pre>`
42-
}
43-
renderer.link = function (href, title, text) {
44-
if (OPTIONS.router && !/:/.test(href)) {
45-
href = `#/${href}`.replace(/\/\//g, '/')
48+
return `<pre data-lang="${lang}"><code class="lang-${lang}">${hl}</code></pre>`
4649
}
50+
renderer.link = function (href, title, text) {
51+
if (OPTIONS.router && !/:/.test(href)) {
52+
href = `#/${href}`.replace(/\/\//g, '/')
53+
}
4754

48-
return `<a href="${href}" title="${title || ''}">${text}</a>`
55+
return `<a href="${href}" title="${title || ''}">${text}</a>`
56+
}
57+
marked.setOptions(merge({ renderer }, OPTIONS.marked))
4958
}
50-
marked.setOptions({ renderer })
5159

5260
/**
5361
* App
@@ -191,12 +199,3 @@ export function renderLoading ({ loaded, total, step }) {
191199
}, 200)
192200
}
193201
}
194-
195-
/**
196-
* Load Config
197-
* @param {Object} options
198-
*/
199-
export function config (options) {
200-
OPTIONS = options
201-
}
202-

‎src/util.js

+15
Original file line numberDiff line numberDiff line change
@@ -139,3 +139,18 @@ export function slugify (string) {
139139
slugify.clear = function () {
140140
slugify.occurrences = {}
141141
}
142+
143+
const hasOwnProperty = Object.prototype.hasOwnProperty
144+
export const merge = Object.assign || function (to) {
145+
for (let i = 1; i < arguments.length; i++) {
146+
const from = Object(arguments[i])
147+
148+
for (const key in from) {
149+
if (hasOwnProperty.call(from, key)) {
150+
to[key] = from[key]
151+
}
152+
}
153+
}
154+
155+
return to
156+
}

0 commit comments

Comments
 (0)