Author: jlaba...@google.com Date: Tue Jun 30 06:58:38 2009 New Revision: 5639
Modified: trunk/user/src/com/google/gwt/user/client/ui/RichTextArea.java trunk/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImpl.java trunk/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplSafari.java trunk/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplStandard.java Log: Removed most of the RichTextAreaImplSafari implementation used only for older versions of Safari. Patch by: jlabanca Review by: jgw Issue: 2813 Modified: trunk/user/src/com/google/gwt/user/client/ui/RichTextArea.java ============================================================================== --- trunk/user/src/com/google/gwt/user/client/ui/RichTextArea.java (original) +++ trunk/user/src/com/google/gwt/user/client/ui/RichTextArea.java Tue Jun 30 06:58:38 2009 @@ -56,7 +56,10 @@ * focused at least once. If you just want to initialize the content of * the {...@link RichTextArea}, use {...@link RichTextArea#setHTML(String)} instead. * </p> + * + * @deprecated use {...@link Formatter} instead */ + @Deprecated public interface BasicFormatter { /** @@ -188,7 +191,10 @@ * focused at least once. If you just want to initialize the content of * the {...@link RichTextArea}, use {...@link RichTextArea#setHTML(String)} instead. * </p> + * + * @deprecated use {...@link Formatter} instead */ + @Deprecated public interface ExtendedFormatter extends BasicFormatter { /** @@ -271,6 +277,215 @@ } /** + * <p> + * This interface is used to access full formatting options, when available. + * If the implementation supports full formatting, then + * {...@link RichTextArea#getFormatter()} will return an instance of this + * class. + * </p> + * <p> + * The formatter will format the user selected text in the + * {...@link RichTextArea}. As a result, it will only work reliably if the + * {...@link RichTextArea} is attached, visible to on the page, and has been + * focused at least once. If you just want to initialize the content of + * the {...@link RichTextArea}, use {...@link RichTextArea#setHTML(String)} instead. + * </p> + */ + public interface Formatter extends ExtendedFormatter { + /** + * Creates a link to the supplied URL. + * + * @param url the URL to be linked to + */ + void createLink(String url); + + /** + * Gets the background color. + * + * @return the background color + */ + String getBackColor(); + + /** + * Gets the foreground color. + * + * @return the foreground color + */ + String getForeColor(); + + /** + * Inserts a horizontal rule. + */ + void insertHorizontalRule(); + + /** + * Inserts generic html. + * + * @param html the HTML to insert + */ + void insertHTML(String html); + + /** + * Inserts an image element. + * + * @param url the url of the image to be inserted + */ + void insertImage(String url); + + /** + * Starts an numbered list. Indentation will create nested items. + */ + void insertOrderedList(); + + /** + * Starts an bulleted list. Indentation will create nested items. + */ + void insertUnorderedList(); + + /** + * Is the current region bold? + * + * @return true if the current region is bold + */ + boolean isBold(); + + /** + * Is the current region italic? + * + * @return true if the current region is italic + */ + boolean isItalic(); + + /** + * Is the current region strikethrough? + * + * @return true if the current region is strikethrough + */ + boolean isStrikethrough(); + + /** + * Is the current region subscript? + * + * @return true if the current region is subscript + */ + boolean isSubscript(); + + /** + * Is the current region superscript? + * + * @return true if the current region is superscript + */ + boolean isSuperscript(); + + /** + * Is the current region underlined? + * + * @return true if the current region is underlined + */ + boolean isUnderlined(); + + /** + * Left indent. + */ + void leftIndent(); + + /** + * Redo an action that was just undone. + */ + void redo(); + + /** + * Removes all formatting on the selected text. + */ + void removeFormat(); + + /** + * Removes any link from the selected text. + */ + void removeLink(); + + /** + * Right indent. + */ + void rightIndent(); + + /** + * Selects all the text. + */ + void selectAll(); + + /** + * Sets the background color. + * + * @param color the new background color + */ + void setBackColor(String color); + + /** + * Sets the font name. + * + * @param name the new font name + */ + void setFontName(String name); + + /** + * Sets the font size. + * + * @param fontSize the new font size + */ + void setFontSize(FontSize fontSize); + + /** + * Sets the foreground color. + * + * @param color the new foreground color + */ + void setForeColor(String color); + + /** + * Sets the justification. + * + * @param justification the new justification + */ + void setJustification(Justification justification); + + /** + * Toggles bold. + */ + void toggleBold(); + + /** + * Toggles italic. + */ + void toggleItalic(); + + /** + * Toggles strikethrough. + */ + void toggleStrikethrough(); + + /** + * Toggles subscript. + */ + void toggleSubscript(); + + /** + * Toggles superscript. + */ + void toggleSuperscript(); + + /** + * Toggles underline. + */ + void toggleUnderline(); + + /** + * Undo the last action. + */ + void undo(); + } + + /** * Font size enumeration. Represents the seven basic HTML font sizes, as * defined in CSS. */ @@ -386,12 +601,11 @@ * page, and has been focused by the user. * * @return <code>null</code> if basic formatting is not supported + * @deprecated use {...@link #getFormatter()} instead */ + @Deprecated public BasicFormatter getBasicFormatter() { - if ((impl instanceof BasicFormatter) && (impl.isBasicEditingSupported())) { - return (BasicFormatter) impl; - } - return null; + return getFormatter(); } /** @@ -400,11 +614,23 @@ * page, and has been focused by the user. * * @return <code>null</code> if full formatting is not supported + * @deprecated use {...@link #getFormatter()} instead */ + @Deprecated public ExtendedFormatter getExtendedFormatter() { - if ((impl instanceof ExtendedFormatter) - && (impl.isExtendedEditingSupported())) { - return (ExtendedFormatter) impl; + return getFormatter(); + } + + /** + * Gets the rich text formatting interface. Note that formatting can only be + * done when the {...@link RichTextArea} is attached, visible on the page, and + * has been focused by the user. + * + * @return <code>null</code> if full formatting is not supported + */ + public Formatter getFormatter() { + if (impl instanceof Formatter) { + return (Formatter) impl; } return null; } Modified: trunk/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImpl.java ============================================================================== --- trunk/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImpl.java (original) +++ trunk/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImpl.java Tue Jun 30 06:58:38 2009 @@ -51,14 +51,6 @@ onElementInitialized(); } - public boolean isBasicEditingSupported() { - return false; - } - - public boolean isExtendedEditingSupported() { - return false; - } - public native void setFocus(boolean focused) /*-{ if (focused) { th...@com.google.gwt.user.client.ui.impl.richtextareaimpl::elem.focus(); Modified: trunk/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplSafari.java ============================================================================== --- trunk/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplSafari.java (original) +++ trunk/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplSafari.java Tue Jun 30 06:58:38 2009 @@ -15,111 +15,16 @@ */ package com.google.gwt.user.client.ui.impl; -import com.google.gwt.user.client.Element; -import com.google.gwt.user.client.ui.RichTextArea.FontSize; - /** * Safari rich text platform implementation. */ public class RichTextAreaImplSafari extends RichTextAreaImplStandard { - private static final String[] sizeNumberCSSValues = new String[] { - "medium", "xx-small", "x-small", "small", "medium", "large", "x-large", - "xx-large"}; - - private static int webKitVersion = getWebKitVersion(); - - /** - * WebKit v420 began suppporting full rich text editing. - */ - private static boolean extendedEditingSupported = (webKitVersion >= 420); - - /** - * WebKit v420 changed BackColor to HiliteColor. - */ - private static boolean useHiliteColor = (webKitVersion >= 420); - - /** - * WebKit version up to *and including* 420 require CSS font-size values - * (e.g. 'medium', 'x-large') rather than size numbers. All subsequent - * versions use size numbers like other browsers. - */ - private static boolean oldSchoolSizeValues = (webKitVersion <= 420); - - private static native int getWebKitVersion() /*-{ - var exp = / AppleWebKit\/([\d]+)/; - var result = exp.exec(navigator.userAgent); - if (result) { - var version = parseInt(result[1]); - if (version) { - return version; - } - } - - // Intentionally conservative fallback. - return 0; - }-*/;; - - @Override - public Element createElement() { - return super.createElement(); - } - - @Override - public native boolean isBold() /*-{ - return !!th...@com.google.gwt.user.client.ui.impl.richtextareaimpl::elem.__gwt_isBold; - }-*/; - - @Override - public boolean isExtendedEditingSupported() { - return extendedEditingSupported; - } - - @Override - public native boolean isItalic() /*-{ - return !!th...@com.google.gwt.user.client.ui.impl.richtextareaimpl::elem.__gwt_isItalic; - }-*/; - - @Override - public native boolean isUnderlined() /*-{ - return !!th...@com.google.gwt.user.client.ui.impl.richtextareaimpl::elem.__gwt_isUnderlined; - }-*/; - @Override public void setBackColor(String color) { - if (useHiliteColor) { - execCommand("HiliteColor", color); - } else { - super.setBackColor(color); - } - } - - @Override - public native void setFocus(boolean focused) /*-{ - // Safari needs the *iframe* focused, not its window. - var elem = th...@com.google.gwt.user.client.ui.impl.richtextareaimpl::elem; - if (focused) { - elem.focus(); - if (elem.__gwt_restoreSelection) { - elem.__gwt_restoreSelection(); - } - } else { - elem.blur(); - } - }-*/; - - @Override - public void setFontSize(FontSize fontSize) { - if (oldSchoolSizeValues) { - // Safari2 only accepts css-style 'small, medium, large, etc' values. - // Setting these doesn't seem to hurt Safari3. - int number = fontSize.getNumber(); - if ((number >= 0) && (number <= 7)) { - execCommand("FontSize", sizeNumberCSSValues[number]); - } - } else { - super.setFontSize(fontSize); - } + // Webkit uses 'BackColor' for the *entire area's* background. 'HiliteColor' + // does what we actually want. + execCommand("HiliteColor", color); } @Override @@ -131,41 +36,8 @@ protected native void hookEvents() /*-{ var elem = th...@com.google.gwt.user.client.ui.impl.richtextareaimpl::elem; var wnd = elem.contentWindow; - var doc = wnd.document; - // Create an expando on the element to hold the selection state. - elem.__gwt_selection = { baseOffset:0, extentOffset:0, baseNode:null, - extentNode:null }; - - // A function for restoring the selection state. - elem.__gwt_restoreSelection = function() { - var sel = elem.__gwt_selection; - - // wnd.getSelection is not defined if the iframe isn't attached. - if (wnd.getSelection) { - wnd.getSelection().setBaseAndExtent(sel.baseNode, sel.baseOffset, - sel.extentNode, sel.extentOffset); - } - }; - - // Generic event dispatcher. Also stores selection state. elem.__gwt_handler = function(evt) { - // Store the editor's selection state. - var s = wnd.getSelection(); - elem.__gwt_selection = { - baseOffset:s.baseOffset, - extentOffset:s.extentOffset, - - baseNode:s.baseNode, - extentNode:s.extentNode - }; - - // Hang on to bold/italic/underlined states. - elem.__gwt_isBold = doc.queryCommandState('Bold'); - elem.__gwt_isItalic = doc.queryCommandState('Italic'); - elem.__gwt_isUnderlined = doc.queryCommandState('Underline'); - - // Dispatch the event. if (elem.__listener) { elem.__listen...@com.google.gwt.user.client.ui.widget::onBrowserEvent(Lcom/google/gwt/user/client/Event;)(evt); } @@ -218,7 +90,6 @@ wnd.removeEventListener('mouseout', elem.__gwt_handler, true); wnd.removeEventListener('click', elem.__gwt_handler, true); - elem.__gwt_restoreSelection = null; elem.__gwt_handler = null; elem.onfocus = null; Modified: trunk/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplStandard.java ============================================================================== --- trunk/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplStandard.java (original) +++ trunk/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplStandard.java Tue Jun 30 06:58:38 2009 @@ -25,8 +25,10 @@ /** * Basic rich text platform implementation. */ +...@suppresswarnings("deprecation") public abstract class RichTextAreaImplStandard extends RichTextAreaImpl implements - RichTextArea.BasicFormatter, RichTextArea.ExtendedFormatter { + RichTextArea.BasicFormatter, RichTextArea.ExtendedFormatter, + RichTextArea.Formatter { /** * The message displayed when the formatter is used before the RichTextArea @@ -117,18 +119,8 @@ execCommand("InsertUnorderedList", null); } - @Override - public boolean isBasicEditingSupported() { - return true; - } - public boolean isBold() { return queryCommandState("Bold"); - } - - @Override - public boolean isExtendedEditingSupported() { - return true; } public boolean isItalic() { --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~----------~----~----~----~------~----~------~--~---