mirror of
				https://github.com/flynx/pWiki.git
				synced 2025-10-31 11:00:08 +00:00 
			
		
		
		
	minor tweaks + added stub toc generator...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									f1288fcc4f
								
							
						
					
					
						commit
						5b0967f032
					
				| @ -173,6 +173,7 @@ var getMarkdownOffset = function(markdown, text, i){ | ||||
| // 		(not implemented) backtracking...
 | ||||
| // 		...needs thought...
 | ||||
| // 		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){ | ||||
| 	i = i ?? text.length | ||||
| 	var map = [] | ||||
| @ -255,12 +256,12 @@ var blocks = { | ||||
| 		return text  | ||||
| 			// markdown...
 | ||||
| 			// style: headings...
 | ||||
| 			.replace(/^(?<!\\)######\s+(.*)$/m, this.style(editor, elem, 'heading-6')) | ||||
| 			.replace(/^(?<!\\)#####\s+(.*)$/m, this.style(editor, elem, 'heading-5')) | ||||
| 			.replace(/^(?<!\\)####\s+(.*)$/m, this.style(editor, elem, 'heading-4')) | ||||
| 			.replace(/^(?<!\\)###\s+(.*)$/m, this.style(editor, elem, 'heading-3')) | ||||
| 			.replace(/^(?<!\\)##\s+(.*)$/m, this.style(editor, elem, 'heading-2')) | ||||
| 			.replace(/^(?<!\\)#\s+(.*)$/m, this.style(editor, elem, 'heading-1')) | ||||
| 			.replace(/^(?<!\\)######\s+(.*)$/m, this.style(editor, elem, ['heading', 'heading-6'])) | ||||
| 			.replace(/^(?<!\\)#####\s+(.*)$/m, this.style(editor, elem, ['heading', 'heading-5'])) | ||||
| 			.replace(/^(?<!\\)####\s+(.*)$/m, this.style(editor, elem, ['heading', 'heading-4'])) | ||||
| 			.replace(/^(?<!\\)###\s+(.*)$/m, this.style(editor, elem, ['heading', 'heading-3'])) | ||||
| 			.replace(/^(?<!\\)##\s+(.*)$/m, this.style(editor, elem, ['heading', 'heading-2'])) | ||||
| 			.replace(/^(?<!\\)#\s+(.*)$/m, this.style(editor, elem, ['heading', 'heading-1'])) | ||||
| 			// style: list...
 | ||||
| 			//.replace(/^(?<!\\)[-\*]\s+(.*)$/m, style('list-item'))
 | ||||
| 			.replace(/^\s*(.*)(?<!\\):\s*$/m, this.style(editor, elem, 'list')) | ||||
| @ -611,6 +612,47 @@ var tasks = { | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -      
 | ||||
| 
 | ||||
| // XXX needs lots more work...
 | ||||
| var toc = { | ||||
| 	__proto__: plugin, | ||||
| 
 | ||||
| 	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('.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...
 | ||||
| @ -1144,6 +1186,7 @@ var Outline = { | ||||
| 		// NOTE: this needs to be before styling to prevent it from 
 | ||||
| 		// 		treating '[_] ... [_]' as italic...
 | ||||
| 		tasks, | ||||
| 		//toc,
 | ||||
| 		styling, | ||||
| 		// XXX
 | ||||
| 		//attributes,
 | ||||
| @ -2088,7 +2131,8 @@ var Outline = { | ||||
| 				var a = edited.selectionStart | ||||
| 				var b = edited.selectionEnd | ||||
| 				// position 0: focus empty node above...
 | ||||
| 				if(a == 0){ | ||||
| 				if(a == 0  | ||||
| 						&& edited.value.trim() != ''){ | ||||
| 					this.Block('prev') | ||||
| 					this.edit('prev') | ||||
| 				// focus new node...
 | ||||
| @ -2480,6 +2524,7 @@ var Outline = { | ||||
| 			setTimeout(function(){ | ||||
| 				that.focus() }, 0) } | ||||
| 			/*/ | ||||
| 			// XXX this for some reason takes lots of time at this point...
 | ||||
| 			this.focus() } | ||||
| 			//*/
 | ||||
| 		 | ||||
|  | ||||
| @ -48,12 +48,15 @@ var setup = function(){ | ||||
|   -  | ||||
| - ## Bugs: | ||||
|   focused:: true | ||||
|   - BUG: deleting an element in edit mode breaks code (err) | ||||
|     - click the next line and press `backspace` | ||||
|     -  | ||||
|   - BUG: navigation in edit mode broken... | ||||
|     - | ||||
|     - // can't go past this down... | ||||
|     -  | ||||
|   - BUG: caret positioning broken | ||||
|     - Example: | ||||
|     - *TODO*:: | ||||
|       - text text text | ||||
|         <div> | ||||
|         block element | ||||
| @ -72,30 +75,30 @@ var setup = function(){ | ||||
|             this returns `69` while it should return `5` | ||||
|             _...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) | ||||
|       - clicking right of the last line places cursor wrong | ||||
|         - _this is a problem with the new version of `getMarkdownOffset(..)`_ | ||||
|       - DONE text	text	text | ||||
|       - DONE text text text | ||||
|     - *DONE*:: | ||||
|       collapsed:: true | ||||
|       - text	text	text | ||||
|       - text text text | ||||
|         text text text | ||||
|         text text text | ||||
|       - DONE M | ||||
|       - M | ||||
|         M can't place cursor before first char | ||||
|         M | ||||
|       - 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 | ||||
|       - DONE ``` | ||||
|       - ``` | ||||
|         text text text | ||||
|         ``` | ||||
|         text text text | ||||
|       - DONE |text|text|text| | ||||
|       - |text|text|text| | ||||
|         |text|text|text| | ||||
|         |text|text|text| | ||||
|   - BUG: parser: code blocks do not ignore single back-quotes... | ||||
| @ -115,6 +118,7 @@ var setup = function(){ | ||||
|       - side margins are a bit too large (account for toolbat to the right) | ||||
|   - | ||||
| - ## ToDo: | ||||
|   - TOC? | ||||
|   - Q: should we use `HTMLTextAreaElement.autoUpdateSize(..)` or handle it globally in setup??? | ||||
|     - _...I'm leaning towards the later..._ | ||||
|   - Q: can we place a cursor in a table correctly??? | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user