IIRC, editing worked at one point, but not rich text editing.

TLF had many goals, one of which was to provide pixel-perfect cross-browser 
glyph positioning.  If you need that, I don't know if any JS editors do that, 
so you probably have to stick with TLF and have a lot of work left to make it 
perfect.  What I had working at one time did not guarantee pixel-perfect.

Nor did it guarantee the next level back from that which would be cross-browser 
line-breaking.  That is probably much less work than pixel-perfect, and 
potentially easier for certain width and other trade-offs

TLF also support right-to-left text.  I did not get that working.

If all you need is rich text editing and different glyph positions on different 
browser is ok, I would not recommend trying to use TLF.  There is a TinyEditor 
wrapper for that.  The couple of use cases I saw stored rich text as HTML 
anyway, so why convert it to TextFlow and back out again?

HTH,
-Alex

On 2/17/21, 8:16 AM, "Harbs" <[email protected]> wrote:

    Alex did work getting TLF to work with spans. IIRC that was functional.

    I don’t remember whether editing worked or not, but that should be doable 
without too much trouble if not.

    You’ll need a hidden input to take the interaction, but you probably know 
that already.

    > On Feb 17, 2021, at 6:04 PM, Yishay Weiss <[email protected]> wrote:
    > 
    > I am not sure which problems are app related and which are FW related. 
Glad to hear you're optimistic, makes me think it's worthwhile going for it. 
I'll try to create some tests for these APIs.
    > 
    > Spark TextArea isn't editable so I thought there might be issues with 
TLF, but again, it could be Spark issues.
    > 
    > Thanks.
    > ________________________________
    > From: Harbs <[email protected]>
    > Sent: Wednesday, February 17, 2021 1:45 PM
    > To: Apache Royale Development <[email protected]>
    > Subject: Re: TLF APIs Effort Estimate
    > 
    > The vast majority of this should work. No?
    > 
    >> On Feb 17, 2021, at 12:30 PM, Yishay Weiss <[email protected]> 
wrote:
    >> 
    >> Hi All,
    >> 
    >> The app I am porting makes extensive use of some TLF APIs. 
Re-implementing everything differently will be difficult so I am trying to 
estimate the work involved in actually making the below APIs work. If anyone 
(prbly Harbs and Alex) has time to have a quick glance and help me asses the 
work involved, I would be grateful.
    >> 
    >> Thanks,
    >> Yishay
    >> 
    >> flashx.textLayout.container.ContainerController,3
    >> flashx.textLayout.container.ContainerController:compositionHeight,3
    >> flashx.textLayout.container.ContainerController:getContentBounds,1
    >> flashx.textLayout.container.ContainerController:setCompositionSize,1
    >> flashx.textLayout.container.ContainerController:verticalScrollPosition,4
    >> flashx.textLayout.conversion.ConversionType,7
    >> flashx.textLayout.conversion.ConversionType:STRING_TYPE,2
    >> flashx.textLayout.conversion.ConversionType:XML_TYPE,5
    >> flashx.textLayout.conversion.TextConverter,18
    >> flashx.textLayout.conversion.TextConverter:TEXT_LAYOUT_FORMAT,9
    >> flashx.textLayout.conversion.TextConverter:export,7
    >> flashx.textLayout.conversion.TextConverter:importToFlow,2
    >> flashx.textLayout.edit.EditManager,3
    >> flashx.textLayout.edit.EditManager:applyFormat,2
    >> flashx.textLayout.edit.EditManager:applyFormatToElement,2
    >> flashx.textLayout.edit.EditManager:applyLink,2
    >> flashx.textLayout.edit.EditManager:applyParagraphFormat,2
    >> flashx.textLayout.edit.EditManager:insertInlineGraphic,1
    >> flashx.textLayout.edit.EditManager:keyDownHandler,1
    >> flashx.textLayout.edit.EditManager:keyUpHandler,1
    >> flashx.textLayout.edit.EditManager:textFlow,1
    >> flashx.textLayout.edit.EditManager:undoManager,1
    >> flashx.textLayout.edit.ElementRange,4
    >> flashx.textLayout.edit.ElementRange:createElementRange,1
    >> flashx.textLayout.edit.ElementRange:textFlow,1
    >> flashx.textLayout.edit.IEditManager,12
    >> flashx.textLayout.edit.SelectionManager:activePosition,2
    >> flashx.textLayout.edit.SelectionManager:anchorPosition,1
    >> flashx.textLayout.edit.SelectionManager:getCommonCharacterFormat,1
    >> flashx.textLayout.edit.SelectionManager:getSelectionState,12
    >> flashx.textLayout.edit.SelectionState,12
    >> flashx.textLayout.edit.SelectionState:absoluteEnd,3
    >> flashx.textLayout.edit.SelectionState:absoluteStart,3
    >> flashx.textLayout.edit.TextFlowEdit,2
    >> flashx.textLayout.edit.TextFlowEdit:makeLink,1
    >> flashx.textLayout.edit.TextFlowEdit:removeLink,1
    >> flashx.textLayout.edit.TextScrap:textFlow,1
    >> flashx.textLayout.elements.DivElement,93
    >> flashx.textLayout.elements.DivElement:addChild,11
    >> flashx.textLayout.elements.DivElement:addChildAt,2
    >> flashx.textLayout.elements.DivElement:getChildAt,6
    >> flashx.textLayout.elements.DivElement:getChildIndex,3
    >> flashx.textLayout.elements.DivElement:getElementRelativeStart,1
    >> flashx.textLayout.elements.DivElement:getFirstLeaf,5
    >> flashx.textLayout.elements.DivElement:getLastLeaf,3
    >> flashx.textLayout.elements.DivElement:getNextSibling,6
    >> flashx.textLayout.elements.DivElement:getPreviousSibling,3
    >> flashx.textLayout.elements.DivElement:numChildren,2
    >> flashx.textLayout.elements.DivElement:removeChild,4
    >> flashx.textLayout.elements.DivElement:removeChildAt,1
    >> flashx.textLayout.elements.DivElement:setStyle,5
    >> flashx.textLayout.elements.DivElement:splitAtIndex,1
    >> flashx.textLayout.elements.FlowElement,30
    >> flashx.textLayout.elements.FlowElement:deepCopy,1
    >> flashx.textLayout.elements.FlowElement:fontStyle,1
    >> flashx.textLayout.elements.FlowElement:fontWeight,1
    >> flashx.textLayout.elements.FlowElement:getAbsoluteStart,2
    >> flashx.textLayout.elements.FlowElement:getNextSibling,3
    >> flashx.textLayout.elements.FlowElement:getParagraph,13
    >> flashx.textLayout.elements.FlowElement:getParentByType,4
    >> flashx.textLayout.elements.FlowElement:getStyle,4
    >> flashx.textLayout.elements.FlowElement:getText,2
    >> flashx.textLayout.elements.FlowElement:parent,5
    >> flashx.textLayout.elements.FlowElement:setStyle,1
    >> flashx.textLayout.elements.FlowElement:textDecoration,1
    >> flashx.textLayout.elements.FlowElement:userStyles,2
    >> flashx.textLayout.elements.FlowGroupElement,11
    >> flashx.textLayout.elements.FlowGroupElement:addChild,6
    >> flashx.textLayout.elements.FlowGroupElement:findLeaf,2
    >> flashx.textLayout.elements.FlowGroupElement:getChildAt,2
    >> flashx.textLayout.elements.FlowGroupElement:getFirstLeaf,5
    >> flashx.textLayout.elements.FlowGroupElement:getStyle,13
    >> flashx.textLayout.elements.FlowGroupElement:removeChild,2
    >> flashx.textLayout.elements.FlowLeafElement,11
    >> flashx.textLayout.elements.FlowLeafElement:getNextLeaf,1
    >> flashx.textLayout.elements.FlowLeafElement:getParagraph,2
    >> flashx.textLayout.elements.FlowLeafElement:getParentByType,2
    >> flashx.textLayout.elements.FlowLeafElement:parent,5
    >> flashx.textLayout.elements.FlowLeafElement:text,2
    >> flashx.textLayout.elements.InlineGraphicElement,20
    >> flashx.textLayout.elements.InlineGraphicElement:getNextSibling,1
    >> flashx.textLayout.elements.InlineGraphicElement:graphic,4
    >> flashx.textLayout.elements.InlineGraphicElement:height,4
    >> flashx.textLayout.elements.InlineGraphicElement:lineHeight,3
    >> flashx.textLayout.elements.InlineGraphicElement:source,4
    >> flashx.textLayout.elements.InlineGraphicElement:width,5
    >> flashx.textLayout.elements.LinkElement,20
    >> flashx.textLayout.elements.LinkElement:getStyle,3
    >> flashx.textLayout.elements.LinkElement:href,7
    >> flashx.textLayout.elements.LinkElement:setStyle,5
    >> flashx.textLayout.elements.LinkElement:target,6
    >> flashx.textLayout.elements.ParagraphElement,87
    >> flashx.textLayout.elements.ParagraphElement:addChild,15
    >> flashx.textLayout.elements.ParagraphElement:computedFormat,1
    >> flashx.textLayout.elements.ParagraphElement:deepCopy,1
    >> flashx.textLayout.elements.ParagraphElement:fontFamily,2
    >> flashx.textLayout.elements.ParagraphElement:fontSize,4
    >> flashx.textLayout.elements.ParagraphElement:fontWeight,2
    >> flashx.textLayout.elements.ParagraphElement:format,1
    >> flashx.textLayout.elements.ParagraphElement:getAbsoluteStart,1
    >> flashx.textLayout.elements.ParagraphElement:getChildAt,1
    >> flashx.textLayout.elements.ParagraphElement:getFirstLeaf,4
    >> flashx.textLayout.elements.ParagraphElement:getLastLeaf,1
    >> flashx.textLayout.elements.ParagraphElement:getNextParagraph,2
    >> flashx.textLayout.elements.ParagraphElement:getNextSibling,5
    >> flashx.textLayout.elements.ParagraphElement:getParentByType,2
    >> flashx.textLayout.elements.ParagraphElement:getPreviousSibling,1
    >> flashx.textLayout.elements.ParagraphElement:getStyle,13
    >> flashx.textLayout.elements.ParagraphElement:getText,2
    >> flashx.textLayout.elements.ParagraphElement:parent,19
    >> flashx.textLayout.elements.ParagraphElement:setStyle,38
    >> flashx.textLayout.elements.ParagraphElement:textAlign,3
    >> flashx.textLayout.elements.ParagraphElement:userStyles,1
    >> flashx.textLayout.elements.SpanElement,40
    >> flashx.textLayout.elements.SpanElement:getAbsoluteStart,1
    >> flashx.textLayout.elements.SpanElement:getElementRelativeStart,2
    >> flashx.textLayout.elements.SpanElement:getParagraph,1
    >> flashx.textLayout.elements.SpanElement:setStyle,1
    >> flashx.textLayout.elements.SpanElement:text,19
    >> flashx.textLayout.elements.SpanElement:textDecoration,1
    >> flashx.textLayout.elements.TextFlow,48
    >> flashx.textLayout.elements.TextFlow:addChild,5
    >> flashx.textLayout.elements.TextFlow:addChildAt,3
    >> flashx.textLayout.elements.TextFlow:addEventListener,14
    >> flashx.textLayout.elements.TextFlow:dispatchEvent,19
    >> flashx.textLayout.elements.TextFlow:findLeaf,7
    >> flashx.textLayout.elements.TextFlow:flowComposer,29
    >> flashx.textLayout.elements.TextFlow:getChildAt,1
    >> flashx.textLayout.elements.TextFlow:getChildIndex,3
    >> flashx.textLayout.elements.TextFlow:getFirstLeaf,7
    >> flashx.textLayout.elements.TextFlow:getLastLeaf,1
    >> flashx.textLayout.elements.TextFlow:interactionManager,55
    >> flashx.textLayout.elements.TextFlow:removeChild,2
    >> flashx.textLayout.elements.TextFlow:removeEventListener,6
    >> flashx.textLayout.elements.TextFlow:textLength,1
    >> flashx.textLayout.elements.TextFlow:whiteSpaceCollapse,1
    >> flashx.textLayout.elements.TextRange:absoluteEnd,4
    >> flashx.textLayout.elements.TextRange:absoluteStart,5
    >> flashx.textLayout.elements.TextRange:activePosition,4
    >> flashx.textLayout.elements.TextRange:anchorPosition,1
    >> flashx.textLayout.events.CompositionCompleteEvent,2
    >> flashx.textLayout.events.CompositionCompleteEvent:COMPOSITION_COMPLETE,1
    >> flashx.textLayout.events.FlowOperationEvent,23
    >> flashx.textLayout.events.FlowOperationEvent:FLOW_OPERATION_BEGIN,5
    >> flashx.textLayout.events.FlowOperationEvent:FLOW_OPERATION_COMPLETE,1
    >> flashx.textLayout.events.FlowOperationEvent:FLOW_OPERATION_END,1
    >> flashx.textLayout.events.FlowOperationEvent:operation,17
    >> flashx.textLayout.events.FlowOperationEvent:preventDefault,1
    >> flashx.textLayout.events.FlowOperationEvent:stopImmediatePropagation,1
    >> flashx.textLayout.events.FlowOperationEvent:stopPropagation,1
    >> flashx.textLayout.events.SelectionEvent,8
    >> flashx.textLayout.events.SelectionEvent:SELECTION_CHANGE,4
    >> flashx.textLayout.events.TextLayoutEvent,2
    >> flashx.textLayout.events.TextLayoutEvent:SCROLL,1
    >> flashx.textLayout.formats.ITextLayoutFormat,7
    >> flashx.textLayout.formats.TextAlign,17
    >> flashx.textLayout.formats.TextAlign:CENTER,7
    >> flashx.textLayout.formats.TextAlign:JUSTIFY,2
    >> flashx.textLayout.formats.TextAlign:LEFT,4
    >> flashx.textLayout.formats.TextAlign:RIGHT,4
    >> flashx.textLayout.formats.TextDecoration,8
    >> flashx.textLayout.formats.TextDecoration:NONE,3
    >> flashx.textLayout.formats.TextDecoration:UNDERLINE,5
    >> flashx.textLayout.formats.TextLayoutFormat,43
    >> flashx.textLayout.formats.TextLayoutFormat:backgroundColor,4
    >> flashx.textLayout.formats.TextLayoutFormat:color,7
    >> flashx.textLayout.formats.TextLayoutFormat:fontFamily,2
    >> flashx.textLayout.formats.TextLayoutFormat:fontSize,5
    >> flashx.textLayout.formats.TextLayoutFormat:fontStyle,7
    >> flashx.textLayout.formats.TextLayoutFormat:fontWeight,7
    >> flashx.textLayout.formats.TextLayoutFormat:lineThrough,2
    >> flashx.textLayout.formats.TextLayoutFormat:textAlign,6
    >> flashx.textLayout.formats.TextLayoutFormat:textDecoration,4
    >> flashx.textLayout.formats.WhiteSpaceCollapse,1
    >> flashx.textLayout.formats.WhiteSpaceCollapse:PRESERVE,1
    >> flashx.textLayout.operations.DeleteTextOperation,4
    >> flashx.textLayout.operations.DeleteTextOperation:deleteSelectionState,2
    >> flashx.textLayout.operations.InsertInlineGraphicOperation,1
    >> flashx.textLayout.operations.InsertTextOperation,5
    >> flashx.textLayout.operations.InsertTextOperation:_text,1
    >> flashx.textLayout.operations.MoveChildrenOperation,1
    >> flashx.textLayout.operations.PasteOperation,3
    >> flashx.textLayout.operations.PasteOperation:textScrap,1
    >> flashx.textLayout.operations.SplitParagraphOperation,3
    >> flashx.textLayout.operations.UndoOperation,1
    >> flashx.textLayout.tlf_internal,2
    >> flashx.undo.IUndoManager,1
    >> flashx.undo.UndoManager,5
    >> flashx.undo.UndoManager:undoAndRedoItemLimit,1
    >> 
    > 


Reply via email to