mirror of
https://github.com/flynx/pWiki.git
synced 2025-10-29 10:00:08 +00:00
bugfix...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
0c5d937c07
commit
66c3760be9
@ -197,6 +197,84 @@ var quoted = {
|
||||
}
|
||||
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
// XXX add actions...
|
||||
var tasks = {
|
||||
__proto__: plugin,
|
||||
|
||||
updateStatus: function(editor, node){
|
||||
node = editor.get(node)
|
||||
if(node == null){
|
||||
return this }
|
||||
var state = node
|
||||
.querySelector('.view')
|
||||
.querySelector('.completion')
|
||||
if(state){
|
||||
var c =
|
||||
((node.querySelectorAll('input[type=checkbox]:checked').length
|
||||
/ node.querySelectorAll('input[type=checkbox]').length)
|
||||
* 100)
|
||||
.toFixed(0)
|
||||
!isNaN(c)
|
||||
&& state.setAttribute('completion', c +'%') }
|
||||
return this },
|
||||
updateBranch: function(editor, node){
|
||||
if(!node){
|
||||
return this }
|
||||
var outline = editor.outline
|
||||
var p = node
|
||||
while(p !== outline){
|
||||
this.updateStatus(editor, p)
|
||||
p = editor.get(p, 'parent') }
|
||||
return this },
|
||||
updateAll: function(editor){
|
||||
for(var e of [...editor.outline.querySelectorAll('.block>.view .completion')]){
|
||||
this.updateStatus(editor, e) }
|
||||
return this },
|
||||
|
||||
__setup__: function(editor){
|
||||
return this.updateAll(editor) },
|
||||
__parse__: function(text, editor, elem){
|
||||
return text
|
||||
// block checkboxes...
|
||||
// NOTE: these are separate as we need to align block text
|
||||
// to leading chekbox...
|
||||
.replace(/^\s*(?<!\\)\[[_ ]\]\s*/m,
|
||||
this.style(editor, elem, 'todo', '<input type="checkbox">'))
|
||||
.replace(/^\s*(?<!\\)\[[Xx]\]\s*/m,
|
||||
this.style(editor, elem, 'todo', '<input type="checkbox" checked>'))
|
||||
// inline checkboxes...
|
||||
.replace(/\s*(?<!\\)\[[_ ]\]\s*/gm,
|
||||
this.style(editor, elem, 'check', '<input type="checkbox">'))
|
||||
.replace(/\s*(?<!\\)\[[Xx]\]\s*/gm,
|
||||
this.style(editor, elem, 'check', '<input type="checkbox" checked>'))
|
||||
// completion...
|
||||
// XXX add support for being like a todo checkbox...
|
||||
.replace(/(?<!\\)\[[%]\]/gm, '<span class="completion"></span>') },
|
||||
__editedcode__: function(evt, editor, node){
|
||||
return this.updateBranch(editor, node) },
|
||||
__click__: function(evt, editor, elem){
|
||||
// toggle checkbox...
|
||||
if(elem.type == 'checkbox'){
|
||||
var node = editor.get(elem)
|
||||
var text = node.querySelector('.code')
|
||||
// get the checkbox order...
|
||||
var i = [...node.querySelectorAll('input[type=checkbox]')].indexOf(elem)
|
||||
var to = elem.checked ?
|
||||
'[X]'
|
||||
: '[_]'
|
||||
var toggle = function(m){
|
||||
return i-- == 0 ?
|
||||
to
|
||||
: m }
|
||||
text.value = text.value.replace(/\[[Xx_]\]/g, toggle)
|
||||
// update status...
|
||||
this.updateBranch(editor, node) }
|
||||
return this },
|
||||
}
|
||||
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
// XXX Hackish...
|
||||
@ -262,9 +340,9 @@ var styling = {
|
||||
// elements...
|
||||
.replace(/(\n|^)(?<!\\)---*\h*(\n|$)/m, '$1<hr>')
|
||||
// basic styling...
|
||||
// XXX revise...
|
||||
.replace(/(?<!\\)\*(?=[^\s*])(([^*]|\\\*)*[^\s*])(?<!\\)\*/gm, '<b>$1</b>')
|
||||
.replace(/(?<!\\)~(?=[^\s~])(([^~]|\\~)*[^\s~])(?<!\\)~/gm, '<s>$1</s>')
|
||||
// XXX this can clash with '[_] .. [_]' checkboxes...
|
||||
.replace(/(?<!\\)_(?=[^\s_])(([^_]|\\_)*[^\s_])(?<!\\)_/gm, '<i>$1</i>')
|
||||
// code/quoting...
|
||||
//.replace(/(?<!\\)`(?=[^\s])(([^`]|\\`)*[^\s])(?<!\\)`/gm, quote)
|
||||
@ -306,85 +384,6 @@ var escaping = {
|
||||
}
|
||||
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
// XXX add actions...
|
||||
var tasks = {
|
||||
__proto__: plugin,
|
||||
|
||||
updateStatus: function(editor, node){
|
||||
node = editor.get(node)
|
||||
if(node == null){
|
||||
return this }
|
||||
var state = node
|
||||
.querySelector('.view')
|
||||
.querySelector('.completion')
|
||||
if(state){
|
||||
var c =
|
||||
((node.querySelectorAll('input[type=checkbox]:checked').length
|
||||
/ node.querySelectorAll('input[type=checkbox]').length)
|
||||
* 100)
|
||||
.toFixed(0)
|
||||
!isNaN(c)
|
||||
&& state.setAttribute('completion', c +'%') }
|
||||
return this },
|
||||
updateBranch: function(editor, node){
|
||||
if(!node){
|
||||
return this }
|
||||
var outline = editor.outline
|
||||
var p = node
|
||||
while(p !== outline){
|
||||
this.updateStatus(editor, p)
|
||||
p = editor.get(p, 'parent') }
|
||||
return this },
|
||||
updateAll: function(editor){
|
||||
for(var e of [...editor.outline.querySelectorAll('.block>.view .completion')]){
|
||||
this.updateStatus(editor, e) }
|
||||
return this },
|
||||
|
||||
|
||||
__setup__: function(editor){
|
||||
return this.updateAll(editor) },
|
||||
__parse__: function(text, editor, elem){
|
||||
return text
|
||||
// block checkboxes...
|
||||
// NOTE: these are separate as we need to align block text
|
||||
// to leading chekbox...
|
||||
.replace(/^\s*(?<!\\)\[[_ ]\]\s*/m,
|
||||
this.style(editor, elem, 'todo', '<input type="checkbox">'))
|
||||
.replace(/^\s*(?<!\\)\[[Xx]\]\s*/m,
|
||||
this.style(editor, elem, 'todo', '<input type="checkbox" checked>'))
|
||||
// inline checkboxes...
|
||||
.replace(/\s*(?<!\\)\[[_ ]\]\s*/gm,
|
||||
this.style(editor, elem, 'check', '<input type="checkbox">'))
|
||||
.replace(/\s*(?<!\\)\[[Xx]\]\s*/gm,
|
||||
this.style(editor, elem, 'check', '<input type="checkbox" checked>'))
|
||||
// completion...
|
||||
// XXX add support for being like a todo checkbox...
|
||||
.replace(/(?<!\\)\[[%]\]/gm, '<span class="completion"></span>') },
|
||||
__editedcode__: function(evt, editor, node){
|
||||
return this.updateBranch(editor, node) },
|
||||
__click__: function(evt, editor, elem){
|
||||
// toggle checkbox...
|
||||
if(elem.type == 'checkbox'){
|
||||
var node = editor.get(elem)
|
||||
var text = node.querySelector('.code')
|
||||
// get the checkbox order...
|
||||
var i = [...node.querySelectorAll('input[type=checkbox]')].indexOf(elem)
|
||||
var to = elem.checked ?
|
||||
'[X]'
|
||||
: '[_]'
|
||||
var toggle = function(m){
|
||||
return i-- == 0 ?
|
||||
to
|
||||
: m }
|
||||
text.value = text.value.replace(/\[[Xx_]\]/g, toggle)
|
||||
// update status...
|
||||
this.updateBranch(editor, node) }
|
||||
return this },
|
||||
}
|
||||
|
||||
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
@ -402,6 +401,8 @@ var Outline = {
|
||||
carot_jump_edge_then_block: false,
|
||||
|
||||
|
||||
// Plugins...
|
||||
//
|
||||
// The order of plugins can be significant in the following cases:
|
||||
// - parsing
|
||||
// - event dropping
|
||||
@ -409,11 +410,14 @@ var Outline = {
|
||||
attributes,
|
||||
blocks,
|
||||
quoted,
|
||||
|
||||
// NOTE: this needs to be before styling to prevent it from
|
||||
// treating '[_] ... [_]' as italic...
|
||||
tasks,
|
||||
styling,
|
||||
tables,
|
||||
symbols,
|
||||
syntax,
|
||||
tasks,
|
||||
|
||||
// keep this last...
|
||||
// XXX revise -- should this be external???
|
||||
|
||||
@ -44,12 +44,10 @@ var setup = function(){
|
||||
- // Seems that I unintentionally implemented quite a chunk of the markdown spec ;)
|
||||
-
|
||||
- ## Bugs:
|
||||
- BUG: last node seems to get trash tags added to it's end...
|
||||
- BUG: checkboxes bust be parsed BEFORE styling...
|
||||
- [_] two unchecked [_] checkboxes get interpreted as italic...
|
||||
- BUG: exiting a node via arrow keys does not update status (click works)...
|
||||
- [_] some [X] text [%]
|
||||
- _likely need to handle an extra event..._
|
||||
- BUG: last node seems to get trash tags added to it's end...
|
||||
-
|
||||
- ## ToDo:
|
||||
- ASAP: checkbox navigation via `alt-<arrow>`
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user