mirror of
				https://github.com/flynx/pWiki.git
				synced 2025-10-29 01:50:07 +00:00 
			
		
		
		
	tuning...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									1842223a79
								
							
						
					
					
						commit
						dea1a6d7ff
					
				| @ -6,6 +6,7 @@ | ||||
| 
 | ||||
| 
 | ||||
| //---------------------------------------------------------------------
 | ||||
| // Helpers...
 | ||||
| 
 | ||||
| // XXX do a caret api...
 | ||||
| 
 | ||||
| @ -44,7 +45,15 @@ function clickPoint(x,y){ | ||||
| // box corresponds the to desired coordinates. This accounts for nested 
 | ||||
| // elements.
 | ||||
| //
 | ||||
| // XXX might be a good idea to tweak this just a bit (1/2 letter) to the left...
 | ||||
| // XXX it would be a better idea to do a binary search instead of a liner 
 | ||||
| // 		pass... but at this point this is not critical (unless we get 
 | ||||
| // 		gigantic blocks)
 | ||||
| // XXX this misbehaves on boondies between text/node elements...
 | ||||
| // 		Example:
 | ||||
| // 			'# Heading with _Italics_'
 | ||||
| // 			  ^             ^
 | ||||
| // 			clicking in the marked areas will either land the cursor at 
 | ||||
| // 			the last char of one block or after the first in the second...
 | ||||
| // XXX HACK -- is there a better way to do this???
 | ||||
| var getCharOffset = function(elem, x, y, c){ | ||||
| 	c = c ?? 0 | ||||
| @ -52,15 +61,20 @@ var getCharOffset = function(elem, x, y, c){ | ||||
| 	for(var e of [...elem.childNodes]){ | ||||
| 		// text node...
 | ||||
| 		if(e instanceof Text){ | ||||
| 			for(var i=0; i < e.length; i++){ | ||||
| 			var prev, b | ||||
| 			for(var i=0; i <= e.length; i++){ | ||||
| 				r.setStart(e, i) | ||||
| 				r.setEnd(e, i) | ||||
| 				var b = r.getBoundingClientRect() | ||||
| 				prev = b | ||||
| 				b = r.getBoundingClientRect() | ||||
| 				// found target...
 | ||||
| 				if(b.x >= x  | ||||
| 						&& b.y <= y  | ||||
| 						&& b.bottom >= y){ | ||||
| 					return c + i } } | ||||
| 					// get the closest gap between chars to the click...
 | ||||
| 					return Math.abs(b.x - x) <= Math.abs(prev.x - x) ? | ||||
| 						c + i | ||||
| 						: c + i - 1 } } | ||||
| 			c += i | ||||
| 		// html node...
 | ||||
| 		} else { | ||||
| @ -1341,6 +1355,7 @@ var Outline = { | ||||
| 						elem.selectionEnd = elem.value.length  | ||||
| 					} else { | ||||
| 						var m = getMarkdownOffset(elem.value, view.innerText, c) | ||||
| 						console.log('---', c, m) | ||||
| 						elem.focus() | ||||
| 						elem.selectionStart = c + m | ||||
| 						elem.selectionEnd = c + m } } }) | ||||
|  | ||||
| @ -50,7 +50,8 @@ var setup = function(){ | ||||
| - ## ToDo: | ||||
|   - ASAP: scroll into view is bad... | ||||
|   - ASAP: mobile browsers behave quite chaotically ignoring parts of the styling... | ||||
|   - ASAP: tweak the getCharOffset(..) by about 1/2 a letter to the left... | ||||
|   - ASAP: `getCharOffset(..)` needs more tuning... | ||||
|     - gaps between nested nodes and text are off -- see code for notes... | ||||
|   - FEATURE: read-only mode | ||||
|   - export html | ||||
|     - embed css | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user