Compare commits

..

No commits in common. "29650ba7c99e6defa5d4994d65e76c26eba3bd72" and "6017113e1e829d3ccaf6f2ab32cae4f269864f82" have entirely different histories.

2 changed files with 19 additions and 90 deletions

View File

@ -590,92 +590,38 @@ var tasks = {
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// XXX do a better default id... // XXX needs lots more work...
var toc = { var toc = {
__proto__: plugin, __proto__: plugin,
__skip_local_root__: true, // XXX not sure on what to build the hierarchy...
// this could be:
// - heading level
// - topology
// - both
// - ...
update: function(editor, elem){ update: function(editor, elem){
var that = this
var outline = editor.outline var outline = editor.outline
var TOCs = [...outline.querySelectorAll('.TOC .view')]
var tocs = [...outline.querySelectorAll('.toc .view')] var tocs = [...outline.querySelectorAll('.toc .view')]
if(TOCs.length + tocs.length == 0){ if(tocs.length == 0){
return } return }
var level = function(node){
var level = function(node, root=outline){
var depth = 0 var depth = 0
var parent = node var parent = node
while(parent !== root while(parent !== outline
&& parent != null){ && parent != null){
if(parent.classList.contains('block') if(parent.classList.contains('block')){
&& parent.classList.contains('heading')){
depth++ } depth++ }
parent = parent.parentElement } parent = parent.parentElement }
return depth } return depth }
// XXX revise... var headings = [...editor.outline.querySelectorAll('.block.heading>.view')]
var seen = new Set() .map(function(e){
var makeID = function(text){ return `<li>${ e.innerText.split(/\n/)[0] }</li>`
var id = encodeURI( })
text var lst = document.createElement('ul')
.trim() lst.innerHTML = headings.join('\n')
.replace(/[#?$%:;.,]/g, '')
.replace(/\s+/g, '-'))
if(seen.has(id)
|| document.getElementById(id)){
var i = 1
var candidate = id +'-'+ i
while(seen.has(candidate)
|| document.getElementById(candidate)){
candidate = id +'-'+ i++ }
id = id +'-'+ i }
seen.add(id)
return id }
var makeTOC = function(root=outline){
var index = 0
var lst = document.createElement('ul')
var list = lst
var depth = 1
for(var e of [...root.querySelectorAll('.block.heading>.view')]){
var block = editor.get(e)
// skip the root element???
if(!that.__skip_local_root__
&& block === root){
continue }
var d = level(e, root)
// down...
if(d > depth){
var sub = document.createElement('ul')
lst.append(sub)
lst = sub
depth++
// up...
} else while(d < depth && depth > 0){
lst = lst.parentElement ?? lst
depth-- }
var elem = document.createElement('li')
var id = block.id == '' ?
// XXX do a better default...
//'__'+ index++
makeID(e.innerText)
: block.id
block.id = id
elem.innerHTML = `<a href="#${id}">${e.innerHTML.trim()}</a>`
lst.append(elem) }
return list }
// global tocs...
var list = makeTOC()
for(var toc of TOCs){
toc.innerHTML = ''
toc.append(list) }
// local tocs...
for(var toc of tocs){ for(var toc of tocs){
toc.innerHTML = '' toc.append(lst) } },
toc.append(
makeTOC(
editor.get(toc, 'parent'))) } },
__setup__: function(editor){ __setup__: function(editor){
return this.update(editor) }, return this.update(editor) },
@ -684,10 +630,8 @@ var toc = {
__parse__: function(text, editor, elem){ __parse__: function(text, editor, elem){
return text return text
.replace(/^\s*toc\s*$/,
this.style(editor, elem, 'toc', ''))
.replace(/^\s*TOC\s*$/, .replace(/^\s*TOC\s*$/,
this.style(editor, elem, 'TOC', '')) }, this.style(editor, elem, 'toc', '')) },
} }

View File

@ -141,8 +141,6 @@ var setup = function(){
|text|text|text| |text|text|text|
- -
- ## ToDo: - ## ToDo:
- Q: should auto-headings be exported as normal/manual markdown headings???
- expand sub-tree on follow link...
- Time to think about a standalone client -- at least to edit own notes as a test... - 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_ - _also this would be a nice opportunity to start the move to a newer electron version_
- Might be a good idea to think how to avoid the constant selections on focus... - Might be a good idea to think how to avoid the constant selections on focus...
@ -260,7 +258,6 @@ var setup = function(){
- `<editable/>` -- field marker - `<editable/>` -- field marker
- each child node will copy the template and allow editing of only fields - each child node will copy the template and allow editing of only fields
- not clear how to handle template changes... - not clear how to handle template changes...
- DONE \TOC global/local
- DONE FEATURE dynamic headings -- level depends on number of headings above... - DONE FEATURE dynamic headings -- level depends on number of headings above...
- DONE Experimental syntax: - DONE Experimental syntax:
``` ```
@ -557,18 +554,6 @@ var setup = function(){
- Symbols -- _should these be ligatures?_ - Symbols -- _should these be ligatures?_
- (i), (c), /!\, ... - (i), (c), /!\, ...
- -- and --- - -- and ---
- Table of content
- Global
- TOC
- Local
- toc
- demo content
collapsed:: true
- @ Heading
- @ Heading
- @ Heading
- @ Heading
- @ Heading
- Attributes: - Attributes:
id:: attributes id:: attributes
- collapsed - collapsed