From fbd51afdcbd761f64ad12fe8183b952c257f304e Mon Sep 17 00:00:00 2001 From: "qingwei.li" Date: Sat, 18 Feb 2017 16:18:07 +0800 Subject: [PATCH] refactor(core): and sidebar event --- src/core/event/scroll.js | 2 +- src/core/event/sidebar.js | 28 +++++++++++++++++++++++--- src/core/render/compiler.js | 40 +++++++++++++++++++++++++++++++------ src/core/render/index.js | 13 ++++++++++-- src/core/route/index.js | 3 ++- src/core/util/dom.js | 31 ++++++++++++++++++++++++---- 6 files changed, 100 insertions(+), 17 deletions(-) diff --git a/src/core/event/scroll.js b/src/core/event/scroll.js index b79589b8..503c6b46 100644 --- a/src/core/event/scroll.js +++ b/src/core/event/scroll.js @@ -1,4 +1,4 @@ -export function activeSidebar () { +export function scrollActiveSidebar () { } diff --git a/src/core/event/sidebar.js b/src/core/event/sidebar.js index a02ef7be..498354f5 100644 --- a/src/core/event/sidebar.js +++ b/src/core/event/sidebar.js @@ -1,5 +1,6 @@ import { isMobile } from '../util/env' -import { getNode, on, body } from '../util/dom' +import { getNode, on, body, findAll, toggleClass } from '../util/dom' +import { getHash } from '../route/hash' /** * Toggle button */ @@ -14,7 +15,7 @@ export function btn (el) { on(sidebar, 'click', () => { toggle() - setTimeout(() => activeLink(sidebar, true), 0) + setTimeout(() => getAndActive(true), 0) }) } } @@ -23,6 +24,27 @@ export function sticky () { } -export function activeLink () { +export function getAndActive (el, isParent) { + const dom = getNode(el) + const links = findAll(dom, 'a') + const hash = '#' + getHash() + let target + + links + .sort((a, b) => b.href.length - a.href.length) + .forEach(a => { + const href = a.getAttribute('href') + const node = isParent ? a.parentNode : a + + if (hash.indexOf(href) === 0 && !target) { + target = a + toggleClass(node, 'add', 'active') + } else { + toggleClass(node, 'remove', 'active') + } + }) + + // TODO FIXED + return target } diff --git a/src/core/render/compiler.js b/src/core/render/compiler.js index 2d202407..129be25b 100644 --- a/src/core/render/compiler.js +++ b/src/core/render/compiler.js @@ -1,6 +1,7 @@ import marked from 'marked' import Prism from 'prismjs' -import { helper as helperTpl } from './tpl' +import { helper as helperTpl, tree as treeTpl } from './tpl' +import { genTree } from './gen-tree' import { slugify, clearSlugCache } from './slugify' import { emojify } from './emojify' import { toURL } from '../route/hash' @@ -9,8 +10,7 @@ import { isFn, merge, cached } from '../util/core' let markdownCompiler = marked let contentBase = '' let renderer = new marked.Renderer() - -const toc = [] +let toc = [] /** * Compile markdown content @@ -29,8 +29,8 @@ export const markdown = cached(text => { markdown.renderer = renderer -markdown.init = function (config = {}, context = window.location.pathname) { - contentBase = context +markdown.init = function (config = {}, base = window.location.pathname) { + contentBase = base if (isFn(config)) { markdownCompiler = config(marked, renderer) @@ -85,6 +85,34 @@ renderer.image = function (href, title, text) { /** * Compile sidebar */ -export function sidebar (text) { +export function sidebar (text, level) { + let html = '' + if (text) { + html = markdown(text) + html = html.match(/]*>([\s\S]+)<\/ul>/g)[0] + } else { + const tree = genTree(toc, level) + html = treeTpl(tree, '