| /* |
| * Copyright 2007 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| package com.google.gwt.user.client.ui.impl; |
| |
| /** |
| * Safari rich text platform implementation. |
| */ |
| public class RichTextAreaImplSafari extends RichTextAreaImplStandard { |
| |
| @Override |
| public void setBackColor(String color) { |
| // Webkit uses 'BackColor' for the *entire area's* background. 'HiliteColor' |
| // does what we actually want. |
| execCommand("HiliteColor", color); |
| } |
| |
| @Override |
| protected native String getTextImpl() /*-{ |
| return this.@com.google.gwt.user.client.ui.impl.RichTextAreaImpl::elem.contentWindow.document.body.innerText; |
| }-*/; |
| |
| @Override |
| protected native void hookEvents() /*-{ |
| var elem = this.@com.google.gwt.user.client.ui.impl.RichTextAreaImpl::elem; |
| var wnd = elem.contentWindow; |
| |
| elem.__gwt_handler = function(evt) { |
| if (elem.__listener) { |
| if (@com.google.gwt.user.client.impl.DOMImpl::isMyListener(Ljava/lang/Object;)(elem.__listener)) { |
| @com.google.gwt.user.client.DOM::dispatchEvent(Lcom/google/gwt/user/client/Event;Lcom/google/gwt/user/client/Element;Lcom/google/gwt/user/client/EventListener;)(evt, elem, elem.__listener); |
| } |
| } |
| }; |
| |
| wnd.addEventListener('keydown', elem.__gwt_handler, true); |
| wnd.addEventListener('keyup', elem.__gwt_handler, true); |
| wnd.addEventListener('keypress', elem.__gwt_handler, true); |
| wnd.addEventListener('mousedown', elem.__gwt_handler, true); |
| wnd.addEventListener('mouseup', elem.__gwt_handler, true); |
| wnd.addEventListener('mousemove', elem.__gwt_handler, true); |
| wnd.addEventListener('mouseover', elem.__gwt_handler, true); |
| wnd.addEventListener('mouseout', elem.__gwt_handler, true); |
| wnd.addEventListener('click', elem.__gwt_handler, true); |
| |
| // Focus/blur event handlers. For some reason, [add|remove]eventListener() |
| // doesn't work on the iframe element (at least not for focus/blur). Don't |
| // dispatch through the normal handler method, as some of the querying we do |
| // there interferes with focus. |
| wnd.onfocus = function(evt) { |
| if (elem.__listener) { |
| @com.google.gwt.user.client.DOM::dispatchEvent(Lcom/google/gwt/user/client/Event;Lcom/google/gwt/user/client/Element;Lcom/google/gwt/user/client/EventListener;)(evt, elem, elem.__listener); |
| } |
| }; |
| |
| wnd.onblur = function(evt) { |
| if (elem.__listener) { |
| @com.google.gwt.user.client.DOM::dispatchEvent(Lcom/google/gwt/user/client/Event;Lcom/google/gwt/user/client/Element;Lcom/google/gwt/user/client/EventListener;)(evt, elem, elem.__listener); |
| } |
| }; |
| }-*/; |
| |
| @Override |
| protected native void setTextImpl(String text) /*-{ |
| this.@com.google.gwt.user.client.ui.impl.RichTextAreaImpl::elem.contentWindow.document.body.innerText = text; |
| }-*/; |
| |
| @Override |
| protected native void unhookEvents() /*-{ |
| var elem = this.@com.google.gwt.user.client.ui.impl.RichTextAreaImpl::elem; |
| var wnd = elem.contentWindow; |
| |
| wnd.removeEventListener('keydown', elem.__gwt_handler, true); |
| wnd.removeEventListener('keyup', elem.__gwt_handler, true); |
| wnd.removeEventListener('keypress', elem.__gwt_handler, true); |
| wnd.removeEventListener('mousedown', elem.__gwt_handler, true); |
| wnd.removeEventListener('mouseup', elem.__gwt_handler, true); |
| wnd.removeEventListener('mousemove', elem.__gwt_handler, true); |
| wnd.removeEventListener('mouseover', elem.__gwt_handler, true); |
| wnd.removeEventListener('mouseout', elem.__gwt_handler, true); |
| wnd.removeEventListener('click', elem.__gwt_handler, true); |
| |
| elem.__gwt_handler = null; |
| |
| elem.onfocus = null; |
| elem.onblur = null; |
| }-*/; |
| } |