4da68597f7
Since we are about to release it's time to finally fix our linting. This patch basically runs eslint --fix and does some further manual fixes. Also it sets up eslint to fail on every warning on order to make warnings visable in the CI process. There should no functional change be introduced. Signed-off-by: Sheogorath <sheogorath@shivering-isles.com>
139 lines
3.2 KiB
JavaScript
139 lines
3.2 KiB
JavaScript
/* eslint-env browser, jquery */
|
|
/* global serverurl, Reveal, RevealMarkdown */
|
|
|
|
import { preventXSS } from './render'
|
|
import { md, updateLastChange, removeDOMEvents, finishView } from './extra'
|
|
|
|
require('../css/extra.css')
|
|
require('../css/site.css')
|
|
|
|
const body = preventXSS($('.slides').text())
|
|
|
|
window.createtime = window.lastchangeui.time.attr('data-createtime')
|
|
window.lastchangetime = window.lastchangeui.time.attr('data-updatetime')
|
|
updateLastChange()
|
|
const url = window.location.pathname
|
|
$('.ui-edit').attr('href', `${url}/edit`)
|
|
$('.ui-print').attr('href', `${url}?print-pdf`)
|
|
|
|
$(document).ready(() => {
|
|
// tooltip
|
|
$('[data-toggle="tooltip"]').tooltip()
|
|
})
|
|
|
|
function extend () {
|
|
const target = {}
|
|
|
|
for (const source of arguments) {
|
|
for (const key in source) {
|
|
if (source.hasOwnProperty(key)) {
|
|
target[key] = source[key]
|
|
}
|
|
}
|
|
}
|
|
|
|
return target
|
|
}
|
|
|
|
// Optional libraries used to extend on reveal.js
|
|
const deps = [{
|
|
src: `${serverurl}/build/reveal.js/lib/js/classList.js`,
|
|
condition () {
|
|
return !document.body.classList
|
|
}
|
|
}, {
|
|
src: `${serverurl}/build/reveal.js/plugin/notes/notes.js`,
|
|
async: true,
|
|
condition () {
|
|
return !!document.body.classList
|
|
}
|
|
}]
|
|
|
|
const slideOptions = {
|
|
separator: '^(\r\n?|\n)---(\r\n?|\n)$',
|
|
verticalSeparator: '^(\r\n?|\n)----(\r\n?|\n)$'
|
|
}
|
|
const slides = RevealMarkdown.slidify(body, slideOptions)
|
|
$('.slides').html(slides)
|
|
RevealMarkdown.initialize()
|
|
removeDOMEvents($('.slides'))
|
|
$('.slides').show()
|
|
|
|
// default options to init reveal.js
|
|
const defaultOptions = {
|
|
controls: true,
|
|
progress: true,
|
|
slideNumber: true,
|
|
history: true,
|
|
center: true,
|
|
transition: 'none',
|
|
dependencies: deps
|
|
}
|
|
|
|
// options from yaml meta
|
|
const meta = JSON.parse($('#meta').text())
|
|
var options = meta.slideOptions || {}
|
|
|
|
const view = $('.reveal')
|
|
|
|
// text language
|
|
if (meta.lang && typeof meta.lang === 'string') {
|
|
view.attr('lang', meta.lang)
|
|
} else {
|
|
view.removeAttr('lang')
|
|
}
|
|
// text direction
|
|
if (meta.dir && typeof meta.dir === 'string' && meta.dir === 'rtl') {
|
|
options.rtl = true
|
|
} else {
|
|
options.rtl = false
|
|
}
|
|
// breaks
|
|
if (typeof meta.breaks === 'boolean' && !meta.breaks) {
|
|
md.options.breaks = false
|
|
} else {
|
|
md.options.breaks = true
|
|
}
|
|
|
|
// options from URL query string
|
|
const queryOptions = Reveal.getQueryHash() || {}
|
|
|
|
options = extend(defaultOptions, options, queryOptions)
|
|
Reveal.initialize(options)
|
|
|
|
window.viewAjaxCallback = () => {
|
|
Reveal.layout()
|
|
}
|
|
|
|
function renderSlide (event) {
|
|
if (window.location.search.match(/print-pdf/gi)) {
|
|
const slides = $('.slides')
|
|
let title = document.title
|
|
finishView(slides)
|
|
document.title = title
|
|
Reveal.layout()
|
|
} else {
|
|
const markdown = $(event.currentSlide)
|
|
if (!markdown.attr('data-rendered')) {
|
|
let title = document.title
|
|
finishView(markdown)
|
|
markdown.attr('data-rendered', 'true')
|
|
document.title = title
|
|
Reveal.layout()
|
|
}
|
|
}
|
|
}
|
|
|
|
Reveal.addEventListener('ready', event => {
|
|
renderSlide(event)
|
|
const markdown = $(event.currentSlide)
|
|
// force browser redraw
|
|
setTimeout(() => {
|
|
markdown.hide().show(0)
|
|
}, 0)
|
|
})
|
|
Reveal.addEventListener('slidechanged', renderSlide)
|
|
|
|
const isWinLike = navigator.platform.indexOf('Win') > -1
|
|
|
|
if (isWinLike) $('.container').addClass('hidescrollbar')
|