From 7c96ba090e6e5a4ea15c7ffcd59da7d80ab176cd Mon Sep 17 00:00:00 2001 From: kehaoyuan Date: Fri, 19 Apr 2019 09:59:18 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=A1=86=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=8F=92=E5=85=A5=E9=93=BE=E6=8E=A5(=E6=96=87=E7=AB=A0,?= =?UTF-8?q?=E5=9B=9E=E7=AD=94,=E6=B8=B8=E6=88=8F)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/content.js | 23 ++++- app/src/main/assets/editor.html | 76 ++++++++++++++++ .../main/assets/editor_insert_answer_icon.png | Bin 0 -> 4941 bytes .../assets/editor_insert_article_icon.png | Bin 0 -> 2501 bytes app/src/main/assets/rich_editor.js | 82 ++++++++++++++++-- .../com/gh/base/BaseRichEditorActivity.kt | 37 +++++++- .../java/com/gh/common/view/RichEditor.java | 37 ++++++++ .../gh/gamecenter/qa/editor/AnswerAdapter.kt | 16 +++- .../gh/gamecenter/qa/editor/ArticleAdapter.kt | 10 +++ .../gh/gamecenter/qa/editor/GameAdapter.kt | 10 +++ .../gh/gamecenter/qa/entity/ArticleEntity.kt | 6 +- 11 files changed, 281 insertions(+), 16 deletions(-) create mode 100644 app/src/main/assets/editor_insert_answer_icon.png create mode 100644 app/src/main/assets/editor_insert_article_icon.png diff --git a/app/src/main/assets/content.js b/app/src/main/assets/content.js index 850ea69287..9e77cb3fbe 100644 --- a/app/src/main/assets/content.js +++ b/app/src/main/assets/content.js @@ -27,9 +27,22 @@ function getStyle(dom, name) { return window.getComputedStyle(dom)[name] } +// 跳转方法 +function customLinkgo(self) { + let datas = self.dataset.datas +// console.log(datas) + window.OnLinkClickListener.onClick(datas); +} + +var typeClassList = [ + "community_article-container", + "answer-container", + "game-container" +] + $(document).ready(function() { setupWhenContentEditable(); - + // 触发删除 document.addEventListener('keydown', e => { let event = e || window.event @@ -37,6 +50,8 @@ $(document).ready(function() { let s = document.getSelection() let r = s.getRangeAt(0) + let customDom = s.focusNode.previousElementSibling + if (r.startOffset === r.endOffset && r.endOffset === 0) { let preDOM = s.focusNode.parentNode.previousElementSibling @@ -46,6 +61,12 @@ $(document).ready(function() { preDOM.parentElement.removeChild(preDOM) } } + // 删除整个自定义链接 + if (r.startOffset === r.endOffset && r.endOffset <= 1 && + customDom && customDom instanceof Element && typeClassList.indexOf(customDom.className) > -1) { + + customDom.parentElement.removeChild(customDom) + } } }) }); \ No newline at end of file diff --git a/app/src/main/assets/editor.html b/app/src/main/assets/editor.html index ea5ba649ec..12d6a16691 100644 --- a/app/src/main/assets/editor.html +++ b/app/src/main/assets/editor.html @@ -1,6 +1,82 @@ + diff --git a/app/src/main/assets/editor_insert_answer_icon.png b/app/src/main/assets/editor_insert_answer_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..69f8000d24a78d61a953755a2c24263742e89ffd GIT binary patch literal 4941 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 LNkvXXu0mjf{|l3d literal 0 HcmV?d00001 diff --git a/app/src/main/assets/editor_insert_article_icon.png b/app/src/main/assets/editor_insert_article_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4d3b8eb86fe6e5fc6f836859dae892141afb4aa9 GIT binary patch literal 2501 zcmV;$2|D(PP) zTWnlM8Gyez>)rMJZYR#gxwR>YQa~gwEj*FU=%nDoB)m?<#E8Q_B?gPsTO1n@HFr^u(rzoUGBtlf1SYHz~^$G4+FmdUI0ey zW@gw-*Oklo9PmxFG$&b$D${eQGVZeTPjI!#4ls51Tl7_5|dA#ruU zPk>(m-HwE&u|qd-1XcEBo3e7^8iCh<{m#dwvB`dvgT_){mJ(M790neCF({2a9!9w+ zs(GcvJr6wUc0?N6Jc@EMk3w;Sz&=mH(Nx1eU{C%B`Qo}LVOA3uo(FoYgM4w{Mc+LJ znNHw2>%bD%4}95|a5UBMC6udM;+_PezJ;T)OBCe_Blq`&ui{SQ8G` z00Rbazu%E)s%EDFZ1+0~P1Wo$fV=#TLQ^$&89<-kQD~~B&j4EdjzUv4Ee3jWG>pXT zE?v+B3@t9CXmKH>+U0rfAX8u_L1x`q-)JsoU8PxY42TFs8bCzJTeay6K8iCyCLxu8 zNE^ia!Dz~rM}DC!LY$rN3qM*&q!3`HAw3Cm!(gT$-lKklPXhfBCk)6;f|-S$&m%fM z1Lu)Mm8V*%M4Kor&=M6};m zZOnl{{_p3=^FM-EJBTXjQeUMDJP_--Ly}0yM z=zIv#c8}+$b{etaDQMgVsR`8%dWg5;WJa|KUAsIzt(%AyyI^)g-GzE6&tq|Ei1s2H zH+p(nS83e}MhhfoJw2_*mr4^vz3LAw73!KH5{GOC(rH!eJg9j-jGUOoo!bzj6iFp3 zn^p3_b$NQot7Zy1>iP0qBp5?pO9@LJK%INVt81JaSn@I%*Dje_oLgA(vRPN;X>o2M zgsOEe)I8nBxlMkX7l~A!$*{@N5hpV^a{momOLp{SD^-ZffdKxWi^}>>xSfIWO}lA z_C#jX%(M{$BkD~1AyD~9)N%@^5dut8-LTXkFR#RMmg|OtoqT~fu902tz)L$ixIK<+W(*=zhGp@ zJ|x}+KgC&;kQZ2SqGu=a%27yOgRXlJt=ozdHLXYVJ%Sv4C0FB|n2M2*O+w3uU}bRk zS`DtaI}Sj!1E$X**6qzb)>J^G0r8O^Lfc^R?1K#;@MAy9zYR9&sQ) zcL=VyO;4+7oaqaQ{>O?hlK_!=#D{+XeGjR^cB+jt(`rdzW4{CWxkF&Z0f@DGY$Ota zZHL@McLzd>78g>qxR9d7g%m9=q-b#=#RqXdZ0_hP{`?;A#R-snedG)>S6{;oQ@(Rp4=rs{lT?QpJgfga<}U1hWbF8&z#-=WfP;Rrg(apcLb z!PuJ+@57ImM))v0Al3H1F#(qkArpUw?gycL8${c3yT=AhrZu@bHwF{$smtTkzo20i ze!cC(hZjcNI<@-Ev*XBXV<6ff+KeA>&8SSS{mR@_Th&L~A=;YzZaKZ81yB!H0QJ3y zm7U0maY#<8Z6kt;5rf9Hxr1f7^^hZ%N9gi8^mI_ zcbU_aB^cu1w!GF>CC}!z5zCd}hyx|dFqFJ#RLffc14#KD#5@Y+>C0v*QU-9-?rJxgC+CST(PyX(_dNZ=zfj-SL;3kDCE@6UNJ?RrA6x?KR6 zG?AJH_M?m^oR7;TayzMpSY85n3|01JUnp*82K)%H1$dFLbkePDaKj}pg(~AMz~M@X z?JiwN08av&fbRjLi;d1R^5sP$L6$d)D$`A\n" + -// "In HTML and XHTML, the blockquote element defines\n" + -// "
\n" + -// "In HTML and XHTML, the blockquote element defines\n" + -// "" + -// "
\n" -// document.execCommand('insertHTML', false, html); - var RE = {}; RE.currentSelection = { @@ -433,6 +424,61 @@ RE.removeFormat = function() { document.execCommand('removeFormat', false, null); } +RE.insertCustomStyleLink = function(type, aUrl, title, content, imgurl, obj) { + + RE.restorerange(); + let html = `  ` + var tags = ``, gameHtml = `` + let array = "" + try { + array = JSON.parse(content) + } catch(error) { + } + if (array instanceof Array) { + array.forEach(item => { + tags += `` + }) + + gameHtml = `  ` + } + + switch(type) { + case 'answer': + document.execCommand("insertHTML",false, html); + break + case 'community_article': + document.execCommand("insertHTML",false, html); + break + case 'game': + document.execCommand("insertHTML",false, gameHtml); + break + } + RE.callback(); +} + // Event Listeners RE.editor.addEventListener("input", RE.callback); RE.editor.addEventListener("keyup", function(e) { @@ -445,8 +491,26 @@ RE.editor.addEventListener("keyup", function(e) { RE.editor.addEventListener("click", function(e) { RE.enabledEditingItems RE.sendElementNameToNative() + let s = document.getSelection() + let isNeedRemoveR = RE.recursion(e.target) + if (isNeedRemoveR && s.rangeCount) { + s.removeAllRanges() + } }); +RE.recursion = function(dom) { + let parenDom = dom.parentElement + if (parenDom && parenDom instanceof Element && + typeClassList.indexOf(parenDom.className) > -1) { + return parenDom + } else if(parenDom && parenDom instanceof Element && + typeClassList.indexOf(parenDom.className) === -1 && parenDom.nodeName !== 'BODY') { + return RE.recursion(parenDom) + } else { + return null + } +} + // 返回组件标签 多个标签以"空格"划分 RE.sendElementNameToNative = function() { if (window.getSelection) { diff --git a/app/src/main/java/com/gh/base/BaseRichEditorActivity.kt b/app/src/main/java/com/gh/base/BaseRichEditorActivity.kt index 9e3fffe148..ac5cb38f24 100644 --- a/app/src/main/java/com/gh/base/BaseRichEditorActivity.kt +++ b/app/src/main/java/com/gh/base/BaseRichEditorActivity.kt @@ -1,8 +1,10 @@ package com.gh.base import android.annotation.SuppressLint +import android.app.Activity import android.content.ClipboardManager import android.content.Context +import android.content.Intent import android.os.Bundle import android.text.TextUtils import android.view.View @@ -10,9 +12,12 @@ import android.webkit.JavascriptInterface import butterknife.OnClick import com.gh.common.view.RichEditor import com.gh.gamecenter.R +import com.gh.gamecenter.entity.GameEntity import com.gh.gamecenter.qa.editor.GameActivity import com.gh.gamecenter.qa.editor.InsertAnswerWrapperActivity import com.gh.gamecenter.qa.editor.InsertArticleWrapperActivity +import com.gh.gamecenter.qa.entity.AnswerEntity +import com.gh.gamecenter.qa.entity.ArticleEntity import com.halo.assistant.HaloApp import com.lightgame.utils.Utils import com.lightgame.view.CheckableImageView @@ -39,12 +44,29 @@ abstract class BaseRichEditorActivity : BaseActivity() { private val mEditorInsertDetail by bindView(R.id.editor_insert_detail) + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (resultCode != Activity.RESULT_OK) return + when (requestCode) { + INSERT_ANSWER_CODE -> { + mRichEditor.insertAnswerLink(data?.getParcelableExtra(AnswerEntity::class.java.simpleName)) + } + INSERT_ARTICLE_CODE -> { + mRichEditor.insertCommunityArticleLink(data?.getParcelableExtra(ArticleEntity::class.java.simpleName)) + } + INSERT_GAME_CODE -> { + mRichEditor.insertGameLink(data?.getParcelableExtra(GameEntity::class.java.simpleName)) + } + } + } + @SuppressLint("AddJavascriptInterface") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 防止个别手机在Js里无法获取粘贴内容 mRichEditor.addJavascriptInterface(OnPasteListener(), "onPasteListener") mRichEditor.addJavascriptInterface(OnCursorChangeListener(), "OnCursorChangeListener") + mRichEditor.addJavascriptInterface(OnLinkClickListener(), "OnLinkClickListener") } @OnClick(R.id.editor_image, R.id.editor_font, R.id.editor_link, R.id.editor_paragraph, @@ -135,13 +157,13 @@ abstract class BaseRichEditorActivity : BaseActivity() { mEditorParagraphQuote.isChecked = !mEditorParagraphQuote.isChecked } R.id.editor_link_answer -> { - startActivity(InsertAnswerWrapperActivity.getIntent(this)) + startActivityForResult(InsertAnswerWrapperActivity.getIntent(this), INSERT_ANSWER_CODE) } R.id.editor_link_article -> { - startActivity(InsertArticleWrapperActivity.getIntent(this)) + startActivityForResult(InsertArticleWrapperActivity.getIntent(this), INSERT_ARTICLE_CODE) } R.id.editor_link_game -> { - startActivity(GameActivity.getIntent(this)) + startActivityForResult(GameActivity.getIntent(this), INSERT_GAME_CODE) } } } @@ -181,6 +203,12 @@ abstract class BaseRichEditorActivity : BaseActivity() { } } + private inner class OnLinkClickListener { + @JavascriptInterface + fun onClick(content: String) { + } + } + companion object { const val ELEMENT_NAME_BOLD = " b " const val ELEMENT_NAME_ITALIC = " i " @@ -190,5 +218,8 @@ abstract class BaseRichEditorActivity : BaseActivity() { const val ELEMENT_PARAGRAPH_H3 = " h3 " const val ELEMENT_PARAGRAPH_H4 = " h4 " const val ELEMENT_PARAGRAPH_QUOTE = " blockquote " + const val INSERT_ANSWER_CODE = 411 + const val INSERT_ARTICLE_CODE = 412 + const val INSERT_GAME_CODE = 413 } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/view/RichEditor.java b/app/src/main/java/com/gh/common/view/RichEditor.java index ca40913ed3..f2eec8bb3f 100644 --- a/app/src/main/java/com/gh/common/view/RichEditor.java +++ b/app/src/main/java/com/gh/common/view/RichEditor.java @@ -15,10 +15,14 @@ import android.webkit.WebViewClient; import com.gh.common.util.AskUtils; import com.gh.common.util.DisplayUtils; +import com.gh.common.util.GsonUtils; import com.gh.common.util.ImageUtils; import com.gh.common.util.NetworkUtils; import com.gh.common.util.RichEditorUtils; import com.gh.gamecenter.BuildConfig; +import com.gh.gamecenter.entity.GameEntity; +import com.gh.gamecenter.qa.entity.AnswerEntity; +import com.gh.gamecenter.qa.entity.ArticleEntity; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; @@ -241,6 +245,39 @@ public class RichEditor extends WebView { return TextUtils.isEmpty(mContents) ? "" : mContents; } + public void insertAnswerLink(AnswerEntity entity) { + if (entity == null) return; + exec("javascript:RE.insertCustomStyleLink('" + + "answer" + "', '" + + "javascript:void(0);" + "', '" + + entity.getQuestions().getTitle() + "', '" + + entity.getBrief() + "', '" + + "file:///android_asset/editor_insert_answer_icon.png" + "', '" + + entity.getId() + "');"); + } + + public void insertCommunityArticleLink(ArticleEntity entity) { + if (entity == null) return; + exec("javascript:RE.insertCustomStyleLink('" + + "community_article" + "', '" + + "javascript:void(0);" + "', '" + + entity.getTitle() + "', '" + + entity.getBrief() + "', '" + + "file:///android_asset/editor_insert_article_icon.png" + "', '" + + entity.getId() + "');"); + } + + public void insertGameLink(GameEntity entity) { + if (entity == null) return; + exec("javascript:RE.insertCustomStyleLink('" + + "game" + "', '" + + "javascript:void(0);" + "', '" + + entity.getName() + "', '" + + GsonUtils.toJson(entity.getTag()) + "', '" + + entity.getIcon() + "', '" + + entity.getId() + "');"); + } + public void setEditorFontColor(int color) { String hex = convertHexColorString(color); exec("javascript:RE.setBaseTextColor('" + hex + "');"); diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerAdapter.kt index 80a86f7853..34c79df183 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerAdapter.kt @@ -1,6 +1,8 @@ package com.gh.gamecenter.qa.editor +import android.app.Activity import android.content.Context +import android.content.Intent import android.support.v7.widget.RecyclerView import android.view.View import android.view.ViewGroup @@ -34,7 +36,19 @@ class AnswerAdapter(context: Context, private val mEntrance: String?) : ListAdap override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when (getItemViewType(position)) { - ItemViewType.ITEM_BODY -> (holder as AnswerViewHolder).initCollectionAnswerViewHolder(mEntityList[position], mEntrance) + ItemViewType.ITEM_BODY -> { + val answerViewHolder = holder as AnswerViewHolder + val entity = mEntityList[position] + answerViewHolder.initCollectionAnswerViewHolder(entity, mEntrance) + answerViewHolder.itemView.setOnClickListener { + if (mContext is Activity) { + val intent = Intent() + intent.putExtra(AnswerEntity::class.java.simpleName, entity) + (mContext as Activity).setResult(Activity.RESULT_OK, intent) + (mContext as Activity).finish() + } + } + } ItemViewType.ITEM_FOOTER -> { val footerViewHolder = holder as FooterViewHolder footerViewHolder.initItemPadding() diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/ArticleAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/ArticleAdapter.kt index 6c0508b519..0bfcb1a3cb 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/editor/ArticleAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/editor/ArticleAdapter.kt @@ -1,6 +1,8 @@ package com.gh.gamecenter.qa.editor +import android.app.Activity import android.content.Context +import android.content.Intent import android.support.v7.widget.RecyclerView import android.view.View import android.view.ViewGroup @@ -39,6 +41,14 @@ class ArticleAdapter(context: Context, private val mEntrance: String?) : ListAda val articleHolder = holder as CollectionCommunityArticleViewHolder val entity = mEntityList[position] articleHolder.binding.data = entity + articleHolder.itemView.setOnClickListener { + if (mContext is Activity) { + val intent = Intent() + intent.putExtra(ArticleEntity::class.java.simpleName, entity) + (mContext as Activity).setResult(Activity.RESULT_OK, intent) + (mContext as Activity).finish() + } + } } ItemViewType.ITEM_FOOTER -> { val footerViewHolder = holder as FooterViewHolder diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/GameAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/GameAdapter.kt index b63354c905..e7f2a322d0 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/editor/GameAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/editor/GameAdapter.kt @@ -1,6 +1,8 @@ package com.gh.gamecenter.qa.editor +import android.app.Activity import android.content.Context +import android.content.Intent import android.support.v7.widget.RecyclerView import android.view.View import android.view.ViewGroup @@ -30,6 +32,14 @@ class GameAdapter(context: Context) : ListAdapter(context) { holder.binding.game = entity holder.binding.subjectTag = "type" holder.binding.downloadBtn.visibility = View.GONE + holder.itemView.setOnClickListener { + if (mContext is Activity) { + val intent = Intent() + intent.putExtra(GameEntity::class.java.simpleName, entity) + (mContext as Activity).setResult(Activity.RESULT_OK, intent) + (mContext as Activity).finish() + } + } } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/entity/ArticleEntity.kt b/app/src/main/java/com/gh/gamecenter/qa/entity/ArticleEntity.kt index 998fd67a6d..808b42cc07 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/entity/ArticleEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/entity/ArticleEntity.kt @@ -6,6 +6,7 @@ import com.gh.gamecenter.entity.UserEntity import com.google.gson.annotations.SerializedName import kotlinx.android.parcel.Parcelize +@Parcelize data class ArticleEntity(@SerializedName("_id") val id: String = "", val title: String = "", @@ -15,11 +16,12 @@ data class ArticleEntity(@SerializedName("_id") val count: Count = Count(), val community: CommunityEntity = CommunityEntity(), val time: TimeEntity? = TimeEntity(), - val user: UserEntity = UserEntity()) { + val user: UserEntity = UserEntity()) : Parcelable { + @Parcelize data class TimeEntity(var create: Long? = 0, var update: Long? = 0, - var edit: Long? = 0) + var edit: Long? = 0) : Parcelable } @Parcelize