mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2024-12-28 04:01:00 +00:00
142 lines
4 KiB
JavaScript
142 lines
4 KiB
JavaScript
require('../css/extra.css');
|
|
require('../css/slide-preview.css');
|
|
require('../css/site.css');
|
|
|
|
require('highlight.js/styles/github-gist.css');
|
|
|
|
var extra = require('./extra');
|
|
var md = extra.md;
|
|
var finishView = extra.finishView;
|
|
var autoLinkify = extra.autoLinkify;
|
|
var deduplicatedHeaderId = extra.deduplicatedHeaderId;
|
|
var renderTOC = extra.renderTOC;
|
|
var generateToc = extra.generateToc;
|
|
var smoothHashScroll = extra.smoothHashScroll;
|
|
var postProcess = extra.postProcess;
|
|
var updateLastChange = extra.updateLastChange;
|
|
var parseMeta = extra.parseMeta;
|
|
var scrollToHash = extra.scrollToHash;
|
|
var preventXSS = require('./render').preventXSS;
|
|
|
|
var markdown = $("#doc.markdown-body");
|
|
var text = markdown.text();
|
|
var lastMeta = md.meta;
|
|
md.meta = {};
|
|
delete md.metaError;
|
|
var rendered = md.render(text);
|
|
if (md.meta.type && md.meta.type === 'slide') {
|
|
var slideOptions = {
|
|
separator: '^(\r\n?|\n)---(\r\n?|\n)$',
|
|
verticalSeparator: '^(\r\n?|\n)----(\r\n?|\n)$'
|
|
};
|
|
var slides = RevealMarkdown.slidify(text, slideOptions);
|
|
markdown.html(slides);
|
|
RevealMarkdown.initialize();
|
|
// prevent XSS
|
|
markdown.html(preventXSS(markdown.html()));
|
|
markdown.addClass('slides');
|
|
} else {
|
|
if (lastMeta.type && lastMeta.type === 'slide') {
|
|
refreshView();
|
|
markdown.removeClass('slides');
|
|
}
|
|
// only render again when meta changed
|
|
if (JSON.stringify(md.meta) != JSON.stringify(lastMeta)) {
|
|
parseMeta(md, null, markdown, $('#ui-toc'), $('#ui-toc-affix'));
|
|
rendered = md.render(text);
|
|
}
|
|
// prevent XSS
|
|
rendered = preventXSS(rendered);
|
|
var result = postProcess(rendered);
|
|
markdown.html(result.html());
|
|
}
|
|
$(document.body).show();
|
|
finishView(markdown);
|
|
autoLinkify(markdown);
|
|
deduplicatedHeaderId(markdown);
|
|
renderTOC(markdown);
|
|
generateToc('ui-toc');
|
|
generateToc('ui-toc-affix');
|
|
smoothHashScroll();
|
|
createtime = lastchangeui.time.attr('data-createtime');
|
|
lastchangetime = lastchangeui.time.attr('data-updatetime');
|
|
updateLastChange();
|
|
var url = window.location.pathname;
|
|
$('.ui-edit').attr('href', url + '/edit');
|
|
var toc = $('.ui-toc');
|
|
var tocAffix = $('.ui-affix-toc');
|
|
var tocDropdown = $('.ui-toc-dropdown');
|
|
//toc
|
|
tocDropdown.click(function (e) {
|
|
e.stopPropagation();
|
|
});
|
|
|
|
var enoughForAffixToc = true;
|
|
|
|
function generateScrollspy() {
|
|
$(document.body).scrollspy({
|
|
target: ''
|
|
});
|
|
$(document.body).scrollspy('refresh');
|
|
if (enoughForAffixToc) {
|
|
toc.hide();
|
|
tocAffix.show();
|
|
} else {
|
|
tocAffix.hide();
|
|
toc.show();
|
|
}
|
|
$(document.body).scroll();
|
|
}
|
|
|
|
function windowResize() {
|
|
//toc right
|
|
var paddingRight = parseFloat(markdown.css('padding-right'));
|
|
var right = ($(window).width() - (markdown.offset().left + markdown.outerWidth() - paddingRight));
|
|
toc.css('right', right + 'px');
|
|
//affix toc left
|
|
var newbool;
|
|
var rightMargin = (markdown.parent().outerWidth() - markdown.outerWidth()) / 2;
|
|
//for ipad or wider device
|
|
if (rightMargin >= 133) {
|
|
newbool = true;
|
|
var affixLeftMargin = (tocAffix.outerWidth() - tocAffix.width()) / 2;
|
|
var left = markdown.offset().left + markdown.outerWidth() - affixLeftMargin;
|
|
tocAffix.css('left', left + 'px');
|
|
} else {
|
|
newbool = false;
|
|
}
|
|
if (newbool != enoughForAffixToc) {
|
|
enoughForAffixToc = newbool;
|
|
generateScrollspy();
|
|
}
|
|
}
|
|
$(window).resize(function () {
|
|
windowResize();
|
|
});
|
|
$(document).ready(function () {
|
|
windowResize();
|
|
generateScrollspy();
|
|
setTimeout(scrollToHash, 0);
|
|
//tooltip
|
|
$('[data-toggle="tooltip"]').tooltip();
|
|
});
|
|
|
|
function scrollToTop() {
|
|
$('body, html').stop(true, true).animate({
|
|
scrollTop: 0
|
|
}, 100, "linear");
|
|
}
|
|
|
|
function scrollToBottom() {
|
|
$('body, html').stop(true, true).animate({
|
|
scrollTop: $(document.body)[0].scrollHeight
|
|
}, 100, "linear");
|
|
}
|
|
|
|
window.scrollToTop = scrollToTop;
|
|
window.scrollToBottom = scrollToBottom;
|
|
|
|
module.exports = {
|
|
scrollToBottom: scrollToBottom,
|
|
scrollToTop: scrollToTop
|
|
}
|