diff --git a/experiments/outline-editor/generic.js b/experiments/outline-editor/generic.js
index ea5e06b..9fdcf9d 100755
--- a/experiments/outline-editor/generic.js
+++ b/experiments/outline-editor/generic.js
@@ -40,6 +40,7 @@ HTMLTextAreaElement.prototype.getTextGeometry = function(){
// get the relevant styles...
var style = getComputedStyle(this)
+ var paddingV = parseFloat(style.paddingTop) + parseFloat(style.paddingBottom)
var s = {}
for(var i=0; i < style.length; i++){
var k = style[i]
@@ -49,12 +50,11 @@ HTMLTextAreaElement.prototype.getTextGeometry = function(){
s[k] = style[k] } }
var carret = document.createElement('span')
- carret.innerText = '|'
+ carret.innerText = '|'
carret.style.margin = '0px'
carret.style.padding = '0px'
var span = document.createElement('span')
- span.innerText = text.slice(0, offset)
Object.assign(span.style, {
...s,
@@ -62,24 +62,28 @@ HTMLTextAreaElement.prototype.getTextGeometry = function(){
display: 'block',
top: '-100%',
left: '-100%',
- width: this.offsetWidth + 'px',
- height: this.scrollHeight + 'px',
+ width: style.width,
+ height: style.height,
padding: style.padding,
+ boxSizing: style.boxSizing,
+
outline: 'solid 1px red',
pointerEvents: 'none',
})
- span.append(carret)
+ span.append(
+ text.slice(0, offset),
+ carret,
+ text.slice(offset))
document.body.append(span)
- var padding = parseFloat(style.paddingTop) + parseFloat(style.paddingBottom)
var res = {
length: text.length,
lines: Math.floor(
- (this.offsetHeight - padding)
+ (this.offsetHeight - paddingV)
/ carret.offsetHeight),
line: Math.floor(carret.offsetTop / carret.offsetHeight),
offset: offset,
diff --git a/experiments/outline-editor/index.html b/experiments/outline-editor/index.html
index 76c9fd3..7503d58 100755
--- a/experiments/outline-editor/index.html
+++ b/experiments/outline-editor/index.html
@@ -67,7 +67,7 @@ var setup = function(){
- ...or should this be `sort:: done` -- i.e. sort children by done status??
- codeblock as a block
_...if only whitespace before/after clear it and style whole block..._
- _...might be a good idea to do this with codeblock at start/end of block..._
+ _...might be a good idea to do this with codeblock at start/end of block..._
- Code blocks and bullets:
- ```
code
@@ -77,8 +77,8 @@ var setup = function(){
- FEATURE: read-only mode
- export html
- embed css
- - cleanup html
- - generate ideomatic html (???)
+ - cleanup html
+ - generate ideomatic html (???)
- style attrs (see: [attrs](#attributes))
- FEATURE: `collapse-children:: true` block option -- when loading collapse all immediate children
- FF: figure out a way to draw expand/collapse bullets without the use of CSS' `:has(..)`
@@ -93,9 +93,9 @@ var setup = function(){
- make this generic
- FEATURE? block templates...
collapsed:: true
- - something like: `TPL: [_] -- `
+ - something like: `TPL: [_] -- `
- `TPL:` -- template marker
- - `` -- field marker
+ - `` -- field marker
- each child node will copy the template and allow editing of only fields
- not clear how to handle template changes...
- JSON API
@@ -123,7 +123,7 @@ var setup = function(){
- DONE unify attr parsing
collapsed:: true
- _now duplicated in `.parse(..)` and `.__code2html__(..)`_
- - might be a good idea to add a special text parse stage and use in on both branches...
+ - might be a good idea to add a special text parse stage and use in on both branches...
- DONE attrs in editor are not parsed correctly (see: [attrs](#attributes))
- DONE multiple attrs are not handled correctly (see: [attrs](#attributes))
- DONE call `.sync()` on all changes...
@@ -140,7 +140,7 @@ var setup = function(){
- _not sure how..._
- DONE click to select/edit node must retain click position in text...
- DONE checkbox navigation via `alt-`
- collapsed:: true
+ collapsed:: true
- _might be a good idea to include also TODO/DONE navigation -- not yet sure how to mark undone blocks (i.e. the ones marked with TODO in Logseg)..._
- toggle with `space`
- navigation auto-selects first checkbox
@@ -166,8 +166,8 @@ var setup = function(){
- ## Refactoring:
- Plugin architecture
- DONE basic structure
- - plugin handler sequencing (see: `.setup(..)`)
- - DONE plugin handler canceling (see: `.runPlugins(..)`)
+ - plugin handler sequencing (see: `.setup(..)`)
+ - DONE plugin handler canceling (see: `.runPlugins(..)`)
- DONE Item parser (`.__code2html__(..)`)
collapsed:: true
- DONE split out
@@ -175,7 +175,7 @@ var setup = function(){
- DONE Format parser/generator
collapsed:: true
- DONE split out
- - DONE define api (see: `.__code2text__(..) / .__text2code__(..)`)
+ - DONE define api (see: `.__code2text__(..) / .__text2code__(..)`)
- CSS
- separate out settings
- separate out theming
@@ -245,21 +245,20 @@ var setup = function(){
- y
- z
- c
- - > quote
- id::quote-example
+ - > quote
- Notes
- - NOTE: a note text
+ - NOTE: a note text
- NOTE:
- a root note can also be empty
- click on the outer border to edit root
- - // C-style comment
- - ; ASM-style comment
- - XXX Highlight
+ - // C-style comment
+ - ; ASM-style comment
+ - XXX Highlight
- DONE Done (toggled via: `ctrl-d`)
- Basic inline *bold*, _italic_ and ~striked~
- Marking ==text==
- Code:
- - Inline quoting `html code`
+ - Inline quoting `html code`
- code blocks
```javascript
var text = 'Hello, world!'