Compare commits

...

3 Commits

Author SHA1 Message Date
42095da907 notes...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
2023-11-09 23:23:31 +03:00
99da7ca626 bugfix + notes...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
2023-11-09 22:58:26 +03:00
5b0967f032 minor tweaks + added stub toc generator...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
2023-11-09 02:35:04 +03:00
2 changed files with 84 additions and 27 deletions

View File

@ -173,6 +173,7 @@ var getMarkdownOffset = function(markdown, text, i){
// (not implemented) backtracking... // (not implemented) backtracking...
// ...needs thought... // ...needs thought...
// Q: can we cheat with this? =) // Q: can we cheat with this? =)
// XXX BUG: clicking right of last line places the caret before the last char...
var getMarkdownOffset = function(markdown, text, i){ var getMarkdownOffset = function(markdown, text, i){
i = i ?? text.length i = i ?? text.length
var map = [] var map = []
@ -255,12 +256,12 @@ var blocks = {
return text return text
// markdown... // markdown...
// style: headings... // style: headings...
.replace(/^(?<!\\)######\s+(.*)$/m, this.style(editor, elem, 'heading-6')) .replace(/^(?<!\\)######\s+(.*)$/m, this.style(editor, elem, ['heading', 'heading-6']))
.replace(/^(?<!\\)#####\s+(.*)$/m, this.style(editor, elem, 'heading-5')) .replace(/^(?<!\\)#####\s+(.*)$/m, this.style(editor, elem, ['heading', 'heading-5']))
.replace(/^(?<!\\)####\s+(.*)$/m, this.style(editor, elem, 'heading-4')) .replace(/^(?<!\\)####\s+(.*)$/m, this.style(editor, elem, ['heading', 'heading-4']))
.replace(/^(?<!\\)###\s+(.*)$/m, this.style(editor, elem, 'heading-3')) .replace(/^(?<!\\)###\s+(.*)$/m, this.style(editor, elem, ['heading', 'heading-3']))
.replace(/^(?<!\\)##\s+(.*)$/m, this.style(editor, elem, 'heading-2')) .replace(/^(?<!\\)##\s+(.*)$/m, this.style(editor, elem, ['heading', 'heading-2']))
.replace(/^(?<!\\)#\s+(.*)$/m, this.style(editor, elem, 'heading-1')) .replace(/^(?<!\\)#\s+(.*)$/m, this.style(editor, elem, ['heading', 'heading-1']))
// style: list... // style: list...
//.replace(/^(?<!\\)[-\*]\s+(.*)$/m, style('list-item')) //.replace(/^(?<!\\)[-\*]\s+(.*)$/m, style('list-item'))
.replace(/^\s*(.*)(?<!\\):\s*$/m, this.style(editor, elem, 'list')) .replace(/^\s*(.*)(?<!\\):\s*$/m, this.style(editor, elem, 'list'))
@ -611,6 +612,53 @@ var tasks = {
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// XXX needs lots more work...
var toc = {
__proto__: plugin,
// XXX not sure on what to build the hierarchy...
// this could be:
// - heading level
// - topology
// - both
// - ...
update: function(editor, elem){
var outline = editor.outline
var tocs = [...outline.querySelectorAll('.toc .view')]
if(tocs.length == 0){
return }
var level = function(node){
var depth = 0
var parent = node
while(parent !== outline
&& parent != null){
if(parent.classList.contains('block')){
depth++ }
parent = parent.parentElement }
return depth }
var headings = [...editor.outline.querySelectorAll('.block.heading>.view')]
.map(function(e){
return `<li>${ e.innerText.split(/\n/)[0] }</li>`
})
var lst = document.createElement('ul')
lst.innerHTML = headings.join('\n')
for(var toc of tocs){
toc.append(lst) } },
__setup__: function(editor){
return this.update(editor) },
__editedcode__: function(evt, editor, elem){
return this.update(editor, elem) },
__parse__: function(text, editor, elem){
return text
.replace(/^\s*TOC\s*$/,
this.style(editor, elem, 'toc', '')) },
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// XXX Hackish... // XXX Hackish...
@ -1144,6 +1192,7 @@ var Outline = {
// NOTE: this needs to be before styling to prevent it from // NOTE: this needs to be before styling to prevent it from
// treating '[_] ... [_]' as italic... // treating '[_] ... [_]' as italic...
tasks, tasks,
toc,
styling, styling,
// XXX // XXX
//attributes, //attributes,
@ -1273,7 +1322,7 @@ var Outline = {
outline outline
: node.parentElement === outline ? : node.parentElement === outline ?
outline outline
: node.parentElement.parentElement } : node?.parentElement?.parentElement }
var children = function(node){ var children = function(node){
return node === outline ? return node === outline ?
[...node.children] [...node.children]
@ -1922,7 +1971,7 @@ var Outline = {
var line = edited.getTextGeometry().line var line = edited.getTextGeometry().line
if(line == 0){ if(line == 0){
evt.preventDefault() evt.preventDefault()
that.focus('edited', 'prev') } that.edit('prev') }
} else { } else {
evt.preventDefault() evt.preventDefault()
this.focus('focused', -1) } }, this.focus('focused', -1) } },
@ -1943,9 +1992,9 @@ var Outline = {
var edited = this.get('edited') var edited = this.get('edited')
if(edited){ if(edited){
var {line, lines} = edited.getTextGeometry() var {line, lines} = edited.getTextGeometry()
if(line == lines - 1){ if(lines == 0 || line == lines - 1){
evt.preventDefault() evt.preventDefault()
that.focus('edited', 'next') } that.edit('next') }
} else { } else {
evt.preventDefault() evt.preventDefault()
this.focus('focused', 1) } }, this.focus('focused', 1) } },
@ -2088,7 +2137,8 @@ var Outline = {
var a = edited.selectionStart var a = edited.selectionStart
var b = edited.selectionEnd var b = edited.selectionEnd
// position 0: focus empty node above... // position 0: focus empty node above...
if(a == 0){ if(a == 0
&& edited.value.trim() != ''){
this.Block('prev') this.Block('prev')
this.edit('prev') this.edit('prev')
// focus new node... // focus new node...
@ -2480,6 +2530,7 @@ var Outline = {
setTimeout(function(){ setTimeout(function(){
that.focus() }, 0) } that.focus() }, 0) }
/*/ /*/
// XXX this for some reason takes lots of time at this point...
this.focus() } this.focus() }
//*/ //*/

View File

@ -48,17 +48,14 @@ var setup = function(){
- -
- ## Bugs: - ## Bugs:
focused:: true focused:: true
- BUG: navigation in edit mode broken...
-
- // can't go past this down...
-
- BUG: caret positioning broken - BUG: caret positioning broken
- Example: - *TODO*::
- text text text - text text text
<div> <div>
block element block element
</div> </div>
this line, and above placement of completely broken this line, and above placement of completely broken
- the odd thing is that a nested (bug) qupted text below also breaks...
- _this seems to be an issue with: `.getMarkdownOffset(..)`_ - _this seems to be an issue with: `.getMarkdownOffset(..)`_
- ``` - ```
m = `text text text m = `text text text
@ -72,30 +69,30 @@ var setup = function(){
this returns `69` while it should return `5` this returns `69` while it should return `5`
_...replacing `\n\n\n` with `\n\n` seems to fix the issue (also works with spaces)_ _...replacing `\n\n\n` with `\n\n` seems to fix the issue (also works with spaces)_
(BUG also the above line is not italic -- can't reproduce) (BUG also the above line is not italic -- can't reproduce)
- clicking right of the last line places cursor wrong - *DONE*::
- _this is a problem with the new version of `getMarkdownOffset(..)`_ collapsed:: true
- DONE text text text - text text text
- DONE text text text - text text text
text text text text text text
text text text text text text
- DONE M - M
M can't place cursor before first char M can't place cursor before first char
M M
- DONE text text text - text text text
``` ```
text text text text text text
``` ```
text text text text text text
- DONE text text text - text text text
_text text text_ _text text text_
text text text text text text
- DONE _text text text_ - _text text text_
text text text text text text
- DONE ``` - ```
text text text text text text
``` ```
text text text text text text
- DONE |text|text|text| - |text|text|text|
|text|text|text| |text|text|text|
|text|text|text| |text|text|text|
- BUG: parser: code blocks do not ignore single back-quotes... - BUG: parser: code blocks do not ignore single back-quotes...
@ -112,9 +109,17 @@ var setup = function(){
- normal textarea is not sized correctly - normal textarea is not sized correctly
- General: - General:
- bullets are too close to text - bullets are too close to text
- side margins are a bit too large (account for toolbat to the right) - side margins are a bit too large
- still need to account for toolbar to the right
- left side does not need to be as wide
- -
- ## ToDo: - ## ToDo:
- ASAP time to think about a standalone client -- at least to edit own notes as a test...
- _also this would be a nice opportunity to start the move to a newer electron version_
- might be a good idea to make the heading level depend on its depth...
- might be a good idea to think how to avoid the constant selections on focus...
- Q: do we want to place the caret when moving between nodes???
- _would be nice to remember the caret horizontal offset for vertical movement_
- Q: should we use `HTMLTextAreaElement.autoUpdateSize(..)` or handle it globally in setup??? - Q: should we use `HTMLTextAreaElement.autoUpdateSize(..)` or handle it globally in setup???
- _...I'm leaning towards the later..._ - _...I'm leaning towards the later..._
- Q: can we place a cursor in a table correctly??? - Q: can we place a cursor in a table correctly???
@ -178,6 +183,7 @@ var setup = function(){
- numbered lists: add counters to a depth of 6-7... - numbered lists: add counters to a depth of 6-7...
- _or find a way to make them repeat..._ - _or find a way to make them repeat..._
- FEATURE: read-only mode - FEATURE: read-only mode
- FEATURE: TOC (???)
- FEATURE: auto-shift done blocks to the end of siblings... (option?) - FEATURE: auto-shift done blocks to the end of siblings... (option?)
- ...or should this be `sort:: done` -- i.e. sort children by done status?? - ...or should this be `sort:: done` -- i.e. sort children by done status??
- codeblock as a block - codeblock as a block