This is a nice functionality which I think should be present in gwt-core.

FYI: Some weeks ago I sent a patch to enable/disable the RichTextArea,
and now it is in the core (http://gwt-code-reviews.appspot.com/131802)

The steps you have to follow are:
1.- Subscribe to gwt-contributors mailing list
2.- Open a ticket with the issue.
3.- Add a patch to the cod-review application (don't forget to add
enough code to test the new feature, and follow the style conventions)
4.- Wait for feedback.
5.- Finally if the patch is accept you must sign a CLA

Take a look to this page:
http://code.google.com/webtoolkit/makinggwtbetter.html#submittingpatches

Cheers
Manolo




On Tue, Apr 13, 2010 at 5:54 PM, kozura <[email protected]> wrote:
> So I've written a complete selection/range implementation, which
> allows much more sophisticated Rich Text Editor operations.  You can
> obtain and manipulate the cursor or current selected range - with
> this, I was able to trivially create a proper "Link" functionality to
> deal with existing links in the editor.  Inspired from the partial
> solution in gwt-rocket, it uses a structural selection model like the
> W3C spec, with emulation to make it work the same in cursed IE*.  And
> except for wrappers around js calls, everything is written in Java to
> allow full GWT optimization.
>
> I really think this functionality should be part of the GWT library,
> as I think it's the main missing core feature needed to implement full
> RTE capabilities without having to go import external JS RTE
> libraries.  I could always post it as a separate library like gwt-
> rocket, but it's already fairly annoying the number of these little
> libraries with random bits of functionality, which quickly become
> unsupported or bloated.  Additionally, due to an IE bug it would be
> best to have a getSelection/getRange method directly as part of the
> RichTextArea widget.
>
> But that's just me, do others think this is a really need-to-have for
> GWT?  If others feel it'd be a good addition to GWT, I'd be willing to
> spend the time to try to get it in, maybe starting with getting it in
> the incubator.  And through that would love to see any critiques or
> better ways to do any of it.
>
>
> Here's the API, purely structural and doesn't include any of the
> position-based methods that IE has:
>
>
> // Current selection is based on a document/window, so there is a
> browser
> // global selection, and a selection for any iframe windows.
> class Selection
> {
>    // Get the browser global selection
>    static Selection getSelection();
>
>    // Get selection associated with a particular window, ie an RTE
> iframe
>    static Selection getSelection(JavaScriptObject window);
>
>    // Get a range containing current selection.  Changes to the range
> do not
>    // affect the selection, and vice versa
>    Range getRange();
>
>    // Set the selection to what is contained in the range.
> Subsequent
>    // changes to this range object will not affect the selection
>    void setRange(Range range);
>
>    void clear();
>    Document getDocument()
> }
>
> // Represents a range in an html document, as a start and end text
> node,
> // and the offset in to them, ie between the two | marks here:
> //
> // <b>A r|ange <a>that spans</a></b><i> some elem|ents.</i>
> class Range
> {
>    // Constructors
>    Range(Document doc);
>    Range(Element element);
>    Range(RangeEndPoint cursorPoint);
>    Range(RangeEndPoint startPoint, RangeEndPoint endPoint);
>
>    // Get the start/end points of this range, or the cursor if no
> selection
>    RangeEndPoint getCursor();
>    RangeEndPoint getStart();
>    RangeEndPoint getEnd();
>
>    // Get the document this range is contained within
>    Document getDocument();
>
>    // Set the range to be a cursor, ie start == end
>    void setCursor(RangeEndPoint cursorPoint);
>
>    // Set the range to surround the given element
>    void setRange(Element element);
>
>    // Set the endpoints of the range
>    void setRange(RangeEndPoint startPoint, RangeEndPoint endPoint);
>
>    // Set the start or end point of the range
>    void setStartPoint(RangeEndPoint startPoint);
>    void setEndPoint(RangeEndPoint endPoint);
>
>
>    // Returns true if start == end
>    boolean isCursor();
>
>    // Collapses the range to a cursor, either to the start or end
> point
>    void collapse(boolean start);
>
>    // Compare the start or end point of this range with the start or
> end point
>    // of another.  "how" determines which endpoints, ie
> Range.START_TO_END
>    int compareBoundaryPoint(Range compare, short how);
>
>    // Get just the text selected, ie "ange that spans some elem"
>    String getText();
>
>    // Get the html selected, including any tags needed to make it
> complete, ie:
>    // "<b>ange <a>that spans</a></b><i> some elem<i>"
>    String getHtmlText();
>
>    // Returns the lowest level element that completely contains this
> range
>    Element getCommonAncestor();
>
>
>    // Returns an ordered list of all the text nodes in this range
>    List<Text> getSelectedTextNodes();
>
>    // Copy the contents of this range into the given element, leaving
> the
>    // document undisturbed
>    void copyContents(Element copyInto);
>
>    // Delete the contents of this range from the document
>    void deleteContents();
>
>    // Extracts the contents of this range into the given element,
> removing them
>    // from the document
>    void extractContents(Element copyInto);
>    Element extractContents(); // same but creates a span element for
> you
>
>    // Surrounds the contents of this range with the given element,
> putting it
>    // in their place in the document and setting the range to contain
> it.
>    void surroundContents(Element copyInto);
>    Element surroundContents(); // same but creates a span element for
> you
>
>
>    // A static utility function that should be part of Text or Node
> class
>    // Returns the next (or previous) text node, given an existing
> Text node
>    // or any other type of element
>    Text getAdjacentTextNode(Node current, boolean forward);
> }
>
> // Represents a Range endpoint, a text node and offset into it.
> class RangeEndPoint implements Comparable<RangeEndPoint>
> {
>    // Constructors
>    RangeEndPoint(Text text, int offset);
>    RangeEndPoint(Text text, boolean start);
>    RangeEndPoint(Element element, boolean start);
>
>    Text getTextNode();
>    int getOffset();
>
>    void setTextNode(Text textNode);
>    void setTextNode(Text textNode, boolean start);
>    void setOffset(int offset);
>    void setElement(Element element, boolean start);
>
>    // Get the string either before or after the offset point
>    String getString(boolean asStart);
> }
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Google Web Toolkit" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/google-web-toolkit?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to