gpt4 book ai didi

java - 我的 GWT 应用程序的 TinyMCE 或 SmartGWT 富文本编辑器?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:51:54 27 4
gpt4 key购买 nike

我想在我的 GWT 应用程序中添加富文本编辑器。 TinyMCE 是其中之一,SmartGWT 中的富文本编辑器也是如此。对于在两者之间进行选择,您有什么建议吗?

最佳答案

我不会这么快就放弃 TinyMCE - 它比 GWT 的富文本编辑器有很多优势 - 对我来说,它是插件 - 我需要一个可以生成 bbcode 而不是 html 的富文本编辑器 - 不能不幸的是,用 GWT 的组件来做到这一点。所以我扩展了 TinyMCE 的标准 bbcode 插件以满足我的需要,瞧 :)

下面是我用来将 TinyMCE 集成到 GWT 中的类(Aaron Watkins 对原始类稍作修改,以解决拖放问题和其他一些问题;)):

编辑:稍作修改以包含 suggestions by David

/**
* Created on 20/08/2007
*
* Wrapper for TinyMCE
* NOTE: Expects Javascript includes to be in enclosing HTML
*
* Author: Aaron Watkins (aaronDOTjDOTwatkinsATgmailDOTcom)
* Website: http://www.goannatravel.com
* Home Page for initial release of this widget: http://consult.goannatravel.com/code/gwt/tinymce.php
*
* Copyright [Aaron Watkins]
*
* 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.
*/

import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.VerticalPanel;

/**
* TinyMCE -
*
* A wrapper widget for using TinyMCE. It contains a number of JSNI methods that
* I have found useful during development
*
* @author Aaron Watkins
*/
public class TinyMCE extends Composite implements HasText {

private TextArea ta;
private String id;

public TinyMCE(int width, int height) {
super();

VerticalPanel panel = new VerticalPanel();
initWidget(panel);
panel.setWidth("100%");

id = HTMLPanel.createUniqueId();
ta = new TextArea();
ta.setCharacterWidth(width);
ta.setVisibleLines(height);
DOM.setElementAttribute(ta.getElement(), "id", id);
DOM.setStyleAttribute(ta.getElement(), "width", "100%");
panel.add(ta);
}

/**
* getID() -
*
* @return the MCE element's ID
*/
public String getID() {
return id;
}

protected static native String getEditorContents(
String elementId) /*-{
return $wnd.tinyMCE.get(elementId).getContent();
}-*/;

protected static native void setEditorContents(
String elementId, String html) /*-{
$wnd.tinyMCE.execInstanceCommand(
elementId, 'mceSetContent', false, html, false);
}-*/;

public void setText(String text) {
setEditorContents(id, text);
}

public String getText() {
return getEditorContents(id);
}

public void setEnabled(boolean enabled) {
ta.setEnabled(enabled);
}

/**
* @see com.google.gwt.user.client.ui.Widget#onLoad()
*/
protected void onLoad() {
super.onLoad();

DeferredCommand.addCommand(new Command() {
public void execute() {
setWidth("100%");
setTextAreaToTinyMCE(id);
focusMCE(id);
}
});
}

/**
* focusMCE() -
*
* Use this to set the focus to the MCE area
* @param id - the element's ID
*/
protected native void focusMCE(String id) /*-{
$wnd.tinyMCE.execCommand('mceFocus', true, id);
}-*/;

/**
* resetMCE() -
*
* Use this if reusing the same MCE element, but losing focus
*/
public native void resetMCE() /*-{
$wnd.tinyMCE.execCommand('mceResetDesignMode', true);
}-*/;

/**
* unload() -
*
* Unload this MCE editor instance from active memory.
* I use this in the onHide function of the containing widget. This helps
* to avoid problems, especially when using tabs.
*/
public void unload() {
unloadMCE(id);
}

/**
* unloadMCE() -
*
* @param id - The element's ID
* JSNI method to implement unloading the MCE editor instance from memory
*/
protected native void unloadMCE(String id) /*-{
$wnd.tinyMCE.execCommand('mceFocus', false, id);
$wnd.tinyMCE.execCommand('mceRemoveControl', false, id);
}-*/;

/**
* updateContent() -
*
* Update the internal referenced content. Use this if you programatically change
* the original text area's content (eg. do a clear)
* @param id - the ID of the text area that contains the content you wish to copy
*/
protected native void updateContent(String id) /*-{
$wnd.tinyMCE.activeEditor = $wnd.tinyMCE.get(id);
$wnd.tinyMCE.activeEditor.setContent($wnd.document.getElementById(id).value);
}-*/;

/**
* getTextArea() -
*
*/
protected native void getTextData(String id) /*-{
$wnd.tinyMCE.activeEditor = $wnd.tinyMCE.get(id);
$wnd.tinyMCE.activeEditor.save();
$wnd.tinyMCE.triggerSave();
}-*/;

/**
* encodeURIComponent() -
*
* Wrapper for the native URL encoding methods
* @param text - the text to encode
* @return the encoded text
*/
protected native String encodeURIComponent(String text) /*-{
return encodeURIComponent(text);
}-*/;

/**
* setTextAreaToTinyMCE() -
*
* Change a text area to a tiny MCE editing field
* @param id - the text area's ID
*/
protected native void setTextAreaToTinyMCE(String id) /*-{
$wnd.tinyMCE.execCommand('mceAddControl', true, id);
}-*/;

/**
* removeMCE() -
*
* Remove a tiny MCE editing field from a text area
* @param id - the text area's ID
*/
public native void removeMCE(String id) /*-{
$wnd.tinyMCE.execCommand('mceRemoveControl', true, id);
}-*/;
}

请记住在您的 html 文件中初始化 TinyMCE,例如(关键设置是 mode : "textareas",其余的应该可以安全更改):

<script type="text/javascript" src="js/tiny_mce/tiny_mce.js"></script>
<script type="text/javascript">
tinyMCE.init({
theme : "advanced",
skin : "default",
mode : "textareas",
plugins : "bbcode",
theme_advanced_buttons1 : "bold,italic,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,bullist,numlist,separator,sup,sub,|,undo,redo,separator,cut,copy,paste,|,fontsizeselect,forecolor,backcolor",
theme_advanced_buttons2 : "blockquote,link,unlink,image,styleselect,removeformat,|,charmap,code",
theme_advanced_buttons3 : "",
theme_advanced_toolbar_location : "bottom",
theme_advanced_toolbar_align : "center",
theme_advanced_styles : "Code=codeStyle;Quote=quoteStyle;PHP Code=phpCodeStyle",
entity_encoding : "raw",
add_unload_trigger : false,
remove_linebreaks : false,
button_tile_map : true
});
</script>

您还可以尝试其他一些包装器,例如 http://www.ohloh.net/p/tinymce-gwt

关于java - 我的 GWT 应用程序的 TinyMCE 或 SmartGWT 富文本编辑器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1419390/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com