Apache Wicket - 从TinyMceBehavior获取光标位置

时间:2014-05-01 09:51:48

标签: tinymce wicket

我们正在使用TinyMceBehavior向文本区域添加富文本行为:

public class MandatoryContextTextArea extends TextArea<String> {

    private static final long serialVersionUID = -7837811514253179662L;

    public MandatoryContextTextArea(final String id, final IModel<String> model) {
        super(id, model);

        this.setOutputMarkupId(true);
        this.add(new IBehavior[] { new TinyMceBehavior(CustomTinyMCETextEditorSettings.initSettings()) });
    }
}

无论如何都要获取用户光标当前位于富文本区域内的位置?

我要求有一个&#39;插入&#39;按钮,当单击时,将一些文本添加到用户将光标定位的位置处的文本区域。 Wicket或TinyMceBehavior中有什么东西可以提供这个位置吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您将无法非常轻松地获得服务器端的光标位置,但您可以创建一个简单的按钮,使用一些JavaScript在客户端处理它。

这样的东西可能会添加到你的按钮中:

public class InsertAtCursorPositionBehaviour extends AttributeModifier
{

    public InsertAtCursorPositionBehaviour(final String content, final TextArea<?> textArea)
    {
        super("onclick", Model.of(getInsertJavaScript(content, textArea)));
    }

    private static String getInsertJavaScript(final String content, final TextArea<?> textArea)
    {
        textArea.setOutputMarkupId(true);
        final StringBuilder jsBuilder = new StringBuilder();
        jsBuilder.append("tinyMCE.get('");
        jsBuilder.append(textArea.getMarkupId());
        jsBuilder.append("').execCommand('mceInsertContent', false, '");
        jsBuilder.append(content);
        jsBuilder.append("');");
        return jsBuilder.toString();
    }
}

字符串是要插入的内容,TextArea是tinymce文本区域。参考文本区域直接允许每页有多个。

如果要插入的内容在客户端,那么将按钮嵌入微小的mce本身可能会很好。看看您可以使用的这些自定义选项:http://www.tinymce.com/tryit/button.php