diff options
author | Max Wu | 2016-10-13 12:41:57 +0800 |
---|---|---|
committer | GitHub | 2016-10-13 12:41:57 +0800 |
commit | af461ac2d6171b6133701ce0817d14f18b4fd4b1 (patch) | |
tree | 58ae2135c69dacdac283538b6b5e54c8c816bd9f /public/js/syncscroll.js | |
parent | 53f88d82d1ea414dc95e8f6181c3cc6638573665 (diff) | |
parent | 773c0ce39e2da7ea155949b5a6dae986a747e89a (diff) |
Merge pull request #195 from Yukaii/webpack-frontend
Use Webpack to bundle frontend code
Diffstat (limited to '')
-rw-r--r-- | public/js/syncscroll.js | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/public/js/syncscroll.js b/public/js/syncscroll.js index 32d3f7a3..511c5000 100644 --- a/public/js/syncscroll.js +++ b/public/js/syncscroll.js @@ -1,5 +1,8 @@ // Inject line numbers for sync scroll. +var extra = require('./extra'); +var md = extra.md; + function addPart(tokens, idx) { if (tokens[idx].map && tokens[idx].level === 0) { var startline = tokens[idx].map[0] + 1; @@ -71,7 +74,7 @@ md.renderer.rules.fence = function (tokens, idx, options, env, self) { if (highlighted.indexOf('<pre') === 0) { return highlighted + '\n'; } - + if (tokens[idx].map && tokens[idx].level === 0) { var startline = tokens[idx].map[0] + 1; var endline = tokens[idx].map[1]; @@ -99,10 +102,12 @@ function renderContainer(tokens, idx, options, env, self) { addPart(tokens, idx); return self.renderToken.apply(self, arguments); } -md.use(window.markdownitContainer, 'success', { render: renderContainer }); -md.use(window.markdownitContainer, 'info', { render: renderContainer }); -md.use(window.markdownitContainer, 'warning', { render: renderContainer }); -md.use(window.markdownitContainer, 'danger', { render: renderContainer }); + +var markdownitContainer = require('markdown-it-container'); +md.use(markdownitContainer, 'success', { render: renderContainer }); +md.use(markdownitContainer, 'info', { render: renderContainer }); +md.use(markdownitContainer, 'warning', { render: renderContainer }); +md.use(markdownitContainer, 'danger', { render: renderContainer }); var syncscroll = true; @@ -240,7 +245,7 @@ function syncScrollToEdit(event, preventAnimate) { return; } if (editScrolling) return; - + var scrollTop = viewArea[0].scrollTop; var lineIndex = 0; for (var i = 0, l = scrollMap.length; i < l; i++) { @@ -260,7 +265,7 @@ function syncScrollToEdit(event, preventAnimate) { lineDiff = lineHeightMap[i + 1] - lineNo; } } - + var posTo = 0; var topDiffPercent = 0; var posToNextDiff = 0; @@ -269,7 +274,7 @@ function syncScrollToEdit(event, preventAnimate) { var preLastLineHeight = scrollInfo.height - scrollInfo.clientHeight - textHeight; var preLastLineNo = Math.round(preLastLineHeight / textHeight); var preLastLinePos = scrollMap[preLastLineNo]; - + if (scrollInfo.height > scrollInfo.clientHeight && scrollTop >= preLastLinePos) { posTo = preLastLineHeight; topDiffPercent = (scrollTop - preLastLinePos) / (viewBottom - preLastLinePos); @@ -281,7 +286,7 @@ function syncScrollToEdit(event, preventAnimate) { posToNextDiff = textHeight * lineDiff * topDiffPercent; posTo += Math.ceil(posToNextDiff); } - + if (preventAnimate) { editArea.scrollTop(posTo); } else { @@ -292,7 +297,7 @@ function syncScrollToEdit(event, preventAnimate) { scrollTop: posTo }, duration, "linear"); } - + viewScrolling = true; clearTimeout(viewScrollingTimer); viewScrollingTimer = setTimeout(viewScrollingTimeoutInner, duration * 1.5); @@ -322,7 +327,7 @@ function syncScrollToView(event, preventAnimate) { return; } if (viewScrolling) return; - + var lineNo, posTo; var topDiffPercent, posToNextDiff; var scrollInfo = editor.getScrollInfo(); @@ -341,7 +346,7 @@ function syncScrollToView(event, preventAnimate) { posToNextDiff = (scrollMap[lineNo + 1] - posTo) * topDiffPercent; posTo += Math.floor(posToNextDiff); } - + if (preventAnimate) { viewArea.scrollTop(posTo); } else { @@ -352,7 +357,7 @@ function syncScrollToView(event, preventAnimate) { scrollTop: posTo }, duration, "linear"); } - + editScrolling = true; clearTimeout(editScrollingTimer); editScrollingTimer = setTimeout(editScrollingTimeoutInner, duration * 1.5); @@ -360,4 +365,11 @@ function syncScrollToView(event, preventAnimate) { function editScrollingTimeoutInner() { editScrolling = false; -}
\ No newline at end of file +} + +module.exports = { + setupSyncAreas: setupSyncAreas, + clearMap: clearMap, + syncScrollToEdit: syncScrollToEdit, + syncScrollToView: syncScrollToView +}; |