diff --git a/experiments/outline-editor/editor.css b/experiments/outline-editor/editor.css index dea33dc..c357529 100755 --- a/experiments/outline-editor/editor.css +++ b/experiments/outline-editor/editor.css @@ -44,11 +44,10 @@ display: block; position: relative; - /* XXX do we need this??? - .code { + /* hide the root editor code... */ + &>.code { display: none; } - */ /* header */ .header { diff --git a/experiments/outline-editor/editor.js b/experiments/outline-editor/editor.js index 17204d8..d25c42a 100755 --- a/experiments/outline-editor/editor.js +++ b/experiments/outline-editor/editor.js @@ -288,7 +288,7 @@ var quoted = { quote: function(_, code){ return `${ this.encode(code) }` }, - pre_pattern: /(? exception here feels hacky... + // ...a space after pre will force a new line but not + // adding it will hide a single empty line after... + (elem.text == '' + || elem.text.endsWith('')) ? + elem.text + // NOTE: adding a space here is done to prevent the browser + // from hiding the last newline... + : elem.text + ' ' return elem }, @@ -1487,17 +1499,15 @@ var Outline = { focused: 'cls', }, + /* XXX not used -- do we need this?? // XXX UPDATE_CODE_SIZE this is a no-op at this point -- do we need this??? _updateCodeSize: function(code, view){ - // XXX UPDATE_CODE_SIZE - return this code.style.height = getComputedStyle( view ?? code.nextSibling) .height return this }, - /* XXX not used... _updateViewSize: function(view, code){ view.style.height = getComputedStyle( @@ -1531,13 +1541,7 @@ var Outline = { if(this.__code2html__){ // NOTE: we are ignoring the .collapsed attr here parsed = this.__code2html__(data.text, {...data}) - html.innerHTML = - //(parsed.text == '' || parsed.text.endsWith('')) ? - parsed.text == '' ? - parsed.text - // NOTE: adding a space here is done to prevent the browser - // from hiding the last newline... - : parsed.text + ' ' + html.innerHTML = parsed.text // heading... this.__styles != null && node.classList.remove(...this.__styles) @@ -1545,17 +1549,11 @@ var Outline = { && node.classList.add(...parsed.style) delete parsed.style } else { - html.innerHTML = - //(data.text == '' || data.text.endsWith('')) ? - data.text == '' ? - data.text - // NOTE: adding a space here is done to prevent the browser - // from hiding the last newline... - : data.text + ' ' } + html.innerHTML = data.text } code.value = data.text - code.updateSize() + code.updateSize() } // NOTE: this will have no effect if the element is not attached... - this._updateCodeSize(code) } + //this._updateCodeSize(code) } //this._syncTextSize(code, html) } for(var [attr, value] of Object.entries({...data, ...parsed})){ @@ -1904,7 +1902,7 @@ var Outline = { cur[place](block) : undefined - this._updateCodeSize(code) + //this._updateCodeSize(code) //this._syncTextSize(code, view) this.setUndo(this.path(cur), 'remove', [this.path(block)]) } @@ -1956,18 +1954,18 @@ var Outline = { this.outline.innerHTML = this.html(data) - // update sizes of all the textareas (transparent)... - // NOTE: this is needed to make initial clicking into multi-line - // blocks place the cursor into the clicked location. - // ...this is done by expanding the textarea to the element - // size and enabling it to intercept clicks correctly... - // XXX this is a hack -- need to style the thing in such away - // so as to not require this step... - setTimeout(function(){ - var f = that._updateCodeSize.bind(that) - //var f = that._syncTextSize.bind(that) - for(var e of [...that.outline.querySelectorAll('textarea')]){ - f(e) } }, 0) + //// update sizes of all the textareas (transparent)... + //// NOTE: this is needed to make initial clicking into multi-line + //// blocks place the cursor into the clicked location. + //// ...this is done by expanding the textarea to the element + //// size and enabling it to intercept clicks correctly... + //// XXX this is a hack -- need to style the thing in such away + //// so as to not require this step... + //setTimeout(function(){ + // var f = that._updateCodeSize.bind(that) + // //var f = that._syncTextSize.bind(that) + // for(var e of [...that.outline.querySelectorAll('textarea')]){ + // f(e) } }, 0) return this }, //*/ diff --git a/experiments/outline-editor/index.html b/experiments/outline-editor/index.html index c6c039a..96006cd 100755 --- a/experiments/outline-editor/index.html +++ b/experiments/outline-editor/index.html @@ -48,28 +48,22 @@ var setup = function(){ - - ## Bugs: focused:: true - - BUG leading/trailing blank lines mishandled: + - BUG whitespace after trailing code block is not shown (see next bug for details) + - also see: `POST_PRE_WHITESPACE` + - DONE BUG horizontal whitespace after a block of code create an empty line after the `
` tag...
+    collapsed:: true
+    - ```
+      code block -- resized on block edit (`keydown` in edit mode)
+      ```
+      - this is due to `.update(..)` adding a `' '` to the text...
+  - DONE BUG leading/trailing blank lines mishandled:
+    collapsed:: true
     - block sizing
       - issues:
         - 
           blank lines above and below -- the trailing blank is not initially shown
           
-          - _not sure about this yet..._
-        - ```
-          code block -- resized on block edit (`keydown` in edit mode)
-          ```
-          - _this seems to be because of a stray `\n` after re-render + `white-space: ...` in the `.view` element..._
-            _...this is logical as we do not render code on load and to on after edit_
-          - narrowed the issue down to `.update(..)` and adding a ' ' to the text...
-    - ways to fix:
-      - semi-active (current):
-        - active mode currently disabled (see: `UPDATE_CODE_SIZE`)
-        - TEST
-      - passive (preferred):
-        - REJECT try `display:flex` on `.block` and position one elem over the other...
-        - REJECT another way to go is to wrap `.text` stuff in a div and style that...
-      - active:
-        - ...
+        - the main reason for this is that we are not adding a `" "` after each generated block as we do on `.update(..)` -- move this functionality up...
     - blank line at end of block is initially not shown
       - this block contains two lines (empty below)
         
@@ -88,32 +82,6 @@ var setup = function(){
       - 
         this block contains three lines (empty above and below)
         
-    - DONE blank line at start of block is shown but removed on edit
-      collapsed:: true
-      - 
-        this block also contains two lines (empty above)
-        - `editor.data(editor.get()).text` -- no `\n` at start...
-        - `editor.get().querySelector('.code').value` -- no `\n` at start...
-        - ```
-          d = document.createElement('div')
-          d.innerHTML = editor.htmlBlock({text: '\nabc\n'}) // -> '\n' exists...
-          d.querySelector('.code').value // -> no '\n' at start...
-          ```
-          ...seems that the `\n` is lost on html parse...
-      - 
-        this block contains three lines (empty above and below)
-        
-    - _this seams to be a problem only on the initial render -- edit/exit fixes the issue..._
-    - _Q: are we using different code paths for initial render and element render???_
-  - DONE BUG: can't move down out of a code block (_directly connected to the above_)
-    collapsed:: true
-    - edit this line, then move down
-    - ```
-      code
-      ```
-    - this node can't be reached.
-    - _this appears to be due to how we are resizing the text..._ 
-    - BUG resizing seems to be broken -- edit triggers a bad resize
   - BUG: styling error...
     - this _seems `to` work_
     - `while` _this `does` not_
@@ -185,7 +153,7 @@ var setup = function(){
       ```
   -
 - ## ToDo:
-  - clicking left of the block can select one of parent blocks -- bug or a feature??
+  - clicking left of the block can select one of parent blocks -- bug or feature??
   - `.json(..)`, `.data(..)`, ... should be signature compatible with `.get(..)` (???)
     - _current state causes constant confusion..._
   - Time to think about a standalone client -- at least to edit own notes as a test...