mirror of
https://github.com/leanote/leanote-android.git
synced 2025-10-14 22:25:40 +00:00
temporary commit: add native js callback
This commit is contained in:
@@ -113,6 +113,7 @@
|
||||
tinyMCE.editors[0].formatter.apply('link', {
|
||||
href: url
|
||||
});
|
||||
//TODO:call nativeCallbackHandler
|
||||
}
|
||||
|
||||
function removeLink(title, url) {
|
||||
|
@@ -12,13 +12,18 @@ import android.webkit.WebViewClient;
|
||||
|
||||
import org.houxg.leamonax.service.NoteFileService;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public abstract class Editor {
|
||||
|
||||
public enum Style {
|
||||
BOLD,
|
||||
ITALIC,
|
||||
ORDER_LIST,
|
||||
UNORDER_LIST
|
||||
BULLET_LIST,
|
||||
ORDERED_LIST,
|
||||
BLOCKQUOTE,
|
||||
HEADER,
|
||||
LINK
|
||||
}
|
||||
|
||||
protected EditorListener mListener;
|
||||
@@ -65,6 +70,8 @@ public abstract class Editor {
|
||||
void onPageLoaded();
|
||||
void onClickedLink(String title, String url);
|
||||
void onStyleChanged(Style style, boolean enabled);
|
||||
void onStyleChanged(Style style, boolean enabled, Object data);
|
||||
void onCursorChanged(Map<Style, Object> enabledFormats);
|
||||
}
|
||||
|
||||
protected class EditorClient extends WebViewClient {
|
||||
|
@@ -15,7 +15,7 @@ import java.util.Map;
|
||||
|
||||
import static android.view.View.SCROLLBARS_OUTSIDE_OVERLAY;
|
||||
|
||||
public class RichTextEditor extends Editor implements OnJsEditorStateChangedListener {
|
||||
public class RichTextEditor extends Editor implements OnJsEditorStateChangedListener, TinnyMceCallback.TinnyMceListener {
|
||||
|
||||
private static final String TAG = "RichTextEditor";
|
||||
private static final String JS_CALLBACK_HANDLER = "nativeCallbackHandler";
|
||||
@@ -33,7 +33,7 @@ public class RichTextEditor extends Editor implements OnJsEditorStateChangedList
|
||||
mWebView.getSettings().setJavaScriptEnabled(true);
|
||||
mWebView.setWebViewClient(new EditorClient());
|
||||
mWebView.setWebChromeClient(new EditorChromeClient());
|
||||
mWebView.addJavascriptInterface(new JsCallbackHandler(this), JS_CALLBACK_HANDLER);
|
||||
mWebView.addJavascriptInterface(new TinnyMceCallback(this), JS_CALLBACK_HANDLER);
|
||||
mWebView.loadUrl("file:///android_asset/RichTextEditor/editor.html");
|
||||
}
|
||||
|
||||
@@ -155,10 +155,10 @@ public class RichTextEditor extends Editor implements OnJsEditorStateChangedList
|
||||
mListener.onStyleChanged(Style.ITALIC, entry.getValue());
|
||||
break;
|
||||
case "orderedList":
|
||||
mListener.onStyleChanged(Style.ORDER_LIST, entry.getValue());
|
||||
mListener.onStyleChanged(Style.ORDERED_LIST, entry.getValue());
|
||||
break;
|
||||
case "unorderedList":
|
||||
mListener.onStyleChanged(Style.UNORDER_LIST, entry.getValue());
|
||||
mListener.onStyleChanged(Style.BULLET_LIST, entry.getValue());
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -178,4 +178,19 @@ public class RichTextEditor extends Editor implements OnJsEditorStateChangedList
|
||||
public void onGetHtmlResponse(Map<String, String> responseArgs) {
|
||||
Log.i(TAG, "onSelectionChanged(), data=" + new Gson().toJson(responseArgs));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFormatChanged(Style format, boolean isEnabled, Object data) {
|
||||
mListener.onStyleChanged(Style.BULLET_LIST, isEnabled, data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void gotoLink(String url) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCursorChanged(Map<Style, Object> enabledFormats) {
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,78 @@
|
||||
package org.houxg.leamonax.editor;
|
||||
|
||||
import android.webkit.JavascriptInterface;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class TinnyMceCallback {
|
||||
|
||||
private TinnyMceListener mListener;
|
||||
private Gson mGson = new Gson();
|
||||
|
||||
public TinnyMceCallback(TinnyMceListener mListener) {
|
||||
this.mListener = mListener;
|
||||
}
|
||||
|
||||
public interface TinnyMceListener {
|
||||
void onFormatChanged(Editor.Style format, boolean isEnabled, Object data);
|
||||
|
||||
void gotoLink(String url);
|
||||
|
||||
void onCursorChanged(Map<Editor.Style, Object> enabledFormats);
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public void onFormatChanged(String format, boolean isEnabled, Object data) {
|
||||
if (mListener != null) {
|
||||
Editor.Style formatEnume = parseFormat(format);
|
||||
mListener.onFormatChanged(formatEnume, isEnabled, data);
|
||||
}
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
void gotoLink(String url) {
|
||||
if (mListener != null) {
|
||||
mListener.gotoLink(url);
|
||||
}
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
void onCursorChanged(String data) {
|
||||
if (mListener == null) {
|
||||
return;
|
||||
}
|
||||
Map<String, Object> formats = mGson.fromJson(data, Map.class);
|
||||
Map<Editor.Style, Object> enabledFormats = new HashMap<>();
|
||||
for (Map.Entry<String, Object> format : formats.entrySet()) {
|
||||
Editor.Style formatEnume = parseFormat(format.getKey());
|
||||
if (formatEnume != null) {
|
||||
enabledFormats.put(formatEnume, format.getValue());
|
||||
}
|
||||
}
|
||||
mListener.onCursorChanged(enabledFormats);
|
||||
}
|
||||
|
||||
private Editor.Style parseFormat(String formatName) {
|
||||
switch (formatName) {
|
||||
case "bold":
|
||||
return Editor.Style.BOLD;
|
||||
case "italic":
|
||||
return Editor.Style.ITALIC;
|
||||
case "ul":
|
||||
return Editor.Style.BULLET_LIST;
|
||||
case "ol":
|
||||
return Editor.Style.ORDERED_LIST;
|
||||
case "blockquote":
|
||||
return Editor.Style.BLOCKQUOTE;
|
||||
case "header":
|
||||
return Editor.Style.HEADER;
|
||||
case "link":
|
||||
return Editor.Style.LINK;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@@ -28,6 +28,7 @@ import org.houxg.leamonax.utils.DialogUtils;
|
||||
import org.houxg.leamonax.widget.ToggleImageButton;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
@@ -281,10 +282,10 @@ public class EditorFragment extends Fragment implements Editor.EditorListener {
|
||||
case ITALIC:
|
||||
mItalicBtn.setChecked(enabled);
|
||||
break;
|
||||
case ORDER_LIST:
|
||||
case ORDERED_LIST:
|
||||
mOrderListBtn.setChecked(enabled);
|
||||
break;
|
||||
case UNORDER_LIST:
|
||||
case BULLET_LIST:
|
||||
mUnorderListBtn.setChecked(enabled);
|
||||
break;
|
||||
}
|
||||
@@ -292,6 +293,34 @@ public class EditorFragment extends Fragment implements Editor.EditorListener {
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStyleChanged(final Editor.Style style, final boolean enabled, final Object data) {
|
||||
mBoldBtn.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
switch (style) {
|
||||
case BOLD:
|
||||
mBoldBtn.setChecked(enabled);
|
||||
break;
|
||||
case ITALIC:
|
||||
mItalicBtn.setChecked(enabled);
|
||||
break;
|
||||
case ORDERED_LIST:
|
||||
mOrderListBtn.setChecked(enabled);
|
||||
break;
|
||||
case BULLET_LIST:
|
||||
mUnorderListBtn.setChecked(enabled);
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCursorChanged(Map<Editor.Style, Object> enabledFormats) {
|
||||
|
||||
}
|
||||
|
||||
public interface EditorFragmentListener {
|
||||
Uri createImage(String filePath);
|
||||
|
||||
|
Reference in New Issue
Block a user