mirror of
https://github.com/flynx/pWiki.git
synced 2025-10-29 18:10:09 +00:00
106 lines
2.2 KiB
HTML
Executable File
106 lines
2.2 KiB
HTML
Executable File
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>pWiki</title>
|
|
</head>
|
|
<style>
|
|
</style>
|
|
|
|
<script src="ext-lib/jquery.js"></script>
|
|
<script src="wiki.js"></script>
|
|
|
|
<script>
|
|
|
|
var clear = () => {
|
|
delete localStorage['wiki-data']
|
|
delete localStorage['wiki-location']
|
|
}
|
|
|
|
var reload = () => {
|
|
$('.dir').text('/' + Wiki.dir)
|
|
|
|
$('.title').text(Wiki.title)
|
|
|
|
$('.text').html(activateWikiWords(Wiki.text))
|
|
|
|
// XXX save...
|
|
localStorage['wiki-data'] = JSON.stringify(Wiki.__wiki_data)
|
|
localStorage['wiki-location'] = Wiki.location
|
|
|
|
$('title').text(Wiki.location)
|
|
}
|
|
|
|
// XXX add history support...
|
|
var go = (path) => {
|
|
history.pushState({
|
|
wikipath: path
|
|
},
|
|
Wiki.title,
|
|
window.location)
|
|
|
|
Wiki.location = path
|
|
reload()
|
|
}
|
|
|
|
var clearWikiWords = elem => {
|
|
// clear existing...
|
|
elem.find('.WikiWord').each(function(){
|
|
$(this).replaceWith(this.childNodes)})
|
|
return elem
|
|
}
|
|
|
|
var activateWikiWords = text =>
|
|
text
|
|
// set new...
|
|
.replace(
|
|
RegExp('('+[
|
|
'[A-Z][a-z0-9]+[A-Z\/][a-zA-Z0-9\/]*',
|
|
'\\[[^\\]]+\\]',
|
|
].join('|') +')', 'g'),
|
|
'<a class="WikiWord" href="#" onclick="go($(this).text().replace(/^\\[|\\]$/g, \'\'))">$1</a>')
|
|
|
|
|
|
$(() => {
|
|
$(window).on('popstate', function(evt){
|
|
event.state
|
|
&& event.state.wikipath
|
|
&& go(event.state.wikipath)
|
|
})
|
|
|
|
// load stored data...
|
|
Wiki.__wiki_data = localStorage['wiki-data'] ?
|
|
JSON.parse(localStorage['wiki-data'])
|
|
: data
|
|
Wiki.location = localStorage['wiki-location'] || Wiki.location
|
|
|
|
reload()
|
|
|
|
// XXX make this update on enter...
|
|
$('.title')
|
|
.on('blur', () => {
|
|
Wiki.title = $('.title').text()
|
|
reload()
|
|
})
|
|
|
|
// live update text...
|
|
// XXX is this the right way to go for large documents???
|
|
$('.text')
|
|
.on('keyup', () => {
|
|
Wiki.text = clearWikiWords($('.text').clone()).html() })
|
|
// XXX do this live, but on a timeout after user input...
|
|
// XXX need to place the cursor in the same position...
|
|
.blur(() => { reload() })
|
|
})
|
|
</script>
|
|
|
|
<body>
|
|
|
|
<div class="dir"></div>
|
|
<hr>
|
|
<h1 class="title" contenteditable tabindex=0></h1>
|
|
<div class="text" contenteditable tabindex=0></div>
|
|
|
|
</body>
|
|
</html>
|
|
<!-- vim:set sw=4 ts=4 : -->
|