From cb568cbeb6aa8745a0bea91d53a0aa01f22865fe Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 9 Mar 2020 19:49:35 +0800 Subject: [PATCH 001/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/ui/widget/TitleBar.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/widget/TitleBar.kt b/app/src/main/java/io/legado/app/ui/widget/TitleBar.kt index 10cd4191f..663bb55a8 100644 --- a/app/src/main/java/io/legado/app/ui/widget/TitleBar.kt +++ b/app/src/main/java/io/legado/app/ui/widget/TitleBar.kt @@ -142,7 +142,7 @@ class TitleBar(context: Context, attrs: AttributeSet?) : AppBarLayout(context, a } backgroundColor = context.primaryColor - // targetElevation = context.elevation + stateListAnimator = null elevation = if (AppConfig.elevation < 0) { context.elevation From e05a451314686b7d786ec1766dade79610c0acad Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 9 Mar 2020 21:04:12 +0800 Subject: [PATCH 002/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/constant/PreferKey.kt | 1 - .../main/java/io/legado/app/help/AppConfig.kt | 2 +- app/src/main/java/io/legado/app/help/BookHelp.kt | 4 ++-- .../legado/app/ui/config/OtherConfigFragment.kt | 16 ++++++++++------ .../io/legado/app/ui/welcome/WelcomeActivity.kt | 2 +- .../io/legado/app/utils/ContextExtensions.kt | 7 +++++++ 6 files changed, 21 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/io/legado/app/constant/PreferKey.kt b/app/src/main/java/io/legado/app/constant/PreferKey.kt index 1ba9ba6cf..e14ec42f6 100644 --- a/app/src/main/java/io/legado/app/constant/PreferKey.kt +++ b/app/src/main/java/io/legado/app/constant/PreferKey.kt @@ -3,7 +3,6 @@ package io.legado.app.constant object PreferKey { const val versionCode = "versionCode" const val themeMode = "themeMode" - const val downloadPath = "downloadPath" const val hideStatusBar = "hideStatusBar" const val clickTurnPage = "clickTurnPage" const val clickAllNext = "clickAllNext" diff --git a/app/src/main/java/io/legado/app/help/AppConfig.kt b/app/src/main/java/io/legado/app/help/AppConfig.kt index 7e9c05834..9d6f87d61 100644 --- a/app/src/main/java/io/legado/app/help/AppConfig.kt +++ b/app/src/main/java/io/legado/app/help/AppConfig.kt @@ -49,7 +49,7 @@ object AppConfig { } val autoRefreshBook: Boolean - get() = App.INSTANCE.getPrefBoolean(App.INSTANCE.getString(R.string.pk_auto_refresh)) + get() = App.INSTANCE.getPrefBoolean(R.string.pk_auto_refresh) var threadCount: Int get() = App.INSTANCE.getPrefInt(PreferKey.threadCount, 16) diff --git a/app/src/main/java/io/legado/app/help/BookHelp.kt b/app/src/main/java/io/legado/app/help/BookHelp.kt index b7b45baea..b6e3ec000 100644 --- a/app/src/main/java/io/legado/app/help/BookHelp.kt +++ b/app/src/main/java/io/legado/app/help/BookHelp.kt @@ -4,8 +4,8 @@ import android.net.Uri import androidx.documentfile.provider.DocumentFile import com.github.houbb.opencc4j.core.impl.ZhConvertBootstrap import io.legado.app.App +import io.legado.app.R import io.legado.app.constant.EventBus -import io.legado.app.constant.PreferKey import io.legado.app.data.entities.Book import io.legado.app.data.entities.BookChapter import io.legado.app.data.entities.ReplaceRule @@ -21,7 +21,7 @@ import kotlin.math.min object BookHelp { private const val cacheFolderName = "book_cache" val downloadPath: String - get() = App.INSTANCE.getPrefString(PreferKey.downloadPath) + get() = App.INSTANCE.getPrefString(R.string.pk_download_path) ?: App.INSTANCE.getExternalFilesDir(null)?.absolutePath ?: App.INSTANCE.cacheDir.absolutePath diff --git a/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt b/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt index 58caa351d..a010428fd 100644 --- a/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt +++ b/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt @@ -40,7 +40,7 @@ class OtherConfigFragment : PreferenceFragmentCompat(), override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { putPrefBoolean(PreferKey.processText, isProcessTextEnabled()) addPreferencesFromResource(R.xml.pref_config_other) - upPreferenceSummary(PreferKey.downloadPath, BookHelp.downloadPath) + upPreferenceSummary(getString(R.string.pk_download_path), BookHelp.downloadPath) upPreferenceSummary(PreferKey.threadCount, AppConfig.threadCount.toString()) upPreferenceSummary(PreferKey.webPort, webPort.toString()) } @@ -74,7 +74,7 @@ class OtherConfigFragment : PreferenceFragmentCompat(), .show { putPrefInt(PreferKey.webPort, it) } - PreferKey.downloadPath -> selectDownloadPath() + getString(R.string.pk_download_path) -> selectDownloadPath() PreferKey.cleanCache -> { BookHelp.clearCache() toast(R.string.clear_cache_success) @@ -85,7 +85,7 @@ class OtherConfigFragment : PreferenceFragmentCompat(), override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) { when (key) { - PreferKey.downloadPath -> { + getString(R.string.pk_download_path) -> { upPreferenceSummary(key, BookHelp.downloadPath) } PreferKey.threadCount -> upPreferenceSummary( @@ -141,13 +141,17 @@ class OtherConfigFragment : PreferenceFragmentCompat(), private fun selectDownloadPath() { FilePicker.selectFolder(this, requestCodeDownloadPath) { - removePref(PreferKey.downloadPath) + removePref(getString(R.string.pk_download_path)) } } + private fun putDownloadPath(path: String) { + putPrefString(getString(R.string.pk_download_path), path) + } + override fun onFilePicked(requestCode: Int, currentPath: String) { if (requestCode == requestCodeDownloadPath) { - putPrefString(PreferKey.downloadPath, currentPath) + putDownloadPath(currentPath) } } @@ -160,7 +164,7 @@ class OtherConfigFragment : PreferenceFragmentCompat(), uri, Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION ) - putPrefString(PreferKey.downloadPath, uri.toString()) + putDownloadPath(uri.toString()) } } } diff --git a/app/src/main/java/io/legado/app/ui/welcome/WelcomeActivity.kt b/app/src/main/java/io/legado/app/ui/welcome/WelcomeActivity.kt index 5c84aa679..46e1e446e 100644 --- a/app/src/main/java/io/legado/app/ui/welcome/WelcomeActivity.kt +++ b/app/src/main/java/io/legado/app/ui/welcome/WelcomeActivity.kt @@ -48,7 +48,7 @@ open class WelcomeActivity : BaseActivity(R.layout.activity_welcome) { private fun startMainActivity() { startActivity() - if (getPrefBoolean(getString(R.string.pk_default_read))) { + if (getPrefBoolean(R.string.pk_default_read)) { startActivity() } finish() diff --git a/app/src/main/java/io/legado/app/utils/ContextExtensions.kt b/app/src/main/java/io/legado/app/utils/ContextExtensions.kt index 3436c9d94..bc3f6f9fa 100644 --- a/app/src/main/java/io/legado/app/utils/ContextExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/ContextExtensions.kt @@ -12,6 +12,7 @@ import android.os.BatteryManager import android.provider.Settings import androidx.annotation.ColorRes import androidx.annotation.DrawableRes +import androidx.annotation.StringRes import androidx.core.content.ContextCompat import androidx.core.content.FileProvider import androidx.core.content.edit @@ -28,6 +29,9 @@ import java.io.FileOutputStream fun Context.getPrefBoolean(key: String, defValue: Boolean = false) = defaultSharedPreferences.getBoolean(key, defValue) +fun Context.getPrefBoolean(@StringRes keyId: Int, defValue: Boolean = false) = + defaultSharedPreferences.getBoolean(getString(keyId), defValue) + fun Context.putPrefBoolean(key: String, value: Boolean = false) = defaultSharedPreferences.edit { putBoolean(key, value) } @@ -46,6 +50,9 @@ fun Context.putPrefLong(key: String, value: Long) = fun Context.getPrefString(key: String, defValue: String? = null) = defaultSharedPreferences.getString(key, defValue) +fun Context.getPrefString(@StringRes keyId: Int, defValue: String? = null) = + defaultSharedPreferences.getString(getString(keyId), defValue) + fun Context.putPrefString(key: String, value: String) = defaultSharedPreferences.edit { putString(key, value) } From 7f1add2b31493bf8002938b7ec94e6426cc2f5bd Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 9 Mar 2020 21:29:07 +0800 Subject: [PATCH 003/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/help/AppConfig.kt | 3 +++ .../java/io/legado/app/ui/config/OtherConfigFragment.kt | 7 +++++++ app/src/main/res/values/arrays.xml | 2 +- app/src/main/res/values/pref_key_value.xml | 2 +- app/src/main/res/xml/pref_config_other.xml | 8 ++++++++ 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/AppConfig.kt b/app/src/main/java/io/legado/app/help/AppConfig.kt index 9d6f87d61..4b768b9e7 100644 --- a/app/src/main/java/io/legado/app/help/AppConfig.kt +++ b/app/src/main/java/io/legado/app/help/AppConfig.kt @@ -32,6 +32,9 @@ object AppConfig { App.INSTANCE.putPrefBoolean("transparentStatusBar", value) } + val requestedDirection: String? + get() = App.INSTANCE.getPrefString(R.string.pk_requested_direction) + var backupPath: String? get() = App.INSTANCE.getPrefString(PreferKey.backupPath) set(value) { diff --git a/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt b/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt index a010428fd..c6633461a 100644 --- a/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt +++ b/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt @@ -43,6 +43,10 @@ class OtherConfigFragment : PreferenceFragmentCompat(), upPreferenceSummary(getString(R.string.pk_download_path), BookHelp.downloadPath) upPreferenceSummary(PreferKey.threadCount, AppConfig.threadCount.toString()) upPreferenceSummary(PreferKey.webPort, webPort.toString()) + upPreferenceSummary( + getString(R.string.pk_requested_direction), + AppConfig.requestedDirection + ) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -103,6 +107,9 @@ class OtherConfigFragment : PreferenceFragmentCompat(), setProcessTextEnable(it.getBoolean(key, true)) } PreferKey.showRss -> postEvent(EventBus.SHOW_RSS, "unused") + getString(R.string.pk_requested_direction) -> { + upPreferenceSummary(key, AppConfig.requestedDirection) + } } } diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 104febad6..a53546e7f 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -67,7 +67,7 @@ @string/app_folder_picker - + @string/screen_unspecified @string/screen_portrait @string/screen_landscape diff --git a/app/src/main/res/values/pref_key_value.xml b/app/src/main/res/values/pref_key_value.xml index 7bcded4da..0c535ad67 100644 --- a/app/src/main/res/values/pref_key_value.xml +++ b/app/src/main/res/values/pref_key_value.xml @@ -1,7 +1,7 @@ auto_refresh - list_screen_direction + list_screen_direction full_screen threads_num user_agent diff --git a/app/src/main/res/xml/pref_config_other.xml b/app/src/main/res/xml/pref_config_other.xml index b049bcf22..bc241370e 100644 --- a/app/src/main/res/xml/pref_config_other.xml +++ b/app/src/main/res/xml/pref_config_other.xml @@ -6,6 +6,14 @@ android:title="@string/main_activity" app:iconSpaceReserved="false"> + + Date: Mon, 9 Mar 2020 21:58:39 +0800 Subject: [PATCH 004/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values/array_values.xml | 6 ++++++ app/src/main/res/xml/pref_config_other.xml | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values/array_values.xml b/app/src/main/res/values/array_values.xml index 2aa918837..c517c46ce 100644 --- a/app/src/main/res/values/array_values.xml +++ b/app/src/main/res/values/array_values.xml @@ -38,5 +38,11 @@ 9 + + 0 + 1 + 2 + 3 + \ No newline at end of file diff --git a/app/src/main/res/xml/pref_config_other.xml b/app/src/main/res/xml/pref_config_other.xml index bc241370e..6bf712292 100644 --- a/app/src/main/res/xml/pref_config_other.xml +++ b/app/src/main/res/xml/pref_config_other.xml @@ -8,10 +8,10 @@ Date: Mon, 9 Mar 2020 22:20:33 +0800 Subject: [PATCH 005/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 1 + .../main/java/io/legado/app/ui/book/read/Help.kt | 13 +++++++++++++ .../io/legado/app/ui/book/read/ReadBookActivity.kt | 5 +++++ .../app/ui/book/read/config/MoreConfigDialog.kt | 5 +++++ .../io/legado/app/ui/config/OtherConfigFragment.kt | 7 ------- app/src/main/res/xml/pref_config_other.xml | 8 -------- app/src/main/res/xml/pref_config_read.xml | 8 ++++++++ 7 files changed, 32 insertions(+), 15 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 67af4688e..543c13f6c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -185,6 +185,7 @@ android:launchMode="singleTop" /> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED + "1" -> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT + "2" -> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE + "3" -> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR + } + } + + /** * 返回NavigationBar是否存在 * 该方法需要在View完全被绘制出来之后调用,否则判断不了 diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index 2ca4555a3..3696ccbab 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -88,6 +88,11 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo override val pageFactory: TextPageFactory get() = page_view.pageFactory override val headerHeight: Int get() = page_view.curPage.headerHeight + override fun onCreate(savedInstanceState: Bundle?) { + Help.setOrientation(this) + super.onCreate(savedInstanceState) + } + override fun onActivityCreated(savedInstanceState: Bundle?) { Help.upLayoutInDisplayCutoutMode(window) initView() diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/MoreConfigDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/MoreConfigDialog.kt index 6f472f270..a23725143 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/MoreConfigDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/MoreConfigDialog.kt @@ -104,6 +104,11 @@ class MoreConfigDialog : DialogFragment() { } PreferKey.keepLight -> postEvent(key, true) PreferKey.textSelectAble -> postEvent(key, getPrefBoolean(key)) + getString(R.string.pk_requested_direction) -> { + activity?.let { + Help.setOrientation(it) + } + } } } diff --git a/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt b/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt index c6633461a..a010428fd 100644 --- a/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt +++ b/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt @@ -43,10 +43,6 @@ class OtherConfigFragment : PreferenceFragmentCompat(), upPreferenceSummary(getString(R.string.pk_download_path), BookHelp.downloadPath) upPreferenceSummary(PreferKey.threadCount, AppConfig.threadCount.toString()) upPreferenceSummary(PreferKey.webPort, webPort.toString()) - upPreferenceSummary( - getString(R.string.pk_requested_direction), - AppConfig.requestedDirection - ) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -107,9 +103,6 @@ class OtherConfigFragment : PreferenceFragmentCompat(), setProcessTextEnable(it.getBoolean(key, true)) } PreferKey.showRss -> postEvent(EventBus.SHOW_RSS, "unused") - getString(R.string.pk_requested_direction) -> { - upPreferenceSummary(key, AppConfig.requestedDirection) - } } } diff --git a/app/src/main/res/xml/pref_config_other.xml b/app/src/main/res/xml/pref_config_other.xml index 6bf712292..b049bcf22 100644 --- a/app/src/main/res/xml/pref_config_other.xml +++ b/app/src/main/res/xml/pref_config_other.xml @@ -6,14 +6,6 @@ android:title="@string/main_activity" app:iconSpaceReserved="false"> - - + + Date: Mon, 9 Mar 2020 22:37:17 +0800 Subject: [PATCH 006/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/ui/book/read/ReadBookActivity.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index 3696ccbab..3ac7715e6 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -3,6 +3,7 @@ package io.legado.app.ui.book.read import android.annotation.SuppressLint import android.app.Activity import android.content.Intent +import android.content.res.Configuration import android.net.Uri import android.os.Bundle import android.os.Handler @@ -111,6 +112,11 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo upSystemUiVisibility() } + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + ReadBook.loadContent() + } + override fun onResume() { super.onResume() upSystemUiVisibility() From ef3049c8d3f22022f186018c3856b287e9741b91 Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 9 Mar 2020 22:54:35 +0800 Subject: [PATCH 007/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/ui/book/read/ReadBookActivity.kt | 8 ++++---- .../io/legado/app/ui/book/read/page/PageView.kt | 16 ++++++---------- .../ui/book/read/page/delegate/PageDelegate.kt | 13 +++++++++---- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index 3ac7715e6..ffdcfcbfc 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -349,7 +349,8 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo @SuppressLint("ClickableViewAccessibility") override fun onTouch(v: View, event: MotionEvent): Boolean { when (event.action) { - MotionEvent.ACTION_MOVE, MotionEvent.ACTION_UP -> { + MotionEvent.ACTION_DOWN -> textActionMenu?.dismiss() + MotionEvent.ACTION_MOVE -> { when (v.id) { R.id.cursor_left -> page_view.curPage.selectStartMove( event.rawX + cursor_left.width, @@ -361,6 +362,7 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo ) } } + MotionEvent.ACTION_UP -> showTextActionMenu() } return true } @@ -372,7 +374,6 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo cursor_left.x = x - cursor_left.width cursor_left.y = y cursor_left.visible(true) - showTextActionMenu() } /** @@ -382,7 +383,6 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo cursor_right.x = x cursor_right.y = y cursor_right.visible(true) - showTextActionMenu() } /** @@ -397,7 +397,7 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo /** * 显示文本操作菜单 */ - private fun showTextActionMenu() { + override fun showTextActionMenu() { textActionMenu ?: let { textActionMenu = TextActionMenu(this, this) } diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt index dbde99c7e..1b7b71b07 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt @@ -16,25 +16,20 @@ class PageView(context: Context, attrs: AttributeSet) : FrameLayout(context, attrs), DataSource { - var callBack: CallBack - var pageFactory: TextPageFactory + val callBack: CallBack get() = activity as CallBack + var pageFactory: TextPageFactory = TextPageFactory(this) var pageDelegate: PageDelegate? = null - var prevPage: ContentView - var curPage: ContentView - var nextPage: ContentView + var prevPage: ContentView = ContentView(context) + var curPage: ContentView = ContentView(context) + var nextPage: ContentView = ContentView(context) init { - callBack = activity as CallBack - nextPage = ContentView(context) addView(nextPage) - curPage = ContentView(context) addView(curPage) - prevPage = ContentView(context) addView(prevPage) upBg() setWillNotDraw(false) - pageFactory = TextPageFactory(this) upPageAnim() } @@ -170,5 +165,6 @@ class PageView(context: Context, attrs: AttributeSet) : val isInitFinish: Boolean fun clickCenter() fun screenOffTimerStart() + fun showTextActionMenu() } } diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/delegate/PageDelegate.kt b/app/src/main/java/io/legado/app/ui/book/read/page/delegate/PageDelegate.kt index 4173ffb09..d83f60edb 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/delegate/PageDelegate.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/delegate/PageDelegate.kt @@ -200,11 +200,16 @@ abstract class PageDelegate(protected val pageView: PageView) : //GestureDetector.onFling小幅移动不会触发,所以要自己判断 when (event.action) { MotionEvent.ACTION_UP, - MotionEvent.ACTION_CANCEL -> if (isMoved) { - if (selectedOnDown) { - selectedOnDown = false + MotionEvent.ACTION_CANCEL -> { + if (isTextSelected) { + pageView.callBack.showTextActionMenu() + } + if (isMoved) { + if (selectedOnDown) { + selectedOnDown = false + } + if (!noNext) onAnimStart() } - if (!noNext) onAnimStart() } } } From ce7142222cdd4cee1cd9283d15cc652c5cabf9a5 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 10 Mar 2020 09:10:35 +0800 Subject: [PATCH 008/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/model/localBook/LocalBook.kt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt b/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt index 9a893b8a3..fc94613d8 100644 --- a/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt +++ b/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt @@ -4,6 +4,7 @@ import android.net.Uri import androidx.documentfile.provider.DocumentFile import io.legado.app.App import io.legado.app.data.entities.Book +import io.legado.app.help.BookHelp import io.legado.app.utils.FileUtils @@ -12,8 +13,17 @@ object LocalBook { fun importFile(doc: DocumentFile) { doc.name?.let { fileName -> val str = fileName.substringBeforeLast(".") - var name = str.substringBefore("作者") - val author = str.substringAfter("作者", "") + val authorIndex = str.indexOf("作者") + var name: String + var author: String + if (authorIndex == -1) { + name = str + author = "" + } else { + name = str.substring(0, authorIndex) + author = str.substring(authorIndex) + author = BookHelp.formatAuthor(author) + } val smhStart = name.indexOf("《") val smhEnd = name.indexOf("》") if (smhStart != -1 && smhEnd != -1) { From ec362af975810c7452a7000fcc12a9f3a7f3be23 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 10 Mar 2020 10:34:47 +0800 Subject: [PATCH 009/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/book/read/ReadBookActivity.kt | 18 +++---- .../app/ui/book/read/page/ContentTextView.kt | 53 ++++++++++++++----- .../main/res/layout/activity_book_read.xml | 6 +++ 3 files changed, 56 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index ffdcfcbfc..c6294c290 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -370,10 +370,12 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo /** * 更新文字选择开始位置 */ - override fun upSelectedStart(x: Float, y: Float) { + override fun upSelectedStart(x: Float, y: Float, top: Float) { cursor_left.x = x - cursor_left.width cursor_left.y = y cursor_left.visible(true) + text_menu_position.x = x + text_menu_position.y = top } /** @@ -399,17 +401,15 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo */ override fun showTextActionMenu() { textActionMenu ?: let { - textActionMenu = TextActionMenu(this, this) - } - val x = cursor_left.x.toInt() + cursor_left.width - val y = if (cursor_left.y - statusBarHeight > ReadBookConfig.textSize.dp * 1.5 + 20.dp) { - (page_view.height - cursor_left.y + ReadBookConfig.textSize.dp * 1.5).toInt() - } else { - (page_view.height - cursor_left.y - cursor_left.height - 40.dp).toInt() + textActionMenu = TextActionMenu(this, this).apply { + contentView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED) + } } textActionMenu?.let { popup -> + val x = text_menu_position.x.toInt() + val y = text_menu_position.y.toInt() - popup.contentView.measuredHeight if (!popup.isShowing) { - popup.showAtLocation(cursor_left, Gravity.BOTTOM or Gravity.START, x, y) + popup.showAtLocation(text_menu_position, Gravity.TOP or Gravity.START, x, y) } else { popup.update(x, y, WRAP_CONTENT, WRAP_CONTENT) } diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt index 44baa68f6..53f03462f 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt @@ -31,6 +31,7 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at private val selectStart = arrayOf(0, 0, 0) private val selectEnd = arrayOf(0, 0, 0) private var textPage: TextPage = TextPage() + //滚动参数 private val pageFactory: TextPageFactory get() = callBack.pageFactory private val maxScrollOffset = 100f @@ -210,7 +211,11 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at selectEnd[0] = 0 selectEnd[1] = lineIndex selectEnd[2] = charIndex - upSelectedStart(textChar.start, textLine.lineBottom + relativeOffset) + upSelectedStart( + textChar.start, + textLine.lineBottom + relativeOffset, + textLine.lineTop + relativeOffset + ) upSelectedEnd(textChar.end, textLine.lineBottom + relativeOffset) select(0, lineIndex, charIndex) return @@ -236,7 +241,11 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at selectEnd[0] = 1 selectEnd[1] = lineIndex selectEnd[2] = charIndex - upSelectedStart(textChar.start, textLine.lineBottom + relativeOffset) + upSelectedStart( + textChar.start, + textLine.lineBottom + relativeOffset, + textLine.lineTop + relativeOffset + ) upSelectedEnd(textChar.end, textLine.lineBottom + relativeOffset) select(1, lineIndex, charIndex) return @@ -259,7 +268,11 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at selectEnd[0] = 2 selectEnd[1] = lineIndex selectEnd[2] = charIndex - upSelectedStart(textChar.start, textLine.lineBottom + relativeOffset) + upSelectedStart( + textChar.start, + textLine.lineBottom + relativeOffset, + textLine.lineTop + relativeOffset + ) upSelectedEnd(textChar.end, textLine.lineBottom + relativeOffset) select(2, lineIndex, charIndex) return @@ -287,7 +300,11 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at selectStart[0] = 0 selectStart[1] = lineIndex selectStart[2] = charIndex - upSelectedStart(textChar.start, textLine.lineBottom + relativeOffset) + upSelectedStart( + textChar.start, + textLine.lineBottom + relativeOffset, + textLine.lineTop + relativeOffset + ) upSelectChars() } return @@ -311,7 +328,11 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at selectStart[0] = 1 selectStart[1] = lineIndex selectStart[2] = charIndex - upSelectedStart(textChar.start, textLine.lineBottom + relativeOffset) + upSelectedStart( + textChar.start, + textLine.lineBottom + relativeOffset, + textLine.lineTop + relativeOffset + ) upSelectChars() } return @@ -333,7 +354,11 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at selectStart[0] = 2 selectStart[1] = lineIndex selectStart[2] = charIndex - upSelectedStart(textChar.start, textLine.lineBottom + relativeOffset) + upSelectedStart( + textChar.start, + textLine.lineBottom + relativeOffset, + textLine.lineTop + relativeOffset + ) upSelectChars() } return @@ -427,7 +452,11 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at selectStart[2] = charIndex val textLine = relativePage(relativePage).textLines[lineIndex] val textChar = textLine.textChars[charIndex] - upSelectedStart(textChar.start, textLine.lineBottom + relativeOffset(relativePage)) + upSelectedStart( + textChar.start, + textLine.lineBottom + relativeOffset(relativePage), + textLine.lineTop + ) upSelectChars() } @@ -475,12 +504,12 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at invalidate() } - private fun upSelectedStart(x: Float, y: Float) { - callBack.upSelectedStart(x, y + callBack.headerHeight) + private fun upSelectedStart(x: Float, y: Float, top: Float) = callBack.apply { + upSelectedStart(x, y + headerHeight, top + headerHeight) } - private fun upSelectedEnd(x: Float, y: Float) { - callBack.upSelectedEnd(x, y + callBack.headerHeight) + private fun upSelectedEnd(x: Float, y: Float) = callBack.apply { + upSelectedEnd(x, y + headerHeight) } fun cancelSelect() { @@ -580,7 +609,7 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at } interface CallBack { - fun upSelectedStart(x: Float, y: Float) + fun upSelectedStart(x: Float, y: Float, top: Float) fun upSelectedEnd(x: Float, y: Float) fun onCancelSelect() val headerHeight: Int diff --git a/app/src/main/res/layout/activity_book_read.xml b/app/src/main/res/layout/activity_book_read.xml index 35d8d5f45..3fc498716 100644 --- a/app/src/main/res/layout/activity_book_read.xml +++ b/app/src/main/res/layout/activity_book_read.xml @@ -9,6 +9,12 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> + + Date: Tue, 10 Mar 2020 10:51:52 +0800 Subject: [PATCH 010/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/ui/book/read/ReadBookActivity.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index c6294c290..43c6ef541 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -406,8 +406,15 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo } } textActionMenu?.let { popup -> + val popupHeight = popup.contentView.measuredHeight val x = text_menu_position.x.toInt() - val y = text_menu_position.y.toInt() - popup.contentView.measuredHeight + var y = text_menu_position.y.toInt() - popupHeight + if (y < statusBarHeight) { + y = (cursor_left.y + cursor_left.height).toInt() + } + if (cursor_right.y > y && cursor_right.y < y + popupHeight) { + y = (cursor_right.y + cursor_right.height).toInt() + } if (!popup.isShowing) { popup.showAtLocation(text_menu_position, Gravity.TOP or Gravity.START, x, y) } else { From 853d970642013f66128b2d9b87bd1f84382e6e4b Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 10 Mar 2020 10:58:08 +0800 Subject: [PATCH 011/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/ui/book/read/TextActionMenu.kt | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt b/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt index 7e90c7ad1..9d7046f6e 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt @@ -151,15 +151,16 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac */ @RequiresApi(Build.VERSION_CODES.M) private fun onInitializeMenu(menu: Menu) { - // Start with a menu Item order value that is high enough - // so that your "PROCESS_TEXT" menu items appear after the - // standard selection menu items like Cut, Copy, Paste. - var menuItemOrder = 100 - for (resolveInfo in getSupportedActivities()) { - menu.add( - Menu.NONE, Menu.NONE, - menuItemOrder++, resolveInfo.loadLabel(context.packageManager) - ).intent = createProcessTextIntentForResolveInfo(resolveInfo) + try { + var menuItemOrder = 100 + for (resolveInfo in getSupportedActivities()) { + menu.add( + Menu.NONE, Menu.NONE, + menuItemOrder++, resolveInfo.loadLabel(context.packageManager) + ).intent = createProcessTextIntentForResolveInfo(resolveInfo) + } + } catch (e: Exception) { + context.toast("获取文字操作菜单出错:${e.localizedMessage}") } } From 664813061ec231a7d021fd881a96a6c3b52b5efb Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 10 Mar 2020 11:01:50 +0800 Subject: [PATCH 012/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index fe74ee832..7cfdcfb4c 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -2,6 +2,10 @@ * 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。 * 请关注[开源阅读软件]()支持我,同时关注合作公众号[小说拾遗](),阅读公众号小编。 +**2020/03/10** +* 优化文字选择菜单弹出位置 +* 添加屏幕方向控制 + **2020/03/09** * 底部文字对齐 * 主题添加阴影调节 by yangyxd From 838bc6f034b8a4b752f1f2ffad3121a305732866 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 10 Mar 2020 11:04:42 +0800 Subject: [PATCH 013/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/popup_action_menu.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/layout/popup_action_menu.xml b/app/src/main/res/layout/popup_action_menu.xml index c6b9067d7..98cceb33c 100644 --- a/app/src/main/res/layout/popup_action_menu.xml +++ b/app/src/main/res/layout/popup_action_menu.xml @@ -16,7 +16,7 @@ android:id="@+id/iv_menu_more" android:layout_width="24dp" android:layout_height="24dp" - android:background="?attr/selectableItemBackground" + android:background="?attr/selectableItemBackgroundBorderless" android:src="@drawable/ic_more_vert" android:tint="@color/tv_text_default" android:visibility="gone" From 339ab4c2705bfa89a1eb20f8fb64f58ce0684cbb Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 10 Mar 2020 11:46:16 +0800 Subject: [PATCH 014/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/book/read/ReadBookActivity.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index 43c6ef541..3de366ec3 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -14,6 +14,7 @@ import androidx.core.view.isVisible import androidx.core.view.size import androidx.lifecycle.Observer import com.jaredrummler.android.colorpicker.ColorPickerDialogListener +import io.legado.app.BuildConfig import io.legado.app.R import io.legado.app.base.VMBaseActivity import io.legado.app.constant.EventBus @@ -681,7 +682,9 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo mHandler.removeCallbacks(keepScreenRunnable) textActionMenu?.dismiss() page_view.onDestroy() - SyncBookProgress.uploadBookProgress() + if (!BuildConfig.DEBUG) { + SyncBookProgress.uploadBookProgress() + } } override fun observeLiveBus() { From bc06effc6a1bc5805ef46fb002b3c4f4ccc571c4 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 10 Mar 2020 13:10:33 +0800 Subject: [PATCH 015/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/config/ThemeConfigFragment.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt b/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt index 17a3bcfe1..5eb887f31 100644 --- a/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt +++ b/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt @@ -1,6 +1,7 @@ package io.legado.app.ui.config import android.content.SharedPreferences +import android.os.Build import android.os.Bundle import android.view.View import androidx.preference.Preference @@ -16,7 +17,6 @@ import io.legado.app.lib.dialogs.noButton import io.legado.app.lib.dialogs.yesButton import io.legado.app.lib.theme.ATH import io.legado.app.lib.theme.ColorUtils -import io.legado.app.lib.theme.elevation import io.legado.app.ui.widget.number.NumberPickerDialog import io.legado.app.utils.* @@ -27,6 +27,9 @@ class ThemeConfigFragment : PreferenceFragmentCompat(), SharedPreferences.OnShar override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { addPreferencesFromResource(R.xml.pref_config_theme) + if (Build.VERSION.SDK_INT < 26) { + preferenceScreen.removePreference(findPreference(PreferKey.launcherIcon)) + } upPreferenceSummary("barElevation", AppConfig.elevation.toString()) } From f6d010923b0047c63b45136316050a2ffbbd1032 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 10 Mar 2020 13:13:33 +0800 Subject: [PATCH 016/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/config/ThemeConfigFragment.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt b/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt index 5eb887f31..da2672841 100644 --- a/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt +++ b/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt @@ -18,6 +18,7 @@ import io.legado.app.lib.dialogs.yesButton import io.legado.app.lib.theme.ATH import io.legado.app.lib.theme.ColorUtils import io.legado.app.ui.widget.number.NumberPickerDialog +import io.legado.app.ui.widget.prefs.IconListPreference import io.legado.app.utils.* @@ -28,7 +29,9 @@ class ThemeConfigFragment : PreferenceFragmentCompat(), SharedPreferences.OnShar override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { addPreferencesFromResource(R.xml.pref_config_theme) if (Build.VERSION.SDK_INT < 26) { - preferenceScreen.removePreference(findPreference(PreferKey.launcherIcon)) + findPreference(PreferKey.launcherIcon)?.let { + preferenceScreen.removePreference(it) + } } upPreferenceSummary("barElevation", AppConfig.elevation.toString()) } From faf287fc1a06874015ce9bade7a99dc4901e899a Mon Sep 17 00:00:00 2001 From: yangyxd Date: Tue, 10 Mar 2020 18:21:08 +0800 Subject: [PATCH 017/350] =?UTF-8?q?=E5=88=86=E7=BB=84=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/book/arrange/ArrangeBookAdapter.kt | 27 +++++++++----- .../app/ui/book/group/GroupManageDialog.kt | 3 ++ .../ui/rss/source/manage/GroupManageDialog.kt | 3 ++ .../main/res/layout/dialog_recycler_view.xml | 24 ++++++++++++- app/src/main/res/layout/item_arrange_book.xml | 35 ++++++++++++++----- .../res/layout/view_select_action_bar.xml | 4 +-- 6 files changed, 76 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/arrange/ArrangeBookAdapter.kt b/app/src/main/java/io/legado/app/ui/book/arrange/ArrangeBookAdapter.kt index 96fe1344e..fd51e3a3d 100644 --- a/app/src/main/java/io/legado/app/ui/book/arrange/ArrangeBookAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/arrange/ArrangeBookAdapter.kt @@ -1,11 +1,14 @@ package io.legado.app.ui.book.arrange import android.content.Context +import android.view.View import io.legado.app.R import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.SimpleRecyclerAdapter import io.legado.app.data.entities.Book import io.legado.app.data.entities.BookGroup +import io.legado.app.utils.gone +import io.legado.app.utils.visible import kotlinx.android.synthetic.main.item_arrange_book.view.* import org.jetbrains.anko.sdk27.listeners.onClick @@ -52,12 +55,15 @@ class ArrangeBookAdapter(context: Context, val callBack: CallBack) : override fun convert(holder: ItemViewHolder, item: Book, payloads: MutableList) { with(holder.itemView) { - tv_name.text = if (item.author.isEmpty()) { - item.name - } else { - "${item.name}(${item.author})" - } - tv_author.text = getGroupName(item.group) + tv_name.text = item.name +// tv_name.text = if (item.author.isEmpty()) { +// item.name +// } else { +// "${item.name}(${item.author})" +// } + tv_author.text = item.author // resources.getString(R.string.author_show, item.author) + tv_author.visibility = if (item.author.isEmpty()) View.GONE else View.VISIBLE + tv_group_s.text = getGroupName(item.group) checkbox.isChecked = selectedBooks.contains(item) } } @@ -102,15 +108,20 @@ class ArrangeBookAdapter(context: Context, val callBack: CallBack) : } } - private fun getGroupName(groupId: Int): String { + private fun getGroupList(groupId: Int): List { val groupNames = arrayListOf() callBack.groupList.forEach { if (it.groupId and groupId > 0) { groupNames.add(it.groupName) } } + return groupNames; + } + + private fun getGroupName(groupId: Int): String { + val groupNames = getGroupList(groupId) if (groupNames.isEmpty()) { - return context.getString(R.string.no_group) + return "" } return groupNames.joinToString(",") } diff --git a/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt b/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt index ea4d2b61e..1086f0416 100644 --- a/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt @@ -28,6 +28,7 @@ import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.customView import io.legado.app.lib.dialogs.noButton import io.legado.app.lib.dialogs.yesButton +import io.legado.app.lib.theme.accentColor import io.legado.app.ui.widget.recycler.VerticalDivider import io.legado.app.utils.applyTint import io.legado.app.utils.getViewModel @@ -72,6 +73,8 @@ class GroupManageDialog : DialogFragment(), Toolbar.OnMenuItemClickListener { recycler_view.layoutManager = LinearLayoutManager(requireContext()) recycler_view.addItemDecoration(VerticalDivider(requireContext())) recycler_view.adapter = adapter + tv_ok.setTextColor(requireContext().accentColor) + tv_ok.onClick { dismiss() } App.db.bookGroupDao().liveDataAll().observe(viewLifecycleOwner, Observer { val diffResult = DiffUtil.calculateDiff(GroupDiffCallBack(ArrayList(adapter.getItems()), it)) diff --git a/app/src/main/java/io/legado/app/ui/rss/source/manage/GroupManageDialog.kt b/app/src/main/java/io/legado/app/ui/rss/source/manage/GroupManageDialog.kt index 391281a4e..ed09cec93 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/manage/GroupManageDialog.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/manage/GroupManageDialog.kt @@ -22,6 +22,7 @@ import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.customView import io.legado.app.lib.dialogs.noButton import io.legado.app.lib.dialogs.yesButton +import io.legado.app.lib.theme.accentColor import io.legado.app.ui.widget.recycler.VerticalDivider import io.legado.app.utils.applyTint import io.legado.app.utils.getViewModelOfActivity @@ -66,6 +67,8 @@ class GroupManageDialog : DialogFragment(), Toolbar.OnMenuItemClickListener { recycler_view.layoutManager = LinearLayoutManager(requireContext()) recycler_view.addItemDecoration(VerticalDivider(requireContext())) recycler_view.adapter = adapter + tv_ok.setTextColor(requireContext().accentColor) + tv_ok.onClick { dismiss() } App.db.rssSourceDao().liveGroup().observe(viewLifecycleOwner, Observer { val groups = linkedSetOf() it.map { group -> diff --git a/app/src/main/res/layout/dialog_recycler_view.xml b/app/src/main/res/layout/dialog_recycler_view.xml index 1fce14eef..98f67043f 100644 --- a/app/src/main/res/layout/dialog_recycler_view.xml +++ b/app/src/main/res/layout/dialog_recycler_view.xml @@ -1,5 +1,6 @@ @@ -14,6 +15,27 @@ android:id="@+id/recycler_view" android:background="@color/background_card" android:layout_width="match_parent" - android:layout_height="match_parent" /> + android:layout_height="match_parent" + android:layout_weight="1" /> + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_arrange_book.xml b/app/src/main/res/layout/item_arrange_book.xml index 0ce5072d6..4fdd7a19c 100644 --- a/app/src/main/res/layout/item_arrange_book.xml +++ b/app/src/main/res/layout/item_arrange_book.xml @@ -19,26 +19,43 @@ + app:layout_constraintBottom_toTopOf="@id/tv_group_s" + app:layout_constraintLeft_toRightOf="@id/checkbox" /> + + @@ -49,7 +66,7 @@ android:background="?attr/selectableItemBackgroundBorderless" android:padding="10dp" android:text="@string/group" - app:layout_constraintTop_toTopOf="parent" + app:layout_constraintTop_toBottomOf="@id/tv_author" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintRight_toLeftOf="@+id/tv_delete" /> @@ -60,7 +77,7 @@ android:background="?attr/selectableItemBackgroundBorderless" android:padding="10dp" android:text="@string/delete" - app:layout_constraintTop_toTopOf="parent" + app:layout_constraintTop_toBottomOf="@id/tv_author" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintRight_toRightOf="parent" /> diff --git a/app/src/main/res/layout/view_select_action_bar.xml b/app/src/main/res/layout/view_select_action_bar.xml index e725a57b7..2e8d733ab 100644 --- a/app/src/main/res/layout/view_select_action_bar.xml +++ b/app/src/main/res/layout/view_select_action_bar.xml @@ -5,11 +5,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="16dp" - android:paddingRight="16dp" + android:paddingRight="8dp" android:paddingTop="6dp" android:paddingBottom="6dp" android:gravity="center_vertical" - android:elevation="2dp"> + android:elevation="2dp" > Date: Tue, 10 Mar 2020 19:23:20 +0800 Subject: [PATCH 018/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 12 +++++++- app/google-services.json | 29 +++++++++++++++++++ app/src/main/AndroidManifest.xml | 4 +++ .../main/java/io/legado/app/help/AppConfig.kt | 15 ++++++++++ .../io/legado/app/ui/main/my/MyFragment.kt | 6 ++++ app/src/main/res/xml/pref_main.xml | 4 ++- 6 files changed, 68 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 037194e73..633b8ba1b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -37,6 +37,7 @@ android { targetSdkVersion 29 versionCode gitCommits versionName version + flavorDimensions "versionCode" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" project.ext.set("archivesBaseName", name + "_" + version) multiDexEnabled true @@ -73,7 +74,15 @@ android { } } } - + productFlavors{ + app{ + manifestPlaceholders = [APP_CHANNEL_VALUE:"app"] + } + google{ + applicationId "io.legado.play" + manifestPlaceholders = [APP_CHANNEL_VALUE:"google"] + } + } compileOptions { // Flag to enable support for the new language APIs //coreLibraryDesugaringEnabled true @@ -130,6 +139,7 @@ dependencies { def room_version = '2.2.4' implementation "androidx.room:room-runtime:$room_version" kapt "androidx.room:room-compiler:$room_version" + kapt "android.arch.persistence.room:compiler:$room_version" //paging implementation 'androidx.paging:paging-runtime:2.1.1' diff --git a/app/google-services.json b/app/google-services.json index fb88090cb..314a5ea7c 100644 --- a/app/google-services.json +++ b/app/google-services.json @@ -92,6 +92,35 @@ ] } } + }, + { + "client_info": { + "mobilesdk_app_id": "1:453392274790:android:b891abd2331577dff624a7", + "android_client_info": { + "package_name": "io.legado.play.release" + } + }, + "oauth_client": [ + { + "client_id": "453392274790-hnbpatpce9hbjiggj76hgo7queu86atq.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyD90mfNLhA7cAzzI9SonpSz5mrF5BnmyJA" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "453392274790-hnbpatpce9hbjiggj76hgo7queu86atq.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } } ], "configuration_version": "1" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 543c13f6c..08cef5e93 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -252,6 +252,10 @@ android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> + + \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/help/AppConfig.kt b/app/src/main/java/io/legado/app/help/AppConfig.kt index 4b768b9e7..2e336fdad 100644 --- a/app/src/main/java/io/legado/app/help/AppConfig.kt +++ b/app/src/main/java/io/legado/app/help/AppConfig.kt @@ -1,6 +1,7 @@ package io.legado.app.help import android.content.Context +import android.content.pm.PackageManager import io.legado.app.App import io.legado.app.R import io.legado.app.constant.PreferKey @@ -119,4 +120,18 @@ object AppConfig { set(value) { App.INSTANCE.putPrefInt("elevation", value) } + } + +val Context.channel: String + get() { + try { + val pm = packageManager + val appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA); + return appInfo.metaData.getString("channel") ?: "" + } catch (e: Exception) { + e.printStackTrace(); + } + return "" + } + diff --git a/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt b/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt index ddb045c9e..7dcecaf11 100644 --- a/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt @@ -13,6 +13,7 @@ import io.legado.app.R import io.legado.app.base.BaseFragment import io.legado.app.constant.EventBus import io.legado.app.constant.PreferKey +import io.legado.app.help.channel import io.legado.app.lib.theme.ATH import io.legado.app.service.WebService import io.legado.app.ui.about.AboutActivity @@ -24,6 +25,7 @@ import io.legado.app.ui.config.ConfigViewModel import io.legado.app.ui.filechooser.FileChooserDialog import io.legado.app.ui.replacerule.ReplaceRuleActivity import io.legado.app.ui.widget.prefs.NameListPreference +import io.legado.app.ui.widget.prefs.PreferenceCategory import io.legado.app.ui.widget.prefs.SwitchPreference import io.legado.app.utils.* import kotlinx.android.synthetic.main.view_title_bar.* @@ -81,6 +83,10 @@ class MyFragment : BaseFragment(R.layout.fragment_my_config), FileChooserDialog. true } } + if (requireContext().channel == "google") { + findPreference("aboutCategory") + ?.removePreference(findPreference("donate")) + } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/app/src/main/res/xml/pref_main.xml b/app/src/main/res/xml/pref_main.xml index c95b66d9e..0794203d9 100644 --- a/app/src/main/res/xml/pref_main.xml +++ b/app/src/main/res/xml/pref_main.xml @@ -56,7 +56,9 @@ - + Date: Tue, 10 Mar 2020 21:10:32 +0800 Subject: [PATCH 019/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/ui/book/read/page/ChapterProvider.kt | 2 +- .../legado/app/ui/book/read/page/entities/TextPage.kt | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ChapterProvider.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ChapterProvider.kt index b7cf7182e..0d6a0009e 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ChapterProvider.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ChapterProvider.kt @@ -75,7 +75,7 @@ object ChapterProvider { item.chapterIndex = bookChapter.index item.chapterSize = chapterSize item.title = bookChapter.title - item.upLinesPosition(visibleHeight) + item.upLinesPosition() } return TextChapter( bookChapter.index, diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextPage.kt b/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextPage.kt index 6c4e27073..9613947c7 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextPage.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextPage.kt @@ -18,11 +18,11 @@ data class TextPage( var height: Float = 0f ) { - fun upLinesPosition(visibleHeight: Int) { - if (textLines.size <= 1) return - if (visibleHeight - height > with(textLines.last()) { lineBottom - lineTop }) return - val surplus = (visibleHeight - textLines.last().lineBottom) - if (surplus == 0f) return + fun upLinesPosition() = ChapterProvider.apply { + if (textLines.size <= 1) return@apply + if (visibleHeight - height > with(textLines.last()) { lineBottom - lineTop }) return@apply + val surplus = (visibleBottom - textLines.last().lineBottom) + if (surplus == 0f) return@apply height += surplus val tj = surplus / (textLines.size - 1) for (i in 1 until textLines.size) { From d6ef4170098face7e6b6f1b472ec1c4422bda446 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 10 Mar 2020 21:32:19 +0800 Subject: [PATCH 020/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 08cef5e93..9d778fbb3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,15 +120,19 @@ android:configChanges="locale|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize|stateHidden" /> + + + + @@ -177,12 +181,15 @@ android:scheme="yuedu" /> + + + + + + + + + + + From 9b5d9687fbb0baf3627acc844aea8aed91758a91 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 10 Mar 2020 21:35:46 +0800 Subject: [PATCH 021/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/book/info/BookInfoActivity.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt index 42e56f206..39cca5312 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt @@ -27,6 +27,7 @@ import io.legado.app.ui.book.chapterlist.ChapterListActivity import io.legado.app.ui.book.group.GroupSelectDialog import io.legado.app.ui.book.info.edit.BookInfoEditActivity import io.legado.app.ui.book.read.ReadBookActivity +import io.legado.app.ui.book.search.SearchActivity import io.legado.app.ui.book.source.edit.BookSourceEditActivity import io.legado.app.utils.getViewModel import io.legado.app.utils.gone @@ -223,6 +224,9 @@ class BookInfoActivity : GroupSelectDialog.show(supportFragmentManager, it.group) } } + tv_author.onClick { + startActivity(Pair("key", viewModel.bookData.value?.author)) + } } private fun deleteBook() { From c3db8a0dbc592ba18860a2beb3e0e0906ae6b786 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 10 Mar 2020 21:36:25 +0800 Subject: [PATCH 022/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 7cfdcfb4c..f4655e19f 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -5,6 +5,7 @@ **2020/03/10** * 优化文字选择菜单弹出位置 * 添加屏幕方向控制 +* 添加点击作者搜索 **2020/03/09** * 底部文字对齐 From 2d71df68249662635a8e96b6f2483f51daf4ae50 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 10 Mar 2020 22:15:10 +0800 Subject: [PATCH 023/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/book/local/ImportBookActivity.kt | 58 ++++++++++++++++--- 1 file changed, 50 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt index ed6bd4c74..5abc75684 100644 --- a/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt @@ -5,6 +5,7 @@ import android.app.Activity import android.content.Intent import android.net.Uri import android.os.Bundle +import android.provider.DocumentsContract import android.view.Menu import android.view.MenuItem import androidx.appcompat.widget.PopupMenu @@ -18,8 +19,7 @@ import io.legado.app.base.VMBaseActivity import io.legado.app.help.AppConfig import io.legado.app.lib.theme.accentColor import io.legado.app.ui.widget.SelectActionBar -import io.legado.app.utils.DocumentUtils -import io.legado.app.utils.getViewModel +import io.legado.app.utils.* import kotlinx.android.synthetic.main.activity_import_book.* import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.Main @@ -27,6 +27,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.jetbrains.anko.sdk27.listeners.onClick import java.io.File +import java.util.* class ImportBookActivity : VMBaseActivity(R.layout.activity_import_book), @@ -37,6 +38,7 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity private val subDocs = arrayListOf() private lateinit var adapter: ImportBookAdapter private var localUriLiveData: LiveData>? = null + private var path = FileUtils.getSdCardPath() override val viewModel: ImportBookViewModel get() = getViewModel(ImportBookViewModel::class.java) @@ -95,8 +97,8 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity when (item?.itemId) { R.id.menu_del_selection -> viewModel.deleteDoc(adapter.selectedUris) { - upPath() - } + upPath() + } } return false } @@ -111,11 +113,15 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity private fun upRootDoc() { AppConfig.importBookPath?.let { - val rootUri = Uri.parse(it) - rootDoc = DocumentFile.fromTreeUri(this, rootUri) - subDocs.clear() - upPath() + if (it.isContentPath()) { + val rootUri = Uri.parse(it) + rootDoc = DocumentFile.fromTreeUri(this, rootUri) + subDocs.clear() + } else { + path = it + } } + upPath() } @SuppressLint("SetTextI18n") @@ -151,6 +157,32 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity adapter.setData(docList) } } + } ?: let { + val docList = arrayListOf() + File(path).listFiles()?.forEach { + if (it.isDirectory) { + docList.add( + DocItem( + it.name, + DocumentsContract.Document.MIME_TYPE_DIR, + it.length(), + Date(it.lastModified()), + Uri.parse(it.absolutePath) + ) + ) + } else if (it.name.endsWith(".txt", true)) { + docList.add( + DocItem( + it.name, + it.extension, + it.length(), + Date(it.lastModified()), + Uri.parse(it.absolutePath) + ) + ) + } + } + adapter.setData(docList) } } @@ -188,6 +220,16 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity @Synchronized private fun goBackDir(): Boolean { + if (rootDoc == null) { + if (path != FileUtils.getSdCardPath()) { + File(path).parent?.let { + path = it + upPath() + return true + } + } + return false + } return if (subDocs.isNotEmpty()) { subDocs.removeAt(subDocs.lastIndex) upPath() From 2d9f041eacb5671c315167af8b9f2b48235f6ab7 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 10 Mar 2020 22:23:21 +0800 Subject: [PATCH 024/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt index 4e820008e..6dc89f716 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt @@ -38,6 +38,7 @@ class ContentView(context: Context) : FrameLayout(context) { tv_top_right.typeface = ChapterProvider.typeface tv_bottom_left.typeface = ChapterProvider.typeface tv_bottom_right.typeface = ChapterProvider.typeface + battery_view.typeface = ChapterProvider.typeface //显示状态栏时隐藏header if (hideStatusBar) { ll_header.layoutParams = ll_header.layoutParams.apply { From cd3a9044df60202388617f51ce43dae2fef3952f Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 10 Mar 2020 22:30:26 +0800 Subject: [PATCH 025/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/ui/book/local/ImportBookActivity.kt | 8 ++++++-- .../java/io/legado/app/ui/book/local/ImportBookAdapter.kt | 6 +++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt index 5abc75684..cf5f05486 100644 --- a/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt @@ -213,8 +213,12 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity } @Synchronized - override fun nextDoc(doc: DocumentFile) { - subDocs.add(doc) + override fun nextDoc(uri: Uri) { + if (uri.toString().isContentPath()) { + subDocs.add(DocumentFile.fromSingleUri(this, uri)!!) + } else { + path = uri.toString() + } upPath() } diff --git a/app/src/main/java/io/legado/app/ui/book/local/ImportBookAdapter.kt b/app/src/main/java/io/legado/app/ui/book/local/ImportBookAdapter.kt index 153356754..3e7ab7097 100644 --- a/app/src/main/java/io/legado/app/ui/book/local/ImportBookAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/local/ImportBookAdapter.kt @@ -1,7 +1,7 @@ package io.legado.app.ui.book.local import android.content.Context -import androidx.documentfile.provider.DocumentFile +import android.net.Uri import io.legado.app.R import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.SimpleRecyclerAdapter @@ -101,7 +101,7 @@ class ImportBookAdapter(context: Context, val callBack: CallBack) : holder.itemView.onClick { getItem(holder.layoutPosition)?.let { if (it.isDir) { - callBack.nextDoc(DocumentFile.fromSingleUri(context, it.uri)!!) + callBack.nextDoc(it.uri) } else if (!bookshelf.contains(it.uri.toString())) { if (!selectedUris.contains(it.uri.toString())) { selectedUris.add(it.uri.toString()) @@ -116,7 +116,7 @@ class ImportBookAdapter(context: Context, val callBack: CallBack) : } interface CallBack { - fun nextDoc(doc: DocumentFile) + fun nextDoc(uri: Uri) fun upCountView() } From 1b23fb7e28389003b30dbf57b59bf46c850f3f01 Mon Sep 17 00:00:00 2001 From: Celeter Date: Tue, 10 Mar 2020 23:33:13 +0800 Subject: [PATCH 026/350] =?UTF-8?q?web-yuedu=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/web/book.css | 176 +++++++++++++++ app/src/main/assets/web/book.html | 39 ++++ app/src/main/assets/web/book.js | 203 ++++++++++++++++++ app/src/main/assets/web/bookshelf.html | 71 +++--- .../main/assets/web/css/about.f23c15cb.css | 1 + app/src/main/assets/web/css/app.e1c0d2e4.css | 1 + .../assets/web/css/chunk-vendors.ad4ff18f.css | 1 + .../main/assets/web/css/detail.42c41bd6.css | 1 + .../web/fonts/element-icons.535877f5.woff | Bin 0 -> 28200 bytes .../web/fonts/element-icons.732389de.ttf | Bin 0 -> 55956 bytes .../assets/web/fonts/iconfont.f9a3fb0e.woff | Bin 0 -> 30972 bytes .../assets/web/fonts/popfont.f39ecc1a.ttf | Bin 0 -> 4184 bytes .../assets/web/fonts/shelffont.6c094b6d.ttf | Bin 0 -> 10072 bytes .../web/img/icons/android-chrome-192x192.png | Bin 0 -> 9416 bytes .../web/img/icons/android-chrome-512x512.png | Bin 0 -> 29808 bytes .../img/icons/apple-touch-icon-120x120.png | Bin 0 -> 3369 bytes .../img/icons/apple-touch-icon-152x152.png | Bin 0 -> 4046 bytes .../img/icons/apple-touch-icon-180x180.png | Bin 0 -> 4678 bytes .../web/img/icons/apple-touch-icon-60x60.png | Bin 0 -> 1491 bytes .../web/img/icons/apple-touch-icon-76x76.png | Bin 0 -> 1823 bytes .../assets/web/img/icons/apple-touch-icon.png | Bin 0 -> 4678 bytes .../assets/web/img/icons/favicon-16x16.png | Bin 0 -> 799 bytes .../assets/web/img/icons/favicon-32x32.png | Bin 0 -> 1271 bytes .../img/icons/msapplication-icon-144x144.png | Bin 0 -> 1169 bytes .../assets/web/img/icons/mstile-150x150.png | Bin 0 -> 4282 bytes .../web/img/icons/safari-pinned-tab.svg | 149 +++++++++++++ .../main/assets/web/img/noCover.b5c48bc1.jpeg | Bin 0 -> 5959 bytes app/src/main/assets/web/index.html | 3 +- app/src/main/assets/web/js/about.2589b5fe.js | 1 + .../assets/web/js/about~detail.08c372e6.js | 1 + app/src/main/assets/web/js/app.b25f3cec.js | 1 + .../assets/web/js/chunk-vendors.b3838a2d.js | 33 +++ app/src/main/assets/web/js/detail.043d6e39.js | 1 + app/src/main/assets/web/manifest.json | 1 + 34 files changed, 650 insertions(+), 33 deletions(-) create mode 100644 app/src/main/assets/web/book.css create mode 100644 app/src/main/assets/web/book.html create mode 100644 app/src/main/assets/web/book.js create mode 100644 app/src/main/assets/web/css/about.f23c15cb.css create mode 100644 app/src/main/assets/web/css/app.e1c0d2e4.css create mode 100644 app/src/main/assets/web/css/chunk-vendors.ad4ff18f.css create mode 100644 app/src/main/assets/web/css/detail.42c41bd6.css create mode 100644 app/src/main/assets/web/fonts/element-icons.535877f5.woff create mode 100644 app/src/main/assets/web/fonts/element-icons.732389de.ttf create mode 100644 app/src/main/assets/web/fonts/iconfont.f9a3fb0e.woff create mode 100644 app/src/main/assets/web/fonts/popfont.f39ecc1a.ttf create mode 100644 app/src/main/assets/web/fonts/shelffont.6c094b6d.ttf create mode 100644 app/src/main/assets/web/img/icons/android-chrome-192x192.png create mode 100644 app/src/main/assets/web/img/icons/android-chrome-512x512.png create mode 100644 app/src/main/assets/web/img/icons/apple-touch-icon-120x120.png create mode 100644 app/src/main/assets/web/img/icons/apple-touch-icon-152x152.png create mode 100644 app/src/main/assets/web/img/icons/apple-touch-icon-180x180.png create mode 100644 app/src/main/assets/web/img/icons/apple-touch-icon-60x60.png create mode 100644 app/src/main/assets/web/img/icons/apple-touch-icon-76x76.png create mode 100644 app/src/main/assets/web/img/icons/apple-touch-icon.png create mode 100644 app/src/main/assets/web/img/icons/favicon-16x16.png create mode 100644 app/src/main/assets/web/img/icons/favicon-32x32.png create mode 100644 app/src/main/assets/web/img/icons/msapplication-icon-144x144.png create mode 100644 app/src/main/assets/web/img/icons/mstile-150x150.png create mode 100644 app/src/main/assets/web/img/icons/safari-pinned-tab.svg create mode 100644 app/src/main/assets/web/img/noCover.b5c48bc1.jpeg create mode 100644 app/src/main/assets/web/js/about.2589b5fe.js create mode 100644 app/src/main/assets/web/js/about~detail.08c372e6.js create mode 100644 app/src/main/assets/web/js/app.b25f3cec.js create mode 100644 app/src/main/assets/web/js/chunk-vendors.b3838a2d.js create mode 100644 app/src/main/assets/web/js/detail.043d6e39.js create mode 100644 app/src/main/assets/web/manifest.json diff --git a/app/src/main/assets/web/book.css b/app/src/main/assets/web/book.css new file mode 100644 index 000000000..f6e26caa9 --- /dev/null +++ b/app/src/main/assets/web/book.css @@ -0,0 +1,176 @@ +html, body { + height: 100%; + margin: 0; +} + +.hide { + display: none; +} + +.top, .showchapter, .hidebooks { + width: 60px; + height: 50px; + position: absolute; + right: 30px; + bottom: 30px; + color: black; + font-size: 28px; + background-color: #ddd; + opacity: 0.85; +} + +.top { + bottom: 150px; +} + +.showchapter { + bottom: 90px; + bottom: 90px; +} + +.address { + width: 270px; +} + +.nav { + border-bottom: solid 1px #ccc; +} + +input, button { + width: 110px; + line-height: 34px; + background-color: #eee; + color: #555; + border: none; + margin: 10px 5px; + font-weight: 500; + border-radius: 2px; + outline: none; + cursor: pointer; +} + +input { + padding: 0 10px; + cursor: text; +} + + input:hover, button:hover { + border-color: #aaa; + background-color: #efefef; + color: #222; + outline: solid 1px #ccc; + } + +.allcontent { + height: calc(100% - 60px); +} + +.allscreen { + height: 100% +} + +.books > div { + display: inline-block; + margin: 10px; + vertical-align: top; + border: solid 1px #ddd; +} + +.read > .books { + width: 420px; + float: left; + height: 100%; + overflow: auto; + border-right: solid 1px #ccc; +} + + .read > .books > div { + margin-right: 0; + border-right: none; + } + + +.more { + overflow-y: auto; + height: 100%; + display: none; +} + +.read .more { + display: block; +} + +.books > div > img { + width: 120px; + height: 180px; + float: left; + margin-right: 10px; + cursor: pointer; +} + +.info { + padding: 10px 20px 0 20px; + width: 600px; + margin: 0 auto; +} + + .info > img { + width: 600px; + height: 900px; + } + + .info p { + line-height: 1.5; + text-align: justify; + margin: 0; + } + +.books tr:nth-child(n+2) td { + border-top: solid 1px #999; +} + +.books td:nth-child(1) { + vertical-align: top; + width: 50px; +} + +.books td:nth-child(2) { + vertical-align: top; + width: 200px; +} + +.clear { + clear: both; +} + +.chapter { + margin: 10px; + max-height: 500px; + overflow-y: auto; + border-top: solid 1px #333; + border-bottom: solid 1px #333; +} + + .chapter button { + width: 230px; + text-align: left; + text-indent: 14px; + margin: 10px 4px; + } + + +.content { + padding: 20px; + text-align: justify; + min-height: 1000px; + padding-bottom: 200px; +} + + .content h2 { + font-family: "Microsoft YaHei",微软雅黑,"MicrosoftJhengHei",华文细黑,STHeiti,MingLiu; + font-weight: 500; + text-align: center; + line-height: 100px; + font-size: 40px; + margin: 0; + } diff --git a/app/src/main/assets/web/book.html b/app/src/main/assets/web/book.html new file mode 100644 index 000000000..bc7ea6c90 --- /dev/null +++ b/app/src/main/assets/web/book.html @@ -0,0 +1,39 @@ + + + + + + 阅读3.0书架 + + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/app/src/main/assets/web/book.js b/app/src/main/assets/web/book.js new file mode 100644 index 000000000..7aa35df0f --- /dev/null +++ b/app/src/main/assets/web/book.js @@ -0,0 +1,203 @@ +var $ = document.querySelector.bind(document) + , $$ = document.querySelectorAll.bind(document) + , $c = document.createElement.bind(document) + , randomImg = "http://api.mtyqx.cn/api/random.php" + , randomImg2 = "http://img.xjh.me/random_img.php" + , books + ; + +var now_chapter = -1; +var sum_chapter = 0; + +var formatTime = value => { + return new Date(value).toLocaleString('zh-CN', { + hour12: false, year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit" + }).replace(/\//g, "-"); +}; + +var apiMap = { + "getBookshelf": "/getBookshelf", + "getChapterList": "/getChapterList", + "getBookContent": "/getBookContent", + "saveBook": "/saveBook" +}; + +var apiAddress = (apiName, url, index) => { + let address = $('#address').value || window.location.host; + if (!(/^http|^\/\//).test(address)) { + address = "//" + address; + } + if (!(/:\d{4,}/).test(address.split("//")[1].split("/")[0])) { + address += ":1122"; + } + localStorage.setItem('address', address); + if (apiName == "getBookContent") { + return address + apiMap[apiName] + (url ? "?url=" + encodeURIComponent(url) : "") + "&index=" + index; + } + return address + apiMap[apiName] + (url ? "?url=" + encodeURIComponent(url) : ""); +}; + +var init = () => { + $('#allcontent').classList.remove("read"); + $('#books').innerHTML = ""; + fetch(apiAddress("getBookshelf"), { mode: "cors" }) + .then(res => res.json()) + .then(data => { + if (!data.isSuccess) { + alert(getBookshelf.errorMsg); + return; + } + books = data.data; + books.forEach((book, i) => { + let bookDiv = $c("div"); + let img = $c("img"); + img.src = book.coverUrl || randomImg; + img.setAttribute("data-series-num", i); + bookDiv.appendChild(img); + bookDiv.innerHTML += ` + + + + + +
书名:${book.name}
作者:${book.author}
阅读:${book.durChapterTitle}
${formatTime(book.durChapterTime)}
更新:${book.latestChapterTitle}
${formatTime(book.latestChapterTime)}
来源:${book.origin}
`; + $('#books').appendChild(bookDiv); + }); + $$('#books img').forEach(bookImg => + bookImg.addEventListener("click", () => { + now_chapter = -1; + sum_chapter = 0; + $('#allcontent').classList.add("read"); + var book = books[bookImg.getAttribute("data-series-num")]; + $("#info").innerHTML = ` +

  来源:${book.origin}

+

  书名:${book.name}

+

  作者:${book.author}

+

阅读章节:${book.durChapterName}

+

阅读时间:${formatTime(book.durChapterTime)}

+

最新章节:${book.latestChapterTitle}

+

检查时间:${formatTime(book.lastCheckTime)}

+

  简介:${book.intro.trim().replace(/\n/g, "
")}

`; + window.location.hash = ""; + window.location.hash = "#info"; + $("#content").innerHTML = "章节列表加载中..."; + $("#chapter").innerHTML = ""; + fetch(apiAddress("getChapterList", book.bookUrl), { mode: "cors" }) + .then(res => res.json()) + .then(data => { + if (!data.isSuccess) { + alert(data.errorMsg); + $("#content").innerHTML = "章节列表加载失败!"; + return; + } + + data.data.forEach(chapter => { + let ch = $c("button"); + ch.setAttribute("data-url", chapter.bookUrl); + ch.setAttribute("data-index", chapter.index); + ch.setAttribute("title", chapter.title); + ch.innerHTML = chapter.title.length > 15 ? chapter.title.substring(0, 14) + "..." : chapter.title; + $("#chapter").appendChild(ch); + }); + sum_chapter = data.data.length; + $('#chapter').scrollTop = 0; + $("#content").innerHTML = "章节列表加载完成!"; + }); + + })); + }); +}; + +$("#back").addEventListener("click", () => { + if (window.location.hash === "#content") { + window.location.hash = "#chapter"; + } else if (window.location.hash === "#chapter") { + window.location.hash = "#info"; + } else { + $('#allcontent').classList.remove("read"); + } +}); + +$("#refresh").addEventListener("click", init); + +$('#hidebooks').addEventListener("click", () => { + $("#books").classList.toggle("hide"); + $(".nav").classList.toggle("hide"); + $("#allcontent").classList.toggle("allscreen"); +}); + +$('#top').addEventListener("click", () => { + window.location.hash = ""; + window.location.hash = "#info"; +}); + +$('#showchapter').addEventListener("click", () => { + window.location.hash = ""; + window.location.hash = "#chapter"; +}); + +$('#up').addEventListener('click', e => { + if (now_chapter > 0) { + now_chapter--; + let clickEvent = document.createEvent('MouseEvents'); + clickEvent.initEvent("click", true, false); + $('[data-index="' + now_chapter + '"]').dispatchEvent(clickEvent); + } else if (now_chapter == 0) { + alert("已经是第一章了^_^!") + } else { + + } +}); + +$('#down').addEventListener('click', e => { + if (now_chapter > -1) { + if (now_chapter < sum_chapter - 1) { + now_chapter++; + let clickEvent = document.createEvent('MouseEvents'); + clickEvent.initEvent("click", true, false); + $('[data-index="' + now_chapter + '"]').dispatchEvent(clickEvent); + + } else { + alert("已经是最后一章了^_^!") + } + } +}); + +$('#chapter').addEventListener("click", (e) => { + if (e.target.tagName === "BUTTON") { + var url = e.target.getAttribute("data-url"); + var index = e.target.getAttribute("data-index"); + var name = e.target.getAttribute("title"); + if (!url) { + alert("未取得书籍地址"); + } + if (!index && (0 != index)) { + alert("未取得章节索引"); + } + now_chapter = parseInt(index); + $("#content").innerHTML = "

" + name + " 加载中...

"; + fetch(apiAddress("getBookContent", url, index), { mode: "cors" }) + .then(res => res.json()) + .then(data => { + if (!data.isSuccess) { + alert(data.errorMsg); + $("#content").innerHTML = "

" + name + " 加载失败!

"; + return; + } + var content = data.data.trim().split("\n\n"); + if (content.length === 2) { + $("#content").innerHTML = `

${content[0]}

  (全文 ${content[1].length} 字)

  ` + content[1].trim().replace(/\n/g, "

"); + } else { + $("#content").innerHTML = `

${name || e.target.innerHTML}

  (全文 ${data.data.length} 字)

  ` + data.data.trim().replace(/\n/g, "

"); + } + window.location.hash = ""; + window.location.hash = "#content"; + }); + } +}); + +$('#address').setAttribute("placeholder", "阅读APP地址或IP:" + window.location.host); +if (!$('#address').value && typeof localStorage && localStorage.getItem('address')) { + $('#address').value = localStorage.getItem('address'); +} +init(); diff --git a/app/src/main/assets/web/bookshelf.html b/app/src/main/assets/web/bookshelf.html index 86639426f..87ee3bf9b 100644 --- a/app/src/main/assets/web/bookshelf.html +++ b/app/src/main/assets/web/bookshelf.html @@ -1,39 +1,46 @@ - - + + - - 阅读3.0书架 - - + + + + + yd-web-tool + + + + + + + + + + + + + + + + + + + + + + + - - - - - - -
-
-
-
-
-
-
-
-
-
-
-
- + +
+ + \ No newline at end of file diff --git a/app/src/main/assets/web/css/about.f23c15cb.css b/app/src/main/assets/web/css/about.f23c15cb.css new file mode 100644 index 000000000..1e35af10d --- /dev/null +++ b/app/src/main/assets/web/css/about.f23c15cb.css @@ -0,0 +1 @@ +@charset "UTF-8";@font-face{font-family:FZZCYSK;src:local("☺"),url(../fonts/shelffont.6c094b6d.ttf);font-style:normal;font-weight:400}.index-wrapper[data-v-5e92421e]{height:100%;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.index-wrapper .navigation-wrapper[data-v-5e92421e]{width:260px;min-width:260px;padding:48px 36px;background-color:#f7f7f7}.index-wrapper .navigation-wrapper .navigation-title[data-v-5e92421e]{font-size:24px;font-weight:500;font-family:FZZCYSK}.index-wrapper .navigation-wrapper .navigation-sub-title[data-v-5e92421e]{font-size:16px;font-weight:300;font-family:FZZCYSK;margin-top:16px;color:#b1b1b1}.index-wrapper .navigation-wrapper .search-wrapper .search-input[data-v-5e92421e]{border-radius:50%;margin-top:24px}.index-wrapper .navigation-wrapper .search-wrapper .search-input[data-v-5e92421e] .el-input__inner{border-radius:50px;border-color:#e3e3e3}.index-wrapper .navigation-wrapper .recent-wrapper[data-v-5e92421e]{margin-top:36px}.index-wrapper .navigation-wrapper .recent-wrapper .recent-title[data-v-5e92421e]{font-size:14px;color:#b1b1b1;font-family:FZZCYSK}.index-wrapper .navigation-wrapper .recent-wrapper .reading-recent[data-v-5e92421e]{margin:18px 0}.index-wrapper .navigation-wrapper .recent-wrapper .reading-recent .recent-book[data-v-5e92421e]{font-size:10px;cursor:pointer}.index-wrapper .navigation-wrapper .setting-wrapper[data-v-5e92421e]{margin-top:36px}.index-wrapper .navigation-wrapper .setting-wrapper .setting-title[data-v-5e92421e]{font-size:14px;color:#b1b1b1;font-family:FZZCYSK}.index-wrapper .navigation-wrapper .setting-wrapper .no-point[data-v-5e92421e]{pointer-events:none}.index-wrapper .navigation-wrapper .setting-wrapper .setting-connect[data-v-5e92421e]{font-size:8px;margin-top:16px;cursor:pointer}.index-wrapper .navigation-wrapper .bottom-icons[data-v-5e92421e]{position:fixed;bottom:0;height:120px;width:260px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.index-wrapper .shelf-wrapper[data-v-5e92421e]{padding:48px 48px;width:100%}.index-wrapper .shelf-wrapper[data-v-5e92421e] .el-icon-loading{font-size:36px;color:#b5b5b5}.index-wrapper .shelf-wrapper[data-v-5e92421e] .el-loading-text{font-weight:500;color:#b5b5b5}.index-wrapper .shelf-wrapper .books-wrapper[data-v-5e92421e]{height:100%;overflow:scroll}.index-wrapper .shelf-wrapper .books-wrapper .wrapper[data-v-5e92421e]{display:grid;grid-template-columns:repeat(auto-fill,380px);-ms-flex-pack:distribute;justify-content:space-around;grid-gap:10px}.index-wrapper .shelf-wrapper .books-wrapper .wrapper .book[data-v-5e92421e]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:-webkit-box;display:-ms-flexbox;display:flex;cursor:pointer;margin-bottom:18px;padding:24px 24px;width:360px;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:distribute;justify-content:space-around}.index-wrapper .shelf-wrapper .books-wrapper .wrapper .book .cover-img .cover[data-v-5e92421e],.index-wrapper .shelf-wrapper .books-wrapper .wrapper .book .cover-img[data-v-5e92421e]{width:84px;height:112px}.index-wrapper .shelf-wrapper .books-wrapper .wrapper .book .info[data-v-5e92421e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:distribute;justify-content:space-around;-webkit-box-align:left;-ms-flex-align:left;align-items:left;height:112px;margin-left:20px;-webkit-box-flex:1;-ms-flex:1;flex:1}.index-wrapper .shelf-wrapper .books-wrapper .wrapper .book .info .name[data-v-5e92421e]{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;font-size:16px;font-weight:700;color:#33373d}.index-wrapper .shelf-wrapper .books-wrapper .wrapper .book .info .sub[data-v-5e92421e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;font-size:12px;font-weight:600;color:#6b6b6b}.index-wrapper .shelf-wrapper .books-wrapper .wrapper .book .info .sub .dot[data-v-5e92421e]{margin:0 7px}.index-wrapper .shelf-wrapper .books-wrapper .wrapper .book .info .dur-chapter[data-v-5e92421e],.index-wrapper .shelf-wrapper .books-wrapper .wrapper .book .info .intro[data-v-5e92421e],.index-wrapper .shelf-wrapper .books-wrapper .wrapper .book .info .last-chapter[data-v-5e92421e]{color:#969ba3;font-size:13px;margin-top:3px;font-weight:500;word-wrap:break-word;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;text-align:left}.index-wrapper .shelf-wrapper .books-wrapper .wrapper .book[data-v-5e92421e]:hover{background:rgba(0,0,0,.1);-webkit-transition-duration:.5s;transition-duration:.5s}.index-wrapper .shelf-wrapper .books-wrapper .wrapper[data-v-5e92421e]:last-child{margin-right:auto}.index-wrapper .shelf-wrapper .books-wrapper[data-v-5e92421e]::-webkit-scrollbar{width:0!important} \ No newline at end of file diff --git a/app/src/main/assets/web/css/app.e1c0d2e4.css b/app/src/main/assets/web/css/app.e1c0d2e4.css new file mode 100644 index 000000000..275e8c3ec --- /dev/null +++ b/app/src/main/assets/web/css/app.e1c0d2e4.css @@ -0,0 +1 @@ +#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c3e50;margin:0;height:100%} \ No newline at end of file diff --git a/app/src/main/assets/web/css/chunk-vendors.ad4ff18f.css b/app/src/main/assets/web/css/chunk-vendors.ad4ff18f.css new file mode 100644 index 000000000..997434314 --- /dev/null +++ b/app/src/main/assets/web/css/chunk-vendors.ad4ff18f.css @@ -0,0 +1 @@ +.el-message__closeBtn:focus,.el-message__content:focus{outline-width:0}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;border-width:1px;border-style:solid;border-color:#ebeef5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;overflow:hidden;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67c23a}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#e6a23c}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#f56c6c}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67c23a}.el-message .el-icon-error{color:#f56c6c}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#e6a23c}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-fade-in-enter,.el-fade-in-leave-active,.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active,.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active,.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-enter-active,.el-fade-in-leave-active,.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45);transform:scale(.45)}.collapse-transition{-webkit-transition:height .3s ease-in-out,padding-top .3s ease-in-out,padding-bottom .3s ease-in-out;transition:height .3s ease-in-out,padding-top .3s ease-in-out,padding-bottom .3s ease-in-out}.horizontal-collapse-transition{-webkit-transition:width .3s ease-in-out,padding-left .3s ease-in-out,padding-right .3s ease-in-out;transition:width .3s ease-in-out,padding-left .3s ease-in-out,padding-right .3s ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}@font-face{font-family:element-icons;src:url(../fonts/element-icons.535877f5.woff) format("woff"),url(../fonts/element-icons.732389de.ttf) format("truetype");font-weight:400;font-display:"auto";font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-ice-cream-round:before{content:"\e6a0"}.el-icon-ice-cream-square:before{content:"\e6a3"}.el-icon-lollipop:before{content:"\e6a4"}.el-icon-potato-strips:before{content:"\e6a5"}.el-icon-milk-tea:before{content:"\e6a6"}.el-icon-ice-drink:before{content:"\e6a7"}.el-icon-ice-tea:before{content:"\e6a9"}.el-icon-coffee:before{content:"\e6aa"}.el-icon-orange:before{content:"\e6ab"}.el-icon-pear:before{content:"\e6ac"}.el-icon-apple:before{content:"\e6ad"}.el-icon-cherry:before{content:"\e6ae"}.el-icon-watermelon:before{content:"\e6af"}.el-icon-grape:before{content:"\e6b0"}.el-icon-refrigerator:before{content:"\e6b1"}.el-icon-goblet-square-full:before{content:"\e6b2"}.el-icon-goblet-square:before{content:"\e6b3"}.el-icon-goblet-full:before{content:"\e6b4"}.el-icon-goblet:before{content:"\e6b5"}.el-icon-cold-drink:before{content:"\e6b6"}.el-icon-coffee-cup:before{content:"\e6b8"}.el-icon-water-cup:before{content:"\e6b9"}.el-icon-hot-water:before{content:"\e6ba"}.el-icon-ice-cream:before{content:"\e6bb"}.el-icon-dessert:before{content:"\e6bc"}.el-icon-sugar:before{content:"\e6bd"}.el-icon-tableware:before{content:"\e6be"}.el-icon-burger:before{content:"\e6bf"}.el-icon-knife-fork:before{content:"\e6c1"}.el-icon-fork-spoon:before{content:"\e6c2"}.el-icon-chicken:before{content:"\e6c3"}.el-icon-food:before{content:"\e6c4"}.el-icon-dish-1:before{content:"\e6c5"}.el-icon-dish:before{content:"\e6c6"}.el-icon-moon-night:before{content:"\e6ee"}.el-icon-moon:before{content:"\e6f0"}.el-icon-cloudy-and-sunny:before{content:"\e6f1"}.el-icon-partly-cloudy:before{content:"\e6f2"}.el-icon-cloudy:before{content:"\e6f3"}.el-icon-sunny:before{content:"\e6f6"}.el-icon-sunset:before{content:"\e6f7"}.el-icon-sunrise-1:before{content:"\e6f8"}.el-icon-sunrise:before{content:"\e6f9"}.el-icon-heavy-rain:before{content:"\e6fa"}.el-icon-lightning:before{content:"\e6fb"}.el-icon-light-rain:before{content:"\e6fc"}.el-icon-wind-power:before{content:"\e6fd"}.el-icon-baseball:before{content:"\e712"}.el-icon-soccer:before{content:"\e713"}.el-icon-football:before{content:"\e715"}.el-icon-basketball:before{content:"\e716"}.el-icon-ship:before{content:"\e73f"}.el-icon-truck:before{content:"\e740"}.el-icon-bicycle:before{content:"\e741"}.el-icon-mobile-phone:before{content:"\e6d3"}.el-icon-service:before{content:"\e6d4"}.el-icon-key:before{content:"\e6e2"}.el-icon-unlock:before{content:"\e6e4"}.el-icon-lock:before{content:"\e6e5"}.el-icon-watch:before{content:"\e6fe"}.el-icon-watch-1:before{content:"\e6ff"}.el-icon-timer:before{content:"\e702"}.el-icon-alarm-clock:before{content:"\e703"}.el-icon-map-location:before{content:"\e704"}.el-icon-delete-location:before{content:"\e705"}.el-icon-add-location:before{content:"\e706"}.el-icon-location-information:before{content:"\e707"}.el-icon-location-outline:before{content:"\e708"}.el-icon-location:before{content:"\e79e"}.el-icon-place:before{content:"\e709"}.el-icon-discover:before{content:"\e70a"}.el-icon-first-aid-kit:before{content:"\e70b"}.el-icon-trophy-1:before{content:"\e70c"}.el-icon-trophy:before{content:"\e70d"}.el-icon-medal:before{content:"\e70e"}.el-icon-medal-1:before{content:"\e70f"}.el-icon-stopwatch:before{content:"\e710"}.el-icon-mic:before{content:"\e711"}.el-icon-copy-document:before{content:"\e718"}.el-icon-full-screen:before{content:"\e719"}.el-icon-switch-button:before{content:"\e71b"}.el-icon-aim:before{content:"\e71c"}.el-icon-crop:before{content:"\e71d"}.el-icon-odometer:before{content:"\e71e"}.el-icon-time:before{content:"\e71f"}.el-icon-bangzhu:before{content:"\e724"}.el-icon-close-notification:before{content:"\e726"}.el-icon-microphone:before{content:"\e727"}.el-icon-turn-off-microphone:before{content:"\e728"}.el-icon-position:before{content:"\e729"}.el-icon-postcard:before{content:"\e72a"}.el-icon-message:before{content:"\e72b"}.el-icon-chat-line-square:before{content:"\e72d"}.el-icon-chat-dot-square:before{content:"\e72e"}.el-icon-chat-dot-round:before{content:"\e72f"}.el-icon-chat-square:before{content:"\e730"}.el-icon-chat-line-round:before{content:"\e731"}.el-icon-chat-round:before{content:"\e732"}.el-icon-set-up:before{content:"\e733"}.el-icon-turn-off:before{content:"\e734"}.el-icon-open:before{content:"\e735"}.el-icon-connection:before{content:"\e736"}.el-icon-link:before{content:"\e737"}.el-icon-cpu:before{content:"\e738"}.el-icon-thumb:before{content:"\e739"}.el-icon-female:before{content:"\e73a"}.el-icon-male:before{content:"\e73b"}.el-icon-guide:before{content:"\e73c"}.el-icon-news:before{content:"\e73e"}.el-icon-price-tag:before{content:"\e744"}.el-icon-discount:before{content:"\e745"}.el-icon-wallet:before{content:"\e747"}.el-icon-coin:before{content:"\e748"}.el-icon-money:before{content:"\e749"}.el-icon-bank-card:before{content:"\e74a"}.el-icon-box:before{content:"\e74b"}.el-icon-present:before{content:"\e74c"}.el-icon-sell:before{content:"\e6d5"}.el-icon-sold-out:before{content:"\e6d6"}.el-icon-shopping-bag-2:before{content:"\e74d"}.el-icon-shopping-bag-1:before{content:"\e74e"}.el-icon-shopping-cart-2:before{content:"\e74f"}.el-icon-shopping-cart-1:before{content:"\e750"}.el-icon-shopping-cart-full:before{content:"\e751"}.el-icon-smoking:before{content:"\e752"}.el-icon-no-smoking:before{content:"\e753"}.el-icon-house:before{content:"\e754"}.el-icon-table-lamp:before{content:"\e755"}.el-icon-school:before{content:"\e756"}.el-icon-office-building:before{content:"\e757"}.el-icon-toilet-paper:before{content:"\e758"}.el-icon-notebook-2:before{content:"\e759"}.el-icon-notebook-1:before{content:"\e75a"}.el-icon-files:before{content:"\e75b"}.el-icon-collection:before{content:"\e75c"}.el-icon-receiving:before{content:"\e75d"}.el-icon-suitcase-1:before{content:"\e760"}.el-icon-suitcase:before{content:"\e761"}.el-icon-film:before{content:"\e763"}.el-icon-collection-tag:before{content:"\e765"}.el-icon-data-analysis:before{content:"\e766"}.el-icon-pie-chart:before{content:"\e767"}.el-icon-data-board:before{content:"\e768"}.el-icon-data-line:before{content:"\e76d"}.el-icon-reading:before{content:"\e769"}.el-icon-magic-stick:before{content:"\e76a"}.el-icon-coordinate:before{content:"\e76b"}.el-icon-mouse:before{content:"\e76c"}.el-icon-brush:before{content:"\e76e"}.el-icon-headset:before{content:"\e76f"}.el-icon-umbrella:before{content:"\e770"}.el-icon-scissors:before{content:"\e771"}.el-icon-mobile:before{content:"\e773"}.el-icon-attract:before{content:"\e774"}.el-icon-monitor:before{content:"\e775"}.el-icon-search:before{content:"\e778"}.el-icon-takeaway-box:before{content:"\e77a"}.el-icon-paperclip:before{content:"\e77d"}.el-icon-printer:before{content:"\e77e"}.el-icon-document-add:before{content:"\e782"}.el-icon-document:before{content:"\e785"}.el-icon-document-checked:before{content:"\e786"}.el-icon-document-copy:before{content:"\e787"}.el-icon-document-delete:before{content:"\e788"}.el-icon-document-remove:before{content:"\e789"}.el-icon-tickets:before{content:"\e78b"}.el-icon-folder-checked:before{content:"\e77f"}.el-icon-folder-delete:before{content:"\e780"}.el-icon-folder-remove:before{content:"\e781"}.el-icon-folder-add:before{content:"\e783"}.el-icon-folder-opened:before{content:"\e784"}.el-icon-folder:before{content:"\e78a"}.el-icon-edit-outline:before{content:"\e764"}.el-icon-edit:before{content:"\e78c"}.el-icon-date:before{content:"\e78e"}.el-icon-c-scale-to-original:before{content:"\e7c6"}.el-icon-view:before{content:"\e6ce"}.el-icon-loading:before{content:"\e6cf"}.el-icon-rank:before{content:"\e6d1"}.el-icon-sort-down:before{content:"\e7c4"}.el-icon-sort-up:before{content:"\e7c5"}.el-icon-sort:before{content:"\e6d2"}.el-icon-finished:before{content:"\e6cd"}.el-icon-refresh-left:before{content:"\e6c7"}.el-icon-refresh-right:before{content:"\e6c8"}.el-icon-refresh:before{content:"\e6d0"}.el-icon-video-play:before{content:"\e7c0"}.el-icon-video-pause:before{content:"\e7c1"}.el-icon-d-arrow-right:before{content:"\e6dc"}.el-icon-d-arrow-left:before{content:"\e6dd"}.el-icon-arrow-up:before{content:"\e6e1"}.el-icon-arrow-down:before{content:"\e6df"}.el-icon-arrow-right:before{content:"\e6e0"}.el-icon-arrow-left:before{content:"\e6de"}.el-icon-top-right:before{content:"\e6e7"}.el-icon-top-left:before{content:"\e6e8"}.el-icon-top:before{content:"\e6e6"}.el-icon-bottom:before{content:"\e6eb"}.el-icon-right:before{content:"\e6e9"}.el-icon-back:before{content:"\e6ea"}.el-icon-bottom-right:before{content:"\e6ec"}.el-icon-bottom-left:before{content:"\e6ed"}.el-icon-caret-top:before{content:"\e78f"}.el-icon-caret-bottom:before{content:"\e790"}.el-icon-caret-right:before{content:"\e791"}.el-icon-caret-left:before{content:"\e792"}.el-icon-d-caret:before{content:"\e79a"}.el-icon-share:before{content:"\e793"}.el-icon-menu:before{content:"\e798"}.el-icon-s-grid:before{content:"\e7a6"}.el-icon-s-check:before{content:"\e7a7"}.el-icon-s-data:before{content:"\e7a8"}.el-icon-s-opportunity:before{content:"\e7aa"}.el-icon-s-custom:before{content:"\e7ab"}.el-icon-s-claim:before{content:"\e7ad"}.el-icon-s-finance:before{content:"\e7ae"}.el-icon-s-comment:before{content:"\e7af"}.el-icon-s-flag:before{content:"\e7b0"}.el-icon-s-marketing:before{content:"\e7b1"}.el-icon-s-shop:before{content:"\e7b4"}.el-icon-s-open:before{content:"\e7b5"}.el-icon-s-management:before{content:"\e7b6"}.el-icon-s-ticket:before{content:"\e7b7"}.el-icon-s-release:before{content:"\e7b8"}.el-icon-s-home:before{content:"\e7b9"}.el-icon-s-promotion:before{content:"\e7ba"}.el-icon-s-operation:before{content:"\e7bb"}.el-icon-s-unfold:before{content:"\e7bc"}.el-icon-s-fold:before{content:"\e7a9"}.el-icon-s-platform:before{content:"\e7bd"}.el-icon-s-order:before{content:"\e7be"}.el-icon-s-cooperation:before{content:"\e7bf"}.el-icon-bell:before{content:"\e725"}.el-icon-message-solid:before{content:"\e799"}.el-icon-video-camera:before{content:"\e772"}.el-icon-video-camera-solid:before{content:"\e796"}.el-icon-camera:before{content:"\e779"}.el-icon-camera-solid:before{content:"\e79b"}.el-icon-download:before{content:"\e77c"}.el-icon-upload2:before{content:"\e77b"}.el-icon-upload:before{content:"\e7c3"}.el-icon-picture-outline-round:before{content:"\e75f"}.el-icon-picture-outline:before{content:"\e75e"}.el-icon-picture:before{content:"\e79f"}.el-icon-close:before{content:"\e6db"}.el-icon-check:before{content:"\e6da"}.el-icon-plus:before{content:"\e6d9"}.el-icon-minus:before{content:"\e6d8"}.el-icon-help:before{content:"\e73d"}.el-icon-s-help:before{content:"\e7b3"}.el-icon-circle-close:before{content:"\e78d"}.el-icon-circle-check:before{content:"\e720"}.el-icon-circle-plus-outline:before{content:"\e723"}.el-icon-remove-outline:before{content:"\e722"}.el-icon-zoom-out:before{content:"\e776"}.el-icon-zoom-in:before{content:"\e777"}.el-icon-error:before{content:"\e79d"}.el-icon-success:before{content:"\e79c"}.el-icon-circle-plus:before{content:"\e7a0"}.el-icon-remove:before{content:"\e7a2"}.el-icon-info:before{content:"\e7a1"}.el-icon-question:before{content:"\e7a4"}.el-icon-warning-outline:before{content:"\e6c9"}.el-icon-warning:before{content:"\e7a3"}.el-icon-goods:before{content:"\e7c2"}.el-icon-s-goods:before{content:"\e7b2"}.el-icon-star-off:before{content:"\e717"}.el-icon-star-on:before{content:"\e797"}.el-icon-more-outline:before{content:"\e6cc"}.el-icon-more:before{content:"\e794"}.el-icon-phone-outline:before{content:"\e6cb"}.el-icon-phone:before{content:"\e795"}.el-icon-user:before{content:"\e6e3"}.el-icon-user-solid:before{content:"\e7a5"}.el-icon-setting:before{content:"\e6ca"}.el-icon-s-tools:before{content:"\e7ac"}.el-icon-delete:before{content:"\e6d7"}.el-icon-delete-solid:before{content:"\e7c9"}.el-icon-eleme:before{content:"\e7c7"}.el-icon-platform-eleme:before{content:"\e7ca"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotating{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.el-button,.el-input__inner{-webkit-appearance:none;outline:0}.el-message-box,.el-popup-parent--hidden{overflow:hidden}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@-webkit-keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{to{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#fff;border-radius:4px;border:1px solid #ebeef5;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper:after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px 15px 10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#409eff}.el-message-box__content{padding:10px 15px;color:#606266;font-size:14px}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#f56c6c}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status:before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67c23a}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#e6a23c}.el-message-box__status.el-icon-error{color:#f56c6c}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#f56c6c;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:hsla(0,0%,100%,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#409eff;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#409eff;stroke-linecap:round}.el-loading-spinner i{color:#409eff}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@-webkit-keyframes loading-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes loading-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner:-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#409eff}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner,.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:normal;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__prefix,.el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;text-align:center;height:100%;color:#c0c4cc}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner:-ms-input-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#409eff;outline:0}.el-input__suffix{right:5px;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{left:5px}.el-input__icon,.el-input__prefix{-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;line-height:40px}.el-input__icon:after{content:"";height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner,.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-popper .popper__arrow,.el-popper .popper__arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0,0,0,.03));filter:drop-shadow(0 2px 12px rgba(0,0,0,.03))}.el-popper .popper__arrow:after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow:after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow:after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow:after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow:after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-popover{position:absolute;background:#fff;min-width:150px;border-radius:4px;border:1px solid #ebeef5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.el-checkbox-button__inner,.el-tag{-webkit-box-sizing:border-box;white-space:nowrap}.el-checkbox-button__inner{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #ebeef5;border-radius:2px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:2px 0}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#ecf5ff;color:#66b1ff}.el-table-filter__list-item.is-active{background-color:#409eff;color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #ebeef5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-table-filter__bottom button:hover{color:#409eff}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.el-table,.el-table__append-wrapper{overflow:hidden}.el-table--hidden,.el-table td.is-hidden>*,.el-table th.is-hidden>*{visibility:hidden}.el-checkbox{color:#606266;font-weight:500;font-size:14px;cursor:pointer;user-select:none;margin-right:30px}.el-checkbox,.el-checkbox-button__inner,.el-table th{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#409eff}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox__input{cursor:pointer;outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#409eff;border-color:#409eff}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner:after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#409eff}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#409eff}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{content:"";position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#fff;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#409eff}.el-checkbox__inner:after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox-button,.el-checkbox-button__inner{position:relative;display:inline-block}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button__inner{line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#409eff}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#409eff;border-color:#409eff;-webkit-box-shadow:-1px 0 0 0 #8cc5ff;box-shadow:-1px 0 0 0 #8cc5ff}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#409eff}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#409eff}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-tag{background-color:#ecf5ff;border-color:#d9ecff;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#409eff;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#409eff}.el-tag .el-tag__close{color:#409eff}.el-tag .el-tag__close:hover{color:#fff;background-color:#409eff}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67c23a}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close:before{display:block}.el-tag--dark{background-color:#409eff;color:#fff}.el-tag--dark,.el-tag--dark.is-hit{border-color:#409eff}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#66b1ff}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67c23a}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#b3d8ff;color:#409eff}.el-tag--plain.is-hit{border-color:#409eff}.el-tag--plain .el-tag__close{color:#409eff}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#409eff}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow:after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow:after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow:after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow:after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow:after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-table,.el-table__expanded-cell{background-color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow:after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow:after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow:after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow:after{border-right-color:#fff}.el-table{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;font-size:14px;color:#606266}.el-table--mini,.el-table--small,.el-table__expand-icon{font-size:12px}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit td.gutter,.el-table--fit th.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th{background:#f5f7fa}.el-table th,.el-table tr{background-color:#fff}.el-table td,.el-table th{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-right,.el-table th.is-right{text-align:right}.el-table td.gutter,.el-table th.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table--medium td,.el-table--medium th{padding:10px 0}.el-table--small td,.el-table--small th{padding:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table--border td:first-child .cell,.el-table--border th:first-child .cell,.el-table .cell{padding-left:10px}.el-table tr input[type=checkbox]{margin:0}.el-table td,.el-table th.is-leaf{border-bottom:1px solid #ebeef5}.el-table th.is-sortable{cursor:pointer}.el-table th{overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-table th>.cell{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.el-table th>.cell.highlight{color:#409eff}.el-table th.required>div:before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-table td.gutter{width:0}.el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-right:10px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #ebeef5}.el-table--border:after,.el-table--group:after,.el-table:before{content:"";position:absolute;background-color:#ebeef5;z-index:1}.el-table--border:after,.el-table--group:after{top:0;right:0;width:1px;height:100%}.el-table:before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border td,.el-table--border th,.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #ebeef5}.el-table--border th.gutter:last-of-type{border-bottom:1px solid #ebeef5;border-bottom-width:1px}.el-table--border th,.el-table__fixed-right-patch{border-bottom:1px solid #ebeef5}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right:before,.el-table__fixed:before{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#ebeef5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#fff}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td{border-top:1px solid #ebeef5;background-color:#f5f7fa;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td{border-top:1px solid #ebeef5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td,.el-table__header-wrapper tbody td{background-color:#f5f7fa;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #ebeef5}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#c0c4cc;top:5px}.el-table .sort-caret.descending{border-top-color:#c0c4cc;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#409eff}.el-table .descending .sort-caret.descending{border-top-color:#409eff}.el-table .hidden-columns{visibility:hidden;position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td{background:#fafafa}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td{background-color:#ecf5ff}.el-table__body tr.hover-row.current-row>td,.el-table__body tr.hover-row.el-table__row--striped.current-row>td,.el-table__body tr.hover-row.el-table__row--striped>td,.el-table__body tr.hover-row>td{background-color:#f5f7fa}.el-table__body tr.current-row>td{background-color:#ecf5ff}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #ebeef5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td{background-color:#f5f7fa}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{display:table;content:""}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#c0c4cc}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner.is-link,.el-breadcrumb__inner a{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner.is-link:hover,.el-breadcrumb__inner a:hover{color:#409eff;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-divider{background-color:#dcdfe6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#fff;padding:0 20px;font-weight:500;color:#303133;font-size:14px}.el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-button-group>.el-button.is-active,.el-button-group>.el-button.is-disabled,.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#409eff;border-color:#c6e2ff;background-color:#ecf5ff}.el-button:active{color:#3a8ee6;border-color:#3a8ee6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#409eff;color:#409eff}.el-button.is-active,.el-button.is-plain:active{color:#3a8ee6;border-color:#3a8ee6}.el-button.is-plain:active{background:#fff;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:"";position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:hsla(0,0%,100%,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#fff;background-color:#409eff;border-color:#409eff}.el-button--primary:focus,.el-button--primary:hover{background:#66b1ff;border-color:#66b1ff;color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:#3a8ee6;border-color:#3a8ee6;color:#fff}.el-button--primary:active{outline:0}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#a0cfff;border-color:#a0cfff}.el-button--primary.is-plain{color:#409eff;background:#ecf5ff;border-color:#b3d8ff}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#409eff;border-color:#409eff;color:#fff}.el-button--primary.is-plain:active{background:#3a8ee6;border-color:#3a8ee6;color:#fff;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8cc5ff;background-color:#ecf5ff;border-color:#d9ecff}.el-button--success{color:#fff;background-color:#67c23a;border-color:#67c23a}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#fff}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#fff}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67c23a;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67c23a;border-color:#67c23a;color:#fff}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#fff}.el-button--warning.is-active,.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#fff}.el-button--danger.is-active,.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--text,.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover,.el-button--text:active{border-color:transparent}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--mini,.el-button--small{font-size:12px;border-radius:3px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small,.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{color:#409eff;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#66b1ff;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3a8ee6;background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group:after,.el-button-group:before{display:table;content:""}.el-button-group:after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)} \ No newline at end of file diff --git a/app/src/main/assets/web/css/detail.42c41bd6.css b/app/src/main/assets/web/css/detail.42c41bd6.css new file mode 100644 index 000000000..693f789a8 --- /dev/null +++ b/app/src/main/assets/web/css/detail.42c41bd6.css @@ -0,0 +1 @@ +@charset "UTF-8";.detail-wrapper[data-v-6d476c76]{padding:2% 0}.detail-wrapper .detail .bar .el-breadcrumb[data-v-6d476c76]{font-size:24px;font-weight:500;line-height:48px}.detail-wrapper .detail .bar .el-breadcrumb .index[data-v-6d476c76]{color:#333}.detail-wrapper .detail .bar .el-breadcrumb .sub[data-v-6d476c76]{color:#676767}.detail-wrapper .detail .el-divider[data-v-6d476c76]{margin-top:2%}.detail-wrapper .detail .catalog[data-v-6d476c76]{margin-top:2%;display:grid;grid-template-columns:repeat(auto-fill,300px);-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.detail-wrapper .detail .catalog .note[data-v-6d476c76]{width:200px;font-weight:500;font-size:14px;line-height:40px;padding-left:12px;padding-right:12px;word-wrap:break-word;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;text-align:left}@font-face{font-family:FZZCYSK;src:local("☺"),url(../fonts/popfont.f39ecc1a.ttf);font-style:normal;font-weight:400}.cata-wrapper[data-v-8c647fa4]{margin:-16px;padding:18px 0 24px 25px}.cata-wrapper .title[data-v-8c647fa4]{font-size:18px;font-weight:400;font-family:FZZCYSK;margin:0 0 20px 0;color:#ed4259;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;border-bottom:1px solid #ed4259}.cata-wrapper .data-wrapper[data-v-8c647fa4]{height:300px;overflow:auto}.cata-wrapper .data-wrapper .cata[data-v-8c647fa4]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.cata-wrapper .data-wrapper .cata .selected[data-v-8c647fa4]{color:#eb4259}.cata-wrapper .data-wrapper .cata .log[data-v-8c647fa4]{width:50%;height:40px;cursor:pointer;float:left;font:16px/40px PingFangSC-Regular,HelveticaNeue-Light,Helvetica Neue Light,Microsoft YaHei,sans-serif}.cata-wrapper .data-wrapper .cata .log .log-text[data-v-8c647fa4]{margin-right:26px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.cata-wrapper .night[data-v-8c647fa4] .log{border-bottom:1px solid #666}.cata-wrapper .day[data-v-8c647fa4] .log{border-bottom:1px solid #f2f2f2}@font-face{font-family:iconfont;src:url(../fonts/iconfont.f9a3fb0e.woff) format("woff")}[data-v-3d7e2fe5] .iconfont,[data-v-3d7e2fe5] .moon-icon{font-family:iconfont;font-style:normal}.settings-wrapper[data-v-3d7e2fe5]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin:-13px;width:478px;height:300px;text-align:left;padding:40px 0 40px 24px;background:#ede7da url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyBAMAAADsEZWCAAAAD1BMVEX48dr48Nf58tv379X17NJtIBxUAAACFUlEQVQ4y1XRUZakMAgF0Af2AiDWApDZgHZqAV1nZv9rGh7Rj7Y8McUFEg1wvcMESMNVD/neU8Xcaz7nYYkYlYO6Ti82PBI4BvIEg1aj3wKwRvIMgZsUy5LdhCawPFh1sZs4SrlyN9fQKpv8s5dgZ2eLyqqJiu+WkCmUEybXkm3INS01WAiv0PapJ0CZc0SJQUzcWnZYbOOY20iFD8Bk+/j2A3wNxH7GdShFYS5ff237kXh9I9zSkQmIAhOsOSVfJ6DIXTMDaPnzkRJ92S1BQQmXl5LdirgRLLDdcYqcGPwe3QN4xCBiGNbrqq9wpW1XCecChwaQdVOsRDpPCpeoolPdxeXp3WNB9PHVzWBHlygy4NJCCrFHREv6bDt0VGwJZASkpONmm1UseGeFKAQexgaAkrfYWl3AGxWOLL2AIMBNbCXpktmS3k3vHeYjGCPBa43wJTurO3ZFVpQSJdAZGLoHTyk1upkjxMEaIxum3iIARcCa5kSkFAW5fi1mUlL9eyOsaanFmOMruwvEdE3ZYzsRSzo5ewRLXyVPPEvknt8ij4DvCg2O7xOgBCUprEzV4z1WekSpUgI8DT2mrnSOXKRfQavwuKA1F+tFnMKdJSUpMA7wQAifWRkMgjUKKZE4lBl6MCM4B1pq1P4uIjDE6Pq6rL0FnW1nIFmta5vrSvq/Ch4tpqG/ZNyyWa5jZPktq81eYv8Bt5s4iFITOp4AAAAASUVORK5CYII=) repeat}.settings-wrapper .settings-title[data-v-3d7e2fe5]{font-size:18px;line-height:22px;margin-bottom:28px;font-family:FZZCYSK;font-weight:400}.settings-wrapper .setting-list ul[data-v-3d7e2fe5]{list-style:none outside none;margin:0;padding:0}.settings-wrapper .setting-list ul li[data-v-3d7e2fe5]{list-style:none outside none}.settings-wrapper .setting-list ul li i[data-v-3d7e2fe5]{font:12px/16px PingFangSC-Regular,-apple-system,Simsun;display:inline-block;min-width:48px;margin-right:16px;vertical-align:middle;color:#666}.settings-wrapper .setting-list ul li .theme-item[data-v-3d7e2fe5]{line-height:32px;width:34px;height:34px;margin-right:16px;border-radius:100%;display:inline-block;cursor:pointer;text-align:center;vertical-align:middle}.settings-wrapper .setting-list ul li .theme-item .iconfont[data-v-3d7e2fe5]{display:none}.settings-wrapper .setting-list ul li .selected[data-v-3d7e2fe5]{color:#ed4259}.settings-wrapper .setting-list ul li .selected .iconfont[data-v-3d7e2fe5]{display:inline}.settings-wrapper .setting-list ul .font-list[data-v-3d7e2fe5]{margin-top:28px}.settings-wrapper .setting-list ul .font-list .font-item[data-v-3d7e2fe5]{width:78px;height:34px;cursor:pointer;margin-right:16px;border-radius:2px;text-align:center;vertical-align:middle;display:inline-block;font:14px/34px PingFangSC-Regular,HelveticaNeue-Light,Helvetica Neue Light,Microsoft YaHei,sans-serif}.settings-wrapper .setting-list ul .font-list .font-item[data-v-3d7e2fe5]:hover,.settings-wrapper .setting-list ul .font-list .selected[data-v-3d7e2fe5]{color:#ed4259;border:1px solid #ed4259}.settings-wrapper .setting-list ul .font-size[data-v-3d7e2fe5],.settings-wrapper .setting-list ul .read-width[data-v-3d7e2fe5]{margin-top:28px}.settings-wrapper .setting-list ul .font-size .resize[data-v-3d7e2fe5],.settings-wrapper .setting-list ul .read-width .resize[data-v-3d7e2fe5]{display:inline-block;width:274px;height:34px;vertical-align:middle;border-radius:2px}.settings-wrapper .setting-list ul .font-size .resize span[data-v-3d7e2fe5],.settings-wrapper .setting-list ul .read-width .resize span[data-v-3d7e2fe5]{width:89px;height:34px;line-height:34px;display:inline-block;cursor:pointer;text-align:center;vertical-align:middle}.settings-wrapper .setting-list ul .font-size .resize span em[data-v-3d7e2fe5],.settings-wrapper .setting-list ul .read-width .resize span em[data-v-3d7e2fe5]{font-style:normal}.settings-wrapper .setting-list ul .font-size .resize .less[data-v-3d7e2fe5]:hover,.settings-wrapper .setting-list ul .font-size .resize .more[data-v-3d7e2fe5]:hover,.settings-wrapper .setting-list ul .read-width .resize .less[data-v-3d7e2fe5]:hover,.settings-wrapper .setting-list ul .read-width .resize .more[data-v-3d7e2fe5]:hover{color:#ed4259}.settings-wrapper .setting-list ul .font-size .resize .lang[data-v-3d7e2fe5],.settings-wrapper .setting-list ul .read-width .resize .lang[data-v-3d7e2fe5]{color:#a6a6a6;font-weight:400;font-family:FZZCYSK}.settings-wrapper .setting-list ul .font-size .resize b[data-v-3d7e2fe5],.settings-wrapper .setting-list ul .read-width .resize b[data-v-3d7e2fe5]{display:inline-block;height:20px;vertical-align:middle}.night[data-v-3d7e2fe5] .selected,.night[data-v-3d7e2fe5] .theme-item{border:1px solid #666}.night[data-v-3d7e2fe5] .moon-icon{color:#ed4259}.night[data-v-3d7e2fe5] .font-list .font-item,.night[data-v-3d7e2fe5] .resize{border:1px solid #666;background:rgba(45,45,45,.5)}.night[data-v-3d7e2fe5] .resize b{border-right:1px solid #666}.day[data-v-3d7e2fe5] .theme-item{border:1px solid #e5e5e5}.day[data-v-3d7e2fe5] .selected{border:1px solid #ed4259}.day[data-v-3d7e2fe5] .moon-icon{display:inline;color:hsla(0,0%,100%,.2)}.day[data-v-3d7e2fe5] .font-list .font-item{background:hsla(0,0%,100%,.5);border:1px solid rgba(0,0,0,.1)}.day[data-v-3d7e2fe5] .resize{border:1px solid #e5e5e5;background:hsla(0,0%,100%,.5)}.day[data-v-3d7e2fe5] .resize b{border-right:1px solid #e5e5e5}p[data-v-6ee085ae]{display:block;word-wrap:break-word;word-break:break-all}[data-v-08ce53b2] .pop-setting{margin-left:68px;top:0}[data-v-08ce53b2] .pop-cata{margin-left:10px}.chapter-wrapper[data-v-08ce53b2]{padding:0 4%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.chapter-wrapper[data-v-08ce53b2] .no-point{pointer-events:none}.chapter-wrapper .tool-bar[data-v-08ce53b2]{position:fixed;top:0;left:50%;z-index:100}.chapter-wrapper .tool-bar .tools[data-v-08ce53b2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.chapter-wrapper .tool-bar .tools .tool-icon[data-v-08ce53b2]{font-size:18px;width:58px;height:48px;text-align:center;padding-top:12px;cursor:pointer;outline:none}.chapter-wrapper .tool-bar .tools .tool-icon .iconfont[data-v-08ce53b2]{font-family:iconfont;width:16px;height:16px;font-size:16px;margin:0 auto 6px}.chapter-wrapper .tool-bar .tools .tool-icon .icon-text[data-v-08ce53b2]{font-size:12px}.chapter-wrapper .read-bar[data-v-08ce53b2]{position:fixed;bottom:0;right:50%;z-index:100}.chapter-wrapper .read-bar .tools[data-v-08ce53b2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.chapter-wrapper .read-bar .tools .tool-icon[data-v-08ce53b2]{font-size:18px;width:42px;height:31px;padding-top:12px;text-align:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;outline:none;margin-top:-1px}.chapter-wrapper .read-bar .tools .tool-icon .iconfont[data-v-08ce53b2]{font-family:iconfont;width:16px;height:16px;font-size:16px;margin:0 auto 6px}.chapter-wrapper .chapter-bar .el-breadcrumb .item[data-v-08ce53b2]{font-size:14px;color:#606266}.chapter-wrapper .chapter[data-v-08ce53b2]{font-family:Microsoft YaHei,PingFangSC-Regular,HelveticaNeue-Light,Helvetica Neue Light,sans-serif;text-align:left;padding:0 65px;min-height:100vh;width:670px;margin:0 auto}.chapter-wrapper .chapter[data-v-08ce53b2] .el-icon-loading{font-size:36px;color:#b5b5b5}.chapter-wrapper .chapter[data-v-08ce53b2] .el-loading-text{font-weight:500;color:#b5b5b5}.chapter-wrapper .chapter .content[data-v-08ce53b2]{font-size:18px;line-height:1.8;overflow:hidden;font-family:Microsoft YaHei,PingFangSC-Regular,HelveticaNeue-Light,Helvetica Neue Light,sans-serif}.chapter-wrapper .chapter .content .title[data-v-08ce53b2]{margin-bottom:57px;font:24px/32px PingFangSC-Regular,HelveticaNeue-Light,Helvetica Neue Light,Microsoft YaHei,sans-serif}.chapter-wrapper .chapter .content .bottom-bar[data-v-08ce53b2],.chapter-wrapper .chapter .content .top-bar[data-v-08ce53b2]{height:64px}.day[data-v-08ce53b2] .popup{-webkit-box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04)}.day[data-v-08ce53b2] .tool-icon{border:1px solid rgba(0,0,0,.1);margin-top:-1px;color:#000}.day[data-v-08ce53b2] .tool-icon .icon-text{color:rgba(0,0,0,.4)}.day[data-v-08ce53b2] .chapter{border:1px solid #d8d8d8;color:#262626}.night[data-v-08ce53b2] .popup{-webkit-box-shadow:0 2px 4px rgba(0,0,0,.48),0 0 6px rgba(0,0,0,.16);box-shadow:0 2px 4px rgba(0,0,0,.48),0 0 6px rgba(0,0,0,.16)}.night[data-v-08ce53b2] .tool-icon{border:1px solid #444;margin-top:-1px;color:#666}.night[data-v-08ce53b2] .tool-icon .icon-text{color:#666}.night[data-v-08ce53b2] .chapter{border:1px solid #444;color:#666}.night[data-v-08ce53b2] .popper__arrow{background:#666} \ No newline at end of file diff --git a/app/src/main/assets/web/fonts/element-icons.535877f5.woff b/app/src/main/assets/web/fonts/element-icons.535877f5.woff new file mode 100644 index 0000000000000000000000000000000000000000..02b9a2539e425a7a8c244faba92527602be76212 GIT binary patch literal 28200 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
%#5t+7yTm^Z{)9pPFdh-)p? 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 M3#zI7*@R#J7r=v^^Z)<= literal 0 HcmV?d00001 diff --git a/app/src/main/assets/web/fonts/shelffont.6c094b6d.ttf b/app/src/main/assets/web/fonts/shelffont.6c094b6d.ttf new file mode 100644 index 0000000000000000000000000000000000000000..476a2418d31de89f1306edbb9f2cbbf7f0a42f4d GIT binary patch literal 10072 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 EUs=^u6aWAK literal 0 HcmV?d00001 diff --git a/app/src/main/assets/web/img/icons/android-chrome-192x192.png b/app/src/main/assets/web/img/icons/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..b02aa64d97167ad649e496908b35f14c603d9249 GIT binary patch literal 9416 zcmaiaXIK+m6y}7Elz=p)MnHo|M?q?+0v{qpLa)*lLYEGqqjV4i=}jOYT}nWZqF?|) zgh-1tgLI@XT{CZOOrNn4PA94gdt+0swRr0GxtN=oJ9)6$5}Z8vu~a z0suCTT&%u4c!A=HwuTyT`R`r$p*$UIq4d$xQKwvhFj3OT{OH^VTlieG)RYbVr#JIl z(mDIH=Ppe(jQxytM}R(c{bw&opbQ^vZuTtH3D0=B_H|CF-g$>FWnM_E<8xJ;6x|$I z5G`a2B~ocHl=45jx%nT5vR43_%##6zzVX(HLh_o0w@uPo%~p-v-(oDb3R6|P%IEF4 z#wIQfyvY8F!v*IL!3%yDDE;^Uec_bR`)5#5OYHbjmxA;8`ENvd^-LYxm>)hTiEF%U zkN$D_^9{A1x73rnLs#ZZ%a11T;`K@VTo(k}RlVtj?cvL>fxM;LcX~c<-x(7x`pVDM zc{OYct-^Hikf}3ECxUyMMsv<| zf+5!5j#w_e_d*z9^^%|Ht-CMXFE${zR!096`Z0Aze9fEWr}|K9QwaZ1^~WBd|8Z8V z8EP!@Bwgvs--tSLM##X-93mjI^{%RgAmi(oeI>jCWazZd{W@fJ*K1Z>Fg%) z*4xn<5M$Q*0RH%LVB<3zd)|M*sP=1-R8QTAD2HS!B@!5EiXUxo?{m*wfcM7589&n@ z$ygP6irp0@_%d_lrF~Sy#}X3HN=*yFtFbTpWKUO5E%xS4?!uLWNuuQL+VKot=;~g* zC_QORR7Q9{Rspt6SeF|hW}YUK5?9a+5NUhH%MzF!lkhsn=*IY$ea%5V$N-?{!_n_Y zcP_fN@MLsZ>*#8BT48Q>j2NG8jkFohb{L;B8zf@s19ZOY2KFv*oDRB9n}z*SA$_W% z>se>krL-Xo9-hf%TffAoA;Dl>5D{V*+g&c5Khq1nOB!aGvJ<8f!n#GjJyxb|XMW{g zb(sGj?LU-ZtV&jrf9ytjp$zw2(<6bg^~W#`31{KDDP?(VKKRo!D<91yKbWm1F^X0j`%4J-3w1y22K9zf$MZa-{{e4%mk z;9`r1Y|z~HuUH|VudeyK9Fl4Y4dQ>>!BdB){T7ir5o) zB)NVqRY?{>SNu|l&XB2l*J%8#Jq*UZd5Ve>>52qkZ5k884j(Rp^jfQVt}v%qeN{bo zOmcyni(CZv!`K#r!iCJN3SDd;tdgr}7aUI`XkcA-De;-{2q*jvW`?fp$bGN;_-^PG zW7FD8#iI&rH1`87=d*9lv>7CY(QSDnpD+p|r)>am9WoZ}l2ZM#y7BfWeL^Y1TYl&x zPt~*lQgjr+CheE00LQdH+H~A;x$wa>B&}MK_RDHr^1+^I`&vAE5 zH^fGpr9CaI;*!s^vio#F39|D^sP8-Z+hGrj;IJ9kCAYpPL$xG%!T?R5ROj$t(=;4N0K zlW+S?iwOe8{x0(?oAS%6a-x9!GpUfOt$Ak9B5ogKhWJ;m?u`Hgc&=Q`)V|wVm}2@P zm^$^?$)f+?pTI!-vaoMaFlC}AO&INra{&NM=Wylv%O>(jK&}B#`*sA^R8B&=cb}Ug z_yu5`sWmZ3dV!uQ!{%AB)?9{g?GSXv`F@3z+P zAyJc8@-Rvt53m)rxfiNMr^KT4UT;kC>a(v*cqq-4ln$zsp1Uw{+IWKwL#aQ~%zBIm zBnzcYAFf)TIRW;!3p44?6E$|OHd4N(`bF~{7NFRZ|71A8K){8kNc_>aU4T{ABTcEH&nS(WU0FZ+)RVtJTFZ&>bl2qQ=54MsACbrcmU%yF{&Q&WJ8gqB3F#;0-7IGQj*Rbg z3%dW(UbN15y1Hv~!Fi$>QO5k;m75hNbC@rkVA!m^*72Mrap%SJbspLaslGqfPpkmv zBQjn<%R?YsNod`Fi-e4~aSJd=QCb)2@J%mcyH7OOZA$6BTAcTD<2bZKNu^U)k^uQQ zzQ=wd+534W?nAp4Z{8ghS;{UB@rp z7mg;eH;eH}a+9Av_%n^-LPQ}Ti`qq@y~R7FeXxz}nRiREHL*Xk6>K~%B!;ynzx%X| zNAI5Xm9R8Pb#;%yxlgo)#x|ua7Oh}ez`Hn{0@;tO{cYU^Gjq8}hn(hn7TyvdMZs<#RPf&O(+W^S`hK9Jl{AD)hkda8T{xw_^ zHq5%9SQ%+#c`F@F5{*$0lg;QhewpRZyj`TP%6VE}n&^)A@vMIOtw3rGnk7#Q=7L7` zF8WB)bx{}m4-gq-Wz8=Krn@*Sg`fA*^jRC2o4jf@1Z>RU4UG&`9Cuhy_Esbhp+6-f z9ZdG4wCha=3Zs4{^l7H2ru>H5tOd}8ImjN1UyD&7PPu5-?$#f|lgin)o^3nkb3hs1 zU-&k~Dg z-6!Q|#o7bEd^qMLIL}LW=59gBqu7oGy@%wbYknIG9x)J(DNGAev%(NvwZF;Y+~RuE zK{vUG$x<<9!|_~s+x`WcPU1_l8l38KQo6n%_a>a@hKvw!O}z}8Rp!R;iZ zP{-zJo1B*Ix8}NXZT)H!{~QBOxuFoY2bk%>r&?#sd5sEk%V$0%+lfe(e1?=)aQlE) zxCken!LMG7tiqawER;WQwbuz8{3)hvsK%M78yYaiiG=I|Z=2VC>C)1K(SU%r`kv&M zx4KnNekRuB0(q$AMlZb1LmxzeM~Kgra|C7o%zG4<6Kl8jXk{gfjVdVeIOfsSb<`)>?6622$sYI3>yQ+x*$LUfve5+91)bZ+X-)EI zT5E#a)5e&~KEp*d{*=p4j41v`eb{!R^QUJGCf@i_+yS)zqIa-B!KGpA%b3p>rYp}T zw4V%n&PKedPZn@T*Rg$Nci6yd&y{{`mL_6MacC$MKN+O57Zd zZ*Q5=S}*S&Gb$8$d3GL&(@~S|MA9-ICP=XpjU}hnP#HUsfwB zg8W_IWHhw0dg3?Z`->OloxKC!l6y$`qt$x@R3^?1PBJ^}emdey>fxDRS(M*q$Easu z)Gu*fJ351(q^nr}-Zt6YPlLWKL@NZzAVw_v^k>Eh>p1{u$`$QyJq@i_}w&}zBhZV{y}FA&aLatrk6I<%+?nPzXUOX2HbI~&(=B)^BY`*c(FS=27Vl?!nsQ(G5bat<~6g!u6red z{pp|oPA>dHMT=#-Ejfm^d9ei<`f(ij*mGa2{jq_@!hlElFuNMa_L&2a3n_q zTXxTFzrDBt>>>~(JIRw)cPCwwR#7b5u3db{jeh63<0Scw>`^Yeq8y9`of6WtO7zaN z16`#6f4X3T_dTimZPvo$+?eVKgg$<4Fb;p5#Q&p<=Yb;RR4=2d_=cTj)(=I-XJ30g zF7%yfD(2sa+0{-A9 ztzXDvW1m*Edlqjzm*{GC%s4hb;VPUsv>IwrYHpVRkY5O#AXvc5gxh~){-C71$*?! zFxSW*jT317Nj6gnS@B=)_rYbQ6YcX}mhQGwGLEF8(k;OL;_ zeF$)BJNnBjL~i7zvZbJPFVzGg#&(R_gT}i|HS>z<%b&7@=5i;hae_p! zd}QeibUf`j`3Hw#_-8ehWYP*;QIVh@cT~tpso2fPHCH6@ke0mk2TjUIeVfib`kjhO zk<74+5VJG(FR#ruObKq+Zn?1sR^fy*x_&)CinKB(G5P-Lq^@e;u{{s*Z7JJ*eJv6@ zBld9PPo=8K-D7TKhWCdzz7o>f>OIT1_C5Iac;_3C85|wo(B}jf&AA0tf=->nI}i8Y z4IOqjE8BJMZcO2&DE=}gQIQkV^^su0JsEnCCyH!a3O3X^h$89n>;xCWaZm+bd9;SI zt)G8!^hXV@6kF$92p`9~_Wocxh1YM%=lR4oeG}kLb&Q{7PWDmX-PT+x8_=kh(*+|; z7j#LAn@Op@2r<)jsMu)X2A}Q#G#+o+k93$)EY2mWAZrAAXPTA#?u!)AjuSfjQ?WCu zfBjB~aafM;bxxdk(yG^(S!CrCVKGz*loI1*xnMvTHq+CdM)F%f6_@aBv9(DHmr23o z!Y1)MLej+arq4#m8jdlJ$0=XM*k%FXAG)#|h2DGbfb9+R?UwJgrGd`bN%k#X`ahE zrRToVHBh>r9X;?x9S>AAShc5x7?`VgHUAy}y(xT^OjDpB!70A^QQYtM$)DcrWjO>z zW~Sv*1vC%zJ3hXZ;uH^)dDN4C?{~dyZAii)(_FKlDEi$2C0E6PRxiJp+n545DDu`##O z6T73~IM|VDT{)}nv_3NYS(;Xwsjxrh{s7b1!nc>$!Vp;2mN(vwf?QL7cY^iSR5}SP zFNfmxZt7cM@Pe=M8NmIn(BWW-(rVTvu-N|p^=4n9S%YZgKiZ= zm-vlJWsnODC7(2z{66ESx)ou8trzx!au_g zCJ#MI)(z!Pd6o_0s@o52xro#RLDns}?Ml#RTa--t%2n1xTy?u4jQifuKNc88uryZ& zBirV&|Hx-OMJ)iV41i>By?;N)E-0h2)=$)_dDx+8ZuuHp>mq8E>0=`$kcK4k+J2kG zgjxrDO~uS+i&x;t*HBK!`hJh|IevImord@z_7}aDIAUg~N7a!c^3*o-jbfY>?3U7==iX7Zes1Ox%{>rJxuV8k9V z@0y};oI0ReI2@Y(RV0-!vIVj{)h^p)-xDFr6x zNNCvO*9(4gBegZZ9@%2Hq-f6^NkE&i^_3ieDM}LrN|Tm=5%oLO@orDze1B^dm4=Y1 ziM*eGKya&YvLm3CSM(IA`v&3bHS5bazbL*TY9LYlTe`?3lEoI}z+B$K&5hM%W5KTB z+7;{Ko30#D3UnSOAgLLm>}S|-bu9@-3Yy=3-e10VMz+Fy1IkBZiZFAc6LT6LF%ro4MlRb(@_t#}D$; zeMw_V%bT4KUEH)xmmVUw3?G6^@45YToPd97+@Q<1hO&4XL_gS>2T)rTmZU|Q{m!CI5Tvg(su~c z0I)ofW9&unE1BsNB5saoRAp^j@NdbT2Y`5BC2kdz{%`tHF%}+)jP5@~wH(em!7^sd zPur0Yg+HWO=DoJ7MS?$YOkS11$GRjZQI8TqrvQee+bQ==&(79R?XM+A5-HgEDK%*dZyhZd(Bu zT_#T}HH;XP;_n8Tq~R842HEliQH>XtD-=TZognmcDpX@^v)p;)FhL`fKI(vyet--( z6)a$eXc|n^&)$}C8WE`7(^LFH&TO@%e*guSBY6MAu%`uQ=}o;XE8A~(u7c<(4?}LU zOo)1KupG*Ja9)D~w0epzpiU-vpX@NQ$H3}9y;D*4Ke>tlm@~j)PKYt+Zj=+G`?5D` zmS5wf%PiML)?*qTOuygycgi@thwuP{?7j!y9fp*7{ZG)+$XDR%(UVpVPfQOK@ZS9W7l=~pbcx1R5dw(y&y>mSX+=FyMPibx`RwB&T`6N053 zVOfjs+SVIz$JGiVFJWK@0L+Gg1J#sANm`(2%!}ZcHYC!QDmzE^fRZ(=RP_^Lz3cVm52|oaoet<69Tp=*Y4P)$I z1pDMNyk?J9-(8so$dtEHJZ~enT_W9I~kYCCff4&hL(WyTx$-2U$^&2ub&_rhl>RdfcW%vVw~Cva7>ni;y$lYB z*OW-*O<_I1nWNWc32CZJ5VW!(QJ{#V-d{h1gJN;)jco0Qa@T9|nw{f|deI6?oJP=5 z9pod*!rwfGTlW7tMGS!`aiL74pMG~4t`9nZDiMONvHj-UED+6al8?$C$}3MxaUyJe z09k?24ya2FK7~fCe3lMg@m-PXOjUeB0AhTqu2(=tGo0R2;>`X&9u0Bkx?Ry=bZHo1 z6ok$sA`IIu{(1<&KLVg%fzZl}&qdhOgvq2H1=fV%FezIve#aj90{J zU_S5FGjc^k;%T`5_*X;)n93^xDG3h4P)ks|6zv1zpt$;8qxI%qKep&EuM0jGTgb%@ z(w|8-RyPaUYC%6>A~YV_H3d$zFm^;k8~ga*+0?~jopT?W~MU{S6fO zlDH0%r6N#G#;777*jKtSa3vOIteIe#z_l%kbtyj;v01wJh8IB7rc{43Y3*bqj~V^J zRRJ3SDKnFo)_9oU6(fg~xgvVhdK%m=~RY@3Rlz8lc4;YBAAA{Bg=iA_6UT=e}B+ruA#^L7f{a^>v0A?w@zZ>;sp@`686n0E53@b0Su z3j5Qft7I#Yp@VSs-hoDLRKWZ~m71!)dZ~@3#2|x@{vFHmdq2sX z&%DJPbNs$7KC6;ICFQkT6vivm#HY04NJzJ|J{qeIT8ns2n&&Y5 zz3w-arou<=)duF5|ClpBb4&nlP?0rKX3_t2{Kqsg2E^C2y^yi8k$?UE_<(h-Woja~ zQRi1zcI*8!8qg?gZLt}(-}1N9G3|+2J|witV6g#j5Lf)~k=m6|dR=3(UQ5weO;BZh zWuMi5ox**n@A8L$y!wS#v-wJqpvD4NDhR6;$*8>%u#}T2law`1nviMLqHC4v6IA&f zs*U|HuIH!i?w!j3S{)LC!M&hE%KQku5u|9PsAciABA#ds>c`FpUY)uiW27*EikbbZ z1Z2A7+VPvmQ1IK$R~+e=a~B-W7{dIO3Q$|rSCPl$z`fW;1q%3^TO{wboP`m&yji}r z2ZJ`r0{38rS|h55nC^QViA^(~*mh`6NRHqcaJ|k$G&%@UlH6sY4d(df6YDdd{BOD` zS!^qrqGa8Fq=wkM+2XX{FK*^t3M2D$j+qK04kh~U&Uilr_o@#p(WM?j_m0$EoI&g8T!~qy_8m~pZ$iwnUX}w zD~myTA`!6Qm$@}(a5Y)TEj8DxQC*Z#kE_0SBW{2rl~vMVunw}PY4jIgQXc^i`rxXv zD~}ESU#|z{D=5?K;rCPZc5 zvhQWdz7J#OJnzxx`}}^_^A|jIbq#0EIm0>cbKkG+F3i|admqa|76^j&>FQ`)f*>UL z5(zOgf|qsQ?j7(#?{vZ70t9`GVBNjW0KON#sdLEyg8U^R2pb?X&k}L#Cq1SJgX9dJUMkWE|~fb zEKvHR4p{~Ykpd&+Kl<5=e?sQw_PgHEF-3@0<+weod@cR@wU*c`t_NL8g2S$oNv;o< zt|s}V!8b-WRE>O6EqV-!bzg?sAHZ7~vl?57z3Ss4zfL%k_r!hryvEtiy1H|s+~1#a zb5besUr$z9XdI4cX2wiU6BvX=|NrvmZ8BFCg%7vgWV^UCDq+O~ZxE`zr%P;i|wi2S_WNa(!*%gh-ltu9F>a^9=Q7}dNI$D{wGd2*x0HkT7(c70xx z5;RLLzTBSXl3z|xT4qgK)p|yC{)ovKvCvpMHn)#QvL*sn8KRetT}e0qC;!}Oo|rz+ zQewgs!|^!HIw8%nZIoVYM5jaOAvuDVTp9Ni>d4m(ZGY{a%7HDSNNu-Opp0eyDCntg zI+?F>)HNa$BeYUTboMyMEH`9$IIOeVl1Ya?g@gN&L?c6))eZ-BYce0cbW2SQ`;#ho zarK3w%lNR|Bl0!uq+WGIX0(dCI4by3tvugy(XF=#;wY87o{FoTfw$rayIEtBc9mK~ zyBSF}2%@uJ&i!j&j?uGm4noXdrHM5x66?K9?SXmu{u0lPZsW{RB3bxgjyK&LSiYd{ zGVI@4jPF#({dG)<=!!P7O+X#DF_t#%o;lLd2_L(^U<(z)aXQ#cLJ;X)A`gPzfxCL+ zNc$wkG3|Re?%jR06@oRxuDjYrK8oOzIMUW$8!c2B90{ZGu(!_^@i7f4$W6%z)hkwUk&M_=(GbZXwSK_RszBXEa` z)y_1>g!8)l%Czdk0e7?XhuM$p3R)sQpjZR8F{%sCB5aS2v(5*BEN=PAu_KaUws@x}V{el(3ooOp;IKVS=LDahDTjMx7_x zq7X%MLyDQvESv%nrAG-CSjRfQyC!Gg14(5&b94+cymj@0~B2qAsbiQCT3 zi5tEAZbH)To|gDAZA=6beAa4-9Q8ZP&Vr*M?N{RHz4ft|Yl~aWpZ8`?zM{9+k>J!ln+)j~lf|AbC#kGqk_*eSCtY2tIk1 z@=bxtIs@PSnY5p($o%_gkE@OELAx*3k1bC5a+v5Z?OchKyOa8D`G*ky$8&=B$vWg$ zx85yyH(g8OG=y}0*wtHcq*FJb&v)H) zsPiV6KO6@)!=%$L^~P$8Vz5YHllQU$%Cv}^!A@)v2y02}u9HZvdQz2lP zWXFnJJjgEmOyCo_?0!ql7YatZj81En{M$`r8%~}N<%O6P<-H1e8b(p_rDnDPA9S&> zw?M;|Yz-=#xb|DfeY2kZRSGLHnE3FN=!*MHKkR6<+rIIea0#4W3NcCMU3ZV$uE>aA zRvWasvzsy%BFDAm52;a$3oaGxBiGM5gEy$4_*1af`XEUP~g)j2rmvY6o+IsfT&JeRy z>h@+dQzkItr8_dzZTD6FG{Xur)@yAG`uq`Nvyu4Fd})W>l)y||wK|*)D-t8#?}+Tb zBTgOKMR;3s5~YdH2OSy-qWI3x$CzchZ86#{MxtNJUr?zn#`LUzfYbe3&OaZ2;2FS; zR;&_t>lVZN(hJuhX70cq%`ZkWI{nFPO~?b!N1~sw1Y9;u)Oa&D;gk|+X?Kz(az`3( z^E0O%hroX1e%f0p7s$B%g)Ct3h`v;v;m9e+APr+H_p}qr{t?jWz6$w9WyB9=?4}rA zLuk!}6F;(vYe$S(Ya{XUDH{{vwKY5&X^f7RjqKELeF){qi`4oL5J=!Zm$eJNChKVEOP$g6; z8hOXHY~|xrsCBMw^3^Cj)jy$X{pgD7Hk07F6)}5lL_Ei5?FTx$$KBTJBUFv3L4TFx zRZ%mTqI5zlxa*3_L&fHTLeH_EPJBk(jXXkaQ>D-y6~sqNV*|J&o9SkdGtdmLke3^u zkk@%8oMw0D*J-cIq7u0aM*_z$dN9|SK$3Jd$)(HiS{LE?w>RGGgh;O2n##I#+nTw2 zQ4fkq>1%!~7p70$*s@{6z(%sLUMe+cr2yY`5jkmscV_BDv={tZFk1hFv)#yxcI9f{ z&u5p9zU*@_z?Ryo#fJ+Ye}?bQ#A+dm9g?XTQ80E223zOJt3IHjkE4hdmXEyS4`}7i z-hl(l+;ES+CgDmEIwQM{;A6t~VQ*)1z^oH3_)B7l(1r7Iqb@00(hqy&%|`^5WG*}i zDXY9}=Y4HE%3HYRMT*DQWbWmO&K*jl5u63K4B!7_^a&O)ct&4(k@&iT*3U>Xy|>n@F6#_`kw4aLDSedr_Ndq z_uKbZvipv*>U%TWTaNLI{iHG)QlX31*LGd_Czx`3zbvzP3#1$X$656X+KPD)G`(kV z!rStCQi?0vx#d_*jKXgx0^)&v7M=B>jI0CBk5s%uN)yBG)`bkM`)(!| zVJEEBxcM%gO}#Pw;&dr@#21)Ko_H=_V_ZF-fR3X*RH>%lqf~O#s73)cMJvd_LphAD0ea^QrY-ve-WC;(VY--YzvP z7txR6IKQ~Esc`+$gwoOamS;gK{HfoS6l0@I@ZDWFuSw-1?oD~RqSP}JX(}Ifaric> zR4Z5#A1__54j=0B|Jtw`(!##}X^UA!3Z7XPx`Uj^!d3Zi!n;dC<@gg0K`z6HDyTA~ zad@Niacg#@>Vsohh^Z>2rw-r)P*GelpPr{}sd><=nBaXivAZ1tPlg8``N(huG-1Pvy5qEsVeG1<-EL0VFc8$4|TAQ z-r_!4A!DH+FYvIZ0dfM5TBC15W`EuK^L`%_%=j1;)WIk`K#vyTNC?BZaMEfuZj!tj zO?zq)@lvtrhsT00D1qax?~^avkM3@DuS>OjI0YRAzsloBuUmr7YIQv@uj$#*3GTd1 zxiOVO^*%6gq7@a79QOEwyS+W}K&Oz|&T=fhv@wh>0hYB5Xan2ntvmE%=}T`)%($17 zzrH0JZL@7YCzdgLu5OdU^H>m{AB3r5p=jHPe~&sPEq$B?+YPBMj~G-{rZx5I_^mtdoD`;w%M&1>N zB<-!fa;x!MTc(D|#tra$ls=XW=PnDNFt&<@6?v6E{IuNchyR*M@KDA<4=@xu`75($ zaz%yD$QH4t-z*rI4u9vPH~T!;~lI-V4lycw6U4U5{$@J8w|(}yY}~@99kJOV4h_xfTH?<_F2cYPK|F9%O zc@Dsmlrn%NNjk<#oZoH!n6HUdFSrXo>@zB!HR917^#qqJ@XOcEW5`Y}qzY6SBltpZ zN^7b3QE$BHV0F!l%S!3Qwmw}}^#Fh?xx=O%f__Y4S#5daO*WOg*R_!jgI|rn+NMFj zEA4j46Zw&rc5dr(SKJikM7#^@?@o;B#Ze@x@7{b7eg@(4=iG`*P$lyl*T6oH2(y=Z z*P`F;9P5Ja{J`J#WlpQyKK@tQvQ_#OD;sRt8VXU}b8 zkO7+*6E5^f=}rRt$UQJdQTevawE+^bw3^JnxFw{CI5|hPU0-MaVoxueA%i}`pySOv zkDQ5Kyzj;%bf0gs>rUz{vf+or(_>9YDT9mMR$xg-O+el|$oTJ9PTEGrxgsSl|+Z#@X#P84Wn!Y@d9y>;^JC_IUF3VG} z)DL?ljK481{qWJdlZEjkD?%0<1tt8WOE~-bWzFh!M%r(3>r&(=1b`fgNsD`UGm}jc zK6&}wOx+k7!zO9?w*CG}m!YtYwzuV&s3iSMz1`#9$QA$IZ$=^}#(-Bg7{K$9C#4I^ z+v1ZJ#q2TUts+m%!`Wg&CZ!pAt_@8j;hTere{(5WE)QIz9>%zcqn`ftwiK=l;^w1Y zT`*w6Jz94OVm0Ia{JfYj-9d$}2a8nbV0H?KJKrvcVeV41fW$DcytBWy2O zuiDz%o`P<^WANv1X7H^+wI|!<-7BFjVxPB#iZ3J)lT3grcvy|`F!x5mt()~M-U1Bq zjRr(HGKCM~xnq?7Id#|PAIQYz(SyB5r=Nvky^kv=3Aq>+g^a($bd-SJMJNozc|_$R z^jc9mZbwKmZ;e&rAp#T$D1*UWgfh~4$O+>utipP|^}wznXGqP38%WmOFViRxeADF(GFd?xAR%1hw^ot@Zg`YdPF`EEy(ooEQ zfVzcX3VLsB*#OBRxcEiNGW>x|S?Zk?>YHXJ#-Bm_2qsR~J$lAo<@1caGA)RZc*_O9 zGIDb8kzr7D(EwPgF%#&{45;IUrwum}{BSu!--)xMF%x&IY&V_W+sv!oBrjQtJ_pD0 z3VFNT^zAb`x#DiSLy0)~LmRT(hTeN3b3uEoUKmYk_jgtXT>0en{JZGyilmy|loxVT z{>R_}Hy~b>pm!9fesia)IN+}Beq3rA1!Xrx3cBfl8W1tx$$3{!dC*fyIjXfq78;bk zO_(PGj4y)rXN#QQx4g@MKDZdQn)1tq^P)Q!-^D7YFLfR1mv49hH2Fy$ph<0nWdy>J zIwcgPzx(_N{2Y3A$2Op9?q}Lf{Yy!vzeI(U+AQF9hJyRHP@QB-V-l53 z6WS!Nv+JK1j*exIJS)eK?X@Z+oVx9Ezt;7wiMa4Fe}ZPt38Ss#ZBRzO#y*DeDHkrR zmO0_6L_uBVov$@+NS^IN9RF_>+a7R%>D{`vm#fU@0S*Tb8VsXhAQ0 z(~y|6Kj<2ivbwN&Ydp*|@Y3AdYbVQ%_B$A|Bq<6^+y(TV&JH#CfUddnl@g37>b|?I zATaUtZ-|^C>S;0KTK7r2*1E!$8^={WTCcd3|J7OAN}DH@7gDI&30j6TImN^yualso zgFTfGtvnw&UA7Q(c!l@Qr>DravZR6P1bczz%JbL+Z+{*_gO~bQAsu=0ad53pPi%n# zHELRThJC#}xBcbEinv>e+^TuM7P=zany3@XFo~G#SHYXT0BAMi1ieC*Om0!|n}!YfCo%@(5s{gldGNzIo^9S}eg(+Qy}dR1qzm z2NrM?{eph-AMx5wN~;tQgRa>tQ*;e>=p+F|dABup;=>u^Qc#>ktAKno7>YAXG46)YHEyo`FXB4UfC;Z#-~ELvbB7!ZVM&Vkj_uJT8;Gu!UnbhqW}&L zQ3)NH%N@hb9B;gUz#}9eyChIdrWl=Dk#`%IuKX=2EX%U2D$;J{3P9lI2SdLXJdO5m z-?OL(G=lbtiat@PiH6Ed@X=kkTTQm8=sQdplzM=6kCo@+A5{u}&xH%$_ULky^j`s=*0pw=5ruil~Cwb;UGBgv(l0YGFXljNaT{l+hWg0=LVa0C&H{bpcp)Ih?k@*H0W`08J%! z=~FL|Qfv)eQ=-3eppAa@8QZhiKcy=GTvpcuszU{p#InWfQw4Q)*D@{KHkMfhCh)ZN zcWOED=(on~M?ezp2r-~{5W3i&(i8rcI%olwIomkuaw@wVL82RhWYCHy@+?&8-#D5-bo-$=vj6gmTE{8WjJrj+}pvxyutrU)jl>>3*^4+}CmR#+&^6I$9sLI?h?B+3LYoXc0IPS-7 zRP7Bi)4OC6U-nK*f;neo0*6IK|L5BPcOA9yTnu~5IN5zt)v7DxQbpH*si1D|Zc$x$QOqFMk!D<$fxRq;L z4perN;nv0uzqKm`q$1A`UIb6>ehRhAjS6)S?;VxVo=GH`YsuVbKillBwGIcsYrhlj%hlX~N5|q^&auc|l&yvRfX0)ejjj?Hub(dvK#_lf;Y(en*_IB)Ld& zj6O;%CVr$)Rf0(70Kk?1Q(DAA0*&^&)%3jXlrJndO0r(OX_vl;xkJZ+_2{?ll+l3j zUzv%Y4X`*vVlE{HptxMVR3I0c9d3Bg#HMa|f#bWf^5I<+V-j7~ITol0V**${4Fk<6 zQ?{doBi(ZYQ+QM5?7ozF&Te6 z=TZFUI}ma2vJHy^P1%qkMCb^lSkrIHRWom1==RXUcVb8lGb?{_*Y#%6u6)@_#NRFq zT7?t;`FAqDG?++D##VW9e~j#P|l5Pc`OeD|1s7f?H>ld z>!Y%aG>OIO`qPYD+ceq@|4Zm4a$Wrcq(jy};5?wiJzunbPoX-6tTIE9mc0BAUq~JP z78T(o^2W6~z2`yM7twtM`8#J<_45u!7C_@sM=~I8-iu%4LM-z5KR+L5kAHZSbx5<{ zmXq@8+b_UeEqh~Nqje#$V1b18RrM>9wFkgN%c`Q4X|1LQ!70TA-W|c9(l?lk?ba=K~2bH%l!B=g3sP?WL{^eI~C;5`Y zdgnu*r%_p2||vm2)ByFc*xZyD44krPNXLybJ#@$ND1#d!&+s#DG7i&Bn&{}Q}p42yz9Fm$_GcHe(r%jqYb6s zDJwu-F?lJTg3OrviE-VYr~>MWZ+|h-UUboT3fIIpx=^{=){c|GMu{R8oPm|pTxe<# z+?hAzl5*IfhH~lIO-M3Ss7JzqG|=3$#p+(=5D82 znEM58zNWKBZZ3DfvT|2FCURH5e{`(~ga7&NcwqK$6zr~p-u4DQ6t3;j_8^nRW;U?8 zHaq_mu(JwQ-)EDgmVJz(i#$M0s{pGzgA)&kvB@V-MOpN=bo%9*E-Tsd-Zkdc)FB0i z=F3V?Pa4TYNva>Zb(U1YZc=BMWJgzLg0CJr_gZjaW(h#F9gebhkJFkso|xLg06a<0 z0r?05yc9SiDTPfwR`=PIDPfD+9WQV>^X|OvRARUrbVEymelv2OL%QSR-%XbmRBEn` zFSwv8=8syPVlR&~t!{xraoN6{`Q^xTf+vy-+ypNIjQb1TFthbJGP7sld59InPth9{ zn2{CjZ#5D~nS=@yOsDV#!GD>Tf0Ul>HHsv z&Yp#3nbLL*NH3}>Ew8H)0rTSYl1X&;3(BT6 zJxhEvH{N>Qsq(4tyOp4;f0-kcBs=&uO*iPI_bTG8H1?h$)_iUu=#BLtPTPb9AV?f< zDCyJRxvReK@IU$wDtrYX^5d^Wz7tp1gxojgZfg8#kxAO_@@N1x)ET>u=#^(>%X+t6 zJa^=Hq0TiPGh6LcTIa6QCN(?o*ww0q^@`NT6bC)wZ`Ls+-@RB92T)_qd?6cgU_J~t z{oF2Y_r+wvJ&|El=9r63-_^>}?VyT3BkJ&PAx-FQBeXIND~zs7Z5%X{ zw^Kg(6IsHAOq-?ydR#9{M5X*G)|kx*ksVLup6AErk=|1$uX;50#MJ{FLOC%#%Tgoj z*--k7?#H3O<9sKlEOWTw$3a1t7JO~SB41Y3g3`J>sUtEizn)Mb4T#k9ec0yI zX?oMSO@Zn;%%$pOVEJrbGE$wSCkdfPO#vPH+(MCFdb@m? z3o2LROUl0=dM)jJZ8slyd+17KVqY-}|DG8wN3;Ot<{sCDSvPWcMaKht zM;mqe1JJ$QPC+LuA3y3mg*XgdoAaO411_EE-j8iDaKtHhjoYpB5%vhp&_f?$0K&#= zWjLq{j(v;+dd%m)bC$k4n>ULkUUr$cIDb|Kc5U2uIndFRGge)vYMZ4H4b>W!!s)2C zhgn~c26yizsJ(SmJ3o72K!!CL&3W<5hq;Now=ehEw=q8*QCJbg31G9v!(!fv!GueX z+T0{{kvr}&*K2SbkCJX?X$YtMRU-ES?MskGEjM?C;xpLre|Aa3xp#Y%7TXV5$?<{CR|_PGjpr$k_h?XU$8^#;y8!G&t&* za#CDScPzovb~8@#3MV97B7@#ZJives4t`g0eehw~y{ms8W$ClHn9&u_iUrgb6G6rQ za^%*HvKwPZ7&D+(-Cb}=Dv9D|M2%a(X@Q0^xp1u6#}#Pk`kr+KS?;GWXu%OWw$$Ac zLzpfMx8}XWG^L0{i;AFaI62aI`w;E2=VpeEou5y>4C?OWTI>5)Tzdc6cq*tMlS_8H zM(b_QKkz&O63nAFFzTjFv;I-A`*Cns?K04y0=Wve(+0scsThLl#hZ|mx(2NAaO!WSSm9vAS+ zpAPM!cG^gK0=S>n`>Ep0zXfx9tCqbGlj2o3TahK>*UCRA*EGxkaqgi+U||9|ZD>df z!gmK_?M@4z&r1;@J7(MenRKQ)E}j5S7m1V>RZVZeyeE< zVOv%&ce4Q0k@p4^4tArVMtVhRXP)?O(dFvmjl9~+)2F<-;MWwYf*{! zSF$7*P1#gyTR)F>Y8mZD85&Wg*2R#D7eL&A|F}|5)Aw@)e7C#hZtqrftRA^uG;5?t zavJ|heLWRO2iXJ0`j^8QYJc%*iBZq7U&T0p`%(E32Suz*0`sCbB=uX;u2|ppnYuY* z`aS}cKBjxf{}(5GlYgSzRNf6-78yb5UF!9xKh*-(Tjf!fHtujWxOWnvD%5XH@as1? z=()!l6Ym-)@v}=1UEQPnN=ib<=CA(?4z5gL030;BeRhH!A%n0O@Tw=QKlD@EsN_xk zXPmS!u!^?{{j=8;?AghdPhD`6GR>#F_&kw{Y%f)N5d4XPp`G2CKAB#J)MT3HPWaS& ztBt8M6@M!xqPiY&XzNM-t*KviWP*K;e$4kbVKqPw5Klg%g zYqKXNQyDO2-ZxHty6_oPRYVy&?KQ@=EXFzSIAssn7#wBVLZ?Nyf zJSnO(_$ST0Qu%k|e=yH+59U26DE{>szg|z6Ie%g+it2syjo}voRM6x*hJ&J!YV@76 zhh+<~d<;Fkublpac|`!`?LvhQ5H&9X4cUOpy}o3P#*ra1<+$XRqB1YPxw={{_rrAt zxa0+lhPxJ_aKk=ig%i0-)VA~mFE{#YMu!z3Mi!L0;OB%u`I3;a9)`y@ZhxX!|MOaB+j2f zo9X`}7UvZXfvSf{f>U8O^b}(*tl5pohQe2_a?1x_A#@yoJZn zpHJgX_j?m8huqR}VK~@?jN!!RBt%9$h}@SZC7mcw(=@*BHa-z1&D$R3)G4pL1#7Nc z-#QBv-fRgff;ExE7Z zgL_a1KlPYCTsfB#gaLixqGw%0=eHJ&@|~^op=6471oXBGZfCT6WdvjQi$VepK`YYO z;xop4*le%Dhb5#Oa>(C}>C~EsuP27Q5}CL-V)sw}KAFBYRcN(hvh^I`Rs%LEAfWI5 zNW$R15w_{h^zHS93ofb?gDNc2JdP*t|;2SN=v79L^KntEFTQpCS@eXX$eF-pQCA;MO6ZscQ^!8#{ zv4F88_Ak3x(5##^65sHyXUs02<%~G-b2KR8yUEbCwJbcxhXG(OWjM zs-86_)ni|{Ljo<+rKh%gV;x^fyTNX}q^kE;;|Xg9z_Mg%z>tOhZlx(#?A&>=FyA>v zuOaq0O7>BeXryf32+3lO!J2j*Xi=n4YG}-4xlGHUe*&BQ+Sa8Lpzd03G&F*p*+zCJ zWpPn;f%p7&nC^W-Kw7P+??B>*yq>eGls{*$N(*xLC{rZ*MzmSFXz5^Oz{J$H{;R%gA|l^7K>##= z+k(Ng8_QE^he%Ps<}l@$iXm}CgF`b4JC9?RphLEo*>D7F9$p-u@L+y5-4bPmY`-O0 z%e3EKWlRg-9f|iYeOepAzS2*)^=7?5uw^v5ckl}EiTRdDe53Tg&#nuNyWjCYkNs6j z{BXb8W2AK0tmk=a+4S(QTM$!08W;0c@-CKh9|f`zaY>b`IX7H3*QqFf%I* zzNdxDV*#N^cZp{%hRgYt1E=>L9sItZlAW^ai37K?2HeV62FDf@KeliZm1T!=yP6Hb@9VZa9e&Yr8(e^l8%45DGyRthD0Z= z!K#eC=fZ;+yuHYUOLAFNBnJ4PCLrZx5RP4XS#}E-x}pTX&&K`q;Ig}_WeF(7*jO^8 z9NpQjwgifv+H#pGAVH3z0o{*p-!p^^zHf?2t!Xof=r5i!;{tuIr@^?$zoae|>a3TOdMR8s}z;k;i~lgI{u z*-la3@Vh~uUg$9EyCE5;>3y%4+^b%BwOkwf*Y&#+(EZ;7ycFW@Ie;5Wc8(21j{pp{}G(Af6l-L~Ca3rL^IS+oN8@fxqiIO@gb zE0F70ilcm7iN5!(vGvNIssbfoAxG3w)g5qOw%I2bg@-=}6ThB8a2?JYIi2D2xRJ)n z2Ma7;_*n4jkehs~SQeaL3F>`YcU$h;OKkM+W^a(4CPw8v=pu`r7Zba4@wE!m7iMk9 zGU94Iy^*d+wE3;}{U`L2HiJM^5`;07B;#@=Ib#>g+IUmXuoso*;~-T^_Bf-k^*|;u zUmA-MDRN6wNF0&vVQo`FJxxSR4m(i2yPCS7$>D<<`KJ+G#d`#VaY6&<5d4jKAd>jm!&HBX#Gb$N%MzeMf&TR;T9b@+ z;o-%^oF5uf>B62}4^3^{(}JRdXlpVszRTur*J+hZwx4qg3RCaM%o$8njkHD?@}L;_ zMEN6#z7|PZp2jxuQ~5g@Yq~49z#t^p!q&Croddj=0-F-tH6SzBk7Z&E z$%Ej+e~AYV9s4XQXn3{YR}bJ4ff09~`>)B$W%`My#R8PJp- zQBU*OIFIo6lQE?pUafB3xn?TY)LwkE z2cdYsdjfCYuCcw3zh0I1>podE)Rh{QjRTQkl+jyxySP0#g)_toD~V)v&BZbB?k#iB zbKWsk{3s?4fmFpg)+u)(yZ*Erwd{j>S3aGWQJpIgs~W{LQ8xv|AbDw;X+DMh&oo~N zTPvfLtD|x-Y&hVfvC)|JMI!#dg`DR z%vr7l12{|ncFS*u6GFhT=4?AhK7NFO`PE?t&@(NR6Gs7(KAy{$0xTnm0$bki_C?>E z+~O!Pim4(86qFxa$ro&KN1t73Yiyl9YD6W6OSL_WyaZ|%b#m18BY;5a!I!#_{r4kc zu4KwRqm|E63A)Zr&hwrE3>Ky!u$5D*TE@mqjWpx3>C3-1uuB~BTDtB#V7s~vfHpoG zrU3Wq{13n&rs?XZ=~ZzfW>)Tn2aen)n9{Ux4V+avAd(^Ci0iWy7aSYq_?3WeN^$9k zjrwK@?Ar%=ICt$nB6V<~lsL^zmq&A)H-z5r)vO0ufIUg{9Djp4F=F#*^WrN()o&ov zpJP?tW_P!9^g}kKgF4P=C$#WZ1})16uIT!Ixk2MS*?JPl*6Iv_-7;J#=O-*^Lz$J8 zm$&xhynLFRH+~%>7DWZOb4ySeih8Bb7=8*$NPi&|f=~2zS?G zQmIlP7mE@AX6GH~wI`sVm09GJq;F4BJad87x#MkV7t{7)`Zc}AeU-GwZ*YH}v8zm9 z+)`0~MV-g&sOqOu5zA8;-62Td<|GS;Ci1ljep=#$`SAHXpItHyRhUeXSQHwkUqj(B z63$O7JKiLYtSo_NSO%n#jP!OUjofPE=}%wy7)&h9B+kqktEDf}U$^L1+Pb@Phxw~P z;xS}TrRpbI*Fvw2?u@Hk~A^61m9m>_6wN_5V0S~4oJSCGLy&`Wz7CHwz^^fwb z44*i>!i?9zl_&8s^d)fLtzP+`!`fEWD60^zYP8o}tIoDUv`#hmV$V2T_v44de;c{6 z@FU`jqR$|RB$uGjWeMR9&xlx~|F>C*4&4$DU2pKRbLzjyhi;2@o5a&7Hw^KiS6k%>DX+7-RcSqn3WgUHR@}9ghu^lkCDNTUN`0TN)GBDb zsPtd&+Q0Vuq}}o&Mu80h@>Cij4!B$a>%}r4IjMU0u0N5&ee+FBE{-n723^x<-!}pjLvtJTc z*=_40Aj2W)$P-e+$DaI1=C%0G^SeZ=bM(zoO&kuXr(<5@r4>XKj?-K`Fe#PCAGo=6 z13iy1-E2%E92|mjl;lLv14>(?`T%jerFA5ay$5Q-z@~!J|spGD^+!kJqWdiCb73ak8|@rSvt0~mfA zh(qik0;y0(g^b{19(3t8RwwPuE$x`F*`RWQhJYH1m9 zppo5$k+rG!4#eLtoNqNR6k}Q)jaz{U_90(MUUX$U_^UroNOikSJoU%{K~R)nn{>Fu z{|E}qlq%VJ58eE8;QjNr|4<`#;5>*i02LZUQ(JD~y1oIzt0+&)7lUqfZz%(m*chs2 z1Y)8MesT(skGw`^A{z*!=ugpUR6uQO2%x$s1AEIh*9NypOBo-WZZk@x56-GPZAs@f zvTJr+^>3hMboqwCg;j0CJ^nWPiXsxf4?#4ylR9YNL zjP@KZ?L>g+CL5zG)#uzogd?3Yq;Lbc)h;bTl_0Qv9k@$u;>iDq6Bve&TNZQU0$wVx zpDZVC^7e>70z+yv|LN)1B)HE82KTfiSPb2`=kJ+JW@J|TEpo*9LW@o1Nl;|fX?c)qU=|_Z=>MFiJ?5m*5**O^xYUyO zv%7dYY%VZGW)k^aap@v`=X(Ia%>w3!>J2+>?+pMT(uUH490zl*;)Bj0VgS+x@eWOZ zz*S7T?UJoRrB@5eY)Of&F9A2a@yBtEC30X@d9EMRB3+Z=sDJxOax4eGkbo*$3QJ$? zP;lye=g?g}kUmJHU+>kUwWNim9XRZh zJ#e;8+vUhZcsF23zb&WiHK}HcQK9_&c$)s>-m_qIB490|7Pi#I?fz&%OCnlxEY$1< z@*z7ZfxBptB0l=-CVW5uQsH7F~0{ zWV@GU+5Gd6rAlDGoiy$MrhQa#c{ zxBumJ=oM?6kD)O0riBASys2l)KVDvqo8L<7Cq2oA`x}^v0Y7q?pH9;OMeR7~JhY*v zT)yN7$ydvjlZ#IO8*&2Ko9}KrQL)=bo{t3a0?O}X(5{A9rc0j+{3lC)v7Ryo7#d*L zGI~k@ki47sQCg0bUajh2-^e$X7I3 z3`{j4C$sk)jNt#TgYoBrTanE28KD1^+fg?W*kw%R@&27_)Mu3uV;iBD-Mpbk-Gjc5NRb)1CD zF$z1l*Im?jQaKhJtxlWO5fm8uzh-s*VQ!6m17DM!s`Rib&b6maCMP+1KpJFtvmX%j z^Px{D;gvw8n8n$6(4j|*B^er&p%r7BMys+m0fVL3y|$#$Vpm-i8c2W-HcA4tUHvbc zNuidUg7m4@kUlc`@;|%c7Q_aHPK9t)E)R==vB6s7hleX9AQJ@p zrBwFp3Qd!Z`@a)D*<(+s1{)3UY9K)3!sV-KMRPF*R5H+&hIWai!{j~}QdIILUkY`v zCAF0wI&zLz4``CApjIBr0d7SGDd&OV#*Qa#9@siGXDU<182L80&evU_eJ}r*L)HZC zUa~lenwdhw-UQ~)2#Z62hC6ekZy6G${2PHqP4fvBbPx?HXA-!Dp~(~pXKj}4zU5{# z2s)Pj7jz86{fNTg?y)|KfOxU}${m4pbR%HG7XP)4hx(hBSqx$ol@Q_J*JtSl zDT?+Gd4!1Smh(24EbQTGlKkCuB(oat5Ck&)*Fv|c7ntvK$hp-##h&eP-7I7=O19=# z-PWd1&n(DG@gpp*{y2k3sDS=hx8%`uAyC+SM323&CN6)LcC)oUqIbkepJrHWo39;JW&YMX%Bm zkQ#L8*&98k^(miSy^&qN9b4leNG6`s6IpzWmL~>$YVg~W;WlD~a~W^JxexU9T!Tm2 zm_Ztrk`E%Sg1}guOaM*F`fh-p+y}q~?Rm!hY$1r2n{}kU!(O@qO@1DZ0hxJq4*d1SE-mFNGd6 zu^gjgDn8ff5Hy$(!AkI9uKjJPPScLS|Gd!qr)nXO_M`+*+v*92#;WeEWc{JDS7xdl zIqlxJnEO`~IAB0pF8`S_ec=qKI>n48KXl{j1RTMeG{2%QimEkC+P-XkSM`r<4p3Z7 zcpS%DJ&iZYujYpoeu}fL?=;_-xQt34;AN$=B_)j|8uDn-e#?(ZW z4idyOoC3Y-ytMOOZefQit8yb(!)5(Fw6QlI3VaItwsqya_Lnif$4&IXpaqz>ICx1* zHV_QzkcdLDls_EG5UU&TChu|6k_kWzk{wu0K8c3zYz#p`|8-YQJ*|yJbkCGm>3>g?grdh zbj=iyxzBtPCmy1~R6XWH@!aVZZ=&Dv`hvD)$(s}TKNOxk4z&Ar8`-bB9T#FLMa-0Q5aNcNQnvS|b_ikvY(SGaGQbg9In7K{uTGk|*W%nt2c6PL&d8%>U zyFZP(AaKq0rT9pRgKRw9xVvd_%# z`wX4ad4Hex@AscG=Ny@No@eg+y07cIwH3vzx^bDn^@rs;=jtBOHb}_27cFT!lC=Qr zoW!u~l8KHgip?XA=V?dz{ZAj~RL}u>@QahcO-}dLLDKzZH|DGU{kB{oc#4)dD5pOR zPC}NWokz}n*i^D{(_wK_kGD^3^4_l(2&IzW5;aV{J8TauBmC|@JOobS+cYQfPB6UT4KSe2XLD@UR)pR3uE&wJ z|6bP=9kIHi?(V#In=Nef71YNM(X9DsF~EQzKKva6lDINsE0t`i`~L{6@toXaz@5D( zQ`^_d=XHU4>D{8RlHwi?Z?= z*JKI|FUN+zZ1l|16U+DbDEpF0BjkzImzS%m>mZ&e;^vI?EcuPJ7%9w4moYD0BIhO2 zwK)#gW_<+bmST^W0b|xeqL_(N9^WW%JKDijKm5%ODi@!3HV0ZLCake%ncn9eqGps& zaHgPNYw2%ZI<2>=XU`aK7E|cae(7^btEKe#p1Z$f`NOQ5B@yQqJnJ&N%(;?ti!NAoZu^7Rmk1e@jK8gV z+ZNTIvn*M593A}jB9`(5)5sM9e7U9mLtLK`phot9o(PT{mV19oGVJtPSxqykP?tT2+l__?FM1?f%ESr~QXwlj$W z8T~?mHqjsGT#N7miN5R=HBWW{|#z0j4R9Pa7Tp(zUqH@3V|Q zi3VXxTJimD;*}s@i+11K&hU34MQh~yf(MNdl(Aj~B6qv*W#X&B#ltdv6ik3;OTemna}sMO=VY7c5$$pc>+9VfkqJiqT~{t@N7xd9uL~aYU&w|sryju1uBkH~M!(E20<78Ndw0>Y zu1M?d#@UpHk|?w|S&{N1mhRIoQp(CvY9>r?;(+~OR7_n)g$*&wEsMebi;Hcu3OH#S z(KInjly}?Jeq+z)qC$~;h7fm4#IG8;0OYo}OT;gYJ~v#3co%-O%0Fl&2fk8B-M&rn zhD&3;v)USn!IrsYY!=(HHSQ4nc;G+r?4?Q+sB;~0F7DouC`@h0H{H64yHzE1_V0{F z1f|yS7ojnneAdtU>OYi*)wA}LqS2h9S9}09G==4f94V-ELgF-%9r^vOoH9LYfq!qG z5{)_HnD1Y9t-5*Hgo@+ZO-l~IrDyI`<#M65pR&G7+lw;r$;7)Pa!&YVlG`BpSS`L; zH(qPnoNW0QDMIDTITcvl{8ibHEg`B3Xz#IER3#8=D5XtN&u#YZPMA#QqwYUUkmjFIh^KSW@1Y4$c&^GA+isq0&QQ+n6lFHyVkb^Xw<}X?h^-JXZRdB*!cp@U0 zVKJ<)7Ko>Ny9HwL&)nDFJYmXD!KZA$Y}8m5Tg06DTrT@huLinV=KF&XXHmpi-Kj^p zs89YPIre?T@#K+2QaLn>O~-Obs~CdA<#Cxkl`eDdtI6t6^5^Bv-Rp|G50a}gx?G4T z2(e#oi}0BD+!*XhsWE_}TkM&D1d6hFy6>+kC|sxK;h0dtS06t|Xyhgg&a)8waOne` z`H5D2m3xc#z$^!UKgG2pmj?hZqyt_M*AgEv5UCsHAf~0p8$bWBStPavwpnO~wvX_P z8_<8$72PSP5V(mM8k|%$J2kRvtLkzXyms8+XA)QpEop$=0X!0#(nvo$JE?41<&%REF~d5Xp>px$;HDM=btLb+E8 znQUAC_K?r{{WTgG>&No6pPec&Z~7)_2o zQ;u<`RAw1{B>hTh&r-5oS6!!hn1o779uwkFWjEwKE zABR6Z$f`YHYu_Oo&+Ku)S2Lm7I$!-Pr^gmYVKa2_^m?khL;}*=D3{#33x?y1 zZOiGCLzD}n`Z=MBT%CAi6PJe^~1~(C}sF&=!jp0qt803M(!VAXzG|w4%%ISr|NsRxYDXnAQ zW+=IEtv;S!Vj+1|OZDDfYnM#PgjF`Tttqt%68M+shP}6+lj6S7Yoq!*p9&F1bx`1R zLkh1RMH+5NM%zs7I*kJMnw^mntiyc9%TWIjar0~hL0d=~8`di&c1+xGkjOv%EEh5z zfej1qG&?eEAg3Jc4raQ?j`E_U$IR0sXmupW0$KZlT9UcZj%hveMnLJE$S)CSV?V{W z!z7-0Z4#HlM;N`D64g|H=B8OI-#Ayi4qa?{HZ{g(;RWXtZJb7D{2W-oom*sR&@B@!55vDw=bn$G6(4x+AzK{B!=789NKXtFd*C_ZZ%xac%XVdZ16xJdTe@U49cINMw~i4?=wk?zODh z?W;f6a`Vp39>ZU1hkkz`S)ziG5E{>;~Ay z&O*-UV&KxYBdj=5>7Nbt^cfPpGkM^Tuj5LJ7H{Pj(Z&REQy{MITIatJNb}LaEBgE( zbek4^zF4c*uve=Bqq2*;osfgzYV0So)sc3?Jtc>8!RW*`al~)nt1nvG(tqdAM`R~K zBm0;K%Ks56W>{->o_^e8jobn$^};rKc8^Hywhy792lVtdw!>`@#Fwhb+0-{*CBbjm zOcZy?=ryjCu(7RR$%(9I)_E}phfG$Sks)FhLx^}0DGIF%YSd$$8`hZXv^Tu! z&nV=v+?N{MViLW~C4K{CDBa(ybH_l`aJ*#;w$6#UN6 z7){;jQVj9CB@z=v&B1rFf#v!?HU5W&P;(Fmz_lE7S02m!g8I6sFb&d5+-(+TQpJP5 z^d^oeu{9b+q{DarqYj%KWYiEKG;71K1G+X?S|mnWvtyUOY_9)P9kM|cZJFo` zplRZVDk3RWLRe`BumZy93D+gl&xz)B1*6_|K6<^`;OB{&$-3qm>%5#F{*K-w8jV9r zXvQCWOF*%6XeMg5y~M8-HeAq9eophUVo~pRsYw-PjnAd|UjF9(w^`QVQvtQ}SxI?x zT+zM{@F zW)$o$JpkrITJgN<7ewR~+^U2u3+#S%BL||vJ2|zHzMY{z{&a0O(fq39IWD_pvZE)V zi(i}2+;b94{t?SW=NzAgtl3ML{v|TRXKvFaAbQ7wG30QTGMHH9=EM5OBd|5CQ!mfZ zi{RYBwkl4m_cUXX@|XpU*)xQ(ITkRnHy@YbHsat74q^0<%KOEw=0M*kpp)-wAx9tS zS^ZyW-a#$K{_cb>Nj$55@DTPAwzl8_q0M7Mto4UA4!gg}b55vmh1a>BV#3T3^_ZFT zSQBWb>dYDwKEV{l6gMwMc5%R$Ub&xvvVTS2Jq$Pg+r2PHlkH^52Oht!-R0K_Id6Ge zqQ>ZbZ(i`Z;DAMg?=!OeUt_F~zirh#E=}bk?{q#3M>-Nb37S~SI-Za&?jeK%{f3v8 z7^uQ=4E?O*mN_loJFqzo=z^^J67p+!hrS_roRd%=I^WN;E4h8Xav}fI?Bacw_)y!6 z9=x4vv!I}jzPnqN9Q0UNgqt;%ptdU|I=zwk9CpQB|7VGT5FEX*HGh^io-{O`z?URB z3y)<47E}Zm-r(5~gCchbMb7QIga6pVDV!7BpvANH7l0)eYm@I9d004VHd`0x6z+mT z1xfwQp5+k1Wdih+K0F?Iavb981(wolf7Wb#epUR!WlRjJ>QOP0&yD-d$;K|DP&j7o zhci{FhOx3p?6MLxnK&oHFc6;nfD4+bP2{KpUzAP|x0M#k>Ycx2*~G(=5i=VuBkP|1 zpX*a!?meh}eH6rMbvDJ4hSv2QZQsWBVmpGcg4pBDlc#p5=P&B;ivRSVw`J0hjaznd zV)ivXi70~zZfU};K*nRkX6^h@VSJ>T7${dWWh%;Tpn-nvy0!lZQ4Yb_M$>`urN>gx^sX zUMRpSXHRTAXg7e@X%m>(X#N-r&MnJaTBGlEJkc2B{iVmXPtv_=F{p>Prjk?K*T9L$ zG?qu5tO+wp0H3gNE~(G(OijkC6j%QW;zgjV4wQ>M~XggHGU{+%MQAXEB zE4R;<+fUMZ>qa?sU(3V=KK#TwJliQ^BgeZWy5-9o1P72*)VGmpN4hTl^uXfQg{v@Y zb+<|ISaL_ZJiLo`L&{9;>hMjJH`Bs5c|3v-C&Onk>w*}fomgy90{6vR9M5NwWI0Tozan>N`GOiEQRYaS(3Mx&?uny3Wi=@q zViwKH_Q_?8K)h%eW-@8lB-=Sxo`}+a63Qv4$bI)+0vr-|znrP3!A9XkQV=>nBI=nT z=-)bDE$iY|h~@hEnR}?@9|c#T%Yh4gsRylGCU^B%f1Vo@%Y?Lf+oU{}a+C{n#`Y4$ zPlp||Vd1kq{J6nPEv9bHUgrYR(buBI`0yg(ScKA?$~XuoZ?5E>^J>w`{r9&IB_5036S9tsiRZdm=v2lcWL2=8~gTjA**M zkJ`Pk0QY;NkfzO!wzwFAzu z+qObpb@Cys3d7YimQKjCf!+r4eXoep{xed|)|IouH~6yd^fywYjpa?_##^3LkVhuC zdG=;kDQfPqWFTN)t#(5JO4hJDNEuM@T_!C!p>IIHKBOO294XLgy%p%2H8p<;Rf?^P z0@~HFLuxbdXr&mbmC?(N_}V%@9;u;!lU+9v@dsB~BrAwiK#5~q;3oarDhq0ghZT!y z9#;LfN1L){7p9HR9Y`5XJbn_g0}DY#h6b)oWR%a3R%3m0#>rX}zO~8j41MrcQqy3S zdSgGm0V^dvLX1c{qP7ad(-VK$D526dW?nJ@v0p+j@u5GX?|u9xFXV$SD;ct|??WaM z6(TB0`z?U11QvT(*fv1%R|h-%E;XN85{8;?jrA#M-Cd|-NrGX7=(BuVi^RL0@Om_` zz41^i*@=ZtalU6G^0Y5v^vmp(EiR)Znc`!7a)d&nM~NXa`HnQ><^UEQe_Lm8Ak<6yYt# z0$-K5F<1deTK7i4MgsWJLEuLlygu5H;8Fe$@o?*NeYhl0-Bf5`*^CZ4ehmK(JS`Sj}%F3Bzt9x9IoRjKLX5F?P&0le3 zBoB{NOAnbMzJL5k5ObN-wL@2}xsj}2`(^>(R41fMqB*J6>nuTBfzQy0U=L4ys9|yM zade7<41PNR1D);@Tw85x88Gwhe*XLXDl;)Y)wd$sCw|YFv;u+4Q#v7W3PVJJDOQVG zEE=wXj^&7X&0q%cyA``)ZLQZ+y}pw21eqiK8a%N~H#pUjP5~3CU6v1DRts&y`JVli z0FPQfyq_pjVXzMw}0 z)nk}np3qfO%v^mTm!Wh`v=O?~Wr*NJOA&tp{OLool=U?TolawQ|Ljb`br;w3)&60x zzjO2W*hVkxxqmQ#Y#-19@eEMYxCvZ0{4ke8HP7OrR^*)1`*B-!KpITKQ&v-O+COr3T4d%>(`k3oCDpjP=cA4e!H1wT|7$4 zvBdktu??(^f42}Lh{Iz4wEPDA*FmF6`6MaywzUFNOy~D802l&`+&(-Zg`t5r#&y{C zsy%&}n7-a6+da#V?7c|hleNq(dYnl=a&RHenrheB7*S@-l%gh|t*GgJ9!aTPkI|}o zQ5ZQe$tFmqbJc7HL=^ciL}Z5SD7Nh_M zEh}tLzfMljHAD0MotwcJUO>yJP? zLnB)XphLYQ32Vm&%T01j$S;c*4z1dTSHk{z;-edyY6>=?tI%D)^3x6;tox!&m?(9z z={=AGSQd_1E{Sn5LS$Z2Pw0Q}p$8;B^xaWI<{x+{pv>uo3?2aBAzA{IU7V*4{BKqH zYue1@`;e#qQc1F4sVOPKe8?7Imblg@jMm6v`Nyc^i&Ioutt7WXD$(b*=fm%>#`Jy$ zC}raHCjNVNM*>4+5w;?|8Vbfn(*b46sQT_pPPkrw0v&RCBj9TR26qhFlljRnnMn=MIO*;zL#^U| zW_-^vf+J})$2tXVjvapi5(9`^ZDvz?uI_rf#fgVUe~C%93(>JuV>s7y%EjChgNA@r2GdwucW@aG>|c%g-q(sz?m zdOb0+!sYz*$EH44i!FAItSd%yuzYq#K?!02qiYxURioVA`Af;6$$ghisd8#?oXHhH zL(goh=nz0e#PMPN2$2Asu~6$bWQfe5L~kYeD_HU(1Kv1&O?m9cnCx{JB9e)`R-wtn zKd-jl`1pRs9!X`f-OjnpYK$t{((A__e2t*-V5UhiemCtmb$zq`pk_-fnizY$?54kV znfyfgLJmv|pW#h+kTvrMxN)HXO*L-Ks((Nsf734gj(O!)!OZN`Z9p1HuJF30TDIkp}i{R>scq?0^*g6_|fE%l9g&e8p`;TnmmE)aV+}V2z z@(>0i{#gP-sa18Bq03TSivesDA;bT>YP{7YK;? zD2v_l;55$DIoaosZw~T5x$lW@)tyn^vo3^qthk(^`+JsYrgmX5pcmj^C~Q@$$Zczc zKik3YPkK0~^O#=;{DuL&r~zOZazKK--vg+c-A;#&%VkOh?cWgWPU38h4I_W?rS7qC zV&3%0JvAG#w&-LWjp))S3)``ItNxmjGVoFxfct3w)jaO2R?>K^7hX)C$)YoH@hl5% z-`1hf1JdLt(4tX891+Z(0^Qfp`OA9}LrZ+`Y#!b3{Yx_pc$r-Oe*=ovOh%0*nq)Y* z{G3dlImAh8aed=UOS-QuAupH))Wc7_gf)Fg|@ZRu7*$Yo|BiXg< znp?XtY~ET9IssXH0T>&}HYg8OIyk+$O4F68hc?=ReI;cF`Q7xIY13p7c<6d2Sur<} zkLD37rp03d38sS^w`>Z8(4fOxRY2l~8z>hwLlK?ZB!`f|ILPh?Vz|g(iT03?D>ELj z8qX<)3lf0PwaV%ctcD6TO*X?|0Ci`X(SQJQ%0Xw(=EKF}c#6+k@uZ-ZyNttN&6q@8&inGmUt0I>k{=Shw?DBW3P}pQF z=r?NJT+DAH={c#cD5tCl(rNh^Z}N#;lY(cU22pZ19PdtS?XjYjgs|d3JfW&3LT}8q z#)zJjT?8OEhl43y~IFDcX|;@l0NlF;$8& zL0zl5McO#}BV{=EYvu>JKLRuNs)I0vSF{S0pzx5f;!h(NP5Z~=Y+oFn zYt(-UQpb?E&rHWn^v3=K8VBlk&Z;DtV-hoJYA8<;BvXcVgv-_Ga{{ApxG3SevNUFB zxy~*V-9fVQt=3jtpzfULoyhm$tmrzy*3o)nCeRN{D(*$qFD#I%P#EDtTz(g<;%we9@4!zivIG@7LnLfbt#5M8uQ zM(j>S;oSRpCVsTzqNl3S($9dVqc*_cFlTlQ=VsPC>8}b`*Z!nrO?<9Opxq~T?8mdt z?T)L7g`Ei%E~A1I;;O4~^OB}ZXA&t9f;>FhL~X+-S#s;CE_B8Z%qkV-`kZtR_;lh8 zHUJaIX;NlAQri8Hg~h%@8+Omcgz7V#By~FZB=y*RgKkV>e@OQ8ai65RMa(e)YUn~@1On8 zFC1~PcRb+vzyHEQk{w!5*3fu4c1kWV+f$uhdfm0Yr%@PJy8NU6F}hlE z<1AX3WTJu?$Npcik#7CO?ayV<8`12wv7ZdiDu4XrX_S{y+>=n~7d z9~&9D#2F*oV`RtK8X)8&x@yY(YO;P#O8VrmY|d)|7MBrpa!TRjvt9!rl6&=SCy~c3 z>tM*u-OKjWv%~5yU#iI0Y%ba~ElhEMq>t?o9nPi0c8kOI`nQYO7}ztojdXae;|Ot| z1tkl6Pk(J$XNb`OjhfPtmHxj!*zoW_BOrg>FvxHSkxfFQcjl=iZnZTFXn>+==EinV z-Xmp!-T3sQo#EA%F3G*MX?@bc)XC9Pf^|eg(0!7i!0u2D-+-rICwD+)jlOq8W>J%$ z65NtyPbiD!d?=FWge094u-`xKuC;0f^}W7-ve>-f>=u~k6i473knYXnU3-;)Cy~2T z`>(D&oL!DUa+l&*b$&iEhGb8whwg9eRO2U)=hDrKUVWJeJ6UyMyUN5m$+@3_;7kn7 zK1rGAplVFG%?QnlKP64ZhenV>WFY*0+aDLT@()k0GD2Ab?Ibx8&jJJIZof1m&-#O(8`oI|;xMi!W}KQU8AH(cwfP zRHmA|G89iRdkq&0_Tqn*yZMOg^86f+<cKq5n=7GaAFUPW z`sFW=)ylcF%KE)5yNckwDX*?}pJ`i;dc|{a-aH6&CMeiqs{gkTq3;Rg=VwpRyBUeB zOx7g{vDpp{f0{;_O{DjKtl+kb9iB~c9<}fp>oa;d(-W^XBkD6rsb$5|WqzxHf)Tx4 z&1dhImzRCX0mom>G<}b#e3~c6UvITjsnoU`Ef-{pTk)BLMbhh*pV!<|%q6RKrGS+*c+Wa(S7OJOxr*xa(0equIvspi8v&!kNpn`_~vb26^#YO5^#-KG{gQ6`M( zyXD%si{qrqc=Xg;h2q9M{9D)^HN%dk71S6XLOho3cpaI*6=Q3RWFmjKmQFTf30tuK zf`%LT#6Z}^i)(_RF{2ta@Ctq+7iFmb_op8jj->Qhkq4ZtGan`!LP8(6Wqh6dToGLJ zo#e}RVdI);2R$J7lJ}l{vbsv`n4udjL*>M?{OsI<7~A;o%n-y(BQF9pLJr$B`q->D z60Dto1*#4yMZ@6a| zM$Y@!805V@5#0EsAZxE(7AJDeigN~H6zk*T^We+o(0oD1@(0kSc~SlkIjhH!71i53gD5%O-UWfM5*~QQi)N%Oo_FK!S z^ROYHVo@tP1;yUGb@|29N_)z{u9s6nKU`Xw#3K_TY;~zG2&`zqd&lp~TS7hG*b998 z!bVjQPS+T_EhC!rMg8!sP7xm_Hk-QE*1D*p;)~S1$uZVZ*X~MBq)#qFX@}joCkQFZ zXXkN&Kc_GadVJ)+d)mIsI1`WwHb(N>^tK#gL4qZ|;|ngT#x@{eUXJ7B?;5M1k2PKs zxka3**9)$T4c0{8H^KD1QB0054?U-)ja=(P-9&wLCJL`L<||44#F)U81wQ(}Z`Y?& zh=mCtQ>7jbL8{ZzK1P)1Ca{?49l}Jw8iBrDN6ZUW)tVr?#qTs*xtbT zr+W=Th&)8bfXeGr!~bGOG+of8gULS}rfv>jWIPMJ;(cAVyRg+$|W>A70c`{iX z3&YgP&k1xnrfXu84pv-yp-Wgn{)v`P%2rn`%Bu=KMQ_rn`zwg6Y!5t3nIcGs7$mSV z@dq9xHTkzpT5{&fU;3d-K0r%2uszSfV;5ISKZFIAOD`@y#yWXDe{N6!N|@=<-?1Sk z1~_KEsi4LExBl`fQ2~w$MV@(K0eA1BIx>sN$dl_j?Rz|l@0J=QQ0-!~MQv&^EV~7r z!YYIho@&wxLbF=Ia`Akf332zjMqaV%6p-_0y7g@xX0^B#wb`2zvnwQg(Lzrv72mol zji_aHGo0MSWe!>(xc%=)q#hWoXlF-6H5pL`Z7x+#$Z-#uU`+7c`W?6U zoxg4->_Es21+*D?AJ!@Nj5tA?Gx2r_Pc)(w1;9?z1xJ*QM$8o+_V9Thqm>+sn9=#;-db_4ymFYe{`7$b{Y-W%KRR;za>e=+-D4qGS zRf@HvzI852D}`X=g6ELBcSQDG?|vKyI#@(cto;5yEoK-*M!tEPr<7;DkMoOw4o629 zFeAci>yyiby-nV?wsZbS#Y^b4W#PBP?^uNgE*QTxRKZU)vo$ioi{5{tlgp{SW%0qr z70#Z23&GdmYR6rT{;lOIYC<3PB6G0KjY}0lGNGD+yN+A}M!~Z+X0W*njdsCwo^w90 ze6F@vY1(@Z>B+R_rA*{j4bm*Bj8htRU&UO6;p4YNN)l}e_jCwsm!H7lSdt=Gj%O(n zo;ac94z}kW%h~6F2c!8XHRUQeyH}U|bVAKOp_+ADO5PkH?$E4P**m9VIn|FSjis#H zjCZfWrv!g7hlqQ5xZX@=gxMIHU0?yi@61_j-j=;5_uf58HMDq%i)cj%LB6UQw*Bco zn4*;MC@nDR0fZO${V{q`Tel}Ojw=aX#M*xw!RN(PJmITN@CAqD*?KGr5zjf=Ai?~i zR4lE2I`L8Wq?V+JV4>~NhrJ%Vp{*Xt+qw%C-%Vf9yj+TSPH+h8*8{Iefp6-_? zu5p8;GfK3Rx)Hx>pV0aD?b2N2kWJ=eK|^nX-<4NYI}Nd@mj+J%^0$#Qf~GH@3m{d_9(?C z6OSF?p&cwqYbSP=$`_KJYw&yz4t~*3l=}OLu!Z2Cghc62E?9=B%n|cdWib_MK1hCK zsCd;w3@jz@xwM%%`+U~6IlFyIBsirXFu&;TV46nEmbn-h_kd!bg=Lq^Es2QSTL6tx zN@ ROru=^AazZ3N)e9H{|11FNXq~K literal 0 HcmV?d00001 diff --git a/app/src/main/assets/web/img/icons/apple-touch-icon-152x152.png b/app/src/main/assets/web/img/icons/apple-touch-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..f24d454a2ecb8851bb893192b64ee09386d30e24 GIT binary patch literal 4046 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 cK^5JQ0?3d{m_4Kdj*!1;003@kYpI!lw*K!+ zMhKRlYSNuSL+q-ouM7aSXo?F560pwcq-CNH03o~pfQkixGY~?p13-Wn0BqO;fNVAZ zF!|)S7|Vk{NF8-G)qv~2Pf`233=o0%YwN2+eiA?-6k^qmdZhqBv!<=4j0pO+T`(63 zoo?u#em%?m-0Mw>^S_yuw5QQE2PFT#_0?4&G>AGq_;Xmb8?HdT=6%0r?J_^XX*`T2 z!(G zlc3{fa#U@Ti%?||!xO+_IsQy`#8YOJQBY9uWJl5Zp)E=LG&8|S8=ZZigj3oLoTrUr z>+aQV3I&HkQ`|IzORvNB{=oQQVBZC~xoD{TK;*^hbWhxa@3|egGQ+DYyX#9uUEM)= zFLRg5cRwDkxck*`N|Z|5iejjSr;W1}tUs5udSpI$@8X8bJV6&^(5>-e%oKN<@7>$b zZ&nRPKywAFe2!gqes0IL4^^#R8F$OF6{%2zCyhmelRnY2nokO=>xreBChbjT5Wv1m zPQ~PVOi;gd`_&g}SJ9sq0WqMlX}>b8$5W=^*%xS4!c;vaUT$nBmTudc4Wayb=I3BK zw=EU{#N-6&HLCN9`AghGB@GTwsf3r@ zzZ`eg9C5T34P$z*btRD8ls`g=kbMa=a)F&4Cs)7x)^ms{dxEYHn_KM`RXtks_xIZg z{GENY*@u^xD$H>W>ITjU8QbBtLP$A4$w8jUMPSwP^01j=+WUK7)#?!|*08V@Wu8x< zhY1p)B)?)U6U}5ZXk-fXOvmr}?Z!T!{~>@hrA%WrYnD#5Tz=F4JHvD$B}LbgL_|bH z-#}k6L>_Ia-7L*7Q?ZVI4p{IVaw(oL1_tk^*f(cKd@LqvmIgQpcBgJ_SnuFhJ}^DF zqW@4&!4VmE(0-L9 z%+5$Bg!X*1F3+wgmCm5Bb#Hc9bhN@5_3H2-JiEpiO6nsuUwCsW%S7w_mrp(Kt*x49 zo1IC;3M-epyT)Q&Z}sh7`Rsg%3^&!`vb)^OTf8I)*y+i6Ng>H`b=V;MJqV5wtW7iN zr9C3;KU7A?w#PZ3@{a}|DmvDL|K5%{F(|OH5k@*Y1_W$_>)QF}Sosci49C4M9xk>a zd=wQcMlNf#n2DC*#!_qTR7loEULMx5_S&5Pa+Mhwx?-pjAU5pRKiFR-I`S;bis7U( zGw(Z6*5BunN&gWpf9>ypbYGpN{<3X*x|Oh&VJi9Ckcmbx=0UZ@82w_?gYp5LU+O=H z3T3(Vy``RUW9hUs4zg;juYZ>rZrL8K=@wddAla(uh$TPiFFe`WNtG(5kK?9Fs$I&t zbc>{HE+&2o3=RtN8H~uEUXAUD2JcrA=d`)u z2^kZ0*p9Z=Jnx0GgPnifSarTJM_+PhjA%_1_p##$#e0kIcKEiVB5X)traE!E{ zf6l>R*cRwP&e)CcA(hNeuwR>1!(c!!IbkK+(J%d0@nXEjqN+5Td;Oi(SEn0mbCGLH z9}2JcMYF~tkP0s9s;LiWAD4Fsb9jFihCYO`C!sgv${}(R-jX`xXjet~!u;Hbmc5}3 z3PYyX;O=G;-<>C2pnZuyotQ4?6RTz#&APphC7kPiKhETZ?MmgY>`CQrLvHuY{^odi zxeJyy&F0I=vy8VmCymt!*bP>`b>BU7-0%GiM9hAzfo!XP-c2PC!Ua>WN(MUz9AP^Z z{dTWjT=+)Oo(peZ9hF=~UKM1)P89z8k%8*?AqR?0A=ci<_WN3H!T`rxCQeftD zE-Oul^SM)KJXAft(aX;HFze)xu7$|ucJ7})%+x#%7)Z@-$1{;!FiMs z%=)F~(d`&Kwg+|`=ty;5C@S(gJ2zOObMJA)Pu$m`-@WSfCCqyU%i5XR){`0mgfah6 zjJ9m0G)`=hc~fg2WmAw&Kj@T}4E1$6#y5QNE@p5?A$C``vj-*f(kurf$g6I!0U9RZ zOr5R4p;uNzDl(ZYStAN4GguVJ!>n zp zU^J({4P_nPz-PYFhDl^-9EA~`3Dgh>mGIB=v_91sW!ZnR_=jvlJqoTx=)KulH+` zU(e&b`#qN5k*o6V2l(yRUGQ`T1HRf945k^Cc2nAV9!qET#0tsoRs#hI{^cDFD7InJ zj}GYHON%x4#87|U>v_Zl4H|_%&0$4&`35;V%gfz5K20B#R?7c~PZli**_JQM zA!?Ll1A5EWAcx}>$xX2UEc6{_;#Q~wP zWA-QlWCnUyc&UC0=$ICjG0vWmUkc%heLd$m4G%8uy9)aKh3@fjll{ZD4Wu7Ak@yw; zh|DK*hUpBh)9|}gXk7oH$}ccl;>RBxN)Ve1W|YgoHS8Vh;(8MH>)oGgT05fW2z40P zwO1aEVOc!zAK`kT)=A8?*e-x^xh-MY?V4L+Nx^{;SJ>eabEL+5&k7!yYN2v7!$Xy| zEAJAS>w%pD?pGbST%^}9FQggO)?I(=5B3GRL|?MC)4Ltt*z(QG=DnAE-_KjLabsP$TFl*jZ%Nq48HrN2I}lA6l~0CDNQs$*eJ|jAma;q+!}w(&Rpx0=lq( zh0$zVBXEI{Q)qj%q|(SKKc1FBn|*>Jz!nM369!#?y+@9VN^GCwqq|=%i2cTZZm2&z zWm!1fJtOQ%1Mb0vd6q_Rk}5_48p5UKfEJt;S6YrDySowlAhA=~MuLHl3Rr)!Q6ob` zEUs1L@1`E|T<-+Iq@6vxdDCWoMWS}Lgs#`&?JQqiKf@8^UU-%iZ{t#qy!y!L_9 zK#A8VP)L;yei!>KQaZbaCmL~_TI-Y(rB_7N{+M0>0glhyshUk;-`zK6U>s7%Sf60( zEp0w^c%&|10dqh{s_=_pG5U&9_7_B2+V$H#l|cyv4_PDCkQb^>THQ-~rS$YfDRs+Hq6W z?@80gKV*s@UEk?q!xw!E7gI9$U{yM6XXuRXd|oo}`bIcSBM&*E#OF5i~xQYeH`FsmnLuBL^I_UhyuH#I?0pJ$NHx#@Y( z`+B`<(uN_7GhK4SC)lxGjy-6?(v-Ba9(_E}a_S-ZT;&mFLO}hDv|=X2(VCa4$nRMY z&m9i417mV1D@HKk)=5�MrHbYR_buu=L>f*wO=Er8~{qfkYT+HoHag8)VqJoC-#@ zNT})4xRE%sP-B9?xmL5!2Y8VLa?yj@Y@r1C)6o~9GF9nWG!SI2VJ$>ejtUE%Qv&r_ zYLgZ0h3iIrw7{TyurC(g^$XT%PP5`FB3aFpP&fM-8!J#3I_ujG?;7(Xv5ni%BjYP4 z^+oydy=)_&bdxYJx`X%G5PFkUB%3h6RiOs^F?#ojsB%DbfhqzGhuv4)S1%vw@PDyE z3xWF{Y^0>+=Wg! z{>z@$rD6ej*V- z^$zKIOWOfdN4~7@ndhru01+3cxwD&_Muyja({*O;-5VnF(e$WDALNStE{1{F#ts+VR{o zSlQ*@U=Du8fgKW$lU~)O)b6FS?H1SSnKVIC=DOvbo8IUvM zVf+U4YxG%qLGd%ew7Jp8>@U`ew+A#Q=2oJHNH@_f!WadS20$KZEZ+BHAvU@FB zzRCYN5r+Z#g`C^hrH$yW7ABstwjvMM*CHGzY41bbo2zy$6E8DAOPn zUnHG?e7?u7pQ}Kqbu1jEd+=mcGea4aL6V4g(m*b7x}z|ijsjb3e|tf-3&^JK{=sWz z8sqIu9jy)#J}n}cXqtXmkb-NDVPcAKn=G9uX42zYvufu_OCr>xJ=oTNp8WA5wEqvM z{r~m8;7_C>U68iRr@|rd7UYhON#(-S_+Uf>s)hhPU{{exlxc&eD literal 0 HcmV?d00001 diff --git a/app/src/main/assets/web/img/icons/apple-touch-icon-60x60.png b/app/src/main/assets/web/img/icons/apple-touch-icon-60x60.png new file mode 100644 index 0000000000000000000000000000000000000000..cf10a5602e653bb126332934e2b7f34081c19a01 GIT binary patch literal 1491 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

aZW9cb|x>1jZDoAu$NpeWiVk@{x{! zmmBmDgx|qNN?LyIrl9$qmj{KjZ8zpa=4edK3FuFS$KFl}bWPoO*Ax#Z1c2#3JAN(O zYhi>`%H9fSnLkAq|5vs>+?U*bdfMc6TmDu+QqnN9xgfZsG25($^;v7U1nBl9Q^o*i z)&?UaYZ=~7XZa75xPKB1s~MB1m<*dN08pqiy*q!)_Kc|;EZs3&nNdMQ5#LFu+J z?*($vO)$hkMOVc16f-ep;K@_~&Y6t?0t9I0(lBkZBfic|u)3pK$Xv=A@jUQnB2sC` zbI)L9m;VNkWOao}2c3b4_u4+bg zuf-@d1$?asdD1~mORQ02#!&1Xm#41*xz}wETNqKb;kueQ*~OpcAXTpJFYUYcKoA&Z z8Ke=2Vh~cu_uTb&6AH75L!k8zo~&wRsDLs^3YkD2!~;%u6sFrzV2A5(FQ|3}+0-K- zWX)W2yq%?^)iKhyMGPB5*DnWBaLqAHLJ47;r5nvkeq3u_?J{Xaf_}6I+xpLwKS7NC z|KYU%zup)8i85jc)^Yt*I0W8;+zHUI3V7@o;3DUYasdq>DFK%im4J)F?;|B-<=}8R z>HESGa5)KyCnGII|E+YX&h4Y+xCRvyX@oGhhG4 j58+{W$RJv~NLLKlV4)8v^7hU(R-4l(}$teLl` literal 0 HcmV?d00001 diff --git a/app/src/main/assets/web/img/icons/favicon-16x16.png b/app/src/main/assets/web/img/icons/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..42af00963d81b8e39a30435c60ac482d1f8756e0 GIT binary patch literal 799 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>WRE8{w#)hawXn|-Xp4{E;v!=;4B^%-x&;Cm1 zP>^*#n_J!T^1SBMI!C4h-R53dN8`?ylD}d{L%(vZvUKT)~-CgWFQy3lt zIqW5#zOL*K8HL%o&D;R|TePl5?VWhq^wrj^qed%lKKkpp-FogeyEi+p zE?K8rW7E1fuEJ{5jaaAp0~aIt+keS?T)@vXM=*X}V#VGMCm1~v-+0wr{w3CJ-R8wG zS@XVpzqP-5Mf0H?y-zh=XVL>S6E;rKnDmrMQlmoKbK9p$evXN`oe{6g>lvi)-+#c) zb+Al&$zRqtWk1@VTt6MPmq9d7^!kmXZn8k{sFt`!l%ynwlArU1(iRB6fMfqu& zIjIUIl?AB^nFS@u3=9=>9)IHDC=AokIOTu(jOWuJ24-b$y<~1-Wnu5hBFw@HE)6D! wQ<#-EhbWxBaplC3Ge=~Ou%B-5Sm33{@Jd{;RG<|Mp00i_>zopr0DGh}-~a#s literal 0 HcmV?d00001 diff --git a/app/src/main/assets/web/img/icons/favicon-32x32.png b/app/src/main/assets/web/img/icons/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..46ca04dee251a4fa85a2891a145fbe20cc619d96 GIT binary patch literal 1271 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 + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + diff --git a/app/src/main/assets/web/img/noCover.b5c48bc1.jpeg b/app/src/main/assets/web/img/noCover.b5c48bc1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..996bbd4122dd4b1763f5e5615c69bba49ae9b52a GIT binary patch literal 5959 zcmZX21yt1C^Y?dII(O-g-9?m=r8^{-kgjDxT0%m)R6@EGiItGfO~x0HUpd(f~jp008|Nz}0);F+fI4 zLPrZ>fY8w~GB7YOGcYhQGchpIGBGkSF*E)VF)}c7T<2zH3H2g+N$^I5;>21cd&je|G-~{%oZF#r~{+$^V*Hy#SOH1P1!S zAQ(UZ1%aWUD?GsV$3X({U#|W~ghU`PF#*XRPzeHnzyyR~VnRYfFxg)^f0UtM9zt5A z3X!25F&*rF#8c72#=cudQ%Cf0`!%1meg=e?szYSc^zmN?SV8~Lf5rh20ho}O=nuvR z{e%5&pX6T@1SJ5|@*oWf>0qKna4{9T#-pnxfD-)osZc-(_?ZCXhQSE_e|G&V5^9QD zA9o-9>S+}!w;6fse>x}M!x2wN#B95T=~@)ZJkXx68&h1zXoLaFGJ8HOxm6;(Q++5v zlgku`!b6sLiaUMZx*{v+eBk~sCXVIx?im+kt!=IHiAWNiY;j{o(ckot^DtP&|Kmr* z0P{iK24T0Wsel?6uC4cWr#R0pKqdAZban$Sp5nHiSsfC#d zejci6T+uX_^4U1?ZHX0E4DnrPoy$+|{TD}s&nU)N3;Q)*jO6!C`}=U1HH5k#htd6=0AQS?|ixF19E zhBf0XMF`J!>uJ@IjtW7)-a*fUJMrMvTm{KVhp1-h=e`36uCltnge*2^HL4RH=!%R| zbe1m_{^HsA$i5lBOFrMmIl#G>gTDSL2Dh2CL=dKmk|XrK-)~T;o%kVOuEGbxAqAHF zCQ>8)Akg8MzACdN`Sr8sO(;Y>)PuL^{jG$ZAPzxQ*QarzHoJ{nnMBDkCpCsl8iZ=f zYHI&5m9?+HYz6ayRiai2nXK02?Gq1hc7w0V?De4cZJjQ=?ygNVFOD(1nq5h~Ion;~ ze8zjZ@F)##!}?W`j*iMq2%ioHB^9?s{>6Klr?w3JkWWQ;HmZSxXt2_%0c%Tb5AtU5 zb)uWyUa&ieU%U1J7LcGJM3rDm|F@XW|aUR?|%^ozY9_{>ISHKGj zbNS^DUmsSjr#d%`(Qv$z+1}o2ZVm=D1>B9w6_OHpvi|8A{N$a~Jjs}|_RDrP^%5u) z1cm&=h)L1AQ$QB#+5BpRhlR4bx;dR$sV2F;kWix?z)UPAo?~q}U1p1_RJ6S$ppn>- z8K01Iqa1zlbWU*|^DqxKRL> z^+lWltg7!mYldTM4w}_AR(kt|8pufk8&y1Dd^ofDWsXpB|C)g09IM(DU=YPwAh;g% znHVx-K#OAR#_t8A`Lb&_+H1a2ald=ZGl57dI8QM=8aMFVF_o8sW)uti=rU#nEgcOd zcmuxo{9WRu46HV!=L6b0WgI(^&84*wYo}wiIGYCX&Y53>k)k=|<2MPF5l^Y$6(;A@ zbfzb#x=qjWu#zf%EG%KRqYsVUtABI#-IzHqU3#s{Uho{IOc#1$qTw$ug8VRd1t682 zqQgioktgcJXKE&9#}CDHsHp>0i&SmX!eYN;sFf0D@$xOn-TH+2bj#F9Y{+gl4wUsL z7wcGh6rMP96?7h-%)*qkA;Q{^UY>V ztsl?sig$l;SKiiaV9N-aATxp*2bjkPo?$+}(T@B{;EM~Drcw84f&4F0=;{S`!j8Tk zXTFi_Iea5^x!#03#oHbO`}YTx?VQ3nxqEXqtH%R?e-x`Y)wR{-Cl)509doq=L+$Lwc1!K3i1z8wW*zK==3w4fCd`=+jzX@rYsLaJ6=+#@Lr}8^d8kFH@rm z*4Ot^sD*G;poK&FB=;_EPc87O{#))R)j_}MO$vhB@Cp(a0=(PBj?hs^#nuf6PF7Z` za3BP>P}*Th&yfJ*msqHo7w;ZmokHXRtZD5J-ygd%U)8& z>5^%;?pjyk@nuiAQI8Wonq&b?$&rDlVTlYldznteDg#(Ph~Ik#SdNK_@>wTmr&tbN>a(A4F14_CvwxqN!!OlEpUtjC z?Yk$=^xZZGO!GCmlMP+yNnYx_Rr!JP^(b`LNq}ZCM9|^gg3@66wlHDK7^3AfH>s$( z!ayT)t6~Q0(ROPw`*67Rkv-Y8SBdr=aF3dLtJ>cWvxP-Eiv`NUfE?EU=cYvToSEj) zyW&nkH9M~I5kGFaNzo#V{M;dYs2fFb#$I>)Gnz6PwhEpg!u5u46c?+hH>hE*09UzN zzXYN}bNl+y>pS-jNt69P__dKJcbSxM+y!hS5qbmBVV8N;1Ev*hsM`GDdFOnEjm1EW zV(|(prD8c1j$g5@6s|)Q{oQZ%sYe*QK;MN2g$yGa>bRqiogll)y@``uz|f;IP! zS^zhg?ehQNBkqd-=3<(94u5nE-6fwSEOG`p*lZ4a>mFJBo2QBtG0XCw@|} zAUiJ6OpKTbV8`R;sT5G|QG8|gG)0A< zW63M2YJRM&3A?jSPYy^)Ha-wkGR-j)|Mm!H;yvoYXWV^i;%qF60tVlVm`)mh)+5lc zGs4Qs90+;6{MZ}%v&t!%%6F}_7I?-}*HcFjXg%o3PE6K&xMv%@O|nCtwv66k{-_qk zy$lVuH0e$)+y1z_Eheg|jEXp@GusfXft_emW^AVO2Jus7A?hJb>rtZJMBBk(3z-r# zh`6ni>yrHA3VEaSmA~}4$C8Mje0jX*QM5eVNV^Wg%J#9b*ti?{#(8@OSS6=d#hS&_ zH>EjJWJMw_b`Po>Wre zJFjN})3zA0#$BJvpgYbtCh@ZEqBmDs70Kp*?t_b-o0|u@@g%tuC%d?u5HQYt673Vv zZPGp!pcVkV718b!Agm!04{;l!pnd-I{#L(KbY%vo+B@o^Pc=eyL1_M2G4K_T;4-P& zl=F6;6jy84BsZW6x8S=17;cZq00E^U=!uRo+8 z)ls#2aTB0Xct#Q<)LD1?m6O=;?g!GNuDEwsfdAT8o%hr*8fCwoG85Z?q7jX2IcSRT zq#|86{WY&j9sUuhw4RY`th5Rv3^g(%j_G4E4EinIGWMs>zOdF_d;S`1O(HW+ii>mk z@WSZ9t-{aNx0Z@jnjJ&Z(s(N_&-W5??K$55ESeXqZ>WLwSwnd37c#YgrFSLNCwbRhL^r8yQl;j9Q@3as4JP~K&y{3K zS@4}BLKfA4P+ng2@jKs!Q~o|I1_3)Nu1Ht+wzlk7_4v?Va{SY@gNj^yHyl*0b4DXs z;Z;ULoln=`N8u#t*V{+M^xV9BRbbpFFY}eE64A|iW^E$EP?)E9JZA-hok7fJVCZ+| z@3=Ntu}}YS|BN8RW=+PO)b%qLY{k)tUSB&F=N9R0Nu;*cbt^A`X+|cS>>eKD&bg;k z`zVd@rjC`H_DF6NHN}u+Mx+UG2RB_CI#u5fhf##o>S=YZ{(*<2-j0f>Y#Hyw9!amAYM*0KTEWgBu+#8w#V<0 zlBVWl4_8@I4u8emtXL_m6_Oz?21l?V`woz}zw5u19^aYQ+DqO1fT6Eqns5kM627)t z#RRQF_p)Wgics%|r84_Q3EhHk+>MS$SLIq! zAVJ5v$X?1N`F5y%;O=JYLT`5uKlR9~fQR6%&M+M2J9K01kf2yq56<_-`|y5CPnA_v z^QbJWtQ5br9jj9ZnmkNY7+HE{As}G2LQzdAyMWP$_M5FUpuA!dQ4ScjZSL23?B%OW zUR8B#XZc#+|NJD}%Y5nSn5J1$@V;NfqfjM18%A`I^$-@4R%%)WyfE}K-F2%Pf+FWs zYFncAg0zIFI!J;WE>Empn_9kU$>6Cw5(m~`cd^R@znv@<3&QVO)0#Hc)#~%2fAgfj zPNFMZ)E($y^O`bRD00J%LPvsjHi~j98M@3hL(DDz573Z;};LB^WL)70cZsz{d|M=tdRO;m;{YU*@ zLqc)Te_!!*4D z!)Nj>@_Cxh_KYik+!U<-xi#guK*v_Ukm)cwV@@KsPsfOzHt~cVq^~Rcg)a{vo)0U8 z2$0DCnorUJ!PG7e0+dXJ1>I|6!A~M_01aV58Ycs z!8OW?_NFAPYaZ@z?6Ay2+;ls4Ef<~NWQ;g_w;Cx-`Qwhn%e?Hz=p=b^Z$x$x0t|{A&T*hm7*|eF@-Ee%neFePs(~9&-6Wn*< z)@-Z213lQkuNV5dS0*`|r{uRetzyDyl--Ix&Fzd^6xowA?Z{8Hg>ITGx;EjytAZq= z#iCq1F$?zw-sejQjSU6!mI($dt?t`N<~y2jt#MA;bL_EgwXIlA)=Uen!42+d-ePPt z8t#nW4yIqM=#Wdb37=^4q=+^1QhGI|T8q!QefVSr(b6x!>3U`&(J)?W^eiX0RmY8e z6Iib6(if$wUo(>qBf9&`lyiPNM}FvDnEadX7P&vWVcWv*KB`5M$|csA6|qmx6kZO; z>i`3{mC<@bgv+O5m4^JLzWgaC)zMNx>PwRg_s9UYi#^%e)ALDkD*l8=1&n8iHokTAH zzH${|K8;6GH;xH>@5wSq(P+tx3wO*sicz}Ll!eA7#v)a>2-}wD?_)c8MoX2yiZN;kIA|by^+UoOUbCQ;VULO1#9Q=_fK{sP| za?ZP)wEeei7dvs~yvfvW6vAWL!zq;ML@2dr+ia_4)}F`vEl*@2)CbVjB#X7leHjf6 zu2awejfNIuTbfZqI{V;@BEF`wjvns7saxwUx!2{R?w7xW`J9!gxhq466G;=0^;e7k E2azwKtN;K2 literal 0 HcmV?d00001 diff --git a/app/src/main/assets/web/index.html b/app/src/main/assets/web/index.html index 29bebabe2..a0a00ef1c 100644 --- a/app/src/main/assets/web/index.html +++ b/app/src/main/assets/web/index.html @@ -359,7 +359,8 @@
(?i) 前缀表示忽略大小写 代码在线运行工具 - 阅读书架(测试) + 阅读书架(经典) + 阅读书架(新潮) diff --git a/app/src/main/assets/web/js/about.2589b5fe.js b/app/src/main/assets/web/js/about.2589b5fe.js new file mode 100644 index 000000000..9fe4335aa --- /dev/null +++ b/app/src/main/assets/web/js/about.2589b5fe.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["about"],{"4fed":function(t,e,s){"use strict";var a=s("708f"),i=s.n(a);i.a},"708f":function(t,e,s){},"7b5b":function(t,e,s){},"7e43":function(t,e,s){t.exports=s.p+"img/noCover.b5c48bc1.jpeg"},d504:function(t,e,s){"use strict";s.r(e);var a=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"index-wrapper"},[a("div",{staticClass:"navigation-wrapper"},[a("div",{staticClass:"navigation-title"},[t._v(" 阅读 ")]),a("div",{staticClass:"navigation-sub-title"},[t._v(" 清风不识字,何故乱翻书 ")]),a("div",{staticClass:"search-wrapper"},[a("el-input",{staticClass:"search-input",attrs:{size:"mini",placeholder:"搜索书籍"},model:{value:t.search,callback:function(e){t.search=e},expression:"search"}},[a("i",{staticClass:"el-input__icon el-icon-search",attrs:{slot:"prefix"},slot:"prefix"})])],1),a("div",{staticClass:"recent-wrapper"},[a("div",{staticClass:"recent-title"},[t._v(" 最近阅读 ")]),a("div",{staticClass:"reading-recent"},[a("el-tag",{staticClass:"recent-book",class:{"no-point":""==t.readingRecent.url},attrs:{type:"warning"},on:{click:function(e){return t.toDetail(t.readingRecent.url,t.readingRecent.name)}}},[t._v(" "+t._s(t.readingRecent.name)+" ")])],1)]),a("div",{staticClass:"setting-wrapper"},[a("div",{staticClass:"setting-title"},[t._v(" 基本设定 ")]),a("div",{staticClass:"setting-item"},[a("el-tag",{staticClass:"setting-connect",class:{"no-point":t.newConnect},attrs:{type:t.connectType},on:{click:t.setIP}},[t._v(" "+t._s(t.connectStatus)+" ")])],1)]),a("div",{staticClass:"bottom-icons"},[a("a",{attrs:{href:"https://github.com/zsakvo/web-yuedu",target:"_blank"}},[a("div",{staticClass:"bottom-icon"},[a("img",{attrs:{src:s("fa39"),alt:""}})])])])]),a("div",{ref:"shelfWrapper",staticClass:"shelf-wrapper"},[a("div",{staticClass:"books-wrapper"},[a("div",{staticClass:"wrapper"},t._l(t.shelf,(function(e){return a("div",{key:e.noteUrl,staticClass:"book",on:{click:function(s){return t.toDetail(e.bookUrl,e.name)}}},[a("div",{staticClass:"cover-img"},[a("img",{staticClass:"cover",attrs:{src:e.coverUrl||s("7e43"),alt:""}})]),a("div",{staticClass:"info",on:{click:function(s){return t.toDetail(e.bookUrl,e.name)}}},[a("div",{staticClass:"name"},[t._v(t._s(e.name))]),a("div",{staticClass:"sub"},[a("div",{staticClass:"author"},[t._v(" "+t._s(e.author)+" ")]),a("div",{staticClass:"dot"},[t._v("•")]),a("div",{staticClass:"size"},[t._v("共"+t._s(e.totalChapterNum)+"章")])]),a("div",{staticClass:"dur-chapter"},[t._v("已读:"+t._s(e.durChapterTitle))]),a("div",{staticClass:"last-chapter"},[t._v("最新:"+t._s(e.latestChapterTitle))])])])})),0)])])])},i=[],n=(s("7b5b"),s("82ae")),r=s.n(n),c={data:function(){return{search:"",readingRecent:{name:"尚无阅读记录",url:""}}},mounted:function(){var t=localStorage.getItem("readingRecent");if(null!=t&&(this.readingRecent=JSON.parse(t)),0==this.shelf.length){this.loading=this.$loading({target:this.$refs.shelfWrapper,lock:!0,text:"正在获取书籍信息",spinner:"el-icon-loading",background:"rgb(247,247,247)"});var e=this;r.a.get("/getBookshelf",{timeout:3e3}).then((function(t){e.loading.close(),e.$store.commit("setConnectType","success"),e.$store.commit("increaseBookNum",t.data.data.length),e.$store.commit("addBooks",t.data.data),e.$store.commit("setConnectStatus","已连接 "),e.$store.commit("setNewConnect",!1)})).catch((function(t){throw e.loading.close(),e.$store.commit("setConnectType","danger"),e.$store.commit("setConnectStatus","连接失败"),e.$message.error("后端连接失败"),e.$store.commit("setNewConnect",!1),t}))}},methods:{setIP:function(){},toDetail:function(t,e){sessionStorage.setItem("bookUrl",t),sessionStorage.setItem("bookName",e),this.readingRecent={name:e,url:t},localStorage.setItem("readingRecent",JSON.stringify(this.readingRecent)),this.$router.push({path:"/chapter"})}},computed:{shelf:function(){return this.$store.state.shelf},connectStatus:function(){return this.$store.state.connectStatus},connectType:function(){return this.$store.state.connectType},newConnect:function(){return this.$store.state.newConnect}}},o=c,l=(s("4fed"),s("623f")),u=Object(l["a"])(o,a,i,!1,null,"5e92421e",null);e["default"]=u.exports},f820:function(t,e,s){"use strict";s.r(e);var a=function(){var t=this,e=t.$createElement;t._self._c;return t._m(0)},i=[function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"about"},[s("h1",[t._v("This is an about page")])])}],n=s("623f"),r={},c=Object(n["a"])(r,a,i,!1,null,null,null);e["default"]=c.exports},fa39:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAECUlEQVRYR7WXTYhcRRDHq3pY9yKrYBQ8KBsjgvHgwRhiQBTjYZm4Xe8NusawhwS/o9GLoKhgBGPAgJd1NdGIXwtZTbRf9Rqzl6gHTVyDeIkIgnEOghAM6oKHzTJd0sO8Zaa338zb7NjwmJn++Ndv+lVVVyOsoM3Ozl69sLBAiHiDc26NUuoKv9w5d14p9aeI/DI4OMgjIyN/lJXFMhOttQ8BgBaR0TLzEXEGAKzW+lCv+V0BmLmGiLtF5M5eQrFxRPxaRCaI6LOi9YUAzPwGADxxMYYjayaJ6MkoZKyTmU8AwF19Mp7LfElEW0LNZTvAzIcBYFufjedy00T0QLt2B4AxZo9S6qX/yXhT1jn3cpqme3IbSwDM/DgAvNlu3Dm3Uyl1HAA2IOJ2EdleEu5Io9H4EBHPVCqVLSISRsMuInrLazUBpqamhoaGhr4TkRsDgLVpmtbzPmPMLQBwOwD4vvzxw8P5IyJztVrtVL4my7L1iPhTx7Yj/jw/P79pfHx8vgmQZdkLiPhK+O8GBgauqVarv5f819FpxpjLlVJ/hYMi8mKSJHubAMz8KwBcF1EYI6IjqwRIlFImonGWiNZhlmVVRDxWYGTVAMx8HwB8EtMXka1orT0gIo9GJrxNRLH+FW8IMx8EgEeW5QDEgx5gTkQ2Bk7yr9b60hVb6rKAmc8BwJWBne+x4P3XiWhtPwGstV9FzpSzHuBvALgsMHaaiDp2ZbUwWZZNIuKuQOcfD7AAAJeEcaq1Xr9ao+3rmdknnscCzQse4LdWEukYazQaa2q12vl+QTDztwCwOdCr+zA8iYi3RQwREdl+ADDz9QDwIwB0OLaInPJRcEhEHoyEyAmt9d39ALDW2lg1hYjv+lfgC4WJgkTxcJIkPcuqbpC+qgKATwvm7PYAGwDgdBeRZ4notYvZCWPMDqXUe13W3to8C6y10yJyv//u6zj/2R6ziPiRiBwt6xPMrBExFZEdRcYR8WOt9bb8MNoKAJ+3Jvtwed05d4dSKtz+c4h4VGsdrRWttZMici8AXFVix+4homNLBUmWZQcQMc/9x4mommXZ84i4t11MKbV5dHR06bxvH5uZmbnZOfdN6O0RmMNE1CxulgCstdeKyBcAcFPrVTyltZ4wxiSVSuXplkhda72zh9P1rClFZFOSJHMdAP5Hq3rxR6eH+IGIvIOuqFlr94nIc10WdRzxy6riAMJnr2nn3JlcME3TppMWNWvtfhF5pmB8WX0RvZgEEEtaYUUbM2KtfUdE/FUubNHipvBmZIxZp5TaDwBprlQGIHLqzSHiPq01x4B7Xk6Z2d8TfDwPlwFozfd1f90598Hi4uKrY2NjFwrzQVkP81nNi/byAWOMv8gOp2n6fhnt/wDqJrRWLmhIrwAAAABJRU5ErkJggg=="}}]); \ No newline at end of file diff --git a/app/src/main/assets/web/js/about~detail.08c372e6.js b/app/src/main/assets/web/js/about~detail.08c372e6.js new file mode 100644 index 000000000..7d1080cea --- /dev/null +++ b/app/src/main/assets/web/js/about~detail.08c372e6.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["about~detail"],{"04a7":function(e,t,r){"use strict";var n=r("d844");e.exports=function(e,t,r){return n.forEach(r,(function(r){e=r(e,t)})),e}},"050d":function(e,t,r){"use strict";var n=r("d844");function o(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,r){if(!t)return e;var i;if(r)i=r(t);else if(n.isURLSearchParams(t))i=t.toString();else{var s=[];n.forEach(t,(function(e,t){null!==e&&"undefined"!==typeof e&&(n.isArray(e)?t+="[]":e=[e],n.forEach(e,(function(e){n.isDate(e)?e=e.toISOString():n.isObject(e)&&(e=JSON.stringify(e)),s.push(o(t)+"="+o(e))})))})),i=s.join("&")}if(i){var a=e.indexOf("#");-1!==a&&(e=e.slice(0,a)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}},"068e":function(e,t,r){"use strict";function n(e){this.message=e}n.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},n.prototype.__CANCEL__=!0,e.exports=n},"0bbf":function(e,t,r){"use strict";var n=r("d844"),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,r,i,s={};return e?(n.forEach(e.split("\n"),(function(e){if(i=e.indexOf(":"),t=n.trim(e.substr(0,i)).toLowerCase(),r=n.trim(e.substr(i+1)),t){if(s[t]&&o.indexOf(t)>=0)return;s[t]="set-cookie"===t?(s[t]?s[t]:[]).concat([r]):s[t]?s[t]+", "+r:r}})),s):s}},"11f4":function(e,t,r){"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},"155b":function(e,t,r){"use strict";var n=r("068e");function o(e){if("function"!==typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var r=this;e((function(e){r.reason||(r.reason=new n(e),t(r.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.source=function(){var e,t=new o((function(t){e=t}));return{token:t,cancel:e}},e.exports=o},"1eb2":function(e,t,r){"use strict";var n=r("c5b9");e.exports=function(e,t,r){var o=r.config.validateStatus;!o||o(r.status)?e(r):t(n("Request failed with status code "+r.status,r.config,null,r.request,r))}},"2ed0":function(e,t,r){"use strict";(function(t){var n=r("d844"),o=r("9d72"),i={"Content-Type":"application/x-www-form-urlencoded"};function s(e,t){!n.isUndefined(e)&&n.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}function a(){var e;return("undefined"!==typeof XMLHttpRequest||"undefined"!==typeof t&&"[object process]"===Object.prototype.toString.call(t))&&(e=r("a169")),e}var u={adapter:a(),transformRequest:[function(e,t){return o(t,"Accept"),o(t,"Content-Type"),n.isFormData(e)||n.isArrayBuffer(e)||n.isBuffer(e)||n.isStream(e)||n.isFile(e)||n.isBlob(e)?e:n.isArrayBufferView(e)?e.buffer:n.isURLSearchParams(e)?(s(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):n.isObject(e)?(s(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"===typeof e)try{e=JSON.parse(e)}catch(t){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};n.forEach(["delete","get","head"],(function(e){u.headers[e]={}})),n.forEach(["post","put","patch"],(function(e){u.headers[e]=n.merge(i)})),e.exports=u}).call(this,r("eef6"))},"43d9":function(e,t,r){"use strict";var n=r("d844"),o=r("faf0"),i=r("4a67"),s=r("c9ba"),a=r("2ed0");function u(e){var t=new i(e),r=o(i.prototype.request,t);return n.extend(r,i.prototype,t),n.extend(r,t),r}var c=u(a);c.Axios=i,c.create=function(e){return u(s(c.defaults,e))},c.Cancel=r("068e"),c.CancelToken=r("155b"),c.isCancel=r("11f4"),c.all=function(e){return Promise.all(e)},c.spread=r("53f3"),e.exports=c,e.exports.default=c},"4a67":function(e,t,r){"use strict";var n=r("d844"),o=r("050d"),i=r("54b5"),s=r("c70f"),a=r("c9ba");function u(e){this.defaults=e,this.interceptors={request:new i,response:new i}}u.prototype.request=function(e){"string"===typeof e?(e=arguments[1]||{},e.url=arguments[0]):e=e||{},e=a(this.defaults,e),e.method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var t=[s,void 0],r=Promise.resolve(e);this.interceptors.request.forEach((function(e){t.unshift(e.fulfilled,e.rejected)})),this.interceptors.response.forEach((function(e){t.push(e.fulfilled,e.rejected)}));while(t.length)r=r.then(t.shift(),t.shift());return r},u.prototype.getUri=function(e){return e=a(this.defaults,e),o(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},n.forEach(["delete","get","head","options"],(function(e){u.prototype[e]=function(t,r){return this.request(n.merge(r||{},{method:e,url:t}))}})),n.forEach(["post","put","patch"],(function(e){u.prototype[e]=function(t,r,o){return this.request(n.merge(o||{},{method:e,url:t,data:r}))}})),e.exports=u},"4f37":function(e,t,r){"use strict";var n=r("ca19"),o=r("c4e8");e.exports=function(e,t){return e&&!n(t)?o(e,t):t}},"53f3":function(e,t,r){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},"54b5":function(e,t,r){"use strict";var n=r("d844");function o(){this.handlers=[]}o.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},o.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},o.prototype.forEach=function(e){n.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=o},6266:function(e,t,r){(function(e){function r(e,t){for(var r=0,n=e.length-1;n>=0;n--){var o=e[n];"."===o?e.splice(n,1):".."===o?(e.splice(n,1),r++):r&&(e.splice(n,1),r--)}if(t)for(;r--;r)e.unshift("..");return e}function n(e){"string"!==typeof e&&(e+="");var t,r=0,n=-1,o=!0;for(t=e.length-1;t>=0;--t)if(47===e.charCodeAt(t)){if(!o){r=t+1;break}}else-1===n&&(o=!1,n=t+1);return-1===n?"":e.slice(r,n)}function o(e,t){if(e.filter)return e.filter(t);for(var r=[],n=0;n=-1&&!n;i--){var s=i>=0?arguments[i]:e.cwd();if("string"!==typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(t=s+"/"+t,n="/"===s.charAt(0))}return t=r(o(t.split("/"),(function(e){return!!e})),!n).join("/"),(n?"/":"")+t||"."},t.normalize=function(e){var n=t.isAbsolute(e),s="/"===i(e,-1);return e=r(o(e.split("/"),(function(e){return!!e})),!n).join("/"),e||n||(e="."),e&&s&&(e+="/"),(n?"/":"")+e},t.isAbsolute=function(e){return"/"===e.charAt(0)},t.join=function(){var e=Array.prototype.slice.call(arguments,0);return t.normalize(o(e,(function(e,t){if("string"!==typeof e)throw new TypeError("Arguments to path.join must be strings");return e})).join("/"))},t.relative=function(e,r){function n(e){for(var t=0;t=0;r--)if(""!==e[r])break;return t>r?[]:e.slice(t,r-t+1)}e=t.resolve(e).substr(1),r=t.resolve(r).substr(1);for(var o=n(e.split("/")),i=n(r.split("/")),s=Math.min(o.length,i.length),a=s,u=0;u=1;--i)if(t=e.charCodeAt(i),47===t){if(!o){n=i;break}}else o=!1;return-1===n?r?"/":".":r&&1===n?"/":e.slice(0,n)},t.basename=function(e,t){var r=n(e);return t&&r.substr(-1*t.length)===t&&(r=r.substr(0,r.length-t.length)),r},t.extname=function(e){"string"!==typeof e&&(e+="");for(var t=-1,r=0,n=-1,o=!0,i=0,s=e.length-1;s>=0;--s){var a=e.charCodeAt(s);if(47!==a)-1===n&&(o=!1,n=s+1),46===a?-1===t?t=s:1!==i&&(i=1):-1!==t&&(i=-1);else if(!o){r=s+1;break}}return-1===t||-1===n||0===i||1===i&&t===n-1&&t===r+1?"":e.slice(t,n)};var i="b"==="ab".substr(-1)?function(e,t,r){return e.substr(t,r)}:function(e,t,r){return t<0&&(t=e.length+t),e.substr(t,r)}}).call(this,r("eef6"))},"82ae":function(e,t,r){e.exports=r("43d9")},"83fe":function(e,t,r){"use strict";var n=r("d844");e.exports=n.isStandardBrowserEnv()?function(){return{write:function(e,t,r,o,i,s){var a=[];a.push(e+"="+encodeURIComponent(t)),n.isNumber(r)&&a.push("expires="+new Date(r).toGMTString()),n.isString(o)&&a.push("path="+o),n.isString(i)&&a.push("domain="+i),!0===s&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},"9d72":function(e,t,r){"use strict";var n=r("d844");e.exports=function(e,t){n.forEach(e,(function(r,n){n!==t&&n.toUpperCase()===t.toUpperCase()&&(e[t]=r,delete e[n])}))}},a169:function(e,t,r){"use strict";var n=r("d844"),o=r("1eb2"),i=r("050d"),s=r("4f37"),a=r("0bbf"),u=r("edb4"),c=r("c5b9");e.exports=function(e){return new Promise((function(t,f){var p=e.data,l=e.headers;n.isFormData(p)&&delete l["Content-Type"];var d=new XMLHttpRequest;if(e.auth){var h=e.auth.username||"",m=e.auth.password||"";l.Authorization="Basic "+btoa(h+":"+m)}var g=s(e.baseURL,e.url);if(d.open(e.method.toUpperCase(),i(g,e.params,e.paramsSerializer),!0),d.timeout=e.timeout,d.onreadystatechange=function(){if(d&&4===d.readyState&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf("file:"))){var r="getAllResponseHeaders"in d?a(d.getAllResponseHeaders()):null,n=e.responseType&&"text"!==e.responseType?d.response:d.responseText,i={data:n,status:d.status,statusText:d.statusText,headers:r,config:e,request:d};o(t,f,i),d=null}},d.onabort=function(){d&&(f(c("Request aborted",e,"ECONNABORTED",d)),d=null)},d.onerror=function(){f(c("Network Error",e,null,d)),d=null},d.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),f(c(t,e,"ECONNABORTED",d)),d=null},n.isStandardBrowserEnv()){var y=r("83fe"),v=(e.withCredentials||u(g))&&e.xsrfCookieName?y.read(e.xsrfCookieName):void 0;v&&(l[e.xsrfHeaderName]=v)}if("setRequestHeader"in d&&n.forEach(l,(function(e,t){"undefined"===typeof p&&"content-type"===t.toLowerCase()?delete l[t]:d.setRequestHeader(t,e)})),n.isUndefined(e.withCredentials)||(d.withCredentials=!!e.withCredentials),e.responseType)try{d.responseType=e.responseType}catch(b){if("json"!==e.responseType)throw b}"function"===typeof e.onDownloadProgress&&d.addEventListener("progress",e.onDownloadProgress),"function"===typeof e.onUploadProgress&&d.upload&&d.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){d&&(d.abort(),f(e),d=null)})),void 0===p&&(p=null),d.send(p)}))}},bd2a:function(e,t,r){"use strict";e.exports=function(e,t,r,n,o){return e.config=t,r&&(e.code=r),e.request=n,e.response=o,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},c4e8:function(e,t,r){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},c5b9:function(e,t,r){"use strict";var n=r("bd2a");e.exports=function(e,t,r,o,i){var s=new Error(e);return n(s,t,r,o,i)}},c70f:function(e,t,r){"use strict";var n=r("d844"),o=r("04a7"),i=r("11f4"),s=r("2ed0");function a(e){e.cancelToken&&e.cancelToken.throwIfRequested()}e.exports=function(e){a(e),e.headers=e.headers||{},e.data=o(e.data,e.headers,e.transformRequest),e.headers=n.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),n.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]}));var t=e.adapter||s.adapter;return t(e).then((function(t){return a(e),t.data=o(t.data,t.headers,e.transformResponse),t}),(function(t){return i(t)||(a(e),t&&t.response&&(t.response.data=o(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},c9ba:function(e,t,r){"use strict";var n=r("d844");e.exports=function(e,t){t=t||{};var r={},o=["url","method","params","data"],i=["headers","auth","proxy"],s=["baseURL","url","transformRequest","transformResponse","paramsSerializer","timeout","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","maxContentLength","validateStatus","maxRedirects","httpAgent","httpsAgent","cancelToken","socketPath"];n.forEach(o,(function(e){"undefined"!==typeof t[e]&&(r[e]=t[e])})),n.forEach(i,(function(o){n.isObject(t[o])?r[o]=n.deepMerge(e[o],t[o]):"undefined"!==typeof t[o]?r[o]=t[o]:n.isObject(e[o])?r[o]=n.deepMerge(e[o]):"undefined"!==typeof e[o]&&(r[o]=e[o])})),n.forEach(s,(function(n){"undefined"!==typeof t[n]?r[n]=t[n]:"undefined"!==typeof e[n]&&(r[n]=e[n])}));var a=o.concat(i).concat(s),u=Object.keys(t).filter((function(e){return-1===a.indexOf(e)}));return n.forEach(u,(function(n){"undefined"!==typeof t[n]?r[n]=t[n]:"undefined"!==typeof e[n]&&(r[n]=e[n])})),r}},ca19:function(e,t,r){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},d844:function(e,t,r){"use strict";var n=r("faf0"),o=Object.prototype.toString;function i(e){return"[object Array]"===o.call(e)}function s(e){return"undefined"===typeof e}function a(e){return null!==e&&!s(e)&&null!==e.constructor&&!s(e.constructor)&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function u(e){return"[object ArrayBuffer]"===o.call(e)}function c(e){return"undefined"!==typeof FormData&&e instanceof FormData}function f(e){var t;return t="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer,t}function p(e){return"string"===typeof e}function l(e){return"number"===typeof e}function d(e){return null!==e&&"object"===typeof e}function h(e){return"[object Date]"===o.call(e)}function m(e){return"[object File]"===o.call(e)}function g(e){return"[object Blob]"===o.call(e)}function y(e){return"[object Function]"===o.call(e)}function v(e){return d(e)&&y(e.pipe)}function b(e){return"undefined"!==typeof URLSearchParams&&e instanceof URLSearchParams}function w(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function x(){return("undefined"===typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!==typeof window&&"undefined"!==typeof document)}function E(e,t){if(null!==e&&"undefined"!==typeof e)if("object"!==typeof e&&(e=[e]),i(e))for(var r=0,n=e.length;r>>32-t}function o(e,t){var n,o,r,a,u;return r=2147483648&e,a=2147483648&t,n=1073741824&e,o=1073741824&t,u=(1073741823&e)+(1073741823&t),n&o?2147483648^u^r^a:n|o?1073741824&u?3221225472^u^r^a:1073741824^u^r^a:u^r^a}function r(e,t,n){return e&t|~e&n}function a(e,t,n){return e&n|t&~n}function u(e,t,n){return e^t^n}function i(e,t,n){return t^(e|~n)}function l(e,t,a,u,i,l,c){return e=o(e,o(o(r(t,a,u),i),c)),o(n(e,l),t)}function c(e,t,r,u,i,l,c){return e=o(e,o(o(a(t,r,u),i),c)),o(n(e,l),t)}function f(e,t,r,a,i,l,c){return e=o(e,o(o(u(t,r,a),i),c)),o(n(e,l),t)}function d(e,t,r,a,u,l,c){return e=o(e,o(o(i(t,r,a),u),c)),o(n(e,l),t)}function s(e){var t,n=e.length,o=n+8,r=(o-o%64)/64,a=16*(r+1),u=Array(a-1),i=0,l=0;while(l>>29,u}function p(e){var t,n,o="",r="";for(n=0;n<=3;n++)t=e>>>8*n&255,r="0"+t.toString(16),o+=r.substr(r.length-2,2);return o}var b,h,g,m,v,y,w,C,S,P=Array(),O=7,j=12,k=17,T=22,_=5,x=9,E=14,A=20,L=4,$=11,B=16,N=23,V=6,M=10,D=15,q=21;for(P=s(t),y=1732584193,w=4023233417,C=2562383102,S=271733878,b=0;b=0&&Math.floor(t)===t&&isFinite(e)}function p(e){return o(e)&&"function"===typeof e.then&&"function"===typeof e.catch}function h(e){return null==e?"":Array.isArray(e)||c(e)&&e.toString===u?JSON.stringify(e,null,2):String(e)}function v(e){var t=parseFloat(e);return isNaN(t)?e:t}function m(e,t){for(var n=Object.create(null),r=e.split(","),o=0;o-1)return e.splice(n,1)}}var b=Object.prototype.hasOwnProperty;function _(e,t){return b.call(e,t)}function x(e){var t=Object.create(null);return function(n){var r=t[n];return r||(t[n]=e(n))}}var w=/-(\w)/g,C=x((function(e){return e.replace(w,(function(e,t){return t?t.toUpperCase():""}))})),S=x((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),O=/\B([A-Z])/g,E=x((function(e){return e.replace(O,"-$1").toLowerCase()}));function k(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function $(e,t){return e.bind(t)}var j=Function.prototype.bind?$:k;function A(e,t){t=t||0;var n=e.length-t,r=new Array(n);while(n--)r[n]=e[n+t];return r}function T(e,t){for(var n in t)e[n]=t[n];return e}function M(e){for(var t={},n=0;n0,ne=Q&&Q.indexOf("edge/")>0,re=(Q&&Q.indexOf("android"),Q&&/iphone|ipad|ipod|ios/.test(Q)||"ios"===Z),oe=(Q&&/chrome\/\d+/.test(Q),Q&&/phantomjs/.test(Q),Q&&Q.match(/firefox\/(\d+)/)),ie={}.watch,ae=!1;if(Y)try{var se={};Object.defineProperty(se,"passive",{get:function(){ae=!0}}),window.addEventListener("test-passive",null,se)}catch(Ca){}var le=function(){return void 0===G&&(G=!Y&&!J&&"undefined"!==typeof e&&(e["process"]&&"server"===e["process"].env.VUE_ENV)),G},ue=Y&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ce(e){return"function"===typeof e&&/native code/.test(e.toString())}var fe,de="undefined"!==typeof Symbol&&ce(Symbol)&&"undefined"!==typeof Reflect&&ce(Reflect.ownKeys);fe="undefined"!==typeof Set&&ce(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var pe=P,he=0,ve=function(){this.id=he++,this.subs=[]};ve.prototype.addSub=function(e){this.subs.push(e)},ve.prototype.removeSub=function(e){g(this.subs,e)},ve.prototype.depend=function(){ve.target&&ve.target.addDep(this)},ve.prototype.notify=function(){var e=this.subs.slice();for(var t=0,n=e.length;t-1)if(i&&!_(o,"default"))a=!1;else if(""===a||a===E(e)){var l=et(String,o.type);(l<0||s0&&(a=kt(a,(t||"")+"_"+n),Et(a[0])&&Et(u)&&(c[l]=we(u.text+a[0].text),a.shift()),c.push.apply(c,a)):s(a)?Et(u)?c[l]=we(u.text+a):""!==a&&c.push(we(a)):Et(a)&&Et(u)?c[l]=we(u.text+a.text):(i(e._isVList)&&o(a.tag)&&r(a.key)&&o(t)&&(a.key="__vlist"+t+"_"+n+"__"),c.push(a)));return c}function $t(e){var t=e.$options.provide;t&&(e._provided="function"===typeof t?t.call(e):t)}function jt(e){var t=At(e.$options.inject,e);t&&(je(!1),Object.keys(t).forEach((function(n){Le(e,n,t[n])})),je(!0))}function At(e,t){if(e){for(var n=Object.create(null),r=de?Reflect.ownKeys(e):Object.keys(e),o=0;o0,a=e?!!e.$stable:!i,s=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(a&&r&&r!==n&&s===r.$key&&!i&&!r.$hasNormal)return r;for(var l in o={},e)e[l]&&"$"!==l[0]&&(o[l]=Lt(t,l,e[l]))}else o={};for(var u in t)u in o||(o[u]=Nt(t,u));return e&&Object.isExtensible(e)&&(e._normalized=o),U(o,"$stable",a),U(o,"$key",s),U(o,"$hasNormal",i),o}function Lt(e,t,n){var r=function(){var e=arguments.length?n.apply(null,arguments):n({});return e=e&&"object"===typeof e&&!Array.isArray(e)?[e]:Ot(e),e&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function Nt(e,t){return function(){return e[t]}}function Rt(e,t){var n,r,i,a,s;if(Array.isArray(e)||"string"===typeof e)for(n=new Array(e.length),r=0,i=e.length;r1?A(n):n;for(var r=A(arguments,1),o='event handler for "'+e+'"',i=0,a=n.length;idocument.createEvent("Event").timeStamp&&(Gn=function(){return Xn.now()})}function Yn(){var e,t;for(Kn=Gn(),Vn=!0,zn.sort((function(e,t){return e.id-t.id})),Un=0;UnUn&&zn[n].id>e.id)n--;zn.splice(n+1,0,e)}else zn.push(e);Wn||(Wn=!0,ht(Yn))}}var tr=0,nr=function(e,t,n,r,o){this.vm=e,o&&(e._watcher=this),e._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++tr,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new fe,this.newDepIds=new fe,this.expression="","function"===typeof t?this.getter=t:(this.getter=K(t),this.getter||(this.getter=P)),this.value=this.lazy?void 0:this.get()};nr.prototype.get=function(){var e;ye(this);var t=this.vm;try{e=this.getter.call(t,t)}catch(Ca){if(!this.user)throw Ca;tt(Ca,t,'getter for watcher "'+this.expression+'"')}finally{this.deep&&mt(e),ge(),this.cleanupDeps()}return e},nr.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},nr.prototype.cleanupDeps=function(){var e=this.deps.length;while(e--){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},nr.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():er(this)},nr.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||l(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(Ca){tt(Ca,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},nr.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},nr.prototype.depend=function(){var e=this.deps.length;while(e--)this.deps[e].depend()},nr.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||g(this.vm._watchers,this);var e=this.deps.length;while(e--)this.deps[e].removeSub(this);this.active=!1}};var rr={enumerable:!0,configurable:!0,get:P,set:P};function or(e,t,n){rr.get=function(){return this[t][n]},rr.set=function(e){this[t][n]=e},Object.defineProperty(e,n,rr)}function ir(e){e._watchers=[];var t=e.$options;t.props&&ar(e,t.props),t.methods&&hr(e,t.methods),t.data?sr(e):Pe(e._data={},!0),t.computed&&cr(e,t.computed),t.watch&&t.watch!==ie&&vr(e,t.watch)}function ar(e,t){var n=e.$options.propsData||{},r=e._props={},o=e.$options._propKeys=[],i=!e.$parent;i||je(!1);var a=function(i){o.push(i);var a=Ye(i,t,n,e);Le(r,i,a),i in e||or(e,"_props",i)};for(var s in t)a(s);je(!0)}function sr(e){var t=e.$options.data;t=e._data="function"===typeof t?lr(t,e):t||{},c(t)||(t={});var n=Object.keys(t),r=e.$options.props,o=(e.$options.methods,n.length);while(o--){var i=n[o];0,r&&_(r,i)||V(i)||or(e,"_data",i)}Pe(t,!0)}function lr(e,t){ye();try{return e.call(t,t)}catch(Ca){return tt(Ca,t,"data()"),{}}finally{ge()}}var ur={lazy:!0};function cr(e,t){var n=e._computedWatchers=Object.create(null),r=le();for(var o in t){var i=t[o],a="function"===typeof i?i:i.get;0,r||(n[o]=new nr(e,a||P,P,ur)),o in e||fr(e,o,i)}}function fr(e,t,n){var r=!le();"function"===typeof n?(rr.get=r?dr(t):pr(n),rr.set=P):(rr.get=n.get?r&&!1!==n.cache?dr(t):pr(n.get):P,rr.set=n.set||P),Object.defineProperty(e,t,rr)}function dr(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),ve.target&&t.depend(),t.value}}function pr(e){return function(){return e.call(this,this)}}function hr(e,t){e.$options.props;for(var n in t)e[n]="function"!==typeof t[n]?P:j(t[n],e)}function vr(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var o=0;o-1)return this;var n=A(arguments,1);return n.unshift(this),"function"===typeof e.install?e.install.apply(e,n):"function"===typeof e&&e.apply(null,n),t.push(e),this}}function Or(e){e.mixin=function(e){return this.options=Ge(this.options,e),this}}function Er(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,o=e._Ctor||(e._Ctor={});if(o[r])return o[r];var i=e.name||n.options.name;var a=function(e){this._init(e)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=t++,a.options=Ge(n.options,e),a["super"]=n,a.options.props&&kr(a),a.options.computed&&$r(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,z.forEach((function(e){a[e]=n[e]})),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=e,a.sealedOptions=T({},a.options),o[r]=a,a}}function kr(e){var t=e.options.props;for(var n in t)or(e.prototype,"_props",n)}function $r(e){var t=e.options.computed;for(var n in t)fr(e.prototype,n,t[n])}function jr(e){z.forEach((function(t){e[t]=function(e,n){return n?("component"===t&&c(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"===typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}}))}function Ar(e){return e&&(e.Ctor.options.name||e.tag)}function Tr(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"===typeof e?e.split(",").indexOf(t)>-1:!!f(e)&&e.test(t)}function Mr(e,t){var n=e.cache,r=e.keys,o=e._vnode;for(var i in n){var a=n[i];if(a){var s=Ar(a.componentOptions);s&&!t(s)&&Pr(n,i,r,o)}}}function Pr(e,t,n,r){var o=e[t];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),e[t]=null,g(n,t)}br(Cr),yr(Cr),jn(Cr),Pn(Cr),gn(Cr);var Lr=[String,RegExp,Array],Nr={name:"keep-alive",abstract:!0,props:{include:Lr,exclude:Lr,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)Pr(this.cache,e,this.keys)},mounted:function(){var e=this;this.$watch("include",(function(t){Mr(e,(function(e){return Tr(t,e)}))})),this.$watch("exclude",(function(t){Mr(e,(function(e){return!Tr(t,e)}))}))},render:function(){var e=this.$slots.default,t=Cn(e),n=t&&t.componentOptions;if(n){var r=Ar(n),o=this,i=o.include,a=o.exclude;if(i&&(!r||!Tr(i,r))||a&&r&&Tr(a,r))return t;var s=this,l=s.cache,u=s.keys,c=null==t.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):t.key;l[c]?(t.componentInstance=l[c].componentInstance,g(u,c),u.push(c)):(l[c]=t,u.push(c),this.max&&u.length>parseInt(this.max)&&Pr(l,u[0],u,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}},Rr={KeepAlive:Nr};function Ir(e){var t={get:function(){return B}};Object.defineProperty(e,"config",t),e.util={warn:pe,extend:T,mergeOptions:Ge,defineReactive:Le},e.set=Ne,e.delete=Re,e.nextTick=ht,e.observable=function(e){return Pe(e),e},e.options=Object.create(null),z.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,T(e.options.components,Rr),Sr(e),Or(e),Er(e),jr(e)}Ir(Cr),Object.defineProperty(Cr.prototype,"$isServer",{get:le}),Object.defineProperty(Cr.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Cr,"FunctionalRenderContext",{value:Jt}),Cr.version="2.6.11";var Fr=m("style,class"),Hr=m("input,textarea,option,select,progress"),zr=function(e,t,n){return"value"===n&&Hr(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},Dr=m("contenteditable,draggable,spellcheck"),Br=m("events,caret,typing,plaintext-only"),Wr=function(e,t){return Gr(t)||"false"===t?"false":"contenteditable"===e&&Br(t)?t:"true"},Vr=m("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Ur="http://www.w3.org/1999/xlink",qr=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Kr=function(e){return qr(e)?e.slice(6,e.length):""},Gr=function(e){return null==e||!1===e};function Xr(e){var t=e.data,n=e,r=e;while(o(r.componentInstance))r=r.componentInstance._vnode,r&&r.data&&(t=Yr(r.data,t));while(o(n=n.parent))n&&n.data&&(t=Yr(t,n.data));return Jr(t.staticClass,t.class)}function Yr(e,t){return{staticClass:Zr(e.staticClass,t.staticClass),class:o(e.class)?[e.class,t.class]:t.class}}function Jr(e,t){return o(e)||o(t)?Zr(e,Qr(t)):""}function Zr(e,t){return e?t?e+" "+t:e:t||""}function Qr(e){return Array.isArray(e)?eo(e):l(e)?to(e):"string"===typeof e?e:""}function eo(e){for(var t,n="",r=0,i=e.length;r-1?so[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:so[e]=/HTMLUnknownElement/.test(t.toString())}var uo=m("text,number,password,search,email,tel,url");function co(e){if("string"===typeof e){var t=document.querySelector(e);return t||document.createElement("div")}return e}function fo(e,t){var n=document.createElement(e);return"select"!==e||t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n}function po(e,t){return document.createElementNS(no[e],t)}function ho(e){return document.createTextNode(e)}function vo(e){return document.createComment(e)}function mo(e,t,n){e.insertBefore(t,n)}function yo(e,t){e.removeChild(t)}function go(e,t){e.appendChild(t)}function bo(e){return e.parentNode}function _o(e){return e.nextSibling}function xo(e){return e.tagName}function wo(e,t){e.textContent=t}function Co(e,t){e.setAttribute(t,"")}var So=Object.freeze({createElement:fo,createElementNS:po,createTextNode:ho,createComment:vo,insertBefore:mo,removeChild:yo,appendChild:go,parentNode:bo,nextSibling:_o,tagName:xo,setTextContent:wo,setStyleScope:Co}),Oo={create:function(e,t){Eo(t)},update:function(e,t){e.data.ref!==t.data.ref&&(Eo(e,!0),Eo(t))},destroy:function(e){Eo(e,!0)}};function Eo(e,t){var n=e.data.ref;if(o(n)){var r=e.context,i=e.componentInstance||e.elm,a=r.$refs;t?Array.isArray(a[n])?g(a[n],i):a[n]===i&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])?a[n].indexOf(i)<0&&a[n].push(i):a[n]=[i]:a[n]=i}}var ko=new be("",{},[]),$o=["create","activate","update","remove","destroy"];function jo(e,t){return e.key===t.key&&(e.tag===t.tag&&e.isComment===t.isComment&&o(e.data)===o(t.data)&&Ao(e,t)||i(e.isAsyncPlaceholder)&&e.asyncFactory===t.asyncFactory&&r(t.asyncFactory.error))}function Ao(e,t){if("input"!==e.tag)return!0;var n,r=o(n=e.data)&&o(n=n.attrs)&&n.type,i=o(n=t.data)&&o(n=n.attrs)&&n.type;return r===i||uo(r)&&uo(i)}function To(e,t,n){var r,i,a={};for(r=t;r<=n;++r)i=e[r].key,o(i)&&(a[i]=r);return a}function Mo(e){var t,n,a={},l=e.modules,u=e.nodeOps;for(t=0;t<$o.length;++t)for(a[$o[t]]=[],n=0;nv?(f=r(n[g+1])?null:n[g+1].elm,C(e,f,n,h,g,i)):h>g&&O(t,d,v)}function $(e,t,n,r){for(var i=n;i-1?Wo(e,t,n):Vr(t)?Gr(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):Dr(t)?e.setAttribute(t,Wr(t,n)):qr(t)?Gr(n)?e.removeAttributeNS(Ur,Kr(t)):e.setAttributeNS(Ur,t,n):Wo(e,t,n)}function Wo(e,t,n){if(Gr(n))e.removeAttribute(t);else{if(ee&&!te&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",r)};e.addEventListener("input",r),e.__ieph=!0}e.setAttribute(t,n)}}var Vo={create:Do,update:Do};function Uo(e,t){var n=t.elm,i=t.data,a=e.data;if(!(r(i.staticClass)&&r(i.class)&&(r(a)||r(a.staticClass)&&r(a.class)))){var s=Xr(t),l=n._transitionClasses;o(l)&&(s=Zr(s,Qr(l))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var qo,Ko={create:Uo,update:Uo},Go="__r",Xo="__c";function Yo(e){if(o(e[Go])){var t=ee?"change":"input";e[t]=[].concat(e[Go],e[t]||[]),delete e[Go]}o(e[Xo])&&(e.change=[].concat(e[Xo],e.change||[]),delete e[Xo])}function Jo(e,t,n){var r=qo;return function o(){var i=t.apply(null,arguments);null!==i&&ei(e,o,n,r)}}var Zo=at&&!(oe&&Number(oe[1])<=53);function Qo(e,t,n,r){if(Zo){var o=Kn,i=t;t=i._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=o||e.timeStamp<=0||e.target.ownerDocument!==document)return i.apply(this,arguments)}}qo.addEventListener(e,t,ae?{capture:n,passive:r}:n)}function ei(e,t,n,r){(r||qo).removeEventListener(e,t._wrapper||t,n)}function ti(e,t){if(!r(e.data.on)||!r(t.data.on)){var n=t.data.on||{},o=e.data.on||{};qo=t.elm,Yo(n),_t(n,o,Qo,ei,Jo,t.context),qo=void 0}}var ni,ri={create:ti,update:ti};function oi(e,t){if(!r(e.data.domProps)||!r(t.data.domProps)){var n,i,a=t.elm,s=e.data.domProps||{},l=t.data.domProps||{};for(n in o(l.__ob__)&&(l=t.data.domProps=T({},l)),s)n in l||(a[n]="");for(n in l){if(i=l[n],"textContent"===n||"innerHTML"===n){if(t.children&&(t.children.length=0),i===s[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n&&"PROGRESS"!==a.tagName){a._value=i;var u=r(i)?"":String(i);ii(a,u)&&(a.value=u)}else if("innerHTML"===n&&oo(a.tagName)&&r(a.innerHTML)){ni=ni||document.createElement("div"),ni.innerHTML=""+i+"";var c=ni.firstChild;while(a.firstChild)a.removeChild(a.firstChild);while(c.firstChild)a.appendChild(c.firstChild)}else if(i!==s[n])try{a[n]=i}catch(Ca){}}}}function ii(e,t){return!e.composing&&("OPTION"===e.tagName||ai(e,t)||si(e,t))}function ai(e,t){var n=!0;try{n=document.activeElement!==e}catch(Ca){}return n&&e.value!==t}function si(e,t){var n=e.value,r=e._vModifiers;if(o(r)){if(r.number)return v(n)!==v(t);if(r.trim)return n.trim()!==t.trim()}return n!==t}var li={create:oi,update:oi},ui=x((function(e){var t={},n=/;(?![^(]*\))/g,r=/:(.+)/;return e.split(n).forEach((function(e){if(e){var n=e.split(r);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}));function ci(e){var t=fi(e.style);return e.staticStyle?T(e.staticStyle,t):t}function fi(e){return Array.isArray(e)?M(e):"string"===typeof e?ui(e):e}function di(e,t){var n,r={};if(t){var o=e;while(o.componentInstance)o=o.componentInstance._vnode,o&&o.data&&(n=ci(o.data))&&T(r,n)}(n=ci(e.data))&&T(r,n);var i=e;while(i=i.parent)i.data&&(n=ci(i.data))&&T(r,n);return r}var pi,hi=/^--/,vi=/\s*!important$/,mi=function(e,t,n){if(hi.test(t))e.style.setProperty(t,n);else if(vi.test(n))e.style.setProperty(E(t),n.replace(vi,""),"important");else{var r=gi(t);if(Array.isArray(n))for(var o=0,i=n.length;o-1?t.split(xi).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function Ci(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(xi).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{var n=" "+(e.getAttribute("class")||"")+" ",r=" "+t+" ";while(n.indexOf(r)>=0)n=n.replace(r," ");n=n.trim(),n?e.setAttribute("class",n):e.removeAttribute("class")}}function Si(e){if(e){if("object"===typeof e){var t={};return!1!==e.css&&T(t,Oi(e.name||"v")),T(t,e),t}return"string"===typeof e?Oi(e):void 0}}var Oi=x((function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}})),Ei=Y&&!te,ki="transition",$i="animation",ji="transition",Ai="transitionend",Ti="animation",Mi="animationend";Ei&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ji="WebkitTransition",Ai="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Ti="WebkitAnimation",Mi="webkitAnimationEnd"));var Pi=Y?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Li(e){Pi((function(){Pi(e)}))}function Ni(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),wi(e,t))}function Ri(e,t){e._transitionClasses&&g(e._transitionClasses,t),Ci(e,t)}function Ii(e,t,n){var r=Hi(e,t),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s=o===ki?Ai:Mi,l=0,u=function(){e.removeEventListener(s,c),n()},c=function(t){t.target===e&&++l>=a&&u()};setTimeout((function(){l0&&(n=ki,c=a,f=i.length):t===$i?u>0&&(n=$i,c=u,f=l.length):(c=Math.max(a,u),n=c>0?a>u?ki:$i:null,f=n?n===ki?i.length:l.length:0);var d=n===ki&&Fi.test(r[ji+"Property"]);return{type:n,timeout:c,propCount:f,hasTransform:d}}function zi(e,t){while(e.length1}function qi(e,t){!0!==t.data.show&&Bi(t)}var Ki=Y?{create:qi,activate:qi,remove:function(e,t){!0!==e.data.show?Wi(e,t):t()}}:{},Gi=[Vo,Ko,ri,li,_i,Ki],Xi=Gi.concat(zo),Yi=Mo({nodeOps:So,modules:Xi});te&&document.addEventListener("selectionchange",(function(){var e=document.activeElement;e&&e.vmodel&&oa(e,"input")}));var Ji={inserted:function(e,t,n,r){"select"===n.tag?(r.elm&&!r.elm._vOptions?xt(n,"postpatch",(function(){Ji.componentUpdated(e,t,n)})):Zi(e,t,n.context),e._vOptions=[].map.call(e.options,ta)):("textarea"===n.tag||uo(e.type))&&(e._vModifiers=t.modifiers,t.modifiers.lazy||(e.addEventListener("compositionstart",na),e.addEventListener("compositionend",ra),e.addEventListener("change",ra),te&&(e.vmodel=!0)))},componentUpdated:function(e,t,n){if("select"===n.tag){Zi(e,t,n.context);var r=e._vOptions,o=e._vOptions=[].map.call(e.options,ta);if(o.some((function(e,t){return!R(e,r[t])}))){var i=e.multiple?t.value.some((function(e){return ea(e,o)})):t.value!==t.oldValue&&ea(t.value,o);i&&oa(e,"change")}}}};function Zi(e,t,n){Qi(e,t,n),(ee||ne)&&setTimeout((function(){Qi(e,t,n)}),0)}function Qi(e,t,n){var r=t.value,o=e.multiple;if(!o||Array.isArray(r)){for(var i,a,s=0,l=e.options.length;s-1,a.selected!==i&&(a.selected=i);else if(R(ta(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));o||(e.selectedIndex=-1)}}function ea(e,t){return t.every((function(t){return!R(t,e)}))}function ta(e){return"_value"in e?e._value:e.value}function na(e){e.target.composing=!0}function ra(e){e.target.composing&&(e.target.composing=!1,oa(e.target,"input"))}function oa(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function ia(e){return!e.componentInstance||e.data&&e.data.transition?e:ia(e.componentInstance._vnode)}var aa={bind:function(e,t,n){var r=t.value;n=ia(n);var o=n.data&&n.data.transition,i=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;r&&o?(n.data.show=!0,Bi(n,(function(){e.style.display=i}))):e.style.display=r?i:"none"},update:function(e,t,n){var r=t.value,o=t.oldValue;if(!r!==!o){n=ia(n);var i=n.data&&n.data.transition;i?(n.data.show=!0,r?Bi(n,(function(){e.style.display=e.__vOriginalDisplay})):Wi(n,(function(){e.style.display="none"}))):e.style.display=r?e.__vOriginalDisplay:"none"}},unbind:function(e,t,n,r,o){o||(e.style.display=e.__vOriginalDisplay)}},sa={model:Ji,show:aa},la={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function ua(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?ua(Cn(t.children)):e}function ca(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var o=n._parentListeners;for(var i in o)t[C(i)]=o[i];return t}function fa(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}function da(e){while(e=e.parent)if(e.data.transition)return!0}function pa(e,t){return t.key===e.key&&t.tag===e.tag}var ha=function(e){return e.tag||wn(e)},va=function(e){return"show"===e.name},ma={name:"transition",props:la,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(ha),n.length)){0;var r=this.mode;0;var o=n[0];if(da(this.$vnode))return o;var i=ua(o);if(!i)return o;if(this._leaving)return fa(e,o);var a="__transition-"+this._uid+"-";i.key=null==i.key?i.isComment?a+"comment":a+i.tag:s(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var l=(i.data||(i.data={})).transition=ca(this),u=this._vnode,c=ua(u);if(i.data.directives&&i.data.directives.some(va)&&(i.data.show=!0),c&&c.data&&!pa(i,c)&&!wn(c)&&(!c.componentInstance||!c.componentInstance._vnode.isComment)){var f=c.data.transition=T({},l);if("out-in"===r)return this._leaving=!0,xt(f,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),fa(e,o);if("in-out"===r){if(wn(i))return u;var d,p=function(){d()};xt(l,"afterEnter",p),xt(l,"enterCancelled",p),xt(f,"delayLeave",(function(e){d=e}))}}return o}}},ya=T({tag:String,moveClass:String},la);delete ya.mode;var ga={props:ya,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var o=Tn(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,o(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=ca(this),s=0;sl)r(s,n=t[l++])&&(~i(u,n)||u.push(n));return u}},"032e":function(e,t,n){var r=n("d5dc"),o=n("d68d"),i=r.document,a=o(i)&&o(i.createElement);e.exports=function(e){return a?i.createElement(e):{}}},"0532":function(e,t,n){var r=n("57c4"),o=n("ed35"),i=r("iterator"),a=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||a[i]===e)}},"0618":function(e,t,n){"use strict";var r=n("ac83");e.exports=function(){var e=r(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}},"0655":function(e,t,n){"use strict";n.r(t),function(e){var n=function(){if("undefined"!==typeof Map)return Map;function e(e,t){var n=-1;return e.some((function(e,r){return e[0]===t&&(n=r,!0)})),n}return(function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(t){var n=e(this.__entries__,t),r=this.__entries__[n];return r&&r[1]},t.prototype.set=function(t,n){var r=e(this.__entries__,t);~r?this.__entries__[r][1]=n:this.__entries__.push([t,n])},t.prototype.delete=function(t){var n=this.__entries__,r=e(n,t);~r&&n.splice(r,1)},t.prototype.has=function(t){return!!~e(this.__entries__,t)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(e,t){void 0===t&&(t=null);for(var n=0,r=this.__entries__;n0},e.prototype.connect_=function(){r&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),c?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){r&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var t=e.propertyName,n=void 0===t?"":t,r=u.some((function(e){return!!~n.indexOf(e)}));r&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),d=function(e,t){for(var n=0,r=Object.keys(t);n0},e}(),$="undefined"!==typeof WeakMap?new WeakMap:new n,j=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=f.getInstance(),r=new k(t,n,this);$.set(this,r)}return e}();["observe","unobserve","disconnect"].forEach((function(e){j.prototype[e]=function(){var t;return(t=$.get(this))[e].apply(t,arguments)}}));var A=function(){return"undefined"!==typeof o.ResizeObserver?o.ResizeObserver:j}();t["default"]=A}.call(this,n("77e5"))},"0b29":function(e,t,n){var r=n("a9f2");e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},1072:function(e,t){t.f=Object.getOwnPropertySymbols},"12d9":function(e,t,n){var r=n("f30e"),o=/#|\.prototype\./,i=function(e,t){var n=s[a(e)];return n==u||n!=l&&("function"==typeof t?r(t):!!t)},a=i.normalize=function(e){return String(e).replace(o,".").toLowerCase()},s=i.data={},l=i.NATIVE="N",u=i.POLYFILL="P";e.exports=i},"143b":function(e,t,n){"use strict";var r,o,i,a=n("90a7"),s=n("2ba5"),l=n("f28d"),u=n("57c4"),c=n("e17a"),f=u("iterator"),d=!1,p=function(){return this};[].keys&&(i=[].keys(),"next"in i?(o=a(a(i)),o!==Object.prototype&&(r=o)):d=!0),void 0==r&&(r={}),c||l(r,f)||s(r,f,p),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:d}},"16e5":function(e,t,n){var r=n("02d0"),o=n("6807");e.exports=Object.keys||function(e){return r(e,o)}},1932:function(e,t,n){"use strict";t.__esModule=!0;n("d41f");t.default={mounted:function(){},methods:{getMigratingConfig:function(){return{props:{},events:{}}}}}},"1bee":function(e,t,n){"use strict"; +/*! + * vue-router v3.1.6 + * (c) 2020 Evan You + * @license MIT + */function r(e,t){0}function o(e){return Object.prototype.toString.call(e).indexOf("Error")>-1}function i(e,t){return t instanceof e||t&&(t.name===e.name||t._name===e._name)}function a(e,t){for(var n in t)e[n]=t[n];return e}var s={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(e,t){var n=t.props,r=t.children,o=t.parent,i=t.data;i.routerView=!0;var s=o.$createElement,u=n.name,c=o.$route,f=o._routerViewCache||(o._routerViewCache={}),d=0,p=!1;while(o&&o._routerRoot!==o){var h=o.$vnode?o.$vnode.data:{};h.routerView&&d++,h.keepAlive&&o._directInactive&&o._inactive&&(p=!0),o=o.$parent}if(i.routerViewDepth=d,p){var v=f[u],m=v&&v.component;return m?(v.configProps&&l(m,i,v.route,v.configProps),s(m,i,r)):s()}var y=c.matched[d],g=y&&y.components[u];if(!y||!g)return f[u]=null,s();f[u]={component:g},i.registerRouteInstance=function(e,t){var n=y.instances[u];(t&&n!==e||!t&&n===e)&&(y.instances[u]=t)},(i.hook||(i.hook={})).prepatch=function(e,t){y.instances[u]=t.componentInstance},i.hook.init=function(e){e.data.keepAlive&&e.componentInstance&&e.componentInstance!==y.instances[u]&&(y.instances[u]=e.componentInstance)};var b=y.props&&y.props[u];return b&&(a(f[u],{route:c,configProps:b}),l(g,i,c,b)),s(g,i,r)}};function l(e,t,n,r){var o=t.props=u(n,r);if(o){o=t.props=a({},o);var i=t.attrs=t.attrs||{};for(var s in o)e.props&&s in e.props||(i[s]=o[s],delete o[s])}}function u(e,t){switch(typeof t){case"undefined":return;case"object":return t;case"function":return t(e);case"boolean":return t?e.params:void 0;default:0}}var c=/[!'()*]/g,f=function(e){return"%"+e.charCodeAt(0).toString(16)},d=/%2C/g,p=function(e){return encodeURIComponent(e).replace(c,f).replace(d,",")},h=decodeURIComponent;function v(e,t,n){void 0===t&&(t={});var r,o=n||m;try{r=o(e||"")}catch(a){r={}}for(var i in t)r[i]=t[i];return r}function m(e){var t={};return e=e.trim().replace(/^(\?|#|&)/,""),e?(e.split("&").forEach((function(e){var n=e.replace(/\+/g," ").split("="),r=h(n.shift()),o=n.length>0?h(n.join("=")):null;void 0===t[r]?t[r]=o:Array.isArray(t[r])?t[r].push(o):t[r]=[t[r],o]})),t):t}function y(e){var t=e?Object.keys(e).map((function(t){var n=e[t];if(void 0===n)return"";if(null===n)return p(t);if(Array.isArray(n)){var r=[];return n.forEach((function(e){void 0!==e&&(null===e?r.push(p(t)):r.push(p(t)+"="+p(e)))})),r.join("&")}return p(t)+"="+p(n)})).filter((function(e){return e.length>0})).join("&"):null;return t?"?"+t:""}var g=/\/?$/;function b(e,t,n,r){var o=r&&r.options.stringifyQuery,i=t.query||{};try{i=_(i)}catch(s){}var a={name:t.name||e&&e.name,meta:e&&e.meta||{},path:t.path||"/",hash:t.hash||"",query:i,params:t.params||{},fullPath:C(t,o),matched:e?w(e):[]};return n&&(a.redirectedFrom=C(n,o)),Object.freeze(a)}function _(e){if(Array.isArray(e))return e.map(_);if(e&&"object"===typeof e){var t={};for(var n in e)t[n]=_(e[n]);return t}return e}var x=b(null,{path:"/"});function w(e){var t=[];while(e)t.unshift(e),e=e.parent;return t}function C(e,t){var n=e.path,r=e.query;void 0===r&&(r={});var o=e.hash;void 0===o&&(o="");var i=t||y;return(n||"/")+i(r)+o}function S(e,t){return t===x?e===t:!!t&&(e.path&&t.path?e.path.replace(g,"")===t.path.replace(g,"")&&e.hash===t.hash&&O(e.query,t.query):!(!e.name||!t.name)&&(e.name===t.name&&e.hash===t.hash&&O(e.query,t.query)&&O(e.params,t.params)))}function O(e,t){if(void 0===e&&(e={}),void 0===t&&(t={}),!e||!t)return e===t;var n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every((function(n){var r=e[n],o=t[n];return"object"===typeof r&&"object"===typeof o?O(r,o):String(r)===String(o)}))}function E(e,t){return 0===e.path.replace(g,"/").indexOf(t.path.replace(g,"/"))&&(!t.hash||e.hash===t.hash)&&k(e.query,t.query)}function k(e,t){for(var n in t)if(!(n in e))return!1;return!0}function $(e,t,n){var r=e.charAt(0);if("/"===r)return e;if("?"===r||"#"===r)return t+e;var o=t.split("/");n&&o[o.length-1]||o.pop();for(var i=e.replace(/^\//,"").split("/"),a=0;a=0&&(t=e.slice(r),e=e.slice(0,r));var o=e.indexOf("?");return o>=0&&(n=e.slice(o+1),e=e.slice(0,o)),{path:e,query:n,hash:t}}function A(e){return e.replace(/\/\//g,"/")}var T=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)},M=J,P=F,L=H,N=B,R=Y,I=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function F(e,t){var n,r=[],o=0,i=0,a="",s=t&&t.delimiter||"/";while(null!=(n=I.exec(e))){var l=n[0],u=n[1],c=n.index;if(a+=e.slice(i,c),i=c+l.length,u)a+=u[1];else{var f=e[i],d=n[2],p=n[3],h=n[4],v=n[5],m=n[6],y=n[7];a&&(r.push(a),a="");var g=null!=d&&null!=f&&f!==d,b="+"===m||"*"===m,_="?"===m||"*"===m,x=n[2]||s,w=h||v;r.push({name:p||o++,prefix:d||"",delimiter:x,optional:_,repeat:b,partial:g,asterisk:!!y,pattern:w?V(w):y?".*":"[^"+W(x)+"]+?"})}}return i1||!x.length)return 0===x.length?e():e("span",{},x)}if("a"===this.tag)_.on=g,_.attrs={href:l};else{var w=se(this.$slots.default);if(w){w.isStatic=!1;var C=w.data=a({},w.data);for(var O in C.on=C.on||{},C.on){var k=C.on[O];O in g&&(C.on[O]=Array.isArray(k)?k:[k])}for(var $ in g)$ in C.on?C.on[$].push(g[$]):C.on[$]=y;var j=w.data.attrs=a({},w.data.attrs);j.href=l}else _.on=g}return e(this.tag,_,this.$slots.default)}};function ae(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&(void 0===e.button||0===e.button)){if(e.currentTarget&&e.currentTarget.getAttribute){var t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function se(e){if(e)for(var t,n=0;n-1&&(s.params[d]=n.params[d]);return s.path=Q(u.path,s.params,'named route "'+l+'"'),c(u,s,a)}if(s.path){s.params={};for(var p=0;p=e.length?n():e[o]?t(e[o],(function(){r(o+1)})):r(o+1)};r(0)}function Fe(e){return function(t,n,r){var i=!1,a=0,s=null;He(e,(function(e,t,n,l){if("function"===typeof e&&void 0===e.cid){i=!0,a++;var u,c=We((function(t){Be(t)&&(t=t.default),e.resolved="function"===typeof t?t:te.extend(t),n.components[l]=t,a--,a<=0&&r()})),f=We((function(e){var t="Failed to resolve async component "+l+": "+e;s||(s=o(e)?e:new Error(t),r(s))}));try{u=e(c,f)}catch(p){f(p)}if(u)if("function"===typeof u.then)u.then(c,f);else{var d=u.component;d&&"function"===typeof d.then&&d.then(c,f)}}})),i||r()}}function He(e,t){return ze(e.map((function(e){return Object.keys(e.components).map((function(n){return t(e.components[n],e.instances[n],e,n)}))})))}function ze(e){return Array.prototype.concat.apply([],e)}var De="function"===typeof Symbol&&"symbol"===typeof Symbol.toStringTag;function Be(e){return e.__esModule||De&&"Module"===e[Symbol.toStringTag]}function We(e){var t=!1;return function(){var n=[],r=arguments.length;while(r--)n[r]=arguments[r];if(!t)return t=!0,e.apply(this,n)}}var Ve=function(e){function t(t){e.call(this),this.name=this._name="NavigationDuplicated",this.message='Navigating to current location ("'+t.fullPath+'") is not allowed',Object.defineProperty(this,"stack",{value:(new e).stack,writable:!0,configurable:!0})}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t}(Error);Ve._name="NavigationDuplicated";var Ue=function(e,t){this.router=e,this.base=qe(t),this.current=x,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[]};function qe(e){if(!e)if(ue){var t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^https?:\/\/[^\/]+/,"")}else e="/";return"/"!==e.charAt(0)&&(e="/"+e),e.replace(/\/$/,"")}function Ke(e,t){var n,r=Math.max(e.length,t.length);for(n=0;n-1?decodeURI(e.slice(0,r))+e.slice(r):decodeURI(e)}else e=decodeURI(e.slice(0,n))+e.slice(n);return e}function lt(e){var t=window.location.href,n=t.indexOf("#"),r=n>=0?t.slice(0,n):t;return r+"#"+e}function ut(e){Le?Ne(lt(e)):window.location.hash=e}function ct(e){Le?Re(lt(e)):window.location.replace(lt(e))}var ft=function(e){function t(t,n){e.call(this,t,n),this.stack=[],this.index=-1}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.push=function(e,t,n){var r=this;this.transitionTo(e,(function(e){r.stack=r.stack.slice(0,r.index+1).concat(e),r.index++,t&&t(e)}),n)},t.prototype.replace=function(e,t,n){var r=this;this.transitionTo(e,(function(e){r.stack=r.stack.slice(0,r.index).concat(e),t&&t(e)}),n)},t.prototype.go=function(e){var t=this,n=this.index+e;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){t.index=n,t.updateRoute(r)}),(function(e){i(Ve,e)&&(t.index=n)}))}},t.prototype.getCurrentLocation=function(){var e=this.stack[this.stack.length-1];return e?e.fullPath:"/"},t.prototype.ensureURL=function(){},t}(Ue),dt=function(e){void 0===e&&(e={}),this.app=null,this.apps=[],this.options=e,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=he(e.routes||[],this);var t=e.mode||"hash";switch(this.fallback="history"===t&&!Le&&!1!==e.fallback,this.fallback&&(t="hash"),ue||(t="abstract"),this.mode=t,t){case"history":this.history=new nt(this,e.base);break;case"hash":this.history=new ot(this,e.base,this.fallback);break;case"abstract":this.history=new ft(this,e.base);break;default:0}},pt={currentRoute:{configurable:!0}};function ht(e,t){return e.push(t),function(){var n=e.indexOf(t);n>-1&&e.splice(n,1)}}function vt(e,t,n){var r="hash"===n?"#"+t:t;return e?A(e+"/"+r):r}dt.prototype.match=function(e,t,n){return this.matcher.match(e,t,n)},pt.currentRoute.get=function(){return this.history&&this.history.current},dt.prototype.init=function(e){var t=this;if(this.apps.push(e),e.$once("hook:destroyed",(function(){var n=t.apps.indexOf(e);n>-1&&t.apps.splice(n,1),t.app===e&&(t.app=t.apps[0]||null)})),!this.app){this.app=e;var n=this.history;if(n instanceof nt)n.transitionTo(n.getCurrentLocation());else if(n instanceof ot){var r=function(){n.setupListeners()};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(e){t.apps.forEach((function(t){t._route=e}))}))}},dt.prototype.beforeEach=function(e){return ht(this.beforeHooks,e)},dt.prototype.beforeResolve=function(e){return ht(this.resolveHooks,e)},dt.prototype.afterEach=function(e){return ht(this.afterHooks,e)},dt.prototype.onReady=function(e,t){this.history.onReady(e,t)},dt.prototype.onError=function(e){this.history.onError(e)},dt.prototype.push=function(e,t,n){var r=this;if(!t&&!n&&"undefined"!==typeof Promise)return new Promise((function(t,n){r.history.push(e,t,n)}));this.history.push(e,t,n)},dt.prototype.replace=function(e,t,n){var r=this;if(!t&&!n&&"undefined"!==typeof Promise)return new Promise((function(t,n){r.history.replace(e,t,n)}));this.history.replace(e,t,n)},dt.prototype.go=function(e){this.history.go(e)},dt.prototype.back=function(){this.go(-1)},dt.prototype.forward=function(){this.go(1)},dt.prototype.getMatchedComponents=function(e){var t=e?e.matched?e:this.resolve(e).route:this.currentRoute;return t?[].concat.apply([],t.matched.map((function(e){return Object.keys(e.components).map((function(t){return e.components[t]}))}))):[]},dt.prototype.resolve=function(e,t,n){t=t||this.history.current;var r=ee(e,t,n,this),o=this.match(r,t),i=o.redirectedFrom||o.fullPath,a=this.history.base,s=vt(a,i,this.mode);return{location:r,route:o,href:s,normalizedTo:r,resolved:o}},dt.prototype.addRoutes=function(e){this.matcher.addRoutes(e),this.history.current!==x&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(dt.prototype,pt),dt.install=le,dt.version="3.1.6",ue&&window.Vue&&window.Vue.use(dt),t["a"]=dt},"1ce0":function(e,t,n){},"1f4f":function(e,t,n){"use strict";t.__esModule=!0;var r=n("6406");t.default={methods:{t:function(){for(var e=arguments.length,t=Array(e),n=0;n1&&console.warn("WARNING: the given `parent` query("+t.parent+") matched more than one element, the first one will be used"),0===a.length)throw"ERROR: the given `parent` doesn't exists!";a=a[0]}return a.length>1&&a instanceof Element===!1&&(console.warn("WARNING: you have passed as parent a list of elements, the first one will be used"),a=a[0]),a.appendChild(o),o;function s(e,t){t.forEach((function(t){e.classList.add(t)}))}function l(e,t){t.forEach((function(t){e.setAttribute(t.split(":")[0],t.split(":")[1]||"")}))}},n.prototype._getPosition=function(e,t){var n=l(t);if(this._options.forceAbsolute)return"absolute";var r=c(t,n);return r?"fixed":"absolute"},n.prototype._getOffsets=function(e,t,n){n=n.split("-")[0];var o={};o.position=this.state.position;var i="fixed"===o.position,a=v(t,l(e),i),s=r(e);return-1!==["right","left"].indexOf(n)?(o.top=a.top+a.height/2-s.height/2,o.left="left"===n?a.left-s.width:a.right):(o.left=a.left+a.width/2-s.width/2,o.top="top"===n?a.top-s.height:a.bottom),o.width=s.width,o.height=s.height,{popper:o,reference:a}},n.prototype._setupEventListeners=function(){if(this.state.updateBound=this.update.bind(this),e.addEventListener("resize",this.state.updateBound),"window"!==this._options.boundariesElement){var t=u(this._reference);t!==e.document.body&&t!==e.document.documentElement||(t=e),t.addEventListener("scroll",this.state.updateBound),this.state.scrollTarget=t}},n.prototype._removeEventListeners=function(){e.removeEventListener("resize",this.state.updateBound),"window"!==this._options.boundariesElement&&this.state.scrollTarget&&(this.state.scrollTarget.removeEventListener("scroll",this.state.updateBound),this.state.scrollTarget=null),this.state.updateBound=null},n.prototype._getBoundaries=function(t,n,r){var o,i,a={};if("window"===r){var s=e.document.body,c=e.document.documentElement;i=Math.max(s.scrollHeight,s.offsetHeight,c.clientHeight,c.scrollHeight,c.offsetHeight),o=Math.max(s.scrollWidth,s.offsetWidth,c.clientWidth,c.scrollWidth,c.offsetWidth),a={top:0,right:o,bottom:i,left:0}}else if("viewport"===r){var f=l(this._popper),d=u(this._popper),h=p(f),v=function(e){return e==document.body?Math.max(document.documentElement.scrollTop,document.body.scrollTop):e.scrollTop},m=function(e){return e==document.body?Math.max(document.documentElement.scrollLeft,document.body.scrollLeft):e.scrollLeft},y="fixed"===t.offsets.popper.position?0:v(d),g="fixed"===t.offsets.popper.position?0:m(d);a={top:0-(h.top-y),right:e.document.documentElement.clientWidth-(h.left-g),bottom:e.document.documentElement.clientHeight-(h.top-y),left:0-(h.left-g)}}else a=l(this._popper)===r?{top:0,left:0,right:r.clientWidth,bottom:r.clientHeight}:p(r);return a.left+=n,a.right-=n,a.top=a.top+n,a.bottom=a.bottom-n,a},n.prototype.runModifiers=function(e,t,n){var r=t.slice();return void 0!==n&&(r=this._options.modifiers.slice(0,a(this._options.modifiers,n))),r.forEach(function(t){d(t)&&(e=t.call(this,e))}.bind(this)),e},n.prototype.isModifierRequired=function(e,t){var n=a(this._options.modifiers,e);return!!this._options.modifiers.slice(0,n).filter((function(e){return e===t})).length},n.prototype.modifiers={},n.prototype.modifiers.applyStyle=function(e){var t,n={position:e.offsets.popper.position},r=Math.round(e.offsets.popper.left),o=Math.round(e.offsets.popper.top);return this._options.gpuAcceleration&&(t=m("transform"))?(n[t]="translate3d("+r+"px, "+o+"px, 0)",n.top=0,n.left=0):(n.left=r,n.top=o),Object.assign(n,e.styles),f(this._popper,n),this._popper.setAttribute("x-placement",e.placement),this.isModifierRequired(this.modifiers.applyStyle,this.modifiers.arrow)&&e.offsets.arrow&&f(e.arrowElement,e.offsets.arrow),e},n.prototype.modifiers.shift=function(e){var t=e.placement,n=t.split("-")[0],r=t.split("-")[1];if(r){var o=e.offsets.reference,a=i(e.offsets.popper),s={y:{start:{top:o.top},end:{top:o.top+o.height-a.height}},x:{start:{left:o.left},end:{left:o.left+o.width-a.width}}},l=-1!==["bottom","top"].indexOf(n)?"x":"y";e.offsets.popper=Object.assign(a,s[l][r])}return e},n.prototype.modifiers.preventOverflow=function(e){var t=this._options.preventOverflowOrder,n=i(e.offsets.popper),r={left:function(){var t=n.left;return n.lefte.boundaries.right&&(t=Math.min(n.left,e.boundaries.right-n.width)),{left:t}},top:function(){var t=n.top;return n.tope.boundaries.bottom&&(t=Math.min(n.top,e.boundaries.bottom-n.height)),{top:t}}};return t.forEach((function(t){e.offsets.popper=Object.assign(n,r[t]())})),e},n.prototype.modifiers.keepTogether=function(e){var t=i(e.offsets.popper),n=e.offsets.reference,r=Math.floor;return t.rightr(n.right)&&(e.offsets.popper.left=r(n.right)),t.bottomr(n.bottom)&&(e.offsets.popper.top=r(n.bottom)),e},n.prototype.modifiers.flip=function(e){if(!this.isModifierRequired(this.modifiers.flip,this.modifiers.preventOverflow))return console.warn("WARNING: preventOverflow modifier is required by flip modifier in order to work, be sure to include it before flip!"),e;if(e.flipped&&e.placement===e._originalPlacement)return e;var t=e.placement.split("-")[0],n=o(t),r=e.placement.split("-")[1]||"",a=[];return a="flip"===this._options.flipBehavior?[t,n]:this._options.flipBehavior,a.forEach(function(s,l){if(t===s&&a.length!==l+1){t=e.placement.split("-")[0],n=o(t);var u=i(e.offsets.popper),c=-1!==["right","bottom"].indexOf(t);(c&&Math.floor(e.offsets.reference[t])>Math.floor(u[n])||!c&&Math.floor(e.offsets.reference[t])s[p]&&(e.offsets.popper[f]+=l[f]+h-s[p]);var v=l[f]+(n||l[c]/2-h/2),m=v-s[f];return m=Math.max(Math.min(s[c]-h-8,m),8),o[f]=m,o[d]="",e.offsets.arrow=o,e.arrowElement=t,e},Object.assign||Object.defineProperty(Object,"assign",{enumerable:!1,configurable:!0,writable:!0,value:function(e){if(void 0===e||null===e)throw new TypeError("Cannot convert first argument to object");for(var t=Object(e),n=1;nn},ie64:function(){return b.ie()&&d},firefox:function(){return g()||r},opera:function(){return g()||o},webkit:function(){return g()||i},safari:function(){return b.webkit()},chrome:function(){return g()||a},windows:function(){return g()||u},osx:function(){return g()||l},linux:function(){return g()||c},iphone:function(){return g()||p},mobile:function(){return g()||p||h||f||m},nativeApp:function(){return g()||v},android:function(){return g()||f},ipad:function(){return g()||h}};e.exports=b},"2ba5":function(e,t,n){var r=n("7a23"),o=n("c223"),i=n("aec8");e.exports=r?function(e,t,n){return o.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},"2bba":function(e,t,n){var r=n("ac83");e.exports=function(e,t,n,o){try{return o?t(r(n)[0],n[1]):t(n)}catch(a){var i=e["return"];throw void 0!==i&&r(i.call(e)),a}}},3109:function(e,t,n){var r=n("d5dc"),o=n("527d"),i=r.WeakMap;e.exports="function"===typeof i&&/native code/.test(o(i))},3193:function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},"354c":function(e,t,n){"use strict";var r={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!r.call({1:2},1);t.f=i?function(e){var t=o(this,e);return!!t&&t.enumerable}:r},"375c":function(e,t,n){},"3a20":function(e,t,n){var r=n("efd1"),o=n("3d8a"),i=n("3f8e");r||o(Object.prototype,"toString",i,{unsafe:!0})},"3c84":function(e,t,n){"use strict";t.__esModule=!0,t.isInContainer=t.getScrollContainer=t.isScroll=t.getStyle=t.once=t.off=t.on=void 0;var r="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.hasClass=v,t.addClass=m,t.removeClass=y,t.setStyle=b;var o=n("0261"),i=a(o);function a(e){return e&&e.__esModule?e:{default:e}}var s=i.default.prototype.$isServer,l=/([\:\-\_]+(.))/g,u=/^moz([A-Z])/,c=s?0:Number(document.documentMode),f=function(e){return(e||"").replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g,"")},d=function(e){return e.replace(l,(function(e,t,n,r){return r?n.toUpperCase():n})).replace(u,"Moz$1")},p=t.on=function(){return!s&&document.addEventListener?function(e,t,n){e&&t&&n&&e.addEventListener(t,n,!1)}:function(e,t,n){e&&t&&n&&e.attachEvent("on"+t,n)}}(),h=t.off=function(){return!s&&document.removeEventListener?function(e,t,n){e&&t&&e.removeEventListener(t,n,!1)}:function(e,t,n){e&&t&&e.detachEvent("on"+t,n)}}();t.once=function(e,t,n){var r=function r(){n&&n.apply(this,arguments),h(e,t,r)};p(e,t,r)};function v(e,t){if(!e||!t)return!1;if(-1!==t.indexOf(" "))throw new Error("className should not contain space.");return e.classList?e.classList.contains(t):(" "+e.className+" ").indexOf(" "+t+" ")>-1}function m(e,t){if(e){for(var n=e.className,r=(t||"").split(" "),o=0,i=r.length;or.top&&n.right>r.left&&n.left2&&void 0!==arguments[2]?arguments[2]:300,r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!e||!t)throw new Error("instance & callback is required");var o=!1,i=function(){o||(o=!0,t&&t.apply(null,arguments))};r?e.$once("after-leave",i):e.$on("after-leave",i),setTimeout((function(){i()}),n+100)}},"3d8a":function(e,t,n){var r=n("d5dc"),o=n("2ba5"),i=n("f28d"),a=n("200e"),s=n("527d"),l=n("d0e2"),u=l.get,c=l.enforce,f=String(String).split("String");(e.exports=function(e,t,n,s){var l=!!s&&!!s.unsafe,u=!!s&&!!s.enumerable,d=!!s&&!!s.noTargetGet;"function"==typeof n&&("string"!=typeof t||i(n,"name")||o(n,"name",t),c(n).source=f.join("string"==typeof t?t:"")),e!==r?(l?!d&&e[t]&&(u=!0):delete e[t],u?e[t]=n:o(e,t,n)):u?e[t]=n:a(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&u(this).source||s(this)}))},"3f5d":function(e,t,n){"use strict";var r=!("undefined"===typeof window||!window.document||!window.document.createElement),o={canUseDOM:r,canUseWorkers:"undefined"!==typeof Worker,canUseEventListeners:r&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:r&&!!window.screen,isInWorker:!r};e.exports=o},"3f8e":function(e,t,n){"use strict";var r=n("efd1"),o=n("9552");e.exports=r?{}.toString:function(){return"[object "+o(this)+"]"}},"40d4":function(e,t){e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return e}},"417f":function(e,t,n){var r=n("3d8a");e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},4301:function(e,t,n){var r=n("ac83"),o=n("d68d"),i=n("df22");e.exports=function(e,t){if(r(e),o(t)&&t.constructor===e)return t;var n=i.f(e),a=n.resolve;return a(t),n.promise}},4445:function(e,t,n){var r=n("4ccd");e.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},4888:function(e,t){e.exports={}},"4aef":function(e,t,n){var r=n("7a23"),o=n("354c"),i=n("aec8"),a=n("8c47"),s=n("7dc7"),l=n("f28d"),u=n("88b4"),c=Object.getOwnPropertyDescriptor;t.f=r?c:function(e,t){if(e=a(e),t=s(t,!0),u)try{return c(e,t)}catch(n){}if(l(e,t))return i(!o.f.call(e,t),e[t])}},"4ccd":function(e,t,n){var r=n("f30e");e.exports=!!Object.getOwnPropertySymbols&&!r((function(){return!String(Symbol())}))},"4ce0":function(e,t,n){var r=n("ac83"),o=n("da66");e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{e=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set,e.call(n,[]),t=n instanceof Array}catch(i){}return function(n,i){return r(n),o(i),t?e.call(n,i):n.__proto__=i,n}}():void 0)},"4d52":function(e,t,n){var r=n("f880"),o=n("9db6"),i=r("keys");e.exports=function(e){return i[e]||(i[e]=o(e))}},"4dbf":function(e,t,n){},"4eda":function(e,t,n){"use strict";t.__esModule=!0,t.PopupManager=void 0;var r=n("0261"),o=d(r),i=n("e93e"),a=d(i),s=n("7b6d"),l=d(s),u=n("e536"),c=d(u),f=n("3c84");function d(e){return e&&e.__esModule?e:{default:e}}var p=1,h=void 0;t.default={props:{visible:{type:Boolean,default:!1},openDelay:{},closeDelay:{},zIndex:{},modal:{type:Boolean,default:!1},modalFade:{type:Boolean,default:!0},modalClass:{},modalAppendToBody:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!1},closeOnClickModal:{type:Boolean,default:!1}},beforeMount:function(){this._popupId="popup-"+p++,l.default.register(this._popupId,this)},beforeDestroy:function(){l.default.deregister(this._popupId),l.default.closeModal(this._popupId),this.restoreBodyStyle()},data:function(){return{opened:!1,bodyPaddingRight:null,computedBodyPaddingRight:0,withoutHiddenClass:!0,rendered:!1}},watch:{visible:function(e){var t=this;if(e){if(this._opening)return;this.rendered?this.open():(this.rendered=!0,o.default.nextTick((function(){t.open()})))}else this.close()}},methods:{open:function(e){var t=this;this.rendered||(this.rendered=!0);var n=(0,a.default)({},this.$props||this,e);this._closeTimer&&(clearTimeout(this._closeTimer),this._closeTimer=null),clearTimeout(this._openTimer);var r=Number(n.openDelay);r>0?this._openTimer=setTimeout((function(){t._openTimer=null,t.doOpen(n)}),r):this.doOpen(n)},doOpen:function(e){if(!this.$isServer&&(!this.willOpen||this.willOpen())&&!this.opened){this._opening=!0;var t=this.$el,n=e.modal,r=e.zIndex;if(r&&(l.default.zIndex=r),n&&(this._closing&&(l.default.closeModal(this._popupId),this._closing=!1),l.default.openModal(this._popupId,l.default.nextZIndex(),this.modalAppendToBody?void 0:t,e.modalClass,e.modalFade),e.lockScroll)){this.withoutHiddenClass=!(0,f.hasClass)(document.body,"el-popup-parent--hidden"),this.withoutHiddenClass&&(this.bodyPaddingRight=document.body.style.paddingRight,this.computedBodyPaddingRight=parseInt((0,f.getStyle)(document.body,"paddingRight"),10)),h=(0,c.default)();var o=document.documentElement.clientHeight0&&(o||"scroll"===i)&&this.withoutHiddenClass&&(document.body.style.paddingRight=this.computedBodyPaddingRight+h+"px"),(0,f.addClass)(document.body,"el-popup-parent--hidden")}"static"===getComputedStyle(t).position&&(t.style.position="absolute"),t.style.zIndex=l.default.nextZIndex(),this.opened=!0,this.onOpen&&this.onOpen(),this.doAfterOpen()}},doAfterOpen:function(){this._opening=!1},close:function(){var e=this;if(!this.willClose||this.willClose()){null!==this._openTimer&&(clearTimeout(this._openTimer),this._openTimer=null),clearTimeout(this._closeTimer);var t=Number(this.closeDelay);t>0?this._closeTimer=setTimeout((function(){e._closeTimer=null,e.doClose()}),t):this.doClose()}},doClose:function(){this._closing=!0,this.onClose&&this.onClose(),this.lockScroll&&setTimeout(this.restoreBodyStyle,200),this.opened=!1,this.doAfterClose()},doAfterClose:function(){l.default.closeModal(this._popupId),this._closing=!1},restoreBodyStyle:function(){this.modal&&this.withoutHiddenClass&&(document.body.style.paddingRight=this.bodyPaddingRight,(0,f.removeClass)(document.body,"el-popup-parent--hidden")),this.withoutHiddenClass=!0}}},t.PopupManager=l.default},"4f91":function(e,t,n){"use strict";t.__esModule=!0;var r=r||{};r.Utils=r.Utils||{},r.Utils.focusFirstDescendant=function(e){for(var t=0;t=0;t--){var n=e.childNodes[t];if(r.Utils.attemptFocus(n)||r.Utils.focusLastDescendant(n))return!0}return!1},r.Utils.attemptFocus=function(e){if(!r.Utils.isFocusable(e))return!1;r.Utils.IgnoreUtilFocusChanges=!0;try{e.focus()}catch(t){}return r.Utils.IgnoreUtilFocusChanges=!1,document.activeElement===e},r.Utils.isFocusable=function(e){if(e.tabIndex>0||0===e.tabIndex&&null!==e.getAttribute("tabIndex"))return!0;if(e.disabled)return!1;switch(e.nodeName){case"A":return!!e.href&&"ignore"!==e.rel;case"INPUT":return"hidden"!==e.type&&"file"!==e.type;case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},r.Utils.triggerEvent=function(e,t){var n=void 0;n=/^mouse|click/.test(t)?"MouseEvents":/^key/.test(t)?"KeyboardEvent":"HTMLEvents";for(var r=document.createEvent(n),o=arguments.length,i=Array(o>2?o-2:0),a=2;al)o.f(e,n=r[l++],t[n]);return e}},5646:function(e,t,n){"use strict";var r=n("91fe"),o=n("ed51"),i=n("90a7"),a=n("4ce0"),s=n("94d7"),l=n("2ba5"),u=n("3d8a"),c=n("57c4"),f=n("e17a"),d=n("ed35"),p=n("143b"),h=p.IteratorPrototype,v=p.BUGGY_SAFARI_ITERATORS,m=c("iterator"),y="keys",g="values",b="entries",_=function(){return this};e.exports=function(e,t,n,c,p,x,w){o(n,t,c);var C,S,O,E=function(e){if(e===p&&T)return T;if(!v&&e in j)return j[e];switch(e){case y:return function(){return new n(this,e)};case g:return function(){return new n(this,e)};case b:return function(){return new n(this,e)}}return function(){return new n(this)}},k=t+" Iterator",$=!1,j=e.prototype,A=j[m]||j["@@iterator"]||p&&j[p],T=!v&&A||E(p),M="Array"==t&&j.entries||A;if(M&&(C=i(M.call(new e)),h!==Object.prototype&&C.next&&(f||i(C)===h||(a?a(C,h):"function"!=typeof C[m]&&l(C,m,_)),s(C,k,!0,!0),f&&(d[k]=_))),p==g&&A&&A.name!==g&&($=!0,T=function(){return A.call(this)}),f&&!w||j[m]===T||l(j,m,T),d[t]=T,p)if(S={values:E(g),keys:x?T:E(y),entries:E(b)},w)for(O in S)!v&&!$&&O in j||u(j,O,S[O]);else r({target:t,proto:!0,forced:v||$},S);return S}},5751:function(e,t,n){var r=n("57c4"),o=n("641d"),i=n("c223"),a=r("unscopables"),s=Array.prototype;void 0==s[a]&&i.f(s,a,{configurable:!0,value:o(null)}),e.exports=function(e){s[a][e]=!0}},"57c4":function(e,t,n){var r=n("d5dc"),o=n("f880"),i=n("f28d"),a=n("9db6"),s=n("4ccd"),l=n("4445"),u=o("wks"),c=r.Symbol,f=l?c:c&&c.withoutSetter||a;e.exports=function(e){return i(u,e)||(s&&i(c,e)?u[e]=c[e]:u[e]=f("Symbol."+e)),u[e]}},"5baf":function(e,t,n){"use strict";var r=function(e){return o(e)&&!i(e)};function o(e){return!!e&&"object"===typeof e}function i(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||l(e)}var a="function"===typeof Symbol&&Symbol.for,s=a?Symbol.for("react.element"):60103;function l(e){return e.$$typeof===s}function u(e){return Array.isArray(e)?[]:{}}function c(e,t){var n=t&&!0===t.clone;return n&&r(e)?p(u(e),e,t):e}function f(e,t,n){var o=e.slice();return t.forEach((function(t,i){"undefined"===typeof o[i]?o[i]=c(t,n):r(t)?o[i]=p(e[i],t,n):-1===e.indexOf(t)&&o.push(c(t,n))})),o}function d(e,t,n){var o={};return r(e)&&Object.keys(e).forEach((function(t){o[t]=c(e[t],n)})),Object.keys(t).forEach((function(i){r(t[i])&&e[i]?o[i]=p(e[i],t[i],n):o[i]=c(t[i],n)})),o}function p(e,t,n){var r=Array.isArray(t),o=Array.isArray(e),i=n||{arrayMerge:f},a=r===o;if(a){if(r){var s=i.arrayMerge||f;return s(e,t,n)}return d(e,t,n)}return c(t,n)}p.all=function(e,t){if(!Array.isArray(e)||e.length<2)throw new Error("first argument should be an array with at least two elements");return e.reduce((function(e,n){return p(e,n,t)}))};var h=p;e.exports=h},"5c90":function(e,t){e.exports=function(e){try{return{error:!1,value:e()}}catch(t){return{error:!0,value:t}}}},"60f8":function(e,t){e.exports=function(e,t,n,r){var o,i=0;function a(){var a=this,s=Number(new Date)-i,l=arguments;function u(){i=Number(new Date),n.apply(a,l)}function c(){o=void 0}r&&!o&&u(),o&&clearTimeout(o),void 0===r&&s>e?u():!0!==t&&(o=setTimeout(r?c:u,void 0===r?e-s:e))}return("boolean"!==typeof t&&(r=n,n=t,t=void 0),a)}},"618d":function(e,t,n){"use strict";var r=n("91fe"),o=n("e17a"),i=n("644f"),a=n("f30e"),s=n("df50"),l=n("fb8e"),u=n("4301"),c=n("3d8a"),f=!!i&&a((function(){i.prototype["finally"].call({then:function(){}},(function(){}))}));r({target:"Promise",proto:!0,real:!0,forced:f},{finally:function(e){var t=l(this,s("Promise")),n="function"==typeof e;return this.then(n?function(n){return u(t,e()).then((function(){return n}))}:e,n?function(n){return u(t,e()).then((function(){throw n}))}:e)}}),o||"function"!=typeof i||i.prototype["finally"]||c(i.prototype,"finally",s("Promise").prototype["finally"])},"623f":function(e,t,n){"use strict";function r(e,t,n,r,o,i,a,s){var l,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):o&&(l=s?function(){o.call(this,this.$root.$options.shadowRoot)}:o),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var f=u.beforeCreate;u.beforeCreate=f?[].concat(f,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},"63ec":function(e,t,n){var r=n("60f8"),o=n("ca47");e.exports={throttle:r,debounce:o}},6406:function(e,t,n){"use strict";t.__esModule=!0,t.i18n=t.use=t.t=void 0;var r=n("83a6"),o=f(r),i=n("0261"),a=f(i),s=n("5baf"),l=f(s),u=n("88e7"),c=f(u);function f(e){return e&&e.__esModule?e:{default:e}}var d=(0,c.default)(a.default),p=o.default,h=!1,v=function(){var e=Object.getPrototypeOf(this||a.default).$t;if("function"===typeof e&&a.default.locale)return h||(h=!0,a.default.locale(a.default.config.lang,(0,l.default)(p,a.default.locale(a.default.config.lang)||{},{clone:!0}))),e.apply(this,arguments)},m=t.t=function(e,t){var n=v.apply(this,arguments);if(null!==n&&void 0!==n)return n;for(var r=e.split("."),o=p,i=0,a=r.length;i",d="<",p="prototype",h="script",v=c("IE_PROTO"),m=function(){},y=function(e){return d+h+f+e+d+"/"+h+f},g=function(e){e.write(y("")),e.close();var t=e.parentWindow.Object;return e=null,t},b=function(){var e,t=u("iframe"),n="java"+h+":";return t.style.display="none",l.appendChild(t),t.src=String(n),e=t.contentWindow.document,e.open(),e.write(y("document.F=Object")),e.close(),e.F},_=function(){try{r=document.domain&&new ActiveXObject("htmlfile")}catch(t){}_=r?g(r):b();var e=a.length;while(e--)delete _[p][a[e]];return _()};s[v]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(m[p]=o(e),n=new m,m[p]=null,n[v]=e):n=_(),void 0===t?n:i(n,t)}},"644f":function(e,t,n){var r=n("d5dc");e.exports=r.Promise},"64d6":function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=124)}({0:function(e,t,n){"use strict";function r(e,t,n,r,o,i,a,s){var l,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):o&&(l=s?function(){o.call(this,this.$root.$options.shadowRoot)}:o),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var f=u.beforeCreate;u.beforeCreate=f?[].concat(f,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},124:function(e,t,n){"use strict";n.r(t);var r,o,i={name:"ElTag",props:{text:String,closable:Boolean,type:String,hit:Boolean,disableTransitions:Boolean,color:String,size:String,effect:{type:String,default:"light",validator:function(e){return-1!==["dark","light","plain"].indexOf(e)}}},methods:{handleClose:function(e){e.stopPropagation(),this.$emit("close",e)},handleClick:function(e){this.$emit("click",e)}},computed:{tagSize:function(){return this.size||(this.$ELEMENT||{}).size}},render:function(e){var t=this.type,n=this.tagSize,r=this.hit,o=this.effect,i=["el-tag",t?"el-tag--"+t:"",n?"el-tag--"+n:"",o?"el-tag--"+o:"",r&&"is-hit"],a=e("span",{class:i,style:{backgroundColor:this.color},on:{click:this.handleClick}},[this.$slots.default,this.closable&&e("i",{class:"el-tag__close el-icon-close",on:{click:this.handleClose}})]);return this.disableTransitions?a:e("transition",{attrs:{name:"el-zoom-in-center"}},[a])}},a=i,s=n(0),l=Object(s["a"])(a,r,o,!1,null,null,null);l.options.__file="packages/tag/src/tag.vue";var u=l.exports;u.install=function(e){e.component(u.name,u)};t["default"]=u}})},"65af":function(e,t,n){var r=n("02d0"),o=n("6807"),i=o.concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,i)}},"66b2":function(e,t,n){var r=n("ac83"),o=n("0532"),i=n("684e"),a=n("0b29"),s=n("e28b"),l=n("2bba"),u=function(e,t){this.stopped=e,this.result=t},c=e.exports=function(e,t,n,c,f){var d,p,h,v,m,y,g,b=a(t,n,c?2:1);if(f)d=e;else{if(p=s(e),"function"!=typeof p)throw TypeError("Target is not iterable");if(o(p)){for(h=0,v=i(e.length);v>h;h++)if(m=c?b(r(g=e[h])[0],g[1]):b(e[h]),m&&m instanceof u)return m;return new u(!1)}d=p.call(e)}y=d.next;while(!(g=y.call(d)).done)if(m=l(d,b,g.value,c),"object"==typeof m&&m&&m instanceof u)return m;return new u(!1)};c.stop=function(e){return new u(!0,e)}},"67ea":function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},6807:function(e,t){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},"684e":function(e,t,n){var r=n("f240"),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},"6be9":function(e,t,n){var r=n("8c47"),o=n("684e"),i=n("0192"),a=function(e){return function(t,n,a){var s,l=r(t),u=o(l.length),c=i(a,u);if(e&&n!=n){while(u>c)if(s=l[c++],s!=s)return!0}else for(;u>c;c++)if((e||c in l)&&l[c]===n)return e||c||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},"6dcf":function(e,t,n){var r,o,i,a=n("d5dc"),s=n("f30e"),l=n("67ea"),u=n("0b29"),c=n("c49e"),f=n("032e"),d=n("c044"),p=a.location,h=a.setImmediate,v=a.clearImmediate,m=a.process,y=a.MessageChannel,g=a.Dispatch,b=0,_={},x="onreadystatechange",w=function(e){if(_.hasOwnProperty(e)){var t=_[e];delete _[e],t()}},C=function(e){return function(){w(e)}},S=function(e){w(e.data)},O=function(e){a.postMessage(e+"",p.protocol+"//"+p.host)};h&&v||(h=function(e){var t=[],n=1;while(arguments.length>n)t.push(arguments[n++]);return _[++b]=function(){("function"==typeof e?e:Function(e)).apply(void 0,t)},r(b),b},v=function(e){delete _[e]},"process"==l(m)?r=function(e){m.nextTick(C(e))}:g&&g.now?r=function(e){g.now(C(e))}:y&&!d?(o=new y,i=o.port2,o.port1.onmessage=S,r=u(i.postMessage,i,1)):!a.addEventListener||"function"!=typeof postMessage||a.importScripts||s(O)?r=x in f("script")?function(e){c.appendChild(f("script"))[x]=function(){c.removeChild(this),w(e)}}:function(e){setTimeout(C(e),0)}:(r=O,a.addEventListener("message",S,!1))),e.exports={set:h,clear:v}},"70d0":function(e,t,n){},7267:function(e,t,n){"use strict";var r=n("3d8a"),o=n("ac83"),i=n("f30e"),a=n("0618"),s="toString",l=RegExp.prototype,u=l[s],c=i((function(){return"/a/b"!=u.call({source:"a",flags:"b"})})),f=u.name!=s;(c||f)&&r(RegExp.prototype,s,(function(){var e=o(this),t=String(e.source),n=e.flags,r=String(void 0===n&&e instanceof RegExp&&!("flags"in l)?a.call(e):n);return"/"+t+"/"+r}),{unsafe:!0})},"76ab":function(e,t,n){"use strict";var r=n("2ae1"),o=n("2895"),i=10,a=40,s=800;function l(e){var t=0,n=0,r=0,o=0;return"detail"in e&&(n=e.detail),"wheelDelta"in e&&(n=-e.wheelDelta/120),"wheelDeltaY"in e&&(n=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=n,n=0),r=t*i,o=n*i,"deltaY"in e&&(o=e.deltaY),"deltaX"in e&&(r=e.deltaX),(r||o)&&e.deltaMode&&(1==e.deltaMode?(r*=a,o*=a):(r*=s,o*=s)),r&&!t&&(t=r<1?-1:1),o&&!n&&(n=o<1?-1:1),{spinX:t,spinY:n,pixelX:r,pixelY:o}}l.getEventType=function(){return r.firefox()?"DOMMouseScroll":o("wheel")?"wheel":"mousewheel"},e.exports=l},"77e5":function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"===typeof window&&(n=window)}e.exports=n},"785d":function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=75)}({0:function(e,t,n){"use strict";function r(e,t,n,r,o,i,a,s){var l,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):o&&(l=s?function(){o.call(this,this.$root.$options.shadowRoot)}:o),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var f=u.beforeCreate;u.beforeCreate=f?[].concat(f,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},15:function(e,t){e.exports=n("4eda")},23:function(e,t){e.exports=n("bee9")},7:function(e,t){e.exports=n("0261")},75:function(e,t,n){"use strict";n.r(t);var r=n(7),o=n.n(r),i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-message-fade"},on:{"after-leave":e.handleAfterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],class:["el-message",e.type&&!e.iconClass?"el-message--"+e.type:"",e.center?"is-center":"",e.showClose?"is-closable":"",e.customClass],style:e.positionStyle,attrs:{role:"alert"},on:{mouseenter:e.clearTimer,mouseleave:e.startTimer}},[e.iconClass?n("i",{class:e.iconClass}):n("i",{class:e.typeClass}),e._t("default",[e.dangerouslyUseHTMLString?n("p",{staticClass:"el-message__content",domProps:{innerHTML:e._s(e.message)}}):n("p",{staticClass:"el-message__content"},[e._v(e._s(e.message))])]),e.showClose?n("i",{staticClass:"el-message__closeBtn el-icon-close",on:{click:e.close}}):e._e()],2)])},a=[];i._withStripped=!0;var s={success:"success",info:"info",warning:"warning",error:"error"},l={data:function(){return{visible:!1,message:"",duration:3e3,type:"info",iconClass:"",customClass:"",onClose:null,showClose:!1,closed:!1,verticalOffset:20,timer:null,dangerouslyUseHTMLString:!1,center:!1}},computed:{typeClass:function(){return this.type&&!this.iconClass?"el-message__icon el-icon-"+s[this.type]:""},positionStyle:function(){return{top:this.verticalOffset+"px"}}},watch:{closed:function(e){e&&(this.visible=!1)}},methods:{handleAfterLeave:function(){this.$destroy(!0),this.$el.parentNode.removeChild(this.$el)},close:function(){this.closed=!0,"function"===typeof this.onClose&&this.onClose(this)},clearTimer:function(){clearTimeout(this.timer)},startTimer:function(){var e=this;this.duration>0&&(this.timer=setTimeout((function(){e.closed||e.close()}),this.duration))},keydown:function(e){27===e.keyCode&&(this.closed||this.close())}},mounted:function(){this.startTimer(),document.addEventListener("keydown",this.keydown)},beforeDestroy:function(){document.removeEventListener("keydown",this.keydown)}},u=l,c=n(0),f=Object(c["a"])(u,i,a,!1,null,null,null);f.options.__file="packages/message/src/main.vue";var d=f.exports,p=n(15),h=n(23),v=o.a.extend(d),m=void 0,y=[],g=1,b=function e(t){if(!o.a.prototype.$isServer){t=t||{},"string"===typeof t&&(t={message:t});var n=t.onClose,r="message_"+g++;t.onClose=function(){e.close(r,n)},m=new v({data:t}),m.id=r,Object(h["isVNode"])(m.message)&&(m.$slots.default=[m.message],m.message=null),m.$mount(),document.body.appendChild(m.$el);var i=t.offset||20;return y.forEach((function(e){i+=e.$el.offsetHeight+16})),m.verticalOffset=i,m.visible=!0,m.$el.style.zIndex=p["PopupManager"].nextZIndex(),y.push(m),m}};["success","warning","info","error"].forEach((function(e){b[e]=function(t){return"string"===typeof t&&(t={message:t}),t.type=e,b(t)}})),b.close=function(e,t){for(var n=y.length,r=-1,o=void 0,i=0;iy.length-1))for(var a=r;a=0;e--)y[e].close()};var _=b;t["default"]=_}})},"7a23":function(e,t,n){var r=n("f30e");e.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},"7b6d":function(e,t,n){"use strict";t.__esModule=!0;var r=n("0261"),o=a(r),i=n("3c84");function a(e){return e&&e.__esModule?e:{default:e}}var s=!1,l=!1,u=void 0,c=function(){if(!o.default.prototype.$isServer){var e=d.modalDom;return e?s=!0:(s=!1,e=document.createElement("div"),d.modalDom=e,e.addEventListener("touchmove",(function(e){e.preventDefault(),e.stopPropagation()})),e.addEventListener("click",(function(){d.doOnModalClick&&d.doOnModalClick()}))),e}},f={},d={modalFade:!0,getInstance:function(e){return f[e]},register:function(e,t){e&&t&&(f[e]=t)},deregister:function(e){e&&(f[e]=null,delete f[e])},nextZIndex:function(){return d.zIndex++},modalStack:[],doOnModalClick:function(){var e=d.modalStack[d.modalStack.length-1];if(e){var t=d.getInstance(e.id);t&&t.closeOnClickModal&&t.close()}},openModal:function(e,t,n,r,a){if(!o.default.prototype.$isServer&&e&&void 0!==t){this.modalFade=a;for(var l=this.modalStack,u=0,f=l.length;u0){var r=t[t.length-1];if(r.id===e){if(r.modalClass){var o=r.modalClass.trim().split(/\s+/);o.forEach((function(e){return(0,i.removeClass)(n,e)}))}t.pop(),t.length>0&&(n.style.zIndex=t[t.length-1].zIndex)}else for(var a=t.length-1;a>=0;a--)if(t[a].id===e){t.splice(a,1);break}}0===t.length&&(this.modalFade&&(0,i.addClass)(n,"v-modal-leave"),setTimeout((function(){0===t.length&&(n.parentNode&&n.parentNode.removeChild(n),n.style.display="none",d.modalDom=void 0),(0,i.removeClass)(n,"v-modal-leave")}),200))}};Object.defineProperty(d,"zIndex",{configurable:!0,get:function(){return l||(u=u||(o.default.prototype.$ELEMENT||{}).zIndex||2e3,l=!0),u},set:function(e){u=e}});var p=function(){if(!o.default.prototype.$isServer&&d.modalStack.length>0){var e=d.modalStack[d.modalStack.length-1];if(!e)return;var t=d.getInstance(e.id);return t}};o.default.prototype.$isServer||window.addEventListener("keydown",(function(e){if(27===e.keyCode){var t=p();t&&t.closeOnPressEscape&&(t.handleClose?t.handleClose():t.handleAction?t.handleAction("cancel"):t.close())}})),t.default=d},"7dc7":function(e,t,n){var r=n("d68d");e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},"83a6":function(e,t,n){"use strict";t.__esModule=!0,t.default={el:{colorpicker:{confirm:"确定",clear:"清空"},datepicker:{now:"此刻",today:"今天",cancel:"取消",clear:"清空",confirm:"确定",selectDate:"选择日期",selectTime:"选择时间",startDate:"开始日期",startTime:"开始时间",endDate:"结束日期",endTime:"结束时间",prevYear:"前一年",nextYear:"后一年",prevMonth:"上个月",nextMonth:"下个月",year:"年",month1:"1 月",month2:"2 月",month3:"3 月",month4:"4 月",month5:"5 月",month6:"6 月",month7:"7 月",month8:"8 月",month9:"9 月",month10:"10 月",month11:"11 月",month12:"12 月",weeks:{sun:"日",mon:"一",tue:"二",wed:"三",thu:"四",fri:"五",sat:"六"},months:{jan:"一月",feb:"二月",mar:"三月",apr:"四月",may:"五月",jun:"六月",jul:"七月",aug:"八月",sep:"九月",oct:"十月",nov:"十一月",dec:"十二月"}},select:{loading:"加载中",noMatch:"无匹配数据",noData:"无数据",placeholder:"请选择"},cascader:{noMatch:"无匹配数据",loading:"加载中",placeholder:"请选择",noData:"暂无数据"},pagination:{goto:"前往",pagesize:"条/页",total:"共 {total} 条",pageClassifier:"页"},messagebox:{title:"提示",confirm:"确定",cancel:"取消",error:"输入的数据不合法!"},upload:{deleteTip:"按 delete 键可删除",delete:"删除",preview:"查看图片",continue:"继续上传"},table:{emptyText:"暂无数据",confirmFilter:"筛选",resetFilter:"重置",clearFilter:"全部",sumText:"合计"},tree:{emptyText:"暂无数据"},transfer:{noMatch:"无匹配数据",noData:"无数据",titles:["列表 1","列表 2"],filterPlaceholder:"请输入搜索内容",noCheckedFormat:"共 {total} 项",hasCheckedFormat:"已选 {checked}/{total} 项"},image:{error:"加载失败"},pageHeader:{title:"返回"},popconfirm:{confirmButtonText:"确定",cancelButtonText:"取消"}}}},8508:function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=83)}({0:function(e,t,n){"use strict";function r(e,t,n,r,o,i,a,s){var l,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):o&&(l=s?function(){o.call(this,this.$root.$options.shadowRoot)}:o),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var f=u.beforeCreate;u.beforeCreate=f?[].concat(f,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},4:function(e,t){e.exports=n("b4e0")},83:function(e,t,n){"use strict";n.r(t);var r=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("label",{staticClass:"el-checkbox",class:[e.border&&e.checkboxSize?"el-checkbox--"+e.checkboxSize:"",{"is-disabled":e.isDisabled},{"is-bordered":e.border},{"is-checked":e.isChecked}],attrs:{id:e.id}},[n("span",{staticClass:"el-checkbox__input",class:{"is-disabled":e.isDisabled,"is-checked":e.isChecked,"is-indeterminate":e.indeterminate,"is-focus":e.focus},attrs:{tabindex:!!e.indeterminate&&0,role:!!e.indeterminate&&"checkbox","aria-checked":!!e.indeterminate&&"mixed"}},[n("span",{staticClass:"el-checkbox__inner"}),e.trueLabel||e.falseLabel?n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",name:e.name,disabled:e.isDisabled,"true-value":e.trueLabel,"false-value":e.falseLabel},domProps:{checked:Array.isArray(e.model)?e._i(e.model,null)>-1:e._q(e.model,e.trueLabel)},on:{change:[function(t){var n=e.model,r=t.target,o=r.checked?e.trueLabel:e.falseLabel;if(Array.isArray(n)){var i=null,a=e._i(n,i);r.checked?a<0&&(e.model=n.concat([i])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=o},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}):n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",disabled:e.isDisabled,name:e.name},domProps:{value:e.label,checked:Array.isArray(e.model)?e._i(e.model,e.label)>-1:e.model},on:{change:[function(t){var n=e.model,r=t.target,o=!!r.checked;if(Array.isArray(n)){var i=e.label,a=e._i(n,i);r.checked?a<0&&(e.model=n.concat([i])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=o},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}})]),e.$slots.default||e.label?n("span",{staticClass:"el-checkbox__label"},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2):e._e()])},o=[];r._withStripped=!0;var i=n(4),a=n.n(i),s={name:"ElCheckbox",mixins:[a.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElCheckbox",data:function(){return{selfModel:!1,focus:!1,isLimitExceeded:!1}},computed:{model:{get:function(){return this.isGroup?this.store:void 0!==this.value?this.value:this.selfModel},set:function(e){this.isGroup?(this.isLimitExceeded=!1,void 0!==this._checkboxGroup.min&&e.lengththis._checkboxGroup.max&&(this.isLimitExceeded=!0),!1===this.isLimitExceeded&&this.dispatch("ElCheckboxGroup","input",[e])):(this.$emit("input",e),this.selfModel=e)}},isChecked:function(){return"[object Boolean]"==={}.toString.call(this.model)?this.model:Array.isArray(this.model)?this.model.indexOf(this.label)>-1:null!==this.model&&void 0!==this.model?this.model===this.trueLabel:void 0},isGroup:function(){var e=this.$parent;while(e){if("ElCheckboxGroup"===e.$options.componentName)return this._checkboxGroup=e,!0;e=e.$parent}return!1},store:function(){return this._checkboxGroup?this._checkboxGroup.value:this.value},isLimitDisabled:function(){var e=this._checkboxGroup,t=e.max,n=e.min;return!(!t&&!n)&&this.model.length>=t&&!this.isChecked||this.model.length<=n&&this.isChecked},isDisabled:function(){return this.isGroup?this._checkboxGroup.disabled||this.disabled||(this.elForm||{}).disabled||this.isLimitDisabled:this.disabled||(this.elForm||{}).disabled},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},checkboxSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._checkboxGroup.checkboxGroupSize||e}},props:{value:{},label:{},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:String,trueLabel:[String,Number],falseLabel:[String,Number],id:String,controls:String,border:Boolean,size:String},methods:{addToStore:function(){Array.isArray(this.model)&&-1===this.model.indexOf(this.label)?this.model.push(this.label):this.model=this.trueLabel||!0},handleChange:function(e){var t=this;if(!this.isLimitExceeded){var n=void 0;n=e.target.checked?void 0===this.trueLabel||this.trueLabel:void 0!==this.falseLabel&&this.falseLabel,this.$emit("change",n,e),this.$nextTick((function(){t.isGroup&&t.dispatch("ElCheckboxGroup","change",[t._checkboxGroup.value])}))}}},created:function(){this.checked&&this.addToStore()},mounted:function(){this.indeterminate&&this.$el.setAttribute("aria-controls",this.controls)},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",e)}}},l=s,u=n(0),c=Object(u["a"])(l,r,o,!1,null,null,null);c.options.__file="packages/checkbox/src/checkbox.vue";var f=c.exports;f.install=function(e){e.component(f.name,f)};t["default"]=f}})},8876:function(e,t,n){"use strict";(function(e){ +/** + * vuex v3.1.3 + * (c) 2020 Evan You + * @license MIT + */ +function n(e){var t=Number(e.version.split(".")[0]);if(t>=2)e.mixin({beforeCreate:r});else{var n=e.prototype._init;e.prototype._init=function(e){void 0===e&&(e={}),e.init=e.init?[r].concat(e.init):r,n.call(this,e)}}function r(){var e=this.$options;e.store?this.$store="function"===typeof e.store?e.store():e.store:e.parent&&e.parent.$store&&(this.$store=e.parent.$store)}}var r="undefined"!==typeof window?window:"undefined"!==typeof e?e:{},o=r.__VUE_DEVTOOLS_GLOBAL_HOOK__;function i(e){o&&(e._devtoolHook=o,o.emit("vuex:init",e),o.on("vuex:travel-to-state",(function(t){e.replaceState(t)})),e.subscribe((function(e,t){o.emit("vuex:mutation",e,t)})))}function a(e,t){Object.keys(e).forEach((function(n){return t(e[n],n)}))}function s(e){return null!==e&&"object"===typeof e}function l(e){return e&&"function"===typeof e.then}function u(e,t){return function(){return e(t)}}var c=function(e,t){this.runtime=t,this._children=Object.create(null),this._rawModule=e;var n=e.state;this.state=("function"===typeof n?n():n)||{}},f={namespaced:{configurable:!0}};f.namespaced.get=function(){return!!this._rawModule.namespaced},c.prototype.addChild=function(e,t){this._children[e]=t},c.prototype.removeChild=function(e){delete this._children[e]},c.prototype.getChild=function(e){return this._children[e]},c.prototype.update=function(e){this._rawModule.namespaced=e.namespaced,e.actions&&(this._rawModule.actions=e.actions),e.mutations&&(this._rawModule.mutations=e.mutations),e.getters&&(this._rawModule.getters=e.getters)},c.prototype.forEachChild=function(e){a(this._children,e)},c.prototype.forEachGetter=function(e){this._rawModule.getters&&a(this._rawModule.getters,e)},c.prototype.forEachAction=function(e){this._rawModule.actions&&a(this._rawModule.actions,e)},c.prototype.forEachMutation=function(e){this._rawModule.mutations&&a(this._rawModule.mutations,e)},Object.defineProperties(c.prototype,f);var d=function(e){this.register([],e,!1)};function p(e,t,n){if(t.update(n),n.modules)for(var r in n.modules){if(!t.getChild(r))return void 0;p(e.concat(r),t.getChild(r),n.modules[r])}}d.prototype.get=function(e){return e.reduce((function(e,t){return e.getChild(t)}),this.root)},d.prototype.getNamespace=function(e){var t=this.root;return e.reduce((function(e,n){return t=t.getChild(n),e+(t.namespaced?n+"/":"")}),"")},d.prototype.update=function(e){p([],this.root,e)},d.prototype.register=function(e,t,n){var r=this;void 0===n&&(n=!0);var o=new c(t,n);if(0===e.length)this.root=o;else{var i=this.get(e.slice(0,-1));i.addChild(e[e.length-1],o)}t.modules&&a(t.modules,(function(t,o){r.register(e.concat(o),t,n)}))},d.prototype.unregister=function(e){var t=this.get(e.slice(0,-1)),n=e[e.length-1];t.getChild(n).runtime&&t.removeChild(n)};var h;var v=function(e){var t=this;void 0===e&&(e={}),!h&&"undefined"!==typeof window&&window.Vue&&j(window.Vue);var n=e.plugins;void 0===n&&(n=[]);var r=e.strict;void 0===r&&(r=!1),this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new d(e),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new h,this._makeLocalGettersCache=Object.create(null);var o=this,a=this,s=a.dispatch,l=a.commit;this.dispatch=function(e,t){return s.call(o,e,t)},this.commit=function(e,t,n){return l.call(o,e,t,n)},this.strict=r;var u=this._modules.root.state;_(this,u,[],this._modules.root),b(this,u),n.forEach((function(e){return e(t)}));var c=void 0!==e.devtools?e.devtools:h.config.devtools;c&&i(this)},m={state:{configurable:!0}};function y(e,t){return t.indexOf(e)<0&&t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}function g(e,t){e._actions=Object.create(null),e._mutations=Object.create(null),e._wrappedGetters=Object.create(null),e._modulesNamespaceMap=Object.create(null);var n=e.state;_(e,n,[],e._modules.root,!0),b(e,n,t)}function b(e,t,n){var r=e._vm;e.getters={},e._makeLocalGettersCache=Object.create(null);var o=e._wrappedGetters,i={};a(o,(function(t,n){i[n]=u(t,e),Object.defineProperty(e.getters,n,{get:function(){return e._vm[n]},enumerable:!0})}));var s=h.config.silent;h.config.silent=!0,e._vm=new h({data:{$$state:t},computed:i}),h.config.silent=s,e.strict&&E(e),r&&(n&&e._withCommit((function(){r._data.$$state=null})),h.nextTick((function(){return r.$destroy()})))}function _(e,t,n,r,o){var i=!n.length,a=e._modules.getNamespace(n);if(r.namespaced&&(e._modulesNamespaceMap[a],e._modulesNamespaceMap[a]=r),!i&&!o){var s=k(t,n.slice(0,-1)),l=n[n.length-1];e._withCommit((function(){h.set(s,l,r.state)}))}var u=r.context=x(e,a,n);r.forEachMutation((function(t,n){var r=a+n;C(e,r,t,u)})),r.forEachAction((function(t,n){var r=t.root?n:a+n,o=t.handler||t;S(e,r,o,u)})),r.forEachGetter((function(t,n){var r=a+n;O(e,r,t,u)})),r.forEachChild((function(r,i){_(e,t,n.concat(i),r,o)}))}function x(e,t,n){var r=""===t,o={dispatch:r?e.dispatch:function(n,r,o){var i=$(n,r,o),a=i.payload,s=i.options,l=i.type;return s&&s.root||(l=t+l),e.dispatch(l,a)},commit:r?e.commit:function(n,r,o){var i=$(n,r,o),a=i.payload,s=i.options,l=i.type;s&&s.root||(l=t+l),e.commit(l,a,s)}};return Object.defineProperties(o,{getters:{get:r?function(){return e.getters}:function(){return w(e,t)}},state:{get:function(){return k(e.state,n)}}}),o}function w(e,t){if(!e._makeLocalGettersCache[t]){var n={},r=t.length;Object.keys(e.getters).forEach((function(o){if(o.slice(0,r)===t){var i=o.slice(r);Object.defineProperty(n,i,{get:function(){return e.getters[o]},enumerable:!0})}})),e._makeLocalGettersCache[t]=n}return e._makeLocalGettersCache[t]}function C(e,t,n,r){var o=e._mutations[t]||(e._mutations[t]=[]);o.push((function(t){n.call(e,r.state,t)}))}function S(e,t,n,r){var o=e._actions[t]||(e._actions[t]=[]);o.push((function(t){var o=n.call(e,{dispatch:r.dispatch,commit:r.commit,getters:r.getters,state:r.state,rootGetters:e.getters,rootState:e.state},t);return l(o)||(o=Promise.resolve(o)),e._devtoolHook?o.catch((function(t){throw e._devtoolHook.emit("vuex:error",t),t})):o}))}function O(e,t,n,r){e._wrappedGetters[t]||(e._wrappedGetters[t]=function(e){return n(r.state,r.getters,e.state,e.getters)})}function E(e){e._vm.$watch((function(){return this._data.$$state}),(function(){0}),{deep:!0,sync:!0})}function k(e,t){return t.reduce((function(e,t){return e[t]}),e)}function $(e,t,n){return s(e)&&e.type&&(n=t,t=e,e=e.type),{type:e,payload:t,options:n}}function j(e){h&&e===h||(h=e,n(h))}m.state.get=function(){return this._vm._data.$$state},m.state.set=function(e){0},v.prototype.commit=function(e,t,n){var r=this,o=$(e,t,n),i=o.type,a=o.payload,s=(o.options,{type:i,payload:a}),l=this._mutations[i];l&&(this._withCommit((function(){l.forEach((function(e){e(a)}))})),this._subscribers.slice().forEach((function(e){return e(s,r.state)})))},v.prototype.dispatch=function(e,t){var n=this,r=$(e,t),o=r.type,i=r.payload,a={type:o,payload:i},s=this._actions[o];if(s){try{this._actionSubscribers.slice().filter((function(e){return e.before})).forEach((function(e){return e.before(a,n.state)}))}catch(u){0}var l=s.length>1?Promise.all(s.map((function(e){return e(i)}))):s[0](i);return l.then((function(e){try{n._actionSubscribers.filter((function(e){return e.after})).forEach((function(e){return e.after(a,n.state)}))}catch(u){0}return e}))}},v.prototype.subscribe=function(e){return y(e,this._subscribers)},v.prototype.subscribeAction=function(e){var t="function"===typeof e?{before:e}:e;return y(t,this._actionSubscribers)},v.prototype.watch=function(e,t,n){var r=this;return this._watcherVM.$watch((function(){return e(r.state,r.getters)}),t,n)},v.prototype.replaceState=function(e){var t=this;this._withCommit((function(){t._vm._data.$$state=e}))},v.prototype.registerModule=function(e,t,n){void 0===n&&(n={}),"string"===typeof e&&(e=[e]),this._modules.register(e,t),_(this,this.state,e,this._modules.get(e),n.preserveState),b(this,this.state)},v.prototype.unregisterModule=function(e){var t=this;"string"===typeof e&&(e=[e]),this._modules.unregister(e),this._withCommit((function(){var n=k(t.state,e.slice(0,-1));h.delete(n,e[e.length-1])})),g(this)},v.prototype.hotUpdate=function(e){this._modules.update(e),g(this,!0)},v.prototype._withCommit=function(e){var t=this._committing;this._committing=!0,e(),this._committing=t},Object.defineProperties(v.prototype,m);var A=I((function(e,t){var n={};return N(t).forEach((function(t){var r=t.key,o=t.val;n[r]=function(){var t=this.$store.state,n=this.$store.getters;if(e){var r=F(this.$store,"mapState",e);if(!r)return;t=r.context.state,n=r.context.getters}return"function"===typeof o?o.call(this,t,n):t[o]},n[r].vuex=!0})),n})),T=I((function(e,t){var n={};return N(t).forEach((function(t){var r=t.key,o=t.val;n[r]=function(){var t=[],n=arguments.length;while(n--)t[n]=arguments[n];var r=this.$store.commit;if(e){var i=F(this.$store,"mapMutations",e);if(!i)return;r=i.context.commit}return"function"===typeof o?o.apply(this,[r].concat(t)):r.apply(this.$store,[o].concat(t))}})),n})),M=I((function(e,t){var n={};return N(t).forEach((function(t){var r=t.key,o=t.val;o=e+o,n[r]=function(){if(!e||F(this.$store,"mapGetters",e))return this.$store.getters[o]},n[r].vuex=!0})),n})),P=I((function(e,t){var n={};return N(t).forEach((function(t){var r=t.key,o=t.val;n[r]=function(){var t=[],n=arguments.length;while(n--)t[n]=arguments[n];var r=this.$store.dispatch;if(e){var i=F(this.$store,"mapActions",e);if(!i)return;r=i.context.dispatch}return"function"===typeof o?o.apply(this,[r].concat(t)):r.apply(this.$store,[o].concat(t))}})),n})),L=function(e){return{mapState:A.bind(null,e),mapGetters:M.bind(null,e),mapMutations:T.bind(null,e),mapActions:P.bind(null,e)}};function N(e){return R(e)?Array.isArray(e)?e.map((function(e){return{key:e,val:e}})):Object.keys(e).map((function(t){return{key:t,val:e[t]}})):[]}function R(e){return Array.isArray(e)||s(e)}function I(e){return function(t,n){return"string"!==typeof t?(n=t,t=""):"/"!==t.charAt(t.length-1)&&(t+="/"),e(t,n)}}function F(e,t,n){var r=e._modulesNamespaceMap[n];return r}var H={Store:v,install:j,version:"3.1.3",mapState:A,mapMutations:T,mapGetters:M,mapActions:P,createNamespacedHelpers:L};t["a"]=H}).call(this,n("77e5"))},"88b4":function(e,t,n){var r=n("7a23"),o=n("f30e"),i=n("032e");e.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},"88e7":function(e,t,n){"use strict";t.__esModule=!0;var r="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.default=function(e){function t(e){for(var t=arguments.length,n=Array(t>1?t-1:0),a=1;a1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;u||(u=document.createElement("textarea"),document.body.appendChild(u));var r=d(e),o=r.paddingSize,i=r.borderSize,a=r.boxSizing,s=r.contextStyle;u.setAttribute("style",s+";"+c),u.value=e.value||e.placeholder||"";var l=u.scrollHeight,f={};"border-box"===a?l+=i:"content-box"===a&&(l-=o),u.value="";var p=u.scrollHeight-o;if(null!==t){var h=p*t;"border-box"===a&&(h=h+o+i),l=Math.max(h,l),f.minHeight=h+"px"}if(null!==n){var v=p*n;"border-box"===a&&(v=v+o+i),l=Math.min(v,l)}return f.height=l+"px",u.parentNode&&u.parentNode.removeChild(u),u=null,f}var h=n(9),v=n.n(h),m=n(21),y={name:"ElInput",componentName:"ElInput",mixins:[a.a,l.a],inheritAttrs:!1,inject:{elForm:{default:""},elFormItem:{default:""}},data:function(){return{textareaCalcStyle:{},hovering:!1,focused:!1,isComposing:!1,passwordVisible:!1}},props:{value:[String,Number],size:String,resize:String,form:String,disabled:Boolean,readonly:Boolean,type:{type:String,default:"text"},autosize:{type:[Boolean,Object],default:!1},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},validateEvent:{type:Boolean,default:!0},suffixIcon:String,prefixIcon:String,label:String,clearable:{type:Boolean,default:!1},showPassword:{type:Boolean,default:!1},showWordLimit:{type:Boolean,default:!1},tabindex:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},validateState:function(){return this.elFormItem?this.elFormItem.validateState:""},needStatusIcon:function(){return!!this.elForm&&this.elForm.statusIcon},validateIcon:function(){return{validating:"el-icon-loading",success:"el-icon-circle-check",error:"el-icon-circle-close"}[this.validateState]},textareaStyle:function(){return v()({},this.textareaCalcStyle,{resize:this.resize})},inputSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputDisabled:function(){return this.disabled||(this.elForm||{}).disabled},nativeInputValue:function(){return null===this.value||void 0===this.value?"":String(this.value)},showClear:function(){return this.clearable&&!this.inputDisabled&&!this.readonly&&this.nativeInputValue&&(this.focused||this.hovering)},showPwdVisible:function(){return this.showPassword&&!this.inputDisabled&&!this.readonly&&(!!this.nativeInputValue||this.focused)},isWordLimitVisible:function(){return this.showWordLimit&&this.$attrs.maxlength&&("text"===this.type||"textarea"===this.type)&&!this.inputDisabled&&!this.readonly&&!this.showPassword},upperLimit:function(){return this.$attrs.maxlength},textLength:function(){return"number"===typeof this.value?String(this.value).length:(this.value||"").length},inputExceed:function(){return this.isWordLimitVisible&&this.textLength>this.upperLimit}},watch:{value:function(e){this.$nextTick(this.resizeTextarea),this.validateEvent&&this.dispatch("ElFormItem","el.form.change",[e])},nativeInputValue:function(){this.setNativeInputValue()},type:function(){var e=this;this.$nextTick((function(){e.setNativeInputValue(),e.resizeTextarea(),e.updateIconOffset()}))}},methods:{focus:function(){this.getInput().focus()},blur:function(){this.getInput().blur()},getMigratingConfig:function(){return{props:{icon:"icon is removed, use suffix-icon / prefix-icon instead.","on-icon-click":"on-icon-click is removed."},events:{click:"click is removed."}}},handleBlur:function(e){this.focused=!1,this.$emit("blur",e),this.validateEvent&&this.dispatch("ElFormItem","el.form.blur",[this.value])},select:function(){this.getInput().select()},resizeTextarea:function(){if(!this.$isServer){var e=this.autosize,t=this.type;if("textarea"===t)if(e){var n=e.minRows,r=e.maxRows;this.textareaCalcStyle=p(this.$refs.textarea,n,r)}else this.textareaCalcStyle={minHeight:p(this.$refs.textarea).minHeight}}},setNativeInputValue:function(){var e=this.getInput();e&&e.value!==this.nativeInputValue&&(e.value=this.nativeInputValue)},handleFocus:function(e){this.focused=!0,this.$emit("focus",e)},handleCompositionStart:function(){this.isComposing=!0},handleCompositionUpdate:function(e){var t=e.target.value,n=t[t.length-1]||"";this.isComposing=!Object(m["isKorean"])(n)},handleCompositionEnd:function(e){this.isComposing&&(this.isComposing=!1,this.handleInput(e))},handleInput:function(e){this.isComposing||e.target.value!==this.nativeInputValue&&(this.$emit("input",e.target.value),this.$nextTick(this.setNativeInputValue))},handleChange:function(e){this.$emit("change",e.target.value)},calcIconOffset:function(e){var t=[].slice.call(this.$el.querySelectorAll(".el-input__"+e)||[]);if(t.length){for(var n=null,r=0;r-1?"center "+n:n+" center"}},appendArrow:function(e){var t=void 0;if(!this.appended){for(var n in this.appended=!0,e.attributes)if(/^_v-/.test(e.attributes[n].name)){t=e.attributes[n].name;break}var r=document.createElement("div");t&&r.setAttribute(t,""),r.setAttribute("x-arrow",""),r.className="popper__arrow",e.appendChild(r)}}},beforeDestroy:function(){this.doDestroy(!0),this.popperElm&&this.popperElm.parentNode===document.body&&(this.popperElm.removeEventListener("click",l),document.body.removeChild(this.popperElm))},deactivated:function(){this.$options.beforeDestroy[0].call(this)}}},"9db6":function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++n+r).toString(36)}},"9fe6":function(e,t,n){"use strict";t.__esModule=!0,t.removeResizeListener=t.addResizeListener=void 0;var r=n("0655"),o=i(r);function i(e){return e&&e.__esModule?e:{default:e}}var a="undefined"===typeof window,s=function(e){var t=e,n=Array.isArray(t),r=0;for(t=n?t:t[Symbol.iterator]();;){var o;if(n){if(r>=t.length)break;o=t[r++]}else{if(r=t.next(),r.done)break;o=r.value}var i=o,a=i.target.__resizeListeners__||[];a.length&&a.forEach((function(e){e()}))}};t.addResizeListener=function(e,t){a||(e.__resizeListeners__||(e.__resizeListeners__=[],e.__ro__=new o.default(s),e.__ro__.observe(e)),e.__resizeListeners__.push(t))},t.removeResizeListener=function(e,t){e&&e.__resizeListeners__&&(e.__resizeListeners__.splice(e.__resizeListeners__.indexOf(t),1),e.__resizeListeners__.length||e.__ro__.disconnect())}},a406:function(e,t,n){var r=n("df50");e.exports=r("navigator","userAgent")||""},a464:function(e,t,n){},a7d9:function(e,t,n){var r=n("d5dc");e.exports=function(e,t){var n=r.console;n&&n.error&&(1===arguments.length?n.error(e):n.error(e,t))}},a867:function(e,t,n){"use strict";var r=n("df50"),o=n("c223"),i=n("57c4"),a=n("7a23"),s=i("species");e.exports=function(e){var t=r(e),n=o.f;a&&t&&!t[s]&&n(t,s,{configurable:!0,get:function(){return this}})}},a9f2:function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},ab77:function(e,t,n){},ac83:function(e,t,n){var r=n("d68d");e.exports=function(e){if(!r(e))throw TypeError(String(e)+" is not an object");return e}},aec8:function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},b3d4:function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=110)}({0:function(e,t,n){"use strict";function r(e,t,n,r,o,i,a,s){var l,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):o&&(l=s?function(){o.call(this,this.$root.$options.shadowRoot)}:o),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var f=u.beforeCreate;u.beforeCreate=f?[].concat(f,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},110:function(e,t,n){"use strict";n.r(t);var r=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-breadcrumb",attrs:{"aria-label":"Breadcrumb",role:"navigation"}},[e._t("default")],2)},o=[];r._withStripped=!0;var i={name:"ElBreadcrumb",props:{separator:{type:String,default:"/"},separatorClass:{type:String,default:""}},provide:function(){return{elBreadcrumb:this}},mounted:function(){var e=this.$el.querySelectorAll(".el-breadcrumb__item");e.length&&e[e.length-1].setAttribute("aria-current","page")}},a=i,s=n(0),l=Object(s["a"])(a,r,o,!1,null,null,null);l.options.__file="packages/breadcrumb/src/breadcrumb.vue";var u=l.exports;u.install=function(e){e.component(u.name,u)};t["default"]=u}})},b3d8:function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=56)}([function(e,t,n){"use strict";function r(e,t,n,r,o,i,a,s){var l,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):o&&(l=s?function(){o.call(this,this.$root.$options.shadowRoot)}:o),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var f=u.beforeCreate;u.beforeCreate=f?[].concat(f,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},,function(e,t){e.exports=n("3c84")},function(e,t){e.exports=n("d41f")},,function(e,t){e.exports=n("9bb9")},function(e,t){e.exports=n("1f4f")},function(e,t){e.exports=n("0261")},function(e,t,n){"use strict";n.d(t,"b",(function(){return i})),n.d(t,"i",(function(){return s})),n.d(t,"d",(function(){return l})),n.d(t,"e",(function(){return u})),n.d(t,"c",(function(){return c})),n.d(t,"g",(function(){return f})),n.d(t,"f",(function(){return d})),n.d(t,"h",(function(){return h})),n.d(t,"l",(function(){return v})),n.d(t,"k",(function(){return m})),n.d(t,"j",(function(){return y})),n.d(t,"a",(function(){return g})),n.d(t,"m",(function(){return b})),n.d(t,"n",(function(){return _}));var r=n(3),o="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=function(e){var t=e.target;while(t&&"HTML"!==t.tagName.toUpperCase()){if("TD"===t.tagName.toUpperCase())return t;t=t.parentNode}return null},a=function(e){return null!==e&&"object"===("undefined"===typeof e?"undefined":o(e))},s=function(e,t,n,o,i){if(!t&&!o&&(!i||Array.isArray(i)&&!i.length))return e;n="string"===typeof n?"descending"===n?-1:1:n&&n<0?-1:1;var s=o?null:function(n,o){return i?(Array.isArray(i)||(i=[i]),i.map((function(t){return"string"===typeof t?Object(r["getValueByPath"])(n,t):t(n,o,e)}))):("$key"!==t&&a(n)&&"$value"in n&&(n=n.$value),[a(n)?Object(r["getValueByPath"])(n,t):n])},l=function(e,t){if(o)return o(e.value,t.value);for(var n=0,r=e.key.length;nt.key[n])return 1}return 0};return e.map((function(e,t){return{value:e,index:t,key:s?s(e,t):null}})).sort((function(e,t){var r=l(e,t);return r||(r=e.index-t.index),r*n})).map((function(e){return e.value}))},l=function(e,t){var n=null;return e.columns.forEach((function(e){e.id===t&&(n=e)})),n},u=function(e,t){for(var n=null,r=0;r2&&void 0!==arguments[2]?arguments[2]:"children",r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"hasChildren",o=function(e){return!(Array.isArray(e)&&e.length)};function i(e,a,s){t(e,a,s),a.forEach((function(e){if(e[r])t(e,null,s+1);else{var a=e[n];o(a)||i(e,a,s+1)}}))}e.forEach((function(e){if(e[r])t(e,null,0);else{var a=e[n];o(a)||i(e,a,0)}}))}},function(e,t){e.exports=n("e93e")},,function(e,t){e.exports=n("1932")},function(e,t){e.exports=n("b451")},,function(e,t){e.exports=n("8afa")},function(e,t){e.exports=n("4eda")},function(e,t){e.exports=n("9fe6")},function(e,t){e.exports=n("ca47")},function(e,t){e.exports=n("8508")},,,,,,,,,,,function(e,t){e.exports=n("df62")},,,,,,,,,,function(e,t){e.exports=n("e536")},function(e,t){e.exports=n("4fd9")},,,function(e,t){e.exports=n("63ec")},,,function(e,t){e.exports=n("546a")},,,,,,,,,,function(e,t,n){"use strict";n.r(t);var r=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-table",class:[{"el-table--fit":e.fit,"el-table--striped":e.stripe,"el-table--border":e.border||e.isGroup,"el-table--hidden":e.isHidden,"el-table--group":e.isGroup,"el-table--fluid-height":e.maxHeight,"el-table--scrollable-x":e.layout.scrollX,"el-table--scrollable-y":e.layout.scrollY,"el-table--enable-row-hover":!e.store.states.isComplex,"el-table--enable-row-transition":0!==(e.store.states.data||[]).length&&(e.store.states.data||[]).length<100},e.tableSize?"el-table--"+e.tableSize:""],on:{mouseleave:function(t){e.handleMouseLeave(t)}}},[n("div",{ref:"hiddenColumns",staticClass:"hidden-columns"},[e._t("default")],2),e.showHeader?n("div",{directives:[{name:"mousewheel",rawName:"v-mousewheel",value:e.handleHeaderFooterMousewheel,expression:"handleHeaderFooterMousewheel"}],ref:"headerWrapper",staticClass:"el-table__header-wrapper"},[n("table-header",{ref:"tableHeader",style:{width:e.layout.bodyWidth?e.layout.bodyWidth+"px":""},attrs:{store:e.store,border:e.border,"default-sort":e.defaultSort}})],1):e._e(),n("div",{ref:"bodyWrapper",staticClass:"el-table__body-wrapper",class:[e.layout.scrollX?"is-scrolling-"+e.scrollPosition:"is-scrolling-none"],style:[e.bodyHeight]},[n("table-body",{style:{width:e.bodyWidth},attrs:{context:e.context,store:e.store,stripe:e.stripe,"row-class-name":e.rowClassName,"row-style":e.rowStyle,highlight:e.highlightCurrentRow}}),e.data&&0!==e.data.length?e._e():n("div",{ref:"emptyBlock",staticClass:"el-table__empty-block",style:e.emptyBlockStyle},[n("span",{staticClass:"el-table__empty-text"},[e._t("empty",[e._v(e._s(e.emptyText||e.t("el.table.emptyText")))])],2)]),e.$slots.append?n("div",{ref:"appendWrapper",staticClass:"el-table__append-wrapper"},[e._t("append")],2):e._e()],1),e.showSummary?n("div",{directives:[{name:"show",rawName:"v-show",value:e.data&&e.data.length>0,expression:"data && data.length > 0"},{name:"mousewheel",rawName:"v-mousewheel",value:e.handleHeaderFooterMousewheel,expression:"handleHeaderFooterMousewheel"}],ref:"footerWrapper",staticClass:"el-table__footer-wrapper"},[n("table-footer",{style:{width:e.layout.bodyWidth?e.layout.bodyWidth+"px":""},attrs:{store:e.store,border:e.border,"sum-text":e.sumText||e.t("el.table.sumText"),"summary-method":e.summaryMethod,"default-sort":e.defaultSort}})],1):e._e(),e.fixedColumns.length>0?n("div",{directives:[{name:"mousewheel",rawName:"v-mousewheel",value:e.handleFixedMousewheel,expression:"handleFixedMousewheel"}],ref:"fixedWrapper",staticClass:"el-table__fixed",style:[{width:e.layout.fixedWidth?e.layout.fixedWidth+"px":""},e.fixedHeight]},[e.showHeader?n("div",{ref:"fixedHeaderWrapper",staticClass:"el-table__fixed-header-wrapper"},[n("table-header",{ref:"fixedTableHeader",style:{width:e.bodyWidth},attrs:{fixed:"left",border:e.border,store:e.store}})],1):e._e(),n("div",{ref:"fixedBodyWrapper",staticClass:"el-table__fixed-body-wrapper",style:[{top:e.layout.headerHeight+"px"},e.fixedBodyHeight]},[n("table-body",{style:{width:e.bodyWidth},attrs:{fixed:"left",store:e.store,stripe:e.stripe,highlight:e.highlightCurrentRow,"row-class-name":e.rowClassName,"row-style":e.rowStyle}}),e.$slots.append?n("div",{staticClass:"el-table__append-gutter",style:{height:e.layout.appendHeight+"px"}}):e._e()],1),e.showSummary?n("div",{directives:[{name:"show",rawName:"v-show",value:e.data&&e.data.length>0,expression:"data && data.length > 0"}],ref:"fixedFooterWrapper",staticClass:"el-table__fixed-footer-wrapper"},[n("table-footer",{style:{width:e.bodyWidth},attrs:{fixed:"left",border:e.border,"sum-text":e.sumText||e.t("el.table.sumText"),"summary-method":e.summaryMethod,store:e.store}})],1):e._e()]):e._e(),e.rightFixedColumns.length>0?n("div",{directives:[{name:"mousewheel",rawName:"v-mousewheel",value:e.handleFixedMousewheel,expression:"handleFixedMousewheel"}],ref:"rightFixedWrapper",staticClass:"el-table__fixed-right",style:[{width:e.layout.rightFixedWidth?e.layout.rightFixedWidth+"px":"",right:e.layout.scrollY?(e.border?e.layout.gutterWidth:e.layout.gutterWidth||0)+"px":""},e.fixedHeight]},[e.showHeader?n("div",{ref:"rightFixedHeaderWrapper",staticClass:"el-table__fixed-header-wrapper"},[n("table-header",{ref:"rightFixedTableHeader",style:{width:e.bodyWidth},attrs:{fixed:"right",border:e.border,store:e.store}})],1):e._e(),n("div",{ref:"rightFixedBodyWrapper",staticClass:"el-table__fixed-body-wrapper",style:[{top:e.layout.headerHeight+"px"},e.fixedBodyHeight]},[n("table-body",{style:{width:e.bodyWidth},attrs:{fixed:"right",store:e.store,stripe:e.stripe,"row-class-name":e.rowClassName,"row-style":e.rowStyle,highlight:e.highlightCurrentRow}}),e.$slots.append?n("div",{staticClass:"el-table__append-gutter",style:{height:e.layout.appendHeight+"px"}}):e._e()],1),e.showSummary?n("div",{directives:[{name:"show",rawName:"v-show",value:e.data&&e.data.length>0,expression:"data && data.length > 0"}],ref:"rightFixedFooterWrapper",staticClass:"el-table__fixed-footer-wrapper"},[n("table-footer",{style:{width:e.bodyWidth},attrs:{fixed:"right",border:e.border,"sum-text":e.sumText||e.t("el.table.sumText"),"summary-method":e.summaryMethod,store:e.store}})],1):e._e()]):e._e(),e.rightFixedColumns.length>0?n("div",{ref:"rightFixedPatch",staticClass:"el-table__fixed-right-patch",style:{width:e.layout.scrollY?e.layout.gutterWidth+"px":"0",height:e.layout.headerHeight+"px"}}):e._e(),n("div",{directives:[{name:"show",rawName:"v-show",value:e.resizeProxyVisible,expression:"resizeProxyVisible"}],ref:"resizeProxy",staticClass:"el-table__column-resize-proxy"})])},o=[];r._withStripped=!0;var i=n(18),a=n.n(i),s=n(43),l=n(16),u=n(46),c=n.n(u),f="undefined"!==typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>-1,d=function(e,t){e&&e.addEventListener&&e.addEventListener(f?"DOMMouseScroll":"mousewheel",(function(e){var n=c()(e);t&&t.apply(this,[e,n])}))},p={bind:function(e,t){d(e,t.value)}},h=n(6),v=n.n(h),m=n(11),y=n.n(m),g=n(7),b=n.n(g),_=n(9),x=n.n(_),w=n(8),C={data:function(){return{states:{defaultExpandAll:!1,expandRows:[]}}},methods:{updateExpandRows:function(){var e=this.states,t=e.data,n=void 0===t?[]:t,r=e.rowKey,o=e.defaultExpandAll,i=e.expandRows;if(o)this.states.expandRows=n.slice();else if(r){var a=Object(w["f"])(i,r);this.states.expandRows=n.reduce((function(e,t){var n=Object(w["g"])(t,r),o=a[n];return o&&e.push(t),e}),[])}else this.states.expandRows=[]},toggleRowExpansion:function(e,t){var n=Object(w["m"])(this.states.expandRows,e,t);n&&(this.table.$emit("expand-change",e,this.states.expandRows.slice()),this.scheduleLayout())},setExpandRowKeys:function(e){this.assertRowKey();var t=this.states,n=t.data,r=t.rowKey,o=Object(w["f"])(n,r);this.states.expandRows=e.reduce((function(e,t){var n=o[t];return n&&e.push(n.row),e}),[])},isRowExpanded:function(e){var t=this.states,n=t.expandRows,r=void 0===n?[]:n,o=t.rowKey;if(o){var i=Object(w["f"])(r,o);return!!i[Object(w["g"])(e,o)]}return-1!==r.indexOf(e)}}},S=n(3),O={data:function(){return{states:{_currentRowKey:null,currentRow:null}}},methods:{setCurrentRowKey:function(e){this.assertRowKey(),this.states._currentRowKey=e,this.setCurrentRowByKey(e)},restoreCurrentRowKey:function(){this.states._currentRowKey=null},setCurrentRowByKey:function(e){var t=this.states,n=t.data,r=void 0===n?[]:n,o=t.rowKey,i=null;o&&(i=Object(S["arrayFind"])(r,(function(t){return Object(w["g"])(t,o)===e}))),t.currentRow=i},updateCurrentRow:function(e){var t=this.states,n=this.table,r=t.currentRow;if(e&&e!==r)return t.currentRow=e,void n.$emit("current-change",e,r);!e&&r&&(t.currentRow=null,n.$emit("current-change",null,r))},updateCurrentRowData:function(){var e=this.states,t=this.table,n=e.rowKey,r=e._currentRowKey,o=e.data||[],i=e.currentRow;if(-1===o.indexOf(i)&&i){if(n){var a=Object(w["g"])(i,n);this.setCurrentRowByKey(a)}else e.currentRow=null;null===e.currentRow&&t.$emit("current-change",null,i)}else r&&(this.setCurrentRowByKey(r),this.restoreCurrentRowKey())}}},E=Object.assign||function(e){for(var t=1;t0&&t[0]&&"selection"===t[0].type&&!t[0].fixed&&(t[0].fixed=!0,e.fixedColumns.unshift(t[0]));var n=t.filter((function(e){return!e.fixed}));e.originColumns=[].concat(e.fixedColumns).concat(n).concat(e.rightFixedColumns);var r=j(n),o=j(e.fixedColumns),i=j(e.rightFixedColumns);e.leafColumnsLength=r.length,e.fixedLeafColumnsLength=o.length,e.rightFixedLeafColumnsLength=i.length,e.columns=[].concat(o).concat(r).concat(i),e.isComplex=e.fixedColumns.length>0||e.rightFixedColumns.length>0},scheduleLayout:function(e){e&&this.updateColumns(),this.table.debouncedUpdateLayout()},isSelected:function(e){var t=this.states.selection,n=void 0===t?[]:t;return n.indexOf(e)>-1},clearSelection:function(){var e=this.states;e.isAllSelected=!1;var t=e.selection;t.length&&(e.selection=[],this.table.$emit("selection-change",[]))},cleanSelection:function(){var e=this.states,t=e.data,n=e.rowKey,r=e.selection,o=void 0;if(n){o=[];var i=Object(w["f"])(r,n),a=Object(w["f"])(t,n);for(var s in i)i.hasOwnProperty(s)&&!a[s]&&o.push(i[s].row)}else o=r.filter((function(e){return-1===t.indexOf(e)}));if(o.length){var l=r.filter((function(e){return-1===o.indexOf(e)}));e.selection=l,this.table.$emit("selection-change",l.slice())}},toggleRowSelection:function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=Object(w["m"])(this.states.selection,e,t);if(r){var o=(this.states.selection||[]).slice();n&&this.table.$emit("select",o,e),this.table.$emit("selection-change",o)}},_toggleAllSelection:function(){var e=this.states,t=e.data,n=void 0===t?[]:t,r=e.selection,o=e.selectOnIndeterminate?!e.isAllSelected:!(e.isAllSelected||r.length);e.isAllSelected=o;var i=!1;n.forEach((function(t,n){e.selectable?e.selectable.call(null,t,n)&&Object(w["m"])(r,t,o)&&(i=!0):Object(w["m"])(r,t,o)&&(i=!0)})),i&&this.table.$emit("selection-change",r?r.slice():[]),this.table.$emit("select-all",r)},updateSelectionByRowKey:function(){var e=this.states,t=e.selection,n=e.rowKey,r=e.data,o=Object(w["f"])(t,n);r.forEach((function(e){var r=Object(w["g"])(e,n),i=o[r];i&&(t[i.index]=e)}))},updateAllSelected:function(){var e=this.states,t=e.selection,n=e.rowKey,r=e.selectable,o=e.data||[];if(0!==o.length){var i=void 0;n&&(i=Object(w["f"])(t,n));for(var a=function(e){return i?!!i[Object(w["g"])(e,n)]:-1!==t.indexOf(e)},s=!0,l=0,u=0,c=o.length;u1?n-1:0),o=1;o1&&void 0!==arguments[1]?arguments[1]:{};if(!e)throw new Error("Table is required.");var n=new T;return n.table=e,n.toggleAllSelection=P()(10,n._toggleAllSelection),Object.keys(t).forEach((function(e){n.states[e]=t[e]})),n}function N(e){var t={};return Object.keys(e).forEach((function(n){var r=e[n],o=void 0;"string"===typeof r?o=function(){return this.store.states[r]}:"function"===typeof r?o=function(){return r.call(this,this.store.states)}:console.error("invalid value type"),o&&(t[n]=o)})),t}var R=n(39),I=n.n(R);function F(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var H=function(){function e(t){for(var n in F(this,e),this.observers=[],this.table=null,this.store=null,this.columns=null,this.fit=!0,this.showHeader=!0,this.height=null,this.scrollX=!1,this.scrollY=!1,this.bodyWidth=null,this.fixedWidth=null,this.rightFixedWidth=null,this.tableHeight=null,this.headerHeight=44,this.appendHeight=0,this.footerHeight=44,this.viewportHeight=null,this.bodyHeight=null,this.fixedBodyHeight=null,this.gutterWidth=I()(),t)t.hasOwnProperty(n)&&(this[n]=t[n]);if(!this.table)throw new Error("table is required for Table Layout");if(!this.store)throw new Error("store is required for Table Layout")}return e.prototype.updateScrollY=function(){var e=this.height;if(null===e)return!1;var t=this.table.bodyWrapper;if(this.table.$el&&t){var n=t.querySelector(".el-table__body"),r=this.scrollY,o=n.offsetHeight>this.bodyHeight;return this.scrollY=o,r!==o}return!1},e.prototype.setHeight=function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"height";if(!b.a.prototype.$isServer){var r=this.table.$el;if(e=Object(w["j"])(e),this.height=e,!r&&(e||0===e))return b.a.nextTick((function(){return t.setHeight(e,n)}));"number"===typeof e?(r.style[n]=e+"px",this.updateElsHeight()):"string"===typeof e&&(r.style[n]=e,this.updateElsHeight())}},e.prototype.setMaxHeight=function(e){this.setHeight(e,"max-height")},e.prototype.getFlattenColumns=function(){var e=[],t=this.table.columns;return t.forEach((function(t){t.isColumnGroup?e.push.apply(e,t.columns):e.push(t)})),e},e.prototype.updateElsHeight=function(){var e=this;if(!this.table.$ready)return b.a.nextTick((function(){return e.updateElsHeight()}));var t=this.table.$refs,n=t.headerWrapper,r=t.appendWrapper,o=t.footerWrapper;if(this.appendHeight=r?r.offsetHeight:0,!this.showHeader||n){var i=n?n.querySelector(".el-table__header tr"):null,a=this.headerDisplayNone(i),s=this.headerHeight=this.showHeader?n.offsetHeight:0;if(this.showHeader&&!a&&n.offsetWidth>0&&(this.table.columns||[]).length>0&&s<2)return b.a.nextTick((function(){return e.updateElsHeight()}));var l=this.tableHeight=this.table.$el.clientHeight,u=this.footerHeight=o?o.offsetHeight:0;null!==this.height&&(this.bodyHeight=l-s-u+(o?1:0)),this.fixedBodyHeight=this.scrollX?this.bodyHeight-this.gutterWidth:this.bodyHeight;var c=!(this.store.states.data&&this.store.states.data.length);this.viewportHeight=this.scrollX?l-(c?0:this.gutterWidth):l,this.updateScrollY(),this.notifyObservers("scrollable")}},e.prototype.headerDisplayNone=function(e){if(!e)return!0;var t=e;while("DIV"!==t.tagName){if("none"===getComputedStyle(t).display)return!0;t=t.parentElement}return!1},e.prototype.updateColumnsWidth=function(){if(!b.a.prototype.$isServer){var e=this.fit,t=this.table.$el.clientWidth,n=0,r=this.getFlattenColumns(),o=r.filter((function(e){return"number"!==typeof e.width}));if(r.forEach((function(e){"number"===typeof e.width&&e.realWidth&&(e.realWidth=null)})),o.length>0&&e){r.forEach((function(e){n+=e.width||e.minWidth||80}));var i=this.scrollY?this.gutterWidth:0;if(n<=t-i){this.scrollX=!1;var a=t-i-n;if(1===o.length)o[0].realWidth=(o[0].minWidth||80)+a;else{var s=o.reduce((function(e,t){return e+(t.minWidth||80)}),0),l=a/s,u=0;o.forEach((function(e,t){if(0!==t){var n=Math.floor((e.minWidth||80)*l);u+=n,e.realWidth=(e.minWidth||80)+n}})),o[0].realWidth=(o[0].minWidth||80)+a-u}}else this.scrollX=!0,o.forEach((function(e){e.realWidth=e.minWidth}));this.bodyWidth=Math.max(n,t),this.table.resizeState.width=this.bodyWidth}else r.forEach((function(e){e.width||e.minWidth?e.realWidth=e.width||e.minWidth:e.realWidth=80,n+=e.realWidth})),this.scrollX=n>t,this.bodyWidth=n;var c=this.store.states.fixedColumns;if(c.length>0){var f=0;c.forEach((function(e){f+=e.realWidth||e.width})),this.fixedWidth=f}var d=this.store.states.rightFixedColumns;if(d.length>0){var p=0;d.forEach((function(e){p+=e.realWidth||e.width})),this.rightFixedWidth=p}this.notifyObservers("columns")}},e.prototype.addObserver=function(e){this.observers.push(e)},e.prototype.removeObserver=function(e){var t=this.observers.indexOf(e);-1!==t&&this.observers.splice(t,1)},e.prototype.notifyObservers=function(e){var t=this,n=this.observers;n.forEach((function(n){switch(e){case"columns":n.onColumnsChange(t);break;case"scrollable":n.onScrollableChange(t);break;default:throw new Error("Table Layout don't have event "+e+".")}}))},e}(),z=H,D=n(2),B=n(29),W=n.n(B),V={created:function(){this.tableLayout.addObserver(this)},destroyed:function(){this.tableLayout.removeObserver(this)},computed:{tableLayout:function(){var e=this.layout;if(!e&&this.table&&(e=this.table.layout),!e)throw new Error("Can not find table layout.");return e}},mounted:function(){this.onColumnsChange(this.tableLayout),this.onScrollableChange(this.tableLayout)},updated:function(){this.__updated__||(this.onColumnsChange(this.tableLayout),this.onScrollableChange(this.tableLayout),this.__updated__=!0)},methods:{onColumnsChange:function(e){var t=this.$el.querySelectorAll("colgroup > col");if(t.length){var n=e.getFlattenColumns(),r={};n.forEach((function(e){r[e.id]=e}));for(var o=0,i=t.length;o col[name=gutter]"),n=0,r=t.length;n=this.leftFixedLeafCount:"right"===this.fixed?e=this.columnsCount-this.rightFixedLeafCount},getSpan:function(e,t,n,r){var o=1,i=1,a=this.table.spanMethod;if("function"===typeof a){var s=a({row:e,column:t,rowIndex:n,columnIndex:r});Array.isArray(s)?(o=s[0],i=s[1]):"object"===("undefined"===typeof s?"undefined":U(s))&&(o=s.rowspan,i=s.colspan)}return{rowspan:o,colspan:i}},getRowStyle:function(e,t){var n=this.table.rowStyle;return"function"===typeof n?n.call(null,{row:e,rowIndex:t}):n||null},getRowClass:function(e,t){var n=["el-table__row"];this.table.highlightCurrentRow&&e===this.store.states.currentRow&&n.push("current-row"),this.stripe&&t%2===1&&n.push("el-table__row--striped");var r=this.table.rowClassName;return"string"===typeof r?n.push(r):"function"===typeof r&&n.push(r.call(null,{row:e,rowIndex:t})),this.store.states.expandRows.indexOf(e)>-1&&n.push("expanded"),n},getCellStyle:function(e,t,n,r){var o=this.table.cellStyle;return"function"===typeof o?o.call(null,{rowIndex:e,columnIndex:t,row:n,column:r}):o},getCellClass:function(e,t,n,r){var o=[r.id,r.align,r.className];this.isColumnHidden(t)&&o.push("is-hidden");var i=this.table.cellClassName;return"string"===typeof i?o.push(i):"function"===typeof i&&o.push(i.call(null,{rowIndex:e,columnIndex:t,row:n,column:r})),o.join(" ")},getColspanRealWidth:function(e,t,n){if(t<1)return e[n].realWidth;var r=e.map((function(e){var t=e.realWidth;return t})).slice(n,n+t);return r.reduce((function(e,t){return e+t}),-1)},handleCellMouseEnter:function(e,t){var n=this.table,r=Object(w["b"])(e);if(r){var o=Object(w["c"])(n,r),i=n.hoverState={cell:r,column:o,row:t};n.$emit("cell-mouse-enter",i.row,i.column,i.cell,e)}var a=e.target.querySelector(".cell");if(Object(D["hasClass"])(a,"el-tooltip")&&a.childNodes.length){var s=document.createRange();s.setStart(a,0),s.setEnd(a,a.childNodes.length);var l=s.getBoundingClientRect().width,u=(parseInt(Object(D["getStyle"])(a,"paddingLeft"),10)||0)+(parseInt(Object(D["getStyle"])(a,"paddingRight"),10)||0);if((l+u>a.offsetWidth||a.scrollWidth>a.offsetWidth)&&this.$refs.tooltip){var c=this.$refs.tooltip;this.tooltipContent=r.innerText||r.textContent,c.referenceElm=r,c.$refs.popper&&(c.$refs.popper.style.display="none"),c.doDestroy(),c.setExpectedState(!0),this.activateTooltip(c)}}},handleCellMouseLeave:function(e){var t=this.$refs.tooltip;t&&(t.setExpectedState(!1),t.handleClosePopper());var n=Object(w["b"])(e);if(n){var r=this.table.hoverState||{};this.table.$emit("cell-mouse-leave",r.row,r.column,r.cell,e)}},handleMouseEnter:P()(30,(function(e){this.store.commit("setHoverRow",e)})),handleMouseLeave:P()(30,(function(){this.store.commit("setHoverRow",null)})),handleContextMenu:function(e,t){this.handleEvent(e,t,"contextmenu")},handleDoubleClick:function(e,t){this.handleEvent(e,t,"dblclick")},handleClick:function(e,t){this.store.commit("setCurrentRow",t),this.handleEvent(e,t,"click")},handleEvent:function(e,t,n){var r=this.table,o=Object(w["b"])(e),i=void 0;o&&(i=Object(w["c"])(r,o),i&&r.$emit("cell-"+n,t,i,o,e)),r.$emit("row-"+n,t,i,e)},rowRender:function(e,t,n){var r=this,o=this.$createElement,i=this.treeIndent,a=this.columns,s=this.firstDefaultColumnIndex,l=a.map((function(e,t){return r.isColumnHidden(t)})),u=this.getRowClass(e,t),c=!0;n&&(u.push("el-table__row--level-"+n.level),c=n.display);var f=c?null:{display:"none"};return o("tr",{style:[f,this.getRowStyle(e,t)],class:u,key:this.getKeyOfRow(e,t),on:{dblclick:function(t){return r.handleDoubleClick(t,e)},click:function(t){return r.handleClick(t,e)},contextmenu:function(t){return r.handleContextMenu(t,e)},mouseenter:function(e){return r.handleMouseEnter(t)},mouseleave:this.handleMouseLeave}},[a.map((function(u,c){var f=r.getSpan(e,u,t,c),d=f.rowspan,p=f.colspan;if(!d||!p)return null;var h=q({},u);h.realWidth=r.getColspanRealWidth(a,p,c);var v={store:r.store,_self:r.context||r.table.$vnode.context,column:h,row:e,$index:t};return c===s&&n&&(v.treeNode={indent:n.level*i,level:n.level},"boolean"===typeof n.expanded&&(v.treeNode.expanded=n.expanded,"loading"in n&&(v.treeNode.loading=n.loading),"noLazyChildren"in n&&(v.treeNode.noLazyChildren=n.noLazyChildren))),o("td",{style:r.getCellStyle(t,c,e,u),class:r.getCellClass(t,c,e,u),attrs:{rowspan:d,colspan:p},on:{mouseenter:function(t){return r.handleCellMouseEnter(t,e)},mouseleave:r.handleCellMouseLeave}},[u.renderCell.call(r._renderProxy,r.$createElement,v,l[c])])}))])},wrappedRowRender:function(e,t){var n=this,r=this.$createElement,o=this.store,i=o.isRowExpanded,a=o.assertRowKey,s=o.states,l=s.treeData,u=s.lazyTreeNodeMap,c=s.childrenColumnName,f=s.rowKey;if(this.hasExpandColumn&&i(e)){var d=this.table.renderExpanded,p=this.rowRender(e,t);return d?[[p,r("tr",{key:"expanded-row__"+p.key},[r("td",{attrs:{colspan:this.columnsCount},class:"el-table__expanded-cell"},[d(this.$createElement,{row:e,$index:t,store:this.store})])])]]:(console.error("[Element Error]renderExpanded is required."),p)}if(Object.keys(l).length){a();var h=Object(w["g"])(e,f),v=l[h],m=null;v&&(m={expanded:v.expanded,level:v.level,display:!0},"boolean"===typeof v.lazy&&("boolean"===typeof v.loaded&&v.loaded&&(m.noLazyChildren=!(v.children&&v.children.length)),m.loading=v.loading));var y=[this.rowRender(e,t,m)];if(v){var g=0,b=function e(r,o){r&&r.length&&o&&r.forEach((function(r){var i={display:o.display&&o.expanded,level:o.level+1},a=Object(w["g"])(r,f);if(void 0===a||null===a)throw new Error("for nested data item, row-key is required.");if(v=q({},l[a]),v&&(i.expanded=v.expanded,v.level=v.level||i.level,v.display=!(!v.expanded||!i.display),"boolean"===typeof v.lazy&&("boolean"===typeof v.loaded&&v.loaded&&(i.noLazyChildren=!(v.children&&v.children.length)),i.loading=v.loading)),g++,y.push(n.rowRender(r,t+g,i)),v){var s=u[a]||r[c];e(s,v)}}))};v.display=!0;var _=u[h]||e[c];b(_,v)}return y}return this.rowRender(e,t)}}},G=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"}},[e.multiple?n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleOutsideClick,expression:"handleOutsideClick"},{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-table-filter"},[n("div",{staticClass:"el-table-filter__content"},[n("el-scrollbar",{attrs:{"wrap-class":"el-table-filter__wrap"}},[n("el-checkbox-group",{staticClass:"el-table-filter__checkbox-group",model:{value:e.filteredValue,callback:function(t){e.filteredValue=t},expression:"filteredValue"}},e._l(e.filters,(function(t){return n("el-checkbox",{key:t.value,attrs:{label:t.value}},[e._v(e._s(t.text))])})),1)],1)],1),n("div",{staticClass:"el-table-filter__bottom"},[n("button",{class:{"is-disabled":0===e.filteredValue.length},attrs:{disabled:0===e.filteredValue.length},on:{click:e.handleConfirm}},[e._v(e._s(e.t("el.table.confirmFilter")))]),n("button",{on:{click:e.handleReset}},[e._v(e._s(e.t("el.table.resetFilter")))])])]):n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleOutsideClick,expression:"handleOutsideClick"},{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-table-filter"},[n("ul",{staticClass:"el-table-filter__list"},[n("li",{staticClass:"el-table-filter__list-item",class:{"is-active":void 0===e.filterValue||null===e.filterValue},on:{click:function(t){e.handleSelect(null)}}},[e._v(e._s(e.t("el.table.clearFilter")))]),e._l(e.filters,(function(t){return n("li",{key:t.value,staticClass:"el-table-filter__list-item",class:{"is-active":e.isActive(t)},attrs:{label:t.value},on:{click:function(n){e.handleSelect(t.value)}}},[e._v(e._s(t.text))])}))],2)])])},X=[];G._withStripped=!0;var Y=n(5),J=n.n(Y),Z=n(15),Q=n(12),ee=n.n(Q),te=[];!b.a.prototype.$isServer&&document.addEventListener("click",(function(e){te.forEach((function(t){var n=e.target;t&&t.$el&&(n===t.$el||t.$el.contains(n)||t.handleOutsideClick&&t.handleOutsideClick(e))}))}));var ne={open:function(e){e&&te.push(e)},close:function(e){var t=te.indexOf(e);-1!==t&&te.splice(e,1)}},re=n(40),oe=n.n(re),ie=n(14),ae=n.n(ie),se={name:"ElTableFilterPanel",mixins:[J.a,v.a],directives:{Clickoutside:ee.a},components:{ElCheckbox:a.a,ElCheckboxGroup:oe.a,ElScrollbar:ae.a},props:{placement:{type:String,default:"bottom-end"}},methods:{isActive:function(e){return e.value===this.filterValue},handleOutsideClick:function(){var e=this;setTimeout((function(){e.showPopper=!1}),16)},handleConfirm:function(){this.confirmFilter(this.filteredValue),this.handleOutsideClick()},handleReset:function(){this.filteredValue=[],this.confirmFilter(this.filteredValue),this.handleOutsideClick()},handleSelect:function(e){this.filterValue=e,"undefined"!==typeof e&&null!==e?this.confirmFilter(this.filteredValue):this.confirmFilter([]),this.handleOutsideClick()},confirmFilter:function(e){this.table.store.commit("filterChange",{column:this.column,values:e}),this.table.store.updateAllSelected()}},data:function(){return{table:null,cell:null,column:null}},computed:{filters:function(){return this.column&&this.column.filters},filterValue:{get:function(){return(this.column.filteredValue||[])[0]},set:function(e){this.filteredValue&&("undefined"!==typeof e&&null!==e?this.filteredValue.splice(0,1,e):this.filteredValue.splice(0,1))}},filteredValue:{get:function(){return this.column&&this.column.filteredValue||[]},set:function(e){this.column&&(this.column.filteredValue=e)}},multiple:function(){return!this.column||this.column.filterMultiple}},mounted:function(){var e=this;this.popperElm=this.$el,this.referenceElm=this.cell,this.table.bodyWrapper.addEventListener("scroll",(function(){e.updatePopper()})),this.$watch("showPopper",(function(t){e.column&&(e.column.filterOpened=t),t?ne.open(e):ne.close(e)}))},watch:{showPopper:function(e){!0===e&&parseInt(this.popperJS._popper.style.zIndex,10)1;return o&&(this.$parent.isGroup=!0),e("table",{class:"el-table__header",attrs:{cellspacing:"0",cellpadding:"0",border:"0"}},[e("colgroup",[this.columns.map((function(t){return e("col",{attrs:{name:t.id},key:t.id})})),this.hasGutter?e("col",{attrs:{name:"gutter"}}):""]),e("thead",{class:[{"is-group":o,"has-gutter":this.hasGutter}]},[this._l(r,(function(n,r){return e("tr",{style:t.getHeaderRowStyle(r),class:t.getHeaderRowClass(r)},[n.map((function(o,i){return e("th",{attrs:{colspan:o.colSpan,rowspan:o.rowSpan},on:{mousemove:function(e){return t.handleMouseMove(e,o)},mouseout:t.handleMouseOut,mousedown:function(e){return t.handleMouseDown(e,o)},click:function(e){return t.handleHeaderClick(e,o)},contextmenu:function(e){return t.handleHeaderContextMenu(e,o)}},style:t.getHeaderCellStyle(r,i,n,o),class:t.getHeaderCellClass(r,i,n,o),key:o.id},[e("div",{class:["cell",o.filteredValue&&o.filteredValue.length>0?"highlight":"",o.labelClassName]},[o.renderHeader?o.renderHeader.call(t._renderProxy,e,{column:o,$index:i,store:t.store,_self:t.$parent.$vnode.context}):o.label,o.sortable?e("span",{class:"caret-wrapper",on:{click:function(e){return t.handleSortClick(e,o)}}},[e("i",{class:"sort-caret ascending",on:{click:function(e){return t.handleSortClick(e,o,"ascending")}}}),e("i",{class:"sort-caret descending",on:{click:function(e){return t.handleSortClick(e,o,"descending")}}})]):"",o.filterable?e("span",{class:"el-table__column-filter-trigger",on:{click:function(e){return t.handleFilterClick(e,o)}}},[e("i",{class:["el-icon-arrow-down",o.filterOpened?"el-icon-arrow-up":""]})]):""])])})),t.hasGutter?e("th",{class:"gutter"}):""])}))])])},props:{fixed:String,store:{required:!0},border:Boolean,defaultSort:{type:Object,default:function(){return{prop:"",order:""}}}},components:{ElCheckbox:a.a},computed:de({table:function(){return this.$parent},hasGutter:function(){return!this.fixed&&this.tableLayout.gutterWidth}},N({columns:"columns",isAllSelected:"isAllSelected",leftFixedLeafCount:"fixedLeafColumnsLength",rightFixedLeafCount:"rightFixedLeafColumnsLength",columnsCount:function(e){return e.columns.length},leftFixedCount:function(e){return e.fixedColumns.length},rightFixedCount:function(e){return e.rightFixedColumns.length}})),created:function(){this.filterPanels={}},mounted:function(){var e=this;this.$nextTick((function(){var t=e.defaultSort,n=t.prop,r=t.order,o=!0;e.store.commit("sort",{prop:n,order:r,init:o})}))},beforeDestroy:function(){var e=this.filterPanels;for(var t in e)e.hasOwnProperty(t)&&e[t]&&e[t].$destroy(!0)},methods:{isCellHidden:function(e,t){for(var n=0,r=0;r=this.leftFixedLeafCount:"right"===this.fixed?n=this.columnsCount-this.rightFixedLeafCount},getHeaderRowStyle:function(e){var t=this.table.headerRowStyle;return"function"===typeof t?t.call(null,{rowIndex:e}):t},getHeaderRowClass:function(e){var t=[],n=this.table.headerRowClassName;return"string"===typeof n?t.push(n):"function"===typeof n&&t.push(n.call(null,{rowIndex:e})),t.join(" ")},getHeaderCellStyle:function(e,t,n,r){var o=this.table.headerCellStyle;return"function"===typeof o?o.call(null,{rowIndex:e,columnIndex:t,row:n,column:r}):o},getHeaderCellClass:function(e,t,n,r){var o=[r.id,r.order,r.headerAlign,r.className,r.labelClassName];0===e&&this.isCellHidden(t,n)&&o.push("is-hidden"),r.children||o.push("is-leaf"),r.sortable&&o.push("is-sortable");var i=this.table.headerCellClassName;return"string"===typeof i?o.push(i):"function"===typeof i&&o.push(i.call(null,{rowIndex:e,columnIndex:t,row:n,column:r})),o.join(" ")},toggleAllSelection:function(e){e.stopPropagation(),this.store.commit("toggleAllSelection")},handleFilterClick:function(e,t){e.stopPropagation();var n=e.target,r="TH"===n.tagName?n:n.parentNode;if(!Object(D["hasClass"])(r,"noclick")){r=r.querySelector(".el-table__column-filter-trigger")||r;var o=this.$parent,i=this.filterPanels[t.id];i&&t.filterOpened?i.showPopper=!1:(i||(i=new b.a(fe),this.filterPanels[t.id]=i,t.filterPlacement&&(i.placement=t.filterPlacement),i.table=o,i.cell=r,i.column=t,!this.$isServer&&i.$mount(document.createElement("div"))),setTimeout((function(){i.showPopper=!0}),16))}},handleHeaderClick:function(e,t){!t.filters&&t.sortable?this.handleSortClick(e,t):t.filterable&&!t.sortable&&this.handleFilterClick(e,t),this.$parent.$emit("header-click",t,e)},handleHeaderContextMenu:function(e,t){this.$parent.$emit("header-contextmenu",t,e)},handleMouseDown:function(e,t){var n=this;if(!this.$isServer&&!(t.children&&t.children.length>0)&&this.draggingColumn&&this.border){this.dragging=!0,this.$parent.resizeProxyVisible=!0;var r=this.$parent,o=r.$el,i=o.getBoundingClientRect().left,a=this.$el.querySelector("th."+t.id),s=a.getBoundingClientRect(),l=s.left-i+30;Object(D["addClass"])(a,"noclick"),this.dragState={startMouseLeft:e.clientX,startLeft:s.right-i,startColumnLeft:s.left-i,tableLeft:i};var u=r.$refs.resizeProxy;u.style.left=this.dragState.startLeft+"px",document.onselectstart=function(){return!1},document.ondragstart=function(){return!1};var c=function(e){var t=e.clientX-n.dragState.startMouseLeft,r=n.dragState.startLeft+t;u.style.left=Math.max(l,r)+"px"},f=function o(){if(n.dragging){var i=n.dragState,s=i.startColumnLeft,l=i.startLeft,f=parseInt(u.style.left,10),d=f-s;t.width=t.realWidth=d,r.$emit("header-dragend",t.width,l-s,t,e),n.store.scheduleLayout(),document.body.style.cursor="",n.dragging=!1,n.draggingColumn=null,n.dragState={},r.resizeProxyVisible=!1}document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",o),document.onselectstart=null,document.ondragstart=null,setTimeout((function(){Object(D["removeClass"])(a,"noclick")}),0)};document.addEventListener("mousemove",c),document.addEventListener("mouseup",f)}},handleMouseMove:function(e,t){if(!(t.children&&t.children.length>0)){var n=e.target;while(n&&"TH"!==n.tagName)n=n.parentNode;if(t&&t.resizable&&!this.dragging&&this.border){var r=n.getBoundingClientRect(),o=document.body.style;r.width>12&&r.right-e.pageX<8?(o.cursor="col-resize",Object(D["hasClass"])(n,"is-sortable")&&(n.style.cursor="col-resize"),this.draggingColumn=t):this.dragging||(o.cursor="",Object(D["hasClass"])(n,"is-sortable")&&(n.style.cursor="pointer"),this.draggingColumn=null)}}},handleMouseOut:function(){this.$isServer||(document.body.style.cursor="")},toggleOrder:function(e){var t=e.order,n=e.sortOrders;if(""===t)return n[0];var r=n.indexOf(t||null);return n[r>n.length-2?0:r+1]},handleSortClick:function(e,t,n){e.stopPropagation();var r=t.order===n?null:n||this.toggleOrder(t),o=e.target;while(o&&"TH"!==o.tagName)o=o.parentNode;if(o&&"TH"===o.tagName&&Object(D["hasClass"])(o,"noclick"))Object(D["removeClass"])(o,"noclick");else if(t.sortable){var i=this.store.states,a=i.sortProp,s=void 0,l=i.sortingColumn;(l!==t||l===t&&null===l.order)&&(l&&(l.order=null),i.sortingColumn=t,a=t.property),s=t.order=r||null,i.sortProp=a,i.sortOrder=s,this.store.commit("changeSortCondition")}}},data:function(){return{draggingColumn:null,dragging:!1,dragState:{}}}},me=Object.assign||function(e){for(var t=1;t=this.leftFixedLeafCount;if("right"===this.fixed){for(var r=0,o=0;o=this.columnsCount-this.rightFixedCount)},getRowClasses:function(e,t){var n=[e.id,e.align,e.labelClassName];return e.className&&n.push(e.className),this.isCellHidden(t,this.columns,e)&&n.push("is-hidden"),e.children||n.push("is-leaf"),n}}},ge=Object.assign||function(e){for(var t=1;t0){var r=n.scrollTop;t.pixelY<0&&0!==r&&e.preventDefault(),t.pixelY>0&&n.scrollHeight-n.clientHeight>r&&e.preventDefault(),n.scrollTop+=Math.ceil(t.pixelY/5)}else n.scrollLeft+=Math.ceil(t.pixelX/5)},handleHeaderFooterMousewheel:function(e,t){var n=t.pixelX,r=t.pixelY;Math.abs(n)>=Math.abs(r)&&(this.bodyWrapper.scrollLeft+=t.pixelX/5)},syncPostion:Object(s["throttle"])(20,(function(){var e=this.bodyWrapper,t=e.scrollLeft,n=e.scrollTop,r=e.offsetWidth,o=e.scrollWidth,i=this.$refs,a=i.headerWrapper,s=i.footerWrapper,l=i.fixedBodyWrapper,u=i.rightFixedBodyWrapper;a&&(a.scrollLeft=t),s&&(s.scrollLeft=t),l&&(l.scrollTop=n),u&&(u.scrollTop=n);var c=o-r-1;this.scrollPosition=t>=c?"right":0===t?"left":"middle"})),bindEvents:function(){this.bodyWrapper.addEventListener("scroll",this.syncPostion,{passive:!0}),this.fit&&Object(l["addResizeListener"])(this.$el,this.resizeListener)},unbindEvents:function(){this.bodyWrapper.removeEventListener("scroll",this.syncPostion,{passive:!0}),this.fit&&Object(l["removeResizeListener"])(this.$el,this.resizeListener)},resizeListener:function(){if(this.$ready){var e=!1,t=this.$el,n=this.resizeState,r=n.width,o=n.height,i=t.offsetWidth;r!==i&&(e=!0);var a=t.offsetHeight;(this.height||this.shouldUpdateHeight)&&o!==a&&(e=!0),e&&(this.resizeState.width=i,this.resizeState.height=a,this.doLayout())}},doLayout:function(){this.shouldUpdateHeight&&this.layout.updateElsHeight(),this.layout.updateColumnsWidth()},sort:function(e,t){this.store.commit("sort",{prop:e,order:t})},toggleAllSelection:function(){this.store.commit("toggleAllSelection")}},computed:ge({tableSize:function(){return this.size||(this.$ELEMENT||{}).size},bodyWrapper:function(){return this.$refs.bodyWrapper},shouldUpdateHeight:function(){return this.height||this.maxHeight||this.fixedColumns.length>0||this.rightFixedColumns.length>0},bodyWidth:function(){var e=this.layout,t=e.bodyWidth,n=e.scrollY,r=e.gutterWidth;return t?t-(n?r:0)+"px":""},bodyHeight:function(){var e=this.layout,t=e.headerHeight,n=void 0===t?0:t,r=e.bodyHeight,o=e.footerHeight,i=void 0===o?0:o;if(this.height)return{height:r?r+"px":""};if(this.maxHeight){var a=Object(w["j"])(this.maxHeight);if("number"===typeof a)return{"max-height":a-i-(this.showHeader?n:0)+"px"}}return{}},fixedBodyHeight:function(){if(this.height)return{height:this.layout.fixedBodyHeight?this.layout.fixedBodyHeight+"px":""};if(this.maxHeight){var e=Object(w["j"])(this.maxHeight);if("number"===typeof e)return e=this.layout.scrollX?e-this.layout.gutterWidth:e,this.showHeader&&(e-=this.layout.headerHeight),e-=this.layout.footerHeight,{"max-height":e+"px"}}return{}},fixedHeight:function(){return this.maxHeight?this.showSummary?{bottom:0}:{bottom:this.layout.scrollX&&this.data.length?this.layout.gutterWidth+"px":""}:this.showSummary?{height:this.layout.tableHeight?this.layout.tableHeight+"px":""}:{height:this.layout.viewportHeight?this.layout.viewportHeight+"px":""}},emptyBlockStyle:function(){if(this.data&&this.data.length)return null;var e="100%";return this.layout.appendHeight&&(e="calc(100% - "+this.layout.appendHeight+"px)"),{width:this.bodyWidth,height:e}}},N({selection:"selection",columns:"columns",tableData:"data",fixedColumns:"fixedColumns",rightFixedColumns:"rightFixedColumns"})),watch:{height:{immediate:!0,handler:function(e){this.layout.setHeight(e)}},maxHeight:{immediate:!0,handler:function(e){this.layout.setMaxHeight(e)}},currentRowKey:{immediate:!0,handler:function(e){this.rowKey&&this.store.setCurrentRowKey(e)}},data:{immediate:!0,handler:function(e){this.store.commit("setData",e)}},expandRowKeys:{immediate:!0,handler:function(e){e&&this.store.setExpandRowKeysAdapter(e)}}},created:function(){var e=this;this.tableId="el-table_"+be++,this.debouncedUpdateLayout=Object(s["debounce"])(50,(function(){return e.doLayout()}))},mounted:function(){var e=this;this.bindEvents(),this.store.updateColumns(),this.doLayout(),this.resizeState={width:this.$el.offsetWidth,height:this.$el.offsetHeight},this.store.states.columns.forEach((function(t){t.filteredValue&&t.filteredValue.length&&e.store.commit("filterChange",{column:t,values:t.filteredValue,silent:!0})})),this.$ready=!0},destroyed:function(){this.unbindEvents()},data:function(){var e=this.treeProps,t=e.hasChildren,n=void 0===t?"hasChildren":t,r=e.children,o=void 0===r?"children":r;this.store=L(this,{rowKey:this.rowKey,defaultExpandAll:this.defaultExpandAll,selectOnIndeterminate:this.selectOnIndeterminate,indent:this.indent,lazy:this.lazy,lazyColumnIdentifier:n,childrenColumnName:o});var i=new z({store:this.store,table:this,fit:this.fit,showHeader:this.showHeader});return{layout:i,isHidden:!1,renderExpanded:null,resizeProxyVisible:!1,resizeState:{width:null,height:null},isGroup:!1,scrollPosition:"left"}}},xe=_e,we=Object(ue["a"])(xe,r,o,!1,null,null,null);we.options.__file="packages/table/src/table.vue";var Ce=we.exports;Ce.install=function(e){e.component(Ce.name,Ce)};t["default"]=Ce}])},b41f:function(e,t,n){var r,o,i,a,s,l,u,c,f=n("d5dc"),d=n("4aef").f,p=n("67ea"),h=n("6dcf").set,v=n("c044"),m=f.MutationObserver||f.WebKitMutationObserver,y=f.process,g=f.Promise,b="process"==p(y),_=d(f,"queueMicrotask"),x=_&&_.value;x||(r=function(){var e,t;b&&(e=y.domain)&&e.exit();while(o){t=o.fn,o=o.next;try{t()}catch(n){throw o?a():i=void 0,n}}i=void 0,e&&e.enter()},b?a=function(){y.nextTick(r)}:m&&!v?(s=!0,l=document.createTextNode(""),new m(r).observe(l,{characterData:!0}),a=function(){l.data=s=!s}):g&&g.resolve?(u=g.resolve(void 0),c=u.then,a=function(){c.call(u,r)}):a=function(){h.call(f,r)}),e.exports=x||function(e){var t={fn:e,next:void 0};i&&(i.next=t),o||(o=t,a()),i=t}},b451:function(e,t,n){"use strict";t.__esModule=!0;var r=n("0261"),o=a(r),i=n("3c84");function a(e){return e&&e.__esModule?e:{default:e}}var s=[],l="@@clickoutsideContext",u=void 0,c=0;function f(e,t,n){return function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!(n&&n.context&&r.target&&o.target)||e.contains(r.target)||e.contains(o.target)||e===r.target||n.context.popperElm&&(n.context.popperElm.contains(r.target)||n.context.popperElm.contains(o.target))||(t.expression&&e[l].methodName&&n.context[e[l].methodName]?n.context[e[l].methodName]():e[l].bindingFn&&e[l].bindingFn())}}!o.default.prototype.$isServer&&(0,i.on)(document,"mousedown",(function(e){return u=e})),!o.default.prototype.$isServer&&(0,i.on)(document,"mouseup",(function(e){s.forEach((function(t){return t[l].documentHandler(e,u)}))})),t.default={bind:function(e,t,n){s.push(e);var r=c++;e[l]={id:r,documentHandler:f(e,t,n),methodName:t.expression,bindingFn:t.value}},update:function(e,t,n){e[l].documentHandler=f(e,t,n),e[l].methodName=t.expression,e[l].bindingFn=t.value},unbind:function(e){for(var t=s.length,n=0;n=74)&&(r=a.match(/Chrome\/(\d+)/),r&&(o=r[1]))),e.exports=o&&+o},c044:function(e,t,n){var r=n("a406");e.exports=/(iphone|ipod|ipad).*applewebkit/i.test(r)},c223:function(e,t,n){var r=n("7a23"),o=n("88b4"),i=n("ac83"),a=n("7dc7"),s=Object.defineProperty;t.f=r?s:function(e,t,n){if(i(e),t=a(t,!0),i(n),o)try{return s(e,t,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},c405:function(e,t,n){},c49e:function(e,t,n){var r=n("df50");e.exports=r("document","documentElement")},c77e:function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=74)}({0:function(e,t,n){"use strict";function r(e,t,n,r,o,i,a,s){var l,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):o&&(l=s?function(){o.call(this,this.$root.$options.shadowRoot)}:o),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var f=u.beforeCreate;u.beforeCreate=f?[].concat(f,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},2:function(e,t){e.exports=n("3c84")},3:function(e,t){e.exports=n("d41f")},5:function(e,t){e.exports=n("9bb9")},7:function(e,t){e.exports=n("0261")},74:function(e,t,n){"use strict";n.r(t);var r=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("span",[n("transition",{attrs:{name:e.transition},on:{"after-enter":e.handleAfterEnter,"after-leave":e.handleAfterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:!e.disabled&&e.showPopper,expression:"!disabled && showPopper"}],ref:"popper",staticClass:"el-popover el-popper",class:[e.popperClass,e.content&&"el-popover--plain"],style:{width:e.width+"px"},attrs:{role:"tooltip",id:e.tooltipId,"aria-hidden":e.disabled||!e.showPopper?"true":"false"}},[e.title?n("div",{staticClass:"el-popover__title",domProps:{textContent:e._s(e.title)}}):e._e(),e._t("default",[e._v(e._s(e.content))])],2)]),e._t("reference")],2)},o=[];r._withStripped=!0;var i=n(5),a=n.n(i),s=n(2),l=n(3),u={name:"ElPopover",mixins:[a.a],props:{trigger:{type:String,default:"click",validator:function(e){return["click","focus","hover","manual"].indexOf(e)>-1}},openDelay:{type:Number,default:0},closeDelay:{type:Number,default:200},title:String,disabled:Boolean,content:String,reference:{},popperClass:String,width:{},visibleArrow:{default:!0},arrowOffset:{type:Number,default:0},transition:{type:String,default:"fade-in-linear"},tabindex:{type:Number,default:0}},computed:{tooltipId:function(){return"el-popover-"+Object(l["generateId"])()}},watch:{showPopper:function(e){this.disabled||(e?this.$emit("show"):this.$emit("hide"))}},mounted:function(){var e=this,t=this.referenceElm=this.reference||this.$refs.reference,n=this.popper||this.$refs.popper;!t&&this.$slots.reference&&this.$slots.reference[0]&&(t=this.referenceElm=this.$slots.reference[0].elm),t&&(Object(s["addClass"])(t,"el-popover__reference"),t.setAttribute("aria-describedby",this.tooltipId),t.setAttribute("tabindex",this.tabindex),n.setAttribute("tabindex",0),"click"!==this.trigger&&(Object(s["on"])(t,"focusin",(function(){e.handleFocus();var n=t.__vue__;n&&"function"===typeof n.focus&&n.focus()})),Object(s["on"])(n,"focusin",this.handleFocus),Object(s["on"])(t,"focusout",this.handleBlur),Object(s["on"])(n,"focusout",this.handleBlur)),Object(s["on"])(t,"keydown",this.handleKeydown),Object(s["on"])(t,"click",this.handleClick)),"click"===this.trigger?(Object(s["on"])(t,"click",this.doToggle),Object(s["on"])(document,"click",this.handleDocumentClick)):"hover"===this.trigger?(Object(s["on"])(t,"mouseenter",this.handleMouseEnter),Object(s["on"])(n,"mouseenter",this.handleMouseEnter),Object(s["on"])(t,"mouseleave",this.handleMouseLeave),Object(s["on"])(n,"mouseleave",this.handleMouseLeave)):"focus"===this.trigger&&(this.tabindex<0&&console.warn("[Element Warn][Popover]a negative taindex means that the element cannot be focused by tab key"),t.querySelector("input, textarea")?(Object(s["on"])(t,"focusin",this.doShow),Object(s["on"])(t,"focusout",this.doClose)):(Object(s["on"])(t,"mousedown",this.doShow),Object(s["on"])(t,"mouseup",this.doClose)))},beforeDestroy:function(){this.cleanup()},deactivated:function(){this.cleanup()},methods:{doToggle:function(){this.showPopper=!this.showPopper},doShow:function(){this.showPopper=!0},doClose:function(){this.showPopper=!1},handleFocus:function(){Object(s["addClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!0)},handleClick:function(){Object(s["removeClass"])(this.referenceElm,"focusing")},handleBlur:function(){Object(s["removeClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!1)},handleMouseEnter:function(){var e=this;clearTimeout(this._timer),this.openDelay?this._timer=setTimeout((function(){e.showPopper=!0}),this.openDelay):this.showPopper=!0},handleKeydown:function(e){27===e.keyCode&&"manual"!==this.trigger&&this.doClose()},handleMouseLeave:function(){var e=this;clearTimeout(this._timer),this.closeDelay?this._timer=setTimeout((function(){e.showPopper=!1}),this.closeDelay):this.showPopper=!1},handleDocumentClick:function(e){var t=this.reference||this.$refs.reference,n=this.popper||this.$refs.popper;!t&&this.$slots.reference&&this.$slots.reference[0]&&(t=this.referenceElm=this.$slots.reference[0].elm),this.$el&&t&&!this.$el.contains(e.target)&&!t.contains(e.target)&&n&&!n.contains(e.target)&&(this.showPopper=!1)},handleAfterEnter:function(){this.$emit("after-enter")},handleAfterLeave:function(){this.$emit("after-leave"),this.doDestroy()},cleanup:function(){(this.openDelay||this.closeDelay)&&clearTimeout(this._timer)}},destroyed:function(){var e=this.reference;Object(s["off"])(e,"click",this.doToggle),Object(s["off"])(e,"mouseup",this.doClose),Object(s["off"])(e,"mousedown",this.doShow),Object(s["off"])(e,"focusin",this.doShow),Object(s["off"])(e,"focusout",this.doClose),Object(s["off"])(e,"mousedown",this.doShow),Object(s["off"])(e,"mouseup",this.doClose),Object(s["off"])(e,"mouseleave",this.handleMouseLeave),Object(s["off"])(e,"mouseenter",this.handleMouseEnter),Object(s["off"])(document,"click",this.handleDocumentClick)}},c=u,f=n(0),d=Object(f["a"])(c,r,o,!1,null,null,null);d.options.__file="packages/popover/src/main.vue";var p=d.exports,h=function(e,t,n){var r=t.expression?t.value:t.arg,o=n.context.$refs[r];o&&(Array.isArray(o)?o[0].$refs.reference=e:o.$refs.reference=e)},v={bind:function(e,t,n){h(e,t,n)},inserted:function(e,t,n){h(e,t,n)}},m=n(7),y=n.n(m);y.a.directive("popover",v),p.install=function(e){e.directive("popover",v),e.component(p.name,p)},p.directive=v;t["default"]=p}})},c85c:function(e,t,n){var r=n("d5dc"),o=n("200e"),i="__core-js_shared__",a=r[i]||o(i,{});e.exports=a},c9db:function(e,t,n){"use strict";var r,o,i,a,s=n("91fe"),l=n("e17a"),u=n("d5dc"),c=n("df50"),f=n("644f"),d=n("3d8a"),p=n("417f"),h=n("94d7"),v=n("a867"),m=n("d68d"),y=n("a9f2"),g=n("40d4"),b=n("67ea"),_=n("527d"),x=n("66b2"),w=n("e52f"),C=n("fb8e"),S=n("6dcf").set,O=n("b41f"),E=n("4301"),k=n("a7d9"),$=n("df22"),j=n("5c90"),A=n("d0e2"),T=n("12d9"),M=n("57c4"),P=n("bf98"),L=M("species"),N="Promise",R=A.get,I=A.set,F=A.getterFor(N),H=f,z=u.TypeError,D=u.document,B=u.process,W=c("fetch"),V=$.f,U=V,q="process"==b(B),K=!!(D&&D.createEvent&&u.dispatchEvent),G="unhandledrejection",X="rejectionhandled",Y=0,J=1,Z=2,Q=1,ee=2,te=T(N,(function(){var e=_(H)!==String(H);if(!e){if(66===P)return!0;if(!q&&"function"!=typeof PromiseRejectionEvent)return!0}if(l&&!H.prototype["finally"])return!0;if(P>=51&&/native code/.test(H))return!1;var t=H.resolve(1),n=function(e){e((function(){}),(function(){}))},r=t.constructor={};return r[L]=n,!(t.then((function(){}))instanceof n)})),ne=te||!w((function(e){H.all(e)["catch"]((function(){}))})),re=function(e){var t;return!(!m(e)||"function"!=typeof(t=e.then))&&t},oe=function(e,t,n){if(!t.notified){t.notified=!0;var r=t.reactions;O((function(){var o=t.value,i=t.state==J,a=0;while(r.length>a){var s,l,u,c=r[a++],f=i?c.ok:c.fail,d=c.resolve,p=c.reject,h=c.domain;try{f?(i||(t.rejection===ee&&le(e,t),t.rejection=Q),!0===f?s=o:(h&&h.enter(),s=f(o),h&&(h.exit(),u=!0)),s===c.promise?p(z("Promise-chain cycle")):(l=re(s))?l.call(s,d,p):d(s)):p(o)}catch(v){h&&!u&&h.exit(),p(v)}}t.reactions=[],t.notified=!1,n&&!t.rejection&&ae(e,t)}))}},ie=function(e,t,n){var r,o;K?(r=D.createEvent("Event"),r.promise=t,r.reason=n,r.initEvent(e,!1,!0),u.dispatchEvent(r)):r={promise:t,reason:n},(o=u["on"+e])?o(r):e===G&&k("Unhandled promise rejection",n)},ae=function(e,t){S.call(u,(function(){var n,r=t.value,o=se(t);if(o&&(n=j((function(){q?B.emit("unhandledRejection",r,e):ie(G,e,r)})),t.rejection=q||se(t)?ee:Q,n.error))throw n.value}))},se=function(e){return e.rejection!==Q&&!e.parent},le=function(e,t){S.call(u,(function(){q?B.emit("rejectionHandled",e):ie(X,e,t.value)}))},ue=function(e,t,n,r){return function(o){e(t,n,o,r)}},ce=function(e,t,n,r){t.done||(t.done=!0,r&&(t=r),t.value=n,t.state=Z,oe(e,t,!0))},fe=function(e,t,n,r){if(!t.done){t.done=!0,r&&(t=r);try{if(e===n)throw z("Promise can't be resolved itself");var o=re(n);o?O((function(){var r={done:!1};try{o.call(n,ue(fe,e,r,t),ue(ce,e,r,t))}catch(i){ce(e,r,i,t)}})):(t.value=n,t.state=J,oe(e,t,!1))}catch(i){ce(e,{done:!1},i,t)}}};te&&(H=function(e){g(this,H,N),y(e),r.call(this);var t=R(this);try{e(ue(fe,this,t),ue(ce,this,t))}catch(n){ce(this,t,n)}},r=function(e){I(this,{type:N,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:Y,value:void 0})},r.prototype=p(H.prototype,{then:function(e,t){var n=F(this),r=V(C(this,H));return r.ok="function"!=typeof e||e,r.fail="function"==typeof t&&t,r.domain=q?B.domain:void 0,n.parent=!0,n.reactions.push(r),n.state!=Y&&oe(this,n,!1),r.promise},catch:function(e){return this.then(void 0,e)}}),o=function(){var e=new r,t=R(e);this.promise=e,this.resolve=ue(fe,e,t),this.reject=ue(ce,e,t)},$.f=V=function(e){return e===H||e===i?new o(e):U(e)},l||"function"!=typeof f||(a=f.prototype.then,d(f.prototype,"then",(function(e,t){var n=this;return new H((function(e,t){a.call(n,e,t)})).then(e,t)}),{unsafe:!0}),"function"==typeof W&&s({global:!0,enumerable:!0,forced:!0},{fetch:function(e){return E(H,W.apply(u,arguments))}}))),s({global:!0,wrap:!0,forced:te},{Promise:H}),h(H,N,!1,!0),v(N),i=c(N),s({target:N,stat:!0,forced:te},{reject:function(e){var t=V(this);return t.reject.call(void 0,e),t.promise}}),s({target:N,stat:!0,forced:l||te},{resolve:function(e){return E(l&&this===i?H:this,e)}}),s({target:N,stat:!0,forced:ne},{all:function(e){var t=this,n=V(t),r=n.resolve,o=n.reject,i=j((function(){var n=y(t.resolve),i=[],a=0,s=1;x(e,(function(e){var l=a++,u=!1;i.push(void 0),s++,n.call(t,e).then((function(e){u||(u=!0,i[l]=e,--s||r(i))}),o)})),--s||r(i)}));return i.error&&o(i.value),n.promise},race:function(e){var t=this,n=V(t),r=n.reject,o=j((function(){var o=y(t.resolve);x(e,(function(e){o.call(t,e).then(n.resolve,r)}))}));return o.error&&r(o.value),n.promise}})},ca47:function(e,t,n){var r=n("60f8");e.exports=function(e,t,n){return void 0===n?r(e,t,!1):r(e,n,!1!==t)}},d0e2:function(e,t,n){var r,o,i,a=n("3109"),s=n("d5dc"),l=n("d68d"),u=n("2ba5"),c=n("f28d"),f=n("4d52"),d=n("4888"),p=s.WeakMap,h=function(e){return i(e)?o(e):r(e,{})},v=function(e){return function(t){var n;if(!l(t)||(n=o(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}};if(a){var m=new p,y=m.get,g=m.has,b=m.set;r=function(e,t){return b.call(m,e,t),t},o=function(e){return y.call(m,e)||{}},i=function(e){return g.call(m,e)}}else{var _=f("state");d[_]=!0,r=function(e,t){return u(e,_,t),t},o=function(e){return c(e,_)?e[_]:{}},i=function(e){return c(e,_)}}e.exports={set:r,get:o,has:i,enforce:h,getterFor:v}},d41f:function(e,t,n){"use strict";t.__esModule=!0,t.isEmpty=t.isEqual=t.arrayEquals=t.looseEqual=t.capitalize=t.kebabCase=t.autoprefixer=t.isFirefox=t.isEdge=t.isIE=t.coerceTruthyValueToArray=t.arrayFind=t.arrayFindIndex=t.escapeRegexpString=t.valueEquals=t.generateId=t.getValueByPath=void 0;var r="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.noop=u,t.hasOwn=c,t.toObject=d,t.getPropByPath=p,t.rafThrottle=g,t.objToArray=b;var o=n("0261"),i=s(o),a=n("22c9");function s(e){return e&&e.__esModule?e:{default:e}}var l=Object.prototype.hasOwnProperty;function u(){}function c(e,t){return l.call(e,t)}function f(e,t){for(var n in t)e[n]=t[n];return e}function d(e){for(var t={},n=0;n0&&void 0!==arguments[0]?arguments[0]:"";return String(e).replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")};var h=t.arrayFindIndex=function(e,t){for(var n=0;n!==e.length;++n)if(t(e[n]))return n;return-1},v=(t.arrayFind=function(e,t){var n=h(e,t);return-1!==n?e[n]:void 0},t.coerceTruthyValueToArray=function(e){return Array.isArray(e)?e:e?[e]:[]},t.isIE=function(){return!i.default.prototype.$isServer&&!isNaN(Number(document.documentMode))},t.isEdge=function(){return!i.default.prototype.$isServer&&navigator.userAgent.indexOf("Edge")>-1},t.isFirefox=function(){return!i.default.prototype.$isServer&&!!window.navigator.userAgent.match(/firefox/i)},t.autoprefixer=function(e){if("object"!==("undefined"===typeof e?"undefined":r(e)))return e;var t=["transform","transition","animation"],n=["ms-","webkit-"];return t.forEach((function(t){var r=e[t];t&&r&&n.forEach((function(n){e[n+t]=r}))})),e},t.kebabCase=function(e){var t=/([^-])([A-Z])/g;return e.replace(t,"$1-$2").replace(t,"$1-$2").toLowerCase()},t.capitalize=function(e){return(0,a.isString)(e)?e.charAt(0).toUpperCase()+e.slice(1):e},t.looseEqual=function(e,t){var n=(0,a.isObject)(e),r=(0,a.isObject)(t);return n&&r?JSON.stringify(e)===JSON.stringify(t):!n&&!r&&String(e)===String(t)}),m=t.arrayEquals=function(e,t){if(e=e||[],t=t||[],e.length!==t.length)return!1;for(var n=0;n=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}}),"values"),i.Arguments=i.Array,o("keys"),o("values"),o("entries")},da43:function(e,t,n){},da65:function(e,t,n){},da66:function(e,t,n){var r=n("d68d");e.exports=function(e){if(!r(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},daa7:function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=77)}({0:function(e,t,n){"use strict";function r(e,t,n,r,o,i,a,s){var l,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):o&&(l=s?function(){o.call(this,this.$root.$options.shadowRoot)}:o),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var f=u.beforeCreate;u.beforeCreate=f?[].concat(f,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},10:function(e,t){e.exports=n("9504")},13:function(e,t){e.exports=n("ec2d")},15:function(e,t){e.exports=n("4eda")},19:function(e,t){e.exports=n("6406")},2:function(e,t){e.exports=n("3c84")},23:function(e,t){e.exports=n("bee9")},47:function(e,t){e.exports=n("f0f6")},6:function(e,t){e.exports=n("1f4f")},7:function(e,t){e.exports=n("0261")},77:function(e,t,n){"use strict";n.r(t);var r=n(7),o=n.n(r),i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"msgbox-fade"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-message-box__wrapper",attrs:{tabindex:"-1",role:"dialog","aria-modal":"true","aria-label":e.title||"dialog"},on:{click:function(t){return t.target!==t.currentTarget?null:e.handleWrapperClick(t)}}},[n("div",{staticClass:"el-message-box",class:[e.customClass,e.center&&"el-message-box--center"]},[null!==e.title?n("div",{staticClass:"el-message-box__header"},[n("div",{staticClass:"el-message-box__title"},[e.icon&&e.center?n("div",{class:["el-message-box__status",e.icon]}):e._e(),n("span",[e._v(e._s(e.title))])]),e.showClose?n("button",{staticClass:"el-message-box__headerbtn",attrs:{type:"button","aria-label":"Close"},on:{click:function(t){e.handleAction(e.distinguishCancelAndClose?"close":"cancel")},keydown:function(t){if(!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter"))return null;e.handleAction(e.distinguishCancelAndClose?"close":"cancel")}}},[n("i",{staticClass:"el-message-box__close el-icon-close"})]):e._e()]):e._e(),n("div",{staticClass:"el-message-box__content"},[n("div",{staticClass:"el-message-box__container"},[e.icon&&!e.center&&""!==e.message?n("div",{class:["el-message-box__status",e.icon]}):e._e(),""!==e.message?n("div",{staticClass:"el-message-box__message"},[e._t("default",[e.dangerouslyUseHTMLString?n("p",{domProps:{innerHTML:e._s(e.message)}}):n("p",[e._v(e._s(e.message))])])],2):e._e()]),n("div",{directives:[{name:"show",rawName:"v-show",value:e.showInput,expression:"showInput"}],staticClass:"el-message-box__input"},[n("el-input",{ref:"input",attrs:{type:e.inputType,placeholder:e.inputPlaceholder},nativeOn:{keydown:function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.handleInputEnter(t):null}},model:{value:e.inputValue,callback:function(t){e.inputValue=t},expression:"inputValue"}}),n("div",{staticClass:"el-message-box__errormsg",style:{visibility:e.editorErrorMessage?"visible":"hidden"}},[e._v(e._s(e.editorErrorMessage))])],1)]),n("div",{staticClass:"el-message-box__btns"},[e.showCancelButton?n("el-button",{class:[e.cancelButtonClasses],attrs:{loading:e.cancelButtonLoading,round:e.roundButton,size:"small"},on:{keydown:function(t){if(!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter"))return null;e.handleAction("cancel")}},nativeOn:{click:function(t){e.handleAction("cancel")}}},[e._v("\n "+e._s(e.cancelButtonText||e.t("el.messagebox.cancel"))+"\n ")]):e._e(),n("el-button",{directives:[{name:"show",rawName:"v-show",value:e.showConfirmButton,expression:"showConfirmButton"}],ref:"confirm",class:[e.confirmButtonClasses],attrs:{loading:e.confirmButtonLoading,round:e.roundButton,size:"small"},on:{keydown:function(t){if(!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter"))return null;e.handleAction("confirm")}},nativeOn:{click:function(t){e.handleAction("confirm")}}},[e._v("\n "+e._s(e.confirmButtonText||e.t("el.messagebox.confirm"))+"\n ")])],1)])])])},a=[];i._withStripped=!0;var s=n(15),l=n.n(s),u=n(6),c=n.n(u),f=n(10),d=n.n(f),p=n(13),h=n.n(p),v=n(2),m=n(19),y=n(47),g=n.n(y),b=void 0,_={success:"success",info:"info",warning:"warning",error:"error"},x={mixins:[l.a,c.a],props:{modal:{default:!0},lockScroll:{default:!0},showClose:{type:Boolean,default:!0},closeOnClickModal:{default:!0},closeOnPressEscape:{default:!0},closeOnHashChange:{default:!0},center:{default:!1,type:Boolean},roundButton:{default:!1,type:Boolean}},components:{ElInput:d.a,ElButton:h.a},computed:{icon:function(){var e=this.type,t=this.iconClass;return t||(e&&_[e]?"el-icon-"+_[e]:"")},confirmButtonClasses:function(){return"el-button--primary "+this.confirmButtonClass},cancelButtonClasses:function(){return""+this.cancelButtonClass}},methods:{getSafeClose:function(){var e=this,t=this.uid;return function(){e.$nextTick((function(){t===e.uid&&e.doClose()}))}},doClose:function(){var e=this;this.visible&&(this.visible=!1,this._closing=!0,this.onClose&&this.onClose(),b.closeDialog(),this.lockScroll&&setTimeout(this.restoreBodyStyle,200),this.opened=!1,this.doAfterClose(),setTimeout((function(){e.action&&e.callback(e.action,e)})))},handleWrapperClick:function(){this.closeOnClickModal&&this.handleAction(this.distinguishCancelAndClose?"close":"cancel")},handleInputEnter:function(){if("textarea"!==this.inputType)return this.handleAction("confirm")},handleAction:function(e){("prompt"!==this.$type||"confirm"!==e||this.validate())&&(this.action=e,"function"===typeof this.beforeClose?(this.close=this.getSafeClose(),this.beforeClose(e,this,this.close)):this.doClose())},validate:function(){if("prompt"===this.$type){var e=this.inputPattern;if(e&&!e.test(this.inputValue||""))return this.editorErrorMessage=this.inputErrorMessage||Object(m["t"])("el.messagebox.error"),Object(v["addClass"])(this.getInputElement(),"invalid"),!1;var t=this.inputValidator;if("function"===typeof t){var n=t(this.inputValue);if(!1===n)return this.editorErrorMessage=this.inputErrorMessage||Object(m["t"])("el.messagebox.error"),Object(v["addClass"])(this.getInputElement(),"invalid"),!1;if("string"===typeof n)return this.editorErrorMessage=n,Object(v["addClass"])(this.getInputElement(),"invalid"),!1}}return this.editorErrorMessage="",Object(v["removeClass"])(this.getInputElement(),"invalid"),!0},getFirstFocus:function(){var e=this.$el.querySelector(".el-message-box__btns .el-button"),t=this.$el.querySelector(".el-message-box__btns .el-message-box__title");return e||t},getInputElement:function(){var e=this.$refs.input.$refs;return e.input||e.textarea},handleClose:function(){this.handleAction("close")}},watch:{inputValue:{immediate:!0,handler:function(e){var t=this;this.$nextTick((function(n){"prompt"===t.$type&&null!==e&&t.validate()}))}},visible:function(e){var t=this;e&&(this.uid++,"alert"!==this.$type&&"confirm"!==this.$type||this.$nextTick((function(){t.$refs.confirm.$el.focus()})),this.focusAfterClosed=document.activeElement,b=new g.a(this.$el,this.focusAfterClosed,this.getFirstFocus())),"prompt"===this.$type&&(e?setTimeout((function(){t.$refs.input&&t.$refs.input.$el&&t.getInputElement().focus()}),500):(this.editorErrorMessage="",Object(v["removeClass"])(this.getInputElement(),"invalid")))}},mounted:function(){var e=this;this.$nextTick((function(){e.closeOnHashChange&&window.addEventListener("hashchange",e.close)}))},beforeDestroy:function(){this.closeOnHashChange&&window.removeEventListener("hashchange",this.close),setTimeout((function(){b.closeDialog()}))},data:function(){return{uid:1,title:void 0,message:"",type:"",iconClass:"",customClass:"",showInput:!1,inputValue:null,inputPlaceholder:"",inputType:"text",inputPattern:null,inputValidator:null,inputErrorMessage:"",showConfirmButton:!0,showCancelButton:!1,action:"",confirmButtonText:"",cancelButtonText:"",confirmButtonLoading:!1,cancelButtonLoading:!1,confirmButtonClass:"",confirmButtonDisabled:!1,cancelButtonClass:"",editorErrorMessage:null,callback:null,dangerouslyUseHTMLString:!1,focusAfterClosed:null,isOnComposition:!1,distinguishCancelAndClose:!1}}},w=x,C=n(0),S=Object(C["a"])(w,i,a,!1,null,null,null);S.options.__file="packages/message-box/src/main.vue";var O=S.exports,E=n(9),k=n.n(E),$=n(23),j="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},A={title:null,message:"",type:"",iconClass:"",showInput:!1,showClose:!0,modalFade:!0,lockScroll:!0,closeOnClickModal:!0,closeOnPressEscape:!0,closeOnHashChange:!0,inputValue:null,inputPlaceholder:"",inputType:"text",inputPattern:null,inputValidator:null,inputErrorMessage:"",showConfirmButton:!0,showCancelButton:!1,confirmButtonPosition:"right",confirmButtonHighlight:!1,cancelButtonHighlight:!1,confirmButtonText:"",cancelButtonText:"",confirmButtonClass:"",cancelButtonClass:"",customClass:"",beforeClose:null,dangerouslyUseHTMLString:!1,center:!1,roundButton:!1,distinguishCancelAndClose:!1},T=o.a.extend(O),M=void 0,P=void 0,L=[],N=function(e){if(M){var t=M.callback;"function"===typeof t&&(P.showInput?t(P.inputValue,e):t(e)),M.resolve&&("confirm"===e?P.showInput?M.resolve({value:P.inputValue,action:e}):M.resolve(e):!M.reject||"cancel"!==e&&"close"!==e||M.reject(e))}},R=function(){P=new T({el:document.createElement("div")}),P.callback=N},I=function e(){if(P||R(),P.action="",(!P.visible||P.closeTimer)&&L.length>0){M=L.shift();var t=M.options;for(var n in t)t.hasOwnProperty(n)&&(P[n]=t[n]);void 0===t.callback&&(P.callback=N);var r=P.callback;P.callback=function(t,n){r(t,n),e()},Object($["isVNode"])(P.message)?(P.$slots.default=[P.message],P.message=null):delete P.$slots.default,["modal","showClose","closeOnClickModal","closeOnPressEscape","closeOnHashChange"].forEach((function(e){void 0===P[e]&&(P[e]=!0)})),document.body.appendChild(P.$el),o.a.nextTick((function(){P.visible=!0}))}},F=function e(t,n){if(!o.a.prototype.$isServer){if("string"===typeof t||Object($["isVNode"])(t)?(t={message:t},"string"===typeof arguments[1]&&(t.title=arguments[1])):t.callback&&!n&&(n=t.callback),"undefined"!==typeof Promise)return new Promise((function(r,o){L.push({options:k()({},A,e.defaults,t),callback:n,resolve:r,reject:o}),I()}));L.push({options:k()({},A,e.defaults,t),callback:n}),I()}};F.setDefaults=function(e){F.defaults=e},F.alert=function(e,t,n){return"object"===("undefined"===typeof t?"undefined":j(t))?(n=t,t=""):void 0===t&&(t=""),F(k()({title:t,message:e,$type:"alert",closeOnPressEscape:!1,closeOnClickModal:!1},n))},F.confirm=function(e,t,n){return"object"===("undefined"===typeof t?"undefined":j(t))?(n=t,t=""):void 0===t&&(t=""),F(k()({title:t,message:e,$type:"confirm",showCancelButton:!0},n))},F.prompt=function(e,t,n){return"object"===("undefined"===typeof t?"undefined":j(t))?(n=t,t=""):void 0===t&&(t=""),F(k()({title:t,message:e,showCancelButton:!0,showInput:!0,$type:"prompt"},n))},F.close=function(){P.doClose(),P.visible=!1,L=[],M=null};var H=F;t["default"]=H},9:function(e,t){e.exports=n("e93e")}})},de3e:function(e,t,n){var r=n("91fe"),o=n("e045");r({target:"Object",stat:!0,forced:Object.assign!==o},{assign:o})},df22:function(e,t,n){"use strict";var r=n("a9f2"),o=function(e){var t,n;this.promise=new e((function(e,r){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=r})),this.resolve=r(t),this.reject=r(n)};e.exports.f=function(e){return new o(e)}},df50:function(e,t,n){var r=n("2a2f"),o=n("d5dc"),i=function(e){return"function"==typeof e?e:void 0};e.exports=function(e,t){return arguments.length<2?i(r[e])||i(o[e]):r[e]&&r[e][t]||o[e]&&o[e][t]}},df62:function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=131)}({131:function(e,t,n){"use strict";n.r(t);var r=n(5),o=n.n(r),i=n(17),a=n.n(i),s=n(2),l=n(3),u=n(7),c=n.n(u),f={name:"ElTooltip",mixins:[o.a],props:{openDelay:{type:Number,default:0},disabled:Boolean,manual:Boolean,effect:{type:String,default:"dark"},arrowOffset:{type:Number,default:0},popperClass:String,content:String,visibleArrow:{default:!0},transition:{type:String,default:"el-fade-in-linear"},popperOptions:{default:function(){return{boundariesPadding:10,gpuAcceleration:!1}}},enterable:{type:Boolean,default:!0},hideAfter:{type:Number,default:0},tabindex:{type:Number,default:0}},data:function(){return{tooltipId:"el-tooltip-"+Object(l["generateId"])(),timeoutPending:null,focusing:!1}},beforeCreate:function(){var e=this;this.$isServer||(this.popperVM=new c.a({data:{node:""},render:function(e){return this.node}}).$mount(),this.debounceClose=a()(200,(function(){return e.handleClosePopper()})))},render:function(e){var t=this;this.popperVM&&(this.popperVM.node=e("transition",{attrs:{name:this.transition},on:{afterLeave:this.doDestroy}},[e("div",{on:{mouseleave:function(){t.setExpectedState(!1),t.debounceClose()},mouseenter:function(){t.setExpectedState(!0)}},ref:"popper",attrs:{role:"tooltip",id:this.tooltipId,"aria-hidden":this.disabled||!this.showPopper?"true":"false"},directives:[{name:"show",value:!this.disabled&&this.showPopper}],class:["el-tooltip__popper","is-"+this.effect,this.popperClass]},[this.$slots.content||this.content])]));var n=this.getFirstElement();if(!n)return null;var r=n.data=n.data||{};return r.staticClass=this.addTooltipClass(r.staticClass),n},mounted:function(){var e=this;this.referenceElm=this.$el,1===this.$el.nodeType&&(this.$el.setAttribute("aria-describedby",this.tooltipId),this.$el.setAttribute("tabindex",this.tabindex),Object(s["on"])(this.referenceElm,"mouseenter",this.show),Object(s["on"])(this.referenceElm,"mouseleave",this.hide),Object(s["on"])(this.referenceElm,"focus",(function(){if(e.$slots.default&&e.$slots.default.length){var t=e.$slots.default[0].componentInstance;t&&t.focus?t.focus():e.handleFocus()}else e.handleFocus()})),Object(s["on"])(this.referenceElm,"blur",this.handleBlur),Object(s["on"])(this.referenceElm,"click",this.removeFocusing)),this.value&&this.popperVM&&this.popperVM.$nextTick((function(){e.value&&e.updatePopper()}))},watch:{focusing:function(e){e?Object(s["addClass"])(this.referenceElm,"focusing"):Object(s["removeClass"])(this.referenceElm,"focusing")}},methods:{show:function(){this.setExpectedState(!0),this.handleShowPopper()},hide:function(){this.setExpectedState(!1),this.debounceClose()},handleFocus:function(){this.focusing=!0,this.show()},handleBlur:function(){this.focusing=!1,this.hide()},removeFocusing:function(){this.focusing=!1},addTooltipClass:function(e){return e?"el-tooltip "+e.replace("el-tooltip",""):"el-tooltip"},handleShowPopper:function(){var e=this;this.expectedState&&!this.manual&&(clearTimeout(this.timeout),this.timeout=setTimeout((function(){e.showPopper=!0}),this.openDelay),this.hideAfter>0&&(this.timeoutPending=setTimeout((function(){e.showPopper=!1}),this.hideAfter)))},handleClosePopper:function(){this.enterable&&this.expectedState||this.manual||(clearTimeout(this.timeout),this.timeoutPending&&clearTimeout(this.timeoutPending),this.showPopper=!1,this.disabled&&this.doDestroy())},setExpectedState:function(e){!1===e&&clearTimeout(this.timeoutPending),this.expectedState=e},getFirstElement:function(){var e=this.$slots.default;if(!Array.isArray(e))return null;for(var t=null,n=0;nc){var p,h=u(arguments[c++]),v=f?i(h).concat(f(h)):i(h),m=v.length,y=0;while(m>y)p=v[y++],r&&!d.call(h,p)||(n[p]=h[p])}return n}:c},e17a:function(e,t){e.exports=!1},e28b:function(e,t,n){var r=n("9552"),o=n("ed35"),i=n("57c4"),a=i("iterator");e.exports=function(e){if(void 0!=e)return e[a]||e["@@iterator"]||o[r(e)]}},e3b4:function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=118)}({0:function(e,t,n){"use strict";function r(e,t,n,r,o,i,a,s){var l,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):o&&(l=s?function(){o.call(this,this.$root.$options.shadowRoot)}:o),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var f=u.beforeCreate;u.beforeCreate=f?[].concat(f,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},118:function(e,t,n){"use strict";n.r(t);var r=function(e,t){var n=t._c;return n("div",t._g(t._b({class:[t.data.staticClass,"el-divider","el-divider--"+t.props.direction]},"div",t.data.attrs,!1),t.listeners),[t.slots().default&&"vertical"!==t.props.direction?n("div",{class:["el-divider__text","is-"+t.props.contentPosition]},[t._t("default")],2):t._e()])},o=[];r._withStripped=!0;var i={name:"ElDivider",props:{direction:{type:String,default:"horizontal",validator:function(e){return-1!==["horizontal","vertical"].indexOf(e)}},contentPosition:{type:String,default:"center",validator:function(e){return-1!==["left","center","right"].indexOf(e)}}}},a=i,s=n(0),l=Object(s["a"])(a,r,o,!0,null,null,null);l.options.__file="packages/divider/src/main.vue";var u=l.exports;u.install=function(e){e.component(u.name,u)};t["default"]=u}})},e52f:function(e,t,n){var r=n("57c4"),o=r("iterator"),i=!1;try{var a=0,s={next:function(){return{done:!!a++}},return:function(){i=!0}};s[o]=function(){return this},Array.from(s,(function(){throw 2}))}catch(l){}e.exports=function(e,t){if(!t&&!i)return!1;var n=!1;try{var r={};r[o]=function(){return{next:function(){return{done:n=!0}}}},e(r)}catch(l){}return n}},e536:function(e,t,n){"use strict";t.__esModule=!0,t.default=function(){if(o.default.prototype.$isServer)return 0;if(void 0!==a)return a;var e=document.createElement("div");e.className="el-scrollbar__wrap",e.style.visibility="hidden",e.style.width="100px",e.style.position="absolute",e.style.top="-9999px",document.body.appendChild(e);var t=e.offsetWidth;e.style.overflow="scroll";var n=document.createElement("div");n.style.width="100%",e.appendChild(n);var r=n.offsetWidth;return e.parentNode.removeChild(e),a=t-r,a};var r=n("0261"),o=i(r);function i(e){return e&&e.__esModule?e:{default:e}}var a=void 0},e628:function(e,t,n){var r=n("df50"),o=n("65af"),i=n("1072"),a=n("ac83");e.exports=r("Reflect","ownKeys")||function(e){var t=o.f(a(e)),n=i.f;return n?t.concat(n(e)):t}},e93b:function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=68)}({0:function(e,t,n){"use strict";function r(e,t,n,r,o,i,a,s){var l,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):o&&(l=s?function(){o.call(this,this.$root.$options.shadowRoot)}:o),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var f=u.beforeCreate;u.beforeCreate=f?[].concat(f,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},15:function(e,t){e.exports=n("4eda")},2:function(e,t){e.exports=n("3c84")},41:function(e,t){e.exports=n("3cb2")},68:function(e,t,n){"use strict";n.r(t);var r=n(7),o=n.n(r),i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-loading-fade"},on:{"after-leave":e.handleAfterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-loading-mask",class:[e.customClass,{"is-fullscreen":e.fullscreen}],style:{backgroundColor:e.background||""}},[n("div",{staticClass:"el-loading-spinner"},[e.spinner?n("i",{class:e.spinner}):n("svg",{staticClass:"circular",attrs:{viewBox:"25 25 50 50"}},[n("circle",{staticClass:"path",attrs:{cx:"50",cy:"50",r:"20",fill:"none"}})]),e.text?n("p",{staticClass:"el-loading-text"},[e._v(e._s(e.text))]):e._e()])])])},a=[];i._withStripped=!0;var s={data:function(){return{text:null,spinner:null,background:null,fullscreen:!0,visible:!1,customClass:""}},methods:{handleAfterLeave:function(){this.$emit("after-leave")},setText:function(e){this.text=e}}},l=s,u=n(0),c=Object(u["a"])(l,i,a,!1,null,null,null);c.options.__file="packages/loading/src/loading.vue";var f=c.exports,d=n(2),p=n(15),h=n(41),v=n.n(h),m=o.a.extend(f),y={install:function(e){if(!e.prototype.$isServer){var t=function(t,r){r.value?e.nextTick((function(){r.modifiers.fullscreen?(t.originalPosition=Object(d["getStyle"])(document.body,"position"),t.originalOverflow=Object(d["getStyle"])(document.body,"overflow"),t.maskStyle.zIndex=p["PopupManager"].nextZIndex(),Object(d["addClass"])(t.mask,"is-fullscreen"),n(document.body,t,r)):(Object(d["removeClass"])(t.mask,"is-fullscreen"),r.modifiers.body?(t.originalPosition=Object(d["getStyle"])(document.body,"position"),["top","left"].forEach((function(e){var n="top"===e?"scrollTop":"scrollLeft";t.maskStyle[e]=t.getBoundingClientRect()[e]+document.body[n]+document.documentElement[n]-parseInt(Object(d["getStyle"])(document.body,"margin-"+e),10)+"px"})),["height","width"].forEach((function(e){t.maskStyle[e]=t.getBoundingClientRect()[e]+"px"})),n(document.body,t,r)):(t.originalPosition=Object(d["getStyle"])(t,"position"),n(t,t,r)))})):(v()(t.instance,(function(e){if(t.instance.hiding){t.domVisible=!1;var n=r.modifiers.fullscreen||r.modifiers.body?document.body:t;Object(d["removeClass"])(n,"el-loading-parent--relative"),Object(d["removeClass"])(n,"el-loading-parent--hidden"),t.instance.hiding=!1}}),300,!0),t.instance.visible=!1,t.instance.hiding=!0)},n=function(t,n,r){n.domVisible||"none"===Object(d["getStyle"])(n,"display")||"hidden"===Object(d["getStyle"])(n,"visibility")?n.domVisible&&!0===n.instance.hiding&&(n.instance.visible=!0,n.instance.hiding=!1):(Object.keys(n.maskStyle).forEach((function(e){n.mask.style[e]=n.maskStyle[e]})),"absolute"!==n.originalPosition&&"fixed"!==n.originalPosition&&Object(d["addClass"])(t,"el-loading-parent--relative"),r.modifiers.fullscreen&&r.modifiers.lock&&Object(d["addClass"])(t,"el-loading-parent--hidden"),n.domVisible=!0,t.appendChild(n.mask),e.nextTick((function(){n.instance.hiding?n.instance.$emit("after-leave"):n.instance.visible=!0})),n.domInserted=!0)};e.directive("loading",{bind:function(e,n,r){var o=e.getAttribute("element-loading-text"),i=e.getAttribute("element-loading-spinner"),a=e.getAttribute("element-loading-background"),s=e.getAttribute("element-loading-custom-class"),l=r.context,u=new m({el:document.createElement("div"),data:{text:l&&l[o]||o,spinner:l&&l[i]||i,background:l&&l[a]||a,customClass:l&&l[s]||s,fullscreen:!!n.modifiers.fullscreen}});e.instance=u,e.mask=u.$el,e.maskStyle={},n.value&&t(e,n)},update:function(e,n){e.instance.setText(e.getAttribute("element-loading-text")),n.oldValue!==n.value&&t(e,n)},unbind:function(e,n){e.domInserted&&(e.mask&&e.mask.parentNode&&e.mask.parentNode.removeChild(e.mask),t(e,{value:!1,modifiers:n.modifiers})),e.instance&&e.instance.$destroy()}})}}},g=y,b=n(9),_=n.n(b),x=o.a.extend(f),w={text:null,fullscreen:!0,body:!1,lock:!1,customClass:""},C=void 0;x.prototype.originalPosition="",x.prototype.originalOverflow="",x.prototype.close=function(){var e=this;this.fullscreen&&(C=void 0),v()(this,(function(t){var n=e.fullscreen||e.body?document.body:e.target;Object(d["removeClass"])(n,"el-loading-parent--relative"),Object(d["removeClass"])(n,"el-loading-parent--hidden"),e.$el&&e.$el.parentNode&&e.$el.parentNode.removeChild(e.$el),e.$destroy()}),300),this.visible=!1};var S=function(e,t,n){var r={};e.fullscreen?(n.originalPosition=Object(d["getStyle"])(document.body,"position"),n.originalOverflow=Object(d["getStyle"])(document.body,"overflow"),r.zIndex=p["PopupManager"].nextZIndex()):e.body?(n.originalPosition=Object(d["getStyle"])(document.body,"position"),["top","left"].forEach((function(t){var n="top"===t?"scrollTop":"scrollLeft";r[t]=e.target.getBoundingClientRect()[t]+document.body[n]+document.documentElement[n]+"px"})),["height","width"].forEach((function(t){r[t]=e.target.getBoundingClientRect()[t]+"px"}))):n.originalPosition=Object(d["getStyle"])(t,"position"),Object.keys(r).forEach((function(e){n.$el.style[e]=r[e]}))},O=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!o.a.prototype.$isServer){if(e=_()({},w,e),"string"===typeof e.target&&(e.target=document.querySelector(e.target)),e.target=e.target||document.body,e.target!==document.body?e.fullscreen=!1:e.body=!0,e.fullscreen&&C)return C;var t=e.body?document.body:e.target,n=new x({el:document.createElement("div"),data:e});return S(e,t,n),"absolute"!==n.originalPosition&&"fixed"!==n.originalPosition&&Object(d["addClass"])(t,"el-loading-parent--relative"),e.fullscreen&&e.lock&&Object(d["addClass"])(t,"el-loading-parent--hidden"),t.appendChild(n.$el),o.a.nextTick((function(){n.visible=!0})),e.fullscreen&&(C=n),n}},E=O;t["default"]={install:function(e){e.use(g),e.prototype.$loading=E},directive:g,service:E}},7:function(e,t){e.exports=n("0261")},9:function(e,t){e.exports=n("e93e")}})},e93e:function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e){for(var t=1,n=arguments.length;t0?r:n)(e)}},f28d:function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},f30e:function(e,t){e.exports=function(e){try{return!!e()}catch(t){return!0}}},f69c:function(e,t,n){var r=n("f28d"),o=n("e628"),i=n("4aef"),a=n("c223");e.exports=function(e,t){for(var n=o(t),s=a.f,l=i.f,u=0;u0&&!this.isAllSelected,value:this.isAllSelected},nativeOn:{click:this.toggleAllSelection}})},renderCell:function(e,t){var n=t.row,r=t.column,o=t.store,i=t.$index;return e("el-checkbox",{nativeOn:{click:function(e){return e.stopPropagation()}},attrs:{value:o.isSelected(n),disabled:!!r.selectable&&!r.selectable.call(null,n,i)},on:{input:function(){o.commit("rowSelectedChanged",n)}}})},sortable:!1,resizable:!1},index:{renderHeader:function(e,t){var n=t.column;return n.label||"#"},renderCell:function(e,t){var n=t.$index,r=t.column,o=n+1,i=r.index;return"number"===typeof i?o=n+i:"function"===typeof i&&(o=i(n)),e("div",[o])},sortable:!1},expand:{renderHeader:function(e,t){var n=t.column;return n.label||""},renderCell:function(e,t){var n=t.row,r=t.store,o=["el-table__expand-icon"];r.states.expandRows.indexOf(n)>-1&&o.push("el-table__expand-icon--expanded");var i=function(e){e.stopPropagation(),r.toggleRowExpansion(n)};return e("div",{class:o,on:{click:i}},[e("i",{class:"el-icon el-icon-arrow-right"})])},sortable:!1,resizable:!1,className:"el-table__expand-column"}};function a(e,t){var n=t.row,o=t.column,i=t.$index,a=o.property,s=a&&Object(r["getPropByPath"])(n,a).v;return o&&o.formatter?o.formatter(n,o,s,i):s}function s(e,t){var n=t.row,r=t.treeNode,o=t.store;if(!r)return null;var i=[],a=function(e){e.stopPropagation(),o.loadOrToggle(n)};if(r.indent&&i.push(e("span",{class:"el-table__indent",style:{"padding-left":r.indent+"px"}})),"boolean"!==typeof r.expanded||r.noLazyChildren)i.push(e("span",{class:"el-table__placeholder"}));else{var s=["el-table__expand-icon",r.expanded?"el-table__expand-icon--expanded":""],l=["el-icon-arrow-right"];r.loading&&(l=["el-icon-loading"]),i.push(e("div",{class:s,on:{click:a}},[e("i",{class:l})]))}return i}var l=n(8),u=n(18),c=n.n(u),f=Object.assign||function(e){for(var t=1;t-1}))}}},data:function(){return{isSubColumn:!1,columns:[]}},computed:{owner:function(){var e=this.$parent;while(e&&!e.tableId)e=e.$parent;return e},columnOrTableParent:function(){var e=this.$parent;while(e&&!e.tableId&&!e.columnId)e=e.$parent;return e},realWidth:function(){return Object(l["l"])(this.width)},realMinWidth:function(){return Object(l["k"])(this.minWidth)},realAlign:function(){return this.align?"is-"+this.align:null},realHeaderAlign:function(){return this.headerAlign?"is-"+this.headerAlign:this.realAlign}},methods:{getPropsData:function(){for(var e=this,t=arguments.length,n=Array(t),r=0;rt.key[n])return 1}return 0};return e.map((function(e,t){return{value:e,index:t,key:s?s(e,t):null}})).sort((function(e,t){var r=l(e,t);return r||(r=e.index-t.index),r*n})).map((function(e){return e.value}))},l=function(e,t){var n=null;return e.columns.forEach((function(e){e.id===t&&(n=e)})),n},u=function(e,t){for(var n=null,r=0;r2&&void 0!==arguments[2]?arguments[2]:"children",r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"hasChildren",o=function(e){return!(Array.isArray(e)&&e.length)};function i(e,a,s){t(e,a,s),a.forEach((function(e){if(e[r])t(e,null,s+1);else{var a=e[n];o(a)||i(e,a,s+1)}}))}e.forEach((function(e){if(e[r])t(e,null,0);else{var a=e[n];o(a)||i(e,a,0)}}))}}})},fb8e:function(e,t,n){var r=n("ac83"),o=n("a9f2"),i=n("57c4"),a=i("species");e.exports=function(e,t){var n,i=r(e).constructor;return void 0===i||void 0==(n=r(i)[a])?t:o(n)}},fee7:function(e,t,n){var r=n("f30e"),o=n("67ea"),i="".split;e.exports=r((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==o(e)?i.call(e,""):Object(e)}:Object}}]); \ No newline at end of file diff --git a/app/src/main/assets/web/js/detail.043d6e39.js b/app/src/main/assets/web/js/detail.043d6e39.js new file mode 100644 index 000000000..ad7b9cbb3 --- /dev/null +++ b/app/src/main/assets/web/js/detail.043d6e39.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["detail"],{"05b3":function(t,e,n){},"0827":function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEUWGBkYGhsdHyAfISI1t/v6AAAB5ElEQVQozxXQsYoTURSA4f/EeycZsDgDdySDjihk38Hy3GWi2J2BCaziQhaiaB+tt9AFu1kwvYUPsIXNPoB9BAUfwAfwEUzKv/v4odGrroyp9/rUaC6rZ5skv5F8qPsfYYP+yKUMymmAEEeW55oUR4o8jr05KNzJ07yvB7w0KKfLwcQUSjfmMU0PJfPHFoEVU+ohNrcKMEzMQ23FDnVSI2dqtYWI7KlLu6vE4UnyvKc3SJuL7lBbeEEl42ItpGLjzIT8PRJCmkRjVpVpsbJFVN0687okJNZiHAr5Z7MV0BnGIDc+THM1zlbieBc1Fq+tH5BH+OpnbWkj40hSqC8Lw2TvFuF0SUFJCk2IytXbjeqcRAt6NHpnrUkUU4KRzZs8RCK8N/Akn2W04LwxMU/V7XK0bDyN2RxfDyx7I4h5vjZby72V8UnOWumZL3qtYc+8DTE0siSBMXGhywx2dMYPnQHbxdFZ7deiNGxCCtD/QWnbwDoGhRYPDzUdUA3krjpnkvdAgDN4ddLkEQSov9qjd42HaDjI34gEqS9TUueAk+sc4qg5ws407KQYKs8G1jv4xBlqBVk6cb4dISZIwVi1Jzu4+HLk6lyfUxkXvwy+1Q+4WVdHIhwfybZ6CWVhxMEhShOgsP/HOW0MvZJeFwAAAABJRU5ErkJggg=="},1240:function(t,e,n){},1544:function(t,e,n){var i=n("8c47"),o=n("65af").f,r={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return o(t)}catch(e){return a.slice()}};t.exports.f=function(t){return a&&"[object Window]"==r.call(t)?s(t):o(i(t))}},1632:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXh7vLf7PDj8PTm8/ecW+lZAAACZElEQVQozw2RsU8TUQCHfz3fw7MS87jeI7DdmSMpDEoHE+P0HqGkvRR8vb5XC4NpN2RQZqcK9xJkwtriekcggerC4OZADDiT+A+goxv/gfwB3zd8H/T6vYF/pTZkCSmDNd3CBEtmZJP4N+CvvhecDvmntKsvwB17rpbIRTLOEoYkj9KZzRUuJsuBQFwgptyJ3Y7EL4V+ud5LO1UnMeQSSObqisiISZkbQBlliP3qWSk3GPQXjxv6VF2BTDO4ySx1zhuJXbA2wBNJF4t5vH9keg6wu5NvUpLtXrZ3OHC9ZsgVcZdOl38PM1y/L6m8GRiErj4AqezUjHGatGGIgs5NJDHh8Ua1IuB4035haVT6SaYWMoQ0eJ3rB/Gpnr3fB49YAy1Wa21YKqAHOmAveVw6CCMGMZh5bGtVI7jnZaiQNbta1Z+285oSoKoRbta1KZ/1bBdKH/RIxv2pRVpkoCmvpr097RWoo0CpMlTWllIenSjECU8mV43mHx2fIRfH/pncrJm3+58BWdbSqCS07/yiQnvHiCG4ZPGRFeAtfreoOubyctzHvLNHhjNvIhukxQzjU5O6QdOEzUp1Ef4d98Pxz+IPYX0bcpnT52dbedfz8y7C4R89RV+MjJkuCCx7mWDt4eyK/62lQB55xXGJK7p8u6bgRv4hVHylelYGGFs64W94tng8sAIVqSRJBpqRA9rFvAysS+9ak8s7557pz5HR4qhCRmWgplpTRJ+bhYfSAMO8/YBucWPuSdmFFtOnuWqvV2NbF6CJnbhNDzEZ/T0XSDrUydzkZCG1z/oIEyUFYxW/KPXNfwopuHDcO04UAAAAAElFTkSuQmCC"},"1a8c":function(t,e,n){"use strict";var i=n("91fe"),o=n("407d").map,r=n("b1a1"),a=n("6885"),s=r("map"),c=a("map");i({target:"Array",proto:!0,forced:!s||!c},{map:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},"1e75":function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXM2t7O3ODQ3uLR4OTDp25yAAACdUlEQVQozw3P70sTcQDH8c/3/M7NG+j35mnHwjwh4hRy/QFK3zvPNbeIG1koPZmxfj2IDAwihL53zj0JYisfmEHcZJZOiBUG60lZiI8T/ANusuftgQ+kCPIPeMP7hS5mUrV9c1g6MQCAEZ8tDLHwofImAGRlX+SZK3Vu9rRRPuO4PK6/9nA4GIATsxlODS+rdCMhkAZivpYV0LWoQHSLSA4NfUg+6mY+7BKL2++F9LvnrBDYm6JO9i/YO3i/HJTGQ4pdIV82TbEDFG6vGYCd4wZchgK5J2CrKTLE+Tx0v+YGlIbdWJFcQl4ptBN8fUJQN1MCJLcZLYwUVVo+famGGty8EXJF5ofOEDzcodT3/Fb0I5sHmc1ZG7CcSl8COgxlXx09jT05OafjCZLIHJhGIaU6wDZHsuMQ41wbdjmQXbhKnMq1zlXSYrjCnyZblqexA7fC8RxS74tq2P3OxSQwTuJSApH8OZLzBBp1pOe0i3rdyDUA47GySZ31YmC4EQYSXvFSvieORGBxXF9aeVtUWKGS9WMC4Z9Y2uXnJ2nCUXVMbPOYqNYNmGWWQ7Evr+BWC+a0JAMTImcq/S4Z5INdQMeuOqDIMa9beilxfA60iC6sP1INcPDpmHBW8drZHNmqwyddJtVje9q8WGUgWAOzmbU4FCQBFi8B2Wk6pickBnYhJMenmJGuRmtt2IoKq9NuFGbNFR99sHnvrnLsLysKANDIsxbp6RNMAsoDSKuRpMwZbAAzI68QatIjmZ0aImyM3O8/4e2MNlOHZomFsa/fLDsysliHS+nlYLQJMnynxrH8QO4PaAV2Li8B/+52UgeGIVNFYf8B1XG/kFSmLcUAAAAASUVORK5CYII="},"21d4":function(t,e,n){"use strict";var i=n("0618"),o=n("dcb6"),r=RegExp.prototype.exec,a=String.prototype.replace,s=r,c=function(){var t=/a/,e=/b*/g;return r.call(t,"a"),r.call(e,"a"),0!==t.lastIndex||0!==e.lastIndex}(),l=o.UNSUPPORTED_Y||o.BROKEN_CARET,u=void 0!==/()??/.exec("")[1],A=c||u||l;A&&(s=function(t){var e,n,o,s,A=this,f=l&&A.sticky,g=i.call(A),d=A.source,h=0,p=t;return f&&(g=g.replace("y",""),-1===g.indexOf("g")&&(g+="g"),p=String(t).slice(A.lastIndex),A.lastIndex>0&&(!A.multiline||A.multiline&&"\n"!==t[A.lastIndex-1])&&(d="(?: "+d+")",p=" "+p,h++),n=new RegExp("^(?:"+d+")",g)),u&&(n=new RegExp("^"+d+"$(?!\\s)",g)),c&&(e=A.lastIndex),o=r.call(f?n:A,p),f?o?(o.input=o.input.slice(h),o[0]=o[0].slice(h),o.index=A.lastIndex,A.lastIndex+=o[0].length):A.lastIndex=0:c&&o&&(A.lastIndex=A.global?o.index+o[0].length:e),u&&o&&o.length>1&&a.call(o[0],n,(function(){for(s=1;s=l?t?"":void 0:(r=s.charCodeAt(c),r<55296||r>56319||c+1===l||(a=s.charCodeAt(c+1))<56320||a>57343?t?s.charAt(c):r:t?s.slice(c,c+2):a-56320+(r-55296<<10)+65536)}};t.exports={codeAt:r(!1),charAt:r(!0)}},"356c":function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXPz8/R0dHT09PU1NToNyAhAAACdElEQVQozw3NP0xTQQDH8d9d7sFrG+QeKVgQ4aoFCwFkYERyLY//0UB8GNGg1WAC0RBGJrzW4mCXQmpgvCYOwEAYiulSpYtza2KiW7s5FgNJFSV2/CzfL7RwpoJ20iadmgA8owOyaxmusKE44scBeb4vIv00dqYgmf6jzWcr7W6INbDQeZbQL9ytXeYgtFfzmW1Fek5msxJlwhyt6qDDxOLQzpVPompYrMPnEnhvLm7M5BxY5nowAj3zkydAkpC0FIG6g7AK+Ub25ybyNWVYwtpseP2rfrQwiGRpfqrnMuPeuvr2dA0p2YsHF2XghkrXKtZ8tLBjR7S2qIaYbKmyLd/QP+EogLjqqwNw5Lq1pDlMLkM5+gNoSvdq+Pxmz9/61EFq6GYM6GqaGvlN95zy3gsmEWI8K3k8OP9OmRLEPO6DP3Wv3g42COinJTZ33dcIvs4ESp6opMTjDs6mcYTEbFeUifuxh989yZrIx4lkpuixxz0nHLCekKbE17suKhYkMGhoYhTZtVBvg4bfq/1L1Im0AGMVpBFwumM0zwyuKiCMi5dqR4Flx47AGyF2xTbxqUdTwCH94BT3DozpLV5WuAL/N8rGtHKjotBOOuOtCJ9E21uqsyBoLOzaXbHPrK5PQBP+fBfeidvJAeMIAmzVt5IkJJ9DBWaZDAepYUhlQqHt0h72SJ3j8TZHom64f516xx9T5evgMPgwG82jZdJaJIDyWp6LAjOCclVyzNA3iTKzIULlBQEPaTXlPHok5gISclmyaWZlqY2aTHdRHpJOwTdDEQ3ZfKtbpclcNhyVClagmY+fIfyKukntPqBgnx5QvZHk/D/MK8JMClrSigAAAABJRU5ErkJggg=="},3874:function(t,e,n){},"3e5e":function(t,e,n){"use strict";var i=n("deaa"),o=n("e1dd"),r=n("ac83"),a=n("3193"),s=n("fb8e"),c=n("536c"),l=n("684e"),u=n("81a0"),A=n("21d4"),f=n("f30e"),g=[].push,d=Math.min,h=4294967295,p=!f((function(){return!RegExp(h,"y")}));i("split",2,(function(t,e,n){var i;return i="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,n){var i=String(a(this)),r=void 0===n?h:n>>>0;if(0===r)return[];if(void 0===t)return[i];if(!o(t))return e.call(i,t,r);var s,c,l,u=[],f=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),d=0,p=new RegExp(t.source,f+"g");while(s=A.call(p,i)){if(c=p.lastIndex,c>d&&(u.push(i.slice(d,s.index)),s.length>1&&s.index=r))break;p.lastIndex===s.index&&p.lastIndex++}return d===i.length?!l&&p.test("")||u.push(""):u.push(i.slice(d)),u.length>r?u.slice(0,r):u}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:e.call(this,t,n)}:e,[function(e,n){var o=a(this),r=void 0==e?void 0:e[t];return void 0!==r?r.call(e,o,n):i.call(String(o),e,n)},function(t,o){var a=n(i,t,this,o,i!==e);if(a.done)return a.value;var A=r(t),f=String(this),g=s(A,RegExp),m=A.unicode,v=(A.ignoreCase?"i":"")+(A.multiline?"m":"")+(A.unicode?"u":"")+(p?"y":"g"),C=new g(p?A:"^(?:"+A.source+")",v),b=void 0===o?h:o>>>0;if(0===b)return[];if(0===f.length)return null===u(C,f)?[f]:[];var S=0,y=0,x=[];while(y1?arguments[1]:void 0)}})},"407d":function(t,e,n){var i=n("0b29"),o=n("fee7"),r=n("ee6f"),a=n("684e"),s=n("3132"),c=[].push,l=function(t){var e=1==t,n=2==t,l=3==t,u=4==t,A=6==t,f=5==t||A;return function(g,d,h,p){for(var m,v,C=r(g),b=o(C),S=i(d,h,3),y=a(b.length),x=0,B=p||s,I=e?B(g,y):n?B(g,0):void 0;y>x;x++)if((f||x in b)&&(m=b[x],v=S(m,x,C),t))if(e)I[x]=v;else if(v)switch(t){case 3:return!0;case 5:return m;case 6:return x;case 2:c.call(I,m)}else if(u)return!1;return A?-1:l||u?u:I}};t.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6)}},4178:function(t,e,n){"use strict";var i=n("91fe"),o=n("d5dc"),r=n("df50"),a=n("e17a"),s=n("7a23"),c=n("4ccd"),l=n("4445"),u=n("f30e"),A=n("f28d"),f=n("a8c9"),g=n("d68d"),d=n("ac83"),h=n("ee6f"),p=n("8c47"),m=n("7dc7"),v=n("aec8"),C=n("641d"),b=n("16e5"),S=n("65af"),y=n("1544"),x=n("1072"),B=n("4aef"),I=n("c223"),E=n("354c"),k=n("2ba5"),w=n("3d8a"),O=n("f880"),U=n("4d52"),D=n("4888"),Q=n("9db6"),V=n("57c4"),R=n("7287"),P=n("c0aa"),M=n("94d7"),F=n("d0e2"),N=n("407d").forEach,L=U("hidden"),K="Symbol",T="prototype",H=V("toPrimitive"),J=F.set,z=F.getterFor(K),W=Object[T],G=o.Symbol,q=r("JSON","stringify"),Y=B.f,Z=I.f,j=y.f,X=E.f,$=O("symbols"),_=O("op-symbols"),tt=O("string-to-symbol-registry"),et=O("symbol-to-string-registry"),nt=O("wks"),it=o.QObject,ot=!it||!it[T]||!it[T].findChild,rt=s&&u((function(){return 7!=C(Z({},"a",{get:function(){return Z(this,"a",{value:7}).a}})).a}))?function(t,e,n){var i=Y(W,e);i&&delete W[e],Z(t,e,n),i&&t!==W&&Z(W,e,i)}:Z,at=function(t,e){var n=$[t]=C(G[T]);return J(n,{type:K,tag:t,description:e}),s||(n.description=e),n},st=l?function(t){return"symbol"==typeof t}:function(t){return Object(t)instanceof G},ct=function(t,e,n){t===W&&ct(_,e,n),d(t);var i=m(e,!0);return d(n),A($,i)?(n.enumerable?(A(t,L)&&t[L][i]&&(t[L][i]=!1),n=C(n,{enumerable:v(0,!1)})):(A(t,L)||Z(t,L,v(1,{})),t[L][i]=!0),rt(t,i,n)):Z(t,i,n)},lt=function(t,e){d(t);var n=p(e),i=b(n).concat(dt(n));return N(i,(function(e){s&&!At.call(n,e)||ct(t,e,n[e])})),t},ut=function(t,e){return void 0===e?C(t):lt(C(t),e)},At=function(t){var e=m(t,!0),n=X.call(this,e);return!(this===W&&A($,e)&&!A(_,e))&&(!(n||!A(this,e)||!A($,e)||A(this,L)&&this[L][e])||n)},ft=function(t,e){var n=p(t),i=m(e,!0);if(n!==W||!A($,i)||A(_,i)){var o=Y(n,i);return!o||!A($,i)||A(n,L)&&n[L][i]||(o.enumerable=!0),o}},gt=function(t){var e=j(p(t)),n=[];return N(e,(function(t){A($,t)||A(D,t)||n.push(t)})),n},dt=function(t){var e=t===W,n=j(e?_:p(t)),i=[];return N(n,(function(t){!A($,t)||e&&!A(W,t)||i.push($[t])})),i};if(c||(G=function(){if(this instanceof G)throw TypeError("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?String(arguments[0]):void 0,e=Q(t),n=function(t){this===W&&n.call(_,t),A(this,L)&&A(this[L],e)&&(this[L][e]=!1),rt(this,e,v(1,t))};return s&&ot&&rt(W,e,{configurable:!0,set:n}),at(e,t)},w(G[T],"toString",(function(){return z(this).tag})),w(G,"withoutSetter",(function(t){return at(Q(t),t)})),E.f=At,I.f=ct,B.f=ft,S.f=y.f=gt,x.f=dt,R.f=function(t){return at(V(t),t)},s&&(Z(G[T],"description",{configurable:!0,get:function(){return z(this).description}}),a||w(W,"propertyIsEnumerable",At,{unsafe:!0}))),i({global:!0,wrap:!0,forced:!c,sham:!c},{Symbol:G}),N(b(nt),(function(t){P(t)})),i({target:K,stat:!0,forced:!c},{for:function(t){var e=String(t);if(A(tt,e))return tt[e];var n=G(e);return tt[e]=n,et[n]=e,n},keyFor:function(t){if(!st(t))throw TypeError(t+" is not a symbol");if(A(et,t))return et[t]},useSetter:function(){ot=!0},useSimple:function(){ot=!1}}),i({target:"Object",stat:!0,forced:!c,sham:!s},{create:ut,defineProperty:ct,defineProperties:lt,getOwnPropertyDescriptor:ft}),i({target:"Object",stat:!0,forced:!c},{getOwnPropertyNames:gt,getOwnPropertySymbols:dt}),i({target:"Object",stat:!0,forced:u((function(){x.f(1)}))},{getOwnPropertySymbols:function(t){return x.f(h(t))}}),q){var ht=!c||u((function(){var t=G();return"[null]"!=q([t])||"{}"!=q({a:t})||"{}"!=q(Object(t))}));i({target:"JSON",stat:!0,forced:ht},{stringify:function(t,e,n){var i,o=[t],r=1;while(arguments.length>r)o.push(arguments[r++]);if(i=e,(g(e)||void 0!==t)&&!st(t))return f(e)||(e=function(t,e){if("function"==typeof i&&(e=i.call(this,t,e)),!st(e))return e}),o[1]=e,q.apply(null,o)}})}G[T][H]||k(G[T],H,G[T].valueOf),M(G,K),D[L]=!0},"41f6":function(t,e){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},4400:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyBAMAAADsEZWCAAAAElBMVEUQERMODxESFBYWGBkaHB0eICLm6ozJAAACkUlEQVQ4yyWTUdLbMAiEASfvoOkBkBy/O5keIE0v8E/uf5h+68qZWALELgu2MG9PP9qyvCzTVhrrsPGOCjvTfXQZvtp/W3Gy6LCITqs4q/DZ+KYl76zKzHVYpY2wNY27nqN1sbLGcrLH3/ENH4oWlGctsDu8AO+HzTLlsYdh8MzP1m6YDMz0ACfcimvakBj+mwO/+5Uta5teOD379sxK1fUxmUhv8MU3jUT5gs26PMephFznkLcpQZ6/dPL9C/GWHcCxDN6oZhD5xBm5qoYBPA+PFE/H1tXDWcWl8TW7rS+4dUzAVy0BIrvC4/HcqW2TkG1HO8q9dC23INAg7NA4AFRFkDTM2lfELPyFzi1VddcpX2z0KjHBUDmdLNJ6dDps4ytrX+FPsZwE31wSL+6OWfHOAJ3+Y0Rk/MiKfmWNPg7oVP/U3Ck9FoCkC2gBpALOiqbMNTkOe8P4FWkTD2Y9Q3+5VmV0uLUJBl68U5uAK2Kl6QDXvLxbwweOL2sixW78uU8p0ysfc7cWrF1j6B1sPJ4WgclYSnJN1bzozrhEcFHmRzBkbJWqqdG+EYJXRFmT5jnLXPUNF6WBdoFbTxYsmDXVLU/WA7MExNc93sJS5hIXDeLxzMScHzdhKvEkibr6cQXYPrmtmTA7JcInISrTzRDvShTdka0uVGrsJAAR6tSn1sKziZtfKVjAxPrJsYgZO0bye+vKTZ/DgoAoLGNO6jYHimZYTL/3pLJHawquJukjBpfz8WOGVSVIWx9ywUfS5iENutidRM4NzkAmxgUSQ68xgNOU+ZLalr4TS2V+D2xqukZig+Z9DilR7Nouzwp1cp/3E5q6Rdlf08obKvAM4qZ6pMr+w3PmQALSSBfjyZn5DwrNRVbywBQiAAAAAElFTkSuQmCC"},"477e":function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAACVBMVEX28ef48+n69esoK7jYAAAB4UlEQVQozw2OsW4bQQxEhwLXkDrysGdEqRRgVShfQQq8wOr2jD0jSpXCLvwXbtKfADlFqgSwC/9ljqweZgYzQFnb/QGepYhA9jzmTc1WaSEtQpbFgjWATI00ZZtIckXx8q2Oe5yEByBy+RHOTcM+VVTadULsvxvRC/q8WTwgcWGD+Mnaqa0oy2gw2pKFzK+PzEsus5hP9AHojKslVynLlioVTBEN8cjDNnZoR1uMGTiZAAN47HxMtEkGUE9b8HWzkqNX5Lpk0yVziAJOs46rK1pG/xNuXLjz95fSDoJE5IqG23MAYPtWoeWPvfVtIV/Ng9oH3W0gGMPIOqd4MK4QZ55dV61gOb8Zxp7I9qayaGxp6Q91cmC0ZRdBwEQVHWzSAanlZwVWc9yljeTCeaHjBVvlPSLeyeBUT2rPdJegQI103jVS3uYkyIx1il6mslMDedZuOkwzolsagvPuQAfp7cYg7k9V1NOxfq64PNSvMdwONV4VYEmqlbpZy5OAakRKkjPnL4CBv5/OZRgoWHBmNbxB0LgB1I4vXFj93UoF2/0TPEsWwV9EhbIiTPqYoTHYoMn3enTDjmrFeDTIzaL1bUC/PBIMuF+vSSYSaxoVt90EO3Gu1zrMuMRGUk7Ffv3L+A931Gsb/yBoIgAAAABJRU5ErkJggg=="},"536c":function(t,e,n){"use strict";var i=n("3303").charAt;t.exports=function(t,e,n){return e+(n?i(t,e).length:1)}},"537b":function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"chapter-wrapper",class:{night:t.isNight,day:!t.isNight},style:t.bodyTheme},[n("div",{staticClass:"tool-bar",style:t.leftBarTheme},[n("div",{staticClass:"tools"},[n("el-popover",{attrs:{placement:"right",width:t.cataWidth,trigger:"click","visible-arrow":!1,"popper-class":"pop-cata"},model:{value:t.popCataVisible,callback:function(e){t.popCataVisible=e},expression:"popCataVisible"}},[n("PopCata",{ref:"popCata",staticClass:"popup",on:{getContent:t.getContent}}),n("div",{staticClass:"tool-icon",class:{"no-point":t.noPoint},attrs:{slot:"reference"},slot:"reference"},[n("div",{staticClass:"iconfont"},[t._v("  ")]),n("div",{staticClass:"icon-text"},[t._v("目录")])])],1),n("el-popover",{attrs:{placement:"bottom-right",width:"470",trigger:"click","visible-arrow":!1,"popper-class":"pop-setting"},model:{value:t.readSettingsVisible,callback:function(e){t.readSettingsVisible=e},expression:"readSettingsVisible"}},[n("ReadSettings",{staticClass:"popup"}),n("div",{staticClass:"tool-icon",class:{"no-point":t.noPoint},attrs:{slot:"reference"},slot:"reference"},[n("div",{staticClass:"iconfont"},[t._v("  ")]),n("div",{staticClass:"icon-text"},[t._v("设置")])])],1),n("div",{staticClass:"tool-icon",on:{click:t.toShelf}},[n("div",{staticClass:"iconfont"},[t._v("  ")]),n("div",{staticClass:"icon-text"},[t._v("书架")])]),n("div",{staticClass:"tool-icon",class:{"no-point":t.noPoint},on:{click:t.toTop}},[n("div",{staticClass:"iconfont"},[t._v("  ")]),n("div",{staticClass:"icon-text"},[t._v("顶部")])]),n("div",{staticClass:"tool-icon",class:{"no-point":t.noPoint},on:{click:t.toBottom}},[n("div",{staticClass:"iconfont"},[t._v("  ")]),n("div",{staticClass:"icon-text"},[t._v("底部")])])],1)]),n("div",{staticClass:"read-bar",style:t.rightBarTheme},[n("div",{staticClass:"tools"},[n("div",{staticClass:"tool-icon",class:{"no-point":t.noPoint},on:{click:t.toLastChapter}},[n("div",{staticClass:"iconfont"},[t._v("  ")])]),n("div",{staticClass:"tool-icon",class:{"no-point":t.noPoint},on:{click:t.toNextChapter}},[n("div",{staticClass:"iconfont"},[t._v("  ")])])])]),n("div",{staticClass:"chapter-bar"}),n("div",{ref:"content",staticClass:"chapter",style:t.chapterTheme},[n("div",{staticClass:"content"},[n("div",{ref:"top",staticClass:"top-bar"}),t.show?n("div",{ref:"title",staticClass:"title"},[t._v(t._s(t.title))]):t._e(),n("Pcontent",{attrs:{carray:t.content}}),n("div",{ref:"bottom",staticClass:"bottom-bar"})],1)])])},o=[],r=(n("b3f9"),n("3e5e"),function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"cata-wrapper",style:t.popupTheme},[n("div",{staticClass:"title"},[t._v(" 目录 ")]),n("div",{ref:"cataData",staticClass:"data-wrapper",class:{night:t.isNight,day:!t.isNight}},[n("div",{staticClass:"cata"},t._l(t.catalog,(function(e,i){return n("div",{key:e.durChapterIndex,ref:"cata",refInFor:!0,staticClass:"log",class:{selected:t.isSelected(i)},on:{click:function(n){return t.gotoChapter(e)}}},[n("div",{staticClass:"log-text"},[t._v(" "+t._s(e.title)+" ")])])})),0)])])}),a=[];n("4045"),n("4178"),n("fc88"),n("e350"),n("d9a3"),n("3a20"),n("ef8e"),n("252a");function s(t){return s="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"===typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},s(t)}var c,l,u=function(t,e,n,i){return t/=i/2,t<1?n/2*t*t+e:(t--,-n/2*(t*(t-2)-1)+e)},A=function(){var t,e,n,i,o,r,a,c,l,A,f,g,d;function h(){var e=t.scrollTop||t.scrollY||t.pageYOffset;return e="undefined"===typeof e?0:e,e}function p(e){var i=e.getBoundingClientRect().top,o=t.getBoundingClientRect?t.getBoundingClientRect().top:0;return i-o+n}function m(e){t.scrollTo?t.scrollTo(0,e):t.scrollTop=e}function v(t){A||(A=t),f=t-A,g=r(f,n,c,l),m(g),f1&&void 0!==arguments[1]?arguments[1]:{};switch(l=f.duration||1e3,o=f.offset||0,d=f.callback,r=f.easing||u,a=f.a11y||!1,s(f.container)){case"object":t=f.container;break;case"string":t=document.querySelector(f.container);break;default:t=window}switch(n=h(),s(A)){case"number":e=void 0,a=!1,i=n+A;break;case"object":e=A,i=p(e);break;case"string":e=document.querySelector(A),i=p(e);break}switch(c=i-n+o,s(f.duration)){case"number":l=f.duration;break;case"function":l=f.duration(c);break}requestAnimationFrame(v)}return b},f=A(),g=f,d=n("7286"),h=n.n(d),p=n("477e"),m=n.n(p),v=n("e160"),C=n.n(v),b=n("df5e"),S=n.n(b),y=n("ec0f"),x=n.n(y),B=n("b671"),I=n.n(B),E=n("5629"),k=n.n(E),w=n("d0e3"),O=n.n(w),U=n("4039"),D=n.n(U),Q=n("1e75"),V=n.n(Q),R=n("1632"),P=n.n(R),M=n("7abd"),F=n.n(M),N=n("356c"),L=n.n(N),K=n("b165"),T=n.n(K),H=n("cf68"),J=n.n(H),z=n("4400"),W=n.n(z),G=n("802e"),q=n.n(G),Y=n("0827"),Z=n.n(Y),j={themes:[{body:"#ede7da url("+h.a+") repeat",content:"#ede7da url("+m.a+") repeat",popup:"#ede7da url("+C.a+") repeat"},{body:"#ede7da url("+S.a+") repeat",content:"#ede7da url("+x.a+") repeat",popup:"#ede7da url("+I.a+") repeat"},{body:"#ede7da url("+k.a+") repeat",content:"#ede7da url("+O.a+") repeat",popup:"#ede7da url("+D.a+") repeat"},{body:"#ede7da url("+V.a+") repeat",content:"#ede7da url("+P.a+") repeat",popup:"#ede7da url("+F.a+") repeat"},{body:"#ebcece repeat",content:"#f5e4e4 repeat",popup:"#faeceb repeat"},{body:"#ede7da url("+L.a+") repeat",content:"#ede7da url("+T.a+") repeat",popup:"#ede7da url("+J.a+") repeat"},{body:"#ede7da url("+W.a+") repeat",content:"#ede7da url("+q.a+") repeat",popup:"#ede7da url("+Z.a+") repeat"}],fonts:[{fontFamily:"Microsoft YaHei, PingFangSC-Regular, HelveticaNeue-Light, Helvetica Neue Light, sans-serif"},{fontFamily:"PingFangSC-Regular, -apple-system, Simsun"},{fontFamily:"Kaiti"}]},X=j,$=(n("05b3"),{name:"PopCata",data:function(){return{isNight:6==this.$store.state.config.theme,index:this.$store.state.readingBook.index}},computed:{catalog:function(){return this.$store.state.readingBook.catalog},popCataVisible:function(){return this.$store.state.popCataVisible},theme:function(){return this.$store.state.config.theme},popupTheme:function(){return{background:X.themes[this.theme].popup}}},mounted:function(){},watch:{theme:function(t){this.isNight=6==t},popCataVisible:function(){this.$nextTick((function(){var t=this.$store.state.readingBook.index,e=this.$refs.cataData;g(this.$refs.cata[t],{container:e,duration:0})}))}},methods:{isSelected:function(t){return t==this.$store.state.readingBook.index},gotoChapter:function(t){this.index=this.catalog.indexOf(t),this.$store.commit("setPopCataVisible",!1),this.$store.commit("setContentLoading",!0),this.$emit("getContent",this.index)}}}),_=$,tt=(n("7f9c"),n("623f")),et=Object(tt["a"])(_,r,a,!1,null,"8c647fa4",null),nt=et.exports,it=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"settings-wrapper",class:{night:t.isNight,day:!t.isNight},style:t.popupTheme},[n("div",{staticClass:"settings-title"},[t._v("设置")]),n("div",{staticClass:"setting-list"},[n("ul",[n("li",{staticClass:"theme-list"},[n("i",[t._v("阅读主题")]),t._l(t.themeColors,(function(e,i){return n("span",{key:i,ref:"themes",refInFor:!0,staticClass:"theme-item",class:{selected:t.selectedTheme==i},style:e,on:{click:function(e){return t.setTheme(i)}}},[i<6?n("em",{staticClass:"iconfont"},[t._v("")]):n("em",{staticClass:"moon-icon"},[t._v(t._s(t.moonIcon))])])}))],2),n("li",{staticClass:"font-list"},[n("i",[t._v("正文字体")]),t._l(t.fonts,(function(e,i){return n("span",{key:i,staticClass:"font-item",class:{selected:t.selectedFont==i},on:{click:function(e){return t.setFont(i)}}},[t._v(t._s(e))])}))],2),n("li",{staticClass:"font-size"},[n("i",[t._v("字体大小")]),n("div",{staticClass:"resize"},[n("span",{staticClass:"less",on:{click:t.lessFontSize}},[n("em",{staticClass:"iconfont"},[t._v("")])]),n("b"),t._v(" "),n("span",{staticClass:"lang"},[t._v(t._s(t.fontSize))]),n("b"),n("span",{staticClass:"more",on:{click:t.moreFontSize}},[n("em",{staticClass:"iconfont"},[t._v("")])])])]),n("li",{staticClass:"read-width"},[n("i",[t._v("页面宽度")]),n("div",{staticClass:"resize"},[n("span",{staticClass:"less",on:{click:t.lessReadWidth}},[n("em",{staticClass:"iconfont"},[t._v("")])]),n("b"),t._v(" "),n("span",{staticClass:"lang"},[t._v(t._s(t.readWidth))]),n("b"),n("span",{staticClass:"more",on:{click:t.moreReadWidth}},[n("em",{staticClass:"iconfont"},[t._v("")])])])])])])])},ot=[],rt=(n("82da"),{name:"ReadSettings",data:function(){return{theme:0,isNight:6==this.$store.state.config.theme,moonIcon:"",themeColors:[{background:"rgba(250, 245, 235, 0.8)"},{background:"rgba(245, 234, 204, 0.8)"},{background:"rgba(230, 242, 230, 0.8)"},{background:"rgba(228, 241, 245, 0.8)"},{background:"rgba(245, 228, 228, 0.8)"},{background:"rgba(224, 224, 224, 0.8)"},{background:"rgba(0, 0, 0, 0.5)"}],moonIconStyle:{display:"inline",color:"rgba(255,255,255,0.2)"},fonts:["雅黑","宋体","楷书"]}},mounted:function(){var t=this.$store.state.config;this.theme=t.theme,6==this.theme?this.moonIcon="":this.moonIcon=""},computed:{config:function(){return this.$store.state.config},popupTheme:function(){return{background:X.themes[this.config.theme].popup}},selectedTheme:function(){return this.$store.state.config.theme},selectedFont:function(){return this.$store.state.config.font},fontSize:function(){return this.$store.state.config.fontSize},readWidth:function(){return this.$store.state.config.readWidth}},methods:{setTheme:function(t){6==t?(this.isNight=!0,this.moonIcon="",this.moonIconStyle.color="#ed4259"):(this.isNight=!1,this.moonIcon="",this.moonIconStyle.color="rgba(255,255,255,0.2)");var e=this.config;e.theme=t,this.$store.commit("setConfig",e)},setFont:function(t){var e=this.config;e.font=t,this.$store.commit("setConfig",e)},moreFontSize:function(){var t=this.config;t.fontSize<48&&(t.fontSize+=2),this.$store.commit("setConfig",t)},lessFontSize:function(){var t=this.config;t.fontSize>12&&(t.fontSize-=2),this.$store.commit("setConfig",t)},moreReadWidth:function(){var t=this.config;t.readWidth<960&&(t.readWidth+=160),this.$store.commit("setConfig",t)},lessReadWidth:function(){var t=this.config;t.readWidth>640&&(t.readWidth-=160),this.$store.commit("setConfig",t)}}}),at=rt,st=(n("8157"),Object(tt["a"])(at,it,ot,!1,null,"3d7e2fe5",null)),ct=st.exports,lt=(n("1a8c"),{name:"pcontent",data:function(){return{}},props:["carray"],render:function(){var t=arguments[0],e=this.fontFamily,n=this.fontSize,i=e;return i.fontSize=n,this.show?t("div",[this.carray.map((function(e){return t("p",{style:i},[e])}))]):t("div")},computed:{show:function(){return this.$store.state.showContent},fontFamily:function(){return X.fonts[this.$store.state.config.font]},fontSize:function(){return this.$store.state.config.fontSize+"px"}},watch:{fontSize:function(){var t=this;t.$store.commit("setShowContent",!1),this.$nextTick((function(){t.$store.commit("setShowContent",!0)}))}}}),ut=lt,At=(n("a9ea"),Object(tt["a"])(ut,c,l,!1,null,"6ee085ae",null)),ft=At.exports,gt=n("82ae"),dt=n.n(gt),ht={components:{PopCata:nt,Pcontent:ft,ReadSettings:ct},created:function(){var t=JSON.parse(localStorage.getItem("config"));null!=t&&this.$store.commit("setConfig",t)},beforeCreate:function(){var t=JSON.parse(localStorage.getItem("config"));null!=t&&this.$store.commit("setConfig",t)},mounted:function(){var t=this;this.loading=this.$loading({target:this.$refs.content,lock:!0,text:"正在获取内容",spinner:"el-icon-loading",background:"rgba(0,0,0,0)"});var e=this,n=sessionStorage.getItem("bookUrl"),i=sessionStorage.getItem("bookName"),o=JSON.parse(localStorage.getItem(n));null==o&&(o={bookName:i,bookUrl:n,index:0},localStorage.setItem(n,JSON.stringify(o))),this.getCatalog(n).then((function(n){var i=n.data.data;o.catalog=i,e.$store.commit("setReadingBook",o);var r=e.$store.state.readingBook.index||0;t.getContent(r)}),(function(t){throw e.loading.close(),e.$message.error("获取书籍目录失败"),t}))},watch:{chapterName:function(t){this.title=t},content:function(){this.$store.commit("setContentLoading",!1)},theme:function(t){this.isNight=6==t},bodyColor:function(t){this.bodyTheme.background=t},chapterColor:function(t){this.chapterTheme.background=t},readWidth:function(t){this.chapterTheme.width=t;var e=-((parseInt(t)+130)/2+68)+"px",n=-((parseInt(t)+130)/2+52)+"px";this.leftBarTheme.marginLeft=e,this.rightBarTheme.marginRight=n},popupColor:function(t){this.leftBarTheme.background=t,this.rightBarTheme.background=t},readSettingsVisible:function(t){if(!t){var e=JSON.stringify(this.$store.state.config);localStorage.setItem("config",e)}}},data:function(){return{title:"",content:[],noPoint:!0,isNight:6==this.$store.state.config.theme,bodyTheme:{background:X.themes[this.$store.state.config.theme].body},chapterTheme:{background:X.themes[this.$store.state.config.theme].content,width:this.$store.state.config.readWidth-130+"px"},leftBarTheme:{background:X.themes[this.$store.state.config.theme].popup,marginLeft:-(this.$store.state.config.readWidth/2+68)+"px"},rightBarTheme:{background:X.themes[this.$store.state.config.theme].popup,marginRight:-(this.$store.state.config.readWidth/2+52)+"px"}}},computed:{catalog:function(){return this.$store.state.catalog},windowHeight:function(){return window.innerHeight},contentHeight:function(){return this.$refs.content.offsetHeight},popCataVisible:{get:function(){return this.$store.state.popCataVisible},set:function(t){this.$store.commit("setPopCataVisible",t)}},readSettingsVisible:{get:function(){return this.$store.state.readSettingsVisible},set:function(t){this.$store.commit("setReadSettingsVisible",t)}},config:function(){return this.$store.state.config},theme:function(){return this.config.theme},bodyColor:function(){return X.themes[this.config.theme].body},chapterColor:function(){return X.themes[this.config.theme].content},popupColor:function(){return X.themes[this.config.theme].popup},readWidth:function(){return this.$store.state.config.readWidth-130+"px"},cataWidth:function(){return this.$store.state.config.readWidth-33},show:function(){return this.$store.state.showContent}},methods:{getCatalog:function(t){return dt.a.get("/getChapterList?url="+encodeURIComponent(t))},getContent:function(t){var e=this;this.$store.commit("setShowContent",!1),this.loading.visible||(this.loading=this.$loading({target:this.$refs.content,lock:!0,text:"正在获取内容",spinner:"el-icon-loading",background:"rgba(0,0,0,0)"}));var n=sessionStorage.getItem("bookUrl"),i=JSON.parse(localStorage.getItem(n));i.index=t,localStorage.setItem(n,JSON.stringify(i)),this.$store.state.readingBook.index=t;var o=this.$store.state.readingBook.catalog[t].title,r=this.$store.state.readingBook.catalog[t].index;this.title=o,g(this.$refs.top,{duration:0});var a=this;dt.a.get("/getBookContent?url="+encodeURIComponent(n)+"&index="+r).then((function(t){var n=t.data.data,i=n.split("\n\n"),o="";o=i.length>1?i[1].split("\n"):i[0].split("\n"),a.content=o,e.$store.commit("setContentLoading",!0),a.loading.close(),a.noPoint=!1,a.$store.commit("setShowContent",!0)}),(function(t){throw a.$message.error("获取章节内容失败"),a.content="  获取章节内容失败!",t}))},toTop:function(){g(this.$refs.top)},toBottom:function(){g(this.$refs.bottom)},toNextChapter:function(){this.$store.commit("setContentLoading",!0);var t=this.$store.state.readingBook.index;t++,this.getContent(t)},toLastChapter:function(){this.$store.commit("setContentLoading",!0);var t=this.$store.state.readingBook.index;t--,this.getContent(t)},toShelf:function(){this.$router.push("/")}}},pt=ht,mt=(n("88a3"),Object(tt["a"])(pt,i,o,!1,null,"08ce53b2",null));e["default"]=mt.exports},5629:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXN383Q4tDP4c/R5NEInCCXAAACVElEQVQozw3Hv2sTYRwH4M/79pJ7bZL2bXqtERJ97zjUpbZDhg6pfC8qibi8hLR0EaJ0EFxaCSWDxjfpj1zrYBcRBKE6SAfBJWsx9i8IQfdQxDlKtA6t2OnhQfN3lbG7ytYRywF8rVoPCNO0X2sQOKDpAnSDK2VwkHgmh5yLGT8qASt+2KofnNt2Xg1gf1UF8AoM6052cRMNaloLZb7RKQGrKKji2OefsZF+VqIvos5ZLVIZCX61JcwUdk56wASVkgQvzPfvmT2twTSwyYaC/Pl/UhAHorFhBgZtL6XdAZRp1tkPwC1NLa9CWs5prLhI85NBQsLdXvjDymG3/EbYfQhVNYqc3TtktQhWLY3ko0QsdMbSEp+64v0NfxyqLbIGdh6M2xHHlLBGqKTyQo4E/nebBgBfe1GpdeywYXc8CT7D3cKXuMXkBy4xN6o5OuKamYp3DVI6uccO9lxgd2CAlJgI2BGgaAgIJV/TYwKqu3WFccjbMuA+bVkWgS2bfnlRbD1Eb1sDyWMmjKYIBgGAWbqKRicfvzBkBIz3V5AKnguWdglQEysQsSuVzOg6ALy1pitA5ykGCsc857BRYcgCSZyFOdvoOigSGoPc5Ta73mgxshIcQE5sHMHd9D7yqITw7JO+GHVMxjhzYLcKPSEgmz3fU+BRy3iYNtiXLaBssCW8KguReqkQOTb3MStV0Ugt4U1eIs1RZWRII6Ww8xeNNItyGGQI4ZMlpg/3lQtkl2JFnBp1imRyFe0kK2Id3PCslMgiQNMS77gvFeDhG3cSkYvheeg/e7ClIh5oh+IAAAAASUVORK5CYII="},6885:function(t,e,n){var i=n("7a23"),o=n("f30e"),r=n("f28d"),a=Object.defineProperty,s={},c=function(t){throw t};t.exports=function(t,e){if(r(s,t))return s[t];e||(e={});var n=[][t],l=!!r(e,"ACCESSORS")&&e.ACCESSORS,u=r(e,0)?e[0]:c,A=r(e,1)?e[1]:void 0;return s[t]=!!n&&!o((function(){if(l&&!i)return!0;var t={length:-1};l?a(t,1,{enumerable:!0,get:c}):t[1]=1,n.call(t,u,A)}))}},7286:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXr5djn4dTp49bt59rT6LKxAAACnElEQVQozw3NUUwScRzA8d8R6MF8YMIx8uk47hDSJbj14IPzOGc7jPLvwTGg5uAYDbe2tt56cLtznvEnS6yDqCcEaWi91DvrbLJZz7b1aFtz1aO+2OZWvn+/+4CHeB6BMYaqBLfjPNRY6RFT2JJYby+uAk4WUTrtlmJ4hgPYb2q1XGDQjaK8pgJHvqNaAX+KyuIkDXpgQinb46nOulnn4b5laUHTxLfseeArAoNOeJlOIjdoal0n1FA7tKFv5roK+YaHOqP3P0XyKHPHY+MhTRe5uCZnKhtJKw2eSrSoBDPLtpZuNcFNJcFyiCMxOaaHIfXz1e8HQbWLySrBQ4x0x1qlhnHlnz2HQEC6TNb0gTHXa7IKhcaHqkE015hk9whA0YeWiLIXf7Fa2CZo3DjqjB4tTuF8jIcbfcEx5z/w4sXpQhXW+ju0cqh7icTFmRMaG+v6CIvTjcSpHcH8JEsF3EPh3fRthYdVLLgI2fWXm85/pGFE4l046s70L+yKCcirGFR+jbpy3kMmiCGHrSezVONsn1RBixncyk2PcVWk7DlgxHo8iZwDyq5uAUD854dZhdIFYzKoQig2haUKi1lVufz2RZUZPZ41n/hrOQB6h0Hhg8I367FNoEHgeM/KY7szSeQwD8q2WE3HM35ZLl0K1MJiOtHIkBclRQUwZnyOWcNsRQQgVLj1PSqkjF9DsoOSaSg3iinKzvfmgsNFFfpP/2T3GLGvL4fHEfwIX1sVvXcPqLztehWGcfn9nI2U9nTfCgJPe/jFPLZwgVEzimBgAm0VIyK2tt1cE/AzQdLK+SxLSQ4aDCZnnId94OG2S1XwvnTbNk/ZnhyRCQT+sZM6z9g6LXL1BOBe+zJySiFkHAINCtnQokbCJ/apCv0foqPiZVfhpywAAAAASUVORK5CYII="},7287:function(t,e,n){var i=n("57c4");e.f=i},"7abd":function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXm9PXq+Pno9vfs+vttWKBGAAACPElEQVQozw3RQWrbQACF4TfCMjPqZgIj4RRaxsZKE0PuMBZ2cLKaCI9RDAXFmJJknUWWI1O1UlamOMHJSjGkuFn3AD2Cr9CepDrAg+/xIxK4QwIqHHQkUhQ/WuphInVIFBojl8QXc012Tgq4RTtVHWVLZVFh1tEoI91uiN4joCqde8Ukn/zGM1B2W4ari2PtTwyw55Ld+Wways54qhGPyS6FzbIT3lIY8WwWdCq56Yolx6KmSKzoqrsCB5heAp4TGNQWJ1Pc6XlE5jQD5OlIX9I47A9uiUQcPQxcury/ToyxWJG/za6ki88crxKPocKS59Sl3EtBG7C89fCGflpfqoSzCeC4crioJA7F0V5+8MaSIk4qSCdwzpogmbqzEirVpGiS2dOVJvUuuqFEmhHao06KEpq+8lvHI14NJk3Qrmi9vBuRLwAz0qZB4hsDXQFXgtnlpDX3C6ug9BquSw/CYtwAzuTz5vuQNdr/YibhR68378ehZH30FSpjh71LpQkrsj+Q062h5WwZ5wlRoD6uQJy1DqvSYuCUapMBqT5YA4ZFw4KlWapxoUGlKWrx0eDQvmigu4WMYt97ruru98fYL8/0lG6CTOFcFWBhFK5gKw19h2JN808nh7xhkU6sWKLXdtkqBL6h+lULK5k19wFB/FldnGYf3LDeuf6IC2/MzJOSOP0qPxLqzaGIqtBcFIItrstkazONOkrc1D1czjuwEGESB4JJnjgSMN7PXAu7fZQpl1C236C+9mM4Af8P98Ch4R2TRl8AAAAASUVORK5CYII="},"7f9c":function(t,e,n){"use strict";var i=n("3874"),o=n.n(i);o.a},"802e":function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEUWGBkYGhsdHyAfISI1t/v6AAAB5ElEQVQozxXQsYoTURSA4f/EeycZsDgDdySDjihk38Hy3GWi2J2BCaziQhaiaB+tt9AFu1kwvYUPsIXNPoB9BAUfwAfwEUzKv/v4odGrroyp9/rUaC6rZ5skv5F8qPsfYYP+yKUMymmAEEeW55oUR4o8jr05KNzJ07yvB7w0KKfLwcQUSjfmMU0PJfPHFoEVU+ohNrcKMEzMQ23FDnVSI2dqtYWI7KlLu6vE4UnyvKc3SJuL7lBbeEEl42ItpGLjzIT8PRJCmkRjVpVpsbJFVN0687okJNZiHAr5Z7MV0BnGIDc+THM1zlbieBc1Fq+tH5BH+OpnbWkj40hSqC8Lw2TvFuF0SUFJCk2IytXbjeqcRAt6NHpnrUkUU4KRzZs8RCK8N/Akn2W04LwxMU/V7XK0bDyN2RxfDyx7I4h5vjZby72V8UnOWumZL3qtYc+8DTE0siSBMXGhywx2dMYPnQHbxdFZ7deiNGxCCtD/QWnbwDoGhRYPDzUdUA3krjpnkvdAgDN4ddLkEQSov9qjd42HaDjI34gEqS9TUueAk+sc4qg5ws407KQYKs8G1jv4xBlqBVk6cb4dISZIwVi1Jzu4+HLk6lyfUxkXvwy+1Q+4WVdHIhwfybZ6CWVhxMEhShOgsP/HOW0MvZJeFwAAAABJRU5ErkJggg=="},8157:function(t,e,n){"use strict";var i=n("d2ee"),o=n.n(i);o.a},"81a0":function(t,e,n){var i=n("67ea"),o=n("21d4");t.exports=function(t,e){var n=t.exec;if("function"===typeof n){var r=n.call(t,e);if("object"!==typeof r)throw TypeError("RegExp exec method returned something other than an Object or null");return r}if("RegExp"!==i(t))throw TypeError("RegExp#exec called on incompatible receiver");return o.call(t,e)}},"82da":function(t,e,n){},"88a3":function(t,e,n){"use strict";var i=n("2625"),o=n.n(i);o.a},a8c9:function(t,e,n){var i=n("67ea");t.exports=Array.isArray||function(t){return"Array"==i(t)}},a9ea:function(t,e,n){"use strict";var i=n("2485"),o=n.n(i);o.a},b165:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXe3t7a2trc3Nzg4OCXP9lCAAACoklEQVQozwXBzU/TYBwA4N+QEr4CNbSFwcFuowSqMRvEAwShHWAYNsu7dS0dLnGUSWT4kZB4lGzE4VtcwgIDJqcOWLJxcv4BOoQZuCPxSNSD4WSWLJGL8XmAIiyo2RgJ4A1pxQQlOxRAszLTdnPu2oQGb05RC5slJld7ZAIfo4O44Bn1ud59F0BcjnYOa17Jhwc6EdiKettncsXjT1f8KUBZUW41pK0Jc1Az4dEV3rkkPBtDSZ83Blyt0kSf2PRjzIykoBwINisPbPPtljdVE9iAXRfUPkXLVIgYrCccp5g687NdZbcJ+xa5VE/HhTtT23IKsN5jj/pcUd0dTZNAqCVw72n4gOwnTOC0vvHfaauT8d9zAoRRfPpISZRVyUiw8ELzOG1b2DZpFzkSrHLhq52twDEdyZHwvp2j4uv/bjvOf23/AcEtTuJbY5Cp4YcAer1IGkUzOo2rn8LQOKjFJw3NTw24nprQXY5aF4wxcqcSdbFQ00H4xFl8Drx4X4CikvAM1tuR8bKIBCBoLnKN10KJG4zKAsc7c9WEB9gnCi6BhVjqoco6t20ILAJuVctvaEZK732cRHDRmGfuihOam0o2CHByUZ/epCcVlRs2wmCnMqsd6aSim3ibBJtm1LGyXW3Bb7tJCPlFtUG+SvPdeEUAB60lNdo+VQbLcwRNVtT68FsLcr1+NotgNihlpExS1V2SFgNbeC8bEhgm8sM17wSi6Us2gxVWJU/5GKBpandvfyYbU1yHCLpCgWGbbPXn40rehEsUXKIJr9DMKgICfjc4bl1YfvUhE/YIECGRqjCxSM9hrybAIkND5OeWfFZsXkxB+qDzb7pUQ3EfQ3Ml6EChEt3D+iS01VqC7EQ/Z/DuPQcz4yChoFQJce2Qr+NNAv0HxofmpXGqgHkAAAAASUVORK5CYII="},b1a1:function(t,e,n){var i=n("f30e"),o=n("57c4"),r=n("bf98"),a=o("species");t.exports=function(t){return r>=51||!i((function(){var e=[],n=e.constructor={};return n[a]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},b3f9:function(t,e,n){"use strict";var i=n("91fe"),o=n("21d4");i({target:"RegExp",proto:!0,forced:/./.exec!==o},{exec:o})},b671:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyBAMAAADsEZWCAAAAD1BMVEX48dr48Nf58tv379X17NJtIBxUAAACFUlEQVQ4y1XRUZakMAgF0Af2AiDWApDZgHZqAV1nZv9rGh7Rj7Y8McUFEg1wvcMESMNVD/neU8Xcaz7nYYkYlYO6Ti82PBI4BvIEg1aj3wKwRvIMgZsUy5LdhCawPFh1sZs4SrlyN9fQKpv8s5dgZ2eLyqqJiu+WkCmUEybXkm3INS01WAiv0PapJ0CZc0SJQUzcWnZYbOOY20iFD8Bk+/j2A3wNxH7GdShFYS5ff237kXh9I9zSkQmIAhOsOSVfJ6DIXTMDaPnzkRJ92S1BQQmXl5LdirgRLLDdcYqcGPwe3QN4xCBiGNbrqq9wpW1XCecChwaQdVOsRDpPCpeoolPdxeXp3WNB9PHVzWBHlygy4NJCCrFHREv6bDt0VGwJZASkpONmm1UseGeFKAQexgaAkrfYWl3AGxWOLL2AIMBNbCXpktmS3k3vHeYjGCPBa43wJTurO3ZFVpQSJdAZGLoHTyk1upkjxMEaIxum3iIARcCa5kSkFAW5fi1mUlL9eyOsaanFmOMruwvEdE3ZYzsRSzo5ewRLXyVPPEvknt8ij4DvCg2O7xOgBCUprEzV4z1WekSpUgI8DT2mrnSOXKRfQavwuKA1F+tFnMKdJSUpMA7wQAifWRkMgjUKKZE4lBl6MCM4B1pq1P4uIjDE6Pq6rL0FnW1nIFmta5vrSvq/Ch4tpqG/ZNyyWa5jZPktq81eYv8Bt5s4iFITOp4AAAAASUVORK5CYII="},c0aa:function(t,e,n){var i=n("2a2f"),o=n("f28d"),r=n("7287"),a=n("c223").f;t.exports=function(t){var e=i.Symbol||(i.Symbol={});o(e,t)||a(e,t,{value:r.f(t)})}},c27e:function(t,e,n){"use strict";var i=n("1240"),o=n.n(i);o.a},c84b:function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"detail-wrapper"},[n("div",{staticClass:"detail"},[n("div",{staticClass:"bar"},[n("el-breadcrumb",{attrs:{separator:"/"}},[n("el-breadcrumb-item",{staticClass:"index",attrs:{to:{path:"/"}}},[t._v("书架")]),n("el-breadcrumb-item",{staticClass:"sub"},[t._v("目录")])],1)],1),n("el-divider"),n("div",{staticClass:"catalog"},t._l(this.$store.state.catalog,(function(e){return n("div",{key:e.index,staticClass:"note",on:{click:function(n){return t.toChapter(e.url,e.title,e.index)}}},[t._v(" "+t._s(e.title)+" ")])})),0)],1)])},o=[],r=n("82ae"),a=n.n(r),s={data:function(){return{key:"value"}},mounted:function(){var t=this;a.a.get("/getChapterList?url="+encodeURIComponent(sessionStorage.getItem("bookUrl"))).then((function(e){t.$store.commit("setCatalog",e.data.data),sessionStorage.setItem("catalog",JSON.stringify(e.data.data))}),(function(t){throw t}))},methods:{toChapter:function(t,e,n){sessionStorage.setItem("chapterID",n),this.$router.push({path:"/chapter"})}}},c=s,l=(n("c27e"),n("623f")),u=Object(l["a"])(c,i,o,!1,null,"6d476c76",null);e["default"]=u.exports},cf68:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyBAMAAADsEZWCAAAAD1BMVEXm5ubo6Ojp6enr6+vt7e1FnZagAAACrklEQVQ4yx1SixUbMQgT3AKAFwDcAfzpBN1/qMrJS5w7bCQhC6IGSUGYQJd6Ox9ZPXi1AGJBavhUTT0JjYPGAab9WcDYIxsmlnxkayX8mhxCmKHA75az5cfRbWybEExiu08xDSgGym0mwuf3j4SvHeQxDJJzh2zp4iOlrD8iOb4SXyC1wiOLRTcnrje+nGamFeXVKWkmzbFIPChkmJ6Fg7mBpV8n+JGOVCd4jv1thThkjeQGNeafpeV3rsEWLfyWc8tC9jOv6FQ8rRzHOOVB+jCYEUAJpDvh8xHNFm/Tm5p5lw94Pp3NhtKEfQsGvnXhowdZE73hPwxKvjDd4i4PCdd0fe3W5fO8ktAsUAacLgstpUw60JCiPLg2XpkgiqPIYYXJd9ksGIT3q+LlevypzItvO+s0F1dBzVr2QDMUkYmuyGcrIS44mVJ7JVKwQXjYuBYp0Uetecbswzsikzu3gUR8bJC/C8Gd/NAzI/xdUGOYQQHDZ8X2d5XuzGRUiXAi9si5CRgoiToRZPtzLJkd0FUHRHZwJf0BHT1sE7gcnh0jmKKlSSF4/GBirGk5+K9NKlGDCfc9JtPhg78JdabH0YQRKNZnJ8tFnPfXHJb4xum1TTCeEmyEdbyEJLjznMLHuFD2Y9NEkSleIBs7SiCbblhgctVi9ch++kDYnn1C9DA5TvdPsToXM55wI6k+8eKT1blwPTqWb5CFJ+7dTBmab+KHy+xwNtItXhZNSpHD2fxnynrxG3ZBKRe8KBpXk11AnadlccEhr9w1nBBvBylNkv7A8eqpGBCDqhitmWQXBjjdS6idr/QjXWLDeMzMbVDoJuM8zN7WenMZWXgZ2vX3F01J3jHZbwk1LRP+DWEvDJtOUoh/AIaBUz5VpWyhuyx4QtgL/NmgC6kM/JvNe+R/C/5aL7BKIbYAAAAASUVORK5CYII="},d0e3:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXh7eHl8eXj7+Pn8+eTbH1KAAACPElEQVQozxWPQWrbQABF/0xn3JFKQRTZOIuUsbCCbOgdRoYEOauxkYPcTRyTlPQWIxEltrsRwQ6hK9nEQek6F+gNTE/Q3qLLusv34cN7SH3mFicdYW4gNIhJWXPBRVXzjcFD0IqeU4o4PRbAIVjyico0vJpIifqPfL80QN9DAQY5ucRHE/hpHxBldXe9GilaHKcKMlj6pho2zXgkNdBl0oJ8kiF1DSiJF1ZHBJkQr0Dbux/5I42Zp4cFahJDFGeW6/QjBwmFY/Q7vZ2SnoOdW2parv/Cnm81+m0xrEfiVXQ3W4nOXIqVYi3l6AAQBwMFkViVBANMto4enXHPNTkHBB0oVj4r5vHzCWayrgBvxtygDlDB2CNDjd80ZInY69aKVYZcfJ8DW+fWuc+syEODALx+ojqoafHsthTI+ZW27PGpIeo/cR6YKcbqIuIFhHmBrzAovzIOOJk1ucvcDzrMRYGVBH2yvcAOf0KiKwfRovBI3tm/kW1eemtfNWwIIXE2mJNhvoszfmMBfRCv0OPwd2321uDW3nx2q/BDxFVeoN1g7a6Im8yRnoawa8kbdXnU0cHeTMxKfZGlJgvLb3sKsxgglQnDdAfvj9LUnqWRDo0GiUmPwyU7TAsD7wHeIW3Nfy1qVGKoE9NgJCdYCAexNRob9yCn4DAQmXtQuUtera6bEmTTXhZy6h856xi4mnEl6BI9mfISkLbtJyZIMJIAUd5ZOBEu88KRAk71yxfItj/hpIB0Errv4gO1os4/UICf+o3kkqwAAAAASUVORK5CYII="},d2ee:function(t,e,n){},dcb6:function(t,e,n){"use strict";var i=n("f30e");function o(t,e){return RegExp(t,e)}e.UNSUPPORTED_Y=i((function(){var t=o("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),e.BROKEN_CARET=i((function(){var t=o("^r","gy");return t.lastIndex=2,null!=t.exec("str")}))},deaa:function(t,e,n){"use strict";n("b3f9");var i=n("3d8a"),o=n("f30e"),r=n("57c4"),a=n("21d4"),s=n("2ba5"),c=r("species"),l=!o((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")})),u=function(){return"$0"==="a".replace(/./,"$0")}(),A=r("replace"),f=function(){return!!/./[A]&&""===/./[A]("a","$0")}(),g=!o((function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));t.exports=function(t,e,n,A){var d=r(t),h=!o((function(){var e={};return e[d]=function(){return 7},7!=""[t](e)})),p=h&&!o((function(){var e=!1,n=/a/;return"split"===t&&(n={},n.constructor={},n.constructor[c]=function(){return n},n.flags="",n[d]=/./[d]),n.exec=function(){return e=!0,null},n[d](""),!e}));if(!h||!p||"replace"===t&&(!l||!u||f)||"split"===t&&!g){var m=/./[d],v=n(d,""[t],(function(t,e,n,i,o){return e.exec===a?h&&!o?{done:!0,value:m.call(e,n,i)}:{done:!0,value:t.call(n,e,i)}:{done:!1}}),{REPLACE_KEEPS_$0:u,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:f}),C=v[0],b=v[1];i(String.prototype,t,C),i(RegExp.prototype,d,2==e?function(t,e){return b.call(t,this,e)}:function(t){return b.call(t,this)})}A&&s(RegExp.prototype[d],"sham",!0)}},df5e:function(t,e){t.exports="data:image/png;base64,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"},e160:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEX6+fP8+/X+/ff///kbczPAAAACeElEQVQozxXHQUgUUQAG4P8936yzs6VvZNZmN9QxVxiF9OLBoOjtOC6rQq6ygXjI2fCQBdXBg4egtzFGdqkoI+zgBFbqkm3hQSxhFYLotOcubeKhOnVYoqQy+m4f5g5TvpX0xHLbLY9j8SMhJp+Jk4LfAUS2kVRIjILmnwGBTX42PhCVlDJQkIiy2nWAvaJ1h+oFIpJ0hMSYVbyyrgDWshcMpMyL1brPDQKWmduO+KTJ6XeXAMK9Yc3FpD7atyNwg6kt5XgFpLPhjUTFSYVn2abDiugGShwD8JTVRJVo/2ecuKtRb/qc4BK+9TboFfokog4T2Fn6Oqdnsjk90NMS76Rji6E0NmwkPBAZ4Xbkw8KoDAkAbEhkc78e9omxxgxg6qa5HvMv+UZbCV0qmHnSHKl5TxeA2XTCGWekR581mwC5crBH81PznASqB9va3TbkYAjJPLfg5uBfXaJgIgIBv9eessRIhxe7PA7kj6uUMeMaQ/OEQOYRaaHlqH2Gxwsl6E/pwVY5FH7uCypBZPKvDQyVziYBrAkMURe2MOOOxG/eQpp5PF+bFzUV5HtPj9GeiVSNZDELleifYTp9NAjsoiXg4cW+4ZORkdSMB/B74aAdjhsVakhgkugsbmqcDSLEoWp8zRjrux3tli6Q5uM3E+maT99Wy0RiP7tboiuRZle2c6CYeL2kcUc1KvPtQKucogMadKVTQOJYCeyCYlhQQ/Q7Etfd/vBygy9iqy+LyHeF46saCYvW6ingsbA9RBWtdi8GgUXW+oQx9/wP6bAAX1TWeV+CbShZDlQ9xT6SoSxZmKRAkmXb60kzEzkRF+Ccb94BGspGJoN/UzmyR4wjXHAAAAAASUVORK5CYII="},e1dd:function(t,e,n){var i=n("d68d"),o=n("67ea"),r=n("57c4"),a=r("match");t.exports=function(t){var e;return i(t)&&(void 0!==(e=t[a])?!!e:"RegExp"==o(t))}},e350:function(t,e,n){var i=n("c0aa");i("iterator")},ec0f:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyBAMAAADsEZWCAAAALVBMVEXx58b168ny6Mjz6sn06sf27Mvw5sTz6cbw5cLy58T37svv47/168v37s7t4Ltrv0//AAAEjUlEQVQ4yw2Ty2sTURxGf3dmOqmPxb0zmaStCnfmZpL6gpmbxIpUSMZGrSJkxsZiVZimNVaqMklrUnWTRq2KIDFWWx+IFrIRFxXEB4KIgqu6EBdu7M6FIPg32PW3+DhwDmBaYrK56KP4HGIsvg/uvOV0wK+qgBMlO9BujuH4DSJlOseqV5a/BEF97gt0ChyIPqBhXI9BtqtIB8vJB/LdCQ3OVjaLNX0g7+OmoI4e7nkemAqX6o8vg0yyQAyQS7IfgvFbI+6QyI3R4KELxw7kwM2ooQfyQigYnwY5MZbMlHI1DvnQVCoVcrt+R+bO7vPDif3ybNajwqAAe443dpfDsPt379VMWZzGRuqM79mQF+DUz9nt74bQ8J/O80MtVR51U02JKKmTCvTzLVf+vuxP/aHnPo9+2bW+zVsJ0Y630/CrfzX+b+UL+7O68Rczv+7lrMh5etfKXvhc2rk6KforxuoO2xB2tcxKfeXHt18rHOiHI/0RRjW/YGRDkHiwo3nzqL60o58C/bgRuaj7vk+QOwOhpnFNdjuWpKMCGP8Yapu9Ty5FTHKQLGSEFikjd9ADwP9ciaNNjc5qMH6w50AF/LKOsOYqsOG9GjKgc7ZXolqntm6fysJ6Ma6ll2CiqmOgE6O7x1wXExklbeqMYcwsmJmOoigt8SBg2WfilDSsAZJcBxDcrqtBXzFQJqZNHfscyIhoZlygAtyYAceah+elrFbI+46gEHDGiW878Kj7JpWyfhg6iyRMymV1MKBSeVpfgLHIohyTojI6sRyK1VpcqzVZeEBLOnA9unhGKUXPJDYtV9Dxuz4iA5xSkSWhCJdAiJR9PHlvfvbntbrR14FDqUNRAYDJmSnv3oKxuz5+7fiblgVJyYLTbgUM05P7LESkoXvyWNfb0aUU6FZizgQIa25VqKQZqFrk6v6BsqqIHlQmkQ9KrBhkC20/DrFsAFEEYLjM+lj2wYHXCwnNvZQR42XJ2iVK+UBXnI+OBE6oXpUUHiQ1yg0MhA03iwGbnOdQYc1CMiPIPQrCQJFH4L4BMFktAtKd9PN5gnU2Gra4KuK+V+mjtBRpAGIqDVe4wnSnajiFGO5d7smvhVQEMEYwqshrENIEaY7YeblJYtsb3QhAHWZCEKK67swwPMKw0If1Ta+6DgHmlgPzcUTSbi3rrv1Y64/BYEMPQ5SDHUOR022B4QRF6xLUPAaPX/V4IDI5N2BMwx4LqO1uO4j6uW7NvM7lATqGAxY/ZHVgoGZbu7SvkNR75x6qGSB23FdouENVwN7sCbewTdsXGrrnQ5ZZKOCOFtMTIzxlPu6eYmtL+nMFmoK7OeXajn86r9sqWbfmvHC4IagE5qfCPGZvLSq5F55hHIxJFa4/vRxHBlz0og4TojU1l/MOHJX17lybdF0mQhFO44JYUNt3UA473IXw/iPfDWtKG5oFSXIF5iU/VnyDSjxxeDk3jAXRyVyGTNB9FxH9qcFDNJpVbt2y9LytUXkK7Py6+z1RezHQqnoY8XcLimmd8dCnBhQCuaGpJCq3SoIlmYvLz8UkWhJw7T8k+Db/DYEKwgAAAABJRU5ErkJggg=="},ef8e:function(t,e,n){"use strict";var i=n("3303").charAt,o=n("d0e2"),r=n("5646"),a="String Iterator",s=o.set,c=o.getterFor(a);r(String,"String",(function(t){s(this,{type:a,string:String(t),index:0})}),(function(){var t,e=c(this),n=e.string,o=e.index;return o>=n.length?{value:void 0,done:!0}:(t=i(n,o),e.index+=t.length,{value:t,done:!1})}))},fb11:function(t,e,n){"use strict";var i=n("f30e");t.exports=function(t,e){var n=[][t];return!!n&&i((function(){n.call(null,e||function(){throw 1},1)}))}},fc88:function(t,e,n){"use strict";var i=n("91fe"),o=n("7a23"),r=n("d5dc"),a=n("f28d"),s=n("d68d"),c=n("c223").f,l=n("f69c"),u=r.Symbol;if(o&&"function"==typeof u&&(!("description"in u.prototype)||void 0!==u().description)){var A={},f=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),e=this instanceof f?new u(t):void 0===t?u():u(t);return""===t&&(A[e]=!0),e};l(f,u);var g=f.prototype=u.prototype;g.constructor=f;var d=g.toString,h="Symbol(test)"==String(u("test")),p=/^Symbol\((.*)\)[^)]+$/;c(g,"description",{configurable:!0,get:function(){var t=s(this)?this.valueOf():this,e=d.call(t);if(a(A,t))return"";var n=h?e.slice(7,-1):e.replace(p,"$1");return""===n?void 0:n}}),i({global:!0,forced:!0},{Symbol:f})}}}]); \ No newline at end of file diff --git a/app/src/main/assets/web/manifest.json b/app/src/main/assets/web/manifest.json new file mode 100644 index 000000000..0e2f5f966 --- /dev/null +++ b/app/src/main/assets/web/manifest.json @@ -0,0 +1 @@ +{"name":"yd-web-tool","short_name":"yd-web-tool","theme_color":"#4DBA87","icons":[{"src":"./img/icons/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"./img/icons/android-chrome-512x512.png","sizes":"512x512","type":"image/png"},{"src":"./img/icons/android-chrome-maskable-192x192.png","sizes":"192x192","type":"image/png","purpose":"maskable"},{"src":"./img/icons/android-chrome-maskable-512x512.png","sizes":"512x512","type":"image/png","purpose":"maskable"}],"start_url":".","display":"standalone","background_color":"#000000"} \ No newline at end of file From b4bb14538c720d85536bd03bef0f7d4996f5c57c Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 11 Mar 2020 13:27:25 +0800 Subject: [PATCH 027/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/ui/book/chapterlist/ChapterListFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/book/chapterlist/ChapterListFragment.kt b/app/src/main/java/io/legado/app/ui/book/chapterlist/ChapterListFragment.kt index 9e9b5c813..51c8b8096 100644 --- a/app/src/main/java/io/legado/app/ui/book/chapterlist/ChapterListFragment.kt +++ b/app/src/main/java/io/legado/app/ui/book/chapterlist/ChapterListFragment.kt @@ -103,7 +103,7 @@ class ChapterListFragment : VMBaseFragment(R.layout.fragme book?.bookUrl?.let { bookUrl -> if (chapter.bookUrl == bookUrl) { adapter.cacheFileNames.add(BookHelp.formatChapterName(chapter)) - adapter.notifyItemRangeChanged(0, adapter.getActualItemCount(), true) + adapter.notifyItemChanged(chapter.index, true) } } } From ff58996f112714fd433ab6ab602fb4c7ef42f58e Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 11 Mar 2020 13:47:36 +0800 Subject: [PATCH 028/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 5 +++++ .../main/java/io/legado/app/service/TTSReadAloudService.kt | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index f4655e19f..84647b349 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -2,6 +2,11 @@ * 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。 * 请关注[开源阅读软件]()支持我,同时关注合作公众号[小说拾遗](),阅读公众号小编。 +**2020/03/11** +* 修复调节上边距时下边距一起动的bug +* 适配沚水的web阅读 by 六月 +* 分组管理页面调整 by yangyxd + **2020/03/10** * 优化文字选择菜单弹出位置 * 添加屏幕方向控制 diff --git a/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt b/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt index e54900db7..61507bf7c 100644 --- a/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt @@ -175,7 +175,7 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener } override fun onError(s: String) { - pauseReadAloud(true) + //nothing } } From 2ae8cea905209332cdfaeec9c1deb1fc23af272f Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 11 Mar 2020 13:55:52 +0800 Subject: [PATCH 029/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/ui/config/BackupRestoreUi.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/config/BackupRestoreUi.kt b/app/src/main/java/io/legado/app/ui/config/BackupRestoreUi.kt index 913f78971..409638a4c 100644 --- a/app/src/main/java/io/legado/app/ui/config/BackupRestoreUi.kt +++ b/app/src/main/java/io/legado/app/ui/config/BackupRestoreUi.kt @@ -66,7 +66,7 @@ object BackupRestoreUi { selectFolderRequestCode -> AppConfig.backupPath = Backup.legadoPath else -> { Coroutine.async { - AppConfig.backupPath = Backup.legadoPath + AppConfig.backupPath = path Backup.backup(fragment.requireContext(), path) }.onSuccess { fragment.toast(R.string.backup_success) From 01ce97581f86658c76e9ef031a3a5be87e28b0d7 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 11 Mar 2020 19:03:09 +0800 Subject: [PATCH 030/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/book/local/ImportBookActivity.kt | 24 +++++++++---------- .../main/res/layout/activity_import_book.xml | 18 +++----------- 2 files changed, 15 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt index cf5f05486..d89bc9146 100644 --- a/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt @@ -17,7 +17,8 @@ import io.legado.app.App import io.legado.app.R import io.legado.app.base.VMBaseActivity import io.legado.app.help.AppConfig -import io.legado.app.lib.theme.accentColor +import io.legado.app.ui.filechooser.FileChooserDialog +import io.legado.app.ui.filechooser.FilePicker import io.legado.app.ui.widget.SelectActionBar import io.legado.app.utils.* import kotlinx.android.synthetic.main.activity_import_book.* @@ -31,6 +32,7 @@ import java.util.* class ImportBookActivity : VMBaseActivity(R.layout.activity_import_book), + FileChooserDialog.CallBack, PopupMenu.OnMenuItemClickListener, ImportBookAdapter.CallBack { private val requestCodeSelectFolder = 342 @@ -59,7 +61,6 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity recycler_view.layoutManager = LinearLayoutManager(this) adapter = ImportBookAdapter(this, this) recycler_view.adapter = adapter - rotate_loading.loadingColor = accentColor select_action_bar.setMainActionText(R.string.add_to_shelf) select_action_bar.inflateMenu(R.menu.import_book_sel) select_action_bar.setOnMenuItemClickListener(this) @@ -88,7 +89,7 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity override fun onCompatOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { - R.id.menu_select_folder -> selectImportFolder() + R.id.menu_select_folder -> FilePicker.selectFolder(this, requestCodeSelectFolder) } return super.onCompatOptionsItemSelected(item) } @@ -118,6 +119,8 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity rootDoc = DocumentFile.fromTreeUri(this, rootUri) subDocs.clear() } else { + rootDoc = null + subDocs.clear() path = it } } @@ -137,7 +140,6 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity tv_path.text = path adapter.selectedUris.clear() adapter.clearItems() - rotate_loading.show() launch(IO) { val docList = DocumentUtils.listFiles( this@ImportBookActivity, @@ -153,7 +155,6 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity } docList.sortWith(compareBy({ !it.isDir }, { it.name })) withContext(Main) { - rotate_loading.hide() adapter.setData(docList) } } @@ -186,13 +187,12 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity } } - private fun selectImportFolder() { - try { - val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE) - intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) - startActivityForResult(intent, requestCodeSelectFolder) - } catch (e: Exception) { - e.printStackTrace() + override fun onFilePicked(requestCode: Int, currentPath: String) { + when (requestCode) { + requestCodeSelectFolder -> { + AppConfig.importBookPath = currentPath + upRootDoc() + } } } diff --git a/app/src/main/res/layout/activity_import_book.xml b/app/src/main/res/layout/activity_import_book.xml index 092290eb2..e93a5b6c6 100644 --- a/app/src/main/res/layout/activity_import_book.xml +++ b/app/src/main/res/layout/activity_import_book.xml @@ -50,23 +50,11 @@ tools:ignore="UnusedAttribute" /> - - - - - - - + android:layout_weight="1" /> Date: Wed, 11 Mar 2020 19:35:00 +0800 Subject: [PATCH 031/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/model/localBook/LocalBook.kt | 66 +++++++++++-------- .../app/ui/book/local/ImportBookViewModel.kt | 6 +- 2 files changed, 40 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt b/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt index fc94613d8..c5e7ffab5 100644 --- a/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt +++ b/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt @@ -6,37 +6,43 @@ import io.legado.app.App import io.legado.app.data.entities.Book import io.legado.app.help.BookHelp import io.legado.app.utils.FileUtils +import io.legado.app.utils.isContentPath +import java.io.File object LocalBook { - fun importFile(doc: DocumentFile) { - doc.name?.let { fileName -> - val str = fileName.substringBeforeLast(".") - val authorIndex = str.indexOf("作者") - var name: String - var author: String - if (authorIndex == -1) { - name = str - author = "" - } else { - name = str.substring(0, authorIndex) - author = str.substring(authorIndex) - author = BookHelp.formatAuthor(author) - } - val smhStart = name.indexOf("《") - val smhEnd = name.indexOf("》") - if (smhStart != -1 && smhEnd != -1) { - name = (name.substring(smhStart + 1, smhEnd)) - } - val book = Book( - bookUrl = doc.uri.toString(), - name = name, - author = author, - originName = fileName - ) - App.db.bookDao().insert(book) + fun importFile(path: String) { + val fileName = if (path.isContentPath()) { + val doc = DocumentFile.fromSingleUri(App.INSTANCE, Uri.parse(path)) + doc?.name ?: "" + } else { + File(path).name + } + val str = fileName.substringBeforeLast(".") + val authorIndex = str.indexOf("作者") + var name: String + var author: String + if (authorIndex == -1) { + name = str + author = "" + } else { + name = str.substring(0, authorIndex) + author = str.substring(authorIndex) + author = BookHelp.formatAuthor(author) + } + val smhStart = name.indexOf("《") + val smhEnd = name.indexOf("》") + if (smhStart != -1 && smhEnd != -1) { + name = (name.substring(smhStart + 1, smhEnd)) } + val book = Book( + bookUrl = path, + name = name, + author = author, + originName = fileName + ) + App.db.bookDao().insert(book) } fun deleteBook(book: Book, deleteOriginal: Boolean) { @@ -47,8 +53,12 @@ object LocalBook { } if (deleteOriginal) { - val uri = Uri.parse(book.bookUrl) - DocumentFile.fromSingleUri(App.INSTANCE, uri)?.delete() + if (book.bookUrl.isContentPath()) { + val uri = Uri.parse(book.bookUrl) + DocumentFile.fromSingleUri(App.INSTANCE, uri)?.delete() + } else { + FileUtils.deleteFile(book.bookUrl) + } } } } diff --git a/app/src/main/java/io/legado/app/ui/book/local/ImportBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/local/ImportBookViewModel.kt index 847a692bd..d3be59c5c 100644 --- a/app/src/main/java/io/legado/app/ui/book/local/ImportBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/local/ImportBookViewModel.kt @@ -11,10 +11,8 @@ class ImportBookViewModel(application: Application) : BaseViewModel(application) fun addToBookshelf(uriList: HashSet, finally: () -> Unit) { execute { - uriList.forEach { uriStr -> - DocumentFile.fromSingleUri(context, Uri.parse(uriStr))?.let { doc -> - LocalBook.importFile(doc) - } + uriList.forEach { + LocalBook.importFile(it) } }.onFinally { finally.invoke() From 2d5bbf0e98de71910df24a046197d7803ace6ebe Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 11 Mar 2020 19:50:08 +0800 Subject: [PATCH 032/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/model/localBook/AnalyzeTxtFile.kt | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/localBook/AnalyzeTxtFile.kt b/app/src/main/java/io/legado/app/model/localBook/AnalyzeTxtFile.kt index 16426a036..9199ae05a 100644 --- a/app/src/main/java/io/legado/app/model/localBook/AnalyzeTxtFile.kt +++ b/app/src/main/java/io/legado/app/model/localBook/AnalyzeTxtFile.kt @@ -193,15 +193,18 @@ object AnalyzeTxtFile { } private fun getBookFile(context: Context, book: Book): File { - val uri = Uri.parse(book.bookUrl) - val bookFile = FileUtils.getFile(cacheFolder, book.originName, subDirs = *arrayOf()) - if (!bookFile.exists()) { - bookFile.createNewFile() - DocumentUtils.readBytes(context, uri)?.let { - bookFile.writeBytes(it) + if (book.bookUrl.isContentPath()) { + val uri = Uri.parse(book.bookUrl) + val bookFile = FileUtils.getFile(cacheFolder, book.originName, subDirs = *arrayOf()) + if (!bookFile.exists()) { + bookFile.createNewFile() + DocumentUtils.readBytes(context, uri)?.let { + bookFile.writeBytes(it) + } } + return bookFile } - return bookFile + return File(book.bookUrl) } private fun getTocRule(book: Book, bookStream: RandomAccessFile, charset: Charset): Pattern? { From d07396e5f07f98c6a756b82283cc780750950641 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 11 Mar 2020 20:17:42 +0800 Subject: [PATCH 033/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/book/local/ImportBookActivity.kt | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt index d89bc9146..0557fb046 100644 --- a/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt @@ -162,15 +162,16 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity val docList = arrayListOf() File(path).listFiles()?.forEach { if (it.isDirectory) { - docList.add( - DocItem( - it.name, - DocumentsContract.Document.MIME_TYPE_DIR, - it.length(), - Date(it.lastModified()), - Uri.parse(it.absolutePath) + if (!it.name.startsWith(".")) + docList.add( + DocItem( + it.name, + DocumentsContract.Document.MIME_TYPE_DIR, + it.length(), + Date(it.lastModified()), + Uri.parse(it.absolutePath) + ) ) - ) } else if (it.name.endsWith(".txt", true)) { docList.add( DocItem( @@ -183,6 +184,7 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity ) } } + docList.sortWith(compareBy({ !it.isDir }, { it.name })) adapter.setData(docList) } } From cae5f547ebe39262ac18ff3c85d3aaf197b70524 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 11 Mar 2020 20:18:35 +0800 Subject: [PATCH 034/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 84647b349..47914cd2d 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -6,6 +6,7 @@ * 修复调节上边距时下边距一起动的bug * 适配沚水的web阅读 by 六月 * 分组管理页面调整 by yangyxd +* 导入本地添加需要权限模式 **2020/03/10** * 优化文字选择菜单弹出位置 From deaceb9840c349972aa3646a0eacfb8764b52f3d Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 11 Mar 2020 20:20:52 +0800 Subject: [PATCH 035/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/book/local/ImportBookActivity.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt index 0557fb046..2958325fe 100644 --- a/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt @@ -159,6 +159,7 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity } } } ?: let { + tv_path.text = path val docList = arrayListOf() File(path).listFiles()?.forEach { if (it.isDirectory) { From 6956e17e4910aef56bdb137f4b8af34bfd221187 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 11 Mar 2020 22:13:10 +0800 Subject: [PATCH 036/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/book/info/BookInfoActivity.kt | 22 +++++++++++++------ .../io/legado/app/utils/ViewExtensions.kt | 8 +++++++ .../main/res/layout/dialog_linear_layout.xml | 8 +++++++ app/src/main/res/values/strings.xml | 2 +- 4 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 app/src/main/res/layout/dialog_linear_layout.xml diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt index 39cca5312..b0fb383bb 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt @@ -1,11 +1,15 @@ package io.legado.app.ui.book.info +import android.annotation.SuppressLint import android.app.Activity import android.content.Intent import android.graphics.drawable.Drawable import android.os.Bundle +import android.view.LayoutInflater import android.view.Menu import android.view.MenuItem +import android.widget.CheckBox +import android.widget.LinearLayout import androidx.lifecycle.Observer import com.bumptech.glide.RequestBuilder import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions @@ -229,23 +233,27 @@ class BookInfoActivity : } } + @SuppressLint("InflateParams") private fun deleteBook() { viewModel.bookData.value?.let { if (it.isLocalBook()) { alert( titleResource = R.string.sure, - messageResource = R.string.sure_delete_book_file + messageResource = R.string.sure_del ) { - positiveButton(R.string.yes) { - viewModel.delBook(true) { - finish() - } + val checkBox = CheckBox(this@BookInfoActivity).apply { + setText(R.string.delete_book_file) } - negativeButton(R.string.no) { - viewModel.delBook(false) { + val view = LayoutInflater.from(this@BookInfoActivity) + .inflate(R.layout.dialog_linear_layout, null) + (view as LinearLayout).addView(checkBox) + customView = view + positiveButton(R.string.yes) { + viewModel.delBook(checkBox.isChecked) { finish() } } + negativeButton(R.string.no) }.show() } else { viewModel.delBook { diff --git a/app/src/main/java/io/legado/app/utils/ViewExtensions.kt b/app/src/main/java/io/legado/app/utils/ViewExtensions.kt index f0334504e..e37539851 100644 --- a/app/src/main/java/io/legado/app/utils/ViewExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/ViewExtensions.kt @@ -6,6 +6,7 @@ import android.graphics.Canvas import android.os.Build import android.view.View import android.view.View.* +import android.view.ViewGroup import android.view.inputmethod.InputMethodManager import android.widget.RadioGroup import android.widget.SeekBar @@ -75,6 +76,13 @@ fun View.screenshot(): Bitmap? { }.getOrNull() } +fun View.setMargin(left: Int, top: Int, right: Int, bottom: Int) { + if (layoutParams is ViewGroup.MarginLayoutParams) { + (layoutParams as ViewGroup.MarginLayoutParams).setMargins(left, top, right, bottom) + requestLayout() + } +} + fun SeekBar.progressAdd(int: Int) { progress += int } diff --git a/app/src/main/res/layout/dialog_linear_layout.xml b/app/src/main/res/layout/dialog_linear_layout.xml new file mode 100644 index 000000000..2f73f4bc3 --- /dev/null +++ b/app/src/main/res/layout/dialog_linear_layout.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 84e6e6bb2..9432842a2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -630,7 +630,7 @@ 其它朗读设置 系统内置字体样式 - 是否删除源文件 + 删除源文件 预设一 预设二 预设三 From dbdc079141b0fa0c9eea4d7b5f5f5f7811f3690c Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 11 Mar 2020 22:16:20 +0800 Subject: [PATCH 037/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/ui/book/info/BookInfoActivity.kt | 9 +++++---- app/src/main/res/layout/dialog_linear_layout.xml | 8 -------- 2 files changed, 5 insertions(+), 12 deletions(-) delete mode 100644 app/src/main/res/layout/dialog_linear_layout.xml diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt index b0fb383bb..bd9b3700f 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt @@ -5,7 +5,6 @@ import android.app.Activity import android.content.Intent import android.graphics.drawable.Drawable import android.os.Bundle -import android.view.LayoutInflater import android.view.Menu import android.view.MenuItem import android.widget.CheckBox @@ -33,6 +32,7 @@ import io.legado.app.ui.book.info.edit.BookInfoEditActivity import io.legado.app.ui.book.read.ReadBookActivity import io.legado.app.ui.book.search.SearchActivity import io.legado.app.ui.book.source.edit.BookSourceEditActivity +import io.legado.app.utils.dp import io.legado.app.utils.getViewModel import io.legado.app.utils.gone import io.legado.app.utils.visible @@ -244,9 +244,10 @@ class BookInfoActivity : val checkBox = CheckBox(this@BookInfoActivity).apply { setText(R.string.delete_book_file) } - val view = LayoutInflater.from(this@BookInfoActivity) - .inflate(R.layout.dialog_linear_layout, null) - (view as LinearLayout).addView(checkBox) + val view = LinearLayout(this@BookInfoActivity).apply { + setPadding(16.dp, 0, 16.dp, 0) + addView(checkBox) + } customView = view positiveButton(R.string.yes) { viewModel.delBook(checkBox.isChecked) { diff --git a/app/src/main/res/layout/dialog_linear_layout.xml b/app/src/main/res/layout/dialog_linear_layout.xml deleted file mode 100644 index 2f73f4bc3..000000000 --- a/app/src/main/res/layout/dialog_linear_layout.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - \ No newline at end of file From 8ddcb738928f5889dc2fecc011f7fdd6d68e3a77 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 11 Mar 2020 22:25:50 +0800 Subject: [PATCH 038/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 - .../java/io/legado/app/ui/book/local/ImportBookActivity.kt | 7 ++++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 633b8ba1b..f2d9e96cf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -139,7 +139,6 @@ dependencies { def room_version = '2.2.4' implementation "androidx.room:room-runtime:$room_version" kapt "androidx.room:room-compiler:$room_version" - kapt "android.arch.persistence.room:compiler:$room_version" //paging implementation 'androidx.paging:paging-runtime:2.1.1' diff --git a/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt index 2958325fe..2296423b4 100644 --- a/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt @@ -40,7 +40,8 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity private val subDocs = arrayListOf() private lateinit var adapter: ImportBookAdapter private var localUriLiveData: LiveData>? = null - private var path = FileUtils.getSdCardPath() + private var sdPath = FileUtils.getSdCardPath() + private var path = sdPath override val viewModel: ImportBookViewModel get() = getViewModel(ImportBookViewModel::class.java) @@ -159,7 +160,7 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity } } } ?: let { - tv_path.text = path + tv_path.text = path.replace(sdPath, "SD") val docList = arrayListOf() File(path).listFiles()?.forEach { if (it.isDirectory) { @@ -228,7 +229,7 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity @Synchronized private fun goBackDir(): Boolean { if (rootDoc == null) { - if (path != FileUtils.getSdCardPath()) { + if (path != sdPath) { File(path).parent?.let { path = it upPath() From ad918ae67126be282a7c3b2ffb348965b40cdae7 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 12 Mar 2020 13:20:57 +0800 Subject: [PATCH 039/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 47914cd2d..afcca4a50 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -2,11 +2,13 @@ * 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。 * 请关注[开源阅读软件]()支持我,同时关注合作公众号[小说拾遗](),阅读公众号小编。 +**2020/03/12** +* 导入本地添加需要权限模式 + **2020/03/11** * 修复调节上边距时下边距一起动的bug * 适配沚水的web阅读 by 六月 * 分组管理页面调整 by yangyxd -* 导入本地添加需要权限模式 **2020/03/10** * 优化文字选择菜单弹出位置 From 94fd2d47ec28a12cdf85c779462d83a6fda5c203 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 12 Mar 2020 15:34:02 +0800 Subject: [PATCH 040/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/main/bookshelf/BookshelfAdapter.kt | 36 ------------ .../ui/main/bookshelf/BookshelfFragment.kt | 58 +++++++++++++------ .../main/res/layout/fragment_bookshelf.xml | 2 +- 3 files changed, 40 insertions(+), 56 deletions(-) delete mode 100644 app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfAdapter.kt diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfAdapter.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfAdapter.kt deleted file mode 100644 index 55115ad94..000000000 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfAdapter.kt +++ /dev/null @@ -1,36 +0,0 @@ -package io.legado.app.ui.main.bookshelf - -import androidx.fragment.app.Fragment -import androidx.viewpager2.adapter.FragmentStateAdapter -import io.legado.app.data.entities.BookGroup -import io.legado.app.ui.main.bookshelf.books.BooksFragment - - -class BookshelfAdapter(fragment: Fragment, val callBack: CallBack) : - FragmentStateAdapter(fragment) { - - private val ids = hashSetOf() - - override fun getItemCount(): Int { - return callBack.groupSize - } - - override fun getItemId(position: Int): Long { - return callBack.getGroup(position).groupId.toLong() - } - - override fun containsItem(itemId: Long): Boolean { - return ids.contains(itemId) - } - - override fun createFragment(position: Int): Fragment { - val groupId = callBack.getGroup(position).groupId - ids.add(groupId.toLong()) - return BooksFragment.newInstance(position, groupId) - } - - interface CallBack { - val groupSize: Int - fun getGroup(position: Int): BookGroup - } -} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt index 3608a79ed..55dca8d77 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt @@ -7,10 +7,12 @@ import android.view.Menu import android.view.MenuItem import android.view.View import androidx.appcompat.widget.SearchView +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentStatePagerAdapter import androidx.lifecycle.LiveData import androidx.lifecycle.Observer import com.google.android.material.tabs.TabLayout -import com.google.android.material.tabs.TabLayoutMediator import io.legado.app.App import io.legado.app.R import io.legado.app.base.VMBaseFragment @@ -29,6 +31,7 @@ import io.legado.app.ui.book.download.DownloadActivity import io.legado.app.ui.book.group.GroupManageDialog import io.legado.app.ui.book.local.ImportBookActivity import io.legado.app.ui.book.search.SearchActivity +import io.legado.app.ui.main.bookshelf.books.BooksFragment import io.legado.app.ui.widget.text.AutoCompleteTextView import io.legado.app.utils.* import kotlinx.android.synthetic.main.dialog_bookshelf_config.view.* @@ -42,15 +45,14 @@ import org.jetbrains.anko.startActivity class BookshelfFragment : VMBaseFragment(R.layout.fragment_bookshelf), TabLayout.OnTabSelectedListener, SearchView.OnQueryTextListener, - GroupManageDialog.CallBack, - BookshelfAdapter.CallBack { + GroupManageDialog.CallBack { override val viewModel: BookshelfViewModel get() = getViewModel(BookshelfViewModel::class.java) - private lateinit var bookshelfAdapter: BookshelfAdapter private var bookGroupLiveData: LiveData>? = null private val bookGroups = mutableListOf() + private val fragmentMap = hashMapOf() override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { setSupportToolbar(toolbar) @@ -79,26 +81,17 @@ class BookshelfFragment : VMBaseFragment(R.layout.fragment_b } } - override val groupSize: Int - get() = bookGroups.size - - override fun getGroup(position: Int): BookGroup { - return bookGroups[position] - } - private val selectedGroup: BookGroup get() = bookGroups[view_pager_bookshelf.currentItem] private fun initView() { + ATH.applyEdgeEffectColor(view_pager_bookshelf) tab_layout.isTabIndicatorFullWidth = false tab_layout.tabMode = TabLayout.MODE_SCROLLABLE tab_layout.setSelectedTabIndicatorColor(requireContext().accentColor) - ATH.applyEdgeEffectColor(view_pager_bookshelf) - bookshelfAdapter = BookshelfAdapter(this, this) - view_pager_bookshelf.adapter = bookshelfAdapter - TabLayoutMediator(tab_layout, view_pager_bookshelf) { tab, position -> - tab.text = bookGroups[position].groupName - }.attach() + tab_layout.setupWithViewPager(view_pager_bookshelf) + view_pager_bookshelf.offscreenPageLimit = 1 + view_pager_bookshelf.adapter = TabFragmentPageAdapter(childFragmentManager) } private fun initBookGroupData() { @@ -119,7 +112,7 @@ class BookshelfFragment : VMBaseFragment(R.layout.fragment_b bookGroups.add(AppConst.bookGroupAudio) } bookGroups.addAll(it) - bookshelfAdapter.notifyDataSetChanged() + view_pager_bookshelf.adapter?.notifyDataSetChanged() tab_layout.getTabAt(getPrefInt(PreferKey.saveTabPosition, 0))?.select() tab_layout.addOnTabSelectedListener(this) } @@ -149,7 +142,7 @@ class BookshelfFragment : VMBaseFragment(R.layout.fragment_b if (AppConfig.bookGroupAllShow) { bookGroups.add(0, AppConst.bookGroupAll) } - bookshelfAdapter.notifyDataSetChanged() + view_pager_bookshelf.adapter?.notifyDataSetChanged() } } @@ -212,4 +205,31 @@ class BookshelfFragment : VMBaseFragment(R.layout.fragment_b putPrefInt(PreferKey.saveTabPosition, it) } } + + private inner class TabFragmentPageAdapter internal constructor(fm: FragmentManager) : + FragmentStatePagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { + + override fun getPageTitle(position: Int): CharSequence? { + return bookGroups[position].groupName + } + + override fun getItemPosition(`object`: Any): Int { + return POSITION_NONE + } + + override fun getItem(position: Int): Fragment { + val group = bookGroups[position] + var fragment = fragmentMap[group.groupId] + if (fragment == null) { + fragment = BooksFragment.newInstance(position, group.groupId) + fragmentMap[group.groupId] = fragment + } + return fragment + } + + override fun getCount(): Int { + return bookGroups.size + } + + } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_bookshelf.xml b/app/src/main/res/layout/fragment_bookshelf.xml index 2eb390c9a..ea0a9ab40 100644 --- a/app/src/main/res/layout/fragment_bookshelf.xml +++ b/app/src/main/res/layout/fragment_bookshelf.xml @@ -14,7 +14,7 @@ app:contentLayout="@layout/view_tab_layout_min" app:layout_constraintTop_toTopOf="parent" /> - Date: Thu, 12 Mar 2020 17:03:37 +0800 Subject: [PATCH 041/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/book/arrange/ArrangeBookActivity.kt | 6 ++++++ .../app/ui/book/arrange/ArrangeBookAdapter.kt | 16 +++++----------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/arrange/ArrangeBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/arrange/ArrangeBookActivity.kt index f3b0d5ee5..15217f3bc 100644 --- a/app/src/main/java/io/legado/app/ui/book/arrange/ArrangeBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/arrange/ArrangeBookActivity.kt @@ -6,12 +6,14 @@ import android.view.MenuItem import androidx.appcompat.widget.PopupMenu import androidx.lifecycle.LiveData import androidx.lifecycle.Observer +import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import io.legado.app.App import io.legado.app.R import io.legado.app.base.VMBaseActivity import io.legado.app.data.entities.Book import io.legado.app.data.entities.BookGroup +import io.legado.app.help.ItemTouchCallback import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.noButton import io.legado.app.lib.dialogs.okButton @@ -64,6 +66,10 @@ class ArrangeBookActivity : VMBaseActivity(R.layout.activi recycler_view.addItemDecoration(VerticalDivider(this)) adapter = ArrangeBookAdapter(this, this) recycler_view.adapter = adapter + val itemTouchCallback = ItemTouchCallback() + itemTouchCallback.onItemTouchCallbackListener = adapter + itemTouchCallback.isCanDrag = true + ItemTouchHelper(itemTouchCallback).attachToRecyclerView(recycler_view) select_action_bar.setMainActionText(R.string.move_to_group) select_action_bar.inflateMenu(R.menu.arrange_book_sel) select_action_bar.setOnMenuItemClickListener(this) diff --git a/app/src/main/java/io/legado/app/ui/book/arrange/ArrangeBookAdapter.kt b/app/src/main/java/io/legado/app/ui/book/arrange/ArrangeBookAdapter.kt index fd51e3a3d..abc72b905 100644 --- a/app/src/main/java/io/legado/app/ui/book/arrange/ArrangeBookAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/arrange/ArrangeBookAdapter.kt @@ -7,14 +7,13 @@ import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.SimpleRecyclerAdapter import io.legado.app.data.entities.Book import io.legado.app.data.entities.BookGroup -import io.legado.app.utils.gone -import io.legado.app.utils.visible +import io.legado.app.help.ItemTouchCallback import kotlinx.android.synthetic.main.item_arrange_book.view.* import org.jetbrains.anko.sdk27.listeners.onClick - class ArrangeBookAdapter(context: Context, val callBack: CallBack) : - SimpleRecyclerAdapter(context, R.layout.item_arrange_book) { + SimpleRecyclerAdapter(context, R.layout.item_arrange_book), + ItemTouchCallback.OnItemTouchCallbackListener { val groupRequestCode = 12 private val selectedBooks: HashSet = hashSetOf() var actionItem: Book? = null @@ -56,12 +55,7 @@ class ArrangeBookAdapter(context: Context, val callBack: CallBack) : override fun convert(holder: ItemViewHolder, item: Book, payloads: MutableList) { with(holder.itemView) { tv_name.text = item.name -// tv_name.text = if (item.author.isEmpty()) { -// item.name -// } else { -// "${item.name}(${item.author})" -// } - tv_author.text = item.author // resources.getString(R.string.author_show, item.author) + tv_author.text = item.author tv_author.visibility = if (item.author.isEmpty()) View.GONE else View.VISIBLE tv_group_s.text = getGroupName(item.group) checkbox.isChecked = selectedBooks.contains(item) @@ -115,7 +109,7 @@ class ArrangeBookAdapter(context: Context, val callBack: CallBack) : groupNames.add(it.groupName) } } - return groupNames; + return groupNames } private fun getGroupName(groupId: Int): String { From 8e9609c886abebbfcacf7cf72103195f5d844c68 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 12 Mar 2020 19:07:17 +0800 Subject: [PATCH 042/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/ui/book/chapterlist/ChapterListFragment.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/chapterlist/ChapterListFragment.kt b/app/src/main/java/io/legado/app/ui/book/chapterlist/ChapterListFragment.kt index 51c8b8096..d717cb25f 100644 --- a/app/src/main/java/io/legado/app/ui/book/chapterlist/ChapterListFragment.kt +++ b/app/src/main/java/io/legado/app/ui/book/chapterlist/ChapterListFragment.kt @@ -36,6 +36,7 @@ class ChapterListFragment : VMBaseFragment(R.layout.fragme private var durChapterIndex = 0 private lateinit var mLayoutManager: UpLinearLayoutManager private var tocLiveData: LiveData>? = null + private var scrollToDurChapter = false override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { viewModel.chapterCallBack = this @@ -74,7 +75,6 @@ class ChapterListFragment : VMBaseFragment(R.layout.fragme book?.let { durChapterIndex = it.durChapterIndex tv_current_chapter_info.text = it.durChapterTitle - mLayoutManager.scrollToPositionWithOffset(durChapterIndex, 0) initCacheFileNames(it) } } @@ -85,7 +85,10 @@ class ChapterListFragment : VMBaseFragment(R.layout.fragme tocLiveData = App.db.bookChapterDao().observeByBook(viewModel.bookUrl) tocLiveData?.observe(viewLifecycleOwner, Observer { adapter.setItems(it) - mLayoutManager.scrollToPositionWithOffset(durChapterIndex, 0) + if (!scrollToDurChapter) { + mLayoutManager.scrollToPositionWithOffset(durChapterIndex, 0) + scrollToDurChapter = true + } }) } From c117f91121e58d5b39e865ad220978e68b3d78db Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 12 Mar 2020 20:45:29 +0800 Subject: [PATCH 043/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/ui/about/AboutFragment.kt | 2 +- .../io/legado/app/ui/main/MainActivity.kt | 2 +- .../legado/app/ui/widget/dialog/TextDialog.kt | 35 +++++++++++++++---- app/src/main/res/layout/dialog_text_view.xml | 26 +++++++++++--- 4 files changed, 53 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/about/AboutFragment.kt b/app/src/main/java/io/legado/app/ui/about/AboutFragment.kt index 365381fbd..6725b3eb4 100644 --- a/app/src/main/java/io/legado/app/ui/about/AboutFragment.kt +++ b/app/src/main/java/io/legado/app/ui/about/AboutFragment.kt @@ -73,7 +73,7 @@ class AboutFragment : PreferenceFragmentCompat() { private fun showUpdateLog() { val log = String(requireContext().assets.open("updateLog.md").readBytes()) - TextDialog.show(childFragmentManager, log, TextDialog.MD) + TextDialog.show(childFragmentManager, log, TextDialog.MD, 5000) } private fun showQqGroups() { diff --git a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt index 0d43b28c2..96424cc9b 100644 --- a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt +++ b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt @@ -78,7 +78,7 @@ class MainActivity : VMBaseActivity(R.layout.activity_main), putPrefInt(PreferKey.versionCode, App.INSTANCE.versionCode) if (!BuildConfig.DEBUG) { val log = String(assets.open("updateLog.md").readBytes()) - TextDialog.show(supportFragmentManager, log, TextDialog.MD) + TextDialog.show(supportFragmentManager, log, TextDialog.MD, 5000) } } } diff --git a/app/src/main/java/io/legado/app/ui/widget/dialog/TextDialog.kt b/app/src/main/java/io/legado/app/ui/widget/dialog/TextDialog.kt index 01a55f2da..648949abd 100644 --- a/app/src/main/java/io/legado/app/ui/widget/dialog/TextDialog.kt +++ b/app/src/main/java/io/legado/app/ui/widget/dialog/TextDialog.kt @@ -5,29 +5,40 @@ import android.util.DisplayMetrics import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.fragment.app.DialogFragment import androidx.fragment.app.FragmentManager import io.legado.app.R +import io.legado.app.base.BaseDialogFragment import kotlinx.android.synthetic.main.dialog_text_view.* +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch import ru.noties.markwon.Markwon -class TextDialog : DialogFragment() { +class TextDialog : BaseDialogFragment() { companion object { const val MD = 1 - fun show(fragmentManager: FragmentManager, content: String?, mode: Int = 0) { + fun show( + fragmentManager: FragmentManager, + content: String?, + mode: Int = 0, + time: Long = 0 + ) { TextDialog().apply { val bundle = Bundle() bundle.putString("content", content) bundle.putInt("mode", mode) + bundle.putLong("time", time) arguments = bundle + isCancelable = false }.show(fragmentManager, "textDialog") } } + private var time = 0L + override fun onStart() { super.onStart() val dm = DisplayMetrics() @@ -43,8 +54,7 @@ class TextDialog : DialogFragment() { return inflater.inflate(R.layout.dialog_text_view, container) } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) + override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { arguments?.let { val content = it.getString("content") ?: "" when (it.getInt("mode")) { @@ -57,8 +67,21 @@ class TextDialog : DialogFragment() { } else -> text_view.text = content } + time = it.getLong("time", 0L) + } + if (time > 0) { + badge_view.setBadgeCount((time / 1000).toInt()) + launch { + while (time > 0) { + delay(1000) + time -= 1000 + badge_view.setBadgeCount((time / 1000).toInt()) + if (time <= 0) { + dialog?.setCancelable(true) + } + } + } } - } } diff --git a/app/src/main/res/layout/dialog_text_view.xml b/app/src/main/res/layout/dialog_text_view.xml index 3a2b347c3..c1a1a70a6 100644 --- a/app/src/main/res/layout/dialog_text_view.xml +++ b/app/src/main/res/layout/dialog_text_view.xml @@ -1,7 +1,25 @@ - + xmlns:app="http://schemas.android.com/apk/res-auto"> + + + + + + + + From 631ba46986b9ea34633b6f07fb91a5f295ae552b Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 12 Mar 2020 21:27:11 +0800 Subject: [PATCH 044/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/ui/about/AboutFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/about/AboutFragment.kt b/app/src/main/java/io/legado/app/ui/about/AboutFragment.kt index 6725b3eb4..365381fbd 100644 --- a/app/src/main/java/io/legado/app/ui/about/AboutFragment.kt +++ b/app/src/main/java/io/legado/app/ui/about/AboutFragment.kt @@ -73,7 +73,7 @@ class AboutFragment : PreferenceFragmentCompat() { private fun showUpdateLog() { val log = String(requireContext().assets.open("updateLog.md").readBytes()) - TextDialog.show(childFragmentManager, log, TextDialog.MD, 5000) + TextDialog.show(childFragmentManager, log, TextDialog.MD) } private fun showQqGroups() { From cbffc25d11a2391d1189bb39ebee3157b9b790ae Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 13 Mar 2020 09:15:55 +0800 Subject: [PATCH 045/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/book/read/config/ReadAloudDialog.kt | 24 +- app/src/main/res/layout/dialog_read_aloud.xml | 452 +++++++++++------- app/src/main/res/layout/view_read_menu.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 4 files changed, 282 insertions(+), 198 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/ReadAloudDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/ReadAloudDialog.kt index 5540d0386..9c118c068 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/ReadAloudDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/ReadAloudDialog.kt @@ -21,7 +21,6 @@ import io.legado.app.utils.observeEvent import io.legado.app.utils.putPrefBoolean import kotlinx.android.synthetic.main.dialog_read_aloud.* import org.jetbrains.anko.sdk27.listeners.onClick -import org.jetbrains.anko.sdk27.listeners.onLongClick class ReadAloudDialog : BaseDialogFragment() { var callBack: CallBack? = null @@ -34,7 +33,7 @@ class ReadAloudDialog : BaseDialogFragment() { it.windowManager?.defaultDisplay?.getMetrics(dm) } dialog?.window?.let { - it.setBackgroundDrawableResource(R.color.transparent) + it.setBackgroundDrawableResource(R.color.background) it.decorView.setPadding(0, 0, 0, 0) val attr = it.attributes attr.dimAmount = 0.0f @@ -54,10 +53,10 @@ class ReadAloudDialog : BaseDialogFragment() { } override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { - ll_bottom_bg.setBackgroundColor(requireContext().bottomBackground) + root_view.setBackgroundColor(requireContext().bottomBackground) initOnChange() initData() - initOnClick() + initEvent() } private fun initData() { @@ -101,22 +100,19 @@ class ReadAloudDialog : BaseDialogFragment() { }) } - private fun initOnClick() { - iv_menu.onClick { callBack?.showMenuBar(); dismiss() } - iv_other_config.onClick { + private fun initEvent() { + ll_main_menu.onClick { callBack?.showMenuBar(); dismiss() } + ll_setting.onClick { ReadAloudConfigDialog().show(childFragmentManager, "readAloudConfigDialog") } + tv_pre.onClick { ReadBook.moveToPrevChapter(upContent = true, toLast = false) } + tv_next.onClick { ReadBook.moveToNextChapter(true) } iv_stop.onClick { ReadAloud.stop(requireContext()); dismiss() } iv_play_pause.onClick { callBack?.onClickReadAloud() } iv_play_prev.onClick { ReadAloud.prevParagraph(requireContext()) } - iv_play_prev.onLongClick { - ReadBook.moveToPrevChapter(upContent = true, toLast = false) - true - } iv_play_next.onClick { ReadAloud.nextParagraph(requireContext()) } - iv_play_next.onLongClick { ReadBook.moveToNextChapter(true); true } - fabToc.onClick { callBack?.openChapterList() } - fabBack.onClick { callBack?.finish() } + ll_catalog.onClick { callBack?.openChapterList() } + ll_to_backstage.onClick { callBack?.finish() } } private fun upPlayState() { diff --git a/app/src/main/res/layout/dialog_read_aloud.xml b/app/src/main/res/layout/dialog_read_aloud.xml index 627bd9414..278117426 100644 --- a/app/src/main/res/layout/dialog_read_aloud.xml +++ b/app/src/main/res/layout/dialog_read_aloud.xml @@ -1,245 +1,333 @@ + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="horizontal"> - + + - - + + + + + + - + + + + + + - + android:layout_weight="1" + android:max="60" /> - + - + - - + android:layout_gravity="center_vertical" + android:orientation="horizontal" + android:padding="8dp"> - - - - - - - - - - - - - + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_weight="1" + android:text="@string/read_aloud_speed" + android:textColor="@color/tv_text_default" + android:textSize="14sp" /> + + - + android:layout_marginStart="15dp" + android:layout_marginEnd="15dp" + android:max="45" /> + + + + + + + - - + android:contentDescription="@string/chapter_list" + android:src="@drawable/ic_toc" + app:tint="@color/tv_text_default" + tools:ignore="NestedWeights" /> - + android:layout_gravity="center_horizontal" + android:layout_marginTop="3dp" + android:text="@string/chapter_list" + android:textColor="@color/tv_text_default" + android:textSize="12sp" /> + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="2" /> + + + + + + + + + + android:id="@+id/ll_to_backstage" + android:layout_width="50dp" + android:layout_height="50dp" + android:background="?android:attr/selectableItemBackgroundBorderless" + android:clickable="true" + android:contentDescription="@string/interface_setting" + android:focusable="true" + android:orientation="vertical" + android:paddingBottom="7dp"> - + + - - - - - - - - + + + + + + + + android:layout_height="0dp" + android:layout_weight="1" + android:contentDescription="@string/aloud_config" + android:src="@drawable/ic_settings" + app:tint="@color/tv_text_default" + tools:ignore="NestedWeights" /> + diff --git a/app/src/main/res/layout/view_read_menu.xml b/app/src/main/res/layout/view_read_menu.xml index 135f5b5d9..3754c0914 100644 --- a/app/src/main/res/layout/view_read_menu.xml +++ b/app/src/main/res/layout/view_read_menu.xml @@ -210,7 +210,7 @@ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9432842a2..e42578401 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -628,7 +628,6 @@ 更多菜单 - 其它朗读设置 系统内置字体样式 删除源文件 预设一 @@ -646,5 +645,6 @@ 导航栏阴影 当前阴影大小(elevation): %s 默认 + 主菜单 From 547a146ed17459138f80ea34cedb8c8e7cfe02a3 Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 13 Mar 2020 09:17:45 +0800 Subject: [PATCH 046/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9d778fbb3..58bc77d9f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -91,7 +91,7 @@ + android:launchMode="singleTop" /> Date: Fri, 13 Mar 2020 11:32:16 +0800 Subject: [PATCH 047/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index afcca4a50..bab4ef9ab 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -2,6 +2,11 @@ * 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。 * 请关注[开源阅读软件]()支持我,同时关注合作公众号[小说拾遗](),阅读公众号小编。 +**2020/03/13** +* 更改书架控件,ViewPager2替换回2.0使用的ViewPager,解决下拉不流畅问题 +* 修复点击作者搜索后,打开的详情页还是原来的书籍的bug +* 修改朗读菜单 + **2020/03/12** * 导入本地添加需要权限模式 From 277fdcc2b3debc5046d77a8189ca055c8538b3b3 Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 13 Mar 2020 14:24:37 +0800 Subject: [PATCH 048/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/constant/EventBus.kt | 1 - .../main/java/io/legado/app/ui/book/read/ReadBookActivity.kt | 3 --- 2 files changed, 4 deletions(-) diff --git a/app/src/main/java/io/legado/app/constant/EventBus.kt b/app/src/main/java/io/legado/app/constant/EventBus.kt index 88031b4fc..e24ba8000 100644 --- a/app/src/main/java/io/legado/app/constant/EventBus.kt +++ b/app/src/main/java/io/legado/app/constant/EventBus.kt @@ -11,7 +11,6 @@ object EventBus { const val TIME_CHANGED = "timeChanged" const val UP_CONFIG = "upConfig" const val OPEN_CHAPTER = "openChapter" - const val REPLACE = "replace" const val AUDIO_SUB_TITLE = "audioSubTitle" const val AUDIO_STATE = "audioState" const val AUDIO_PROGRESS = "audioProgress" diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index 3de366ec3..138d676be 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -735,9 +735,6 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo } } } - observeEvent(EventBus.REPLACE) { - ReplaceEditDialog().show(supportFragmentManager, "replaceEditDialog") - } observeEvent(PreferKey.keepLight) { upScreenTimeOut() } From 3eaafbdac41e52ad666c9a0bf5dad7e0cfc611b0 Mon Sep 17 00:00:00 2001 From: yangyxd Date: Fri, 13 Mar 2020 16:12:28 +0800 Subject: [PATCH 049/350] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E4=B9=A6=E6=97=B6=E5=A2=9E=E5=8A=A0=E6=96=87=E4=BB=B6=E8=AF=BB?= =?UTF-8?q?=E5=86=99=E6=9D=83=E9=99=90=E6=A3=80=E6=9F=A5,=E6=B2=A1?= =?UTF-8?q?=E6=9D=83=E9=99=90=E6=97=B6=E6=98=BE=E7=A4=BA=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 1 + .../app/help/permission/PermissionsCompat.kt | 14 ++++++ .../io/legado/app/help/permission/Request.kt | 2 +- .../app/ui/book/local/ImportBookActivity.kt | 23 +++++++++ .../main/res/layout/activity_import_book.xml | 50 +++++++++++++++++-- app/src/main/res/values/strings.xml | 3 +- 6 files changed, 87 insertions(+), 6 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 58bc77d9f..a1b9f1846 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,6 +23,7 @@ android:label="@string/app_name" android:networkSecurityConfig="@xml/network_security_config" android:supportsRtl="true" + android:requestLegacyExternalStorage="true" android:theme="@style/AppTheme.Light" tools:ignore="AllowBackup,GoogleAppIndexingWarning,UnusedAttribute"> diff --git a/app/src/main/java/io/legado/app/help/permission/PermissionsCompat.kt b/app/src/main/java/io/legado/app/help/permission/PermissionsCompat.kt index a5ccdb266..4bbed5991 100644 --- a/app/src/main/java/io/legado/app/help/permission/PermissionsCompat.kt +++ b/app/src/main/java/io/legado/app/help/permission/PermissionsCompat.kt @@ -1,8 +1,11 @@ package io.legado.app.help.permission +import android.os.Build import androidx.annotation.StringRes import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment +import org.jetbrains.anko.startActivity +import java.util.ArrayList class PermissionsCompat private constructor() { @@ -12,6 +15,17 @@ class PermissionsCompat private constructor() { RequestManager.pushRequest(request) } + companion object { + // 检查权限, 如果已经拥有返回 true + fun check(activity: AppCompatActivity, vararg permissions: String): Boolean { + var request: Request = Request(activity) + var pers = ArrayList() + pers.addAll(listOf(*permissions)) + var data = request.getDeniedPermissions(pers.toTypedArray()) + return data == null; + } + } + class Builder { private val request: Request diff --git a/app/src/main/java/io/legado/app/help/permission/Request.kt b/app/src/main/java/io/legado/app/help/permission/Request.kt index 600cbe93c..f7ed0293a 100644 --- a/app/src/main/java/io/legado/app/help/permission/Request.kt +++ b/app/src/main/java/io/legado/app/help/permission/Request.kt @@ -102,7 +102,7 @@ internal class Request : OnRequestPermissionsResultCallback { deniedCallback = null } - private fun getDeniedPermissions(permissions: Array?): Array? { + fun getDeniedPermissions(permissions: Array?): Array? { if (permissions != null) { val deniedPermissionList = ArrayList() for (permission in permissions) { diff --git a/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt index 2296423b4..ecd6f6e8f 100644 --- a/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt @@ -8,6 +8,7 @@ import android.os.Bundle import android.provider.DocumentsContract import android.view.Menu import android.view.MenuItem +import android.view.View import androidx.appcompat.widget.PopupMenu import androidx.documentfile.provider.DocumentFile import androidx.lifecycle.LiveData @@ -16,7 +17,11 @@ import androidx.recyclerview.widget.LinearLayoutManager import io.legado.app.App import io.legado.app.R import io.legado.app.base.VMBaseActivity +import io.legado.app.constant.EventBus import io.legado.app.help.AppConfig +import io.legado.app.help.ReadBookConfig +import io.legado.app.help.permission.Permissions +import io.legado.app.help.permission.PermissionsCompat import io.legado.app.ui.filechooser.FileChooserDialog import io.legado.app.ui.filechooser.FilePicker import io.legado.app.ui.widget.SelectActionBar @@ -80,6 +85,24 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity } } }) + + // 没有权限就显示一个授权提示和按钮 + if (PermissionsCompat.check(this, *Permissions.Group.STORAGE)) { + hint_per.visibility = View.GONE + } else { + hint_per.visibility = View.VISIBLE + tv_request_per.onClick { + PermissionsCompat.Builder(this) + .addPermissions(*Permissions.Group.STORAGE) + .rationale(R.string.tip_perm_request_storage) + .onGranted { + hint_per.visibility = View.GONE + initData() + upRootDoc() + } + .request() + } + } } private fun initEvent() { diff --git a/app/src/main/res/layout/activity_import_book.xml b/app/src/main/res/layout/activity_import_book.xml index e93a5b6c6..38d0b4f55 100644 --- a/app/src/main/res/layout/activity_import_book.xml +++ b/app/src/main/res/layout/activity_import_book.xml @@ -1,20 +1,23 @@ - + android:layout_height="wrap_content" + app:layout_constraintBottom_toBottomOf="parent" /> + + + + + + + + + + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e42578401..63efa5aee 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -646,5 +646,6 @@ 当前阴影大小(elevation): %s 默认 主菜单 - + 点击授予权限 + 阅读需要访问存储卡权限,请点击下方的"授予权限"按钮,或前往“设置”—“应用权限”—打开所需权限。如果授予权限后仍然不正常,请点击右上角的“选择文件夹”,使用系统文件夹选择器。 From b1f019ffa7e9a2b2c62ebf946f7ea8aa8b700232 Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 13 Mar 2020 17:09:28 +0800 Subject: [PATCH 050/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/book/local/ImportBookActivity.kt | 37 +++++++++---------- .../legado/app/ui/filechooser/FilePicker.kt | 12 +++--- 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt index ecd6f6e8f..3ce47ee99 100644 --- a/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt @@ -17,9 +17,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import io.legado.app.App import io.legado.app.R import io.legado.app.base.VMBaseActivity -import io.legado.app.constant.EventBus import io.legado.app.help.AppConfig -import io.legado.app.help.ReadBookConfig import io.legado.app.help.permission.Permissions import io.legado.app.help.permission.PermissionsCompat import io.legado.app.ui.filechooser.FileChooserDialog @@ -86,23 +84,6 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity } }) - // 没有权限就显示一个授权提示和按钮 - if (PermissionsCompat.check(this, *Permissions.Group.STORAGE)) { - hint_per.visibility = View.GONE - } else { - hint_per.visibility = View.VISIBLE - tv_request_per.onClick { - PermissionsCompat.Builder(this) - .addPermissions(*Permissions.Group.STORAGE) - .rationale(R.string.tip_perm_request_storage) - .onGranted { - hint_per.visibility = View.GONE - initData() - upRootDoc() - } - .request() - } - } } private fun initEvent() { @@ -147,6 +128,24 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity subDocs.clear() path = it } + } ?: let { + // 没有权限就显示一个授权提示和按钮 + if (PermissionsCompat.check(this, *Permissions.Group.STORAGE)) { + hint_per.visibility = View.GONE + } else { + hint_per.visibility = View.VISIBLE + tv_request_per.onClick { + PermissionsCompat.Builder(this) + .addPermissions(*Permissions.Group.STORAGE) + .rationale(R.string.tip_perm_request_storage) + .onGranted { + hint_per.visibility = View.GONE + initData() + upRootDoc() + } + .request() + } + } } upPath() } diff --git a/app/src/main/java/io/legado/app/ui/filechooser/FilePicker.kt b/app/src/main/java/io/legado/app/ui/filechooser/FilePicker.kt index 8f5549709..717ad8f11 100644 --- a/app/src/main/java/io/legado/app/ui/filechooser/FilePicker.kt +++ b/app/src/main/java/io/legado/app/ui/filechooser/FilePicker.kt @@ -31,7 +31,7 @@ object FilePicker { 0 -> default?.invoke() 1 -> { try { - val intent = getSelectDirIntent() + val intent = createSelectDirIntent() activity.startActivityForResult(intent, requestCode) } catch (e: java.lang.Exception) { e.printStackTrace() @@ -68,7 +68,7 @@ object FilePicker { 0 -> default?.invoke() 1 -> { try { - val intent = getSelectDirIntent() + val intent = createSelectDirIntent() fragment.startActivityForResult(intent, requestCode) } catch (e: java.lang.Exception) { e.printStackTrace() @@ -106,7 +106,7 @@ object FilePicker { 0 -> default?.invoke() 1 -> { try { - val intent = getSelectFileIntent() + val intent = createSelectFileIntent() intent.type = type//设置类型 activity.startActivityForResult(intent, requestCode) } catch (e: java.lang.Exception) { @@ -147,7 +147,7 @@ object FilePicker { 0 -> default?.invoke() 1 -> { try { - val intent = getSelectFileIntent() + val intent = createSelectFileIntent() intent.type = type//设置类型 fragment.startActivityForResult(intent, requestCode) } catch (e: java.lang.Exception) { @@ -168,14 +168,14 @@ object FilePicker { }.show() } - private fun getSelectFileIntent(): Intent { + private fun createSelectFileIntent(): Intent { val intent = Intent(Intent.ACTION_GET_CONTENT) intent.addCategory(Intent.CATEGORY_OPENABLE) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) return intent } - private fun getSelectDirIntent(): Intent { + private fun createSelectDirIntent(): Intent { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) return intent From ffe39421b73c37c2e1654eeab48e83596729f981 Mon Sep 17 00:00:00 2001 From: yangyxd Date: Fri, 13 Mar 2020 18:22:58 +0800 Subject: [PATCH 051/350] =?UTF-8?q?=E6=9B=B4=E6=8D=A2=E4=B8=BB=E9=A1=B5?= =?UTF-8?q?=E5=BA=95=E9=83=A8bar=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/main/MainActivity.kt | 10 ++++++++++ app/src/main/res/drawable/ic_bottom_books.xml | 5 +++++ app/src/main/res/drawable/ic_bottom_books_e.xml | 7 +++++++ app/src/main/res/drawable/ic_bottom_books_s.xml | 6 ++++++ .../main/res/drawable/ic_bottom_explore_black.xml | 5 +++++ .../main/res/drawable/ic_bottom_explore_black_e.xml | 5 +++++ .../main/res/drawable/ic_bottom_explore_black_s.xml | 9 +++++++++ app/src/main/res/drawable/ic_bottom_person.xml | 5 +++++ app/src/main/res/drawable/ic_bottom_person_e.xml | 5 +++++ app/src/main/res/drawable/ic_bottom_person_s.xml | 9 +++++++++ app/src/main/res/drawable/ic_bottom_rss_feed.xml | 5 +++++ app/src/main/res/drawable/ic_bottom_rss_feed_e.xml | 9 +++++++++ app/src/main/res/drawable/ic_bottom_rss_feed_s.xml | 4 ++++ app/src/main/res/drawable/ic_explore_black_24dp.xml | 9 --------- .../res/drawable/ic_library_books_black_24dp.xml | 9 --------- app/src/main/res/drawable/ic_person_black_24dp.xml | 9 --------- app/src/main/res/drawable/ic_rss_feed.xml | 12 ------------ app/src/main/res/menu/main_bnv.xml | 12 ++++++------ app/src/main/res/values/dimens.xml | 2 ++ 19 files changed, 92 insertions(+), 45 deletions(-) create mode 100644 app/src/main/res/drawable/ic_bottom_books.xml create mode 100644 app/src/main/res/drawable/ic_bottom_books_e.xml create mode 100644 app/src/main/res/drawable/ic_bottom_books_s.xml create mode 100644 app/src/main/res/drawable/ic_bottom_explore_black.xml create mode 100644 app/src/main/res/drawable/ic_bottom_explore_black_e.xml create mode 100644 app/src/main/res/drawable/ic_bottom_explore_black_s.xml create mode 100644 app/src/main/res/drawable/ic_bottom_person.xml create mode 100644 app/src/main/res/drawable/ic_bottom_person_e.xml create mode 100644 app/src/main/res/drawable/ic_bottom_person_s.xml create mode 100644 app/src/main/res/drawable/ic_bottom_rss_feed.xml create mode 100644 app/src/main/res/drawable/ic_bottom_rss_feed_e.xml create mode 100644 app/src/main/res/drawable/ic_bottom_rss_feed_s.xml delete mode 100644 app/src/main/res/drawable/ic_explore_black_24dp.xml delete mode 100644 app/src/main/res/drawable/ic_library_books_black_24dp.xml delete mode 100644 app/src/main/res/drawable/ic_person_black_24dp.xml delete mode 100644 app/src/main/res/drawable/ic_rss_feed.xml diff --git a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt index 96424cc9b..462fb317d 100644 --- a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt +++ b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt @@ -3,6 +3,8 @@ package io.legado.app.ui.main import android.os.Bundle import android.view.KeyEvent import android.view.MenuItem +import androidx.core.view.forEach +import androidx.core.view.forEachIndexed import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentStatePagerAdapter @@ -94,6 +96,14 @@ class MainActivity : VMBaseActivity(R.layout.activity_main), bottom_navigation_view.menu.getItem(3).isChecked = true } } + + +// bottom_navigation_view.menu.forEachIndexed { index, item -> +// if (item.isChecked) +// item.icon = getDrawable(res[1][index]) +// else +// item.icon = getDrawable(res[0][index]) +// } } override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean { diff --git a/app/src/main/res/drawable/ic_bottom_books.xml b/app/src/main/res/drawable/ic_bottom_books.xml new file mode 100644 index 000000000..ffda5c5d6 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottom_books.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_bottom_books_e.xml b/app/src/main/res/drawable/ic_bottom_books_e.xml new file mode 100644 index 000000000..ff159823a --- /dev/null +++ b/app/src/main/res/drawable/ic_bottom_books_e.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_bottom_books_s.xml b/app/src/main/res/drawable/ic_bottom_books_s.xml new file mode 100644 index 000000000..eb36d0fa2 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottom_books_s.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_bottom_explore_black.xml b/app/src/main/res/drawable/ic_bottom_explore_black.xml new file mode 100644 index 000000000..776e0cc40 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottom_explore_black.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_bottom_explore_black_e.xml b/app/src/main/res/drawable/ic_bottom_explore_black_e.xml new file mode 100644 index 000000000..fdbdedd39 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottom_explore_black_e.xml @@ -0,0 +1,5 @@ + + + + diff --git a/app/src/main/res/drawable/ic_bottom_explore_black_s.xml b/app/src/main/res/drawable/ic_bottom_explore_black_s.xml new file mode 100644 index 000000000..1b7a47026 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottom_explore_black_s.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_bottom_person.xml b/app/src/main/res/drawable/ic_bottom_person.xml new file mode 100644 index 000000000..9ecbba79f --- /dev/null +++ b/app/src/main/res/drawable/ic_bottom_person.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_bottom_person_e.xml b/app/src/main/res/drawable/ic_bottom_person_e.xml new file mode 100644 index 000000000..f2ee25675 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottom_person_e.xml @@ -0,0 +1,5 @@ + + + + diff --git a/app/src/main/res/drawable/ic_bottom_person_s.xml b/app/src/main/res/drawable/ic_bottom_person_s.xml new file mode 100644 index 000000000..f0d729116 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottom_person_s.xml @@ -0,0 +1,9 @@ + + + + diff --git a/app/src/main/res/drawable/ic_bottom_rss_feed.xml b/app/src/main/res/drawable/ic_bottom_rss_feed.xml new file mode 100644 index 000000000..26d0b4322 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottom_rss_feed.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml b/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml new file mode 100644 index 000000000..b69c2336d --- /dev/null +++ b/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml @@ -0,0 +1,9 @@ + + + + diff --git a/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml b/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml new file mode 100644 index 000000000..b14351098 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml @@ -0,0 +1,4 @@ + + + diff --git a/app/src/main/res/drawable/ic_explore_black_24dp.xml b/app/src/main/res/drawable/ic_explore_black_24dp.xml deleted file mode 100644 index d841826b0..000000000 --- a/app/src/main/res/drawable/ic_explore_black_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_library_books_black_24dp.xml b/app/src/main/res/drawable/ic_library_books_black_24dp.xml deleted file mode 100644 index 06deda209..000000000 --- a/app/src/main/res/drawable/ic_library_books_black_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_person_black_24dp.xml b/app/src/main/res/drawable/ic_person_black_24dp.xml deleted file mode 100644 index 9f1acc792..000000000 --- a/app/src/main/res/drawable/ic_person_black_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_rss_feed.xml b/app/src/main/res/drawable/ic_rss_feed.xml deleted file mode 100644 index ed6228cc2..000000000 --- a/app/src/main/res/drawable/ic_rss_feed.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - diff --git a/app/src/main/res/menu/main_bnv.xml b/app/src/main/res/menu/main_bnv.xml index fb34daff3..a696febe9 100644 --- a/app/src/main/res/menu/main_bnv.xml +++ b/app/src/main/res/menu/main_bnv.xml @@ -5,19 +5,19 @@ + android:id="@+id/menu_rss" + android:icon="@drawable/ic_bottom_rss_feed" + android:title="@string/rss" /> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 9f8946337..6b7b8e2b1 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -35,4 +35,6 @@ 8dp 8dp 8dp + + 8dp \ No newline at end of file From 8cd18581a8136b394402995de2847ea0f46545ec Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 13 Mar 2020 18:24:48 +0800 Subject: [PATCH 052/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/service/TTSReadAloudService.kt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt b/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt index 61507bf7c..c7fc02b08 100644 --- a/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt @@ -42,20 +42,21 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener clearTTS() } + @Synchronized override fun onInit(status: Int) { - launch { - if (status == TextToSpeech.SUCCESS) { - textToSpeech?.language = Locale.CHINA - textToSpeech?.setOnUtteranceProgressListener(TTSUtteranceListener()) - ttsIsSuccess = true - play() - } else { + if (status == TextToSpeech.SUCCESS) { + textToSpeech?.language = Locale.CHINA + textToSpeech?.setOnUtteranceProgressListener(TTSUtteranceListener()) + ttsIsSuccess = true + play() + } else { + launch { toast(R.string.tts_init_failed) } } } - @Suppress("DEPRECATION") + @Synchronized override fun play() { if (contentList.isEmpty() || !ttsIsSuccess) { return From 8d5a1877aa2d08d206a631a801f73bf78e04c1ff Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 13 Mar 2020 18:34:57 +0800 Subject: [PATCH 053/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/service/TTSReadAloudService.kt | 6 +-- .../app/ui/rss/read/ReadRssViewModel.kt | 38 +++++++++++++------ 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt b/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt index c7fc02b08..1f63dac89 100644 --- a/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/TTSReadAloudService.kt @@ -29,7 +29,7 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener } } - private var ttsIsSuccess: Boolean = false + private var ttsInitFinish = false override fun onCreate() { super.onCreate() @@ -47,7 +47,7 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener if (status == TextToSpeech.SUCCESS) { textToSpeech?.language = Locale.CHINA textToSpeech?.setOnUtteranceProgressListener(TTSUtteranceListener()) - ttsIsSuccess = true + ttsInitFinish = true play() } else { launch { @@ -58,7 +58,7 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener @Synchronized override fun play() { - if (contentList.isEmpty() || !ttsIsSuccess) { + if (contentList.isEmpty() || !ttsInitFinish) { return } if (requestFocus()) { diff --git a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt index 6d90fd181..d2aaad80f 100644 --- a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt @@ -35,7 +35,9 @@ class ReadRssViewModel(application: Application) : BaseViewModel(application), val contentLiveData = MutableLiveData() val urlLiveData = MutableLiveData() var star = false - var textToSpeech: TextToSpeech = TextToSpeech(context, this) + var textToSpeech: TextToSpeech? = null + private var ttsInitFinish = false + private var ttsText = "" fun initData(intent: Intent) { execute { @@ -143,28 +145,42 @@ class ReadRssViewModel(application: Application) : BaseViewModel(application), } } + @Synchronized override fun onInit(status: Int) { - launch { - if (status == TextToSpeech.SUCCESS) { - textToSpeech.language = Locale.CHINA - textToSpeech.setOnUtteranceProgressListener(TTSUtteranceListener()) - } else { + if (status == TextToSpeech.SUCCESS) { + textToSpeech?.language = Locale.CHINA + textToSpeech?.setOnUtteranceProgressListener(TTSUtteranceListener()) + ttsInitFinish = true + play() + } else { + launch { toast(R.string.tts_init_failed) } } } + @Synchronized + private fun play() { + if (!ttsInitFinish) return + textToSpeech?.stop() + ttsText.split("\n", " ", "  ").forEach { + textToSpeech?.speak(it, TextToSpeech.QUEUE_ADD, null, "rss") + } + } + fun readAloud(text: String) { - textToSpeech.stop() - text.split("\n", " ", "  ").forEach { - textToSpeech.speak(it, TextToSpeech.QUEUE_ADD, null, "rss") + ttsText = text + textToSpeech?.let { + play() + } ?: let { + textToSpeech = TextToSpeech(context, this) } } override fun onCleared() { super.onCleared() - textToSpeech.stop() - textToSpeech.shutdown() + textToSpeech?.stop() + textToSpeech?.shutdown() } /** From d9f7e5333891694c319c85a1827d96a084f0e2eb Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 13 Mar 2020 18:36:32 +0800 Subject: [PATCH 054/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt index 79ea599d1..c37fb3761 100644 --- a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt @@ -246,8 +246,8 @@ class ReadRssActivity : VMBaseActivity(R.layout.activity_rss_r @SuppressLint("SetJavaScriptEnabled") private fun readAloud() { - if (viewModel.textToSpeech.isSpeaking) { - viewModel.textToSpeech.stop() + if (viewModel.textToSpeech?.isSpeaking == true) { + viewModel.textToSpeech?.stop() upTtsMenu(false) } else { web_view.settings.javaScriptEnabled = true From 41789f5bc5d697996a0acd7f443e81fd92980186 Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 13 Mar 2020 19:49:55 +0800 Subject: [PATCH 055/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/ui/rss/read/ReadRssActivity.kt | 8 +-- .../app/ui/rss/read/ReadRssViewModel.kt | 9 +-- .../io/legado/app/utils/JsoupExtensions.kt | 69 +++++++++++++++++++ 3 files changed, 76 insertions(+), 10 deletions(-) create mode 100644 app/src/main/java/io/legado/app/utils/JsoupExtensions.kt diff --git a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt index c37fb3761..9aa30235b 100644 --- a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt @@ -22,7 +22,6 @@ import org.apache.commons.text.StringEscapeUtils import org.jetbrains.anko.share import org.jetbrains.anko.toast import org.jsoup.Jsoup -import org.jsoup.safety.Whitelist class ReadRssActivity : VMBaseActivity(R.layout.activity_rss_read), @@ -253,11 +252,8 @@ class ReadRssActivity : VMBaseActivity(R.layout.activity_rss_r web_view.settings.javaScriptEnabled = true web_view.evaluateJavascript("document.documentElement.outerHTML") { val html = StringEscapeUtils.unescapeJson(it) - val text = Jsoup.clean(html, Whitelist.none()) - .replace(Regex("""&\w+;"""), "") - .trim()//朗读过程中总是听到一些杂音,清理一下 - //longToast(需读内容)调试一下 - viewModel.readAloud(text) + Jsoup.parse(html).text() + viewModel.readAloud(Jsoup.parse(html).textArray()) } } } diff --git a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt index d2aaad80f..fd721e09b 100644 --- a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt @@ -37,7 +37,7 @@ class ReadRssViewModel(application: Application) : BaseViewModel(application), var star = false var textToSpeech: TextToSpeech? = null private var ttsInitFinish = false - private var ttsText = "" + private var ttsTextList = arrayListOf() fun initData(intent: Intent) { execute { @@ -163,13 +163,14 @@ class ReadRssViewModel(application: Application) : BaseViewModel(application), private fun play() { if (!ttsInitFinish) return textToSpeech?.stop() - ttsText.split("\n", " ", "  ").forEach { + ttsTextList.forEach { textToSpeech?.speak(it, TextToSpeech.QUEUE_ADD, null, "rss") } } - fun readAloud(text: String) { - ttsText = text + fun readAloud(textArray: Array) { + ttsTextList.clear() + ttsTextList.addAll(textArray) textToSpeech?.let { play() } ?: let { diff --git a/app/src/main/java/io/legado/app/utils/JsoupExtensions.kt b/app/src/main/java/io/legado/app/utils/JsoupExtensions.kt new file mode 100644 index 000000000..b40cdf391 --- /dev/null +++ b/app/src/main/java/io/legado/app/utils/JsoupExtensions.kt @@ -0,0 +1,69 @@ +package io.legado.app.utils + +import org.jsoup.internal.StringUtil +import org.jsoup.nodes.CDataNode +import org.jsoup.nodes.Element +import org.jsoup.nodes.Node +import org.jsoup.nodes.TextNode +import org.jsoup.select.NodeTraversor +import org.jsoup.select.NodeVisitor + + +fun Element.textArray(): Array { + val accum = StringUtil.borrowBuilder() + NodeTraversor.traverse(object : NodeVisitor { + override fun head(node: Node, depth: Int) { + if (node is TextNode) { + appendNormalisedText(accum, node) + } else if (node is Element) { + if (accum.isNotEmpty() && + (node.isBlock || node.tag().name == "br") && + !lastCharIsWhitespace(accum) + ) accum.append("\n") + } + } + + override fun tail(node: Node, depth: Int) { + // make sure there is a space between block tags and immediately following text nodes

Two should be "One Two". + if (node is Element) { + if (node.isBlock && node.nextSibling() is TextNode && !lastCharIsWhitespace( + accum + ) + ) accum.append("\n") + } + } + }, this) + val text = StringUtil.releaseBuilder(accum).trim { it <= ' ' } + return text.splitNotBlank("\n") +} + +private fun appendNormalisedText( + accum: StringBuilder, + textNode: TextNode +) { + val text = textNode.wholeText + if (preserveWhitespace(textNode.parentNode()) || textNode is CDataNode) accum.append(text) else StringUtil.appendNormalisedWhitespace( + accum, + text, + lastCharIsWhitespace(accum) + ) +} + +private fun preserveWhitespace(node: Node?): Boolean { + // looks only at this element and five levels up, to prevent recursion & needless stack searches + if (node is Element) { + var el = node as Element? + var i = 0 + do { + if (el!!.tag().preserveWhitespace()) return true + el = el.parent() + i++ + } while (i < 6 && el != null) + } + return false +} + +private fun lastCharIsWhitespace(sb: java.lang.StringBuilder): Boolean { + return sb.isNotEmpty() && sb[sb.length - 1] == ' ' +} + From a14e350591dbf2774b898484c8b449e282619a78 Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 13 Mar 2020 19:55:27 +0800 Subject: [PATCH 056/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index bab4ef9ab..0d0ff4bc6 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -6,6 +6,7 @@ * 更改书架控件,ViewPager2替换回2.0使用的ViewPager,解决下拉不流畅问题 * 修复点击作者搜索后,打开的详情页还是原来的书籍的bug * 修改朗读菜单 +* 优化rss朗读 **2020/03/12** * 导入本地添加需要权限模式 From 3a81d34a06eecfb11e4acea12128b3b4836de3bb Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 13 Mar 2020 19:57:36 +0800 Subject: [PATCH 057/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/utils/JsoupExtensions.kt | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/io/legado/app/utils/JsoupExtensions.kt b/app/src/main/java/io/legado/app/utils/JsoupExtensions.kt index b40cdf391..3f347e4a1 100644 --- a/app/src/main/java/io/legado/app/utils/JsoupExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/JsoupExtensions.kt @@ -24,7 +24,6 @@ fun Element.textArray(): Array { } override fun tail(node: Node, depth: Int) { - // make sure there is a space between block tags and immediately following text nodes
One
Two should be "One Two". if (node is Element) { if (node.isBlock && node.nextSibling() is TextNode && !lastCharIsWhitespace( accum @@ -37,12 +36,11 @@ fun Element.textArray(): Array { return text.splitNotBlank("\n") } -private fun appendNormalisedText( - accum: StringBuilder, - textNode: TextNode -) { +private fun appendNormalisedText(accum: StringBuilder, textNode: TextNode) { val text = textNode.wholeText - if (preserveWhitespace(textNode.parentNode()) || textNode is CDataNode) accum.append(text) else StringUtil.appendNormalisedWhitespace( + if (preserveWhitespace(textNode.parentNode()) || textNode is CDataNode) + accum.append(text) + else StringUtil.appendNormalisedWhitespace( accum, text, lastCharIsWhitespace(accum) @@ -50,7 +48,6 @@ private fun appendNormalisedText( } private fun preserveWhitespace(node: Node?): Boolean { - // looks only at this element and five levels up, to prevent recursion & needless stack searches if (node is Element) { var el = node as Element? var i = 0 From d860028a00bc61fd9519f7c91d72ea578bca4693 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 14 Mar 2020 11:50:10 +0800 Subject: [PATCH 058/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/main/MainActivity.kt | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt index 462fb317d..96424cc9b 100644 --- a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt +++ b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt @@ -3,8 +3,6 @@ package io.legado.app.ui.main import android.os.Bundle import android.view.KeyEvent import android.view.MenuItem -import androidx.core.view.forEach -import androidx.core.view.forEachIndexed import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentStatePagerAdapter @@ -96,14 +94,6 @@ class MainActivity : VMBaseActivity(R.layout.activity_main), bottom_navigation_view.menu.getItem(3).isChecked = true } } - - -// bottom_navigation_view.menu.forEachIndexed { index, item -> -// if (item.isChecked) -// item.icon = getDrawable(res[1][index]) -// else -// item.icon = getDrawable(res[0][index]) -// } } override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean { From d7e4debe6153d4323164f10d301a232eb3ddaea9 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 14 Mar 2020 11:52:11 +0800 Subject: [PATCH 059/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/drawable/ic_bottom_books.xml | 4 ++-- app/src/main/res/drawable/ic_bottom_explore_black.xml | 4 ++-- app/src/main/res/drawable/ic_bottom_person.xml | 4 ++-- app/src/main/res/drawable/ic_bottom_rss_feed.xml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/drawable/ic_bottom_books.xml b/app/src/main/res/drawable/ic_bottom_books.xml index ffda5c5d6..807aaaf30 100644 --- a/app/src/main/res/drawable/ic_bottom_books.xml +++ b/app/src/main/res/drawable/ic_bottom_books.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_bottom_explore_black.xml b/app/src/main/res/drawable/ic_bottom_explore_black.xml index 776e0cc40..32d8ef18c 100644 --- a/app/src/main/res/drawable/ic_bottom_explore_black.xml +++ b/app/src/main/res/drawable/ic_bottom_explore_black.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_bottom_person.xml b/app/src/main/res/drawable/ic_bottom_person.xml index 9ecbba79f..50053997a 100644 --- a/app/src/main/res/drawable/ic_bottom_person.xml +++ b/app/src/main/res/drawable/ic_bottom_person.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_bottom_rss_feed.xml b/app/src/main/res/drawable/ic_bottom_rss_feed.xml index 26d0b4322..4cd080b7f 100644 --- a/app/src/main/res/drawable/ic_bottom_rss_feed.xml +++ b/app/src/main/res/drawable/ic_bottom_rss_feed.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file From 63e491a58f27f354f268f1a5348e63d63da88a70 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 14 Mar 2020 11:53:01 +0800 Subject: [PATCH 060/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 0d0ff4bc6..8f2068940 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -2,6 +2,9 @@ * 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。 * 请关注[开源阅读软件]()支持我,同时关注合作公众号[小说拾遗](),阅读公众号小编。 +**2020/03/14** +* 修改导航栏图标 + **2020/03/13** * 更改书架控件,ViewPager2替换回2.0使用的ViewPager,解决下拉不流畅问题 * 修复点击作者搜索后,打开的详情页还是原来的书籍的bug From 5613d2c215a1683ba4df51c92cda2e0450fbe7a3 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 14 Mar 2020 12:15:12 +0800 Subject: [PATCH 061/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/help.md | 126 ++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 app/src/main/assets/help.md diff --git a/app/src/main/assets/help.md b/app/src/main/assets/help.md new file mode 100644 index 000000000..124410667 --- /dev/null +++ b/app/src/main/assets/help.md @@ -0,0 +1,126 @@ +1.为什么第一次安装好之后什么东西都没有? +* 因为阅读只是一个转码工具,不提供内容,第一次安装app,需要自己手动导入书源,可以从QQ群、公众号“开源阅读软件”、酷安评论里获取由书友制作分享的书源。 + +2.如何导入本地书源文件? +* 下载群文件里的书源文件(书源格式后缀有txt、json,其中json文件某些情况下无法导入,需要修改后缀为txt格式才可导入); +* 打开阅读软件; +* 我的 - 点击“书源管理”; +* 点击右上角选择“本地导入”; +* 左下角选择书源文件所在的路径; +* 点击书源文件导入; +* 导入后返回书源管理界面; + +3.如何新建大佬发的单独书源? +* 复制书源代码; +* 打开阅读软件; +* 我的 - 点击“书源管理”; +* 右上角选择“新建书源”; +* 进入新建书源后点击右上角“粘贴源”; +* 粘贴书源完成后点击上方保存; +* 本次新建单独书源操作完成。 +* 注:如果书源有错误或者复制不全会显示格式错误,请重新复制。 + +4.为什么导入2.0书源后看不了书? +* 2.0部分书源并不适用3.0,建议导入后进行筛选。 + +5.阅读2.0数据如何导入阅读3.0? +* 先对阅读2.0的数据进行备份,然后进入阅读3.0,点击“我的”,选择“备份与恢复”,再点击“导入旧版本数据”。 + +6.如何给朋友分享我的书源? +* 打开阅读软件; +* 点击备份; +* 打开手机自带的文件管理; +* 手机自带内存根目录找到YueDu3.0文件夹; +* 找到myBookSource.json长按选择分享; +* 选择微信分享或者QQ分享; +* 选择你要分享的好友点击发送; +* 好友接收后在手机自带内存根目录找到myBookSource.json文件(QQ在tencent--QQfile_recv微信在Tencent--MicroMsg--Download); +* 复制该文件到手机自带内存根目录找到YueDu3.0文件夹(如已有该文件请先删除该文件或者备份到其他地方再复制到文件夹); +* 打开阅读软件点击恢复。 +* 注:备份路径如已修改过请在修改后的路径下查找书源文件。 + +7.目前阅读支持哪些格式的本地书籍? +* 目前支持TXT、EPUB格式(只支持显示EPUB里的文本内容,还不支持显示图片)。 + +8.如何刷新书架? +* 在书架界面下拉即可刷新。 + +9.书架界面书籍右上角的红色或者灰色背景小数字代表什么? +* 红色代表书籍有更新,灰色代表无更新,数字代表未读章节。 + +10.如何查看书籍详情? +* 长按书籍。 + +11.如何对书架上的书进行删除、切换书架的操作? +* 书籍详情页操作即可。 + +12.如何禁止或允许某本书更新? +* 书籍详情页,点击右上角 - “允许更新”。 + +13.如何更换小说封面、名字、作者或简介? +* 书籍详情页,点击右上角修改按钮。 + +14.怎么使用自定义字体? +* 阅读界面 - 字体-点击右上角选择字体文件路径。 + +15.目前支持哪些格式的字体文件? +* 目前支持ttf、otf格式。 + +16.书籍经常“正在加载中”怎么办? +* 在线书籍出现这个问题通常是由于源质量不好或不兼容引起的,可以换其它源多试试;本地书籍出现这个问题大概率是目录规则问题,手动切换规则可以解决。 + +17.书籍内容只有标题,正文内容是路径怎么办? +* 通常是缓存路径引起的,更换缓存路径即可。 + +18.效验书源显示失效就说明书源不能用了吗? +* 效验书源只是测试书源,可以做个参考,失效了不代表书源不能用了。 + +19.发现和正版书源能不能使用? +* 发现和正版书源只能用来找书,看排行榜,不能用来看书,如需看书请切换书源。 + +20.替换净化是什么? +* 替换净化可以去除书籍内容里的广告、错别字、屏蔽词等。 + +21.如何自己填写净化替换规则? +* 第一行:替换规则名称 - 根据自己需求对替换净化规则进行命名; +* 第二行:分组 - 净化规则的分组组别; +* 第三行:替换规则 - 填写需要被替换的内容; +* 第四行:替换为 - 填写想替换成的内容(如不填则默认表示删除第二行里填写的内容); +* 第五行:替换范围,选填书名或者源名 - 填写此替换净化规则需要对哪本书籍或者哪个书源生效(如不填则对所有书籍和书源生效)。 +* 注:如常规去除方法去除不掉,则需要勾选“使用正则表达式”,同时第二行里的替换规则也需要按照正则表达式来填写(正则表达式填写方法可自行百度学习)。 + +22.如何听书? +* 可以使用手机自带的朗读引擎,也可使用第三方如谷歌、小米等朗读引擎。 +* 【具体操作:安装-系统设置-其他高级设置-辅助功能-TTS输出-选择安装的朗读引擎(不同品牌手机的操作方法及步骤也不同,视情况而定)。】 + +23.如何设置屏幕方向、屏幕显示时长、显示/隐藏状态栏、显示/隐藏导航栏、音量键翻页、长按选择文本、点击总是翻下一页、自定义翻页案件? +* 阅读界面,设置(可上划,下面还有其他设置)。 + +24.搜索的时候感觉手机卡顿,如何解决? +* 我的 - 其他设置 - “更新和搜索线程数”调低。 + +25.更新前有什么注意事项? +* 要做好备份。 + +26.看书时如遇到“目录为空”、“加载失败”和长串英文等情况怎么办? +* 一般是书源问题,切换书源即可。 + +27.为什么书源这么多,发现里却只有一点点? +* 书源想要在发现界面里显示需要在书源里添加发现规则,并不是所有书源都有发现规则。 + +28.云备份在哪? +* 我的 - 备份与恢复 - WebDav设置。 + +29.如何操作进行云备份? +* 侧栏设置,WebDav设置; +* 正确填写WebDAV 服务器地址、WebDAV 账号、WebDAV 密码;(要获得这三项的信息,需要注册一个坚果云账号,如果直接在手机上注册,坚果云会让你下载app,过程比较麻烦,为了一步到位,最好是在电脑上打开这个注册链接:https://www.jianguoyun.com/d/signup;注册后,进入坚果云;点击右上角账户名处选择 “账户信息”,然后选择“安全选项”;在“安全选项” 中找到“第三方应用管理”,并选择“添加应用”,输入名称如“阅读”后,会生成密码,选择完成;其中https://dav.jianguoyun.com/dav/就是填入“WebDAV 服务器地址”的内容,“使用情况”后面的邮箱地址就是你的“WebDAV 账号”,点击显示密码后得到的密码就是你的“WebDAV 密码”。) +* 无需操作,APP默认每天自动云备份一次。 + +30.关于云备份的相关说明 +* 在正确设置好云备份的情况下,APP默认每天自动云备份一次,当日多次手动云备份会对当日的旧云备份文件进行覆盖,并不会覆盖之前及之后不同日期的备份文件,每天所自动云备份的文件会按照日期进行命名。 + +31.本地备份和云备份都能备份哪些东西? +* 书架、看书进度、搜索记录、书源、替换、APP设置等都会备份,基本涵盖所有内容。 + +32.出现某些未知bug怎么办? +* 清除软件数据试试看,不行再进行反馈。 \ No newline at end of file From 5d8df47bb46c5212275d166d650556dd37ba8046 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 14 Mar 2020 12:27:24 +0800 Subject: [PATCH 062/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/main/my/MyFragment.kt | 8 +++++--- .../io/legado/app/ui/widget/dialog/TextDialog.kt | 8 +++++++- app/src/main/res/menu/main_my.xml | 12 ------------ 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt b/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt index 7dcecaf11..f3087f5e7 100644 --- a/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt @@ -24,6 +24,7 @@ import io.legado.app.ui.config.ConfigActivity import io.legado.app.ui.config.ConfigViewModel import io.legado.app.ui.filechooser.FileChooserDialog import io.legado.app.ui.replacerule.ReplaceRuleActivity +import io.legado.app.ui.widget.dialog.TextDialog import io.legado.app.ui.widget.prefs.NameListPreference import io.legado.app.ui.widget.prefs.PreferenceCategory import io.legado.app.ui.widget.prefs.SwitchPreference @@ -48,9 +49,10 @@ class MyFragment : BaseFragment(R.layout.fragment_my_config), FileChooserDialog. override fun onCompatOptionsItemSelected(item: MenuItem) { when (item.itemId) { - R.id.menu_help -> startActivity() - R.id.menu_backup -> BackupRestoreUi.backup(this) - R.id.menu_restore -> BackupRestoreUi.restore(this) + R.id.menu_help -> { + val text = String(requireContext().assets.open("help.md").readBytes()) + TextDialog.show(childFragmentManager, text, TextDialog.MD) + } } } diff --git a/app/src/main/java/io/legado/app/ui/widget/dialog/TextDialog.kt b/app/src/main/java/io/legado/app/ui/widget/dialog/TextDialog.kt index 648949abd..9c1c75d5e 100644 --- a/app/src/main/java/io/legado/app/ui/widget/dialog/TextDialog.kt +++ b/app/src/main/java/io/legado/app/ui/widget/dialog/TextDialog.kt @@ -77,10 +77,16 @@ class TextDialog : BaseDialogFragment() { time -= 1000 badge_view.setBadgeCount((time / 1000).toInt()) if (time <= 0) { - dialog?.setCancelable(true) + view.post { + dialog?.setCancelable(true) + } } } } + } else { + view.post { + dialog?.setCancelable(true) + } } } diff --git a/app/src/main/res/menu/main_my.xml b/app/src/main/res/menu/main_my.xml index db1161c28..74e555dff 100644 --- a/app/src/main/res/menu/main_my.xml +++ b/app/src/main/res/menu/main_my.xml @@ -10,16 +10,4 @@ app:showAsAction="always" tools:ignore="AlwaysShowAction" /> - - - - From bd24013c70e25b20d2add1b1b82aac1c84eaec6b Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 14 Mar 2020 12:37:01 +0800 Subject: [PATCH 063/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/res/drawable/ic_bottom_books_e.xml | 23 ++++++++++++++----- .../main/res/drawable/ic_bottom_books_s.xml | 19 +++++++++++---- .../main/res/drawable/ic_bottom_explore.xml | 5 ++++ .../res/drawable/ic_bottom_explore_black.xml | 5 ---- .../drawable/ic_bottom_explore_black_e.xml | 5 ---- .../drawable/ic_bottom_explore_black_s.xml | 9 -------- .../main/res/drawable/ic_bottom_explore_e.xml | 12 ++++++++++ .../main/res/drawable/ic_bottom_explore_s.xml | 9 ++++++++ .../main/res/drawable/ic_bottom_person_e.xml | 15 ++++++++---- .../main/res/drawable/ic_bottom_person_s.xml | 21 ++++++++++++----- .../res/drawable/ic_bottom_rss_feed_e.xml | 21 ++++++++++++----- .../res/drawable/ic_bottom_rss_feed_s.xml | 11 ++++++--- app/src/main/res/menu/main_bnv.xml | 2 +- 13 files changed, 107 insertions(+), 50 deletions(-) create mode 100644 app/src/main/res/drawable/ic_bottom_explore.xml delete mode 100644 app/src/main/res/drawable/ic_bottom_explore_black.xml delete mode 100644 app/src/main/res/drawable/ic_bottom_explore_black_e.xml delete mode 100644 app/src/main/res/drawable/ic_bottom_explore_black_s.xml create mode 100644 app/src/main/res/drawable/ic_bottom_explore_e.xml create mode 100644 app/src/main/res/drawable/ic_bottom_explore_s.xml diff --git a/app/src/main/res/drawable/ic_bottom_books_e.xml b/app/src/main/res/drawable/ic_bottom_books_e.xml index ff159823a..b14222487 100644 --- a/app/src/main/res/drawable/ic_bottom_books_e.xml +++ b/app/src/main/res/drawable/ic_bottom_books_e.xml @@ -1,7 +1,18 @@ - - - - - + + + + + diff --git a/app/src/main/res/drawable/ic_bottom_books_s.xml b/app/src/main/res/drawable/ic_bottom_books_s.xml index eb36d0fa2..c2d369a30 100644 --- a/app/src/main/res/drawable/ic_bottom_books_s.xml +++ b/app/src/main/res/drawable/ic_bottom_books_s.xml @@ -1,6 +1,15 @@ - - - - + + + + diff --git a/app/src/main/res/drawable/ic_bottom_explore.xml b/app/src/main/res/drawable/ic_bottom_explore.xml new file mode 100644 index 000000000..439f69ba9 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottom_explore.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_bottom_explore_black.xml b/app/src/main/res/drawable/ic_bottom_explore_black.xml deleted file mode 100644 index 32d8ef18c..000000000 --- a/app/src/main/res/drawable/ic_bottom_explore_black.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_bottom_explore_black_e.xml b/app/src/main/res/drawable/ic_bottom_explore_black_e.xml deleted file mode 100644 index fdbdedd39..000000000 --- a/app/src/main/res/drawable/ic_bottom_explore_black_e.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_bottom_explore_black_s.xml b/app/src/main/res/drawable/ic_bottom_explore_black_s.xml deleted file mode 100644 index 1b7a47026..000000000 --- a/app/src/main/res/drawable/ic_bottom_explore_black_s.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_bottom_explore_e.xml b/app/src/main/res/drawable/ic_bottom_explore_e.xml new file mode 100644 index 000000000..b29a19a72 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottom_explore_e.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_bottom_explore_s.xml b/app/src/main/res/drawable/ic_bottom_explore_s.xml new file mode 100644 index 000000000..a72656e77 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottom_explore_s.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_bottom_person_e.xml b/app/src/main/res/drawable/ic_bottom_person_e.xml index f2ee25675..82551bcef 100644 --- a/app/src/main/res/drawable/ic_bottom_person_e.xml +++ b/app/src/main/res/drawable/ic_bottom_person_e.xml @@ -1,5 +1,12 @@ - - - + + + diff --git a/app/src/main/res/drawable/ic_bottom_person_s.xml b/app/src/main/res/drawable/ic_bottom_person_s.xml index f0d729116..c11723b48 100644 --- a/app/src/main/res/drawable/ic_bottom_person_s.xml +++ b/app/src/main/res/drawable/ic_bottom_person_s.xml @@ -1,9 +1,18 @@ - - + - + + android:strokeColor="#00000000" + android:strokeWidth="1" /> diff --git a/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml b/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml index b69c2336d..f8e33c3d7 100644 --- a/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml +++ b/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml @@ -1,9 +1,18 @@ - - + - + + android:strokeColor="#00000000" + android:strokeWidth="1" /> diff --git a/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml b/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml index b14351098..d39f0fe7d 100644 --- a/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml +++ b/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml @@ -1,4 +1,9 @@ - - + + diff --git a/app/src/main/res/menu/main_bnv.xml b/app/src/main/res/menu/main_bnv.xml index a696febe9..15b355b31 100644 --- a/app/src/main/res/menu/main_bnv.xml +++ b/app/src/main/res/menu/main_bnv.xml @@ -9,7 +9,7 @@ android:title="@string/bookshelf"/> Date: Sat, 14 Mar 2020 13:28:57 +0800 Subject: [PATCH 064/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/res/drawable/ic_bottom_books_e.xml | 22 ++++++------- .../main/res/drawable/ic_bottom_books_s.xml | 31 ++++++++++++------- .../main/res/drawable/ic_bottom_explore_e.xml | 18 +++++------ .../main/res/drawable/ic_bottom_explore_s.xml | 19 +++++++----- .../main/res/drawable/ic_bottom_person_e.xml | 14 ++++----- .../main/res/drawable/ic_bottom_person_s.xml | 18 +++++------ .../res/drawable/ic_bottom_rss_feed_e.xml | 20 +++++------- .../res/drawable/ic_bottom_rss_feed_s.xml | 16 +++++++--- 8 files changed, 83 insertions(+), 75 deletions(-) diff --git a/app/src/main/res/drawable/ic_bottom_books_e.xml b/app/src/main/res/drawable/ic_bottom_books_e.xml index b14222487..d99a276ba 100644 --- a/app/src/main/res/drawable/ic_bottom_books_e.xml +++ b/app/src/main/res/drawable/ic_bottom_books_e.xml @@ -1,18 +1,18 @@ + android:viewportWidth="24" + android:viewportHeight="24"> + android:pathData="M18.8,21h-0.5c-1.2,0 -2.2,-1 -2.2,-2.2v-8.5c0,-1.2 1,-2.2 2.2,-2.2h0.5c1.2,0 2.2,1 2.2,2.2v8.5C21,20 20,21 18.8,21zM18.2,9.5c-0.4,0 -0.8,0.3 -0.8,0.8v8.5c0,0.4 0.3,0.8 0.8,0.8h0.5c0.4,0 0.8,-0.3 0.8,-0.8v-8.5c0,-0.4 -0.3,-0.8 -0.8,-0.8L18.2,9.5z" + android:fillColor="#2F45A6" /> + android:pathData="M12.2,21h-0.5c-1.2,0 -2.2,-1 -2.2,-2.2v-13.5c0,-1.2 1,-2.2 2.2,-2.2h0.5c1.2,0 2.2,1 2.2,2.2v13.5C14.5,20 13.5,21 12.2,21zM11.8,4.5c-0.4,0 -0.8,0.3 -0.8,0.8v13.5c0,0.4 0.3,0.8 0.8,0.8h0.5c0.4,0 0.8,-0.3 0.8,-0.8v-13.5c0,-0.4 -0.3,-0.8 -0.8,-0.8L11.8,4.5z" + android:fillColor="#2F45A6" /> + android:pathData="M5.8,21h-0.5c-1.2,0 -2.2,-1 -2.2,-2.2v-10.5c0,-1.2 1,-2.2 2.2,-2.2h0.5c1.2,0 2.2,1 2.2,2.2v10.5C8,20 7,21 5.8,21zM5.2,7.5c-0.4,0 -0.8,0.3 -0.8,0.8v10.5c0,0.4 0.3,0.8 0.8,0.8h0.5c0.4,0 0.8,-0.3 0.8,-0.8v-10.5c0,-0.4 -0.3,-0.8 -0.8,-0.8L5.2,7.5z" + android:fillColor="#2F45A6" /> + android:pathData="M11.5,16h1c0.3,0 0.5,0.2 0.5,0.5v0.5c0,0.3 -0.2,0.5 -0.5,0.5h-1c-0.3,0 -0.5,-0.2 -0.5,-0.5v-0.5C11,16.2 11.2,16 11.5,16z" + android:fillColor="#2F45A6" /> diff --git a/app/src/main/res/drawable/ic_bottom_books_s.xml b/app/src/main/res/drawable/ic_bottom_books_s.xml index c2d369a30..e42351298 100644 --- a/app/src/main/res/drawable/ic_bottom_books_s.xml +++ b/app/src/main/res/drawable/ic_bottom_books_s.xml @@ -1,15 +1,22 @@ - - - + android:viewportWidth="24" + android:viewportHeight="24"> + + + + diff --git a/app/src/main/res/drawable/ic_bottom_explore_e.xml b/app/src/main/res/drawable/ic_bottom_explore_e.xml index b29a19a72..13db8dc28 100644 --- a/app/src/main/res/drawable/ic_bottom_explore_e.xml +++ b/app/src/main/res/drawable/ic_bottom_explore_e.xml @@ -1,12 +1,12 @@ - - + android:viewportWidth="24" + android:viewportHeight="24"> + + diff --git a/app/src/main/res/drawable/ic_bottom_explore_s.xml b/app/src/main/res/drawable/ic_bottom_explore_s.xml index a72656e77..94a40b0f2 100644 --- a/app/src/main/res/drawable/ic_bottom_explore_s.xml +++ b/app/src/main/res/drawable/ic_bottom_explore_s.xml @@ -1,9 +1,14 @@ - + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + + diff --git a/app/src/main/res/drawable/ic_bottom_person_e.xml b/app/src/main/res/drawable/ic_bottom_person_e.xml index 82551bcef..2ddd441dc 100644 --- a/app/src/main/res/drawable/ic_bottom_person_e.xml +++ b/app/src/main/res/drawable/ic_bottom_person_e.xml @@ -1,12 +1,12 @@ + android:viewportWidth="24" + android:viewportHeight="24"> + android:pathData="M12,11c-2.2,0 -4,-1.8 -4,-4s1.8,-4 4,-4s4,1.8 4,4S14.2,11 12,11zM12,4.5c-1.4,0 -2.5,1.1 -2.5,2.5s1.1,2.5 2.5,2.5s2.5,-1.1 2.5,-2.5S13.4,4.5 12,4.5z" + android:fillColor="#959ECA" /> + android:pathData="M18.5,21h-13c-0.4,0 -0.8,-0.2 -1.1,-0.4C4.1,20.4 4,19.9 4,19.5V17c0,-1.1 0.4,-2.1 1.2,-2.8C5.9,13.4 6.9,13 8,13h8c1.1,0 2.1,0.4 2.8,1.2C19.6,15 20,16 20,17v2.5c0,0.4 -0.2,0.8 -0.4,1.1S18.9,21 18.5,21zM8,14.5c-0.7,0 -1.3,0.3 -1.8,0.7c-0.5,0.5 -0.7,1.1 -0.7,1.8v2.5h13V17c0,-0.7 -0.3,-1.3 -0.7,-1.8c-0.5,-0.5 -1.1,-0.7 -1.8,-0.7H8z" + android:fillColor="#959ECA" /> diff --git a/app/src/main/res/drawable/ic_bottom_person_s.xml b/app/src/main/res/drawable/ic_bottom_person_s.xml index c11723b48..d2a5d99d8 100644 --- a/app/src/main/res/drawable/ic_bottom_person_s.xml +++ b/app/src/main/res/drawable/ic_bottom_person_s.xml @@ -1,18 +1,14 @@ + android:viewportWidth="24" + android:viewportHeight="24"> + android:fillType="evenOdd" /> + android:fillType="evenOdd" /> diff --git a/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml b/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml index f8e33c3d7..db2282593 100644 --- a/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml +++ b/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml @@ -1,18 +1,12 @@ + android:viewportWidth="24" + android:viewportHeight="24"> + android:pathData="M18,3H6C4.9,3 4,3.9 4,5v15.1C4,20.6 4.4,21 4.9,21c0.1,0 0.2,0 0.3,0l5.7,-2.3c0.4,-0.1 0.7,-0.2 1.1,-0.2s0.8,0.1 1.1,0.2l5.7,2.3c0.1,0 0.2,0 0.3,0c0.5,0 0.9,-0.4 0.9,-0.9V5C20,3.9 19.1,3 18,3zM18.4,19.1l-4.7,-1.9l0,0l0,0c-0.5,-0.2 -1.1,-0.3 -1.6,-0.3s-1.1,0.1 -1.6,0.3l0,0l0,0l-4.7,1.9V5c0,-0.2 0.2,-0.4 0.4,-0.4h12c0.2,0 0.4,0.2 0.4,0.4V19.1z" + android:fillColor="#5A5F64" /> + android:pathData="M14.9,9.5h-2.2V7.2c0,-0.4 -0.4,-0.8 -0.8,-0.8c-0.4,0 -0.8,0.4 -0.8,0.8v2.3H9.1c-0.4,0 -0.8,0.4 -0.8,0.8c0,0.4 0.4,0.8 0.8,0.8h2.2v2.3c0,0.4 0.4,0.8 0.8,0.8c0.4,0 0.8,-0.4 0.8,-0.8v-2.3h2.2c0.4,0 0.8,-0.4 0.8,-0.8C15.7,9.9 15.4,9.5 14.9,9.5L14.9,9.5z" + android:fillColor="#5A5F64" /> diff --git a/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml b/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml index d39f0fe7d..5ad97a29d 100644 --- a/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml +++ b/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml @@ -1,9 +1,15 @@ + android:viewportWidth="24" + android:viewportHeight="24"> + android:pathData="M18,3H6C4.9,3 4,3.9 4,5v15.1C4,20.6 4.4,21 4.9,21c0.1,0 0.2,0 0.3,0l5.7,-2.3c0.4,-0.1 0.7,-0.2 1.1,-0.2s0.8,0.1 1.1,0.2l5.7,2.3c0.1,0 0.2,0 0.3,0c0.5,0 0.9,-0.4 0.9,-0.9V5C20,3.9 19.1,3 18,3z" + android:fillColor="#C8D0D9" /> + From 7e9bddcb1b1a32a2e85ad77f485da48c68c356aa Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 14 Mar 2020 14:21:08 +0800 Subject: [PATCH 065/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/drawable/ic_bottom_books_s.xml | 8 ++------ app/src/main/res/drawable/ic_bottom_explore_s.xml | 6 +----- app/src/main/res/drawable/ic_bottom_rss_feed_e.xml | 2 +- app/src/main/res/drawable/ic_bottom_rss_feed_s.xml | 12 +++--------- 4 files changed, 7 insertions(+), 21 deletions(-) diff --git a/app/src/main/res/drawable/ic_bottom_books_s.xml b/app/src/main/res/drawable/ic_bottom_books_s.xml index e42351298..7ab340659 100644 --- a/app/src/main/res/drawable/ic_bottom_books_s.xml +++ b/app/src/main/res/drawable/ic_bottom_books_s.xml @@ -7,16 +7,12 @@ android:pathData="M17.5,8h2C20.3,8 21,8.7 21,9.5v10c0,0.8 -0.7,1.5 -1.5,1.5h-2c-0.8,0 -1.5,-0.7 -1.5,-1.5v-10C16,8.7 16.7,8 17.5,8z" android:fillColor="#C8D0D9" android:fillType="evenOdd" /> - diff --git a/app/src/main/res/drawable/ic_bottom_explore_s.xml b/app/src/main/res/drawable/ic_bottom_explore_s.xml index 94a40b0f2..df805a464 100644 --- a/app/src/main/res/drawable/ic_bottom_explore_s.xml +++ b/app/src/main/res/drawable/ic_bottom_explore_s.xml @@ -4,11 +4,7 @@ android:viewportWidth="24" android:viewportHeight="24"> - diff --git a/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml b/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml index db2282593..fb5bf8ae8 100644 --- a/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml +++ b/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml @@ -9,4 +9,4 @@ - + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml b/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml index 5ad97a29d..4105b0154 100644 --- a/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml +++ b/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml @@ -3,13 +3,7 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - - + From 00b10ad14f85d572935dcc88b2b7d55bbc1d424f Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 14 Mar 2020 16:25:56 +0800 Subject: [PATCH 066/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 10 +++++++++- gradle.properties | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 5eb9c16b8..4769ff4a0 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.3.61' + ext.kotlin_version = '1.3.70' repositories { google() jcenter() @@ -30,3 +30,11 @@ allprojects { task clean(type: Delete) { delete rootProject.buildDir } + +gradle.taskGraph.whenReady { + tasks.each { task -> + if (task.name.contains("crashlyticsUploadDeobsRelease")) { + task.enabled = false + } + } +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 23339e0df..667087ef0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx1536m +org.gradle.jvmargs=-Xmx2048m # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects From 05997f46f206b7d4e90240f1a4a25db22b5f46a6 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 14 Mar 2020 16:36:23 +0800 Subject: [PATCH 067/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values/strings.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 63efa5aee..5adc6647e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -207,14 +207,14 @@ 替换规则为空或者不满足正则表达式要求 选择操作 全选 - 全选(%d/%d) - 取消(%d/%d) + 全选(%1$d/%2$d) + 取消(%1$d/%2$d) 深色模式 启动页 开始下载 取消下载 暂无任务 - 已下载 %d/%d + 已下载 %1$d/%2$d 导入选择书籍 更新和搜索线程数,太多会卡顿 切换图标 @@ -289,7 +289,7 @@ 右边距 校验书源 校验所选 - 进度 %d/%d + 进度 %1$d/%2$d 请安装并选择中文TTS! TTS初始化失败! 简繁转换 @@ -599,7 +599,7 @@ 夜间模式跟随系统 上级 在线朗读音色 - (%d/%d) + (%1$d/%2$d) 显示订阅 服务已停止 正在启动服务\n具体信息查看通知栏 From 4220451e3306d03afac865bbdd37bf29ba415269 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 14 Mar 2020 17:05:16 +0800 Subject: [PATCH 068/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values/strings.xml | 2 +- build.gradle | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5adc6647e..a505fa785 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -81,7 +81,7 @@ 重试 Web 服务 web编辑书源 - http://%s:%d + http://%1$s:%2$d 离线下载 离线下载 下载选择的章节到本地 diff --git a/build.gradle b/build.gradle index 4769ff4a0..839736b35 100644 --- a/build.gradle +++ b/build.gradle @@ -29,12 +29,4 @@ allprojects { task clean(type: Delete) { delete rootProject.buildDir -} - -gradle.taskGraph.whenReady { - tasks.each { task -> - if (task.name.contains("crashlyticsUploadDeobsRelease")) { - task.enabled = false - } - } } \ No newline at end of file From f265b133f2b95e9de0a3453d5e23257066235466 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 14 Mar 2020 22:22:38 +0800 Subject: [PATCH 069/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 14 ++++++++++++++ .../legado/app/ui/welcome/WelcomeActivity.kt | 3 ++- .../{ic_launcher_0.xml => ic_launcher_4.xml} | 0 .../main/res/drawable/ic_bottom_rss_feed_e.xml | 6 +++--- app/src/main/res/drawable/ic_launch.xml | 14 -------------- app/src/main/res/drawable/ic_launcher.xml | 18 ++++++++++++++++++ .../main/res/mipmap-anydpi-v26/ic_launcher.xml | 2 +- .../main/res/mipmap-anydpi-v26/launcher4.xml | 5 +++++ 8 files changed, 43 insertions(+), 19 deletions(-) rename app/src/main/res/drawable-v24/{ic_launcher_0.xml => ic_launcher_4.xml} (100%) delete mode 100644 app/src/main/res/drawable/ic_launch.xml create mode 100644 app/src/main/res/drawable/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/launcher4.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a1b9f1846..8b943cc65 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -79,6 +79,20 @@ android:resource="@xml/shortcuts" android:launchMode="singleTask" /> + + + + + + + + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/ic_launch.xml b/app/src/main/res/drawable/ic_launch.xml deleted file mode 100644 index 6b423cdc7..000000000 --- a/app/src/main/res/drawable/ic_launch.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher.xml b/app/src/main/res/drawable/ic_launcher.xml new file mode 100644 index 000000000..1bb711f8f --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index e8409cf31..7f9b677b9 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/launcher4.xml b/app/src/main/res/mipmap-anydpi-v26/launcher4.xml new file mode 100644 index 000000000..22463230c --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/launcher4.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file From d63b264f2f981281a732c18102c78488e60adee3 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 14 Mar 2020 22:34:55 +0800 Subject: [PATCH 070/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3587 -> 1915 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 1957 -> 1175 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 5435 -> 2585 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 10087 -> 4139 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 15918 -> 5618 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index a7e087bc8b52c9eeeefb6e6a96cfeda3778d9904..36cd968b59b1f99d6498131ef1c120c8d415efbe 100644 GIT binary patch delta 1787 zcma)7X*3&%7LKKfHkc3G*Lq$t%jpZSR4y~HL{G9X7`|-~C&bjxV@1Fae@7^CbP3cfNKY?hV4geUa zi^SJj#{vKVPz=`90kkY8Ee*HGZak(1006zQ_BPk!d7D%}m+Qf&Q)t`N60@EW70)yN zIT4PEKV_$4L^dLI*PmjbVU<_QqT9(}lV3B6|E)#P5I2ZnA{jj@=8EmeNFE1I41+itdavM56=A_aV4D8(9j` z$x=olUv}m`xVu;gDj|!!$srw^Yp;zy(lE|_O(bYsimfWAJ5P*Qoq92s8dc1UhTjLp zUy|5SR$#t!MxfQ||8OZ1Ln@o<)^-gQOswvY^@Y9l4isGh1O(~~I0s62UGRs*d#Izh zSEHZZ77?&62FlX2-aH@;OZv!^J+XEEqAs}BcebQ1J-rac*?ky=Ub~}XcB^W+xI(<- zA0Ym-`0t!>ig-dooSn{IpcgYjyjym5lqG@WYXO}zb(s~VmascVUo%%Z@VIb+SZa&=deXf2SIPg>8d!>C}0 zDv;v*8&EX~!b0lJ_VqW*bno>=X5!umEHN%2pL!Bp?=o(W@=pyQue)&C*4{Juill^o z{0#$Gk%6D>^pDZe(K>p1oX}q`>K}d_5_?NEWB<|Q)jqqq%;$H8&vXP&P0Y+-!@|z8 z*=#^FzW?hNnV7$4%fwUt=e(&B7$T8qy|S|Mo|RO#w-=LWr5wzCR?B3T93Ac#pX zATe>nj=Lq1$$cA3oSCph!IrH2fH?@EX%V-@K}zPHv3Sg008~^~KC;UsO1DSNTZM*( zN&wTYdwNpJ%ijojq-5G%)3I!*Hodh~8;yQaRi)-evvL(md3bop!C>l~0q>Mr!d_^%{Ua<1=awB8o#k;1fTU$ZfbNyZ2-R@Ve3{JJ+M4rd* zsO@jh*EcqvU?Ty=q9$OM&waJM-B8Z*Hz> zZznf5>+xo1XSzb5c6N4SWhQxLCQ-Qt`$ooPQV7i+hVV9nEx7Ig29ZD@JOGOx#9RUv z^==7TTUj6#OUv@YLb-5bMaNvF%ID7&{H7BQ1gfAP;2I_-uuQg1WTZh_TAGq|a^l#x z4dPVG(!Uzq-#@>nuA98|-s}RLn;!A1h7{0{15JqA4Ey#u3OEir7qFO=M3a;rKW$ zN?{?V6dks@x%qN4c5-r(-RRLoZ)&==@Io7kt)Il=@o;z^sC(Ac(GhfXbfkBaMctTg z?eu2@h2}FdGUEI3!j0bT{UDxZ^J~QHWje=EtJ$RLjYn6!5u z`8DZ6A2L-7{Q1JLxaR*2l2b46rD284+U?3LS8w&-SM6lVtVm8UIfrl_T1`JduKnI| zMD58{5qxeOdh+LogJ*e8_baVm^_GSV-%N*CgHy=FPqsJ3%yt-|rQ^o}kE`~bPJt}S z2vo^a$n)j?gaXJ5@Z~o(j^>6ZQJtDnVjCHdB4tojB>JMcVgIp2*tYW$1}4C%a*8g4 zXiS*mT3?s!0hBC%&d_{6<+R!~b@cmTwL%ycu@e3JZ{|9hC%`Wn8Rbh;mDlHf_^C#t^Z9gTvf*j2LrGUZuSgYLh642c-lXs delta 3445 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 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index f0e9ad5329c790de56e6f8ade8969a49496faf4b..c6f78616ed71f2bd73bd3c65c951e52669132db7 100644 GIT binary patch literal 1175 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sEa{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)pT}UnMXwSj}Ky5HFasE6|34f$>>@Plzi}!GHRKnM*Ef z*e|y5U1j36!rW)&o%sEStdSqnex^?UR{P_cv3JMAe3kzGeY#C4&P|MB(4^vC` z_Rc&96rVC>%C~RdX3m_cp`ig({OHjmM@PpiSFSvG@E{~4WX_y9?(XhDHE-U$`TY6w z(xpowCV0kdoH+Nw^XJckgM)i}d#$Xj_U_%=*w}dS;zctvGoT?ry^9tt0xDj*{^r$N zZ++r7J$(4U-rnBU)^^gQNo&@uIdI@WO-;@H`}cwBfeubiPM$Gi2GF|ci!Lo)cOxoi z$AM!{TwGjMu3Y)_=~E*kqpx4TUb=J%Xzbs=e}P&I4GqtpJ^Sw6J0N5J{Q0w&URkm6 z*25>C97ETA`t&I&DG4a<<>htl+O_T5w*xKJ*VmsmZ5q&P4kBpc5C{P*i(>o=LQ zxr{Pi&UyEM8W@wj-CY$)`=)TQj7r}F(Up_mEPnsy(0YI6@BoE}_t|4!{sGqEk( z7Vcdv9DDc6(&gLx&;4W6Gw4{D*wfS3o19dXHEZ9QGv_W^?mxgNHof7g=$dtjwaLZV z)$BKp-m~N5>$f=Yk+Yzx?Q{3()!7f8eS7zhvETo^{`&m=Ukk-PEN_(7-jMqGb;k_e z7oD=w1?t~|rtNE2SM<|4;GoYqb58yJ(-~G~BI~^7{g&vN|Gmd+?ZtmruD!gw*Y|Gu zu^EY#^(+C~fdQ{m6%tXBl30>zm0Xkxq!<_~ZW$XH7+o+mxMpg?X=t>`$c#ZLmzi6e pnVG@iH!GWRd~hF%zTEtj%(O~^`V@t=4+8Zuc)I$ztaD0e0s!9BQHcNm delta 1871 zcmV-V2e9~;38fE^83+ad00374`G=7qK7RlPVoOIv00000008+zyMF)x010qNS#tmY z4#NNd4#NS*Z>VGd000McNliruu7D6p}zp=HRd#+ku%fsD*dj4sh+amFQ@nYfr`$;@>AGyl+NVt-~# z9Gi>4=A?;18<{Lvx8iU>DTS6^Xm5YqTiV{<-|u^le-s$C-rn0wu@HIwxVd@X=e+0p zIX|A~oJT076t}TyD=pv-z)B0a1F+Hp{_g=S%lkP+&)_5<4o-0{m|#4TCY_cDA+g(Z zs)`)=S2?-Av4oat&$9F=mLm^@B7aGKcQioPsmsJt3Y0<#9bKf*0D(X%fq?*}fiNj^ zTlma96+GVV!)eu51|VUi`So7{ymLH+QUbR_qrJ(?J$HFo=X0~F*nQ2{kT4vc;bb7n z@e4EboS!CXfK8V?vCYSx_G*Oe}92&wf6%XHA&eNZ7$ZPZfW>W?)ALyfJAdbr} zdGSjvtXabTSTex7y&+!y!vGcm-`-Krr&}xY68@j|+R*^}{uab()A-4k*V0f~u>1hM z!&7{3Umv=J7anh7V|~f8h=0FoohL^5S?2{jP76Q(#zu-=wybS(p7*qA^3s6;3`6kD zBdeEPJixN~Yr`KRnoX<>}(%n=`;`M=vrFG3aRZvVC3ovWvfJPj)oWRORGU zAj*-`Az<;KkQ2aUG|7R#kK%PnzO}=@BtiLvxbN)rW6>?V+BKBbH-9I9citZ%Z7Ozu zq6WL3d-7IDvISL%T=1-}%uRcvhp`!h_xdIlZJ(2x!zaSnba?bWUrxfqvk6|@-_OPI z7_GI1JiDtAw{8B09GQ&q(p&um!!g#cF5(BfTF|e{A$zt~@$Q++9O@Zm>zd3y; zvXJT$JEw-@7^ay&z{v}9DStz4ZgCl4crt}m7wDRXMbj9YN-ppjn@*wY0!YfOdGfOjIg1DQ>UKYMWrds^nqhOJm-gm`YxtWF z`KhmPaxR!)+nOTU{0jl9i)~0D8Jo@n;PAi3Id(QoU73sawIwuH7G@PblQ22dGs2~C zoF}%`(b2m2tbgs?R1KRlzjxc`ZK(cpQQUH&n1=Q#sYe zAMb~xk)pf*GKW8$;G@9o+@e(Q!TBlPcxE#~J9VYKSi&fn(&V{) zy__G5v!%(!p7y$&+GS30n!=D^(dWw$aIJVHu7CYp4-SSjC@r+&u;q4pn~21D{>?KC zj;GmBTfp;=wdM?-aR$Eog+_{8I?=@3k=HO4N`bBk#;4-|OvMZYAeF>0B(anvm6p_( zI{5ys-0sc?yGMBH7pEByiNGbsSG} ztGK zK+!XBnbGMqv1AI15EMA9_(~nrmOCl1XD=D9Fu?!LZn;c+2jF(II{+(fw>`kW0i*Vj z-HhWD^#A|>E|VVw9AGdEF*33;Ftsu<&^EBJGB5xDK+^>UtKJAB0000kdQ@0+WMOn= zI&E)cX=Zr<0C?InGB7gGH89pSFbpv=vNABWGBMCLu&^>P002PK1qFiPpsN4?002ov JPDHLkV1mJbn4SOt diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 371e045cdeff6018a3152f988c2578f02a165c17..df3591554e282985e7fe9f808e846045eccb9621 100644 GIT binary patch delta 2435 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 delta 5355 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
  • &kU)zOOTAIk}3DxZv%)fzU{=NK=*DgwgF%eflDijhY6zA-P57 z`Nga}q0GlAk*XC%!r~q@t|p?RJe?=C9Ff8|Onw?9R8*zkohrL(@|dtYEG0nws16_C z0;Lr+wj~PBb{O=cbX~n;i|cEfAVavt_(>2o3qM=El(OFyk(W?kUJ(RfV!iX9IE*fX zf~t#t8L7)UlxknOygq_ew?}<_>iEY+Cjr-UOPKSaw+xCXHQ>EhXcrD&;@o^9IcJVZ z#<#CrOB**yLu1@Mzi9lkj$a)jNty!uzG!*lniwifl)OY&YGg7mM}u{}fA)(w+{V+F z@#7t{MD+YnX?7E=PVJ78o$}%$Nx{WNyjtRqKcV4;=jMGrq%-{U(Vd*_Ta9kUEvmDzmjL^G#4dqoW_Nr@-*_ z>rTEAi^c z$f^!Q=}hakLmTt^3fhW$eOE4(Ox|R)|MFp7n(t$?G(&mV)PF@T?uPT1aLD`Z&c5hM zmCl;=_bkwo%u@M=pQ2&CstpnVT!+%X9EL4Jg31iG0>q1HT^5r!yV=a%`8p02qDF6Y zswO8-4R+UeO+Y27e^6aj%aFBc_w=&-B0AVKVQIKbq?`z{cnYl%|PS zV&fIvA5)du45zr4P#uYY%Ej;?KQS>k7ye)_D+*pScj5Zo!?cfE*M;u^Gnjpr{$9qk zKw$W(g!Je2#z!kV6F7#8YLzeGCZqIqNuHIRl&Hlr+P{re_m}i~I+$G{mbYU4gm@AI z{~!M0;s3jzPdEoX`|n;9_J^B#zq0YRm$vh?|8GE`q)K8^YbcqBXssx;K~!WyvbtIn z3IZui-Mfdu5^?@7=dIf-X9qtJ2)Q683KgA@fX+z#-)6{aF6KWIq^YW>QmJGe@;?OY BIcWd@ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index feff4e9652acbf679c2896e7d767c23a27bee193..ebc3324f78cb3c1e19f0802cc53f299808b64467 100644 GIT binary patch literal 4139 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 literal 10087 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 literal 15918 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 From 825a912be537c73a278e227426e88312d87dfc81 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 14 Mar 2020 22:47:26 +0800 Subject: [PATCH 071/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values/array_values.xml | 2 +- app/src/main/res/values/arrays.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values/array_values.xml b/app/src/main/res/values/array_values.xml index c517c46ce..dd0842163 100644 --- a/app/src/main/res/values/array_values.xml +++ b/app/src/main/res/values/array_values.xml @@ -6,9 +6,9 @@ launcher1 launcher2 launcher3 + launcher4 - 0 60 diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index a53546e7f..cb61d6daa 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -79,6 +79,7 @@ icon1 icon2 icon3 + icon4 From c931cfad3162648506b59d2a66837cdb029eb1f8 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 14 Mar 2020 22:54:48 +0800 Subject: [PATCH 072/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1915 -> 2943 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 1175 -> 2052 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 2585 -> 4414 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 4139 -> 7876 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 5618 -> 12102 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index 36cd968b59b1f99d6498131ef1c120c8d415efbe..66ab5d53de22caa35d95ccd53841cbc7ef0bf425 100644 GIT binary patch delta 2784 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 f3yEKmW+i delta 1748 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 SVXKw^0000!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)pT}UnMXwSj}Ky5HFasE6|34f$>>@Plzi}!GHRKnM*Ef z*e|y5U1j36!rW)&o%sEStdSqnex^?UR{P_cv3JMAe3kzGeY#C4&P|MB(4^vC` z_Rc&96rVC>%C~RdX3m_cp`ig({OHjmM@PpiSFSvG@E{~4WX_y9?(XhDHE-U$`TY6w z(xpowCV0kdoH+Nw^XJckgM)i}d#$Xj_U_%=*w}dS;zctvGoT?ry^9tt0xDj*{^r$N zZ++r7J$(4U-rnBU)^^gQNo&@uIdI@WO-;@H`}cwBfeubiPM$Gi2GF|ci!Lo)cOxoi z$AM!{TwGjMu3Y)_=~E*kqpx4TUb=J%Xzbs=e}P&I4GqtpJ^Sw6J0N5J{Q0w&URkm6 z*25>C97ETA`t&I&DG4a<<>htl+O_T5w*xKJ*VmsmZ5q&P4kBpc5C{P*i(>o=LQ zxr{Pi&UyEM8W@wj-CY$)`=)TQj7r}F(Up_mEPnsy(0YI6@BoE}_t|4!{sGqEk( z7Vcdv9DDc6(&gLx&;4W6Gw4{D*wfS3o19dXHEZ9QGv_W^?mxgNHof7g=$dtjwaLZV z)$BKp-m~N5>$f=Yk+Yzx?Q{3()!7f8eS7zhvETo^{`&m=Ukk-PEN_(7-jMqGb;k_e z7oD=w1?t~|rtNE2SM<|4;GoYqb58yJ(-~G~BI~^7{g&vN|Gmd+?ZtmruD!gw*Y|Gu zu^EY#^(+C~fdQ{m6%tXBl30>zm0Xkxq!<_~ZW$XH7+o+mxMpg?X=t>`$c#ZLmzi6e pnVG@iH!GWRd~hF%zTEtj%(O~^`V@t=4+8Zuc)I$ztaD0e0s!9BQHcNm diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index df3591554e282985e7fe9f808e846045eccb9621..e7b02cc36ff55d7d13ca3575b386bb1576891e45 100644 GIT binary patch delta 4266 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 delta 2423 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 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index ebc3324f78cb3c1e19f0802cc53f299808b64467..b41e4253dd56e260b0137c85190dad6d2012a36b 100644 GIT binary patch literal 7876 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 ip)vknSGsvPxHty1(q5VBq2s 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 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 8e55509d82ddacf9cd1c394e13aa38ec547c49ff..5ec22890168987242743b88e61250291e2b38b0e 100644 GIT binary patch literal 12102 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 From 7b115402824466355c7bd781048a49cd9b0836d8 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 15 Mar 2020 09:14:08 +0800 Subject: [PATCH 073/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/res/drawable/ic_bottom_books_e.xml | 14 ++---- .../main/res/drawable/ic_bottom_books_s.xml | 47 ++++++++++++++----- .../main/res/drawable/ic_bottom_explore_e.xml | 8 ++-- .../main/res/drawable/ic_bottom_explore_s.xml | 22 +++++++-- .../main/res/drawable/ic_bottom_person_e.xml | 8 ++-- .../main/res/drawable/ic_bottom_person_s.xml | 43 +++++++++++++---- .../res/drawable/ic_bottom_rss_feed_e.xml | 12 ++--- .../res/drawable/ic_bottom_rss_feed_s.xml | 21 +++++++-- 8 files changed, 124 insertions(+), 51 deletions(-) diff --git a/app/src/main/res/drawable/ic_bottom_books_e.xml b/app/src/main/res/drawable/ic_bottom_books_e.xml index d99a276ba..16efedae5 100644 --- a/app/src/main/res/drawable/ic_bottom_books_e.xml +++ b/app/src/main/res/drawable/ic_bottom_books_e.xml @@ -4,15 +4,9 @@ android:viewportWidth="24" android:viewportHeight="24"> + android:pathData="M20.5,5a2.54,2.54 0,0 1,1.1 -0.48,0.49 0.49,0 0,0 0.4,-0.48V3.5a0.5,0.5 0,0 0,-0.5 -0.5H6.17A4.12,4.12 0,0 0,2 6.61,4 4,0 0,0 6,11H21.5a0.5,0.5 0,0 0,0.5 -0.5V10a0.49,0.49 0,0 0,-0.4 -0.48A2.49,2.49 0,0 1,20.5 5ZM6,9.5A2.51,2.51 0,0 1,3.51 6.74,2.61 2.61,0 0,1 6.15,4.5H18.9a3.92,3.92 0,0 0,0 5Z" + android:fillColor="#2f45a6" /> - - + android:pathData="M3.5,19a2.54,2.54 0,0 1,-1.1 0.48A0.49,0.49 0,0 0,2 20v0.55a0.5,0.5 0,0 0,0.5 0.5H17.83A4.12,4.12 0,0 0,22 17.39,4 4,0 0,0 18,13H2.5a0.5,0.5 0,0 0,-0.5 0.5v0.55a0.49,0.49 0,0 0,0.4 0.48A2.54,2.54 0,0 1,3.5 15a2.48,2.48 0,0 1,0 4ZM18,14.5a2.51,2.51 0,0 1,2.49 2.76,2.61 2.61,0 0,1 -2.64,2.24H5.1a3.92,3.92 0,0 0,0 -5Z" + android:fillColor="#2f45a6" /> diff --git a/app/src/main/res/drawable/ic_bottom_books_s.xml b/app/src/main/res/drawable/ic_bottom_books_s.xml index 7ab340659..0c6d1144b 100644 --- a/app/src/main/res/drawable/ic_bottom_books_s.xml +++ b/app/src/main/res/drawable/ic_bottom_books_s.xml @@ -1,18 +1,41 @@ - - - + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_bottom_explore_e.xml b/app/src/main/res/drawable/ic_bottom_explore_e.xml index 13db8dc28..37f7a5929 100644 --- a/app/src/main/res/drawable/ic_bottom_explore_e.xml +++ b/app/src/main/res/drawable/ic_bottom_explore_e.xml @@ -4,9 +4,9 @@ android:viewportWidth="24" android:viewportHeight="24"> + android:pathData="M12,3.5A8.5,8.5 0,1 1,3.5 12,8.51 8.51,0 0,1 12,3.5M12,2A10,10 0,1 0,22 12,10 10,0 0,0 12,2Z" + android:fillColor="#2f45a6" /> + android:pathData="M14.23,9.82 L13,12.91 9.87,14.18l1.27,-3.09 3.09,-1.27m2.38,-2.57h-0.08L10.06,9.9A0.2,0.2 0,0 0,10 10L7.31,16.48a0.2,0.2 0,0 0,0.18 0.27h0.08L14,14.1a0.2,0.2 0,0 0,0.11 -0.11l2.64,-6.47a0.2,0.2 0,0 0,-0.18 -0.27Z" + android:fillColor="#2f45a6" /> diff --git a/app/src/main/res/drawable/ic_bottom_explore_s.xml b/app/src/main/res/drawable/ic_bottom_explore_s.xml index df805a464..be7cba1eb 100644 --- a/app/src/main/res/drawable/ic_bottom_explore_s.xml +++ b/app/src/main/res/drawable/ic_bottom_explore_s.xml @@ -1,10 +1,24 @@ - + + + + + + + + diff --git a/app/src/main/res/drawable/ic_bottom_person_e.xml b/app/src/main/res/drawable/ic_bottom_person_e.xml index 2ddd441dc..e14f45566 100644 --- a/app/src/main/res/drawable/ic_bottom_person_e.xml +++ b/app/src/main/res/drawable/ic_bottom_person_e.xml @@ -4,9 +4,9 @@ android:viewportWidth="24" android:viewportHeight="24"> + android:pathData="M4.5,20A3.5,3.5 0,0 1,8 16.5h8A3.5,3.5 0,0 1,19.5 20v2h0.7a0.8,0.8 0,0 0,0.8 -0.8V20a5,5 0,0 0,-5 -5H8a5,5 0,0 0,-5 5v1.2a0.8,0.8 0,0 0,0.8 0.8h0.7Z" + android:fillColor="#2f45a6" /> + android:pathData="M12,3.5a4,4 0,1 1,-4 4,4 4,0 0,1 4,-4M12,2a5.5,5.5 0,1 0,5.5 5.5A5.5,5.5 0,0 0,12 2Z" + android:fillColor="#2f45a6" /> diff --git a/app/src/main/res/drawable/ic_bottom_person_s.xml b/app/src/main/res/drawable/ic_bottom_person_s.xml index d2a5d99d8..be5213686 100644 --- a/app/src/main/res/drawable/ic_bottom_person_s.xml +++ b/app/src/main/res/drawable/ic_bottom_person_s.xml @@ -1,14 +1,41 @@ - - + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml b/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml index 2575ba9d4..08f219fcb 100644 --- a/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml +++ b/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml @@ -3,10 +3,10 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - - + + diff --git a/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml b/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml index 4105b0154..60374f709 100644 --- a/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml +++ b/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml @@ -1,9 +1,24 @@ - + + + + + + + + From 475dd5f21d34ab4c4bdba60f19cab4edc671424a Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 15 Mar 2020 10:20:58 +0800 Subject: [PATCH 074/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/build.gradle b/build.gradle index 839736b35..2511f97a1 100644 --- a/build.gradle +++ b/build.gradle @@ -15,6 +15,13 @@ buildscript { classpath 'com.google.gms:google-services:4.3.3' classpath 'io.fabric.tools:gradle:1.31.2' } + gradle.taskGraph.whenReady { + tasks.each { task -> + if (task.name.contains("crashlyticsUploadDeobsAppRelease")) { + task.enabled = false + } + } + } } allprojects { From 8cffb48c5a3a1714b8ba800d09634c36d98c8e44 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 15 Mar 2020 10:46:12 +0800 Subject: [PATCH 075/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/help/LauncherIconHelp.kt | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/LauncherIconHelp.kt b/app/src/main/java/io/legado/app/help/LauncherIconHelp.kt index 76bcd6116..70f72f55a 100644 --- a/app/src/main/java/io/legado/app/help/LauncherIconHelp.kt +++ b/app/src/main/java/io/legado/app/help/LauncherIconHelp.kt @@ -5,10 +5,7 @@ import android.content.pm.PackageManager import android.os.Build import io.legado.app.App import io.legado.app.R -import io.legado.app.ui.welcome.Launcher1 -import io.legado.app.ui.welcome.Launcher2 -import io.legado.app.ui.welcome.Launcher3 -import io.legado.app.ui.welcome.WelcomeActivity +import io.legado.app.ui.welcome.* import org.jetbrains.anko.toast /** @@ -20,7 +17,8 @@ object LauncherIconHelp { private val componentNames = arrayListOf( ComponentName(App.INSTANCE, Launcher1::class.java.name), ComponentName(App.INSTANCE, Launcher2::class.java.name), - ComponentName(App.INSTANCE, Launcher3::class.java.name) + ComponentName(App.INSTANCE, Launcher3::class.java.name), + ComponentName(App.INSTANCE, Launcher4::class.java.name) ) fun changeIcon(icon: String?) { From f2c223a9789358ec994641ab259576a2173ba052 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 15 Mar 2020 13:53:37 +0800 Subject: [PATCH 076/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/service/help/ReadBook.kt | 19 ++++++++++++++----- .../app/ui/book/read/ReadBookViewModel.kt | 8 ++++++-- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/io/legado/app/service/help/ReadBook.kt b/app/src/main/java/io/legado/app/service/help/ReadBook.kt index 85f2fff45..7b61ca628 100644 --- a/app/src/main/java/io/legado/app/service/help/ReadBook.kt +++ b/app/src/main/java/io/legado/app/service/help/ReadBook.kt @@ -36,7 +36,7 @@ object ReadBook { var webBook: WebBook? = null private val loadingChapters = arrayListOf() - fun resetData(book: Book) { + fun resetData(book: Book, noSource: () -> Unit) { this.book = book titleDate.postValue(book.name) durChapterIndex = book.durChapterIndex @@ -46,12 +46,21 @@ object ReadBook { prevTextChapter = null curTextChapter = null nextTextChapter = null - upWebBook(book.origin) + upWebBook(book.origin, noSource) } - fun upWebBook(origin: String) { - val bookSource = App.db.bookSourceDao().getBookSource(origin) - webBook = if (bookSource != null) WebBook(bookSource) else null + fun upWebBook(origin: String, noSource: () -> Unit) { + if (origin == BookType.local) { + webBook = null + } else { + val bookSource = App.db.bookSourceDao().getBookSource(origin) + if (bookSource != null) { + webBook = WebBook(bookSource) + } else { + webBook = null + noSource.invoke() + } + } } fun moveToNextPage() { diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index 2ebab7875..2ce667b14 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -39,7 +39,9 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { private fun initBook(book: Book) { if (ReadBook.book?.bookUrl != book.bookUrl) { - ReadBook.resetData(book) + ReadBook.resetData(book) { + autoChangeSource() + } isInitFinish = true ReadBook.chapterSize = App.db.bookChapterDao().getChapterCount(book.bookUrl) if (ReadBook.chapterSize == 0) { @@ -60,7 +62,9 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { } else { isInitFinish = true ReadBook.titleDate.postValue(book.name) - ReadBook.upWebBook(book.origin) + ReadBook.upWebBook(book.origin) { + autoChangeSource() + } ReadBook.chapterSize = App.db.bookChapterDao().getChapterCount(book.bookUrl) if (ReadBook.chapterSize == 0) { if (book.tocUrl.isEmpty()) { From a767619320ea9efaa1a16c9cb6c35287f9172c54 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 15 Mar 2020 17:45:51 +0800 Subject: [PATCH 077/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 7 ------- 1 file changed, 7 deletions(-) diff --git a/build.gradle b/build.gradle index 2511f97a1..839736b35 100644 --- a/build.gradle +++ b/build.gradle @@ -15,13 +15,6 @@ buildscript { classpath 'com.google.gms:google-services:4.3.3' classpath 'io.fabric.tools:gradle:1.31.2' } - gradle.taskGraph.whenReady { - tasks.each { task -> - if (task.name.contains("crashlyticsUploadDeobsAppRelease")) { - task.enabled = false - } - } - } } allprojects { From 9588c1a62213a9ae9900752c291690f5f469abfe Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 15 Mar 2020 18:48:03 +0800 Subject: [PATCH 078/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/data/dao/BookSourceDao.kt | 5 ++- .../main/java/io/legado/app/model/WebBook.kt | 42 +++++++++++-------- .../io/legado/app/service/help/ReadBook.kt | 15 +++---- .../app/ui/book/read/ReadBookViewModel.kt | 31 ++++++++++---- .../app/ui/book/read/page/TextPageFactory.kt | 9 ++++ 5 files changed, 69 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt b/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt index 9ce5c65be..55d5ada4c 100644 --- a/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt +++ b/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt @@ -50,9 +50,12 @@ interface BookSourceDao { @get:Query("select * from book_sources order by customOrder asc") val all: List - @get:Query("select * from book_sources where enabled = 1 order by customOrder asc") + @get:Query("select * from book_sources where enabled = 1 order by customOrder") val allEnabled: List + @get:Query("select * from book_sources where enabled = 1 and bookSourceType = 0 order by customOrder") + val allTextEnabled: List + @Query("select * from book_sources where bookSourceUrl = :key") fun getBookSource(key: String): BookSource? diff --git a/app/src/main/java/io/legado/app/model/WebBook.kt b/app/src/main/java/io/legado/app/model/WebBook.kt index 69dfb943c..7d14ea8bc 100644 --- a/app/src/main/java/io/legado/app/model/WebBook.kt +++ b/app/src/main/java/io/legado/app/model/WebBook.kt @@ -29,26 +29,34 @@ class WebBook(val bookSource: BookSource) { context: CoroutineContext = Dispatchers.IO ): Coroutine> { return Coroutine.async(scope, context) { - bookSource.searchUrl?.let { searchUrl -> - val analyzeUrl = AnalyzeUrl( - ruleUrl = searchUrl, - key = key, - page = page, - baseUrl = sourceUrl, - headerMapF = bookSource.getHeaderMap() - ) - val res = analyzeUrl.getResponseAwait(bookSource.bookSourceUrl) - BookList.analyzeBookList( - res.body, - bookSource, - analyzeUrl, - res.url, - true - ) - } ?: arrayListOf() + searchBookSuspend(key, page) } } + suspend fun searchBookSuspend( + key: String, + page: Int? = 1 + ): ArrayList { + bookSource.searchUrl?.let { searchUrl -> + val analyzeUrl = AnalyzeUrl( + ruleUrl = searchUrl, + key = key, + page = page, + baseUrl = sourceUrl, + headerMapF = bookSource.getHeaderMap() + ) + val res = analyzeUrl.getResponseAwait(bookSource.bookSourceUrl) + return BookList.analyzeBookList( + res.body, + bookSource, + analyzeUrl, + res.url, + true + ) + } + return arrayListOf() + } + /** * 发现 */ diff --git a/app/src/main/java/io/legado/app/service/help/ReadBook.kt b/app/src/main/java/io/legado/app/service/help/ReadBook.kt index 7b61ca628..a05009dc8 100644 --- a/app/src/main/java/io/legado/app/service/help/ReadBook.kt +++ b/app/src/main/java/io/legado/app/service/help/ReadBook.kt @@ -21,7 +21,6 @@ import org.jetbrains.anko.toast object ReadBook { - var titleDate = MutableLiveData() var book: Book? = null var inBookshelf = false @@ -34,9 +33,10 @@ object ReadBook { var curTextChapter: TextChapter? = null var nextTextChapter: TextChapter? = null var webBook: WebBook? = null + var msg: String? = null private val loadingChapters = arrayListOf() - fun resetData(book: Book, noSource: () -> Unit) { + fun resetData(book: Book, noSource: (name: String, author: String) -> Unit) { this.book = book titleDate.postValue(book.name) durChapterIndex = book.durChapterIndex @@ -46,19 +46,20 @@ object ReadBook { prevTextChapter = null curTextChapter = null nextTextChapter = null - upWebBook(book.origin, noSource) + upWebBook(book, noSource) } - fun upWebBook(origin: String, noSource: () -> Unit) { - if (origin == BookType.local) { + fun upWebBook(book: Book?, noSource: (name: String, author: String) -> Unit) { + book ?: return + if (book.origin == BookType.local) { webBook = null } else { - val bookSource = App.db.bookSourceDao().getBookSource(origin) + val bookSource = App.db.bookSourceDao().getBookSource(book.origin) if (bookSource != null) { webBook = WebBook(bookSource) } else { webBook = null - noSource.invoke() + noSource.invoke(book.name, book.author) } } } diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index 2ce667b14..3519f3b08 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -39,8 +39,8 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { private fun initBook(book: Book) { if (ReadBook.book?.bookUrl != book.bookUrl) { - ReadBook.resetData(book) { - autoChangeSource() + ReadBook.resetData(book) { name, author -> + autoChangeSource(name, author) } isInitFinish = true ReadBook.chapterSize = App.db.bookChapterDao().getChapterCount(book.bookUrl) @@ -62,8 +62,8 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { } else { isInitFinish = true ReadBook.titleDate.postValue(book.name) - ReadBook.upWebBook(book.origin) { - autoChangeSource() + ReadBook.upWebBook(book) { name, author -> + autoChangeSource(name, author) } ReadBook.chapterSize = App.db.bookChapterDao().getChapterCount(book.bookUrl) if (ReadBook.chapterSize == 0) { @@ -126,7 +126,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { } }?.onError { toast(R.string.error_load_toc) - } ?: autoChangeSource() + } ?: autoChangeSource(book.name, book.author) } } } @@ -155,8 +155,23 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { } } - private fun autoChangeSource() { + private fun autoChangeSource(name: String, author: String) { + execute { + App.db.bookSourceDao().allTextEnabled.forEach { + try { + val searchBooks = WebBook(it).searchBookSuspend(name) + + } catch (e: Exception) { + } + } + }.onStart { + ReadBook.msg = "正在自动换源" + ReadBook.callBack?.upContent() + }.onFinally { + ReadBook.msg = null + ReadBook.callBack?.upContent() + } } private fun upChangeDurChapterIndex(book: Book, chapters: List) { @@ -212,9 +227,9 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { execute { App.db.bookChapterDao().getChapter(book.bookUrl, ReadBook.durChapterIndex) ?.let { chapter -> - BookHelp.delContent(book, chapter) + BookHelp.delContent(book, chapter) ReadBook.loadContent(ReadBook.durChapterIndex) - } + } } } diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/TextPageFactory.kt b/app/src/main/java/io/legado/app/ui/book/read/page/TextPageFactory.kt index a867daf3d..27a407cd6 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/TextPageFactory.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/TextPageFactory.kt @@ -59,6 +59,9 @@ class TextPageFactory(dataSource: DataSource) : PageFactory(dataSource override val currentPage: TextPage get() = with(dataSource) { + ReadBook.msg?.let { + return@with TextPage(text = it).format() + } currentChapter?.let { return@with it.page(pageIndex) ?: TextPage(title = it.title).format() @@ -68,6 +71,9 @@ class TextPageFactory(dataSource: DataSource) : PageFactory(dataSource override val nextPage: TextPage get() = with(dataSource) { + ReadBook.msg?.let { + return@with TextPage(text = it).format() + } currentChapter?.let { if (pageIndex < it.pageSize() - 1) { return@with it.page(pageIndex + 1)?.removePageAloudSpan() @@ -86,6 +92,9 @@ class TextPageFactory(dataSource: DataSource) : PageFactory(dataSource override val prevPage: TextPage get() = with(dataSource) { + ReadBook.msg?.let { + return@with TextPage(text = it).format() + } if (pageIndex > 0) { currentChapter?.let { return@with it.page(pageIndex - 1)?.removePageAloudSpan() From 10d239cef568ae0900640b29fca1d4a1db748fe2 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 15 Mar 2020 19:03:27 +0800 Subject: [PATCH 079/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/main/bookshelf/books/BooksAdapterGrid.kt | 2 -- app/src/main/res/layout/item_bookshelf_grid.xml | 13 ------------- 2 files changed, 15 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BooksAdapterGrid.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BooksAdapterGrid.kt index d647afd3b..1438c4507 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BooksAdapterGrid.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BooksAdapterGrid.kt @@ -21,7 +21,6 @@ class BooksAdapterGrid(context: Context, private val callBack: CallBack) : if (bundle == null) { ATH.applyBackgroundTint(this) tv_name.text = item.name - bv_author.text = item.author iv_cover.load(item.getDisplayCover(), item.name, item.author) if (item.origin != BookType.local && callBack.isUpdate(item.bookUrl)) { bv_unread.invisible() @@ -35,7 +34,6 @@ class BooksAdapterGrid(context: Context, private val callBack: CallBack) : bundle.keySet().map { when (it) { "name" -> tv_name.text = item.name - "author" -> bv_author.text = item.author "cover" -> iv_cover.load(item.getDisplayCover(), item.name, item.author) "refresh" -> if (item.origin != BookType.local && callBack.isUpdate(item.bookUrl)) { bv_unread.invisible() diff --git a/app/src/main/res/layout/item_bookshelf_grid.xml b/app/src/main/res/layout/item_bookshelf_grid.xml index 666d67098..a038fa4fb 100644 --- a/app/src/main/res/layout/item_bookshelf_grid.xml +++ b/app/src/main/res/layout/item_bookshelf_grid.xml @@ -48,19 +48,6 @@ tools:ignore="RtlHardcoded" /> - - Date: Sun, 15 Mar 2020 19:13:20 +0800 Subject: [PATCH 080/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/ui/book/group/GroupManageDialog.kt | 2 ++ .../io/legado/app/ui/rss/source/manage/GroupManageDialog.kt | 6 ++---- app/src/main/res/layout/dialog_recycler_view.xml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt b/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt index 1086f0416..8be9ed34f 100644 --- a/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt @@ -33,6 +33,7 @@ import io.legado.app.ui.widget.recycler.VerticalDivider import io.legado.app.utils.applyTint import io.legado.app.utils.getViewModel import io.legado.app.utils.requestInputMethod +import io.legado.app.utils.visible import kotlinx.android.synthetic.main.dialog_edit_text.view.* import kotlinx.android.synthetic.main.dialog_recycler_view.* import kotlinx.android.synthetic.main.item_group_manage.view.* @@ -74,6 +75,7 @@ class GroupManageDialog : DialogFragment(), Toolbar.OnMenuItemClickListener { recycler_view.addItemDecoration(VerticalDivider(requireContext())) recycler_view.adapter = adapter tv_ok.setTextColor(requireContext().accentColor) + tv_ok.visible() tv_ok.onClick { dismiss() } App.db.bookGroupDao().liveDataAll().observe(viewLifecycleOwner, Observer { val diffResult = diff --git a/app/src/main/java/io/legado/app/ui/rss/source/manage/GroupManageDialog.kt b/app/src/main/java/io/legado/app/ui/rss/source/manage/GroupManageDialog.kt index ed09cec93..ce2313f5a 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/manage/GroupManageDialog.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/manage/GroupManageDialog.kt @@ -24,10 +24,7 @@ import io.legado.app.lib.dialogs.noButton import io.legado.app.lib.dialogs.yesButton import io.legado.app.lib.theme.accentColor import io.legado.app.ui.widget.recycler.VerticalDivider -import io.legado.app.utils.applyTint -import io.legado.app.utils.getViewModelOfActivity -import io.legado.app.utils.requestInputMethod -import io.legado.app.utils.splitNotBlank +import io.legado.app.utils.* import kotlinx.android.synthetic.main.dialog_edit_text.view.* import kotlinx.android.synthetic.main.dialog_recycler_view.* import kotlinx.android.synthetic.main.item_group_manage.view.* @@ -68,6 +65,7 @@ class GroupManageDialog : DialogFragment(), Toolbar.OnMenuItemClickListener { recycler_view.addItemDecoration(VerticalDivider(requireContext())) recycler_view.adapter = adapter tv_ok.setTextColor(requireContext().accentColor) + tv_ok.visible() tv_ok.onClick { dismiss() } App.db.rssSourceDao().liveGroup().observe(viewLifecycleOwner, Observer { val groups = linkedSetOf() diff --git a/app/src/main/res/layout/dialog_recycler_view.xml b/app/src/main/res/layout/dialog_recycler_view.xml index 98f67043f..5b1d900a9 100644 --- a/app/src/main/res/layout/dialog_recycler_view.xml +++ b/app/src/main/res/layout/dialog_recycler_view.xml @@ -15,7 +15,7 @@ android:id="@+id/recycler_view" android:background="@color/background_card" android:layout_width="match_parent" - android:layout_height="match_parent" + android:layout_height="0dp" android:layout_weight="1" /> From ba0937e2430b98925a9e233f6cc7635beb1ad0ee Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 15 Mar 2020 19:41:14 +0800 Subject: [PATCH 081/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 3 +++ .../io/legado/app/ui/book/read/ReadBookViewModel.kt | 13 +++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 8f2068940..250688fe3 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -2,6 +2,9 @@ * 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。 * 请关注[开源阅读软件]()支持我,同时关注合作公众号[小说拾遗](),阅读公众号小编。 +**2020/03/14** +* 加载正文无书源时自动换源 + **2020/03/14** * 修改导航栏图标 diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index 3519f3b08..75021a323 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -157,12 +157,17 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { private fun autoChangeSource(name: String, author: String) { execute { - App.db.bookSourceDao().allTextEnabled.forEach { + App.db.bookSourceDao().allTextEnabled.forEach { source -> try { - val searchBooks = WebBook(it).searchBookSuspend(name) - + val searchBooks = WebBook(source).searchBookSuspend(name) + searchBooks.getOrNull(0)?.let { + if (it.name == name && (it.author == author || author == "")) { + changeTo(it.toBook()) + return@forEach + } + } } catch (e: Exception) { - + //nothing } } }.onStart { From 1523fd6487dd66695c68d64c951f9ddd0cc25745 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 15 Mar 2020 19:48:25 +0800 Subject: [PATCH 082/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/utils/DocumentUtils.kt | 2 +- app/src/main/res/menu/main_bnv.xml | 22 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/io/legado/app/utils/DocumentUtils.kt b/app/src/main/java/io/legado/app/utils/DocumentUtils.kt index f4fd0e8eb..b53cebb14 100644 --- a/app/src/main/java/io/legado/app/utils/DocumentUtils.kt +++ b/app/src/main/java/io/legado/app/utils/DocumentUtils.kt @@ -98,7 +98,7 @@ object DocumentUtils { DocumentsContract.Document.COLUMN_LAST_MODIFIED, DocumentsContract.Document.COLUMN_SIZE, DocumentsContract.Document.COLUMN_MIME_TYPE - ), null, null, null + ), null, null, DocumentsContract.Document.COLUMN_DISPLAY_NAME ) c?.let { val ici = c.getColumnIndex(DocumentsContract.Document.COLUMN_DOCUMENT_ID) diff --git a/app/src/main/res/menu/main_bnv.xml b/app/src/main/res/menu/main_bnv.xml index 15b355b31..9197bec7b 100644 --- a/app/src/main/res/menu/main_bnv.xml +++ b/app/src/main/res/menu/main_bnv.xml @@ -4,20 +4,20 @@ tools:showIn="bottom_navigation_view"> + android:id="@+id/menu_bookshelf" + android:icon="@drawable/ic_bottom_books" + android:title="@string/bookshelf" /> + android:title="@string/find" /> + android:id="@+id/menu_rss" + android:icon="@drawable/ic_bottom_rss_feed" + android:title="@string/rss" /> + android:id="@+id/menu_my_config" + android:icon="@drawable/ic_bottom_person" + android:title="@string/my" /> From e65efa516947cd4253d95af41071ded9dbb5eb44 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 15 Mar 2020 19:58:52 +0800 Subject: [PATCH 083/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/data/entities/Book.kt | 2 +- app/src/main/res/values/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/data/entities/Book.kt b/app/src/main/java/io/legado/app/data/entities/Book.kt index 833561f1b..d9acbb34e 100644 --- a/app/src/main/java/io/legado/app/data/entities/Book.kt +++ b/app/src/main/java/io/legado/app/data/entities/Book.kt @@ -32,7 +32,7 @@ data class Book( var customIntro: String? = null, // 简介内容(用户修改) var charset: String? = null, // 自定义字符集名称(仅适用于本地书籍) var type: Int = 0, // @BookType - var group: Int = 0, // 自定义分组索引号 + var group: Int = 1, // 自定义分组索引号 var latestChapterTitle: String? = null, // 最新章节标题 var latestChapterTime: Long = System.currentTimeMillis(), // 最新章节标题更新时间 var lastCheckTime: Long = System.currentTimeMillis(), // 最近一次更新书籍信息的时间 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a505fa785..4e5410f09 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -225,7 +225,7 @@ 内容简介 简介:%s 打开外部书籍 - 来源:%s + 来源: %s 本地导入 导入在线规则 检查更新间隔 From 8a3febd0074f3713168393ac7a32775275fc9a7e Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 15 Mar 2020 20:01:00 +0800 Subject: [PATCH 084/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/data/entities/Book.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/data/entities/Book.kt b/app/src/main/java/io/legado/app/data/entities/Book.kt index d9acbb34e..9e50a6d4c 100644 --- a/app/src/main/java/io/legado/app/data/entities/Book.kt +++ b/app/src/main/java/io/legado/app/data/entities/Book.kt @@ -31,7 +31,7 @@ data class Book( var intro: String? = null, // 简介内容(书源获取) var customIntro: String? = null, // 简介内容(用户修改) var charset: String? = null, // 自定义字符集名称(仅适用于本地书籍) - var type: Int = 0, // @BookType + var type: Int = 0, // 0:text 1:audio var group: Int = 1, // 自定义分组索引号 var latestChapterTitle: String? = null, // 最新章节标题 var latestChapterTime: Long = System.currentTimeMillis(), // 最新章节标题更新时间 From 0a3791f87f4b0c83f24c44deb034f72d49dfbf7e Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 15 Mar 2020 20:15:15 +0800 Subject: [PATCH 085/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values/dimens.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 6b7b8e2b1..b1a2429b4 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,11 +1,12 @@ - + 16dp 16dp 8dp 176dp 16dp - + 12sp + 12sp 14sp 16sp From 1348b431986cb6c317507d1d9f15bfcd10706a04 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 15 Mar 2020 20:21:59 +0800 Subject: [PATCH 086/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/lib/theme/ATH.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/lib/theme/ATH.kt b/app/src/main/java/io/legado/app/lib/theme/ATH.kt index 0bcbb114b..19304862c 100644 --- a/app/src/main/java/io/legado/app/lib/theme/ATH.kt +++ b/app/src/main/java/io/legado/app/lib/theme/ATH.kt @@ -199,13 +199,12 @@ object ATH { fun applyBottomNavigationColor(bottomBar: BottomNavigationView?) { bottomBar?.apply { - setBackgroundColor(ThemeStore.backgroundColor(context)) + setBackgroundColor(ThemeStore.bottomBackground(context)) val colorStateList = Selector.colorBuild() .setDefaultColor(context.getCompatColor(R.color.btn_bg_press_tp)) .setSelectedColor(ThemeStore.accentColor(bottom_navigation_view.context)).create() itemIconTintList = colorStateList itemTextColor = colorStateList - setBackgroundColor(ThemeStore.bottomBackground(context)) } } From 3e7fb6193e5f8c4b0015afb3eee503bbb467dffb Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 15 Mar 2020 20:26:48 +0800 Subject: [PATCH 087/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/activity_main.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 9f2d2044e..a36be8b9d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,6 +11,7 @@ android:elevation="10dp" android:background="@color/background" app:labelVisibilityMode="labeled" + app:itemIconSize="26dp" app:menu="@menu/main_bnv" app:layout_constraintBottom_toBottomOf="parent" /> From 81492a19a2fd5c38ccabdf5edd13935817ebc682 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 15 Mar 2020 20:36:22 +0800 Subject: [PATCH 088/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/activity_main.xml | 3 +-- app/src/main/res/values/dimens.xml | 4 +--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a36be8b9d..77ed85415 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -10,8 +10,7 @@ android:layout_height="wrap_content" android:elevation="10dp" android:background="@color/background" - app:labelVisibilityMode="labeled" - app:itemIconSize="26dp" + app:labelVisibilityMode="unlabeled" app:menu="@menu/main_bnv" app:layout_constraintBottom_toBottomOf="parent" /> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index b1a2429b4..f7ecf2030 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,12 +1,10 @@ - + 16dp 16dp 8dp 176dp 16dp - 12sp - 12sp 14sp 16sp From e14498b9e81ae73c90f16ad0ed9aa13dd096ea3e Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 15 Mar 2020 21:08:26 +0800 Subject: [PATCH 089/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/help.md | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/assets/help.md b/app/src/main/assets/help.md index 124410667..145139a13 100644 --- a/app/src/main/assets/help.md +++ b/app/src/main/assets/help.md @@ -9,6 +9,7 @@ * 左下角选择书源文件所在的路径; * 点击书源文件导入; * 导入后返回书源管理界面; +* 新版qq下载路径:Android/data/com.tencent.mobileqq/Tencent/QQfile_recv/ 3.如何新建大佬发的单独书源? * 复制书源代码; From 94b71960669162801f9e935b556f42920599b517 Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 16 Mar 2020 15:41:46 +0800 Subject: [PATCH 090/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/dialog_read_aloud.xml | 6 +++++- app/src/main/res/values/strings.xml | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/dialog_read_aloud.xml b/app/src/main/res/layout/dialog_read_aloud.xml index 278117426..504865171 100644 --- a/app/src/main/res/layout/dialog_read_aloud.xml +++ b/app/src/main/res/layout/dialog_read_aloud.xml @@ -221,6 +221,7 @@ android:layout_gravity="center_horizontal" android:layout_marginTop="3dp" android:text="@string/chapter_list" + android:maxLines="1" android:textColor="@color/tv_text_default" android:textSize="12sp" /> @@ -256,6 +257,7 @@ android:layout_gravity="center_horizontal" android:layout_marginTop="3dp" android:text="@string/main_menu" + android:maxLines="1" android:textColor="@color/tv_text_default" android:textSize="12sp" /> @@ -291,6 +293,7 @@ android:layout_gravity="center_horizontal" android:layout_marginTop="3dp" android:text="@string/to_backstage" + android:maxLines="1" android:textColor="@color/tv_text_default" android:textSize="12sp" /> @@ -325,7 +328,8 @@ android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="3dp" - android:text="@string/aloud_config" + android:text="@string/setting" + android:maxLines="1" android:textColor="@color/tv_text_default" android:textSize="12sp" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4e5410f09..41c3005f7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -581,7 +581,7 @@ 类型: 文本 音频 - 转到后台 + 后台 正在导入 正在导出 自定义翻页按键 From c35c9d02672accc0a68558f4a91aa19dbe30e796 Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 16 Mar 2020 18:41:09 +0800 Subject: [PATCH 091/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/ui/book/read/ReadBookActivity.kt | 2 ++ app/src/main/java/io/legado/app/ui/main/MainActivity.kt | 8 -------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index 138d676be..6d636f728 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -25,6 +25,7 @@ import io.legado.app.data.entities.BookChapter import io.legado.app.help.BookHelp import io.legado.app.help.ReadBookConfig import io.legado.app.help.coroutine.Coroutine +import io.legado.app.help.storage.Backup import io.legado.app.help.storage.SyncBookProgress import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.noButton @@ -684,6 +685,7 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo page_view.onDestroy() if (!BuildConfig.DEBUG) { SyncBookProgress.uploadBookProgress() + Backup.autoBack(this) } } diff --git a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt index 96424cc9b..0aa49ede7 100644 --- a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt +++ b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt @@ -15,7 +15,6 @@ import io.legado.app.base.VMBaseActivity import io.legado.app.constant.EventBus import io.legado.app.constant.PreferKey import io.legado.app.help.AppConfig -import io.legado.app.help.storage.Backup import io.legado.app.lib.theme.ATH import io.legado.app.service.BaseReadAloudService import io.legado.app.service.help.ReadAloud @@ -114,13 +113,6 @@ class MainActivity : VMBaseActivity(R.layout.activity_main), return super.onKeyUp(keyCode, event) } - override fun finish() { - if (!BuildConfig.DEBUG) { - Backup.autoBack(this) - } - super.finish() - } - override fun onDestroy() { super.onDestroy() ReadAloud.stop(this) From 12a90a4531d8def1667d0e66ddef7e66651bbf5b Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 16 Mar 2020 19:33:25 +0800 Subject: [PATCH 092/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/book/read/page/ContentView.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt index 6dc89f716..b748c2b4a 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt @@ -108,8 +108,10 @@ class ContentView(context: Context) : FrameLayout(context) { } } - fun setContent(textPage: TextPage) { + fun setContent(textPage: TextPage, resetPageOffset: Boolean) { setProgress(textPage) + if (resetPageOffset) + resetPageOffset() content_text_view.setContent(textPage) } From bbc5b3637bda8850f9336e5f00f83d18c66359db Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 16 Mar 2020 20:06:47 +0800 Subject: [PATCH 093/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/help/storage/Restore.kt | 2 +- .../io/legado/app/service/help/ReadBook.kt | 51 +++++++++++-------- .../app/ui/book/read/ReadBookActivity.kt | 14 ++--- .../app/ui/book/read/ReadBookViewModel.kt | 14 ++--- .../app/ui/book/read/page/ContentView.kt | 2 +- .../app/ui/book/read/page/DataSource.kt | 2 +- .../legado/app/ui/book/read/page/PageView.kt | 6 +-- .../app/ui/book/read/page/TextPageFactory.kt | 4 +- 8 files changed, 52 insertions(+), 43 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/storage/Restore.kt b/app/src/main/java/io/legado/app/help/storage/Restore.kt index 5393249c3..f174a6f5e 100644 --- a/app/src/main/java/io/legado/app/help/storage/Restore.kt +++ b/app/src/main/java/io/legado/app/help/storage/Restore.kt @@ -128,7 +128,7 @@ object Restore { bodyIndentCount = App.INSTANCE.getPrefInt(PreferKey.bodyIndent, 2) } ChapterProvider.upStyle() - ReadBook.loadContent() + ReadBook.loadContent(resetPageOffset = false) } withContext(Main) { if (AppConfig.isNightTheme && AppCompatDelegate.getDefaultNightMode() != AppCompatDelegate.MODE_NIGHT_YES) { diff --git a/app/src/main/java/io/legado/app/service/help/ReadBook.kt b/app/src/main/java/io/legado/app/service/help/ReadBook.kt index a05009dc8..68b1601ac 100644 --- a/app/src/main/java/io/legado/app/service/help/ReadBook.kt +++ b/app/src/main/java/io/legado/app/service/help/ReadBook.kt @@ -79,11 +79,11 @@ object ReadBook { nextTextChapter = null book?.let { if (curTextChapter == null) { - loadContent(durChapterIndex, upContent) + loadContent(durChapterIndex, upContent, false) } else if (upContent) { callBack?.upContent() } - loadContent(durChapterIndex.plus(1), upContent) + loadContent(durChapterIndex.plus(1), upContent, false) GlobalScope.launch(Dispatchers.IO) { for (i in 2..10) { delay(100) @@ -109,11 +109,11 @@ object ReadBook { prevTextChapter = null book?.let { if (curTextChapter == null) { - loadContent(durChapterIndex, upContent) + loadContent(durChapterIndex, upContent, false) } else if (upContent) { callBack?.upContent() } - loadContent(durChapterIndex.minus(1), upContent) + loadContent(durChapterIndex.minus(1), upContent, false) GlobalScope.launch(Dispatchers.IO) { for (i in -5..-2) { delay(100) @@ -194,21 +194,21 @@ object ReadBook { /** * 加载章节内容 */ - fun loadContent() { - loadContent(durChapterIndex) - loadContent(durChapterIndex + 1) - loadContent(durChapterIndex - 1) + fun loadContent(resetPageOffset: Boolean) { + loadContent(durChapterIndex, resetPageOffset = resetPageOffset) + loadContent(durChapterIndex + 1, resetPageOffset = resetPageOffset) + loadContent(durChapterIndex - 1, resetPageOffset = resetPageOffset) } - fun loadContent(index: Int, upContent: Boolean = true) { + fun loadContent(index: Int, upContent: Boolean = true, resetPageOffset: Boolean) { book?.let { book -> if (addLoading(index)) { Coroutine.async { App.db.bookChapterDao().getChapter(book.bookUrl, index)?.let { chapter -> BookHelp.getContent(book, chapter)?.let { - contentLoadFinish(chapter, it, upContent) + contentLoadFinish(chapter, it, upContent, resetPageOffset) removeLoading(chapter.index) - } ?: download(chapter) + } ?: download(chapter, resetPageOffset = resetPageOffset) } ?: removeLoading(index) }.onError { removeLoading(index) @@ -226,7 +226,7 @@ object ReadBook { if (BookHelp.hasContent(book, chapter)) { removeLoading(chapter.index) } else { - download(chapter) + download(chapter, false) } } ?: removeLoading(index) }.onError { @@ -236,20 +236,28 @@ object ReadBook { } } - private fun download(chapter: BookChapter) { + private fun download(chapter: BookChapter, resetPageOffset: Boolean) { book?.let { book -> webBook?.getContent(book, chapter) ?.onSuccess(Dispatchers.IO) { content -> if (content.isNullOrEmpty()) { - contentLoadFinish(chapter, App.INSTANCE.getString(R.string.content_empty)) + contentLoadFinish( + chapter, + App.INSTANCE.getString(R.string.content_empty), + resetPageOffset = resetPageOffset + ) removeLoading(chapter.index) } else { BookHelp.saveContent(book, chapter, content) - contentLoadFinish(chapter, content) + contentLoadFinish(chapter, content, resetPageOffset = resetPageOffset) removeLoading(chapter.index) } }?.onError { - contentLoadFinish(chapter, it.localizedMessage ?: "未知错误") + contentLoadFinish( + chapter, + it.localizedMessage ?: "未知错误", + resetPageOffset = resetPageOffset + ) removeLoading(chapter.index) } } @@ -275,7 +283,8 @@ object ReadBook { private fun contentLoadFinish( chapter: BookChapter, content: String, - upContent: Boolean = true + upContent: Boolean = true, + resetPageOffset: Boolean ) { Coroutine.async { if (chapter.index in durChapterIndex - 1..durChapterIndex + 1) { @@ -289,18 +298,18 @@ object ReadBook { when (chapter.index) { durChapterIndex -> { curTextChapter = ChapterProvider.getTextChapter(chapter, c, chapterSize) - if (upContent) callBack?.upContent() + if (upContent) callBack?.upContent(resetPageOffset = resetPageOffset) callBack?.upView() curPageChanged() callBack?.contentLoadFinish() } durChapterIndex - 1 -> { prevTextChapter = ChapterProvider.getTextChapter(chapter, c, chapterSize) - if (upContent) callBack?.upContent(-1) + if (upContent) callBack?.upContent(-1, resetPageOffset) } durChapterIndex + 1 -> { nextTextChapter = ChapterProvider.getTextChapter(chapter, c, chapterSize) - if (upContent) callBack?.upContent(1) + if (upContent) callBack?.upContent(1, resetPageOffset) } } } @@ -326,7 +335,7 @@ object ReadBook { } interface CallBack { - fun upContent(relativePosition: Int = 0) + fun upContent(relativePosition: Int = 0, resetPageOffset: Boolean = true) fun upView() fun upPageProgress() fun contentLoadFinish() diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index 6d636f728..6808baf83 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -116,7 +116,7 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) - ReadBook.loadContent() + ReadBook.loadContent(resetPageOffset = false) } override fun onResume() { @@ -482,9 +482,9 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo /** * 更新内容 */ - override fun upContent(relativePosition: Int) { + override fun upContent(relativePosition: Int, resetPageOffset: Boolean) { launch { - page_view.upContent(relativePosition) + page_view.upContent(relativePosition, resetPageOffset) } } @@ -580,7 +580,7 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo override fun onReplaceRuleSave() { Coroutine.async { BookHelp.upReplaceRules() - ReadBook.loadContent() + ReadBook.loadContent(resetPageOffset = false) } } @@ -709,9 +709,9 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo page_view.upBg() page_view.upStyle() if (it) { - ReadBook.loadContent() + ReadBook.loadContent(resetPageOffset = false) } else { - page_view.upContent() + page_view.upContent(resetPageOffset = false) } } observeEvent(EventBus.ALOUD_STATE) { @@ -720,7 +720,7 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo val page = textChapter.page(ReadBook.durPageIndex) if (page != null) { page.removePageAloudSpan() - page_view.upContent() + page_view.upContent(resetPageOffset = false) } } } diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index 75021a323..6c6d52aca 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -54,7 +54,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { if (ReadBook.durChapterIndex > ReadBook.chapterSize - 1) { ReadBook.durChapterIndex = ReadBook.chapterSize - 1 } - ReadBook.loadContent() + ReadBook.loadContent(resetPageOffset = true) } if (ReadBook.inBookshelf) { ReadBook.saveRead() @@ -74,7 +74,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { } } else { if (ReadBook.curTextChapter != null) { - ReadBook.callBack?.upContent() + ReadBook.callBack?.upContent(resetPageOffset = false) } } } @@ -107,7 +107,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { App.db.bookChapterDao().insert(*it.toTypedArray()) App.db.bookDao().update(book) ReadBook.chapterSize = it.size - ReadBook.loadContent() + ReadBook.loadContent(resetPageOffset = true) } } else { ReadBook.webBook?.getChapterList(book, this) @@ -117,7 +117,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { App.db.bookChapterDao().insert(*cList.toTypedArray()) App.db.bookDao().update(book) ReadBook.chapterSize = cList.size - ReadBook.loadContent() + ReadBook.loadContent(resetPageOffset = true) } else { changeDruChapterIndex(cList) } @@ -191,7 +191,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { App.db.bookDao().update(book) App.db.bookChapterDao().insert(*chapters.toTypedArray()) ReadBook.chapterSize = chapters.size - ReadBook.loadContent() + ReadBook.loadContent(resetPageOffset = true) } } @@ -205,7 +205,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { ReadBook.durPageIndex = pageIndex } ReadBook.saveRead() - ReadBook.loadContent() + ReadBook.loadContent(resetPageOffset = true) } fun removeFromBookshelf(success: (() -> Unit)?) { @@ -233,7 +233,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { App.db.bookChapterDao().getChapter(book.bookUrl, ReadBook.durChapterIndex) ?.let { chapter -> BookHelp.delContent(book, chapter) - ReadBook.loadContent(ReadBook.durChapterIndex) + ReadBook.loadContent(ReadBook.durChapterIndex, resetPageOffset = false) } } } diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt index b748c2b4a..1cc006512 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt @@ -108,7 +108,7 @@ class ContentView(context: Context) : FrameLayout(context) { } } - fun setContent(textPage: TextPage, resetPageOffset: Boolean) { + fun setContent(textPage: TextPage, resetPageOffset: Boolean = true) { setProgress(textPage) if (resetPageOffset) resetPageOffset() diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/DataSource.kt b/app/src/main/java/io/legado/app/ui/book/read/page/DataSource.kt index 4f7afa04f..3a128f969 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/DataSource.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/DataSource.kt @@ -17,5 +17,5 @@ interface DataSource { fun hasPrevChapter(): Boolean - fun upContent(relativePosition: Int = 0) + fun upContent(relativePosition: Int = 0, resetPageOffset: Boolean = true) } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt index 1b7b71b07..dd19fdc0e 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt @@ -38,7 +38,7 @@ class PageView(context: Context, attrs: AttributeSet) : prevPage.x = -w.toFloat() pageDelegate?.setViewSize(w, h) if (oldw != 0 && oldh != 0) { - ReadBook.loadContent() + ReadBook.loadContent(resetPageOffset = false) } } @@ -93,9 +93,9 @@ class PageView(context: Context, attrs: AttributeSet) : upContent() } - override fun upContent(relativePosition: Int) { + override fun upContent(relativePosition: Int, resetPageOffset: Boolean) { if (ReadBookConfig.isScroll) { - curPage.setContent(pageFactory.currentPage) + curPage.setContent(pageFactory.currentPage, resetPageOffset) } else { when (relativePosition) { -1 -> prevPage.setContent(pageFactory.prevPage) diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/TextPageFactory.kt b/app/src/main/java/io/legado/app/ui/book/read/page/TextPageFactory.kt index 27a407cd6..a38ed6e51 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/TextPageFactory.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/TextPageFactory.kt @@ -38,7 +38,7 @@ class TextPageFactory(dataSource: DataSource) : PageFactory(dataSource } else { ReadBook.setPageIndex(pageIndex.plus(1)) } - if (upContent) upContent() + if (upContent) upContent(resetPageOffset = false) true } else false @@ -51,7 +51,7 @@ class TextPageFactory(dataSource: DataSource) : PageFactory(dataSource } else { ReadBook.setPageIndex(pageIndex.minus(1)) } - if (upContent) upContent() + if (upContent) upContent(resetPageOffset = false) true } else false From 14be9913f3ba8f9c4f38cd47cabf09169a2ea5c5 Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 16 Mar 2020 20:17:24 +0800 Subject: [PATCH 094/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 250688fe3..cde7fc6ec 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -1,6 +1,10 @@ ## 更新日志 * 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。 -* 请关注[开源阅读软件]()支持我,同时关注合作公众号[小说拾遗](),阅读公众号小编。 +* 请关注[开源阅读]()支持我,同时关注合作公众号[小说拾遗](),阅读公众号小编。 + +**2020/03/15** +* 弄了个企业公众号[开源阅读](),后面弄好后会把原来的开源阅读软件迁移过来 +* 修复滚动模式切换章节位置不归0的bug **2020/03/14** * 加载正文无书源时自动换源 From d0b0a9c749a22593aac48ce37c061f3a7c2be8e4 Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 16 Mar 2020 22:15:26 +0800 Subject: [PATCH 095/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/book/read/ReadBookActivity.kt | 5 +- .../legado/app/ui/book/read/TextActionMenu.kt | 57 +++++++++++-------- app/src/main/res/layout/popup_action_menu.xml | 39 +++++++++++-- 3 files changed, 70 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index 6808baf83..8cd1915cc 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -403,11 +403,10 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo */ override fun showTextActionMenu() { textActionMenu ?: let { - textActionMenu = TextActionMenu(this, this).apply { - contentView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED) - } + textActionMenu = TextActionMenu(this, this) } textActionMenu?.let { popup -> + popup.contentView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED) val popupHeight = popup.contentView.measuredHeight val x = text_menu_position.x.toInt() var y = text_menu_position.y.toInt() - popupHeight diff --git a/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt b/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt index 9d7046f6e..55c1855e4 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt @@ -15,13 +15,11 @@ import androidx.annotation.RequiresApi import androidx.appcompat.view.SupportMenuInflater import androidx.appcompat.view.menu.MenuBuilder import androidx.appcompat.view.menu.MenuItemImpl -import androidx.appcompat.widget.PopupMenu -import androidx.core.view.size -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView +import androidx.core.view.isVisible import io.legado.app.R import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.SimpleRecyclerAdapter +import io.legado.app.utils.gone import io.legado.app.utils.isAbsUrl import io.legado.app.utils.sendToClip import io.legado.app.utils.visible @@ -35,6 +33,10 @@ import org.jetbrains.anko.toast class TextActionMenu(private val context: Context, private val callBack: CallBack) : PopupWindow(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT) { + private val adapter = Adapter(context) + private val menu = MenuBuilder(context) + private val moreMenu = MenuBuilder(context) + init { @SuppressLint("InflateParams") contentView = LayoutInflater.from(context).inflate(R.layout.popup_action_menu, null) @@ -44,33 +46,40 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac isFocusable = false initRecyclerView() + setOnDismissListener { + contentView.apply { + iv_menu_more.setImageResource(R.drawable.ic_more_vert) + recycler_view_top.gone() + recycler_view_bottom.gone() + adapter.setItems(menu.visibleItems) + recycler_view.visible() + } + } } private fun initRecyclerView() = with(contentView) { - val adapter = Adapter(context) - recycler_view.layoutManager = LinearLayoutManager(context, RecyclerView.HORIZONTAL, false) recycler_view.adapter = adapter - val menu = MenuBuilder(context) SupportMenuInflater(context).inflate(R.menu.content_select_action, menu) adapter.setItems(menu.visibleItems) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - val popupMenu = PopupMenu(context, iv_menu_more) - onInitializeMenu(popupMenu.menu) - if (popupMenu.menu.size > 0) { - iv_menu_more.visible() - popupMenu.setOnMenuItemClickListener { item -> - item.intent?.let { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - it.putExtra(Intent.EXTRA_PROCESS_TEXT, callBack.selectedText) - context.startActivity(it) - } - } - this@TextActionMenu.dismiss() - true - } - } - iv_menu_more.onClick { - popupMenu.show() + onInitializeMenu(moreMenu) + } + if (moreMenu.size() > 0) { + iv_menu_more.visible() + } + iv_menu_more.onClick { + if (recycler_view.isVisible) { + iv_menu_more.setImageResource(R.drawable.ic_arrow_back) + recycler_view_top.adapter = adapter + adapter.setItems(moreMenu.visibleItems) + recycler_view.gone() + recycler_view_top.visible() + } else { + iv_menu_more.setImageResource(R.drawable.ic_more_vert) + recycler_view_top.gone() + recycler_view_bottom.gone() + adapter.setItems(menu.visibleItems) + recycler_view.visible() } } } diff --git a/app/src/main/res/layout/popup_action_menu.xml b/app/src/main/res/layout/popup_action_menu.xml index 98cceb33c..bf55912fd 100644 --- a/app/src/main/res/layout/popup_action_menu.xml +++ b/app/src/main/res/layout/popup_action_menu.xml @@ -1,7 +1,8 @@ - @@ -10,7 +11,13 @@ android:id="@+id/recycler_view" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center" /> + android:layout_gravity="center" + android:orientation="horizontal" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintTop_toTopOf="@+id/iv_menu_more" + app:layout_constraintRight_toLeftOf="@+id/iv_menu_more" + app:layout_constraintBottom_toBottomOf="@+id/iv_menu_more" /> + android:layout_gravity="center_vertical" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toBottomOf="@+id/recycler_view_top" /> - + + + + + From 9bbad137bbda7becfd9a5d222405d49bb2140447 Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 16 Mar 2020 22:17:12 +0800 Subject: [PATCH 096/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/ui/book/read/TextActionMenu.kt | 2 -- app/src/main/res/layout/popup_action_menu.xml | 11 ----------- 2 files changed, 13 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt b/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt index 55c1855e4..af3ee3c75 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt @@ -50,7 +50,6 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac contentView.apply { iv_menu_more.setImageResource(R.drawable.ic_more_vert) recycler_view_top.gone() - recycler_view_bottom.gone() adapter.setItems(menu.visibleItems) recycler_view.visible() } @@ -77,7 +76,6 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac } else { iv_menu_more.setImageResource(R.drawable.ic_more_vert) recycler_view_top.gone() - recycler_view_bottom.gone() adapter.setItems(menu.visibleItems) recycler_view.visible() } diff --git a/app/src/main/res/layout/popup_action_menu.xml b/app/src/main/res/layout/popup_action_menu.xml index bf55912fd..a708d9310 100644 --- a/app/src/main/res/layout/popup_action_menu.xml +++ b/app/src/main/res/layout/popup_action_menu.xml @@ -43,16 +43,5 @@ app:layout_constraintBottom_toTopOf="@+id/iv_menu_more" app:layout_constraintRight_toRightOf="parent" /> - - From 68becb21fdb5f154b20aa91e479d1a0e8b6f83d9 Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 16 Mar 2020 22:18:31 +0800 Subject: [PATCH 097/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index cde7fc6ec..cd3772d30 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -5,6 +5,7 @@ **2020/03/15** * 弄了个企业公众号[开源阅读](),后面弄好后会把原来的开源阅读软件迁移过来 * 修复滚动模式切换章节位置不归0的bug +* 修复文字选择更多菜单在部分手机上报错的bug **2020/03/14** * 加载正文无书源时自动换源 From 9da86a4d371dcee651091377afcef5085a5a7ed4 Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 16 Mar 2020 22:42:35 +0800 Subject: [PATCH 098/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/ui/book/read/TextActionMenu.kt | 8 ++++---- app/src/main/res/layout/popup_action_menu.xml | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt b/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt index af3ee3c75..b64ec996d 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt @@ -49,7 +49,7 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac setOnDismissListener { contentView.apply { iv_menu_more.setImageResource(R.drawable.ic_more_vert) - recycler_view_top.gone() + recycler_view_more.gone() adapter.setItems(menu.visibleItems) recycler_view.visible() } @@ -58,6 +58,7 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac private fun initRecyclerView() = with(contentView) { recycler_view.adapter = adapter + recycler_view_more.adapter = adapter SupportMenuInflater(context).inflate(R.menu.content_select_action, menu) adapter.setItems(menu.visibleItems) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { @@ -69,13 +70,12 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac iv_menu_more.onClick { if (recycler_view.isVisible) { iv_menu_more.setImageResource(R.drawable.ic_arrow_back) - recycler_view_top.adapter = adapter adapter.setItems(moreMenu.visibleItems) recycler_view.gone() - recycler_view_top.visible() + recycler_view_more.visible() } else { iv_menu_more.setImageResource(R.drawable.ic_more_vert) - recycler_view_top.gone() + recycler_view_more.gone() adapter.setItems(menu.visibleItems) recycler_view.visible() } diff --git a/app/src/main/res/layout/popup_action_menu.xml b/app/src/main/res/layout/popup_action_menu.xml index a708d9310..547d9bce1 100644 --- a/app/src/main/res/layout/popup_action_menu.xml +++ b/app/src/main/res/layout/popup_action_menu.xml @@ -29,18 +29,18 @@ android:visibility="gone" android:contentDescription="@string/more_menu" android:layout_gravity="center_vertical" - app:layout_constraintRight_toRightOf="parent" - app:layout_constraintTop_toBottomOf="@+id/recycler_view_top" /> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintRight_toRightOf="parent" /> From 5d5a804c5bc5855665dfbbafb0d0c3c7961d549c Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 10:43:58 +0800 Subject: [PATCH 099/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index cd3772d30..859370ed1 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -2,12 +2,12 @@ * 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。 * 请关注[开源阅读]()支持我,同时关注合作公众号[小说拾遗](),阅读公众号小编。 -**2020/03/15** +**2020/03/16** * 弄了个企业公众号[开源阅读](),后面弄好后会把原来的开源阅读软件迁移过来 * 修复滚动模式切换章节位置不归0的bug * 修复文字选择更多菜单在部分手机上报错的bug -**2020/03/14** +**2020/03/15** * 加载正文无书源时自动换源 **2020/03/14** From 684c2dd4d486b1c76e86f5f858144c12e3d20a45 Mon Sep 17 00:00:00 2001 From: yangyxd Date: Tue, 17 Mar 2020 12:40:15 +0800 Subject: [PATCH 100/350] =?UTF-8?q?=E6=90=9C=E7=B4=A2=E6=A1=86=E6=94=B9?= =?UTF-8?q?=E6=88=90=E5=9C=86=E8=A7=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/drawable/bg_searchview.xml | 9 +++++++++ app/src/main/res/layout/view_search.xml | 9 +++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/drawable/bg_searchview.xml diff --git a/app/src/main/res/drawable/bg_searchview.xml b/app/src/main/res/drawable/bg_searchview.xml new file mode 100644 index 000000000..89382ba0c --- /dev/null +++ b/app/src/main/res/drawable/bg_searchview.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_search.xml b/app/src/main/res/layout/view_search.xml index 5fd67be63..e7269040c 100644 --- a/app/src/main/res/layout/view_search.xml +++ b/app/src/main/res/layout/view_search.xml @@ -3,8 +3,13 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/search_view" - android:layout_width="match_parent" android:theme="?attr/actionBarStyle" - android:layout_height="wrap_content" + android:background="@drawable/bg_searchview" + android:layout_width="match_parent" + android:layout_height="34dp" + android:layout_marginTop="8dp" + android:layout_marginBottom="8dp" android:imeOptions="actionSearch" + app:queryBackground="@drawable/bg_searchview" + app:submitBackground="@color/transparent" app:defaultQueryHint="搜索"/> \ No newline at end of file From 41ffd465288acefe34ad81904ec77123d2166d81 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 13:24:37 +0800 Subject: [PATCH 101/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/ui/book/read/TextActionMenu.kt | 6 ++++++ .../app/ui/main/bookshelf/books/BooksFragment.kt | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt b/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt index b64ec996d..3fe423f8e 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt @@ -128,6 +128,12 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac context.toast(e.localizedMessage ?: "ERROR") } } + else -> item.intent?.let { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + it.putExtra(Intent.EXTRA_PROCESS_TEXT, callBack.selectedText) + context.startActivity(it) + } + } } } diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BooksFragment.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BooksFragment.kt index 43375288e..4a91379ae 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BooksFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BooksFragment.kt @@ -7,6 +7,7 @@ import androidx.lifecycle.Observer import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView import io.legado.app.App import io.legado.app.R import io.legado.app.base.BaseFragment @@ -74,6 +75,19 @@ class BooksFragment : BaseFragment(R.layout.fragment_books), booksAdapter = BooksAdapterGrid(requireContext(),this) } rv_bookshelf.adapter = booksAdapter + booksAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { + override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { + if (positionStart == 0) { + + } + } + + override fun onItemRangeMoved(fromPosition: Int, toPosition: Int, itemCount: Int) { + if (toPosition == 0) { + + } + } + }) } private fun upRecyclerData() { From c417660e2cd35a54fff751c83caf80d1c01082ee Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 13:30:49 +0800 Subject: [PATCH 102/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/item_text.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/layout/item_text.xml b/app/src/main/res/layout/item_text.xml index e37188e47..357efdde3 100644 --- a/app/src/main/res/layout/item_text.xml +++ b/app/src/main/res/layout/item_text.xml @@ -9,6 +9,7 @@ android:gravity="center" android:padding="5dp" android:maxLines="1" + android:scrollbars="none" android:textColor="@color/tv_text_default" android:textSize="14sp" tools:ignore="UnusedAttribute" /> From eaa5bfab6c8879a24efc0c74214f276e5484b03d Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 13:31:24 +0800 Subject: [PATCH 103/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 859370ed1..5410750cb 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -6,6 +6,7 @@ * 弄了个企业公众号[开源阅读](),后面弄好后会把原来的开源阅读软件迁移过来 * 修复滚动模式切换章节位置不归0的bug * 修复文字选择更多菜单在部分手机上报错的bug +* 修复文字选择菜单问题 **2020/03/15** * 加载正文无书源时自动换源 From 107c10ec957dd1f27d9aa4d978df9715473e7cc6 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 13:35:38 +0800 Subject: [PATCH 104/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index 6c6d52aca..90d559f8d 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -126,7 +126,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { } }?.onError { toast(R.string.error_load_toc) - } ?: autoChangeSource(book.name, book.author) + } } } } From 474be5830f1c62e616bcfe4b9b0f115ae0c5774d Mon Sep 17 00:00:00 2001 From: yangyxd Date: Tue, 17 Mar 2020 14:34:37 +0800 Subject: [PATCH 105/350] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=98=85=E8=AF=BB?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E9=95=BF=E6=8C=89=E9=80=89=E6=8B=A9=E6=96=87?= =?UTF-8?q?=E5=AD=97=E6=9C=97=E8=AF=BB=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/ui/book/read/TextActionMenu.kt | 38 ++++++++++++++++++- .../main/res/menu/content_select_action.xml | 4 ++ app/src/main/res/values/strings.xml | 1 + 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt b/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt index 3fe423f8e..357f2d437 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt @@ -7,6 +7,7 @@ import android.content.Intent import android.content.pm.ResolveInfo import android.net.Uri import android.os.Build +import android.speech.tts.TextToSpeech import android.view.LayoutInflater import android.view.Menu import android.view.ViewGroup @@ -19,6 +20,7 @@ import androidx.core.view.isVisible import io.legado.app.R import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.SimpleRecyclerAdapter +import io.legado.app.service.BaseReadAloudService import io.legado.app.utils.gone import io.legado.app.utils.isAbsUrl import io.legado.app.utils.sendToClip @@ -28,10 +30,12 @@ import kotlinx.android.synthetic.main.popup_action_menu.view.* import org.jetbrains.anko.sdk27.listeners.onClick import org.jetbrains.anko.share import org.jetbrains.anko.toast +import java.util.* @SuppressLint("RestrictedApi") class TextActionMenu(private val context: Context, private val callBack: CallBack) : - PopupWindow(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT) { + PopupWindow(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT), + TextToSpeech.OnInitListener { private val adapter = Adapter(context) private val menu = MenuBuilder(context) @@ -111,6 +115,13 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac when (item.itemId) { R.id.menu_copy -> context.sendToClip(callBack.selectedText) R.id.menu_share_str -> context.share(callBack.selectedText) + R.id.menu_aloud -> { + if (BaseReadAloudService.isRun) { + context.toast(R.string.alouding_disable) + return + } + readAloud(callBack.selectedText) + } R.id.menu_browser -> { try { val intent = if (callBack.selectedText.isAbsUrl()) { @@ -137,6 +148,31 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac } } + private var textToSpeech: TextToSpeech? = null + private var ttsInitFinish = false + private var lastText: String = "" + + @SuppressLint("SetJavaScriptEnabled") + private fun readAloud(text: String) { + if (textToSpeech == null && !ttsInitFinish) { + lastText = text + textToSpeech = TextToSpeech(context, this) + return + } + if (text == "") return + if (textToSpeech?.isSpeaking == true) + textToSpeech?.stop() + textToSpeech?.speak(text, TextToSpeech.QUEUE_ADD, null, "select_text") + lastText = "" + } + + @Synchronized + override fun onInit(status: Int) { + textToSpeech?.language = Locale.CHINA + ttsInitFinish = true + readAloud(lastText) + } + @RequiresApi(Build.VERSION_CODES.M) private fun createProcessTextIntent(): Intent { return Intent() diff --git a/app/src/main/res/menu/content_select_action.xml b/app/src/main/res/menu/content_select_action.xml index d11ee6154..ff83efd96 100644 --- a/app/src/main/res/menu/content_select_action.xml +++ b/app/src/main/res/menu/content_select_action.xml @@ -9,6 +9,10 @@ android:id="@+id/menu_copy" android:title="@android:string/copy" /> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 41c3005f7..558e90cbe 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -648,4 +648,5 @@ 主菜单 点击授予权限 阅读需要访问存储卡权限,请点击下方的"授予权限"按钮,或前往“设置”—“应用权限”—打开所需权限。如果授予权限后仍然不正常,请点击右上角的“选择文件夹”,使用系统文件夹选择器。 + 全文朗读中不能朗读选中文字 From 1f98c7ba005d04df5ee8ad1270ecd4e5da559d7d Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 15:05:45 +0800 Subject: [PATCH 106/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/ui/book/read/TextActionMenu.kt | 3 +- app/src/main/res/drawable/ic_launcher.xml | 18 ------- app/src/main/res/drawable/ic_launcher_5.xml | 54 +++++++++++++++++++ app/src/main/res/drawable/ic_launcher_5b.xml | 12 +++++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 4 +- 5 files changed, 70 insertions(+), 21 deletions(-) delete mode 100644 app/src/main/res/drawable/ic_launcher.xml create mode 100644 app/src/main/res/drawable/ic_launcher_5.xml create mode 100644 app/src/main/res/drawable/ic_launcher_5b.xml diff --git a/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt b/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt index 357f2d437..361c7c014 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt @@ -154,11 +154,12 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac @SuppressLint("SetJavaScriptEnabled") private fun readAloud(text: String) { - if (textToSpeech == null && !ttsInitFinish) { + if (textToSpeech == null) { lastText = text textToSpeech = TextToSpeech(context, this) return } + if (!ttsInitFinish) return if (text == "") return if (textToSpeech?.isSpeaking == true) textToSpeech?.stop() diff --git a/app/src/main/res/drawable/ic_launcher.xml b/app/src/main/res/drawable/ic_launcher.xml deleted file mode 100644 index 1bb711f8f..000000000 --- a/app/src/main/res/drawable/ic_launcher.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - diff --git a/app/src/main/res/drawable/ic_launcher_5.xml b/app/src/main/res/drawable/ic_launcher_5.xml new file mode 100644 index 000000000..caa666949 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_5.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_5b.xml b/app/src/main/res/drawable/ic_launcher_5b.xml new file mode 100644 index 000000000..6abd9cbac --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_5b.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index 7f9b677b9..40ee239b2 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file From f204bcd7a7d3613d0792fe69f2ed9d5e1c4f8cd2 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 15:15:05 +0800 Subject: [PATCH 107/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt b/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt index 361c7c014..5c8d1d214 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt @@ -154,8 +154,8 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac @SuppressLint("SetJavaScriptEnabled") private fun readAloud(text: String) { + lastText = text if (textToSpeech == null) { - lastText = text textToSpeech = TextToSpeech(context, this) return } From 1c4c2c07fae9bfe81b0410e2af2690221f27fbb0 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 15:26:31 +0800 Subject: [PATCH 108/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/drawable/bg_searchview.xml | 6 ++++-- app/src/main/res/layout/view_search.xml | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/drawable/bg_searchview.xml b/app/src/main/res/drawable/bg_searchview.xml index 89382ba0c..b6d8c2739 100644 --- a/app/src/main/res/drawable/bg_searchview.xml +++ b/app/src/main/res/drawable/bg_searchview.xml @@ -3,7 +3,9 @@ - + - + \ No newline at end of file diff --git a/app/src/main/res/layout/view_search.xml b/app/src/main/res/layout/view_search.xml index e7269040c..77ba176f4 100644 --- a/app/src/main/res/layout/view_search.xml +++ b/app/src/main/res/layout/view_search.xml @@ -10,6 +10,6 @@ android:layout_marginTop="8dp" android:layout_marginBottom="8dp" android:imeOptions="actionSearch" - app:queryBackground="@drawable/bg_searchview" + app:queryBackground="@null" app:submitBackground="@color/transparent" app:defaultQueryHint="搜索"/> \ No newline at end of file From 2481eb4403382d0bd68ca567d19b889ad6e67b8c Mon Sep 17 00:00:00 2001 From: yangyxd Date: Tue, 17 Mar 2020 15:33:04 +0800 Subject: [PATCH 109/350] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E6=A0=8F=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/drawable/bg_searchview.xml | 4 ++-- app/src/main/res/layout/view_search.xml | 4 ++-- app/src/main/res/values-night/colors.xml | 1 + app/src/main/res/values/colors.xml | 1 + 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/drawable/bg_searchview.xml b/app/src/main/res/drawable/bg_searchview.xml index b6d8c2739..beee4af1e 100644 --- a/app/src/main/res/drawable/bg_searchview.xml +++ b/app/src/main/res/drawable/bg_searchview.xml @@ -3,9 +3,9 @@ - + \ No newline at end of file diff --git a/app/src/main/res/layout/view_search.xml b/app/src/main/res/layout/view_search.xml index 77ba176f4..9b1d48efd 100644 --- a/app/src/main/res/layout/view_search.xml +++ b/app/src/main/res/layout/view_search.xml @@ -10,6 +10,6 @@ android:layout_marginTop="8dp" android:layout_marginBottom="8dp" android:imeOptions="actionSearch" - app:queryBackground="@null" - app:submitBackground="@color/transparent" + app:queryBackground="@null" + app:submitBackground="@null" app:defaultQueryHint="搜索"/> \ No newline at end of file diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 18ab012e0..e2d9a801f 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -11,6 +11,7 @@ #69000000 #30ffffff + #10ffffff #363636 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index d6999a7ae..18a8f0ad0 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -19,6 +19,7 @@ #00000000 #30000000 + #10000000 #d3321b From 3185c9533533f974db6090c83e018550c4389ea2 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 15:34:27 +0800 Subject: [PATCH 110/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/view_search.xml | 25 ++++++++++++------------ app/src/main/res/values-night/colors.xml | 1 + app/src/main/res/values/colors.xml | 1 + 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/app/src/main/res/layout/view_search.xml b/app/src/main/res/layout/view_search.xml index 77ba176f4..3433d6b27 100644 --- a/app/src/main/res/layout/view_search.xml +++ b/app/src/main/res/layout/view_search.xml @@ -1,15 +1,14 @@ - \ No newline at end of file + app:submitBackground="@color/transparent" /> \ No newline at end of file diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 18ab012e0..78d372bbd 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -10,6 +10,7 @@ #69000000 + #10ffffff #30ffffff #363636 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index d6999a7ae..58f27cdec 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -18,6 +18,7 @@ @color/md_grey_200 #00000000 + #10000000 #30000000 #d3321b From bc6916112e14950e6f7bfc1342eba7dc7eb68b50 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 15:34:47 +0800 Subject: [PATCH 111/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/drawable/bg_searchview.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/drawable/bg_searchview.xml b/app/src/main/res/drawable/bg_searchview.xml index b6d8c2739..beee4af1e 100644 --- a/app/src/main/res/drawable/bg_searchview.xml +++ b/app/src/main/res/drawable/bg_searchview.xml @@ -3,9 +3,9 @@ - + \ No newline at end of file From 21ce3d927fb6c04509607e4675bf403414a275fc Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 16:09:41 +0800 Subject: [PATCH 112/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values-night/colors.xml | 1 - app/src/main/res/values/colors.xml | 1 - 2 files changed, 2 deletions(-) diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 938d4809c..78d372bbd 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -12,7 +12,6 @@ #10ffffff #30ffffff - #10ffffff #363636 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 049f73ef2..58f27cdec 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -20,7 +20,6 @@ #10000000 #30000000 - #10000000 #d3321b From 001f39aa744639a3a1b72814f523581ea318a9c3 Mon Sep 17 00:00:00 2001 From: yangyxd Date: Tue, 17 Mar 2020 16:22:28 +0800 Subject: [PATCH 113/350] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=8F=91=E7=8E=B0?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/main/explore/ExploreAdapter.kt | 4 +-- .../main/res/drawable/bg_find_book_group.xml | 7 ++++ app/src/main/res/drawable/ic_arrow_down.xml | 9 ++++++ app/src/main/res/drawable/ic_arrow_right.xml | 9 ++++++ .../main/res/drawable/shape_fillet_btn.xml | 2 +- .../res/drawable/shape_fillet_btn_press.xml | 2 +- app/src/main/res/layout/item_fillet_text.xml | 5 ++- app/src/main/res/layout/item_find_book.xml | 32 +++++++++++-------- app/src/main/res/values-night/colors.xml | 1 - app/src/main/res/values/colors.xml | 1 - 10 files changed, 51 insertions(+), 21 deletions(-) create mode 100644 app/src/main/res/drawable/bg_find_book_group.xml create mode 100644 app/src/main/res/drawable/ic_arrow_down.xml create mode 100644 app/src/main/res/drawable/ic_arrow_right.xml diff --git a/app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt b/app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt index 3ceeca8b6..0f9f3d729 100644 --- a/app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt @@ -32,7 +32,7 @@ class ExploreAdapter(context: Context, private val scope: CoroutineScope, val ca tv_name.text = item.bookSourceName } if (exIndex == holder.layoutPosition) { - iv_status.setImageResource(R.drawable.ic_remove) + iv_status.setImageResource(R.drawable.ic_arrow_down) rotate_loading.loadingColor = context.accentColor rotate_loading.show() if (scrollTo >= 0) { @@ -68,7 +68,7 @@ class ExploreAdapter(context: Context, private val scope: CoroutineScope, val ca } } } else { - iv_status.setImageResource(R.drawable.ic_add) + iv_status.setImageResource(R.drawable.ic_arrow_right) rotate_loading.hide() gl_child.gone() } diff --git a/app/src/main/res/drawable/bg_find_book_group.xml b/app/src/main/res/drawable/bg_find_book_group.xml new file mode 100644 index 000000000..b00a89b22 --- /dev/null +++ b/app/src/main/res/drawable/bg_find_book_group.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_arrow_down.xml b/app/src/main/res/drawable/ic_arrow_down.xml new file mode 100644 index 000000000..19a41e8db --- /dev/null +++ b/app/src/main/res/drawable/ic_arrow_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_arrow_right.xml b/app/src/main/res/drawable/ic_arrow_right.xml new file mode 100644 index 000000000..72bcbdb79 --- /dev/null +++ b/app/src/main/res/drawable/ic_arrow_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/shape_fillet_btn.xml b/app/src/main/res/drawable/shape_fillet_btn.xml index 10dac7541..83ccf2776 100644 --- a/app/src/main/res/drawable/shape_fillet_btn.xml +++ b/app/src/main/res/drawable/shape_fillet_btn.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_fillet_btn_press.xml b/app/src/main/res/drawable/shape_fillet_btn_press.xml index b569081a4..b0c46f6f5 100644 --- a/app/src/main/res/drawable/shape_fillet_btn_press.xml +++ b/app/src/main/res/drawable/shape_fillet_btn_press.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/src/main/res/layout/item_fillet_text.xml b/app/src/main/res/layout/item_fillet_text.xml index 331bd8a2c..dcdf75935 100644 --- a/app/src/main/res/layout/item_fillet_text.xml +++ b/app/src/main/res/layout/item_fillet_text.xml @@ -8,7 +8,10 @@ android:background="@drawable/selector_fillet_btn_bg" android:ellipsize="end" android:gravity="center" - android:padding="5dp" + android:paddingTop="4dp" + android:paddingBottom="4dp" + android:paddingLeft="12dp" + android:paddingRight="12dp" android:maxLines="1" android:textColor="@color/tv_text_default" android:textSize="14sp" diff --git a/app/src/main/res/layout/item_find_book.xml b/app/src/main/res/layout/item_find_book.xml index 8a95ed1e2..900aa9eed 100644 --- a/app/src/main/res/layout/item_find_book.xml +++ b/app/src/main/res/layout/item_find_book.xml @@ -4,8 +4,9 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingLeft="10dp" - android:paddingRight="10dp" + android:paddingTop="15dp" + android:paddingLeft="16dp" + android:paddingRight="16dp" android:gravity="center" android:orientation="vertical"> @@ -17,8 +18,7 @@ android:paddingRight="10dp" android:paddingTop="6dp" android:paddingBottom="6dp" - android:layout_margin="4dp" - android:background="@color/btn_bg_press" + android:background="@drawable/bg_find_book_group" android:orientation="horizontal" android:gravity="center_vertical"> @@ -28,11 +28,21 @@ android:layout_height="wrap_content" android:layout_weight="1" /> + + @@ -41,6 +51,8 @@ - - \ No newline at end of file diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 938d4809c..78d372bbd 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -12,7 +12,6 @@ #10ffffff #30ffffff - #10ffffff #363636 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 049f73ef2..58f27cdec 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -20,7 +20,6 @@ #10000000 #30000000 - #10000000 #d3321b From 3329c162e016323d0656de95a9a3dfe24ef78b51 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 19:02:04 +0800 Subject: [PATCH 114/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/res/drawable/ic_bottom_books_e.xml | 4 +- .../main/res/drawable/ic_bottom_books_s.xml | 41 +++--------------- .../main/res/drawable/ic_bottom_explore_e.xml | 4 +- .../main/res/drawable/ic_bottom_explore_s.xml | 21 ++------- .../main/res/drawable/ic_bottom_person_e.xml | 4 +- .../main/res/drawable/ic_bottom_person_s.xml | 41 +++--------------- .../res/drawable/ic_bottom_rss_feed_e.xml | 4 +- .../res/drawable/ic_bottom_rss_feed_s.xml | 21 ++------- .../ic_launcher_1.xml | 0 .../ic_launcher_2.xml | 0 .../ic_launcher_2b.xml | 0 .../ic_launcher_3.xml | 0 .../ic_launcher_4.xml | 0 app/src/main/res/drawable/ic_launcher_5.xml | 32 +++++++------- app/src/main/res/drawable/ic_launcher_5b.xml | 6 +-- app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 2943 -> 4935 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2052 -> 3323 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4414 -> 7515 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 7876 -> 13802 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 12102 -> 21644 bytes 20 files changed, 45 insertions(+), 133 deletions(-) rename app/src/main/res/{drawable-v24 => drawable}/ic_launcher_1.xml (100%) rename app/src/main/res/{drawable-v24 => drawable}/ic_launcher_2.xml (100%) rename app/src/main/res/{drawable-v24 => drawable}/ic_launcher_2b.xml (100%) rename app/src/main/res/{drawable-v24 => drawable}/ic_launcher_3.xml (100%) rename app/src/main/res/{drawable-v24 => drawable}/ic_launcher_4.xml (100%) diff --git a/app/src/main/res/drawable/ic_bottom_books_e.xml b/app/src/main/res/drawable/ic_bottom_books_e.xml index 16efedae5..04d36c375 100644 --- a/app/src/main/res/drawable/ic_bottom_books_e.xml +++ b/app/src/main/res/drawable/ic_bottom_books_e.xml @@ -4,9 +4,9 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_bottom_books_s.xml b/app/src/main/res/drawable/ic_bottom_books_s.xml index 0c6d1144b..8f5f72542 100644 --- a/app/src/main/res/drawable/ic_bottom_books_s.xml +++ b/app/src/main/res/drawable/ic_bottom_books_s.xml @@ -1,41 +1,12 @@ - - - - - - - - - - - - - - - - + + diff --git a/app/src/main/res/drawable/ic_bottom_explore_e.xml b/app/src/main/res/drawable/ic_bottom_explore_e.xml index 37f7a5929..47e4bde9d 100644 --- a/app/src/main/res/drawable/ic_bottom_explore_e.xml +++ b/app/src/main/res/drawable/ic_bottom_explore_e.xml @@ -4,9 +4,9 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_bottom_explore_s.xml b/app/src/main/res/drawable/ic_bottom_explore_s.xml index be7cba1eb..6dc6e4322 100644 --- a/app/src/main/res/drawable/ic_bottom_explore_s.xml +++ b/app/src/main/res/drawable/ic_bottom_explore_s.xml @@ -1,24 +1,9 @@ - - - - - - - - + diff --git a/app/src/main/res/drawable/ic_bottom_person_e.xml b/app/src/main/res/drawable/ic_bottom_person_e.xml index e14f45566..d01128391 100644 --- a/app/src/main/res/drawable/ic_bottom_person_e.xml +++ b/app/src/main/res/drawable/ic_bottom_person_e.xml @@ -4,9 +4,9 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_bottom_person_s.xml b/app/src/main/res/drawable/ic_bottom_person_s.xml index be5213686..3ff7fc8c4 100644 --- a/app/src/main/res/drawable/ic_bottom_person_s.xml +++ b/app/src/main/res/drawable/ic_bottom_person_s.xml @@ -1,41 +1,12 @@ - - - - - - - - - - - - - - - - + + diff --git a/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml b/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml index 08f219fcb..c1c4ba0e3 100644 --- a/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml +++ b/app/src/main/res/drawable/ic_bottom_rss_feed_e.xml @@ -4,9 +4,9 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml b/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml index 60374f709..a73c01430 100644 --- a/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml +++ b/app/src/main/res/drawable/ic_bottom_rss_feed_s.xml @@ -1,24 +1,9 @@ - - - - - - - - + diff --git a/app/src/main/res/drawable-v24/ic_launcher_1.xml b/app/src/main/res/drawable/ic_launcher_1.xml similarity index 100% rename from app/src/main/res/drawable-v24/ic_launcher_1.xml rename to app/src/main/res/drawable/ic_launcher_1.xml diff --git a/app/src/main/res/drawable-v24/ic_launcher_2.xml b/app/src/main/res/drawable/ic_launcher_2.xml similarity index 100% rename from app/src/main/res/drawable-v24/ic_launcher_2.xml rename to app/src/main/res/drawable/ic_launcher_2.xml diff --git a/app/src/main/res/drawable-v24/ic_launcher_2b.xml b/app/src/main/res/drawable/ic_launcher_2b.xml similarity index 100% rename from app/src/main/res/drawable-v24/ic_launcher_2b.xml rename to app/src/main/res/drawable/ic_launcher_2b.xml diff --git a/app/src/main/res/drawable-v24/ic_launcher_3.xml b/app/src/main/res/drawable/ic_launcher_3.xml similarity index 100% rename from app/src/main/res/drawable-v24/ic_launcher_3.xml rename to app/src/main/res/drawable/ic_launcher_3.xml diff --git a/app/src/main/res/drawable-v24/ic_launcher_4.xml b/app/src/main/res/drawable/ic_launcher_4.xml similarity index 100% rename from app/src/main/res/drawable-v24/ic_launcher_4.xml rename to app/src/main/res/drawable/ic_launcher_4.xml diff --git a/app/src/main/res/drawable/ic_launcher_5.xml b/app/src/main/res/drawable/ic_launcher_5.xml index caa666949..29435836b 100644 --- a/app/src/main/res/drawable/ic_launcher_5.xml +++ b/app/src/main/res/drawable/ic_launcher_5.xml @@ -5,50 +5,50 @@ android:viewportHeight="108"> + android:fillColor="#EDEDED" /> + android:fillColor="#EDEDED" /> + android:fillColor="#EDEDED" /> + android:fillColor="#EDEDED" /> + android:fillColor="#EDEDED" /> + android:fillColor="#EDEDED" /> + android:fillColor="#EDEDED" /> + android:fillColor="#EDEDED" /> + android:fillColor="#EDEDED" /> + android:fillColor="#EDEDED" /> + android:fillColor="#EDEDED" /> + android:fillColor="#EDEDED" /> + android:fillColor="#EDEDED" /> + android:fillColor="#EDEDED" /> + android:fillColor="#EDEDED" /> + android:fillColor="#EDEDED" /> diff --git a/app/src/main/res/drawable/ic_launcher_5b.xml b/app/src/main/res/drawable/ic_launcher_5b.xml index 6abd9cbac..e779c515d 100644 --- a/app/src/main/res/drawable/ic_launcher_5b.xml +++ b/app/src/main/res/drawable/ic_launcher_5b.xml @@ -5,8 +5,8 @@ android:viewportHeight="108"> + android:fillColor="#773B3B" /> + android:pathData="M17.9,75v-3.3c11.5,-0.7 25,-8.2 36.5,7.3c11.6,-15.6 25,-8 36.5,-7.3V75l0,0v5.2c-10.2,-1.1 -24.3,-3.5 -32.9,-0.1l-0.8,0.4h0.1c-0.4,0.2 -0.7,0.6 -0.7,1l0,0c-0.1,0.7 -0.7,1.2 -1.5,1.2h-1.4c-0.7,0 -1.4,-0.6 -1.4,-1.3l0,0c-0.1,-0.3 -0.3,-0.6 -0.6,-0.8l-0.1,-0.1c-0.3,-0.2 -0.5,-0.3 -0.8,-0.5c-8.6,-3.4 -22.8,-1 -33,0.1v-3.7" + android:fillColor="#DA6363" /> diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index 66ab5d53de22caa35d95ccd53841cbc7ef0bf425..7af58a15898909e55a25626f1df29dbd4a857a77 100644 GIT binary patch delta 4779 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 FV1mDW7Qg@i delta 2772 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 Mw>gcivZhA=2P@AdVgLXD diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index 24f2180fb09840a8106f7e94e94e2822be0617bc..c2ffda07b4fabef2aadeaf3acdc8802d4687f029 100644 GIT binary patch delta 3155 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 delta 1874 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 delta 4254 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 Date: Tue, 17 Mar 2020 19:45:36 +0800 Subject: [PATCH 115/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/ui/main/explore/ExploreAdapter.kt | 6 ++++++ app/src/main/res/layout/item_find_book.xml | 6 ++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt b/app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt index 0f9f3d729..faf9cef8a 100644 --- a/app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt @@ -12,6 +12,7 @@ import io.legado.app.data.entities.BookSource import io.legado.app.help.coroutine.Coroutine import io.legado.app.lib.theme.accentColor import io.legado.app.utils.ACache +import io.legado.app.utils.dp import io.legado.app.utils.gone import io.legado.app.utils.visible import kotlinx.android.synthetic.main.item_fillet_text.view.* @@ -28,6 +29,11 @@ class ExploreAdapter(context: Context, private val scope: CoroutineScope, val ca override fun convert(holder: ItemViewHolder, item: BookSource, payloads: MutableList) { with(holder.itemView) { + if (holder.layoutPosition == getActualItemCount() - 1) { + setPadding(16.dp, 12.dp, 16.dp, 12.dp) + } else { + setPadding(16.dp, 12.dp, 16.dp, 0) + } if (payloads.isEmpty()) { tv_name.text = item.bookSourceName } diff --git a/app/src/main/res/layout/item_find_book.xml b/app/src/main/res/layout/item_find_book.xml index 900aa9eed..d689630d2 100644 --- a/app/src/main/res/layout/item_find_book.xml +++ b/app/src/main/res/layout/item_find_book.xml @@ -4,9 +4,6 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingTop="15dp" - android:paddingLeft="16dp" - android:paddingRight="16dp" android:gravity="center" android:orientation="vertical"> @@ -36,7 +33,8 @@ android:layout_gravity="center" android:layout_marginRight="4dp" app:hide_mode="gone" - app:loading_width="1dp" /> + app:loading_width="1dp" + tools:ignore="RtlHardcoded" /> Date: Tue, 17 Mar 2020 20:21:44 +0800 Subject: [PATCH 116/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/drawable/ic_help.xml | 15 +++++++++++++++ app/src/main/res/drawable/ic_launcher_5b.xml | 4 ++-- .../res/drawable/ic_live_help_black_24dp.xml | 9 --------- app/src/main/res/menu/main_my.xml | 2 +- app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 4935 -> 5200 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 3323 -> 3512 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 7515 -> 7923 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 13802 -> 14655 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 21644 -> 23019 bytes 9 files changed, 18 insertions(+), 12 deletions(-) create mode 100644 app/src/main/res/drawable/ic_help.xml delete mode 100644 app/src/main/res/drawable/ic_live_help_black_24dp.xml diff --git a/app/src/main/res/drawable/ic_help.xml b/app/src/main/res/drawable/ic_help.xml new file mode 100644 index 000000000..931a86bf6 --- /dev/null +++ b/app/src/main/res/drawable/ic_help.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_5b.xml b/app/src/main/res/drawable/ic_launcher_5b.xml index e779c515d..9a5153369 100644 --- a/app/src/main/res/drawable/ic_launcher_5b.xml +++ b/app/src/main/res/drawable/ic_launcher_5b.xml @@ -5,8 +5,8 @@ android:viewportHeight="108"> + android:fillColor="#495867" /> + android:fillColor="#BDD5EA" /> diff --git a/app/src/main/res/drawable/ic_live_help_black_24dp.xml b/app/src/main/res/drawable/ic_live_help_black_24dp.xml deleted file mode 100644 index 8b9c1ac46..000000000 --- a/app/src/main/res/drawable/ic_live_help_black_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/menu/main_my.xml b/app/src/main/res/menu/main_my.xml index 74e555dff..02b6acbd0 100644 --- a/app/src/main/res/menu/main_my.xml +++ b/app/src/main/res/menu/main_my.xml @@ -6,7 +6,7 @@ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index 7af58a15898909e55a25626f1df29dbd4a857a77..fb0c6bcd328cf80a4d110ddc9796a6ba934db1a6 100644 GIT binary patch delta 5066 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 A#sB~S diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index c2ffda07b4fabef2aadeaf3acdc8802d4687f029..fc9a317f77da09bf44a4a3583751d64d096938cb 100644 GIT binary patch delta 3340 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 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 790618bbfbff8a79b91dde4dc0a0ce6228eeec3f..24640cb72ee911d0f9907212706fe66fffc700de 100644 GIT binary patch delta 7786 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 BQ?LL4 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index bfededd84ebd92f35b95ea344f4e1578a27cab6f..be42068593027bf008f01c6dc0e87349e0915078 100644 GIT binary patch delta 14571 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

    4)=q9`Ip%Knj)t$*WWdsIZo4i2&U#TQv} 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 delta 21617 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 Date: Tue, 17 Mar 2020 20:42:15 +0800 Subject: [PATCH 117/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 14 ++++++++++++++ .../io/legado/app/help/LauncherIconHelp.kt | 3 ++- .../legado/app/ui/welcome/WelcomeActivity.kt | 3 ++- .../{ic_launcher_1.xml => ic_launcher1.xml} | 0 .../{ic_launcher_2.xml => ic_launcher2.xml} | 0 .../{ic_launcher_2b.xml => ic_launcher2_b.xml} | 0 .../{ic_launcher_3.xml => ic_launcher3.xml} | 0 .../{ic_launcher_4.xml => ic_launcher4.xml} | 0 .../{ic_launcher_5.xml => ic_launcher5.xml} | 0 .../{ic_launcher_5b.xml => ic_launcher5_b.xml} | 0 app/src/main/res/drawable/ic_launcher6.xml | 18 ++++++++++++++++++ .../main/res/mipmap-anydpi-v26/ic_launcher.xml | 4 ++-- .../main/res/mipmap-anydpi-v26/launcher1.xml | 2 +- .../main/res/mipmap-anydpi-v26/launcher2.xml | 4 ++-- .../main/res/mipmap-anydpi-v26/launcher3.xml | 2 +- .../main/res/mipmap-anydpi-v26/launcher4.xml | 2 +- .../main/res/mipmap-anydpi-v26/launcher5.xml | 5 +++++ app/src/main/res/values/array_values.xml | 1 + app/src/main/res/values/arrays.xml | 1 + 19 files changed, 50 insertions(+), 9 deletions(-) rename app/src/main/res/drawable/{ic_launcher_1.xml => ic_launcher1.xml} (100%) rename app/src/main/res/drawable/{ic_launcher_2.xml => ic_launcher2.xml} (100%) rename app/src/main/res/drawable/{ic_launcher_2b.xml => ic_launcher2_b.xml} (100%) rename app/src/main/res/drawable/{ic_launcher_3.xml => ic_launcher3.xml} (100%) rename app/src/main/res/drawable/{ic_launcher_4.xml => ic_launcher4.xml} (100%) rename app/src/main/res/drawable/{ic_launcher_5.xml => ic_launcher5.xml} (100%) rename app/src/main/res/drawable/{ic_launcher_5b.xml => ic_launcher5_b.xml} (100%) create mode 100644 app/src/main/res/drawable/ic_launcher6.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/launcher5.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8b943cc65..431547a52 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -93,6 +93,20 @@ android:resource="@xml/shortcuts" android:launchMode="singleTask" /> + + + + + + + + + + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index 40ee239b2..5de236bd2 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/launcher1.xml b/app/src/main/res/mipmap-anydpi-v26/launcher1.xml index 57e845ad3..d43424490 100644 --- a/app/src/main/res/mipmap-anydpi-v26/launcher1.xml +++ b/app/src/main/res/mipmap-anydpi-v26/launcher1.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/launcher2.xml b/app/src/main/res/mipmap-anydpi-v26/launcher2.xml index 409e0d965..ebc1f1398 100644 --- a/app/src/main/res/mipmap-anydpi-v26/launcher2.xml +++ b/app/src/main/res/mipmap-anydpi-v26/launcher2.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/launcher3.xml b/app/src/main/res/mipmap-anydpi-v26/launcher3.xml index 24428243f..9e7ef6711 100644 --- a/app/src/main/res/mipmap-anydpi-v26/launcher3.xml +++ b/app/src/main/res/mipmap-anydpi-v26/launcher3.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/launcher4.xml b/app/src/main/res/mipmap-anydpi-v26/launcher4.xml index 22463230c..63e51b918 100644 --- a/app/src/main/res/mipmap-anydpi-v26/launcher4.xml +++ b/app/src/main/res/mipmap-anydpi-v26/launcher4.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/launcher5.xml b/app/src/main/res/mipmap-anydpi-v26/launcher5.xml new file mode 100644 index 000000000..7a23c7c66 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/launcher5.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/array_values.xml b/app/src/main/res/values/array_values.xml index dd0842163..ee9d733bb 100644 --- a/app/src/main/res/values/array_values.xml +++ b/app/src/main/res/values/array_values.xml @@ -7,6 +7,7 @@ launcher2 launcher3 launcher4 + launcher5 diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index cb61d6daa..ccb1caba9 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -80,6 +80,7 @@ icon2 icon3 icon4 + icon5 From f4298a88f8ad451bc5ec3433a6ae77a3efd537e0 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 21:04:27 +0800 Subject: [PATCH 118/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/book/search/SearchActivity.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt index 2d1054859..e4a706a74 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt @@ -285,7 +285,8 @@ class SearchActivity : VMBaseActivity(R.layout.activity_book_se private fun upSearchItems(items: List, isMandatoryUpdate: Boolean) { if (isMandatoryUpdate || System.currentTimeMillis() - refreshTime > 500) { refreshTime = System.currentTimeMillis() - val diffResult = DiffUtil.calculateDiff(DiffCallBack(adapter.getItems(), items)) + val diffResult = + DiffUtil.calculateDiff(DiffCallBack(ArrayList(adapter.getItems()), items)) adapter.setItems(items, diffResult) } } From a4505fdf02729a2eb0bd8d307046e3f98312d0e5 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 21:27:11 +0800 Subject: [PATCH 119/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/main/bookshelf/books/BooksFragment.kt | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BooksFragment.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BooksFragment.kt index 4a91379ae..d82480ca2 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BooksFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BooksFragment.kt @@ -27,6 +27,7 @@ import io.legado.app.utils.getViewModelOfActivity import io.legado.app.utils.observeEvent import kotlinx.android.synthetic.main.fragment_books.* import org.jetbrains.anko.startActivity +import kotlin.math.max class BooksFragment : BaseFragment(R.layout.fragment_books), @@ -72,19 +73,23 @@ class BooksFragment : BaseFragment(R.layout.fragment_books), booksAdapter = BooksAdapterList(requireContext(), this) } else { rv_bookshelf.layoutManager = GridLayoutManager(context, bookshelfLayout + 2) - booksAdapter = BooksAdapterGrid(requireContext(),this) + booksAdapter = BooksAdapterGrid(requireContext(), this) } rv_bookshelf.adapter = booksAdapter booksAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { - if (positionStart == 0) { - + val layoutManager = rv_bookshelf.layoutManager + if (positionStart == 0 && layoutManager is LinearLayoutManager) { + val scrollTo = layoutManager.findFirstVisibleItemPosition() - itemCount + rv_bookshelf.scrollToPosition(max(0, scrollTo)) } } override fun onItemRangeMoved(fromPosition: Int, toPosition: Int, itemCount: Int) { - if (toPosition == 0) { - + val layoutManager = rv_bookshelf.layoutManager + if (toPosition == 0 && layoutManager is LinearLayoutManager) { + val scrollTo = layoutManager.findFirstVisibleItemPosition() - itemCount + rv_bookshelf.scrollToPosition(max(0, scrollTo)) } } }) From 8e422121a3c2d365798e454076b1301592b8b52f Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 22:03:36 +0800 Subject: [PATCH 120/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/book/search/SearchActivity.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt index e4a706a74..8de6a489c 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt @@ -283,11 +283,12 @@ class SearchActivity : VMBaseActivity(R.layout.activity_book_se */ @Synchronized private fun upSearchItems(items: List, isMandatoryUpdate: Boolean) { + val searchItems = ArrayList(items) if (isMandatoryUpdate || System.currentTimeMillis() - refreshTime > 500) { refreshTime = System.currentTimeMillis() val diffResult = - DiffUtil.calculateDiff(DiffCallBack(ArrayList(adapter.getItems()), items)) - adapter.setItems(items, diffResult) + DiffUtil.calculateDiff(DiffCallBack(adapter.getItems(), searchItems)) + adapter.setItems(searchItems, diffResult) } } From 91911b150538dc19476ffdad3bdf5399666966d7 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 22:23:40 +0800 Subject: [PATCH 121/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/drawable/ic_launcher1.xml | 129 +++++++++--------- ...{ic_launcher2_b.xml => ic_launcher1_b.xml} | 18 +-- app/src/main/res/drawable/ic_launcher2.xml | 72 ++++++++-- .../res/mipmap-anydpi-v26/ic_launcher.xml | 4 +- .../main/res/mipmap-anydpi-v26/launcher1.xml | 2 +- .../main/res/mipmap-anydpi-v26/launcher2.xml | 4 +- app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 5200 -> 4369 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 3512 -> 2871 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 7923 -> 6457 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 14655 -> 11550 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 23019 -> 17591 bytes 11 files changed, 137 insertions(+), 92 deletions(-) rename app/src/main/res/drawable/{ic_launcher2_b.xml => ic_launcher1_b.xml} (78%) diff --git a/app/src/main/res/drawable/ic_launcher1.xml b/app/src/main/res/drawable/ic_launcher1.xml index bead863ac..c94879044 100644 --- a/app/src/main/res/drawable/ic_launcher1.xml +++ b/app/src/main/res/drawable/ic_launcher1.xml @@ -4,73 +4,66 @@ android:viewportWidth="108" android:viewportHeight="108"> - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher2_b.xml b/app/src/main/res/drawable/ic_launcher1_b.xml similarity index 78% rename from app/src/main/res/drawable/ic_launcher2_b.xml rename to app/src/main/res/drawable/ic_launcher1_b.xml index be66fb2a7..ebcdacb1b 100644 --- a/app/src/main/res/drawable/ic_launcher2_b.xml +++ b/app/src/main/res/drawable/ic_launcher1_b.xml @@ -7,13 +7,13 @@ - + - + + android:pathData="M30.79,64.69l0,-23.38l46.76,-0l0,23.38z" + android:strokeWidth="0.5" + android:fillColor="#fff" + android:strokeColor="#000" /> + android:pathData="M26.33,66.36l0,-26.72l4.45,-0l0,26.72z" + android:strokeWidth="0.5" + android:fillColor="#fff" + android:strokeColor="#000" /> + android:pathData="M26.34,37.41l0,-3.34l4.45,-0l0,3.34z" + android:strokeWidth="0.5" + android:fillColor="#fff" + android:strokeColor="#000" /> + android:pathData="M27.44,39.64l0,-2.23l2.23,-0l0,2.23z" + android:strokeWidth="0.5" + android:fillColor="#fff" + android:strokeColor="#000" /> + + + + + + + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index 5de236bd2..7a68d4392 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/launcher1.xml b/app/src/main/res/mipmap-anydpi-v26/launcher1.xml index d43424490..b3aa68018 100644 --- a/app/src/main/res/mipmap-anydpi-v26/launcher1.xml +++ b/app/src/main/res/mipmap-anydpi-v26/launcher1.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/launcher2.xml b/app/src/main/res/mipmap-anydpi-v26/launcher2.xml index ebc1f1398..5de236bd2 100644 --- a/app/src/main/res/mipmap-anydpi-v26/launcher2.xml +++ b/app/src/main/res/mipmap-anydpi-v26/launcher2.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index fb0c6bcd328cf80a4d110ddc9796a6ba934db1a6..0fe58e361ba22b88bf786ead77d25e338defb1f5 100644 GIT binary patch delta 4202 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 FV1kRc%IyFE diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index fc9a317f77da09bf44a4a3583751d64d096938cb..59526eefd7154c82edc5e0468c1941351dd6f54f 100644 GIT binary patch delta 2692 zcmV-~3VZdq8@Cpakbe#q5t6b2F#rGx6iGxuRA}DKnO$s@RT{^C=bZPQnbHp^wS1=N zu5F2C-@P0!_S710i0(CTM~e#w>}@4ax;BVZDG&%x*|Xut}o^uYdrF z1fwWw*VZ}|0yUtd-}Cjp=bXJ5W|)@gbcPk!Cpq+;ndd$4|9}6S=l?wCJqX5GYisLt z&+}dbUH}#X(*VK!F$)X=oxrEA>mF=xZ~ryZAq{Nf#*KKM_nOvvuQ6uYeFB`*q?E%- zskdC$J#gg65dc&Qd@L4g(^|i0tqt98pc9$3HfW4lueGjNym;}kAAa}&3E+9&YsQ$j z?l-`E%^0)Q^MAZ;0HU?Eb-LF2=l|EVnaHG+qe`h7=cZuu0&lIwS_^;>0wMC#wzW2^ zuhtrCEmBIPlm!tm#uOW4wn&oICT}2%7A<1t%$azeht?XcHNNksM?4r4R5nKOsiUw?f}a8d!v(_WAyOXZ}N0)N`o)y1Jhhgh&+0aaC1G&D4@ zWXY2Bc=p+6`RudLsIIO~6KHO3rmd}wva&LaG5EeuB9Xvx95!s&fKm$2^O!MX#u$=$ z*dvkx(&x=L-$V$(wr$(!>FFUH4s-J4Nj%TP7{i$}XSjU%GC~M$+_(WGQ?0$do$~T> zqR}V->wnj;r?s_}RjXD3@Z59Hv3c`mcI? z{`~no|NQgp*|UdDn>NwW(J@9BLqkJp0{#8{Y}v8}V+=|uIyyS=Jdf(?YF>QtMLIe< zh(@C*r3eH92qADBCocy1d6CRn0MGL%EiEM)jem0S;zcSdDmZ)gEK*9QO`DeXOM#y| zcP_>lUU}se&YU?zZ*MQPwY5Yd5lTu*xN_wRt5>f^2tj>)J#**I``PrKP3R)zz_l`Eow`=p*|2`e6Uw4am`Ap}aPG5XlOdpAG+_#Lq&+|}9@#?FurhV_q3Zx>{($d2I{rlq}1LIAesD4S+F*Wy_XPU0sdu`+vOj z(n|oWS+jRYlCE`2MKyh&~MMXt)baXIv>Qo?EW>cLxTjY%~ zIF5t0miG2`Mn*>1wQCoL4jtm?(WAuU@${BLDV4X73r-=eHI0ppeE8vqxUQSd*%d2R z(AL&=TMlcjaU2Jw6fG?+3=9n5`+q)-jg7=&F%BO-OjA=6TeohdqM~AqW`0)!sR^Z& zbar+!Fff2pig-NE&Ye5?>Z`B#_~VZ$Dk@6*rK11F8*dN{2HC!SJK=B`*L7)F+Q8nu zdkF@E96x@7Kp?=8BS&ayX(?zwly?d_j>E{v2)(_%jEsz=BdxXO+_`h!C(*}1P2Zr;FC{2;nKy6IIiN6g@5AThyR6;prk}d_~3(mR905<%{Si^lo4XX zh7Ebq)ml?tUe1jhH&9BYx5%lHsxZ~n)m*xCDP2YZjJ0SBz5r_luIrFUB+|c20ZJQ$ zwIC=ch4Nkjr4)mMgD9maFMltmzP_IB?ryGLy_&A~j^hvxhts5d-)Hvh+4NnzMy(rQ z^RyC-REUH|Y9Buk00}mx`CDXwQL73TWkLR_NY~WV@a?zX($v(15Q3(rCT7i=MKBm- z?b@|8G&B$l23fam9c$LC!83*xp#b%>=1^Bx&!bN@u}~=%|GAaLPk%klV-L>bF(*Vp z8|gbC0JrLURaF&NuU=*8(xp^XRPe+TPw?cEPjdYDajL4SXl!ic^UpuW_x)tUvH~25 zc7yniOMHrp_v>%OFZF-~7m++fx!VM!lnf3I^3zX0p|$4w@4qLJNYK;M!-WeMXl`!C zT1#hVC(X^x#N%-sDSzqmqKvpf66K|gc6AebU>5QCDAB4v(BD5qw;x5`!ReD&w{D$H zMK!a0WnQNQHC|YmpVNZ9xjo4IO-PABAxsRVEivVyjK=sDgGQq8mB6uvTUa19#hAG= z_EbU$oMp?F5exrr3L&K=5C{O^x-Qn*^ebRI9%poPlz&Jh!tn4ggM)+g_xCe2 zG=$a~rBu3`jwdUPk7ooi>mi~Erj(XY`QRL8KQNQ2)61CR2ANh_L0MTDpPm(^H2~D)MN$k64cQd%)Se~V-_&*H z=gg7W55D{EJB}Vb%Ju8lky7&V%P+HW<3?Q99SixlYsvT7Y`JeOCKyDNmLsrC^yWK; zz+~Vj`z}QKYchV{0wONv>F~;^f?ZpJk%&CL@{YXN=*YhaSq| zEg%xb3Z1?DTZ?srlOCBkxqwYZX0nyYe8JB$J2n~tp;2~x{s=Gz9V)&>Hs2K(4`!n1 zrvy9xzJL5vQefkQIM&6W5k_O&B2*#)N+v6j7fV8)Si{JPBAUy_1I;|}Ey&_gh(-`2 zQT%xiBUY{^QCtk8BM^;Xy~Lzb+$QZ@UAYi~`Iv}A(9sd}f?Cx4g$U{3E?YsOd^%=y z7!nCAkSh`8L=VhI7vrxBJ6YD)NDTAXGQ|8vNq<5XtZ;BwJdHPJCL$V3&YfeHF&Y>j z>B4fF3GdDB2&`I*n)mRnG!P&ySRn|kSdV}4G76A6L@dWY7;ewy$yTVqGyUW}Lg8eB z&mbXgZseRl&O?y94@f(~)AQ{Ig{0p&oQMhBtN<)&@HPhnN%H?;f0xJ>yb>bE*J4sP z0Dn&co!N4KB2bexvOC$D{15gY34EFj^hCh3**ylGX`jlnva*ALKwucgcGpZH=OU9! z{CC-+z(1r?>er&8qPKDZ%k^D0yGJYXS0Tg|380iZ5C{bRo(Uk^US~YG@z?h-h5iY= z2RHkG5Q4I@vTbE$Wq%0-0;Aa)Shmev<~wzY@Li666xac55+YfIZ#6+72!%o)ghHVj zU?*@MNMr+ZkE8Da7l7SBtq@{Q3OvAn0YJGcij@L@pp!TaBo?wVGO{wT&^EBJGB5xD yK~x0~Q7=qYlX49tBC;|vvNEvHHn6ZVFaQ8SR0R)s5aite0000spio3vL_km&OVz{B8QS9MSeY|Dt;Lb)IWBa@0iD)qwVbMLJ&sF9>q4m;T|iM# zP-@u>AY0f1CO0d&_xCRI$M5DQVM%fdJ&eyeIVZn!fA9M~%YXOzKF|ByD>zMNFI>_k zOeGfqbAS;*0U)?I;(=;l2k_e<7Jp*((~q8L`9emqxnKV-CQL1|#ysqtEx1Suw<%Jp zTBY?;9mF1c`N@?4s3zr;ryBmvDdM@$a$DOsaoV8s?jGgrQu8-eC0+=wh z$T_?8Vk_8DaevOvY0?p_B)3&gQt3y+abQ z%@m{xy{$s{FRIuoWEaepo{BhUetl@6dWWiZy#(tc+h zQ?D7%&sY3_?5sG>dA#>+I_Y%L?Rg&SNIJ_W+jsEO|6IoWZ+wTm&Yc<1rzh50yc0+P zRtS1@E#RLP-NsLzc!Ag6{5?oTePfb&v#)2t{8_AA^(-eVPGB84=ShVj$z&t_`t(Ey zK{A)+kNw~jBTGLaxrUCqAo3JN-DW=x&L z+w0%s^U4HQTo$EMdHJCXjFb>O^Xpgn?wt#%uByU$7&UAVr33qt3Pbw$?~ey&Or3}` zA=9p#$h#kI<+&GEpMM05v0OQ7IFrVYVdIvM*?)835LaJ0nw*?Yyzz(iTs`{B+Us8+wZyQ9AdZmjktCo-L#oG(<>c zo_|)}ITx)DL%uX(IC*(F1TjtTKE3GEyM(@dd(opuH*_q=dAO4t>3CYRLrf*?S=FOVMfPVeC z_rZs-v>k=^vjp(oVVy$?LC+rDc;$^huy+0X{OD)Dpt`08yyMuhqZ!qV3+pz1KuK|TYAa8I z5GWlZP?~k`egNJhRSYTGzlL(;& z(IbbFG9jL}i(2~;5D}Y5Avt{XIQQK7kF0s?9p3+73k&AYLMwq*3MpG~o`3ggMmpUH z&*1(&xq93c)K=Fq^~+b$qqqq0OrLZ$mk%3=Lvq99iR2e_V)-Mh*tPp$n{IB`0D-_e zkMmI2DbCPggIWBYe?!HCbZ!WolSpARxpFq2c`q=|QMR|7L|p^bi7Jvw!@d9fO*VbF zjh{UE972E)o|k_623`oX(tl{JX^V$C%tFE$ZoGa95B>OYtOKP)n&%ze^K?^70)IJf(wxY z0_Ox$d&*B#P`0letu#u3P?FxgOIR>}4s)hY%lO`VpUDC13}Z)+Kz|76(Y=W0ezS(^ z`cp{h`P!{>x%>W=q>QEP(_P$m_gyT#>udDrT8J^J4mEY{LP$!95SDm6m(3sj1+4;v zfI!9gkN;XlWuk`c>`sgyH<~`hU7OdW*Js5P3+B%wk*MT*4?IF$eIr7^%qbIj>=)0H zs5?cVHFb@KWy@Favwue(VET2FSbX<=96WU7{0vY^g7>`o`r3#sd^4>nrKxXBkrj_) z!W5}gJ$Efx!uk!HC_j1(p<@6fL&x{;UrAnGE{U2tbRfyg&82MLVGbNVMxYczfL5B% zs~foIfgdsJ+HvgOyPtS0);>ONxb=>6#>rSq&u(2fT5$rU&wq_a?>)&d$?!n~*|T>a zUMiGQtv-*yC~(q|r2|sQ5HCclJ)@SzBfJMGQSv+snNo_1%4$>)I}0I#!-Mk(Ag1H& zIdB-EW1N0&OC_b3q(Xz2GQ(D)#e0E*rqt}nwWiG^7DTytHa|E#xiP`$kwYmR&=+tB zJc!7XrxoAyO@FI-XKzCaJLjBn)%4LW9a6qs1KJYrJeTzAM_x`2`JMBbF!pkc^*CcG z%*z26HGsx>vI0d`Ru)=otPKgRB{w&ZN#m}F3gCIjd904Se6aj5y-SKnRMlck$lRIN zGHOIAw}0g(oH6w5R=~U&leuy71m?}Sjz;5|H**T3M}L$u=JJs^*Ku!OU;`Wii8UcX zpxIfr8}JMnSc+EJ;0#JYzh1?xS+{}bSFc6j5hh7YOI}_34qJEbY}LX3HPWGO^y~{2 z^^GBo#_`Uk%?uwgf~}uyWA)o_GxE}5?Ace2MX+`IZf>4&EpZ*=;IR{kAe$X~4)E=N zxQ+bIxqo=t@A=!3Hfb~pQ50h5o^%iAEC`8EGFt1Raf*}zB|O$k za0U=arO*N#&8!qz)RfMGwtAsf5onspc;|55<6Lwnl~N&vLn(##9_L&%Qo*B?MoEci zQGHRerL9P*&p6ZxjdPY%Dus~}B_**S03kB7Cx2@#2!WIWDbi=0Ry%ZZq+wP*G9A(PKwBdHe`R%MVgjRTVXt zLVqBIKs>nWMPFD@K-V6{6crVrv$OHef%91BG7*V5JY7-KUXW6ul*BcLytCnttpEL6 zIA>5wpHa1adW@)p7*lST#n^EZkV;{l&79M6Y!{s&ky0R}M5g~g)lkogiesESae_ou z6=Gdk!bfn4;3Iql8{g5?5*{f8N(Y>(t$*eDXMV-O{d-%r!rpsKD#^g1mvYN(3yEiC zM`K3k=qQPbv_?J+C7Cu*tlfU%d}z4U5lTsv5WM!%3vBstBe8Td7N$~+n{W-Y=FBB! zn{(?zNQY=tq&<*%7LntklArc65k$O{+;q#WAYjX;_Yrs|TsxKPZ@igQIyuj^FMpYM zcs!D3ZfnZ`A-n+5gzKhEkFq{GLI{BglbA5X7@IjpN<|Qh69fU?y9{#}=egU z(qxcxQ3RYdqEp@m5*#{qEv}e3Z)gvFvZ~`#~4~V zgk)nKtAF#qR903J#Iu_B&VLl7GcFIbgmcrrS}C;Fs31V<0EEOC^Q4%)a7lM-!oAM9 zybDGR-eauCScAZ$wazGgp+rh`N@-oH%Kp5mVd$5}S37HGU9jELA1^A`F#Wp4cb`t&E=JC}}KU&`M!~X+_UF^_9 zO)>zJw+bW{urjc)GBVLNu&^>P002Q$1rL0)g5#6%3M3-1GO(~RGSN1$ure?J06|m* U4^@mRYXATM07*qoM6N<$g5JY!&;S4c diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 24640cb72ee911d0f9907212706fe66fffc700de..58b1e389a51dc361eabc311380ce55c978a94276 100644 GIT binary patch delta 6306 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 ANdN!< delta 14569 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 PK@KH3HQ8$EFJb=&-d-(j diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 5aa535f1bc41e42272ed7a0117549fa91562972d..fe1be3fdea372481629d313f3ff34e4a52ae2e5c 100644 GIT binary patch literal 17591 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 literal 23019 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 From 2352af7e484a7a6b81e55337f9e093f2f1052163 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 22:30:54 +0800 Subject: [PATCH 122/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/popup_action_menu.xml | 53 +++++++++---------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/app/src/main/res/layout/popup_action_menu.xml b/app/src/main/res/layout/popup_action_menu.xml index 547d9bce1..0f6b6e0e5 100644 --- a/app/src/main/res/layout/popup_action_menu.xml +++ b/app/src/main/res/layout/popup_action_menu.xml @@ -1,36 +1,37 @@ - + android:orientation="vertical"> - + android:gravity="center_vertical"> - + + + + + + android:orientation="vertical" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> - + From 00dee9938787a5aa5b7400434dcf37ab388bc5ad Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 22:57:45 +0800 Subject: [PATCH 123/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/drawable/ic_launcher1.xml | 42 ++++----- app/src/main/res/drawable/ic_launcher1_b.xml | 98 ++++++++++---------- app/src/main/res/drawable/ic_launcher7.xml | 54 +++++++++++ app/src/main/res/drawable/ic_launcher7_b.xml | 12 +++ 4 files changed, 136 insertions(+), 70 deletions(-) create mode 100644 app/src/main/res/drawable/ic_launcher7.xml create mode 100644 app/src/main/res/drawable/ic_launcher7_b.xml diff --git a/app/src/main/res/drawable/ic_launcher1.xml b/app/src/main/res/drawable/ic_launcher1.xml index c94879044..18c829634 100644 --- a/app/src/main/res/drawable/ic_launcher1.xml +++ b/app/src/main/res/drawable/ic_launcher1.xml @@ -4,66 +4,66 @@ android:viewportWidth="108" android:viewportHeight="108"> diff --git a/app/src/main/res/drawable/ic_launcher1_b.xml b/app/src/main/res/drawable/ic_launcher1_b.xml index ebcdacb1b..559d07c34 100644 --- a/app/src/main/res/drawable/ic_launcher1_b.xml +++ b/app/src/main/res/drawable/ic_launcher1_b.xml @@ -4,53 +4,53 @@ android:height="108dp" android:viewportWidth="108" android:viewportHeight="108"> - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher7.xml b/app/src/main/res/drawable/ic_launcher7.xml new file mode 100644 index 000000000..983784aef --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher7.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher7_b.xml b/app/src/main/res/drawable/ic_launcher7_b.xml new file mode 100644 index 000000000..76214f1e4 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher7_b.xml @@ -0,0 +1,12 @@ + + + + From 75c0c0096046b1a0e32f5ca1d0a7c55100609e02 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 17 Mar 2020 23:01:09 +0800 Subject: [PATCH 124/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 14 ++++++++++++++ .../io/legado/app/ui/welcome/WelcomeActivity.kt | 3 ++- app/src/main/res/mipmap-anydpi-v26/launcher6.xml | 5 +++++ app/src/main/res/values/array_values.xml | 1 + app/src/main/res/values/arrays.xml | 1 + 5 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/mipmap-anydpi-v26/launcher6.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 431547a52..b30b4bf58 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -107,6 +107,20 @@ android:resource="@xml/shortcuts" android:launchMode="singleTask" /> + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/array_values.xml b/app/src/main/res/values/array_values.xml index ee9d733bb..40bc6684e 100644 --- a/app/src/main/res/values/array_values.xml +++ b/app/src/main/res/values/array_values.xml @@ -8,6 +8,7 @@ launcher3 launcher4 launcher5 + launcher6 diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index ccb1caba9..39c85cae3 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -81,6 +81,7 @@ icon3 icon4 icon5 + icon6 From 5cc7063136861ffe7d6ed59b365cf36823a0aba9 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 08:20:32 +0800 Subject: [PATCH 125/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 5410750cb..60e8e6217 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -1,9 +1,12 @@ ## 更新日志 * 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。 * 请关注[开源阅读]()支持我,同时关注合作公众号[小说拾遗](),阅读公众号小编。 +* 弄了个企业公众号[开源阅读](),后面弄好后会把原来的开源阅读软件迁移过来 + +**2020/03/18** +* 尝试修复搜索时崩溃 **2020/03/16** -* 弄了个企业公众号[开源阅读](),后面弄好后会把原来的开源阅读软件迁移过来 * 修复滚动模式切换章节位置不归0的bug * 修复文字选择更多菜单在部分手机上报错的bug * 修复文字选择菜单问题 From 0014f97e4898598268dce66b5cb451fcc5d4f77b Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 08:24:52 +0800 Subject: [PATCH 126/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 60e8e6217..28a759ced 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -5,6 +5,8 @@ **2020/03/18** * 尝试修复搜索时崩溃 +* 解决看过书籍的移到顶部需要向上滚动才能看到的bug +* 只有再书源被删除找不到书源时才会自动换源 **2020/03/16** * 修复滚动模式切换章节位置不归0的bug From 7961e10a9eaeabbc517cd009e463373c12ad3c77 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 08:32:42 +0800 Subject: [PATCH 127/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/help.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/assets/help.md b/app/src/main/assets/help.md index 145139a13..9f77645b6 100644 --- a/app/src/main/assets/help.md +++ b/app/src/main/assets/help.md @@ -1,3 +1,5 @@ +## 常见问题 + 1.为什么第一次安装好之后什么东西都没有? * 因为阅读只是一个转码工具,不提供内容,第一次安装app,需要自己手动导入书源,可以从QQ群、公众号“开源阅读软件”、酷安评论里获取由书友制作分享的书源。 From 3b33b12bd09800f29518b430a89776cf9d7c23d0 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 11:16:36 +0800 Subject: [PATCH 128/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/help/LauncherIconHelp.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/help/LauncherIconHelp.kt b/app/src/main/java/io/legado/app/help/LauncherIconHelp.kt index 90c63e4b7..b859336e4 100644 --- a/app/src/main/java/io/legado/app/help/LauncherIconHelp.kt +++ b/app/src/main/java/io/legado/app/help/LauncherIconHelp.kt @@ -19,7 +19,8 @@ object LauncherIconHelp { ComponentName(App.INSTANCE, Launcher2::class.java.name), ComponentName(App.INSTANCE, Launcher3::class.java.name), ComponentName(App.INSTANCE, Launcher4::class.java.name), - ComponentName(App.INSTANCE, Launcher5::class.java.name) + ComponentName(App.INSTANCE, Launcher5::class.java.name), + ComponentName(App.INSTANCE, Launcher6::class.java.name) ) fun changeIcon(icon: String?) { From 93de67f4ff51d89a055c1f791bc0b9dbbc2bf7fd Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 13:56:57 +0800 Subject: [PATCH 129/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/service/help/ReadBook.kt | 7 ++- .../app/ui/book/read/ReadBookViewModel.kt | 12 ++-- app/src/main/res/drawable/ic_launcher1_b.xml | 52 +++++++++--------- app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 4369 -> 4287 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2871 -> 2895 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 6457 -> 6380 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 11550 -> 11381 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 17591 -> 17309 bytes 8 files changed, 38 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/io/legado/app/service/help/ReadBook.kt b/app/src/main/java/io/legado/app/service/help/ReadBook.kt index 68b1601ac..50cadd655 100644 --- a/app/src/main/java/io/legado/app/service/help/ReadBook.kt +++ b/app/src/main/java/io/legado/app/service/help/ReadBook.kt @@ -33,7 +33,7 @@ object ReadBook { var curTextChapter: TextChapter? = null var nextTextChapter: TextChapter? = null var webBook: WebBook? = null - var msg: String? = null + private var msg: String? = null private val loadingChapters = arrayListOf() fun resetData(book: Book, noSource: (name: String, author: String) -> Unit) { @@ -64,6 +64,11 @@ object ReadBook { } } + fun upMsg(msg: String?) { + this.msg = msg + callBack?.upContent() + } + fun moveToNextPage() { durPageIndex++ callBack?.upContent() diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index 90d559f8d..25d94bdea 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -117,15 +117,16 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { App.db.bookChapterDao().insert(*cList.toTypedArray()) App.db.bookDao().update(book) ReadBook.chapterSize = cList.size + ReadBook.upMsg(null) ReadBook.loadContent(resetPageOffset = true) } else { changeDruChapterIndex(cList) } } else { - toast(R.string.error_load_toc) + ReadBook.upMsg(context.getString(R.string.error_load_toc)) } }?.onError { - toast(R.string.error_load_toc) + ReadBook.upMsg(context.getString(R.string.error_load_toc)) } } } @@ -133,6 +134,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { fun changeTo(book1: Book) { execute { + ReadBook.upMsg(null) ReadBook.book?.let { App.db.bookDao().delete(it) } @@ -171,11 +173,9 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { } } }.onStart { - ReadBook.msg = "正在自动换源" - ReadBook.callBack?.upContent() + ReadBook.upMsg("正在自动换源") }.onFinally { - ReadBook.msg = null - ReadBook.callBack?.upContent() + ReadBook.upMsg(null) } } diff --git a/app/src/main/res/drawable/ic_launcher1_b.xml b/app/src/main/res/drawable/ic_launcher1_b.xml index 559d07c34..c5b40eb91 100644 --- a/app/src/main/res/drawable/ic_launcher1_b.xml +++ b/app/src/main/res/drawable/ic_launcher1_b.xml @@ -7,49 +7,49 @@ - + - - - + + - + android:fillColor="#f2f2f2" /> + - - - - - - + + + + + diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index 0fe58e361ba22b88bf786ead77d25e338defb1f5..d2c418293453ed5d4b603eb290aaa860340b949b 100644 GIT binary patch delta 4128 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 f)HblNGB5xDL9PWBJ!9*D00000NkvXXu0mjf8k{

    !N0Wkmo3KU61K~!ko&6!2!t_*e5ykotfu7?|=XQoag^M=RF9Ntu?;yr$;;<$M=0a&%;`a zF^1C8QWA*-TI);z%$YNX*I$2qOmI>G%F|wuBunL_mVW};)z!tJLx)(fU;$NCRWvj- zuw==S^mz8!XZh^2 hP7`QuZlm*nm&&#`&)W_Ik@L3w$3Ap`;rc{VBE_j%@-XE=NIET>ML zV*dR3JpcUj?Af!2O`A5+(a|wR7ehlsX#)NI{cPE?1!D|KDLOhj@H~&|>S|tm@kKg1 zI*3N2D5VGl0tg{+949XZ`FWAdSpd)TC@n1|8h?#)@!~})Dk?a8_AF9LrcIlc_Dg}E zJ9jR|7+!hh70#SFLvL>{wY9ZGA`wbTO1N_63aeMIMhHQDeLZvM&gJd5-$rYlSCJ@8 z`ZtNpm@$Kc2M-bshpDZtrMtVEZQHi7diClt1dK5R0s%@&N@#3sq^_=x?(S|*oH#*A zNq-6F&Yh#Tx0lnWPjl?pF=ox0MR#|1-q9~;1u{YTzR&RRFsDzSCKL)$TwDymFTeaU z##abII2VYoouvAJ=vBE~^C- zu-4)@4)J)Lef##&)zw8!O${ecp5*%V>wg4;!L*;05+MXisWJN4y?Zx5{`ezbe)%Op zy7CMU52KVS2v5N&1kl&l$2;%5!;&RS_~MH%XlQ8Q{rBG|91iD+4HS$csx!?NeR`})vR2(l2fNnF-1j1baZqub?Q_gS!Pq6Ia}n7 zF*uHcwU+kwc1A`<*tKgHhYlU$=+UFZ8}jePjwhq$hr&e;_! zR?ybgc3Tc>t#KR&r4%hKEes3{;D7r*jg5`OVlfUMK1@?n6I-`#rJ|x@jAnjU0;vh5 zlyr7>GB7ZJQi^yy&d!}X`Rc2$`1s?GDJm*T`=z4)#v5-C33@gr+O>=G z=g;GL9>HJ`Ap{2w9N?2rKH<{Ei#V?0k%fQa--rK&kf5YQNciA`eNs~O94t7 zgtZ_jD24J~0i_g!gM%ogD1R?6r@p?P?(S}`UcH*G_m1Nb4u{jEeBWpG?Ai2PyGE@W zVDq#Rj8uq(Mrt2F5C91_rukcBfKjUo7G**HsYut<)bQ=M-_q37gb;$JrY2_1nnf@e zWbN9uG&D323C&ZCR8;W96HoBulTUK|_;ISLs%UI%+Vm@6JRWCsbbpjcB*O6UFoT1G^!N8O zG&F?P8l_aan~oX7lA=cP;Z=U z0-nq!5_{^i@B1jF*s^8Igy6wqqfw-=*<))h#!0SNuHxj}exGHc?1T}Lp@$yI z;VmE%#R{Fh{9B84gOeVaIJtmLMrN{=$b7-iGCMXJ0ijWLeEtY91|2HCMK<3R7!PKm z=%)lb{(rvwQ&M2#gE-d3pbkg87(;M9|R@^nzN{{DlbV;4WK1qI^1L zbQlr|ERZV^`7OZe^S3He3XC@*VOU|8RmN6O_ zAL+t!nhEdC?g*?}i<DqN2BQ0n7DWHoHeF@>e0m6$zk}IuHm1{+2;bGBUC00000NkvXX Hu0mjf1}q?% diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 58b1e389a51dc361eabc311380ce55c978a94276..4b44e0bba472de3710d678399ba5476e83389b04 100644 GIT binary patch delta 6265 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 d9nBx{{{cTh6cGRb diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index ea95882bdcc7753a5ea72df2db7b87abe6e1f65c..df9bfebb8386aa71764de2326d44e6f5b8795b77 100644 GIT binary patch literal 11381 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 literal 11550 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 ANdN!< diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index fe1be3fdea372481629d313f3ff34e4a52ae2e5c..6d101d80649eef54b39441843d6adbf9cf277178 100644 GIT binary patch literal 17309 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 From bfbbbee0106cc0672b52232da694b914fe2b8a1f Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 13:58:12 +0800 Subject: [PATCH 130/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/service/help/ReadBook.kt | 2 +- .../main/java/io/legado/app/ui/book/read/ReadBookActivity.kt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/service/help/ReadBook.kt b/app/src/main/java/io/legado/app/service/help/ReadBook.kt index 50cadd655..f18280d49 100644 --- a/app/src/main/java/io/legado/app/service/help/ReadBook.kt +++ b/app/src/main/java/io/legado/app/service/help/ReadBook.kt @@ -33,7 +33,7 @@ object ReadBook { var curTextChapter: TextChapter? = null var nextTextChapter: TextChapter? = null var webBook: WebBook? = null - private var msg: String? = null + var msg: String? = null private val loadingChapters = arrayListOf() fun resetData(book: Book, noSource: (name: String, author: String) -> Unit) { diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index 8cd1915cc..90e7eade1 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -682,6 +682,7 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo mHandler.removeCallbacks(keepScreenRunnable) textActionMenu?.dismiss() page_view.onDestroy() + ReadBook.msg = null if (!BuildConfig.DEBUG) { SyncBookProgress.uploadBookProgress() Backup.autoBack(this) From 5ba70883b4aa29b8c1e84687b5f33f5697e625ec Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 13:59:35 +0800 Subject: [PATCH 131/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index 90e7eade1..e81d7cad9 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -92,6 +92,7 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo override val headerHeight: Int get() = page_view.curPage.headerHeight override fun onCreate(savedInstanceState: Bundle?) { + ReadBook.msg = null Help.setOrientation(this) super.onCreate(savedInstanceState) } From 84073b006927b73884f74b7c4832d2be073083cf Mon Sep 17 00:00:00 2001 From: yangyxd Date: Wed, 18 Mar 2020 14:31:04 +0800 Subject: [PATCH 132/350] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=B9=9D=E5=AE=AB?= =?UTF-8?q?=E6=A0=BC,=E6=90=9C=E7=B4=A2=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/book/search/SearchActivity.kt | 2 + .../io/legado/app/ui/widget/SearchView.java | 119 +++++++++++ .../io/legado/app/ui/widget/ShadowLayout.java | 195 ++++++++++++++++++ app/src/main/res/drawable/ic_help.xml | 27 ++- app/src/main/res/drawable/ic_search_hint.xml | 8 + app/src/main/res/layout/activity_main.xml | 2 +- .../main/res/layout/item_bookshelf_grid.xml | 90 ++++---- app/src/main/res/layout/view_search.xml | 11 +- app/src/main/res/values/attrs.xml | 13 ++ 9 files changed, 408 insertions(+), 59 deletions(-) create mode 100644 app/src/main/java/io/legado/app/ui/widget/SearchView.java create mode 100644 app/src/main/java/io/legado/app/ui/widget/ShadowLayout.java create mode 100644 app/src/main/res/drawable/ic_search_hint.xml diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt index 8de6a489c..4373dd41a 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt @@ -3,6 +3,7 @@ package io.legado.app.ui.book.search import android.os.Bundle import android.view.Menu import android.view.MenuItem +import android.view.View import android.view.View.GONE import android.view.View.VISIBLE import androidx.appcompat.widget.SearchView @@ -128,6 +129,7 @@ class SearchActivity : VMBaseActivity(R.layout.activity_book_se openOrCloseHistory(hasFocus) } } + openOrCloseHistory(true) } private fun initRecyclerView() { diff --git a/app/src/main/java/io/legado/app/ui/widget/SearchView.java b/app/src/main/java/io/legado/app/ui/widget/SearchView.java new file mode 100644 index 000000000..3ee0bd69b --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/widget/SearchView.java @@ -0,0 +1,119 @@ +package io.legado.app.ui.widget; + +import android.app.SearchableInfo; +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.drawable.Drawable; +import android.text.Spannable; +import android.text.SpannableStringBuilder; +import android.text.style.ImageSpan; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.Gravity; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import io.legado.app.R; + +public class SearchView extends androidx.appcompat.widget.SearchView { + private Drawable mSearchHintIcon = null; + private TextView textView = null; + + public SearchView(Context context) { + this(context, null); + } + + public SearchView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public SearchView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + try { + if (textView == null) { + textView = (TextView) this.findViewById(androidx.appcompat.R.id.search_src_text); + mSearchHintIcon = this.getContext().getDrawable(R.drawable.ic_search_hint); + updateQueryHint(); + } + // 改变字体 + textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14); + textView.setGravity(Gravity.CENTER_VERTICAL); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + private CharSequence getDecoratedHint(CharSequence hintText) { + // If the field is always expanded or we don't have a search hint icon, + // then don't add the search icon to the hint. + if (mSearchHintIcon == null) { + return hintText; + } + + final int textSize = (int) (textView.getTextSize() * 0.8); + mSearchHintIcon.setBounds(0, 0, textSize, textSize); + + final SpannableStringBuilder ssb = new SpannableStringBuilder(" "); + ssb.setSpan(new CenteredImageSpan(mSearchHintIcon), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + ssb.append(hintText); + return ssb; + } + + private void updateQueryHint() { + if (textView != null) { + final CharSequence hint = getQueryHint(); + textView.setHint(getDecoratedHint(hint == null ? "" : hint)); + } + } + + @Override + public void setIconifiedByDefault(boolean iconified) { + super.setIconifiedByDefault(iconified); + updateQueryHint(); + } + + @Override + public void setSearchableInfo(SearchableInfo searchable) { + super.setSearchableInfo(searchable); + if (searchable != null) + updateQueryHint(); + } + + @Override + public void setQueryHint(@Nullable CharSequence hint) { + super.setQueryHint(hint); + updateQueryHint(); + } +} + +class CenteredImageSpan extends ImageSpan { + + public CenteredImageSpan(final Drawable drawable) { + super(drawable); + } + + @Override + public void draw(@NonNull Canvas canvas, CharSequence text, + int start, int end, float x, + int top, int y, int bottom, @NonNull Paint paint) { + // image to draw + Drawable b = getDrawable(); + // font metrics of text to be replaced + Paint.FontMetricsInt fm = paint.getFontMetricsInt(); + int transY = (y + fm.descent + y + fm.ascent) / 2 + - b.getBounds().bottom / 2; + + canvas.save(); + canvas.translate(x, transY); + b.draw(canvas); + canvas.restore(); + } +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/widget/ShadowLayout.java b/app/src/main/java/io/legado/app/ui/widget/ShadowLayout.java new file mode 100644 index 000000000..4ef6ffd2e --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/widget/ShadowLayout.java @@ -0,0 +1,195 @@ +package io.legado.app.ui.widget; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.util.DisplayMetrics; +import android.view.View; +import android.widget.RelativeLayout; +import io.legado.app.R; + +/** + * ShadowLayout.java + *

    + * Created by lijiankun on 17/8/11. + */ + +public class ShadowLayout extends RelativeLayout { + + public static final int ALL = 0x1111; + + public static final int LEFT = 0x0001; + + public static final int TOP = 0x0010; + + public static final int RIGHT = 0x0100; + + public static final int BOTTOM = 0x1000; + + public static final int SHAPE_RECTANGLE = 0x0001; + + public static final int SHAPE_OVAL = 0x0010; + + private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + + private RectF mRectF = new RectF(); + + /** + * 阴影的颜色 + */ + private int mShadowColor = Color.TRANSPARENT; + + /** + * 阴影的大小范围 + */ + private float mShadowRadius = 0; + + /** + * 阴影 x 轴的偏移量 + */ + private float mShadowDx = 0; + + /** + * 阴影 y 轴的偏移量 + */ + private float mShadowDy = 0; + + /** + * 阴影显示的边界 + */ + private int mShadowSide = ALL; + + /** + * 阴影的形状,圆形/矩形 + */ + private int mShadowShape = SHAPE_RECTANGLE; + + public ShadowLayout(Context context) { + this(context, null); + } + + public ShadowLayout(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public ShadowLayout(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(attrs); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + float effect = mShadowRadius + dip2px(5); + float rectLeft = 0; + float rectTop = 0; + float rectRight = this.getMeasuredWidth(); + float rectBottom = this.getMeasuredHeight(); + int paddingLeft = 0; + int paddingTop = 0; + int paddingRight = 0; + int paddingBottom = 0; + this.getWidth(); + if ((mShadowSide & LEFT) == LEFT) { + rectLeft = effect; + paddingLeft = (int) effect; + } + if ((mShadowSide & TOP) == TOP) { + rectTop = effect; + paddingTop = (int) effect; + } + if ((mShadowSide & RIGHT) == RIGHT) { + rectRight = this.getMeasuredWidth() - effect; + paddingRight = (int) effect; + } + if ((mShadowSide & BOTTOM) == BOTTOM) { + rectBottom = this.getMeasuredHeight() - effect; + paddingBottom = (int) effect; + } + if (mShadowDy != 0.0f) { + rectBottom = rectBottom - mShadowDy; + paddingBottom = paddingBottom + (int) mShadowDy; + } + if (mShadowDx != 0.0f) { + rectRight = rectRight - mShadowDx; + paddingRight = paddingRight + (int) mShadowDx; + } + mRectF.left = rectLeft; + mRectF.top = rectTop; + mRectF.right = rectRight; + mRectF.bottom = rectBottom; + this.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom); + } + + /** + * 真正绘制阴影的方法 + */ + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + setUpShadowPaint(); + if (mShadowShape == SHAPE_RECTANGLE) { + canvas.drawRect(mRectF, mPaint); + } else if (mShadowShape == SHAPE_OVAL) { + canvas.drawCircle(mRectF.centerX(), mRectF.centerY(), Math.min(mRectF.width(), mRectF.height()) / 2, mPaint); + } + } + + public void setShadowColor(int shadowColor) { + mShadowColor = shadowColor; + requestLayout(); + postInvalidate(); + } + + public void setShadowRadius(float shadowRadius) { + mShadowRadius = shadowRadius; + requestLayout(); + postInvalidate(); + } + + /** + * 读取设置的阴影的属性 + * + * @param attrs 从其中获取设置的值 + */ + private void init(AttributeSet attrs) { + setLayerType(View.LAYER_TYPE_SOFTWARE, null); // 关闭硬件加速 + this.setWillNotDraw(false); // 调用此方法后,才会执行 onDraw(Canvas) 方法 + + TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.ShadowLayout); + if (typedArray != null) { + mShadowColor = typedArray.getColor(R.styleable.ShadowLayout_shadowColor, + getContext().getResources().getColor(android.R.color.black)); + mShadowRadius = typedArray.getDimension(R.styleable.ShadowLayout_shadowRadius, dip2px(0)); + mShadowDx = typedArray.getDimension(R.styleable.ShadowLayout_shadowDx, dip2px(0)); + mShadowDy = typedArray.getDimension(R.styleable.ShadowLayout_shadowDy, dip2px(0)); + mShadowSide = typedArray.getInt(R.styleable.ShadowLayout_shadowSide, ALL); + mShadowShape = typedArray.getInt(R.styleable.ShadowLayout_shadowShape, SHAPE_RECTANGLE); + typedArray.recycle(); + } + setUpShadowPaint(); + } + + private void setUpShadowPaint() { + mPaint.reset(); + mPaint.setAntiAlias(true); + mPaint.setColor(Color.TRANSPARENT); + mPaint.setShadowLayer(mShadowRadius, mShadowDx, mShadowDy, mShadowColor); + } + + /** + * dip2px dp 值转 px 值 + * + * @param dpValue dp 值 + * @return px 值 + */ + private float dip2px(float dpValue) { + DisplayMetrics dm = getContext().getResources().getDisplayMetrics(); + float scale = dm.density; + return (dpValue * scale + 0.5F); + } +} diff --git a/app/src/main/res/drawable/ic_help.xml b/app/src/main/res/drawable/ic_help.xml index 931a86bf6..d5ecd8235 100644 --- a/app/src/main/res/drawable/ic_help.xml +++ b/app/src/main/res/drawable/ic_help.xml @@ -1,15 +1,12 @@ - - - - - + + + + diff --git a/app/src/main/res/drawable/ic_search_hint.xml b/app/src/main/res/drawable/ic_search_hint.xml new file mode 100644 index 000000000..42de64c26 --- /dev/null +++ b/app/src/main/res/drawable/ic_search_hint.xml @@ -0,0 +1,8 @@ + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 77ed85415..701dea9b5 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -7,7 +7,7 @@ + android:paddingTop="2dp" + android:paddingRight="10dp" + android:paddingLeft="10dp"> - + app:shadowColor="#16000000" + app:shadowShape="rectangle" + app:shadowDx="1dp" + app:shadowDy="3dp" + app:shadowRadius="4dp" + app:shadowSide="all"> - + + + + - - + android:layout_gravity="right" + android:layout_margin="5dp" + android:includeFontPadding="false" + app:layout_constraintTop_toTopOf="@+id/bg_cover" + app:layout_constraintRight_toRightOf="@+id/bg_cover" + tools:ignore="RtlHardcoded" /> - - + \ No newline at end of file diff --git a/app/src/main/res/layout/view_search.xml b/app/src/main/res/layout/view_search.xml index 9b1d48efd..b1809c534 100644 --- a/app/src/main/res/layout/view_search.xml +++ b/app/src/main/res/layout/view_search.xml @@ -1,15 +1,18 @@ - \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index d5a4d11e1..9e920088b 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -173,4 +173,17 @@ + + + + + + + + + + + + + \ No newline at end of file From a0463171c058b7d0d1d57efaf149d1e5ac971350 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 14:35:46 +0800 Subject: [PATCH 133/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 28a759ced..482907c7c 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -7,6 +7,7 @@ * 尝试修复搜索时崩溃 * 解决看过书籍的移到顶部需要向上滚动才能看到的bug * 只有再书源被删除找不到书源时才会自动换源 +* 美化界面by yangyxd **2020/03/16** * 修复滚动模式切换章节位置不归0的bug From 6f260e4f1df41a5b1d893d848557cc2be8ac0f4e Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 14:58:02 +0800 Subject: [PATCH 134/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/ui/widget/SearchView.java | 119 ----------- .../io/legado/app/ui/widget/SearchView.kt | 113 ++++++++++ .../io/legado/app/ui/widget/ShadowLayout.java | 195 ------------------ .../io/legado/app/ui/widget/ShadowLayout.kt | 185 +++++++++++++++++ 4 files changed, 298 insertions(+), 314 deletions(-) delete mode 100644 app/src/main/java/io/legado/app/ui/widget/SearchView.java create mode 100644 app/src/main/java/io/legado/app/ui/widget/SearchView.kt delete mode 100644 app/src/main/java/io/legado/app/ui/widget/ShadowLayout.java create mode 100644 app/src/main/java/io/legado/app/ui/widget/ShadowLayout.kt diff --git a/app/src/main/java/io/legado/app/ui/widget/SearchView.java b/app/src/main/java/io/legado/app/ui/widget/SearchView.java deleted file mode 100644 index 3ee0bd69b..000000000 --- a/app/src/main/java/io/legado/app/ui/widget/SearchView.java +++ /dev/null @@ -1,119 +0,0 @@ -package io.legado.app.ui.widget; - -import android.app.SearchableInfo; -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.drawable.Drawable; -import android.text.Spannable; -import android.text.SpannableStringBuilder; -import android.text.style.ImageSpan; -import android.util.AttributeSet; -import android.util.TypedValue; -import android.view.Gravity; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import io.legado.app.R; - -public class SearchView extends androidx.appcompat.widget.SearchView { - private Drawable mSearchHintIcon = null; - private TextView textView = null; - - public SearchView(Context context) { - this(context, null); - } - - public SearchView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public SearchView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - @Override - protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - super.onLayout(changed, left, top, right, bottom); - try { - if (textView == null) { - textView = (TextView) this.findViewById(androidx.appcompat.R.id.search_src_text); - mSearchHintIcon = this.getContext().getDrawable(R.drawable.ic_search_hint); - updateQueryHint(); - } - // 改变字体 - textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14); - textView.setGravity(Gravity.CENTER_VERTICAL); - } catch (Exception e) { - e.printStackTrace(); - } - } - - - private CharSequence getDecoratedHint(CharSequence hintText) { - // If the field is always expanded or we don't have a search hint icon, - // then don't add the search icon to the hint. - if (mSearchHintIcon == null) { - return hintText; - } - - final int textSize = (int) (textView.getTextSize() * 0.8); - mSearchHintIcon.setBounds(0, 0, textSize, textSize); - - final SpannableStringBuilder ssb = new SpannableStringBuilder(" "); - ssb.setSpan(new CenteredImageSpan(mSearchHintIcon), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - ssb.append(hintText); - return ssb; - } - - private void updateQueryHint() { - if (textView != null) { - final CharSequence hint = getQueryHint(); - textView.setHint(getDecoratedHint(hint == null ? "" : hint)); - } - } - - @Override - public void setIconifiedByDefault(boolean iconified) { - super.setIconifiedByDefault(iconified); - updateQueryHint(); - } - - @Override - public void setSearchableInfo(SearchableInfo searchable) { - super.setSearchableInfo(searchable); - if (searchable != null) - updateQueryHint(); - } - - @Override - public void setQueryHint(@Nullable CharSequence hint) { - super.setQueryHint(hint); - updateQueryHint(); - } -} - -class CenteredImageSpan extends ImageSpan { - - public CenteredImageSpan(final Drawable drawable) { - super(drawable); - } - - @Override - public void draw(@NonNull Canvas canvas, CharSequence text, - int start, int end, float x, - int top, int y, int bottom, @NonNull Paint paint) { - // image to draw - Drawable b = getDrawable(); - // font metrics of text to be replaced - Paint.FontMetricsInt fm = paint.getFontMetricsInt(); - int transY = (y + fm.descent + y + fm.ascent) / 2 - - b.getBounds().bottom / 2; - - canvas.save(); - canvas.translate(x, transY); - b.draw(canvas); - canvas.restore(); - } -} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/widget/SearchView.kt b/app/src/main/java/io/legado/app/ui/widget/SearchView.kt new file mode 100644 index 000000000..a1d8bd5f6 --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/widget/SearchView.kt @@ -0,0 +1,113 @@ +package io.legado.app.ui.widget + +import android.app.SearchableInfo +import android.content.Context +import android.graphics.Canvas +import android.graphics.Paint +import android.graphics.drawable.Drawable +import android.text.Spannable +import android.text.SpannableStringBuilder +import android.text.style.ImageSpan +import android.util.AttributeSet +import android.util.TypedValue +import android.view.Gravity +import android.view.View +import android.widget.TextView +import androidx.appcompat.widget.SearchView +import io.legado.app.R + +class SearchView : SearchView { + private var mSearchHintIcon: Drawable? = null + private var textView: TextView? = null + + constructor( + context: Context?, + attrs: AttributeSet? = null + ) : super(context, attrs) + + constructor( + context: Context?, + attrs: AttributeSet?, + defStyleAttr: Int + ) : super(context, attrs, defStyleAttr) + + override fun onLayout( + changed: Boolean, + left: Int, + top: Int, + right: Int, + bottom: Int + ) { + super.onLayout(changed, left, top, right, bottom) + try { + if (textView == null) { + textView = + findViewById(androidx.appcompat.R.id.search_src_text) as TextView + mSearchHintIcon = this.context.getDrawable(R.drawable.ic_search_hint) + updateQueryHint() + } + // 改变字体 + textView!!.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f) + textView!!.gravity = Gravity.CENTER_VERTICAL + } catch (e: Exception) { + e.printStackTrace() + } + } + + private fun getDecoratedHint(hintText: CharSequence): CharSequence { + // If the field is always expanded or we don't have a search hint icon, + // then don't add the search icon to the hint. + if (mSearchHintIcon == null) { + return hintText + } + val textSize = (textView!!.textSize * 0.8).toInt() + mSearchHintIcon!!.setBounds(0, 0, textSize, textSize) + val ssb = SpannableStringBuilder(" ") + ssb.setSpan(CenteredImageSpan(mSearchHintIcon), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) + ssb.append(hintText) + return ssb + } + + private fun updateQueryHint() { + if (textView != null) { + val hint = queryHint + textView!!.hint = getDecoratedHint(hint ?: "") + } + } + + override fun setIconifiedByDefault(iconified: Boolean) { + super.setIconifiedByDefault(iconified) + updateQueryHint() + } + + override fun setSearchableInfo(searchable: SearchableInfo?) { + super.setSearchableInfo(searchable) + searchable?.let { + updateQueryHint() + } + } + + override fun setQueryHint(hint: CharSequence?) { + super.setQueryHint(hint) + updateQueryHint() + } +} + +internal class CenteredImageSpan(drawable: Drawable?) : ImageSpan(drawable!!) { + override fun draw( + canvas: Canvas, text: CharSequence, + start: Int, end: Int, x: Float, + top: Int, y: Int, bottom: Int, paint: Paint + ) { + // image to draw + val b = drawable + // font metrics of text to be replaced + val fm = paint.fontMetricsInt + val transY = ((y + fm.descent + y + fm.ascent) / 2 + - b.bounds.bottom / 2) + canvas.save() + canvas.translate(x, transY.toFloat()) + b.draw(canvas) + canvas.restore() + } +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/widget/ShadowLayout.java b/app/src/main/java/io/legado/app/ui/widget/ShadowLayout.java deleted file mode 100644 index 4ef6ffd2e..000000000 --- a/app/src/main/java/io/legado/app/ui/widget/ShadowLayout.java +++ /dev/null @@ -1,195 +0,0 @@ -package io.legado.app.ui.widget; - -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.RectF; -import android.util.AttributeSet; -import android.util.DisplayMetrics; -import android.view.View; -import android.widget.RelativeLayout; -import io.legado.app.R; - -/** - * ShadowLayout.java - *

    - * Created by lijiankun on 17/8/11. - */ - -public class ShadowLayout extends RelativeLayout { - - public static final int ALL = 0x1111; - - public static final int LEFT = 0x0001; - - public static final int TOP = 0x0010; - - public static final int RIGHT = 0x0100; - - public static final int BOTTOM = 0x1000; - - public static final int SHAPE_RECTANGLE = 0x0001; - - public static final int SHAPE_OVAL = 0x0010; - - private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - - private RectF mRectF = new RectF(); - - /** - * 阴影的颜色 - */ - private int mShadowColor = Color.TRANSPARENT; - - /** - * 阴影的大小范围 - */ - private float mShadowRadius = 0; - - /** - * 阴影 x 轴的偏移量 - */ - private float mShadowDx = 0; - - /** - * 阴影 y 轴的偏移量 - */ - private float mShadowDy = 0; - - /** - * 阴影显示的边界 - */ - private int mShadowSide = ALL; - - /** - * 阴影的形状,圆形/矩形 - */ - private int mShadowShape = SHAPE_RECTANGLE; - - public ShadowLayout(Context context) { - this(context, null); - } - - public ShadowLayout(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public ShadowLayout(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(attrs); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - float effect = mShadowRadius + dip2px(5); - float rectLeft = 0; - float rectTop = 0; - float rectRight = this.getMeasuredWidth(); - float rectBottom = this.getMeasuredHeight(); - int paddingLeft = 0; - int paddingTop = 0; - int paddingRight = 0; - int paddingBottom = 0; - this.getWidth(); - if ((mShadowSide & LEFT) == LEFT) { - rectLeft = effect; - paddingLeft = (int) effect; - } - if ((mShadowSide & TOP) == TOP) { - rectTop = effect; - paddingTop = (int) effect; - } - if ((mShadowSide & RIGHT) == RIGHT) { - rectRight = this.getMeasuredWidth() - effect; - paddingRight = (int) effect; - } - if ((mShadowSide & BOTTOM) == BOTTOM) { - rectBottom = this.getMeasuredHeight() - effect; - paddingBottom = (int) effect; - } - if (mShadowDy != 0.0f) { - rectBottom = rectBottom - mShadowDy; - paddingBottom = paddingBottom + (int) mShadowDy; - } - if (mShadowDx != 0.0f) { - rectRight = rectRight - mShadowDx; - paddingRight = paddingRight + (int) mShadowDx; - } - mRectF.left = rectLeft; - mRectF.top = rectTop; - mRectF.right = rectRight; - mRectF.bottom = rectBottom; - this.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom); - } - - /** - * 真正绘制阴影的方法 - */ - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - setUpShadowPaint(); - if (mShadowShape == SHAPE_RECTANGLE) { - canvas.drawRect(mRectF, mPaint); - } else if (mShadowShape == SHAPE_OVAL) { - canvas.drawCircle(mRectF.centerX(), mRectF.centerY(), Math.min(mRectF.width(), mRectF.height()) / 2, mPaint); - } - } - - public void setShadowColor(int shadowColor) { - mShadowColor = shadowColor; - requestLayout(); - postInvalidate(); - } - - public void setShadowRadius(float shadowRadius) { - mShadowRadius = shadowRadius; - requestLayout(); - postInvalidate(); - } - - /** - * 读取设置的阴影的属性 - * - * @param attrs 从其中获取设置的值 - */ - private void init(AttributeSet attrs) { - setLayerType(View.LAYER_TYPE_SOFTWARE, null); // 关闭硬件加速 - this.setWillNotDraw(false); // 调用此方法后,才会执行 onDraw(Canvas) 方法 - - TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.ShadowLayout); - if (typedArray != null) { - mShadowColor = typedArray.getColor(R.styleable.ShadowLayout_shadowColor, - getContext().getResources().getColor(android.R.color.black)); - mShadowRadius = typedArray.getDimension(R.styleable.ShadowLayout_shadowRadius, dip2px(0)); - mShadowDx = typedArray.getDimension(R.styleable.ShadowLayout_shadowDx, dip2px(0)); - mShadowDy = typedArray.getDimension(R.styleable.ShadowLayout_shadowDy, dip2px(0)); - mShadowSide = typedArray.getInt(R.styleable.ShadowLayout_shadowSide, ALL); - mShadowShape = typedArray.getInt(R.styleable.ShadowLayout_shadowShape, SHAPE_RECTANGLE); - typedArray.recycle(); - } - setUpShadowPaint(); - } - - private void setUpShadowPaint() { - mPaint.reset(); - mPaint.setAntiAlias(true); - mPaint.setColor(Color.TRANSPARENT); - mPaint.setShadowLayer(mShadowRadius, mShadowDx, mShadowDy, mShadowColor); - } - - /** - * dip2px dp 值转 px 值 - * - * @param dpValue dp 值 - * @return px 值 - */ - private float dip2px(float dpValue) { - DisplayMetrics dm = getContext().getResources().getDisplayMetrics(); - float scale = dm.density; - return (dpValue * scale + 0.5F); - } -} diff --git a/app/src/main/java/io/legado/app/ui/widget/ShadowLayout.kt b/app/src/main/java/io/legado/app/ui/widget/ShadowLayout.kt new file mode 100644 index 000000000..0f6ad3200 --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/widget/ShadowLayout.kt @@ -0,0 +1,185 @@ +package io.legado.app.ui.widget + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.graphics.RectF +import android.util.AttributeSet +import android.view.View +import android.widget.RelativeLayout +import io.legado.app.R +import io.legado.app.utils.getCompatColor + +/** + * ShadowLayout.java + * + * + * Created by lijiankun on 17/8/11. + */ +class ShadowLayout( + context: Context, + attrs: AttributeSet? = null +) : RelativeLayout(context, attrs) { + private val mPaint = + Paint(Paint.ANTI_ALIAS_FLAG) + private val mRectF = RectF() + + /** + * 阴影的颜色 + */ + private var mShadowColor = Color.TRANSPARENT + + /** + * 阴影的大小范围 + */ + private var mShadowRadius = 0f + + /** + * 阴影 x 轴的偏移量 + */ + private var mShadowDx = 0f + + /** + * 阴影 y 轴的偏移量 + */ + private var mShadowDy = 0f + + /** + * 阴影显示的边界 + */ + private var mShadowSide = ALL + + /** + * 阴影的形状,圆形/矩形 + */ + private var mShadowShape = SHAPE_RECTANGLE + + + init { + setLayerType(View.LAYER_TYPE_SOFTWARE, null) // 关闭硬件加速 + setWillNotDraw(false) // 调用此方法后,才会执行 onDraw(Canvas) 方法 + val typedArray = + context.obtainStyledAttributes(attrs, R.styleable.ShadowLayout) + mShadowColor = typedArray.getColor( + R.styleable.ShadowLayout_shadowColor, + context.getCompatColor(android.R.color.black) + ) + mShadowRadius = + typedArray.getDimension(R.styleable.ShadowLayout_shadowRadius, dip2px(0f)) + mShadowDx = typedArray.getDimension(R.styleable.ShadowLayout_shadowDx, dip2px(0f)) + mShadowDy = typedArray.getDimension(R.styleable.ShadowLayout_shadowDy, dip2px(0f)) + mShadowSide = + typedArray.getInt(R.styleable.ShadowLayout_shadowSide, ALL) + mShadowShape = typedArray.getInt( + R.styleable.ShadowLayout_shadowShape, + SHAPE_RECTANGLE + ) + typedArray.recycle() + + setUpShadowPaint() + } + + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec) + val effect = mShadowRadius + dip2px(5f) + var rectLeft = 0f + var rectTop = 0f + var rectRight = this.measuredWidth.toFloat() + var rectBottom = this.measuredHeight.toFloat() + var paddingLeft = 0 + var paddingTop = 0 + var paddingRight = 0 + var paddingBottom = 0 + this.width + if (mShadowSide and LEFT == LEFT) { + rectLeft = effect + paddingLeft = effect.toInt() + } + if (mShadowSide and TOP == TOP) { + rectTop = effect + paddingTop = effect.toInt() + } + if (mShadowSide and RIGHT == RIGHT) { + rectRight = this.measuredWidth - effect + paddingRight = effect.toInt() + } + if (mShadowSide and BOTTOM == BOTTOM) { + rectBottom = this.measuredHeight - effect + paddingBottom = effect.toInt() + } + if (mShadowDy != 0.0f) { + rectBottom -= mShadowDy + paddingBottom += mShadowDy.toInt() + } + if (mShadowDx != 0.0f) { + rectRight -= mShadowDx + paddingRight += mShadowDx.toInt() + } + mRectF.left = rectLeft + mRectF.top = rectTop + mRectF.right = rectRight + mRectF.bottom = rectBottom + setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom) + } + + /** + * 真正绘制阴影的方法 + */ + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + setUpShadowPaint() + if (mShadowShape == SHAPE_RECTANGLE) { + canvas.drawRect(mRectF, mPaint) + } else if (mShadowShape == SHAPE_OVAL) { + canvas.drawCircle( + mRectF.centerX(), + mRectF.centerY(), + mRectF.width().coerceAtMost(mRectF.height()) / 2, + mPaint + ) + } + } + + fun setShadowColor(shadowColor: Int) { + mShadowColor = shadowColor + requestLayout() + postInvalidate() + } + + fun setShadowRadius(shadowRadius: Float) { + mShadowRadius = shadowRadius + requestLayout() + postInvalidate() + } + + private fun setUpShadowPaint() { + mPaint.reset() + mPaint.isAntiAlias = true + mPaint.color = Color.TRANSPARENT + mPaint.setShadowLayer(mShadowRadius, mShadowDx, mShadowDy, mShadowColor) + } + + /** + * dip2px dp 值转 px 值 + * + * @param dpValue dp 值 + * @return px 值 + */ + private fun dip2px(dpValue: Float): Float { + val dm = context.resources.displayMetrics + val scale = dm.density + return dpValue * scale + 0.5f + } + + companion object { + const val ALL = 0x1111 + const val LEFT = 0x0001 + const val TOP = 0x0010 + const val RIGHT = 0x0100 + const val BOTTOM = 0x1000 + const val SHAPE_RECTANGLE = 0x0001 + const val SHAPE_OVAL = 0x0010 + } + +} \ No newline at end of file From 922d17d0261a9a9effc23e4a1b7b75c24739c323 Mon Sep 17 00:00:00 2001 From: yangyxd Date: Wed, 18 Mar 2020 16:19:22 +0800 Subject: [PATCH 135/350] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E6=97=B6cash=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/ui/book/search/DiffCallBack.kt | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt b/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt index 07a3b16c5..d0c2f2973 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt @@ -49,28 +49,29 @@ class DiffCallBack(private val oldItems: List, private val newItems: } override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? { - val oldItem = oldItems[oldItemPosition] - val newItem = newItems[newItemPosition] val payload = Bundle() - if (oldItem.name != newItem.name) { + val newItem: SearchBook? = if ((newItemPosition >= 0) && (newItemPosition < newItems.size)) newItems[newItemPosition] else null + val oldItem: SearchBook? = if ((oldItemPosition >= 0) && (oldItemPosition < oldItems.size)) oldItems[oldItemPosition] else null + if (newItem == null) return payload + if (oldItem?.name != newItem.name) { payload.putString("name", newItem.name) } - if (oldItem.author != newItem.author) { + if (oldItem?.author != newItem.author) { payload.putString("author", newItem.author) } - if (oldItem.origins.size != newItem.origins.size) { + if (oldItem?.origins?.size != newItem.origins.size) { payload.putInt("origins", newItem.origins.size) } - if (oldItem.coverUrl != newItem.coverUrl) { + if (oldItem?.coverUrl != newItem.coverUrl) { payload.putString("cover", newItem.coverUrl) } - if (oldItem.kind != newItem.kind) { + if (oldItem?.kind != newItem.kind) { payload.putString("kind", newItem.kind) } - if (oldItem.latestChapterTitle != newItem.latestChapterTitle) { + if (oldItem?.latestChapterTitle != newItem.latestChapterTitle) { payload.putString("last", newItem.latestChapterTitle) } - if (oldItem.intro != newItem.intro) { + if (oldItem?.intro != newItem.intro) { payload.putString("intro", newItem.intro) } return payload From c7b2e1c7b29066d84ea2317bd6f3e43659289341 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 17:40:25 +0800 Subject: [PATCH 136/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/book/search/DiffCallBack.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt b/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt index d0c2f2973..999f2a941 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt @@ -50,8 +50,8 @@ class DiffCallBack(private val oldItems: List, private val newItems: override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? { val payload = Bundle() - val newItem: SearchBook? = if ((newItemPosition >= 0) && (newItemPosition < newItems.size)) newItems[newItemPosition] else null - val oldItem: SearchBook? = if ((oldItemPosition >= 0) && (oldItemPosition < oldItems.size)) oldItems[oldItemPosition] else null + val newItem = newItems.getOrNull(newItemPosition) + val oldItem = oldItems.getOrNull(oldItemPosition) if (newItem == null) return payload if (oldItem?.name != newItem.name) { payload.putString("name", newItem.name) From 41ff8c1c65a007f5d4e91e53d032d315b8362960 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 17:55:03 +0800 Subject: [PATCH 137/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/book/search/SearchActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt index 4373dd41a..e81545adc 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt @@ -3,7 +3,6 @@ package io.legado.app.ui.book.search import android.os.Bundle import android.view.Menu import android.view.MenuItem -import android.view.View import android.view.View.GONE import android.view.View.VISIBLE import androidx.appcompat.widget.SearchView @@ -113,6 +112,7 @@ class SearchActivity : VMBaseActivity(R.layout.activity_book_se viewModel.saveSearchKey(query) viewModel.search(it) } + openOrCloseHistory(false) return true } From 97b644db0f82faa84204de03225f9831bce0fbe5 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 18:08:48 +0800 Subject: [PATCH 138/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/ui/widget/SearchView.kt | 36 +++++++++---------- app/src/main/res/layout/view_search.xml | 1 - 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/widget/SearchView.kt b/app/src/main/java/io/legado/app/ui/widget/SearchView.kt index a1d8bd5f6..13d2cbeaf 100644 --- a/app/src/main/java/io/legado/app/ui/widget/SearchView.kt +++ b/app/src/main/java/io/legado/app/ui/widget/SearchView.kt @@ -91,23 +91,23 @@ class SearchView : SearchView { super.setQueryHint(hint) updateQueryHint() } -} -internal class CenteredImageSpan(drawable: Drawable?) : ImageSpan(drawable!!) { - override fun draw( - canvas: Canvas, text: CharSequence, - start: Int, end: Int, x: Float, - top: Int, y: Int, bottom: Int, paint: Paint - ) { - // image to draw - val b = drawable - // font metrics of text to be replaced - val fm = paint.fontMetricsInt - val transY = ((y + fm.descent + y + fm.ascent) / 2 - - b.bounds.bottom / 2) - canvas.save() - canvas.translate(x, transY.toFloat()) - b.draw(canvas) - canvas.restore() + internal class CenteredImageSpan(drawable: Drawable?) : ImageSpan(drawable!!) { + override fun draw( + canvas: Canvas, text: CharSequence, + start: Int, end: Int, x: Float, + top: Int, y: Int, bottom: Int, paint: Paint + ) { + // image to draw + val b = drawable + // font metrics of text to be replaced + val fm = paint.fontMetricsInt + val transY = ((y + fm.descent + y + fm.ascent) / 2 + - b.bounds.bottom / 2) + canvas.save() + canvas.translate(x, transY.toFloat()) + b.draw(canvas) + canvas.restore() + } } -} \ No newline at end of file +} diff --git a/app/src/main/res/layout/view_search.xml b/app/src/main/res/layout/view_search.xml index b1809c534..96ff311da 100644 --- a/app/src/main/res/layout/view_search.xml +++ b/app/src/main/res/layout/view_search.xml @@ -14,5 +14,4 @@ app:queryBackground="@null" app:submitBackground="@null" app:searchHintIcon="@drawable/ic_search_hint" - app:goIcon="@drawable/ic_search" app:defaultQueryHint="搜索"/> \ No newline at end of file From 1a699bb4b82a7125dfff08613320b3f92c6f67c4 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 18:13:31 +0800 Subject: [PATCH 139/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/ui/widget/SearchView.kt | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/widget/SearchView.kt b/app/src/main/java/io/legado/app/ui/widget/SearchView.kt index 13d2cbeaf..765a0a580 100644 --- a/app/src/main/java/io/legado/app/ui/widget/SearchView.kt +++ b/app/src/main/java/io/legado/app/ui/widget/SearchView.kt @@ -11,7 +11,6 @@ import android.text.style.ImageSpan import android.util.AttributeSet import android.util.TypedValue import android.view.Gravity -import android.view.View import android.widget.TextView import androidx.appcompat.widget.SearchView import io.legado.app.R @@ -41,8 +40,7 @@ class SearchView : SearchView { super.onLayout(changed, left, top, right, bottom) try { if (textView == null) { - textView = - findViewById(androidx.appcompat.R.id.search_src_text) as TextView + textView = findViewById(androidx.appcompat.R.id.search_src_text) mSearchHintIcon = this.context.getDrawable(R.drawable.ic_search_hint) updateQueryHint() } @@ -69,9 +67,8 @@ class SearchView : SearchView { } private fun updateQueryHint() { - if (textView != null) { - val hint = queryHint - textView!!.hint = getDecoratedHint(hint ?: "") + textView?.let { + it.hint = getDecoratedHint(queryHint ?: "") } } From a67156b0cfe0def64310b2e2e298a96a24a97cbe Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 18:59:23 +0800 Subject: [PATCH 140/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/help/coroutine/Coroutine.kt | 39 +++++++++++++++---- .../book/changecover/ChangeCoverViewModel.kt | 5 ++- .../changesource/ChangeSourceViewModel.kt | 5 ++- .../app/ui/book/search/SearchViewModel.kt | 6 ++- 4 files changed, 45 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt b/app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt index e9fd0df86..c8ff66a8a 100644 --- a/app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt +++ b/app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt @@ -6,7 +6,7 @@ import kotlin.coroutines.CoroutineContext class Coroutine( - scope: CoroutineScope, + val scope: CoroutineScope, context: CoroutineContext = Dispatchers.IO, block: suspend CoroutineScope.() -> T ) { @@ -31,6 +31,7 @@ class Coroutine( private var success: Callback? = null private var error: Callback? = null private var finally: VoidCallback? = null + private var cancel: VoidCallback? = null private var timeMillis: Long? = null private var errorReturn: Result? = null @@ -45,7 +46,7 @@ class Coroutine( get() = job.isCompleted init { - this.job = executeInternal(scope, context, block) + this.job = executeInternal(context, block) } fun timeout(timeMillis: () -> Long): Coroutine { @@ -100,9 +101,28 @@ class Coroutine( return this@Coroutine } + fun onCancel( + context: CoroutineContext? = null, + block: suspend CoroutineScope.() -> Unit + ): Coroutine { + this.cancel = VoidCallback(context, block) + return this@Coroutine + } + //取消当前任务 fun cancel(cause: CancellationException? = null) { job.cancel(cause) + cancel?.let { + scope.plus(Dispatchers.Main).launch { + if (null == it.context) { + it.block.invoke(scope) + } else { + withContext(scope.coroutineContext.plus(it.context)) { + it.block.invoke(this) + } + } + } + } } fun invokeOnCompletion(handler: CompletionHandler): DisposableHandle { @@ -110,7 +130,6 @@ class Coroutine( } private fun executeInternal( - scope: CoroutineScope, context: CoroutineContext, block: suspend CoroutineScope.() -> T ): Job { @@ -118,21 +137,27 @@ class Coroutine( try { start?.let { dispatchVoidCallback(this, it) } val value = executeBlock(scope, context, timeMillis ?: 0L, block) - success?.let { dispatchCallback(this, value, it) } + if (isActive) { + success?.let { dispatchCallback(this, value, it) } + } } catch (e: Throwable) { if (BuildConfig.DEBUG) { e.printStackTrace() } val consume: Boolean = errorReturn?.value?.let { value -> - success?.let { dispatchCallback(this, value, it) } + if (isActive) { + success?.let { dispatchCallback(this, value, it) } + } true } ?: false - if (!consume) { + if (!consume && isActive) { error?.let { dispatchCallback(this, e, it) } } } finally { - finally?.let { dispatchVoidCallback(this, it) } + if (isActive) { + finally?.let { dispatchVoidCallback(this, it) } + } } } } diff --git a/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverViewModel.kt b/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverViewModel.kt index 627bacc09..bcd0e61d0 100644 --- a/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverViewModel.kt @@ -51,7 +51,6 @@ class ChangeCoverViewModel(application: Application) : BaseViewModel(application fun search() { task = execute { - searchStateData.postValue(true) val bookSourceList = App.db.bookSourceDao().allEnabled for (item in bookSourceList) { //task取消时自动取消 by (scope = this@execute) @@ -72,6 +71,10 @@ class ChangeCoverViewModel(application: Application) : BaseViewModel(application } } } + }.onStart { + searchStateData.postValue(true) + }.onCancel { + searchStateData.postValue(false) } task?.invokeOnCompletion { diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeSourceViewModel.kt index e0800c0a1..5b1c7e939 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeSourceViewModel.kt @@ -72,7 +72,6 @@ class ChangeSourceViewModel(application: Application) : BaseViewModel(applicatio fun search() { task = execute { - searchStateData.postValue(true) val bookSourceList = App.db.bookSourceDao().allEnabled for (item in bookSourceList) { //task取消时自动取消 by (scope = this@execute) @@ -95,6 +94,10 @@ class ChangeSourceViewModel(application: Application) : BaseViewModel(applicatio } } } + }.onStart { + searchStateData.postValue(true) + }.onCancel { + searchStateData.postValue(false) } task?.invokeOnCompletion { diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt index 47671626d..1e00157a2 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt @@ -43,7 +43,6 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { searchKey = key searchBooks.clear() } - isSearchLiveData.postValue(true) task = execute { val searchGroup = context.getPrefString("searchGroup") ?: "" val bookSourceList = if (searchGroup.isBlank()) { @@ -71,6 +70,11 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { } } } + }.onStart { + isSearchLiveData.postValue(true) + }.onCancel { + isSearchLiveData.postValue(false) + isLoading = false } task?.invokeOnCompletion { From 13ab8c35b8157a6d8404a8d5ed5bb825b7aaf728 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 19:17:09 +0800 Subject: [PATCH 141/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/ui/book/search/DiffCallBack.kt | 22 ++++++++++--------- .../app/ui/book/search/SearchViewModel.kt | 2 +- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt b/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt index 999f2a941..6f14699a9 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt @@ -49,31 +49,33 @@ class DiffCallBack(private val oldItems: List, private val newItems: } override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? { + val oldItem = oldItems[oldItemPosition] + val newItem = newItems[newItemPosition] val payload = Bundle() - val newItem = newItems.getOrNull(newItemPosition) - val oldItem = oldItems.getOrNull(oldItemPosition) - if (newItem == null) return payload - if (oldItem?.name != newItem.name) { + if (oldItem.name != newItem.name) { payload.putString("name", newItem.name) } - if (oldItem?.author != newItem.author) { + if (oldItem.author != newItem.author) { payload.putString("author", newItem.author) } - if (oldItem?.origins?.size != newItem.origins.size) { + if (oldItem.origins.size != newItem.origins.size) { payload.putInt("origins", newItem.origins.size) } - if (oldItem?.coverUrl != newItem.coverUrl) { + if (oldItem.coverUrl != newItem.coverUrl) { payload.putString("cover", newItem.coverUrl) } - if (oldItem?.kind != newItem.kind) { + if (oldItem.kind != newItem.kind) { payload.putString("kind", newItem.kind) } - if (oldItem?.latestChapterTitle != newItem.latestChapterTitle) { + if (oldItem.latestChapterTitle != newItem.latestChapterTitle) { payload.putString("last", newItem.latestChapterTitle) } - if (oldItem?.intro != newItem.intro) { + if (oldItem.intro != newItem.intro) { payload.putString("intro", newItem.intro) } + if (payload.isEmpty) { + return null + } return payload } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt index 1e00157a2..191ceeafc 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt @@ -55,7 +55,7 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { WebBook(item).searchBook( searchKey, searchPage, - scope = this@execute, + scope = this, context = searchPool ) .timeout(30000L) From ca67f585d14eca497c3232062d6cc3c7c0ef9a55 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 19:50:24 +0800 Subject: [PATCH 142/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/help/coroutine/Coroutine.kt | 3 +- .../app/ui/book/search/SearchViewModel.kt | 34 ++++++++++++------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt b/app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt index c8ff66a8a..eb0a29375 100644 --- a/app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt +++ b/app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt @@ -113,7 +113,7 @@ class Coroutine( fun cancel(cause: CancellationException? = null) { job.cancel(cause) cancel?.let { - scope.plus(Dispatchers.Main).launch { + MainScope().launch { if (null == it.context) { it.block.invoke(scope) } else { @@ -177,6 +177,7 @@ class Coroutine( value: R, callback: Callback ) { + if (!scope.isActive) return if (null == callback.context) { callback.block.invoke(scope, value) } else { diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt index 191ceeafc..f1a4fc858 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt @@ -12,8 +12,10 @@ import io.legado.app.help.coroutine.Coroutine import io.legado.app.model.WebBook import io.legado.app.utils.getPrefBoolean import io.legado.app.utils.getPrefString +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.asCoroutineDispatcher +import kotlinx.coroutines.isActive import java.util.concurrent.Executors class SearchViewModel(application: Application) : BaseViewModel(application) { @@ -53,19 +55,21 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { for (item in bookSourceList) { //task取消时自动取消 by (scope = this@execute) WebBook(item).searchBook( - searchKey, - searchPage, + searchKey, + searchPage, scope = this, - context = searchPool - ) + context = searchPool + ) .timeout(30000L) .onSuccess(IO) { - it?.let { list -> - if (context.getPrefBoolean(PreferKey.precisionSearch)) { - precisionSearch(list) - } else { - App.db.searchBookDao().insert(*list.toTypedArray()) - mergeItems(list) + if (isActive) { + it?.let { list -> + if (context.getPrefBoolean(PreferKey.precisionSearch)) { + precisionSearch(this, list) + } else { + App.db.searchBookDao().insert(*list.toTypedArray()) + mergeItems(this, list) + } } } } @@ -86,7 +90,7 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { /** * 精确搜索处理 */ - private fun precisionSearch(searchBooks: List) { + private fun precisionSearch(scope: CoroutineScope, searchBooks: List) { val books = arrayListOf() searchBooks.forEach { searchBook -> if (searchBook.name.contains(searchKey, true) @@ -94,14 +98,16 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { ) books.add(searchBook) } App.db.searchBookDao().insert(*books.toTypedArray()) - mergeItems(books) + if (scope.isActive) { + mergeItems(scope, books) + } } /** * 合并搜索结果并排序 */ @Synchronized - private fun mergeItems(newDataS: List) { + private fun mergeItems(scope: CoroutineScope, newDataS: List) { if (newDataS.isNotEmpty()) { val copyDataS = ArrayList(searchBooks) val searchBooksAdd = ArrayList() @@ -145,6 +151,7 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { } } } + if (!scope.isActive) return searchBooks.sortWith(Comparator { o1, o2 -> if (o1.name == searchKey && o2.name != searchKey) { 1 @@ -170,6 +177,7 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { 0 } }) + if (!scope.isActive) return searchBooks = copyDataS searchBookLiveData.postValue(copyDataS) } From bed5c2e34a156f1fdf027b15651b5ec06a5347a6 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 20:52:37 +0800 Subject: [PATCH 143/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 1 + .../java/io/legado/app/model/SearchBook.kt | 5 + .../main/java/io/legado/app/model/WebBook.kt | 5 +- .../io/legado/app/model/webBook/BookList.kt | 32 ++++++- .../app/ui/book/read/ReadBookViewModel.kt | 2 +- .../legado/app/ui/book/search/DiffCallBack.kt | 22 ++--- .../app/ui/book/search/SearchViewModel.kt | 93 ++++++++++--------- .../legado/app/ui/rss/read/VisibleWebView.kt | 17 ++++ app/src/main/res/layout/activity_rss_read.xml | 2 +- 9 files changed, 116 insertions(+), 63 deletions(-) create mode 100644 app/src/main/java/io/legado/app/model/SearchBook.kt create mode 100644 app/src/main/java/io/legado/app/ui/rss/read/VisibleWebView.kt diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 482907c7c..d6a435788 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -8,6 +8,7 @@ * 解决看过书籍的移到顶部需要向上滚动才能看到的bug * 只有再书源被删除找不到书源时才会自动换源 * 美化界面by yangyxd +* 订阅后台播放 **2020/03/16** * 修复滚动模式切换章节位置不归0的bug diff --git a/app/src/main/java/io/legado/app/model/SearchBook.kt b/app/src/main/java/io/legado/app/model/SearchBook.kt new file mode 100644 index 000000000..7b344e60f --- /dev/null +++ b/app/src/main/java/io/legado/app/model/SearchBook.kt @@ -0,0 +1,5 @@ +package io.legado.app.model + +class SearchBook { + +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/model/WebBook.kt b/app/src/main/java/io/legado/app/model/WebBook.kt index 7d14ea8bc..6fee7add6 100644 --- a/app/src/main/java/io/legado/app/model/WebBook.kt +++ b/app/src/main/java/io/legado/app/model/WebBook.kt @@ -29,11 +29,12 @@ class WebBook(val bookSource: BookSource) { context: CoroutineContext = Dispatchers.IO ): Coroutine> { return Coroutine.async(scope, context) { - searchBookSuspend(key, page) + searchBookSuspend(scope, key, page) } } suspend fun searchBookSuspend( + scope: CoroutineScope, key: String, page: Int? = 1 ): ArrayList { @@ -47,6 +48,7 @@ class WebBook(val bookSource: BookSource) { ) val res = analyzeUrl.getResponseAwait(bookSource.bookSourceUrl) return BookList.analyzeBookList( + scope, res.body, bookSource, analyzeUrl, @@ -75,6 +77,7 @@ class WebBook(val bookSource: BookSource) { ) val res = analyzeUrl.getResponseAwait(bookSource.bookSourceUrl) BookList.analyzeBookList( + scope, res.body, bookSource, analyzeUrl, diff --git a/app/src/main/java/io/legado/app/model/webBook/BookList.kt b/app/src/main/java/io/legado/app/model/webBook/BookList.kt index a205c950a..372a4eec6 100644 --- a/app/src/main/java/io/legado/app/model/webBook/BookList.kt +++ b/app/src/main/java/io/legado/app/model/webBook/BookList.kt @@ -9,11 +9,15 @@ import io.legado.app.model.Debug import io.legado.app.model.analyzeRule.AnalyzeRule import io.legado.app.model.analyzeRule.AnalyzeUrl import io.legado.app.utils.NetworkUtils +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.isActive object BookList { @Throws(Exception::class) fun analyzeBookList( + scope: CoroutineScope, body: String?, bookSource: BookSource, analyzeUrl: AnalyzeUrl, @@ -28,12 +32,13 @@ object BookList { ) ) Debug.log(bookSource.bookSourceUrl, "≡获取成功:${analyzeUrl.ruleUrl}") + if (!scope.isActive) throw CancellationException() val analyzeRule = AnalyzeRule(null) analyzeRule.setContent(body, baseUrl) bookSource.bookUrlPattern?.let { if (baseUrl.matches(it.toRegex())) { Debug.log(bookSource.bookSourceUrl, "≡链接为详情页") - getInfoItem(analyzeRule, bookSource, baseUrl)?.let { searchBook -> + getInfoItem(scope, analyzeRule, bookSource, baseUrl)?.let { searchBook -> searchBook.infoHtml = body bookList.add(searchBook) } @@ -59,7 +64,7 @@ object BookList { collections = analyzeRule.getElements(ruleList) if (collections.isEmpty() && bookSource.bookUrlPattern.isNullOrEmpty()) { Debug.log(bookSource.bookSourceUrl, "└列表为空,按详情页解析") - getInfoItem(analyzeRule, bookSource, baseUrl)?.let { searchBook -> + getInfoItem(scope, analyzeRule, bookSource, baseUrl)?.let { searchBook -> searchBook.infoHtml = body bookList.add(searchBook) } @@ -74,8 +79,9 @@ object BookList { val ruleWordCount = analyzeRule.splitSourceRule(bookListRule.wordCount) Debug.log(bookSource.bookSourceUrl, "└列表大小:${collections.size}") for ((index, item) in collections.withIndex()) { + if (!scope.isActive) throw CancellationException() getSearchItem( - item, analyzeRule, bookSource, baseUrl, index == 0, + scope, item, analyzeRule, bookSource, baseUrl, index == 0, ruleName = ruleName, ruleBookUrl = ruleBookUrl, ruleAuthor = ruleAuthor, ruleCoverUrl = ruleCoverUrl, ruleIntro = ruleIntro, ruleKind = ruleKind, ruleLastChapter = ruleLastChapter, ruleWordCount = ruleWordCount @@ -93,7 +99,9 @@ object BookList { return bookList } + @Throws(Exception::class) private fun getInfoItem( + scope: CoroutineScope, analyzeRule: AnalyzeRule, bookSource: BookSource, baseUrl: String @@ -108,29 +116,37 @@ object BookList { with(bookSource.getBookInfoRule()) { init?.let { if (it.isNotEmpty()) { + if (!scope.isActive) throw CancellationException() Debug.log(bookSource.bookSourceUrl, "≡执行详情页初始化规则") analyzeRule.setContent(analyzeRule.getElement(it)) } } + if (!scope.isActive) throw CancellationException() Debug.log(bookSource.bookSourceUrl, "┌获取书名") searchBook.name = analyzeRule.getString(name) Debug.log(bookSource.bookSourceUrl, "└${searchBook.name}") if (searchBook.name.isNotEmpty()) { + if (!scope.isActive) throw CancellationException() Debug.log(bookSource.bookSourceUrl, "┌获取作者") searchBook.author = BookHelp.formatAuthor(analyzeRule.getString(author)) Debug.log(bookSource.bookSourceUrl, "└${searchBook.author}") + if (!scope.isActive) throw CancellationException() Debug.log(bookSource.bookSourceUrl, "┌获取分类") searchBook.kind = analyzeRule.getStringList(kind)?.joinToString(",") Debug.log(bookSource.bookSourceUrl, "└${searchBook.kind}") + if (!scope.isActive) throw CancellationException() Debug.log(bookSource.bookSourceUrl, "┌获取字数") searchBook.wordCount = analyzeRule.getString(wordCount) Debug.log(bookSource.bookSourceUrl, "└${searchBook.wordCount}") + if (!scope.isActive) throw CancellationException() Debug.log(bookSource.bookSourceUrl, "┌获取最新章节") searchBook.latestChapterTitle = analyzeRule.getString(lastChapter) Debug.log(bookSource.bookSourceUrl, "└${searchBook.latestChapterTitle}") + if (!scope.isActive) throw CancellationException() Debug.log(bookSource.bookSourceUrl, "┌获取简介") searchBook.intro = analyzeRule.getString(intro) Debug.log(bookSource.bookSourceUrl, "└${searchBook.intro}", true) + if (!scope.isActive) throw CancellationException() Debug.log(bookSource.bookSourceUrl, "┌获取封面链接") searchBook.coverUrl = analyzeRule.getString(coverUrl, true) Debug.log(bookSource.bookSourceUrl, "└${searchBook.coverUrl}") @@ -140,7 +156,9 @@ object BookList { return null } + @Throws(Exception::class) private fun getSearchItem( + scope: CoroutineScope, item: Any, analyzeRule: AnalyzeRule, bookSource: BookSource, @@ -162,30 +180,38 @@ object BookList { searchBook.originOrder = bookSource.customOrder analyzeRule.book = searchBook analyzeRule.setContent(item) + if (!scope.isActive) throw CancellationException() Debug.log(bookSource.bookSourceUrl, "┌获取书名", log) searchBook.name = analyzeRule.getString(ruleName) Debug.log(bookSource.bookSourceUrl, "└${searchBook.name}", log) if (searchBook.name.isNotEmpty()) { + if (!scope.isActive) throw CancellationException() Debug.log(bookSource.bookSourceUrl, "┌获取作者", log) searchBook.author = BookHelp.formatAuthor(analyzeRule.getString(ruleAuthor)) Debug.log(bookSource.bookSourceUrl, "└${searchBook.author}", log) + if (!scope.isActive) throw CancellationException() Debug.log(bookSource.bookSourceUrl, "┌获取分类", log) searchBook.kind = analyzeRule.getStringList(ruleKind)?.joinToString(",") Debug.log(bookSource.bookSourceUrl, "└${searchBook.kind}", log) + if (!scope.isActive) throw CancellationException() Debug.log(bookSource.bookSourceUrl, "┌获取字数", log) searchBook.wordCount = analyzeRule.getString(ruleWordCount) Debug.log(bookSource.bookSourceUrl, "└${searchBook.wordCount}", log) + if (!scope.isActive) throw CancellationException() Debug.log(bookSource.bookSourceUrl, "┌获取最新章节", log) searchBook.latestChapterTitle = analyzeRule.getString(ruleLastChapter) Debug.log(bookSource.bookSourceUrl, "└${searchBook.latestChapterTitle}", log) + if (!scope.isActive) throw CancellationException() Debug.log(bookSource.bookSourceUrl, "┌获取简介", log) searchBook.intro = analyzeRule.getString(ruleIntro) Debug.log(bookSource.bookSourceUrl, "└${searchBook.intro}", log, true) + if (!scope.isActive) throw CancellationException() Debug.log(bookSource.bookSourceUrl, "┌获取封面链接", log) analyzeRule.getString(ruleCoverUrl).let { if (it.isNotEmpty()) searchBook.coverUrl = NetworkUtils.getAbsoluteURL(baseUrl, it) } Debug.log(bookSource.bookSourceUrl, "└${searchBook.coverUrl}", log) + if (!scope.isActive) throw CancellationException() Debug.log(bookSource.bookSourceUrl, "┌获取详情页链接", log) searchBook.bookUrl = analyzeRule.getString(ruleBookUrl, true) if (searchBook.bookUrl.isEmpty()) { diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index 25d94bdea..2994dcac2 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -161,7 +161,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { execute { App.db.bookSourceDao().allTextEnabled.forEach { source -> try { - val searchBooks = WebBook(source).searchBookSuspend(name) + val searchBooks = WebBook(source).searchBookSuspend(this, name) searchBooks.getOrNull(0)?.let { if (it.name == name && (it.author == author || author == "")) { changeTo(it.toBook()) diff --git a/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt b/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt index 6f14699a9..999f2a941 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt @@ -49,33 +49,31 @@ class DiffCallBack(private val oldItems: List, private val newItems: } override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? { - val oldItem = oldItems[oldItemPosition] - val newItem = newItems[newItemPosition] val payload = Bundle() - if (oldItem.name != newItem.name) { + val newItem = newItems.getOrNull(newItemPosition) + val oldItem = oldItems.getOrNull(oldItemPosition) + if (newItem == null) return payload + if (oldItem?.name != newItem.name) { payload.putString("name", newItem.name) } - if (oldItem.author != newItem.author) { + if (oldItem?.author != newItem.author) { payload.putString("author", newItem.author) } - if (oldItem.origins.size != newItem.origins.size) { + if (oldItem?.origins?.size != newItem.origins.size) { payload.putInt("origins", newItem.origins.size) } - if (oldItem.coverUrl != newItem.coverUrl) { + if (oldItem?.coverUrl != newItem.coverUrl) { payload.putString("cover", newItem.coverUrl) } - if (oldItem.kind != newItem.kind) { + if (oldItem?.kind != newItem.kind) { payload.putString("kind", newItem.kind) } - if (oldItem.latestChapterTitle != newItem.latestChapterTitle) { + if (oldItem?.latestChapterTitle != newItem.latestChapterTitle) { payload.putString("last", newItem.latestChapterTitle) } - if (oldItem.intro != newItem.intro) { + if (oldItem?.intro != newItem.intro) { payload.putString("intro", newItem.intro) } - if (payload.isEmpty) { - return null - } return payload } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt index f1a4fc858..6577c88fe 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt @@ -16,6 +16,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.asCoroutineDispatcher import kotlinx.coroutines.isActive +import kotlinx.coroutines.launch import java.util.concurrent.Executors class SearchViewModel(application: Application) : BaseViewModel(application) { @@ -33,57 +34,59 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { * 开始搜索 */ fun search(key: String) { - task?.cancel() - if (key.isEmpty() && searchKey.isEmpty()) { - return - } else if (key.isEmpty()) { - isLoading = true - searchPage++ - } else if (key.isNotEmpty()) { - isLoading = true - searchPage = 1 - searchKey = key - searchBooks.clear() - } - task = execute { - val searchGroup = context.getPrefString("searchGroup") ?: "" - val bookSourceList = if (searchGroup.isBlank()) { - App.db.bookSourceDao().allEnabled - } else { - App.db.bookSourceDao().getEnabledByGroup(searchGroup) + launch { + task?.cancel() + if (key.isEmpty() && searchKey.isEmpty()) { + return@launch + } else if (key.isEmpty()) { + isLoading = true + searchPage++ + } else if (key.isNotEmpty()) { + isLoading = true + searchPage = 1 + searchKey = key + searchBooks.clear() } - for (item in bookSourceList) { - //task取消时自动取消 by (scope = this@execute) - WebBook(item).searchBook( - searchKey, - searchPage, - scope = this, - context = searchPool - ) - .timeout(30000L) - .onSuccess(IO) { - if (isActive) { - it?.let { list -> - if (context.getPrefBoolean(PreferKey.precisionSearch)) { - precisionSearch(this, list) - } else { - App.db.searchBookDao().insert(*list.toTypedArray()) - mergeItems(this, list) + task = execute { + val searchGroup = context.getPrefString("searchGroup") ?: "" + val bookSourceList = if (searchGroup.isBlank()) { + App.db.bookSourceDao().allEnabled + } else { + App.db.bookSourceDao().getEnabledByGroup(searchGroup) + } + for (item in bookSourceList) { + //task取消时自动取消 by (scope = this@execute) + WebBook(item).searchBook( + searchKey, + searchPage, + scope = this, + context = searchPool + ) + .timeout(30000L) + .onSuccess(IO) { + if (isActive) { + it?.let { list -> + if (context.getPrefBoolean(PreferKey.precisionSearch)) { + precisionSearch(this, list) + } else { + App.db.searchBookDao().insert(*list.toTypedArray()) + mergeItems(this, list) + } } } } - } + } + }.onStart { + isSearchLiveData.postValue(true) + }.onCancel { + isSearchLiveData.postValue(false) + isLoading = false } - }.onStart { - isSearchLiveData.postValue(true) - }.onCancel { - isSearchLiveData.postValue(false) - isLoading = false - } - task?.invokeOnCompletion { - isSearchLiveData.postValue(false) - isLoading = false + task?.invokeOnCompletion { + isSearchLiveData.postValue(false) + isLoading = false + } } } diff --git a/app/src/main/java/io/legado/app/ui/rss/read/VisibleWebView.kt b/app/src/main/java/io/legado/app/ui/rss/read/VisibleWebView.kt new file mode 100644 index 000000000..0e6e1b40b --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/rss/read/VisibleWebView.kt @@ -0,0 +1,17 @@ +package io.legado.app.ui.rss.read + +import android.content.Context +import android.util.AttributeSet +import android.view.View +import android.webkit.WebView + +class VisibleWebView( + context: Context, + attrs: AttributeSet? = null +) : WebView(context, attrs) { + + override fun onWindowVisibilityChanged(visibility: Int) { + super.onWindowVisibilityChanged(View.VISIBLE) + } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_rss_read.xml b/app/src/main/res/layout/activity_rss_read.xml index 76f630002..ea4131764 100644 --- a/app/src/main/res/layout/activity_rss_read.xml +++ b/app/src/main/res/layout/activity_rss_read.xml @@ -15,7 +15,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" /> - From 78a2f6ce2f55f7a10ac406650d5143910b62980b Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 20:56:09 +0800 Subject: [PATCH 144/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/book/search/SearchViewModel.kt | 93 +++++++++---------- 1 file changed, 45 insertions(+), 48 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt index 6577c88fe..f1a4fc858 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt @@ -16,7 +16,6 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.asCoroutineDispatcher import kotlinx.coroutines.isActive -import kotlinx.coroutines.launch import java.util.concurrent.Executors class SearchViewModel(application: Application) : BaseViewModel(application) { @@ -34,59 +33,57 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { * 开始搜索 */ fun search(key: String) { - launch { - task?.cancel() - if (key.isEmpty() && searchKey.isEmpty()) { - return@launch - } else if (key.isEmpty()) { - isLoading = true - searchPage++ - } else if (key.isNotEmpty()) { - isLoading = true - searchPage = 1 - searchKey = key - searchBooks.clear() + task?.cancel() + if (key.isEmpty() && searchKey.isEmpty()) { + return + } else if (key.isEmpty()) { + isLoading = true + searchPage++ + } else if (key.isNotEmpty()) { + isLoading = true + searchPage = 1 + searchKey = key + searchBooks.clear() + } + task = execute { + val searchGroup = context.getPrefString("searchGroup") ?: "" + val bookSourceList = if (searchGroup.isBlank()) { + App.db.bookSourceDao().allEnabled + } else { + App.db.bookSourceDao().getEnabledByGroup(searchGroup) } - task = execute { - val searchGroup = context.getPrefString("searchGroup") ?: "" - val bookSourceList = if (searchGroup.isBlank()) { - App.db.bookSourceDao().allEnabled - } else { - App.db.bookSourceDao().getEnabledByGroup(searchGroup) - } - for (item in bookSourceList) { - //task取消时自动取消 by (scope = this@execute) - WebBook(item).searchBook( - searchKey, - searchPage, - scope = this, - context = searchPool - ) - .timeout(30000L) - .onSuccess(IO) { - if (isActive) { - it?.let { list -> - if (context.getPrefBoolean(PreferKey.precisionSearch)) { - precisionSearch(this, list) - } else { - App.db.searchBookDao().insert(*list.toTypedArray()) - mergeItems(this, list) - } + for (item in bookSourceList) { + //task取消时自动取消 by (scope = this@execute) + WebBook(item).searchBook( + searchKey, + searchPage, + scope = this, + context = searchPool + ) + .timeout(30000L) + .onSuccess(IO) { + if (isActive) { + it?.let { list -> + if (context.getPrefBoolean(PreferKey.precisionSearch)) { + precisionSearch(this, list) + } else { + App.db.searchBookDao().insert(*list.toTypedArray()) + mergeItems(this, list) } } } - } - }.onStart { - isSearchLiveData.postValue(true) - }.onCancel { - isSearchLiveData.postValue(false) - isLoading = false + } } + }.onStart { + isSearchLiveData.postValue(true) + }.onCancel { + isSearchLiveData.postValue(false) + isLoading = false + } - task?.invokeOnCompletion { - isSearchLiveData.postValue(false) - isLoading = false - } + task?.invokeOnCompletion { + isSearchLiveData.postValue(false) + isLoading = false } } From 8395ad61f669f04fef8ce05a577ced9e80482bf2 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 18 Mar 2020 21:10:04 +0800 Subject: [PATCH 145/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt b/app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt index faf9cef8a..ccfa5bf82 100644 --- a/app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt @@ -24,7 +24,7 @@ import org.jetbrains.anko.sdk27.listeners.onLongClick class ExploreAdapter(context: Context, private val scope: CoroutineScope, val callBack: CallBack) : SimpleRecyclerAdapter(context, R.layout.item_find_book) { - private var exIndex = 0 + private var exIndex = -1 private var scrollTo = -1 override fun convert(holder: ItemViewHolder, item: BookSource, payloads: MutableList) { From cc41f5130e47ce12436a2b0220928ea655fc2e73 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 19 Mar 2020 14:08:52 +0800 Subject: [PATCH 146/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/help/storage/Backup.kt | 57 ++++++++++--------- .../io/legado/app/help/storage/OldBook.kt | 1 - 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/storage/Backup.kt b/app/src/main/java/io/legado/app/help/storage/Backup.kt index 8c4fa8fc2..32bc2b765 100644 --- a/app/src/main/java/io/legado/app/help/storage/Backup.kt +++ b/app/src/main/java/io/legado/app/help/storage/Backup.kt @@ -54,35 +54,37 @@ object Backup { suspend fun backup(context: Context, path: String = legadoPath) { context.putPrefLong(PreferKey.lastBackup, System.currentTimeMillis()) withContext(IO) { - writeListToJson(App.db.bookDao().all, "bookshelf.json", backupPath) - writeListToJson(App.db.bookGroupDao().all, "bookGroup.json", backupPath) - writeListToJson(App.db.bookSourceDao().all, "bookSource.json", backupPath) - writeListToJson(App.db.rssSourceDao().all, "rssSource.json", backupPath) - writeListToJson(App.db.rssStarDao().all, "rssStar.json", backupPath) - writeListToJson(App.db.replaceRuleDao().all, "replaceRule.json", backupPath) - GSON.toJson(ReadBookConfig.configList)?.let { - FileUtils.createFileIfNotExist(backupPath + File.separator + ReadBookConfig.readConfigFileName) - .writeText(it) - } - Preferences.getSharedPreferences(App.INSTANCE, backupPath, "config")?.let { sp -> - val edit = sp.edit() - App.INSTANCE.defaultSharedPreferences.all.map { - when (val value = it.value) { - is Int -> edit.putInt(it.key, value) - is Boolean -> edit.putBoolean(it.key, value) - is Long -> edit.putLong(it.key, value) - is Float -> edit.putFloat(it.key, value) - is String -> edit.putString(it.key, value) - else -> Unit + synchronized(this@Backup) { + writeListToJson(App.db.bookDao().all, "bookshelf.json", backupPath) + writeListToJson(App.db.bookGroupDao().all, "bookGroup.json", backupPath) + writeListToJson(App.db.bookSourceDao().all, "bookSource.json", backupPath) + writeListToJson(App.db.rssSourceDao().all, "rssSource.json", backupPath) + writeListToJson(App.db.rssStarDao().all, "rssStar.json", backupPath) + writeListToJson(App.db.replaceRuleDao().all, "replaceRule.json", backupPath) + GSON.toJson(ReadBookConfig.configList)?.let { + FileUtils.createFileIfNotExist(backupPath + File.separator + ReadBookConfig.readConfigFileName) + .writeText(it) + } + Preferences.getSharedPreferences(App.INSTANCE, backupPath, "config")?.let { sp -> + val edit = sp.edit() + App.INSTANCE.defaultSharedPreferences.all.map { + when (val value = it.value) { + is Int -> edit.putInt(it.key, value) + is Boolean -> edit.putBoolean(it.key, value) + is Long -> edit.putLong(it.key, value) + is Float -> edit.putFloat(it.key, value) + is String -> edit.putString(it.key, value) + else -> Unit + } } + edit.commit() + } + WebDavHelp.backUpWebDav(backupPath) + if (path.isContentPath()) { + copyBackup(context, Uri.parse(path)) + } else { + copyBackup(File(path)) } - edit.commit() - } - WebDavHelp.backUpWebDav(backupPath) - if (path.isContentPath()) { - copyBackup(context, Uri.parse(path)) - } else { - copyBackup(File(path)) } } } @@ -96,6 +98,7 @@ object Backup { @Throws(java.lang.Exception::class) private fun copyBackup(context: Context, uri: Uri) { + DocumentFile.fromTreeUri(context, uri)?.let { treeDoc -> for (fileName in backupFileNames) { val file = File(backupPath + File.separator + fileName) diff --git a/app/src/main/java/io/legado/app/help/storage/OldBook.kt b/app/src/main/java/io/legado/app/help/storage/OldBook.kt index f8321973c..a782cf5f5 100644 --- a/app/src/main/java/io/legado/app/help/storage/OldBook.kt +++ b/app/src/main/java/io/legado/app/help/storage/OldBook.kt @@ -40,7 +40,6 @@ object OldBook { book.durChapterTitle = jsonItem.readString("$.durChapterName") book.durChapterPos = jsonItem.readInt("$.durChapterPage") ?: 0 book.durChapterTime = jsonItem.readLong("$.finalDate") ?: 0 - book.group = jsonItem.readInt("$.group") ?: 0 book.intro = jsonItem.readString("$.bookInfoBean.introduce") book.latestChapterTitle = jsonItem.readString("$.lastChapterName") book.lastCheckCount = jsonItem.readInt("$.newChapters") ?: 0 From b662e2a087b4b3fef5482fb7bb386ba95f7b01eb Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 19 Mar 2020 15:45:58 +0800 Subject: [PATCH 147/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/data/entities/Book.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/data/entities/Book.kt b/app/src/main/java/io/legado/app/data/entities/Book.kt index 9e50a6d4c..0dd5cab9e 100644 --- a/app/src/main/java/io/legado/app/data/entities/Book.kt +++ b/app/src/main/java/io/legado/app/data/entities/Book.kt @@ -32,7 +32,7 @@ data class Book( var customIntro: String? = null, // 简介内容(用户修改) var charset: String? = null, // 自定义字符集名称(仅适用于本地书籍) var type: Int = 0, // 0:text 1:audio - var group: Int = 1, // 自定义分组索引号 + var group: Int = 0, // 自定义分组索引号 var latestChapterTitle: String? = null, // 最新章节标题 var latestChapterTime: Long = System.currentTimeMillis(), // 最新章节标题更新时间 var lastCheckTime: Long = System.currentTimeMillis(), // 最近一次更新书籍信息的时间 From 201fbe843e6c23696acd610e64d34a650afd3952 Mon Sep 17 00:00:00 2001 From: yangyxd Date: Thu, 19 Mar 2020 17:37:26 +0800 Subject: [PATCH 148/350] =?UTF-8?q?=E8=B0=83=E6=95=B4"=E6=88=91=E7=9A=84"U?= =?UTF-8?q?I?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/widget/prefs/ColorPreference.kt | 19 +++- .../app/ui/widget/prefs/EditTextPreference.kt | 22 ++++ .../app/ui/widget/prefs/IconListPreference.kt | 11 +- .../app/ui/widget/prefs/NameListPreference.kt | 7 +- .../legado/app/ui/widget/prefs/Preference.kt | 101 ++++++++++++++++++ .../app/ui/widget/prefs/PreferenceCategory.kt | 29 ++++- .../app/ui/widget/prefs/SwitchPreference.kt | 12 ++- app/src/main/res/drawable/bg_prefs_color.xml | 10 ++ app/src/main/res/drawable/ic_cfg_about.xml | 15 +++ app/src/main/res/drawable/ic_cfg_backup.xml | 9 ++ app/src/main/res/drawable/ic_cfg_e_lnk.xml | 5 + app/src/main/res/drawable/ic_cfg_jz.xml | 12 +++ app/src/main/res/drawable/ic_cfg_other.xml | 12 +++ app/src/main/res/drawable/ic_cfg_replace.xml | 12 +++ app/src/main/res/drawable/ic_cfg_source.xml | 12 +++ app/src/main/res/drawable/ic_cfg_theme.xml | 9 ++ app/src/main/res/drawable/ic_cfg_web.xml | 9 ++ app/src/main/res/layout/view_preference.xml | 67 ++++++++++++ .../res/layout/view_preference_category.xml | 29 +++++ app/src/main/res/layout/view_preference_s.xml | 66 ++++++++++++ app/src/main/res/values-night/colors.xml | 1 + app/src/main/res/values/colors.xml | 1 + app/src/main/res/values/strings.xml | 5 + app/src/main/res/xml/about.xml | 30 ++++-- app/src/main/res/xml/donate.xml | 25 +++-- app/src/main/res/xml/pref_config_backup.xml | 24 +++-- app/src/main/res/xml/pref_config_other.xml | 8 ++ app/src/main/res/xml/pref_config_theme.xml | 14 ++- app/src/main/res/xml/pref_main.xml | 44 ++++++-- 29 files changed, 569 insertions(+), 51 deletions(-) create mode 100644 app/src/main/java/io/legado/app/ui/widget/prefs/EditTextPreference.kt create mode 100644 app/src/main/java/io/legado/app/ui/widget/prefs/Preference.kt create mode 100644 app/src/main/res/drawable/bg_prefs_color.xml create mode 100644 app/src/main/res/drawable/ic_cfg_about.xml create mode 100644 app/src/main/res/drawable/ic_cfg_backup.xml create mode 100644 app/src/main/res/drawable/ic_cfg_e_lnk.xml create mode 100644 app/src/main/res/drawable/ic_cfg_jz.xml create mode 100644 app/src/main/res/drawable/ic_cfg_other.xml create mode 100644 app/src/main/res/drawable/ic_cfg_replace.xml create mode 100644 app/src/main/res/drawable/ic_cfg_source.xml create mode 100644 app/src/main/res/drawable/ic_cfg_theme.xml create mode 100644 app/src/main/res/drawable/ic_cfg_web.xml create mode 100644 app/src/main/res/layout/view_preference.xml create mode 100644 app/src/main/res/layout/view_preference_category.xml create mode 100644 app/src/main/res/layout/view_preference_s.xml diff --git a/app/src/main/java/io/legado/app/ui/widget/prefs/ColorPreference.kt b/app/src/main/java/io/legado/app/ui/widget/prefs/ColorPreference.kt index 6bea75a51..998e9c7c4 100644 --- a/app/src/main/java/io/legado/app/ui/widget/prefs/ColorPreference.kt +++ b/app/src/main/java/io/legado/app/ui/widget/prefs/ColorPreference.kt @@ -6,14 +6,24 @@ import android.content.res.TypedArray import android.graphics.Color import android.os.Bundle import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView import androidx.annotation.ColorInt import androidx.annotation.StringRes import androidx.appcompat.app.AlertDialog +import androidx.appcompat.widget.SwitchCompat +import androidx.core.view.isVisible import androidx.fragment.app.FragmentActivity import androidx.preference.Preference import androidx.preference.PreferenceViewHolder import com.jaredrummler.android.colorpicker.* import io.legado.app.lib.theme.ATH +import io.legado.app.lib.theme.accentColor +import org.jetbrains.anko.layoutInflater +import org.jetbrains.anko.px2dip class ColorPreference(context: Context, attrs: AttributeSet) : Preference(context, attrs), ColorPickerDialogListener { @@ -37,6 +47,8 @@ class ColorPreference(context: Context, attrs: AttributeSet) : Preference(contex init { isPersistent = true + layoutResource = io.legado.app.R.layout.view_preference_s + val a = context.obtainStyledAttributes(attrs, R.styleable.ColorPreference) showDialog = a.getBoolean(R.styleable.ColorPreference_cpv_showDialog, true) @@ -110,8 +122,11 @@ class ColorPreference(context: Context, attrs: AttributeSet) : Preference(contex override fun onBindViewHolder(holder: PreferenceViewHolder) { super.onBindViewHolder(holder) - val preview = holder.itemView.findViewById(R.id.cpv_preference_preview_color_panel) as ColorPanelView - preview.color = color + val v = io.legado.app.ui.widget.prefs.Preference.bindView(context, holder, icon, title, summary, widgetLayoutResource, + io.legado.app.R.id.cpv_preference_preview_color_panel, 30, 30) + if (v is ColorPanelView) { + v?.color = color + } } override fun onSetInitialValue(defaultValue: Any?) { diff --git a/app/src/main/java/io/legado/app/ui/widget/prefs/EditTextPreference.kt b/app/src/main/java/io/legado/app/ui/widget/prefs/EditTextPreference.kt new file mode 100644 index 000000000..b914afcf5 --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/widget/prefs/EditTextPreference.kt @@ -0,0 +1,22 @@ +package io.legado.app.ui.widget.prefs + +import android.content.Context +import android.util.AttributeSet +import android.widget.TextView +import androidx.preference.PreferenceViewHolder +import io.legado.app.R + +class EditTextPreference(context: Context, attrs: AttributeSet) : androidx.preference.EditTextPreference(context, attrs) { + + init { + // isPersistent = true + layoutResource = R.layout.view_preference + } + + override fun onBindViewHolder(holder: PreferenceViewHolder?) { + super.onBindViewHolder(holder) + val txt = if (text == null || text.isEmpty()) summary else text + val v = Preference.bindView(context, holder, icon, title, txt, null, null) + } + +} diff --git a/app/src/main/java/io/legado/app/ui/widget/prefs/IconListPreference.kt b/app/src/main/java/io/legado/app/ui/widget/prefs/IconListPreference.kt index b295e5ad3..2e043b4c3 100644 --- a/app/src/main/java/io/legado/app/ui/widget/prefs/IconListPreference.kt +++ b/app/src/main/java/io/legado/app/ui/widget/prefs/IconListPreference.kt @@ -10,17 +10,22 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView +import android.widget.TextView +import androidx.core.view.isVisible import androidx.fragment.app.DialogFragment import androidx.fragment.app.FragmentActivity import androidx.preference.ListPreference import androidx.preference.PreferenceViewHolder import androidx.recyclerview.widget.LinearLayoutManager +import com.jaredrummler.android.colorpicker.ColorPanelView import io.legado.app.R import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.SimpleRecyclerAdapter +import io.legado.app.lib.theme.accentColor import io.legado.app.utils.getCompatDrawable import kotlinx.android.synthetic.main.dialog_recycler_view.* import kotlinx.android.synthetic.main.item_icon_preference.view.* +import org.jetbrains.anko.layoutInflater import org.jetbrains.anko.sdk27.listeners.onClick @@ -29,6 +34,7 @@ class IconListPreference(context: Context, attrs: AttributeSet) : ListPreference private val mEntryDrawables = arrayListOf() init { + layoutResource = io.legado.app.R.layout.view_preference widgetLayoutResource = R.layout.view_icon val a = context.theme.obtainStyledAttributes(attrs, R.styleable.IconListPreference, 0, 0) @@ -52,11 +58,12 @@ class IconListPreference(context: Context, attrs: AttributeSet) : ListPreference override fun onBindViewHolder(holder: PreferenceViewHolder?) { super.onBindViewHolder(holder) - holder?.itemView?.findViewById(R.id.preview)?.let { + val v = Preference.bindView(context, holder, icon, title, summary, widgetLayoutResource, R.id.preview, 50, 50) + if (v is ImageView) { val selectedIndex = findIndexOfValue(value) if (selectedIndex >= 0) { val drawable = mEntryDrawables[selectedIndex] - it.setImageDrawable(drawable) + v?.setImageDrawable(drawable) } } } diff --git a/app/src/main/java/io/legado/app/ui/widget/prefs/NameListPreference.kt b/app/src/main/java/io/legado/app/ui/widget/prefs/NameListPreference.kt index d8b51e90f..f4c1ccac2 100644 --- a/app/src/main/java/io/legado/app/ui/widget/prefs/NameListPreference.kt +++ b/app/src/main/java/io/legado/app/ui/widget/prefs/NameListPreference.kt @@ -11,12 +11,15 @@ import io.legado.app.R class NameListPreference(context: Context, attrs: AttributeSet) : ListPreference(context, attrs) { init { + layoutResource = R.layout.view_preference widgetLayoutResource = R.layout.item_fillet_text } override fun onBindViewHolder(holder: PreferenceViewHolder?) { super.onBindViewHolder(holder) - val textView = holder?.itemView?.findViewById(R.id.text_view) - textView?.text = entry + val v = Preference.bindView(context, holder, icon, title, summary, widgetLayoutResource, R.id.text_view) + if (v is TextView) { + v?.text = entry + } } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/widget/prefs/Preference.kt b/app/src/main/java/io/legado/app/ui/widget/prefs/Preference.kt new file mode 100644 index 000000000..30603c89d --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/widget/prefs/Preference.kt @@ -0,0 +1,101 @@ +package io.legado.app.ui.widget.prefs + +import android.content.Context +import android.content.ContextWrapper +import android.content.res.TypedArray +import android.graphics.Color +import android.graphics.drawable.Drawable +import android.media.Image +import android.os.Bundle +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.FrameLayout +import android.widget.ImageView +import android.widget.TextView +import androidx.annotation.ColorInt +import androidx.annotation.StringRes +import androidx.appcompat.app.AlertDialog +import androidx.appcompat.widget.SwitchCompat +import androidx.core.view.isVisible +import androidx.core.view.updateLayoutParams +import androidx.fragment.app.FragmentActivity +import androidx.preference.Preference +import androidx.preference.PreferenceViewHolder +import com.jaredrummler.android.colorpicker.* +import io.legado.app.lib.theme.ATH +import io.legado.app.R +import io.legado.app.lib.theme.accentColor +import org.jetbrains.anko.imageBitmap +import org.jetbrains.anko.layoutInflater +import kotlin.math.roundToInt + +class Preference(context: Context, attrs: AttributeSet) : androidx.preference.Preference(context, attrs) { + + init { + // isPersistent = true + layoutResource = R.layout.view_preference + } + + companion object { + + fun bindView(context: Context, it: PreferenceViewHolder?, icon: Drawable?, title: CharSequence?, summary: CharSequence?, weightLayoutRes: Int?, viewId: Int?, + weightWidth: Int = 0, weightHeight: Int = 0): T? { + if (it == null) return null + val view = it.findViewById(R.id.preference_title) + if (view is TextView) { // && !view.isInEditMode + view.text = title + view.isVisible = title != null && title.isNotEmpty() + + val tv_summary = it.findViewById(R.id.preference_desc) + if(tv_summary is TextView) { + tv_summary.text = summary + tv_summary.isVisible = summary != null && summary.isNotEmpty() + } + + val _icon = it.findViewById(R.id.preference_icon) + if (_icon is ImageView) { + _icon.isVisible = icon != null && icon.isVisible + _icon.setImageDrawable(icon) + _icon.setColorFilter(context.accentColor) + } + } + + if (weightLayoutRes != null && weightLayoutRes != 0 && viewId != null && viewId != 0) { + val lay = it.findViewById(R.id.preference_widget) + if (lay is FrameLayout) { + var v = it.itemView.findViewById(viewId) + if (v == null) { + val inflater: LayoutInflater = context.layoutInflater + val childView = inflater.inflate(weightLayoutRes, null) + lay.removeAllViews() + lay.addView(childView) + lay.isVisible = true + v = lay.findViewById(viewId) + } + + if (weightWidth > 0 || weightHeight > 0) { + val lp = lay.layoutParams + if (weightHeight > 0) + lp.height = (context.resources.displayMetrics.density * weightHeight).roundToInt() + if (weightWidth > 0) + lp.width = (context.resources.displayMetrics.density * weightWidth).roundToInt() + lay.layoutParams = lp + } + + return v + } + } + + return null + } + + } + + override fun onBindViewHolder(holder: PreferenceViewHolder?) { + super.onBindViewHolder(holder) + bindView(context, holder, icon, title, summary, null, null) + } + +} diff --git a/app/src/main/java/io/legado/app/ui/widget/prefs/PreferenceCategory.kt b/app/src/main/java/io/legado/app/ui/widget/prefs/PreferenceCategory.kt index e1458b76e..a7dcd2e6c 100644 --- a/app/src/main/java/io/legado/app/ui/widget/prefs/PreferenceCategory.kt +++ b/app/src/main/java/io/legado/app/ui/widget/prefs/PreferenceCategory.kt @@ -1,22 +1,41 @@ package io.legado.app.ui.widget.prefs import android.content.Context +import android.graphics.Color import android.util.AttributeSet +import android.view.View import android.widget.TextView +import androidx.core.view.isVisible import androidx.preference.PreferenceCategory import androidx.preference.PreferenceViewHolder +import io.legado.app.R import io.legado.app.lib.theme.accentColor -class PreferenceCategory(context: Context, attrs: AttributeSet) : - PreferenceCategory(context, attrs) { +class PreferenceCategory(context: Context, attrs: AttributeSet) : PreferenceCategory(context, attrs) { + + init { + isPersistent = true + layoutResource = R.layout.view_preference_category + } override fun onBindViewHolder(holder: PreferenceViewHolder?) { super.onBindViewHolder(holder) holder?.let { - val view = it.findViewById(android.R.id.title) - if (view is TextView && !view.isInEditMode) { - view.setTextColor(context.accentColor)//设置title文本的颜色 + val view = it.findViewById(R.id.preference_title) + if (view is TextView) { // && !view.isInEditMode + view.text = title + view.setTextColor(context.accentColor) //设置title文本的颜色 + view.isVisible = title != null && title.isNotEmpty() + + val da = it.findViewById(R.id.preference_divider_above) + if (da is View) { + da.isVisible = it.isDividerAllowedAbove + } + val db = it.findViewById(R.id.preference_divider_below) + if (db is View) { + db.isVisible = it.isDividerAllowedBelow + } } } } diff --git a/app/src/main/java/io/legado/app/ui/widget/prefs/SwitchPreference.kt b/app/src/main/java/io/legado/app/ui/widget/prefs/SwitchPreference.kt index 4fe66af7b..91532bbb5 100644 --- a/app/src/main/java/io/legado/app/ui/widget/prefs/SwitchPreference.kt +++ b/app/src/main/java/io/legado/app/ui/widget/prefs/SwitchPreference.kt @@ -12,13 +12,15 @@ import io.legado.app.lib.theme.accentColor class SwitchPreference(context: Context, attrs: AttributeSet) : SwitchPreferenceCompat(context, attrs) { + init { + layoutResource = R.layout.view_preference + } + override fun onBindViewHolder(holder: PreferenceViewHolder?) { super.onBindViewHolder(holder) - holder?.let { - val view = it.findViewById(R.id.switchWidget) - if (view is SwitchCompat) { - ATH.setTint(view, context.accentColor) - } + val v = Preference.bindView(context, holder, icon, title, summary, widgetLayoutResource, R.id.switchWidget) + if (v is SwitchCompat) { + ATH.setTint(v, context.accentColor) } } diff --git a/app/src/main/res/drawable/bg_prefs_color.xml b/app/src/main/res/drawable/bg_prefs_color.xml new file mode 100644 index 000000000..ff4a5de4e --- /dev/null +++ b/app/src/main/res/drawable/bg_prefs_color.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_cfg_about.xml b/app/src/main/res/drawable/ic_cfg_about.xml new file mode 100644 index 000000000..42e3d30d3 --- /dev/null +++ b/app/src/main/res/drawable/ic_cfg_about.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_cfg_backup.xml b/app/src/main/res/drawable/ic_cfg_backup.xml new file mode 100644 index 000000000..9c647c009 --- /dev/null +++ b/app/src/main/res/drawable/ic_cfg_backup.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_cfg_e_lnk.xml b/app/src/main/res/drawable/ic_cfg_e_lnk.xml new file mode 100644 index 000000000..b94a8eb4d --- /dev/null +++ b/app/src/main/res/drawable/ic_cfg_e_lnk.xml @@ -0,0 +1,5 @@ + + + + diff --git a/app/src/main/res/drawable/ic_cfg_jz.xml b/app/src/main/res/drawable/ic_cfg_jz.xml new file mode 100644 index 000000000..710bae7fd --- /dev/null +++ b/app/src/main/res/drawable/ic_cfg_jz.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_cfg_other.xml b/app/src/main/res/drawable/ic_cfg_other.xml new file mode 100644 index 000000000..a3d26b642 --- /dev/null +++ b/app/src/main/res/drawable/ic_cfg_other.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_cfg_replace.xml b/app/src/main/res/drawable/ic_cfg_replace.xml new file mode 100644 index 000000000..53c9d1d04 --- /dev/null +++ b/app/src/main/res/drawable/ic_cfg_replace.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_cfg_source.xml b/app/src/main/res/drawable/ic_cfg_source.xml new file mode 100644 index 000000000..e71bb109d --- /dev/null +++ b/app/src/main/res/drawable/ic_cfg_source.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_cfg_theme.xml b/app/src/main/res/drawable/ic_cfg_theme.xml new file mode 100644 index 000000000..2fe949d19 --- /dev/null +++ b/app/src/main/res/drawable/ic_cfg_theme.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_cfg_web.xml b/app/src/main/res/drawable/ic_cfg_web.xml new file mode 100644 index 000000000..7a34ae004 --- /dev/null +++ b/app/src/main/res/drawable/ic_cfg_web.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/view_preference.xml b/app/src/main/res/layout/view_preference.xml new file mode 100644 index 000000000..203241bf0 --- /dev/null +++ b/app/src/main/res/layout/view_preference.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_preference_category.xml b/app/src/main/res/layout/view_preference_category.xml new file mode 100644 index 000000000..28f4e73ff --- /dev/null +++ b/app/src/main/res/layout/view_preference_category.xml @@ -0,0 +1,29 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_preference_s.xml b/app/src/main/res/layout/view_preference_s.xml new file mode 100644 index 000000000..37a354c52 --- /dev/null +++ b/app/src/main/res/layout/view_preference_s.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 78d372bbd..8ac7aa66a 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -7,6 +7,7 @@ @color/md_grey_900 @color/md_grey_850 @color/md_grey_800 + #10303030 #69000000 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 58f27cdec..0fe64b7ca 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -16,6 +16,7 @@ @color/md_grey_50 @color/md_grey_100 @color/md_grey_200 + @color/md_grey_50 #00000000 #10000000 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 558e90cbe..bc219ab39 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -29,6 +29,7 @@ 删除 替换 替换净化 + 配置替换净化规则 暂无 启用 替换净化-搜索 @@ -58,6 +59,7 @@ 添加本地 书源 书源管理 + 新建/导入/编辑/管理书源 设置 主题设置 与界面/颜色相关的一些设置 @@ -80,6 +82,7 @@ 加载中… 重试 Web 服务 + 启用Web服务 web编辑书源 http://%1$s:%2$d 离线下载 @@ -442,6 +445,7 @@ 选中时点击可弹出菜单 主题 主题模式 + 选择主题模式 默认主题 恢复主题为默认配色 加入QQ群 @@ -457,6 +461,7 @@ 导入本地书籍需存储权限 夜间模式 E-Ink 模式 + 电子墨水屏模式 本软件需要存储权限来存储备份书籍信息 再按一次退出程序 导入本地书籍需存储权限 diff --git a/app/src/main/res/xml/about.xml b/app/src/main/res/xml/about.xml index 130e16e60..2970ab12b 100644 --- a/app/src/main/res/xml/about.xml +++ b/app/src/main/res/xml/about.xml @@ -2,68 +2,78 @@ - - - - - - - - - - diff --git a/app/src/main/res/xml/donate.xml b/app/src/main/res/xml/donate.xml index 13d448544..8732f864c 100644 --- a/app/src/main/res/xml/donate.xml +++ b/app/src/main/res/xml/donate.xml @@ -4,51 +4,64 @@ - - - - - - - - - - + - - - - diff --git a/app/src/main/res/xml/pref_config_other.xml b/app/src/main/res/xml/pref_config_other.xml index b049bcf22..2f6d23f9c 100644 --- a/app/src/main/res/xml/pref_config_other.xml +++ b/app/src/main/res/xml/pref_config_other.xml @@ -4,6 +4,9 @@ - - + xmlns:app="http://schemas.android.com/apk/res-auto" + android:divider="@color/transparent" + app:allowDividerBelow="false" + app:allowDividerAbove="false" + > - - + app:iconSpaceReserved="false" + app:allowDividerAbove="true" + app:allowDividerBelow="false" > - - - - - From 71ac26980c53d8244fb43e1196cb529ea1ffbd8f Mon Sep 17 00:00:00 2001 From: yangyxd Date: Thu, 19 Mar 2020 17:39:00 +0800 Subject: [PATCH 149/350] =?UTF-8?q?=E8=B0=83=E6=95=B4"=E6=88=91=E7=9A=84"U?= =?UTF-8?q?I?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/widget/prefs/ColorPreference.kt | 2 +- app/src/main/res/layout/view_preference_s.xml | 66 ------------------- 2 files changed, 1 insertion(+), 67 deletions(-) delete mode 100644 app/src/main/res/layout/view_preference_s.xml diff --git a/app/src/main/java/io/legado/app/ui/widget/prefs/ColorPreference.kt b/app/src/main/java/io/legado/app/ui/widget/prefs/ColorPreference.kt index 998e9c7c4..9b619c551 100644 --- a/app/src/main/java/io/legado/app/ui/widget/prefs/ColorPreference.kt +++ b/app/src/main/java/io/legado/app/ui/widget/prefs/ColorPreference.kt @@ -47,7 +47,7 @@ class ColorPreference(context: Context, attrs: AttributeSet) : Preference(contex init { isPersistent = true - layoutResource = io.legado.app.R.layout.view_preference_s + layoutResource = io.legado.app.R.layout.view_preference val a = context.obtainStyledAttributes(attrs, R.styleable.ColorPreference) showDialog = a.getBoolean(R.styleable.ColorPreference_cpv_showDialog, true) diff --git a/app/src/main/res/layout/view_preference_s.xml b/app/src/main/res/layout/view_preference_s.xml deleted file mode 100644 index 37a354c52..000000000 --- a/app/src/main/res/layout/view_preference_s.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file From 0f923e99a71b4714a95f702fb0703ec901c1d898 Mon Sep 17 00:00:00 2001 From: yangyxd Date: Thu, 19 Mar 2020 18:00:12 +0800 Subject: [PATCH 150/350] . --- app/src/main/res/xml/pref_config_other.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/xml/pref_config_other.xml b/app/src/main/res/xml/pref_config_other.xml index 2f6d23f9c..560692986 100644 --- a/app/src/main/res/xml/pref_config_other.xml +++ b/app/src/main/res/xml/pref_config_other.xml @@ -40,22 +40,22 @@ app:allowDividerBelow="false" app:iconSpaceReserved="false"> - - - - From afba849286c1d71601a7b2e210029d69bb975eb0 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 19 Mar 2020 18:41:35 +0800 Subject: [PATCH 151/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index d6a435788..750f6139d 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -3,11 +3,14 @@ * 请关注[开源阅读]()支持我,同时关注合作公众号[小说拾遗](),阅读公众号小编。 * 弄了个企业公众号[开源阅读](),后面弄好后会把原来的开源阅读软件迁移过来 +**2020/03/19** +* 美化界面我的 by yangyxd + **2020/03/18** * 尝试修复搜索时崩溃 * 解决看过书籍的移到顶部需要向上滚动才能看到的bug * 只有再书源被删除找不到书源时才会自动换源 -* 美化界面by yangyxd +* 美化界面 by yangyxd * 订阅后台播放 **2020/03/16** From 9d9519d508ba5ce7c1f138002bec7415e8f12701 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 19 Mar 2020 19:28:09 +0800 Subject: [PATCH 152/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 2 +- .../app/ui/widget/prefs/ColorPreference.kt | 14 +------ .../app/ui/widget/prefs/EditTextPreference.kt | 3 +- .../app/ui/widget/prefs/IconListPreference.kt | 9 +---- .../app/ui/widget/prefs/NameListPreference.kt | 4 +- .../legado/app/ui/widget/prefs/Preference.kt | 40 ++++++------------- .../app/ui/widget/prefs/SwitchPreference.kt | 12 +++++- 7 files changed, 30 insertions(+), 54 deletions(-) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 750f6139d..a78b9ae50 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -1,7 +1,7 @@ ## 更新日志 * 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。 * 请关注[开源阅读]()支持我,同时关注合作公众号[小说拾遗](),阅读公众号小编。 -* 弄了个企业公众号[开源阅读](),后面弄好后会把原来的开源阅读软件迁移过来 +* 弄了个企业公众号[开源阅读](),后面弄好后会把原来的[开源阅读软件]()迁移过来 **2020/03/19** * 美化界面我的 by yangyxd diff --git a/app/src/main/java/io/legado/app/ui/widget/prefs/ColorPreference.kt b/app/src/main/java/io/legado/app/ui/widget/prefs/ColorPreference.kt index 9b619c551..101b6678a 100644 --- a/app/src/main/java/io/legado/app/ui/widget/prefs/ColorPreference.kt +++ b/app/src/main/java/io/legado/app/ui/widget/prefs/ColorPreference.kt @@ -6,24 +6,14 @@ import android.content.res.TypedArray import android.graphics.Color import android.os.Bundle import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.ViewGroup -import android.widget.ImageView -import android.widget.LinearLayout -import android.widget.TextView import androidx.annotation.ColorInt import androidx.annotation.StringRes import androidx.appcompat.app.AlertDialog -import androidx.appcompat.widget.SwitchCompat -import androidx.core.view.isVisible import androidx.fragment.app.FragmentActivity import androidx.preference.Preference import androidx.preference.PreferenceViewHolder import com.jaredrummler.android.colorpicker.* import io.legado.app.lib.theme.ATH -import io.legado.app.lib.theme.accentColor -import org.jetbrains.anko.layoutInflater -import org.jetbrains.anko.px2dip class ColorPreference(context: Context, attrs: AttributeSet) : Preference(context, attrs), ColorPickerDialogListener { @@ -121,12 +111,12 @@ class ColorPreference(context: Context, attrs: AttributeSet) : Preference(contex } override fun onBindViewHolder(holder: PreferenceViewHolder) { - super.onBindViewHolder(holder) val v = io.legado.app.ui.widget.prefs.Preference.bindView(context, holder, icon, title, summary, widgetLayoutResource, io.legado.app.R.id.cpv_preference_preview_color_panel, 30, 30) if (v is ColorPanelView) { - v?.color = color + v.color = color } + super.onBindViewHolder(holder) } override fun onSetInitialValue(defaultValue: Any?) { diff --git a/app/src/main/java/io/legado/app/ui/widget/prefs/EditTextPreference.kt b/app/src/main/java/io/legado/app/ui/widget/prefs/EditTextPreference.kt index b914afcf5..8c0e39da3 100644 --- a/app/src/main/java/io/legado/app/ui/widget/prefs/EditTextPreference.kt +++ b/app/src/main/java/io/legado/app/ui/widget/prefs/EditTextPreference.kt @@ -14,9 +14,8 @@ class EditTextPreference(context: Context, attrs: AttributeSet) : androidx.prefe } override fun onBindViewHolder(holder: PreferenceViewHolder?) { + Preference.bindView(context, holder, icon, title, summary, null, null) super.onBindViewHolder(holder) - val txt = if (text == null || text.isEmpty()) summary else text - val v = Preference.bindView(context, holder, icon, title, txt, null, null) } } diff --git a/app/src/main/java/io/legado/app/ui/widget/prefs/IconListPreference.kt b/app/src/main/java/io/legado/app/ui/widget/prefs/IconListPreference.kt index 2e043b4c3..fa8b4eeb7 100644 --- a/app/src/main/java/io/legado/app/ui/widget/prefs/IconListPreference.kt +++ b/app/src/main/java/io/legado/app/ui/widget/prefs/IconListPreference.kt @@ -10,22 +10,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView -import android.widget.TextView -import androidx.core.view.isVisible import androidx.fragment.app.DialogFragment import androidx.fragment.app.FragmentActivity import androidx.preference.ListPreference import androidx.preference.PreferenceViewHolder import androidx.recyclerview.widget.LinearLayoutManager -import com.jaredrummler.android.colorpicker.ColorPanelView import io.legado.app.R import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.SimpleRecyclerAdapter -import io.legado.app.lib.theme.accentColor import io.legado.app.utils.getCompatDrawable import kotlinx.android.synthetic.main.dialog_recycler_view.* import kotlinx.android.synthetic.main.item_icon_preference.view.* -import org.jetbrains.anko.layoutInflater import org.jetbrains.anko.sdk27.listeners.onClick @@ -34,7 +29,7 @@ class IconListPreference(context: Context, attrs: AttributeSet) : ListPreference private val mEntryDrawables = arrayListOf() init { - layoutResource = io.legado.app.R.layout.view_preference + layoutResource = R.layout.view_preference widgetLayoutResource = R.layout.view_icon val a = context.theme.obtainStyledAttributes(attrs, R.styleable.IconListPreference, 0, 0) @@ -63,7 +58,7 @@ class IconListPreference(context: Context, attrs: AttributeSet) : ListPreference val selectedIndex = findIndexOfValue(value) if (selectedIndex >= 0) { val drawable = mEntryDrawables[selectedIndex] - v?.setImageDrawable(drawable) + v.setImageDrawable(drawable) } } } diff --git a/app/src/main/java/io/legado/app/ui/widget/prefs/NameListPreference.kt b/app/src/main/java/io/legado/app/ui/widget/prefs/NameListPreference.kt index f4c1ccac2..0763c8474 100644 --- a/app/src/main/java/io/legado/app/ui/widget/prefs/NameListPreference.kt +++ b/app/src/main/java/io/legado/app/ui/widget/prefs/NameListPreference.kt @@ -16,10 +16,10 @@ class NameListPreference(context: Context, attrs: AttributeSet) : ListPreference } override fun onBindViewHolder(holder: PreferenceViewHolder?) { - super.onBindViewHolder(holder) val v = Preference.bindView(context, holder, icon, title, summary, widgetLayoutResource, R.id.text_view) if (v is TextView) { - v?.text = entry + v.text = entry } + super.onBindViewHolder(holder) } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/widget/prefs/Preference.kt b/app/src/main/java/io/legado/app/ui/widget/prefs/Preference.kt index 30603c89d..0190dcd9f 100644 --- a/app/src/main/java/io/legado/app/ui/widget/prefs/Preference.kt +++ b/app/src/main/java/io/legado/app/ui/widget/prefs/Preference.kt @@ -1,33 +1,17 @@ package io.legado.app.ui.widget.prefs import android.content.Context -import android.content.ContextWrapper -import android.content.res.TypedArray -import android.graphics.Color import android.graphics.drawable.Drawable -import android.media.Image -import android.os.Bundle import android.util.AttributeSet import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup import android.widget.FrameLayout import android.widget.ImageView import android.widget.TextView -import androidx.annotation.ColorInt -import androidx.annotation.StringRes -import androidx.appcompat.app.AlertDialog -import androidx.appcompat.widget.SwitchCompat import androidx.core.view.isVisible -import androidx.core.view.updateLayoutParams -import androidx.fragment.app.FragmentActivity -import androidx.preference.Preference import androidx.preference.PreferenceViewHolder -import com.jaredrummler.android.colorpicker.* -import io.legado.app.lib.theme.ATH import io.legado.app.R import io.legado.app.lib.theme.accentColor -import org.jetbrains.anko.imageBitmap import org.jetbrains.anko.layoutInflater import kotlin.math.roundToInt @@ -44,21 +28,21 @@ class Preference(context: Context, attrs: AttributeSet) : androidx.preference.Pr weightWidth: Int = 0, weightHeight: Int = 0): T? { if (it == null) return null val view = it.findViewById(R.id.preference_title) - if (view is TextView) { // && !view.isInEditMode + if (view is TextView) { view.text = title view.isVisible = title != null && title.isNotEmpty() - val tv_summary = it.findViewById(R.id.preference_desc) - if(tv_summary is TextView) { - tv_summary.text = summary - tv_summary.isVisible = summary != null && summary.isNotEmpty() + val tvSummary = it.findViewById(R.id.preference_desc) + if (tvSummary is TextView) { + tvSummary.text = summary + tvSummary.isVisible = summary != null && summary.isNotEmpty() } - val _icon = it.findViewById(R.id.preference_icon) - if (_icon is ImageView) { - _icon.isVisible = icon != null && icon.isVisible - _icon.setImageDrawable(icon) - _icon.setColorFilter(context.accentColor) + val iconView = it.findViewById(R.id.preference_icon) + if (iconView is ImageView) { + iconView.isVisible = icon != null && icon.isVisible + iconView.setImageDrawable(icon) + iconView.setColorFilter(context.accentColor) } } @@ -72,7 +56,7 @@ class Preference(context: Context, attrs: AttributeSet) : androidx.preference.Pr lay.removeAllViews() lay.addView(childView) lay.isVisible = true - v = lay.findViewById(viewId) + v = lay.findViewById(viewId) } if (weightWidth > 0 || weightHeight > 0) { @@ -94,8 +78,8 @@ class Preference(context: Context, attrs: AttributeSet) : androidx.preference.Pr } override fun onBindViewHolder(holder: PreferenceViewHolder?) { - super.onBindViewHolder(holder) bindView(context, holder, icon, title, summary, null, null) + super.onBindViewHolder(holder) } } diff --git a/app/src/main/java/io/legado/app/ui/widget/prefs/SwitchPreference.kt b/app/src/main/java/io/legado/app/ui/widget/prefs/SwitchPreference.kt index 91532bbb5..2f6becfc2 100644 --- a/app/src/main/java/io/legado/app/ui/widget/prefs/SwitchPreference.kt +++ b/app/src/main/java/io/legado/app/ui/widget/prefs/SwitchPreference.kt @@ -17,11 +17,19 @@ class SwitchPreference(context: Context, attrs: AttributeSet) : } override fun onBindViewHolder(holder: PreferenceViewHolder?) { - super.onBindViewHolder(holder) - val v = Preference.bindView(context, holder, icon, title, summary, widgetLayoutResource, R.id.switchWidget) + val v = Preference.bindView( + context, + holder, + icon, + title, + summary, + widgetLayoutResource, + R.id.switchWidget + ) if (v is SwitchCompat) { ATH.setTint(v, context.accentColor) } + super.onBindViewHolder(holder) } } From 5933e33a4c06463c9c6a7ec714787f19a6abc400 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 19 Mar 2020 19:32:22 +0800 Subject: [PATCH 153/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/view_preference.xml | 28 ++++++++++----------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/app/src/main/res/layout/view_preference.xml b/app/src/main/res/layout/view_preference.xml index 203241bf0..87b10ef5b 100644 --- a/app/src/main/res/layout/view_preference.xml +++ b/app/src/main/res/layout/view_preference.xml @@ -1,7 +1,6 @@ - + android:orientation="horizontal" + android:focusable="true"> - + android:layout_height="24dp" + tools:ignore="ContentDescription,RtlHardcoded" /> + android:layout_height="wrap_content" /> + android:layout_height="wrap_content" /> - + android:layout_height="wrap_content" + tools:ignore="RtlHardcoded" /> \ No newline at end of file From 87a5409eac4c187d7c178c75b18db0ae13d2048f Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 19 Mar 2020 20:15:16 +0800 Subject: [PATCH 154/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/model/SearchBook.kt | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/model/SearchBook.kt b/app/src/main/java/io/legado/app/model/SearchBook.kt index 7b344e60f..f70d931a2 100644 --- a/app/src/main/java/io/legado/app/model/SearchBook.kt +++ b/app/src/main/java/io/legado/app/model/SearchBook.kt @@ -1,5 +1,25 @@ package io.legado.app.model -class SearchBook { +import io.legado.app.data.entities.BookSource +import io.legado.app.help.AppConfig +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.asCoroutineDispatcher +import java.util.concurrent.Executors + +class SearchBook(scope: CoroutineScope, callBack: CallBack) { + private var searchPool = + Executors.newFixedThreadPool(AppConfig.threadCount).asCoroutineDispatcher() + private var searchId = System.currentTimeMillis() + private var searchPage = 1 + private var searchKey: String = "" + private val searchEngines = arrayListOf() + + + private data class SearchEngine(val bookSource: BookSource, var hasMore: Boolean = true) + + interface CallBack { + fun onSearchSuccess() + fun onSearchFinish() + } } \ No newline at end of file From 5b4e4d4e26d54059b17bf0b42e799f693c11361f Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 19 Mar 2020 21:03:37 +0800 Subject: [PATCH 155/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/model/SearchBook.kt | 25 ------ .../io/legado/app/model/SearchBookModel.kt | 78 +++++++++++++++++++ .../main/java/io/legado/app/model/WebBook.kt | 2 +- 3 files changed, 79 insertions(+), 26 deletions(-) delete mode 100644 app/src/main/java/io/legado/app/model/SearchBook.kt create mode 100644 app/src/main/java/io/legado/app/model/SearchBookModel.kt diff --git a/app/src/main/java/io/legado/app/model/SearchBook.kt b/app/src/main/java/io/legado/app/model/SearchBook.kt deleted file mode 100644 index f70d931a2..000000000 --- a/app/src/main/java/io/legado/app/model/SearchBook.kt +++ /dev/null @@ -1,25 +0,0 @@ -package io.legado.app.model - -import io.legado.app.data.entities.BookSource -import io.legado.app.help.AppConfig -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.asCoroutineDispatcher -import java.util.concurrent.Executors - -class SearchBook(scope: CoroutineScope, callBack: CallBack) { - private var searchPool = - Executors.newFixedThreadPool(AppConfig.threadCount).asCoroutineDispatcher() - private var searchId = System.currentTimeMillis() - private var searchPage = 1 - private var searchKey: String = "" - private val searchEngines = arrayListOf() - - - private data class SearchEngine(val bookSource: BookSource, var hasMore: Boolean = true) - - interface CallBack { - fun onSearchSuccess() - fun onSearchFinish() - } - -} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/model/SearchBookModel.kt b/app/src/main/java/io/legado/app/model/SearchBookModel.kt new file mode 100644 index 000000000..8b415bc9f --- /dev/null +++ b/app/src/main/java/io/legado/app/model/SearchBookModel.kt @@ -0,0 +1,78 @@ +package io.legado.app.model + +import io.legado.app.App +import io.legado.app.data.entities.BookSource +import io.legado.app.data.entities.SearchBook +import io.legado.app.help.AppConfig +import io.legado.app.help.coroutine.Coroutine +import io.legado.app.utils.getPrefString +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers.IO +import kotlinx.coroutines.asCoroutineDispatcher +import java.util.concurrent.Executors + +class SearchBookModel(private val scope: CoroutineScope, private val callBack: CallBack) { + private var searchPool = + Executors.newFixedThreadPool(AppConfig.threadCount).asCoroutineDispatcher() + private var mSearchId = System.currentTimeMillis() + private var searchPage = 1 + private var searchKey: String = "" + private var task: Coroutine<*>? = null + + fun search(searchId: Long, key: String) { + if (searchId != mSearchId) { + task?.cancel() + mSearchId = searchId + searchPage = 1 + if (key.isEmpty()) { + return + } else { + this.searchKey = key + } + } else { + searchPage++ + } + task = Coroutine.async(scope, searchPool) { + val searchGroup = App.INSTANCE.getPrefString("searchGroup") ?: "" + val bookSourceList = if (searchGroup.isBlank()) { + App.db.bookSourceDao().allEnabled + } else { + App.db.bookSourceDao().getEnabledByGroup(searchGroup) + } + for (item in bookSourceList) { + //task取消时自动取消 by (scope = this@execute) + WebBook(item).searchBook( + searchKey, + searchPage, + scope = this, + context = searchPool + ) + .timeout(30000L) + .onSuccess(IO) { + it?.let { + if (searchId == mSearchId) { + callBack.onSearchSuccess(it) + } + } + } + } + }.onStart { + + }.onCancel { + + } + + task?.invokeOnCompletion { + + } + } + + private data class SearchEngine(val bookSource: BookSource, var hasMore: Boolean = true) + + interface CallBack { + fun onSearchSuccess(searchBooks: ArrayList) + fun onSearchFinish() + fun onSearchCancel() + } + +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/model/WebBook.kt b/app/src/main/java/io/legado/app/model/WebBook.kt index 6fee7add6..cb1742132 100644 --- a/app/src/main/java/io/legado/app/model/WebBook.kt +++ b/app/src/main/java/io/legado/app/model/WebBook.kt @@ -27,7 +27,7 @@ class WebBook(val bookSource: BookSource) { page: Int? = 1, scope: CoroutineScope = Coroutine.DEFAULT, context: CoroutineContext = Dispatchers.IO - ): Coroutine> { + ): Coroutine> { return Coroutine.async(scope, context) { searchBookSuspend(scope, key, page) } From 83e5a5d91f16859f177e49ed0d1501749980e484 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 19 Mar 2020 21:23:43 +0800 Subject: [PATCH 156/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/help/coroutine/Coroutine.kt | 6 +-- .../main/java/io/legado/app/model/Debug.kt | 50 ++++++++----------- .../io/legado/app/model/SearchBookModel.kt | 6 +-- .../io/legado/app/service/AudioPlayService.kt | 4 +- .../io/legado/app/service/DownloadService.kt | 6 +-- .../io/legado/app/service/help/ReadBook.kt | 2 +- .../legado/app/ui/audio/AudioPlayViewModel.kt | 2 +- .../book/changecover/ChangeCoverViewModel.kt | 2 +- .../changesource/ChangeSourceViewModel.kt | 16 +++--- .../ui/book/explore/ExploreShowViewModel.kt | 8 ++- .../app/ui/book/info/BookInfoViewModel.kt | 32 ++++++------ .../app/ui/book/read/ReadBookViewModel.kt | 2 +- .../app/ui/book/search/SearchViewModel.kt | 12 ++--- .../book/source/manage/BookSourceViewModel.kt | 2 +- .../io/legado/app/ui/main/MainViewModel.kt | 8 ++- .../ui/main/bookshelf/BookshelfViewModel.kt | 6 +-- .../ui/rss/article/RssArticlesViewModel.kt | 8 +-- .../rss/source/manage/RssSourceViewModel.kt | 2 +- 18 files changed, 74 insertions(+), 100 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt b/app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt index eb0a29375..0811eee10 100644 --- a/app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt +++ b/app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt @@ -28,7 +28,7 @@ class Coroutine( private val job: Job private var start: VoidCallback? = null - private var success: Callback? = null + private var success: Callback? = null private var error: Callback? = null private var finally: VoidCallback? = null private var cancel: VoidCallback? = null @@ -79,7 +79,7 @@ class Coroutine( fun onSuccess( context: CoroutineContext? = null, - block: suspend CoroutineScope.(T?) -> Unit + block: suspend CoroutineScope.(T) -> Unit ): Coroutine { this.success = Callback(context, block) return this@Coroutine @@ -192,7 +192,7 @@ class Coroutine( context: CoroutineContext, timeMillis: Long, noinline block: suspend CoroutineScope.() -> T - ): T? { + ): T { return withContext(scope.coroutineContext.plus(context)) { if (timeMillis > 0L) withTimeout(timeMillis) { block() diff --git a/app/src/main/java/io/legado/app/model/Debug.kt b/app/src/main/java/io/legado/app/model/Debug.kt index 7d7ec3627..2acd8ac9e 100644 --- a/app/src/main/java/io/legado/app/model/Debug.kt +++ b/app/src/main/java/io/legado/app/model/Debug.kt @@ -56,9 +56,7 @@ object Debug { log(debugSource, "︾开始解析") Rss.getArticles(rssSource, null) .onSuccess { - if (it == null) { - log(debugSource, "︽解析失败", state = -1) - } else if(it.articles.isEmpty()) { + if (it.articles.isEmpty()) { log(debugSource, "⇒列表页解析成功,为空") log(debugSource, "︽解析完成", state = 1000) } else { @@ -140,14 +138,12 @@ object Debug { log(debugSource, "︾开始解析发现页") val explore = webBook.exploreBook(url, 1) .onSuccess { exploreBooks -> - exploreBooks?.let { - if (exploreBooks.isNotEmpty()) { - log(debugSource, "︽发现页解析完成") - log(debugSource, showTime = false) - infoDebug(webBook, exploreBooks[0].toBook()) - } else { - log(debugSource, "︽未获取到书籍", state = -1) - } + if (exploreBooks.isNotEmpty()) { + log(debugSource, "︽发现页解析完成") + log(debugSource, showTime = false) + infoDebug(webBook, exploreBooks[0].toBook()) + } else { + log(debugSource, "︽未获取到书籍", state = -1) } } .onError { @@ -164,14 +160,12 @@ object Debug { log(debugSource, "︾开始解析搜索页") val search = webBook.searchBook(key, 1) .onSuccess { searchBooks -> - searchBooks?.let { - if (searchBooks.isNotEmpty()) { - log(debugSource, "︽搜索页解析完成") - log(debugSource, showTime = false) - infoDebug(webBook, searchBooks[0].toBook()) - } else { - log(debugSource, "︽未获取到书籍", state = -1) - } + if (searchBooks.isNotEmpty()) { + log(debugSource, "︽搜索页解析完成") + log(debugSource, showTime = false) + infoDebug(webBook, searchBooks[0].toBook()) + } else { + log(debugSource, "︽未获取到书籍", state = -1) } } .onError { @@ -197,16 +191,14 @@ object Debug { private fun tocDebug(webBook: WebBook, book: Book) { log(debugSource, "︾开始解析目录页") val chapterList = webBook.getChapterList(book) - .onSuccess { chapterList -> - chapterList?.let { - if (it.isNotEmpty()) { - log(debugSource, "︽目录页解析完成") - log(debugSource, showTime = false) - val nextChapterUrl = if (it.size > 1) it[1].url else null - contentDebug(webBook, book, it[0], nextChapterUrl) - } else { - log(debugSource, "︽目录列表为空", state = -1) - } + .onSuccess { + if (it.isNotEmpty()) { + log(debugSource, "︽目录页解析完成") + log(debugSource, showTime = false) + val nextChapterUrl = if (it.size > 1) it[1].url else null + contentDebug(webBook, book, it[0], nextChapterUrl) + } else { + log(debugSource, "︽目录列表为空", state = -1) } } .onError { diff --git a/app/src/main/java/io/legado/app/model/SearchBookModel.kt b/app/src/main/java/io/legado/app/model/SearchBookModel.kt index 8b415bc9f..e48b45a95 100644 --- a/app/src/main/java/io/legado/app/model/SearchBookModel.kt +++ b/app/src/main/java/io/legado/app/model/SearchBookModel.kt @@ -49,10 +49,8 @@ class SearchBookModel(private val scope: CoroutineScope, private val callBack: C ) .timeout(30000L) .onSuccess(IO) { - it?.let { - if (searchId == mSearchId) { - callBack.onSearchSuccess(it) - } + if (searchId == mSearchId) { + callBack.onSearchSuccess(it) } } } diff --git a/app/src/main/java/io/legado/app/service/AudioPlayService.kt b/app/src/main/java/io/legado/app/service/AudioPlayService.kt index c165f3142..986e7c4ed 100644 --- a/app/src/main/java/io/legado/app/service/AudioPlayService.kt +++ b/app/src/main/java/io/legado/app/service/AudioPlayService.kt @@ -18,9 +18,9 @@ import androidx.core.app.NotificationCompat import io.legado.app.App import io.legado.app.R import io.legado.app.base.BaseService -import io.legado.app.constant.IntentAction import io.legado.app.constant.AppConst import io.legado.app.constant.EventBus +import io.legado.app.constant.IntentAction import io.legado.app.constant.Status import io.legado.app.data.entities.BookChapter import io.legado.app.help.BookHelp @@ -275,7 +275,7 @@ class AudioPlayService : BaseService(), AudioPlay.book?.let { book -> AudioPlay.webBook?.getContent(book, chapter, scope = this) ?.onSuccess(IO) { content -> - if (content.isNullOrEmpty()) { + if (content.isEmpty()) { withContext(Main) { toast("未获取到资源链接") } diff --git a/app/src/main/java/io/legado/app/service/DownloadService.kt b/app/src/main/java/io/legado/app/service/DownloadService.kt index 732506449..dd48933e8 100644 --- a/app/src/main/java/io/legado/app/service/DownloadService.kt +++ b/app/src/main/java/io/legado/app/service/DownloadService.kt @@ -130,10 +130,8 @@ class DownloadService : BaseService() { // notificationContent = "启动:" + chapter.title //} .onSuccess(IO) { content -> - content?.let { - downloadCount[entry.key]?.increaseSuccess() - BookHelp.saveContent(book, chapter, content) - } + downloadCount[entry.key]?.increaseSuccess() + BookHelp.saveContent(book, chapter, content) } .onFinally(IO) { synchronized(this@DownloadService) { diff --git a/app/src/main/java/io/legado/app/service/help/ReadBook.kt b/app/src/main/java/io/legado/app/service/help/ReadBook.kt index f18280d49..f48f13d11 100644 --- a/app/src/main/java/io/legado/app/service/help/ReadBook.kt +++ b/app/src/main/java/io/legado/app/service/help/ReadBook.kt @@ -245,7 +245,7 @@ object ReadBook { book?.let { book -> webBook?.getContent(book, chapter) ?.onSuccess(Dispatchers.IO) { content -> - if (content.isNullOrEmpty()) { + if (content.isEmpty()) { contentLoadFinish( chapter, App.INSTANCE.getString(R.string.content_empty), diff --git a/app/src/main/java/io/legado/app/ui/audio/AudioPlayViewModel.kt b/app/src/main/java/io/legado/app/ui/audio/AudioPlayViewModel.kt index b5dd5bfba..892a99f41 100644 --- a/app/src/main/java/io/legado/app/ui/audio/AudioPlayViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/audio/AudioPlayViewModel.kt @@ -72,7 +72,7 @@ class AudioPlayViewModel(application: Application) : BaseViewModel(application) execute { AudioPlay.webBook?.getChapterList(book, this) ?.onSuccess(Dispatchers.IO) { cList -> - if (!cList.isNullOrEmpty()) { + if (cList.isNotEmpty()) { if (changeDruChapterIndex == null) { App.db.bookChapterDao().insert(*cList.toTypedArray()) AudioPlay.chapterSize = cList.size diff --git a/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverViewModel.kt b/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverViewModel.kt index bcd0e61d0..0c91fe0f9 100644 --- a/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverViewModel.kt @@ -57,7 +57,7 @@ class ChangeCoverViewModel(application: Application) : BaseViewModel(application WebBook(item).searchBook(name, scope = this@execute, context = searchPool) .timeout(30000L) .onSuccess(Dispatchers.IO) { - if (it != null && it.isNotEmpty()) { + if (it.isNotEmpty()) { val searchBook = it[0] if (searchBook.name == name && searchBook.author == author && !searchBook.coverUrl.isNullOrEmpty() diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeSourceViewModel.kt index 5b1c7e939..b375aed11 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeSourceViewModel.kt @@ -78,7 +78,7 @@ class ChangeSourceViewModel(application: Application) : BaseViewModel(applicatio WebBook(item).searchBook(name, scope = this@execute, context = searchPool) .timeout(30000L) .onSuccess(IO) { - it?.forEach { searchBook -> + it.forEach { searchBook -> if (searchBook.name == name && searchBook.author == author) { if (context.getPrefBoolean(PreferKey.changeSourceLoadToc)) { if (searchBook.tocUrl.isEmpty()) { @@ -110,7 +110,7 @@ class ChangeSourceViewModel(application: Application) : BaseViewModel(applicatio App.db.bookSourceDao().getBookSource(book.origin)?.let { bookSource -> WebBook(bookSource).getBookInfo(book, this) .onSuccess { - it?.let { loadChapter(it) } + loadChapter(it) }.onError { debug { context.getString(R.string.error_get_book_info) } } @@ -122,13 +122,11 @@ class ChangeSourceViewModel(application: Application) : BaseViewModel(applicatio execute { App.db.bookSourceDao().getBookSource(book.origin)?.let { bookSource -> WebBook(bookSource).getChapterList(book, this) - .onSuccess(IO) { - it?.let { chapters -> - if (chapters.isNotEmpty()) { - book.latestChapterTitle = chapters.last().title - val searchBook: SearchBook = book.toSearchBook() - searchFinish(searchBook) - } + .onSuccess(IO) { chapters -> + if (chapters.isNotEmpty()) { + book.latestChapterTitle = chapters.last().title + val searchBook: SearchBook = book.toSearchBook() + searchFinish(searchBook) } }.onError { debug { context.getString(R.string.error_get_chapter_list) } diff --git a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt index d34e21916..bd22b3968 100644 --- a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt @@ -35,11 +35,9 @@ class ExploreShowViewModel(application: Application) : BaseViewModel(application WebBook(source).exploreBook(url, page, this) .timeout(30000L) .onSuccess(IO) { searchBooks -> - searchBooks?.let { - booksData.postValue(searchBooks) - App.db.searchBookDao().insert(*searchBooks.toTypedArray()) - page++ - } + booksData.postValue(searchBooks) + App.db.searchBookDao().insert(*searchBooks.toTypedArray()) + page++ } } } diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt index 485d704ce..a8d8f59ef 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt @@ -59,13 +59,11 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) { App.db.bookSourceDao().getBookSource(book.origin)?.let { bookSource -> WebBook(bookSource).getBookInfo(book, this) .onSuccess(IO) { - it?.let { - bookData.postValue(book) - if (inBookshelf) { - App.db.bookDao().update(book) - } - loadChapter(it, changeDruChapterIndex) + bookData.postValue(book) + if (inBookshelf) { + App.db.bookDao().update(book) } + loadChapter(it, changeDruChapterIndex) }.onError { toast(R.string.error_get_book_info) } @@ -92,20 +90,18 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) { App.db.bookSourceDao().getBookSource(book.origin)?.let { bookSource -> WebBook(bookSource).getChapterList(book, this) .onSuccess(IO) { - it?.let { - if (it.isNotEmpty()) { - if (inBookshelf) { - App.db.bookDao().update(book) - App.db.bookChapterDao().insert(*it.toTypedArray()) - } - if (changeDruChapterIndex == null) { - chapterListData.postValue(it) - } else { - changeDruChapterIndex(it) - } + if (it.isNotEmpty()) { + if (inBookshelf) { + App.db.bookDao().update(book) + App.db.bookChapterDao().insert(*it.toTypedArray()) + } + if (changeDruChapterIndex == null) { + chapterListData.postValue(it) } else { - toast(R.string.chapter_list_empty) + changeDruChapterIndex(it) } + } else { + toast(R.string.chapter_list_empty) } }.onError { chapterListData.postValue(null) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index 2994dcac2..231f83e11 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -112,7 +112,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { } else { ReadBook.webBook?.getChapterList(book, this) ?.onSuccess(IO) { cList -> - if (!cList.isNullOrEmpty()) { + if (cList.isNotEmpty()) { if (changeDruChapterIndex == null) { App.db.bookChapterDao().insert(*cList.toTypedArray()) App.db.bookDao().update(book) diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt index f1a4fc858..fd0226271 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt @@ -63,13 +63,11 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { .timeout(30000L) .onSuccess(IO) { if (isActive) { - it?.let { list -> - if (context.getPrefBoolean(PreferKey.precisionSearch)) { - precisionSearch(this, list) - } else { - App.db.searchBookDao().insert(*list.toTypedArray()) - mergeItems(this, list) - } + if (context.getPrefBoolean(PreferKey.precisionSearch)) { + precisionSearch(this, it) + } else { + App.db.searchBookDao().insert(*it.toTypedArray()) + mergeItems(this, it) } } } diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt index 85e3239bc..d44efd3ad 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt @@ -211,7 +211,7 @@ class BookSourceViewModel(application: Application) : BaseViewModel(application) }.onError { finally(it.localizedMessage ?: "") }.onSuccess { - finally(it ?: "导入完成") + finally(it) } } diff --git a/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt b/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt index 4fe57d758..61c951ae5 100644 --- a/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt @@ -33,11 +33,9 @@ class MainViewModel(application: Application) : BaseViewModel(application) { updateList.remove(book.bookUrl) postEvent(EventBus.UP_BOOK, book.bookUrl) } - it?.let { - App.db.bookDao().update(book) - App.db.bookChapterDao().delByBook(book.bookUrl) - App.db.bookChapterDao().insert(*it.toTypedArray()) - } + App.db.bookDao().update(book) + App.db.bookChapterDao().delByBook(book.bookUrl) + App.db.bookChapterDao().insert(*it.toTypedArray()) } .onError { synchronized(this) { diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfViewModel.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfViewModel.kt index 87d2b3e06..2415db1be 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfViewModel.kt @@ -43,10 +43,8 @@ class BookshelfViewModel(application: Application) : BaseViewModel(application) ) WebBook(bookSource).getBookInfo(book, this) .onSuccess(IO) { - it?.let { book -> - App.db.bookDao().insert(book) - successCount++ - } + App.db.bookDao().insert(it) + successCount++ }.onError { throw Exception(it.localizedMessage) } diff --git a/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesViewModel.kt b/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesViewModel.kt index ccfff44df..61a2b14be 100644 --- a/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesViewModel.kt @@ -44,8 +44,8 @@ class RssArticlesViewModel(application: Application) : BaseViewModel(application rssSource?.let { rssSource -> Rss.getArticles(rssSource, null) .onSuccess(IO) { - nextPageUrl = it?.nextPageUrl - it?.articles?.let { list -> + nextPageUrl = it.nextPageUrl + it.articles.let { list -> list.forEach { rssArticle -> rssArticle.order = order-- } @@ -76,8 +76,8 @@ class RssArticlesViewModel(application: Application) : BaseViewModel(application if (source != null && !pageUrl.isNullOrEmpty()) { Rss.getArticles(source, pageUrl) .onSuccess(IO) { - nextPageUrl = it?.nextPageUrl - it?.articles?.let { list -> + nextPageUrl = it.nextPageUrl + it.articles.let { list -> if (list.isEmpty()) { callBack?.loadFinally(false) return@let diff --git a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceViewModel.kt index 9160155b3..82bad9584 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceViewModel.kt @@ -187,7 +187,7 @@ class RssSourceViewModel(application: Application) : BaseViewModel(application) }.onError { finally(it.localizedMessage ?: "") }.onSuccess { - finally(it ?: "导入完成") + finally(it) } } From e13f7b0f9cf5341156d4624bd53c375375ce9bf7 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 19 Mar 2020 22:05:09 +0800 Subject: [PATCH 157/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/model/SearchBookModel.kt | 23 +++-- .../app/ui/book/search/SearchViewModel.kt | 94 +++++++------------ 2 files changed, 51 insertions(+), 66 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/SearchBookModel.kt b/app/src/main/java/io/legado/app/model/SearchBookModel.kt index e48b45a95..9e1ad126b 100644 --- a/app/src/main/java/io/legado/app/model/SearchBookModel.kt +++ b/app/src/main/java/io/legado/app/model/SearchBookModel.kt @@ -1,7 +1,6 @@ package io.legado.app.model import io.legado.app.App -import io.legado.app.data.entities.BookSource import io.legado.app.data.entities.SearchBook import io.legado.app.help.AppConfig import io.legado.app.help.coroutine.Coroutine @@ -22,6 +21,7 @@ class SearchBookModel(private val scope: CoroutineScope, private val callBack: C fun search(searchId: Long, key: String) { if (searchId != mSearchId) { task?.cancel() + callBack.onSearchCancel() mSearchId = searchId searchPage = 1 if (key.isEmpty()) { @@ -55,19 +55,30 @@ class SearchBookModel(private val scope: CoroutineScope, private val callBack: C } } }.onStart { - - }.onCancel { - + callBack.onSearchStart() } task?.invokeOnCompletion { - + if (searchId == mSearchId) { + callBack.onSearchFinish() + } } } - private data class SearchEngine(val bookSource: BookSource, var hasMore: Boolean = true) + fun cancelSearch() { + task?.cancel() + mSearchId = 0 + callBack.onSearchCancel() + } + + fun close() { + task?.cancel() + mSearchId = 0 + searchPool.close() + } interface CallBack { + fun onSearchStart() fun onSearchSuccess(searchBooks: ArrayList) fun onSearchFinish() fun onSearchCancel() diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt index fd0226271..ccfc5dd15 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt @@ -7,84 +7,58 @@ import io.legado.app.base.BaseViewModel import io.legado.app.constant.PreferKey import io.legado.app.data.entities.SearchBook import io.legado.app.data.entities.SearchKeyword -import io.legado.app.help.AppConfig -import io.legado.app.help.coroutine.Coroutine -import io.legado.app.model.WebBook +import io.legado.app.model.SearchBookModel import io.legado.app.utils.getPrefBoolean -import io.legado.app.utils.getPrefString import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers.IO -import kotlinx.coroutines.asCoroutineDispatcher import kotlinx.coroutines.isActive -import java.util.concurrent.Executors -class SearchViewModel(application: Application) : BaseViewModel(application) { - private var searchPool = - Executors.newFixedThreadPool(AppConfig.threadCount).asCoroutineDispatcher() - private var task: Coroutine<*>? = null +class SearchViewModel(application: Application) : BaseViewModel(application) + , SearchBookModel.CallBack { + private val searchBookModel = SearchBookModel(this, this) var isSearchLiveData = MutableLiveData() var searchBookLiveData = MutableLiveData>() var searchKey: String = "" - var searchPage = 1 var isLoading = false var searchBooks = arrayListOf() + private var searchID = 0L /** * 开始搜索 */ fun search(key: String) { - task?.cancel() - if (key.isEmpty() && searchKey.isEmpty()) { - return - } else if (key.isEmpty()) { - isLoading = true - searchPage++ - } else if (key.isNotEmpty()) { - isLoading = true - searchPage = 1 - searchKey = key + if (searchKey != key && key.isNotEmpty()) { + searchBookModel.cancelSearch() searchBooks.clear() + searchBookLiveData.postValue(searchBooks) + searchID = System.currentTimeMillis() + searchKey = key } - task = execute { - val searchGroup = context.getPrefString("searchGroup") ?: "" - val bookSourceList = if (searchGroup.isBlank()) { - App.db.bookSourceDao().allEnabled - } else { - App.db.bookSourceDao().getEnabledByGroup(searchGroup) - } - for (item in bookSourceList) { - //task取消时自动取消 by (scope = this@execute) - WebBook(item).searchBook( - searchKey, - searchPage, - scope = this, - context = searchPool - ) - .timeout(30000L) - .onSuccess(IO) { - if (isActive) { - if (context.getPrefBoolean(PreferKey.precisionSearch)) { - precisionSearch(this, it) - } else { - App.db.searchBookDao().insert(*it.toTypedArray()) - mergeItems(this, it) - } - } - } - } - }.onStart { - isSearchLiveData.postValue(true) - }.onCancel { - isSearchLiveData.postValue(false) - isLoading = false - } + searchBookModel.search(searchID, searchKey) + } + + override fun onSearchStart() { + isSearchLiveData.postValue(true) + } - task?.invokeOnCompletion { - isSearchLiveData.postValue(false) - isLoading = false + override fun onSearchSuccess(searchBooks: ArrayList) { + if (context.getPrefBoolean(PreferKey.precisionSearch)) { + precisionSearch(this, searchBooks) + } else { + App.db.searchBookDao().insert(*searchBooks.toTypedArray()) + mergeItems(this, searchBooks) } } + override fun onSearchFinish() { + isSearchLiveData.postValue(false) + isLoading = false + } + + override fun onSearchCancel() { + isSearchLiveData.postValue(false) + isLoading = false + } + /** * 精确搜索处理 */ @@ -185,7 +159,7 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { * 停止搜索 */ fun stop() { - task?.cancel() + searchBookModel.cancelSearch() } /** @@ -221,7 +195,7 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { override fun onCleared() { super.onCleared() - searchPool.close() + searchBookModel.close() } } From e9f40e699ec1c78589fe3a92c43bd77ef40c9e8c Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 19 Mar 2020 22:10:27 +0800 Subject: [PATCH 158/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/ui/book/search/DiffCallBack.kt | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt b/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt index 999f2a941..b03e54fb7 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/DiffCallBack.kt @@ -50,30 +50,32 @@ class DiffCallBack(private val oldItems: List, private val newItems: override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? { val payload = Bundle() - val newItem = newItems.getOrNull(newItemPosition) - val oldItem = oldItems.getOrNull(oldItemPosition) - if (newItem == null) return payload - if (oldItem?.name != newItem.name) { + val newItem = newItems[newItemPosition] + val oldItem = oldItems[oldItemPosition] + if (oldItem.name != newItem.name) { payload.putString("name", newItem.name) } - if (oldItem?.author != newItem.author) { + if (oldItem.author != newItem.author) { payload.putString("author", newItem.author) } - if (oldItem?.origins?.size != newItem.origins.size) { + if (oldItem.origins.size != newItem.origins.size) { payload.putInt("origins", newItem.origins.size) } - if (oldItem?.coverUrl != newItem.coverUrl) { + if (oldItem.coverUrl != newItem.coverUrl) { payload.putString("cover", newItem.coverUrl) } - if (oldItem?.kind != newItem.kind) { + if (oldItem.kind != newItem.kind) { payload.putString("kind", newItem.kind) } - if (oldItem?.latestChapterTitle != newItem.latestChapterTitle) { + if (oldItem.latestChapterTitle != newItem.latestChapterTitle) { payload.putString("last", newItem.latestChapterTitle) } - if (oldItem?.intro != newItem.intro) { + if (oldItem.intro != newItem.intro) { payload.putString("intro", newItem.intro) } + if (payload.isEmpty) { + return null + } return payload } } \ No newline at end of file From 444c141c45841416e343d5926ad1afad4754b81a Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 19 Mar 2020 22:12:46 +0800 Subject: [PATCH 159/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/model/SearchBookModel.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/model/SearchBookModel.kt b/app/src/main/java/io/legado/app/model/SearchBookModel.kt index 9e1ad126b..1f6cac065 100644 --- a/app/src/main/java/io/legado/app/model/SearchBookModel.kt +++ b/app/src/main/java/io/legado/app/model/SearchBookModel.kt @@ -18,10 +18,16 @@ class SearchBookModel(private val scope: CoroutineScope, private val callBack: C private var searchKey: String = "" private var task: Coroutine<*>? = null + private fun initSearchPool() { + searchPool = + Executors.newFixedThreadPool(AppConfig.threadCount).asCoroutineDispatcher() + } + fun search(searchId: Long, key: String) { if (searchId != mSearchId) { task?.cancel() - callBack.onSearchCancel() + searchPool.close() + initSearchPool() mSearchId = searchId searchPage = 1 if (key.isEmpty()) { From c72f025f6f61d34e87be6a9e7eb74bb4fdde4ea0 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 19 Mar 2020 22:17:54 +0800 Subject: [PATCH 160/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index a78b9ae50..cb38140fe 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -5,6 +5,7 @@ **2020/03/19** * 美化界面我的 by yangyxd +* 优化搜索 **2020/03/18** * 尝试修复搜索时崩溃 From 18cf6814bcc3ee7418a929bc86084348dab4e71a Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 19 Mar 2020 22:27:17 +0800 Subject: [PATCH 161/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/view_book_page.xml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/layout/view_book_page.xml b/app/src/main/res/layout/view_book_page.xml index 922819b1e..3f09664a3 100644 --- a/app/src/main/res/layout/view_book_page.xml +++ b/app/src/main/res/layout/view_book_page.xml @@ -18,6 +18,8 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" + android:maxLines="1" + android:ellipsize="end" android:textSize="12sp" /> @@ -62,7 +66,8 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" - android:singleLine="true" + android:maxLines="1" + android:ellipsize="end" android:textSize="12sp" /> From ed96e3addd0e9e25415c11c9c52268a689b048c7 Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 20 Mar 2020 19:04:52 +0800 Subject: [PATCH 162/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/book/info/BookInfoActivity.kt | 3 +-- .../java/io/legado/app/ui/widget/TitleBar.kt | 6 +++++ .../res/layout-land/activity_book_info.xml | 26 +++++++++---------- .../main/res/layout/activity_book_info.xml | 7 ++--- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt index bd9b3700f..4ea22d61c 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt @@ -57,8 +57,7 @@ class BookInfoActivity : get() = getViewModel(BookInfoViewModel::class.java) override fun onActivityCreated(savedInstanceState: Bundle?) { - setSupportActionBar(toolbar) - supportActionBar?.setDisplayHomeAsUpEnabled(true) + title_bar.transparent() viewModel.bookData.observe(this, Observer { showBook(it) }) viewModel.chapterListData.observe(this, Observer { upLoading(false, it) }) viewModel.initData(intent) diff --git a/app/src/main/java/io/legado/app/ui/widget/TitleBar.kt b/app/src/main/java/io/legado/app/ui/widget/TitleBar.kt index 663bb55a8..94d3b7be6 100644 --- a/app/src/main/java/io/legado/app/ui/widget/TitleBar.kt +++ b/app/src/main/java/io/legado/app/ui/widget/TitleBar.kt @@ -2,6 +2,7 @@ package io.legado.app.ui.widget import android.content.Context import android.content.res.ColorStateList +import android.graphics.Color import android.util.AttributeSet import android.view.Menu import android.view.View @@ -186,6 +187,11 @@ class TitleBar(context: Context, attrs: AttributeSet?) : AppBarLayout(context, a toolbar.setSubtitleTextAppearance(context, resId) } + fun transparent() { + elevation = 0f + backgroundColor = Color.TRANSPARENT + } + private fun attachToActivity() { if (attachToActivity) { activity?.let { diff --git a/app/src/main/res/layout-land/activity_book_info.xml b/app/src/main/res/layout-land/activity_book_info.xml index 27e0bec0d..1dc7d789c 100644 --- a/app/src/main/res/layout-land/activity_book_info.xml +++ b/app/src/main/res/layout-land/activity_book_info.xml @@ -14,13 +14,10 @@ android:contentDescription="@string/bg_image" app:layout_constraintTop_toTopOf="parent" /> - @@ -81,7 +78,8 @@ android:paddingLeft="10dp" android:paddingTop="8dp" android:paddingRight="16dp" - android:paddingBottom="3dp"> + android:paddingBottom="3dp" + tools:ignore="RtlHardcoded"> + android:scrollbars="vertical" + tools:ignore="NestedWeights"> + tools:ignore="NestedWeights,RtlHardcoded,RtlSymmetry" /> + tools:ignore="NestedWeights,RtlHardcoded,RtlSymmetry" /> @@ -290,7 +288,7 @@ android:text="@string/group_s" android:textColor="@color/tv_text_summary" android:textSize="13sp" - tools:ignore="NestedWeights" /> + tools:ignore="NestedWeights,RtlHardcoded,RtlSymmetry" /> + tools:ignore="NestedWeights,RtlHardcoded,RtlSymmetry" /> + android:background="@color/background" /> - From 41e1afb05cae47755b431b917bb3058555d03ebb Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 20 Mar 2020 19:09:23 +0800 Subject: [PATCH 163/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/drawable/ic_help.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/drawable/ic_help.xml b/app/src/main/res/drawable/ic_help.xml index d5ecd8235..32838437b 100644 --- a/app/src/main/res/drawable/ic_help.xml +++ b/app/src/main/res/drawable/ic_help.xml @@ -1,6 +1,6 @@ Date: Fri, 20 Mar 2020 19:17:12 +0800 Subject: [PATCH 164/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/ui/audio/AudioPlayActivity.kt | 5 ++--- app/src/main/res/layout/activity_audio_play.xml | 11 ++++------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/audio/AudioPlayActivity.kt b/app/src/main/java/io/legado/app/ui/audio/AudioPlayActivity.kt index bece64c93..3c960093b 100644 --- a/app/src/main/java/io/legado/app/ui/audio/AudioPlayActivity.kt +++ b/app/src/main/java/io/legado/app/ui/audio/AudioPlayActivity.kt @@ -46,9 +46,8 @@ class AudioPlayActivity : private var adjustProgress = false override fun onActivityCreated(savedInstanceState: Bundle?) { - setSupportActionBar(toolbar) - supportActionBar?.setDisplayHomeAsUpEnabled(true) - AudioPlay.titleData.observe(this, Observer { toolbar.title = it }) + title_bar.transparent() + AudioPlay.titleData.observe(this, Observer { title_bar.title = it }) AudioPlay.coverData.observe(this, Observer { upCover(it) }) viewModel.initData(intent) initView() diff --git a/app/src/main/res/layout/activity_audio_play.xml b/app/src/main/res/layout/activity_audio_play.xml index 7869b3b1c..71a7edfe8 100644 --- a/app/src/main/res/layout/activity_audio_play.xml +++ b/app/src/main/res/layout/activity_audio_play.xml @@ -21,13 +21,10 @@ android:layout_height="match_parent" android:background="#50000000" /> - + app:layout_constraintTop_toBottomOf="@+id/title_bar" /> Date: Fri, 20 Mar 2020 19:50:39 +0800 Subject: [PATCH 165/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/help/storage/Backup.kt | 48 +++++++++---------- .../book/source/manage/BookSourceViewModel.kt | 5 +- .../legado/app/ui/config/BackupRestoreUi.kt | 22 ++++----- .../ui/replacerule/ReplaceRuleViewModel.kt | 5 +- .../rss/source/manage/RssSourceViewModel.kt | 5 +- 5 files changed, 38 insertions(+), 47 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/storage/Backup.kt b/app/src/main/java/io/legado/app/help/storage/Backup.kt index 32bc2b765..60d86d6a3 100644 --- a/app/src/main/java/io/legado/app/help/storage/Backup.kt +++ b/app/src/main/java/io/legado/app/help/storage/Backup.kt @@ -21,14 +21,6 @@ object Backup { FileUtils.getDirFile(App.INSTANCE.filesDir, "backup").absolutePath } - val legadoPath by lazy { - FileUtils.getSdCardPath() + File.separator + "YueDu3.0" - } - - val exportPath by lazy { - legadoPath + File.separator + "Export" - } - val backupFileNames by lazy { arrayOf( "bookshelf.json", "bookGroup.json", "bookSource.json", "rssSource.json", @@ -42,16 +34,13 @@ object Backup { return } Coroutine.async { - val backupPath = context.getPrefString(PreferKey.backupPath) - if (backupPath.isNullOrEmpty()) { - backup(context) - } else { - backup(context, backupPath) + context.getPrefString(PreferKey.backupPath)?.let { + backup(context, it, true) } } } - suspend fun backup(context: Context, path: String = legadoPath) { + suspend fun backup(context: Context, path: String, isAuto: Boolean = false) { context.putPrefLong(PreferKey.lastBackup, System.currentTimeMillis()) withContext(IO) { synchronized(this@Backup) { @@ -81,9 +70,9 @@ object Backup { } WebDavHelp.backUpWebDav(backupPath) if (path.isContentPath()) { - copyBackup(context, Uri.parse(path)) + copyBackup(context, Uri.parse(path), isAuto) } else { - copyBackup(File(path)) + copyBackup(File(path), isAuto) } } } @@ -97,28 +86,39 @@ object Backup { } @Throws(java.lang.Exception::class) - private fun copyBackup(context: Context, uri: Uri) { - + private fun copyBackup(context: Context, uri: Uri, isAuto: Boolean) { DocumentFile.fromTreeUri(context, uri)?.let { treeDoc -> for (fileName in backupFileNames) { val file = File(backupPath + File.separator + fileName) if (file.exists()) { - treeDoc.findFile(fileName)?.delete() - treeDoc.createFile("", fileName) - ?.writeBytes(context, file.readBytes()) + if (isAuto) { + treeDoc.findFile("auto")?.findFile(fileName)?.delete() + DocumentUtils.createFileIfNotExist( + treeDoc, + fileName, + subDirs = *arrayOf("auto") + )?.writeBytes(context, file.readBytes()) + } else { + treeDoc.findFile(fileName)?.delete() + treeDoc.createFile("", fileName) + ?.writeBytes(context, file.readBytes()) + } } } } } @Throws(java.lang.Exception::class) - private fun copyBackup(rootFile: File) { + private fun copyBackup(rootFile: File, isAuto: Boolean) { for (fileName in backupFileNames) { val file = File(backupPath + File.separator + fileName) if (file.exists()) { file.copyTo( - FileUtils.createFileIfNotExist(rootFile, fileName), - true + if (isAuto) { + FileUtils.createFileIfNotExist(rootFile, fileName, "auto") + } else { + FileUtils.createFileIfNotExist(rootFile, fileName) + }, true ) } } diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt index d44efd3ad..c84497536 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt @@ -8,7 +8,6 @@ import io.legado.app.App import io.legado.app.base.BaseViewModel import io.legado.app.data.entities.BookSource import io.legado.app.help.http.HttpHelper -import io.legado.app.help.storage.Backup import io.legado.app.help.storage.OldRule import io.legado.app.help.storage.Restore.jsonPath import io.legado.app.utils.* @@ -96,7 +95,7 @@ class BookSourceViewModel(application: Application) : BaseViewModel(application) FileUtils.createFileIfNotExist(file, "exportBookSource.json") .writeText(json) }.onSuccess { - context.toast("成功导出至\n${Backup.exportPath}") + context.toast("成功导出至\n${file.absolutePath}") }.onError { context.toast("导出失败\n${it.localizedMessage}") } @@ -109,7 +108,7 @@ class BookSourceViewModel(application: Application) : BaseViewModel(application) doc.createFile("", "exportBookSource.json") ?.writeText(context, json) }.onSuccess { - context.toast("成功导出至\n${Backup.exportPath}") + context.toast("成功导出至\n${doc.uri.path}") }.onError { context.toast("导出失败\n${it.localizedMessage}") } diff --git a/app/src/main/java/io/legado/app/ui/config/BackupRestoreUi.kt b/app/src/main/java/io/legado/app/ui/config/BackupRestoreUi.kt index 409638a4c..c849ae1de 100644 --- a/app/src/main/java/io/legado/app/ui/config/BackupRestoreUi.kt +++ b/app/src/main/java/io/legado/app/ui/config/BackupRestoreUi.kt @@ -48,30 +48,24 @@ object BackupRestoreUi { selectBackupFolder(fragment, backupSelectRequestCode) } } else { - backupUsePermission(fragment, requestCode = backupSelectRequestCode) + backupUsePermission(fragment, backupPath) } } } private fun backupUsePermission( fragment: Fragment, - path: String = Backup.legadoPath, - requestCode: Int = selectFolderRequestCode + path: String ) { PermissionsCompat.Builder(fragment) .addPermissions(*Permissions.Group.STORAGE) .rationale(R.string.tip_perm_request_storage) .onGranted { - when (requestCode) { - selectFolderRequestCode -> AppConfig.backupPath = Backup.legadoPath - else -> { - Coroutine.async { - AppConfig.backupPath = path - Backup.backup(fragment.requireContext(), path) - }.onSuccess { - fragment.toast(R.string.backup_success) - } - } + Coroutine.async { + AppConfig.backupPath = path + Backup.backup(fragment.requireContext(), path) + }.onSuccess { + fragment.toast(R.string.backup_success) } } .request() @@ -107,7 +101,7 @@ object BackupRestoreUi { } } - private fun restoreUsePermission(fragment: Fragment, path: String = Backup.legadoPath) { + private fun restoreUsePermission(fragment: Fragment, path: String) { PermissionsCompat.Builder(fragment) .addPermissions(*Permissions.Group.STORAGE) .rationale(R.string.tip_perm_request_storage) diff --git a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt index a63d7ea38..7187c6b88 100644 --- a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt @@ -8,7 +8,6 @@ import io.legado.app.R import io.legado.app.base.BaseViewModel import io.legado.app.data.entities.ReplaceRule import io.legado.app.help.http.HttpHelper -import io.legado.app.help.storage.Backup import io.legado.app.help.storage.ImportOldData import io.legado.app.utils.* import org.jetbrains.anko.toast @@ -93,7 +92,7 @@ class ReplaceRuleViewModel(application: Application) : BaseViewModel(application FileUtils.createFileIfNotExist(file, "exportReplaceRule.json") .writeText(json) }.onSuccess { - context.toast("成功导出至\n${Backup.exportPath}") + context.toast("成功导出至\n${file.absolutePath}") }.onError { context.toast("导出失败\n${it.localizedMessage}") } @@ -106,7 +105,7 @@ class ReplaceRuleViewModel(application: Application) : BaseViewModel(application doc.createFile("", "exportReplaceRule.json") ?.writeText(context, json) }.onSuccess { - context.toast("成功导出至\n${Backup.exportPath}") + context.toast("成功导出至\n${doc.uri.path}") }.onError { context.toast("导出失败\n${it.localizedMessage}") } diff --git a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceViewModel.kt index 82bad9584..300d7468c 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceViewModel.kt @@ -9,7 +9,6 @@ import io.legado.app.R import io.legado.app.base.BaseViewModel import io.legado.app.data.entities.RssSource import io.legado.app.help.http.HttpHelper -import io.legado.app.help.storage.Backup import io.legado.app.help.storage.Restore.jsonPath import io.legado.app.utils.* import org.jetbrains.anko.toast @@ -74,7 +73,7 @@ class RssSourceViewModel(application: Application) : BaseViewModel(application) FileUtils.createFileIfNotExist(file, "exportRssSource.json") .writeText(json) }.onSuccess { - context.toast("成功导出至\n${Backup.exportPath}") + context.toast("成功导出至\n${file.absolutePath}") }.onError { context.toast("导出失败\n${it.localizedMessage}") } @@ -87,7 +86,7 @@ class RssSourceViewModel(application: Application) : BaseViewModel(application) doc.createFile("", "exportRssSource.json") ?.writeText(context, json) }.onSuccess { - context.toast("成功导出至\n${Backup.exportPath}") + context.toast("成功导出至\n${doc.uri.path}") }.onError { context.toast("导出失败\n${it.localizedMessage}") } From 19ce729b2f5a606f95a8d4acdbb8faf3668786ab Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 20 Mar 2020 20:00:03 +0800 Subject: [PATCH 166/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index cb38140fe..cff4f10ba 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -3,6 +3,9 @@ * 请关注[开源阅读]()支持我,同时关注合作公众号[小说拾遗](),阅读公众号小编。 * 弄了个企业公众号[开源阅读](),后面弄好后会把原来的[开源阅读软件]()迁移过来 +**2020/03/20** +* 自动备份文件和手动备份文件分开存储 + **2020/03/19** * 美化界面我的 by yangyxd * 优化搜索 From 8297cdb6d41a7df9b8da0ff1211632a1abf9d7e8 Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 20 Mar 2020 20:41:03 +0800 Subject: [PATCH 167/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index cff4f10ba..7da858d27 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -4,7 +4,7 @@ * 弄了个企业公众号[开源阅读](),后面弄好后会把原来的[开源阅读软件]()迁移过来 **2020/03/20** -* 自动备份文件和手动备份文件分开存储 +* 自动备份文件和手动备份文件分开 **2020/03/19** * 美化界面我的 by yangyxd From bc0a3abf56197ed1414e19f239971225cc745bb2 Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 20 Mar 2020 20:58:12 +0800 Subject: [PATCH 168/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f2d9e96cf..7dadb803b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -136,12 +136,12 @@ dependencies { implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" //room - def room_version = '2.2.4' + def room_version = '2.2.5' implementation "androidx.room:room-runtime:$room_version" kapt "androidx.room:room-compiler:$room_version" //paging - implementation 'androidx.paging:paging-runtime:2.1.1' + implementation 'androidx.paging:paging-runtime:2.1.2' //anko def anko_version = '0.10.8' From c06be92a26050295ef48d63a23bbfcb6220fd98d Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 20 Mar 2020 21:20:55 +0800 Subject: [PATCH 169/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/data/entities/RssStar.kt | 14 ++++++++++++- .../legado/app/ui/rss/read/ReadRssActivity.kt | 2 +- .../app/ui/rss/read/ReadRssViewModel.kt | 20 +++++++++---------- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/io/legado/app/data/entities/RssStar.kt b/app/src/main/java/io/legado/app/data/entities/RssStar.kt index 5199b586d..1d0c266f8 100644 --- a/app/src/main/java/io/legado/app/data/entities/RssStar.kt +++ b/app/src/main/java/io/legado/app/data/entities/RssStar.kt @@ -16,4 +16,16 @@ data class RssStar( var description: String? = null, var content: String? = null, var image: String? = null -) \ No newline at end of file +) { + fun toRssArticle(): RssArticle { + return RssArticle( + origin = origin, + title = title, + link = link, + pubDate = pubDate, + description = description, + content = content, + image = image + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt index 9aa30235b..73c55961b 100644 --- a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt @@ -193,7 +193,7 @@ class ReadRssActivity : VMBaseActivity(R.layout.activity_rss_r } override fun upStarMenu() { - if (viewModel.star) { + if (viewModel.rssStar != null) { starMenuItem?.setIcon(R.drawable.ic_star) starMenuItem?.setTitle(R.string.in_favorites) } else { diff --git a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt index fd721e09b..cf8cafeef 100644 --- a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt @@ -15,6 +15,7 @@ import io.legado.app.base.BaseViewModel import io.legado.app.constant.AppConst import io.legado.app.data.entities.RssArticle import io.legado.app.data.entities.RssSource +import io.legado.app.data.entities.RssStar import io.legado.app.help.http.HttpHelper import io.legado.app.model.Rss import io.legado.app.model.analyzeRule.AnalyzeUrl @@ -34,7 +35,7 @@ class ReadRssViewModel(application: Application) : BaseViewModel(application), var rssArticle: RssArticle? = null val contentLiveData = MutableLiveData() val urlLiveData = MutableLiveData() - var star = false + var rssStar: RssStar? = null var textToSpeech: TextToSpeech? = null private var ttsInitFinish = false private var ttsTextList = arrayListOf() @@ -45,8 +46,8 @@ class ReadRssViewModel(application: Application) : BaseViewModel(application), val link = intent.getStringExtra("link") if (origin != null && link != null) { rssSource = App.db.rssSourceDao().getByKey(origin) - star = App.db.rssStarDao().get(origin, link) != null - rssArticle = App.db.rssArticleDao().get(origin, link) + rssStar = App.db.rssStarDao().get(origin, link) + rssArticle = rssStar?.toRssArticle() ?: App.db.rssArticleDao().get(origin, link) rssArticle?.let { rssArticle -> if (!rssArticle.description.isNullOrBlank()) { contentLiveData.postValue(rssArticle.description) @@ -86,13 +87,12 @@ class ReadRssViewModel(application: Application) : BaseViewModel(application), fun favorite() { execute { - rssArticle?.let { - if (star) { - App.db.rssStarDao().delete(it.origin, it.link) - } else { - App.db.rssStarDao().insert(it.toStar()) - } - star = !star + rssStar?.let { + App.db.rssStarDao().delete(it.origin, it.link) + rssStar = null + } ?: rssArticle?.toStar()?.let { + App.db.rssStarDao().insert(it) + rssStar = it } }.onSuccess { callBack?.upStarMenu() From a35708f7c6132c1201a8a8103528cec00b678fbe Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 20 Mar 2020 21:21:44 +0800 Subject: [PATCH 170/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 7da858d27..eb04b0e7a 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -5,6 +5,7 @@ **2020/03/20** * 自动备份文件和手动备份文件分开 +* 修复一些rss收藏取消不了的bug **2020/03/19** * 美化界面我的 by yangyxd From 5bcba9e1cf978b69d41e9683475bfb688d489ed3 Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 20 Mar 2020 21:27:19 +0800 Subject: [PATCH 171/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/model/webBook/BookContent.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/model/webBook/BookContent.kt b/app/src/main/java/io/legado/app/model/webBook/BookContent.kt index 568615aa1..873b6b3a9 100644 --- a/app/src/main/java/io/legado/app/model/webBook/BookContent.kt +++ b/app/src/main/java/io/legado/app/model/webBook/BookContent.kt @@ -2,6 +2,7 @@ package io.legado.app.model.webBook import io.legado.app.App import io.legado.app.R +import io.legado.app.constant.BookType import io.legado.app.data.entities.Book import io.legado.app.data.entities.BookChapter import io.legado.app.data.entities.BookSource @@ -39,7 +40,12 @@ object BookContent { var contentData = analyzeContent( book, baseUrl, body, contentRule, bookChapter, bookSource ) - content.append(contentData.content.replace(bookChapter.title, "")).append("\n") + if (bookSource.bookSourceType == BookType.default) { + content.append(contentData.content.replace(bookChapter.title, "")).append("\n") + } else { + content.append(contentData.content).append("\n") + } + if (contentData.nextUrl.size == 1) { var nextUrl = contentData.nextUrl[0] val nextChapterUrl = if (!nextChapterUrlF.isNullOrEmpty()) From 325bf9adb3646d7b453d34c7315d563441b675d7 Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 20 Mar 2020 22:09:45 +0800 Subject: [PATCH 172/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/model/Rss.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/model/Rss.kt b/app/src/main/java/io/legado/app/model/Rss.kt index b3622b40b..b4a4b5153 100644 --- a/app/src/main/java/io/legado/app/model/Rss.kt +++ b/app/src/main/java/io/legado/app/model/Rss.kt @@ -21,7 +21,10 @@ object Rss { context: CoroutineContext = Dispatchers.IO ): Coroutine { return Coroutine.async(scope, context) { - val analyzeUrl = AnalyzeUrl(pageUrl ?: rssSource.sourceUrl) + val analyzeUrl = AnalyzeUrl( + pageUrl ?: rssSource.sourceUrl, + headerMapF = rssSource.getHeaderMap() + ) val body = analyzeUrl.getResponseAwait(rssSource.sourceUrl).body RssParserByRule.parseXML(body, rssSource) } From b02b7ffa0e6682bfa916d89848c5b180b20cc742 Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 20 Mar 2020 22:17:51 +0800 Subject: [PATCH 173/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/model/Debug.kt | 6 +++--- app/src/main/java/io/legado/app/model/Rss.kt | 7 +++++-- .../io/legado/app/ui/rss/read/ReadRssViewModel.kt | 13 ++++++++++--- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/Debug.kt b/app/src/main/java/io/legado/app/model/Debug.kt index 2acd8ac9e..51ae12afd 100644 --- a/app/src/main/java/io/legado/app/model/Debug.kt +++ b/app/src/main/java/io/legado/app/model/Debug.kt @@ -67,7 +67,7 @@ object Debug { if (ruleContent.isNullOrEmpty()) { log(debugSource, "⇒内容规则为空,默认获取整个网页", state = 1000) } else { - rssContentDebug(it.articles[0], ruleContent) + rssContentDebug(it.articles[0], ruleContent, rssSource) } } else { log(debugSource, "⇒存在描述规则,不解析内容页") @@ -80,9 +80,9 @@ object Debug { } } - private fun rssContentDebug(rssArticle: RssArticle, ruleContent: String) { + private fun rssContentDebug(rssArticle: RssArticle, ruleContent: String, rssSource: RssSource) { log(debugSource, "︾开始解析内容页") - Rss.getContent(rssArticle, ruleContent) + Rss.getContent(rssArticle, ruleContent, rssSource) .onSuccess { log(debugSource, it) log(debugSource, "︽内容页解析完成", state = 1000) diff --git a/app/src/main/java/io/legado/app/model/Rss.kt b/app/src/main/java/io/legado/app/model/Rss.kt index b4a4b5153..24dadade0 100644 --- a/app/src/main/java/io/legado/app/model/Rss.kt +++ b/app/src/main/java/io/legado/app/model/Rss.kt @@ -33,12 +33,15 @@ object Rss { fun getContent( rssArticle: RssArticle, ruleContent: String, + rssSource: RssSource?, scope: CoroutineScope = Coroutine.DEFAULT, context: CoroutineContext = Dispatchers.IO ): Coroutine { return Coroutine.async(scope, context) { - val body = AnalyzeUrl(rssArticle.link, baseUrl = rssArticle.origin) - .getResponseAwait(rssArticle.origin) + val body = AnalyzeUrl( + rssArticle.link, baseUrl = rssArticle.origin, + headerMapF = rssSource?.getHeaderMap() + ).getResponseAwait(rssArticle.origin) .body val analyzeRule = AnalyzeRule() analyzeRule.setContent( diff --git a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt index cf8cafeef..f5b84642f 100644 --- a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt @@ -23,6 +23,7 @@ import io.legado.app.utils.DocumentUtils import io.legado.app.utils.FileUtils import io.legado.app.utils.isContentPath import io.legado.app.utils.writeBytes +import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.launch import java.io.File import java.util.* @@ -79,9 +80,15 @@ class ReadRssViewModel(application: Application) : BaseViewModel(application), } private fun loadContent(rssArticle: RssArticle, ruleContent: String) { - Rss.getContent(rssArticle, ruleContent, this) - .onSuccess { - contentLiveData.postValue(it) + Rss.getContent(rssArticle, ruleContent, rssSource, this) + .onSuccess(IO) { body -> + rssArticle.description = body + App.db.rssArticleDao().insert(rssArticle) + rssStar?.let { + it.description = body + App.db.rssStarDao().insert(it) + } + contentLiveData.postValue(body) } } From 806caa71439d3a00ab04714a2779f3db56ea2747 Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 20 Mar 2020 22:19:00 +0800 Subject: [PATCH 174/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index eb04b0e7a..14e08cf02 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -6,6 +6,7 @@ **2020/03/20** * 自动备份文件和手动备份文件分开 * 修复一些rss收藏取消不了的bug +* 修复rss请求头无效bug **2020/03/19** * 美化界面我的 by yangyxd From 5660af2da59c81f5b8c0a62498e2fe231821b68e Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 21 Mar 2020 17:39:21 +0800 Subject: [PATCH 175/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/book/info/BookInfoActivity.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt index 4ea22d61c..e0b6f275a 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt @@ -230,6 +230,9 @@ class BookInfoActivity : tv_author.onClick { startActivity(Pair("key", viewModel.bookData.value?.author)) } + tv_name.onClick { + startActivity(Pair("key", viewModel.bookData.value?.name)) + } } @SuppressLint("InflateParams") From 5778ae41d726832f6ca4e9bbd21408d907059085 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 21 Mar 2020 17:40:31 +0800 Subject: [PATCH 176/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 14e08cf02..d767bdc71 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -3,6 +3,9 @@ * 请关注[开源阅读]()支持我,同时关注合作公众号[小说拾遗](),阅读公众号小编。 * 弄了个企业公众号[开源阅读](),后面弄好后会把原来的[开源阅读软件]()迁移过来 +**2020/03/21** +* 详情页点击书名搜索 + **2020/03/20** * 自动备份文件和手动备份文件分开 * 修复一些rss收藏取消不了的bug From 7004b47898e5533b4f9c887bd06241f24b4af281 Mon Sep 17 00:00:00 2001 From: wqfantexi Date: Sat, 21 Mar 2020 20:31:03 +0800 Subject: [PATCH 177/350] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=85=B3=E8=81=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 12 +++- .../book/source/manage/BookSourceActivity.kt | 10 +++- .../legado/app/ui/config/FileAssociation.kt | 37 ++++++++++++ .../app/ui/config/FileAssociationViewModel.kt | 60 +++++++++++++++++++ .../app/ui/replacerule/ReplaceRuleActivity.kt | 11 +++- .../ui/replacerule/ReplaceRuleViewModel.kt | 17 +++++- .../ui/rss/source/manage/RssSourceActivity.kt | 11 +++- .../res/layout/activity_file_association.xml | 9 +++ 8 files changed, 159 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/io/legado/app/ui/config/FileAssociation.kt create mode 100644 app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt create mode 100644 app/src/main/res/layout/activity_file_association.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9d778fbb3..71fa00c62 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -244,7 +244,17 @@ - + + + + + + + + + + + diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt index 385088640..d3cb63af3 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt @@ -104,8 +104,14 @@ class BookSourceActivity : VMBaseActivity(R.layout.activity when (it.path) { "/importonline" -> it.getQueryParameter("src")?.let { url -> Snackbar.make(title_bar, R.string.importing, Snackbar.LENGTH_INDEFINITE).show() - viewModel.importSource(url) { msg -> - title_bar.snackbar(msg) + if (url.startsWith("http", false)){ + viewModel.importSource(url) { msg -> + title_bar.snackbar(msg) + } + } + else{ + viewModel.importSourceFromFilePath(url){msg -> + title_bar.snackbar(msg)} } } else -> { diff --git a/app/src/main/java/io/legado/app/ui/config/FileAssociation.kt b/app/src/main/java/io/legado/app/ui/config/FileAssociation.kt new file mode 100644 index 000000000..0b2a3c749 --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/config/FileAssociation.kt @@ -0,0 +1,37 @@ +package io.legado.app.ui.config + +import android.content.Intent +import android.os.Bundle +import io.legado.app.R +import io.legado.app.base.VMBaseActivity +import io.legado.app.ui.main.MainActivity +import io.legado.app.utils.getViewModel + + +class FileAssociation : VMBaseActivity(R.layout.activity_file_association) { + override val viewModel: FileAssociationViewModel + get() = getViewModel(FileAssociationViewModel::class.java) + + override fun onActivityCreated(savedInstanceState: Bundle?) { + if (null != intent.data){ + val newIntent = viewModel.dispatchIndent(intent.data!!) + if (newIntent != null){ + this.startActivityForResult(newIntent, 100) + }else{ + gotoMainActivity() + } + } + } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + + //返回后直接跳转到主页面 + gotoMainActivity() + } + + private fun gotoMainActivity(){ + val mIntent = Intent() + mIntent.setClass(this, MainActivity::class.java) + startActivity(mIntent) + } +} diff --git a/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt b/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt new file mode 100644 index 000000000..4a09b4325 --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt @@ -0,0 +1,60 @@ +package io.legado.app.ui.config + +import android.app.Application +import android.content.Intent +import android.net.Uri +import android.text.TextUtils +import io.legado.app.base.BaseViewModel +import io.legado.app.model.localBook.LocalBook +import io.legado.app.utils.isJsonArray +import io.legado.app.utils.isJsonObject +import org.jetbrains.anko.toast +import java.io.File + +class FileAssociationViewModel(application: Application) : BaseViewModel(application) { + fun dispatchIndent(uri:Uri):Intent?{ + var url = ""; + //如果是普通的url,需要根据返回的内容判断是什么 + if(uri.scheme == "file" || uri.scheme == "content"){ + val file = File(uri.path.toString()) + var scheme = "" + if (file.exists()) { + val content = file.readText() + if (content.isJsonObject() || content.isJsonArray()){ + //暂时根据文件内容判断属于什么 + if (content.contains("bookSourceUrl")){ + scheme = "booksource" + }else if (content.contains("sourceUrl")){ + scheme = "rsssource" + }else if (content.contains("pattern")){ + scheme = "replace" + } + } + if (TextUtils.isEmpty(scheme)){ + execute{ + LocalBook.importFile(uri.path.toString()) + toast("添加本地文件成功${uri.path}") + } + + return null + } + } + else{ + toast("文件不存在") + return null + } + + url = "yuedu://${scheme}/importonline?src=${uri.path}" + } + else if (uri.scheme == "yuedu"){ + url = uri.toString() + } + else{ + url = "yuedu://booksource/importonline?src=${uri.path}" + } + val data = Uri.parse(url) + val newIndent = Intent(Intent.ACTION_VIEW) + newIndent.data = data; + return newIndent + } +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleActivity.kt b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleActivity.kt index fd0a591b6..1f9057e35 100644 --- a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleActivity.kt +++ b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleActivity.kt @@ -81,8 +81,15 @@ class ReplaceRuleActivity : VMBaseActivity(R.layout.activi when (it.path) { "/importonline" -> it.getQueryParameter("src")?.let { url -> Snackbar.make(title_bar, R.string.importing, Snackbar.LENGTH_INDEFINITE).show() - viewModel.importSource(url) { msg -> - title_bar.snackbar(msg) + if (url.startsWith("http", false)){ + viewModel.importSource(url) { msg -> + title_bar.snackbar(msg) + } + } + else{ + viewModel.importSourceFromFilePath(url) { msg -> + title_bar.snackbar(msg) + } } } else -> { diff --git a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt index a63d7ea38..8f0e848f0 100644 --- a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt @@ -11,11 +11,26 @@ import io.legado.app.help.http.HttpHelper import io.legado.app.help.storage.Backup import io.legado.app.help.storage.ImportOldData import io.legado.app.utils.* +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext import org.jetbrains.anko.toast import java.io.File class ReplaceRuleViewModel(application: Application) : BaseViewModel(application) { - + fun importSourceFromFilePath(path: String, finally: (msg: String) -> Unit) { + execute { + val file = File(path) + if (file.exists()) { + importSource(file.readText(), finally) + } else { + withContext(Dispatchers.Main) { + finally("打开文件出错") + } + } + }.onError { + finally(it.localizedMessage ?: "打开文件出错") + } + } fun importSource(text: String, showMsg: (msg: String) -> Unit) { execute { if (text.isAbsUrl()) { diff --git a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt index fb54d0cae..1f7503e47 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt @@ -117,8 +117,15 @@ class RssSourceActivity : VMBaseActivity(R.layout.activity_r when (it.path) { "/importonline" -> it.getQueryParameter("src")?.let { url -> Snackbar.make(title_bar, R.string.importing, Snackbar.LENGTH_INDEFINITE).show() - viewModel.importSource(url) { msg -> - title_bar.snackbar(msg) + if (url.startsWith("http", false)){ + viewModel.importSource(url) { msg -> + title_bar.snackbar(msg) + } + } + else{ + viewModel.importSourceFromFilePath(url) { msg -> + title_bar.snackbar(msg) + } } } else -> { diff --git a/app/src/main/res/layout/activity_file_association.xml b/app/src/main/res/layout/activity_file_association.xml new file mode 100644 index 000000000..5c147517b --- /dev/null +++ b/app/src/main/res/layout/activity_file_association.xml @@ -0,0 +1,9 @@ + + + + From a98ed055f63e9d683acbea1370f62e1f073b3049 Mon Sep 17 00:00:00 2001 From: wqfantexi Date: Sat, 21 Mar 2020 21:16:28 +0800 Subject: [PATCH 178/350] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=AD=A6=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/ui/config/FileAssociationViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt b/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt index 4a09b4325..810c885f6 100644 --- a/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt @@ -13,7 +13,7 @@ import java.io.File class FileAssociationViewModel(application: Application) : BaseViewModel(application) { fun dispatchIndent(uri:Uri):Intent?{ - var url = ""; + val url:String //如果是普通的url,需要根据返回的内容判断是什么 if(uri.scheme == "file" || uri.scheme == "content"){ val file = File(uri.path.toString()) From 9a0d5f3975a4618b954ed6ce1658ef9f39a8e2d1 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 22 Mar 2020 10:15:04 +0800 Subject: [PATCH 179/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index d767bdc71..37586e6fa 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -3,6 +3,9 @@ * 请关注[开源阅读]()支持我,同时关注合作公众号[小说拾遗](),阅读公众号小编。 * 弄了个企业公众号[开源阅读](),后面弄好后会把原来的[开源阅读软件]()迁移过来 +**2020/03/21** +* 添加文件关联 by wqfantexi + **2020/03/21** * 详情页点击书名搜索 From 7f5d9435ca372931d7a2c348e8d4dc62c3eddb80 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 22 Mar 2020 10:16:06 +0800 Subject: [PATCH 180/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/ui/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/README.md b/app/src/main/java/io/legado/app/ui/README.md index b408eb6b9..ef44bed69 100644 --- a/app/src/main/java/io/legado/app/ui/README.md +++ b/app/src/main/java/io/legado/app/ui/README.md @@ -6,7 +6,7 @@ * book\info 书籍信息查看 * book\read 书籍阅读界面 * book\search 搜索书籍界面 -* book\source 搜索书源界面 +* book\source 书源界面 * book\changeCover 封面换源界面 * book\changeSource 换源界面 * book\chapterList 目录界面 From 77c3263ddbec38a2d2a7bd2e5a4585bd390e8056 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 22 Mar 2020 10:19:58 +0800 Subject: [PATCH 181/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/ui/config/FileAssociation.kt | 14 ++++++++------ .../app/ui/config/FileAssociationViewModel.kt | 19 +++++++++++-------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/config/FileAssociation.kt b/app/src/main/java/io/legado/app/ui/config/FileAssociation.kt index 0b2a3c749..9e459a226 100644 --- a/app/src/main/java/io/legado/app/ui/config/FileAssociation.kt +++ b/app/src/main/java/io/legado/app/ui/config/FileAssociation.kt @@ -8,20 +8,22 @@ import io.legado.app.ui.main.MainActivity import io.legado.app.utils.getViewModel -class FileAssociation : VMBaseActivity(R.layout.activity_file_association) { +class FileAssociation : + VMBaseActivity(R.layout.activity_file_association) { override val viewModel: FileAssociationViewModel get() = getViewModel(FileAssociationViewModel::class.java) override fun onActivityCreated(savedInstanceState: Bundle?) { - if (null != intent.data){ - val newIntent = viewModel.dispatchIndent(intent.data!!) - if (newIntent != null){ + intent.data?.let { data -> + val newIntent = viewModel.dispatchIndent(data) + if (newIntent != null) { this.startActivityForResult(newIntent, 100) - }else{ + } else { gotoMainActivity() } } } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) @@ -29,7 +31,7 @@ class FileAssociation : VMBaseActivity(R.layout.activi gotoMainActivity() } - private fun gotoMainActivity(){ + private fun gotoMainActivity() { val mIntent = Intent() mIntent.setClass(this, MainActivity::class.java) startActivity(mIntent) diff --git a/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt b/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt index 810c885f6..11705c537 100644 --- a/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt @@ -8,7 +8,6 @@ import io.legado.app.base.BaseViewModel import io.legado.app.model.localBook.LocalBook import io.legado.app.utils.isJsonArray import io.legado.app.utils.isJsonObject -import org.jetbrains.anko.toast import java.io.File class FileAssociationViewModel(application: Application) : BaseViewModel(application) { @@ -22,12 +21,16 @@ class FileAssociationViewModel(application: Application) : BaseViewModel(applica val content = file.readText() if (content.isJsonObject() || content.isJsonArray()){ //暂时根据文件内容判断属于什么 - if (content.contains("bookSourceUrl")){ - scheme = "booksource" - }else if (content.contains("sourceUrl")){ - scheme = "rsssource" - }else if (content.contains("pattern")){ - scheme = "replace" + when { + content.contains("bookSourceUrl") -> { + scheme = "booksource" + } + content.contains("sourceUrl") -> { + scheme = "rsssource" + } + content.contains("pattern") -> { + scheme = "replace" + } } } if (TextUtils.isEmpty(scheme)){ @@ -54,7 +57,7 @@ class FileAssociationViewModel(application: Application) : BaseViewModel(applica } val data = Uri.parse(url) val newIndent = Intent(Intent.ACTION_VIEW) - newIndent.data = data; + newIndent.data = data return newIndent } } \ No newline at end of file From 00c757582f7051683e9d825243f722df5cd5e3c3 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 22 Mar 2020 10:40:44 +0800 Subject: [PATCH 182/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/config/FileAssociationViewModel.kt | 76 +++++++++---------- 1 file changed, 36 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt b/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt index 11705c537..bed99c025 100644 --- a/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt @@ -11,53 +11,49 @@ import io.legado.app.utils.isJsonObject import java.io.File class FileAssociationViewModel(application: Application) : BaseViewModel(application) { - fun dispatchIndent(uri:Uri):Intent?{ - val url:String - //如果是普通的url,需要根据返回的内容判断是什么 - if(uri.scheme == "file" || uri.scheme == "content"){ - val file = File(uri.path.toString()) - var scheme = "" - if (file.exists()) { - val content = file.readText() - if (content.isJsonObject() || content.isJsonArray()){ - //暂时根据文件内容判断属于什么 - when { - content.contains("bookSourceUrl") -> { - scheme = "booksource" - } - content.contains("sourceUrl") -> { - scheme = "rsssource" - } - content.contains("pattern") -> { - scheme = "replace" - } + fun dispatchIndent(uri: Uri): Intent? { + val url: String + //如果是普通的url,需要根据返回的内容判断是什么 + if (uri.scheme == "file" || uri.scheme == "content") { + val file = File(uri.path.toString()) + var scheme = "" + if (file.exists()) { + val content = file.readText() + if (content.isJsonObject() || content.isJsonArray()) { + //暂时根据文件内容判断属于什么 + when { + content.contains("bookSourceUrl") -> { + scheme = "booksource" } - } - if (TextUtils.isEmpty(scheme)){ - execute{ - LocalBook.importFile(uri.path.toString()) - toast("添加本地文件成功${uri.path}") + content.contains("sourceUrl") -> { + scheme = "rsssource" + } + content.contains("pattern") -> { + scheme = "replace" } - - return null } } - else{ - toast("文件不存在") + if (TextUtils.isEmpty(scheme)) { + execute { + LocalBook.importFile(uri.path.toString()) + toast("添加本地文件成功${uri.path}") + } return null } - - url = "yuedu://${scheme}/importonline?src=${uri.path}" - } - else if (uri.scheme == "yuedu"){ - url = uri.toString() + } else { + toast("文件不存在") + return null } - else{ - url = "yuedu://booksource/importonline?src=${uri.path}" - } - val data = Uri.parse(url) - val newIndent = Intent(Intent.ACTION_VIEW) + + url = "yuedu://${scheme}/importonline?src=${uri.path}" + } else if (uri.scheme == "yuedu") { + url = uri.toString() + } else { + url = "yuedu://booksource/importonline?src=${uri.path}" + } + val data = Uri.parse(url) + val newIndent = Intent(Intent.ACTION_VIEW) newIndent.data = data - return newIndent + return newIndent } } \ No newline at end of file From 08f59704636d2bb0ecb1f07dcd1b8225b367912d Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 22 Mar 2020 10:56:45 +0800 Subject: [PATCH 183/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/config/FileAssociationViewModel.kt | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt b/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt index bed99c025..80db1af37 100644 --- a/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt @@ -4,10 +4,12 @@ import android.app.Application import android.content.Intent import android.net.Uri import android.text.TextUtils +import androidx.documentfile.provider.DocumentFile import io.legado.app.base.BaseViewModel import io.legado.app.model.localBook.LocalBook import io.legado.app.utils.isJsonArray import io.legado.app.utils.isJsonObject +import io.legado.app.utils.readText import java.io.File class FileAssociationViewModel(application: Application) : BaseViewModel(application) { @@ -15,10 +17,18 @@ class FileAssociationViewModel(application: Application) : BaseViewModel(applica val url: String //如果是普通的url,需要根据返回的内容判断是什么 if (uri.scheme == "file" || uri.scheme == "content") { - val file = File(uri.path.toString()) + val content = if (uri.scheme == "file") { + val file = File(uri.path.toString()) + if (file.exists()) { + file.readText() + } else { + null + } + } else { + DocumentFile.fromSingleUri(context, uri)?.readText(context) + } var scheme = "" - if (file.exists()) { - val content = file.readText() + if (content != null) { if (content.isJsonObject() || content.isJsonArray()) { //暂时根据文件内容判断属于什么 when { From df408c67115d79d666c4ddd38fbf2d0820dca332 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 22 Mar 2020 11:49:34 +0800 Subject: [PATCH 184/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 4 +++- .../config/{FileAssociation.kt => FileAssociationActivity.kt} | 2 +- app/src/main/res/layout/activity_file_association.xml | 3 +-- 3 files changed, 5 insertions(+), 4 deletions(-) rename app/src/main/java/io/legado/app/ui/config/{FileAssociation.kt => FileAssociationActivity.kt} (97%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a8ae915ff..cfb6793b8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -287,7 +287,9 @@ - + diff --git a/app/src/main/java/io/legado/app/ui/config/FileAssociation.kt b/app/src/main/java/io/legado/app/ui/config/FileAssociationActivity.kt similarity index 97% rename from app/src/main/java/io/legado/app/ui/config/FileAssociation.kt rename to app/src/main/java/io/legado/app/ui/config/FileAssociationActivity.kt index 9e459a226..80390c639 100644 --- a/app/src/main/java/io/legado/app/ui/config/FileAssociation.kt +++ b/app/src/main/java/io/legado/app/ui/config/FileAssociationActivity.kt @@ -8,7 +8,7 @@ import io.legado.app.ui.main.MainActivity import io.legado.app.utils.getViewModel -class FileAssociation : +class FileAssociationActivity : VMBaseActivity(R.layout.activity_file_association) { override val viewModel: FileAssociationViewModel get() = getViewModel(FileAssociationViewModel::class.java) diff --git a/app/src/main/res/layout/activity_file_association.xml b/app/src/main/res/layout/activity_file_association.xml index 5c147517b..2a7adee89 100644 --- a/app/src/main/res/layout/activity_file_association.xml +++ b/app/src/main/res/layout/activity_file_association.xml @@ -1,9 +1,8 @@ + tools:context="io.legado.app.ui.config.FileAssociationActivity"> From a43b730ed4b2a1684c2053c34f347ce7fb62c72f Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 22 Mar 2020 12:46:29 +0800 Subject: [PATCH 185/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/utils/EncodingDetect.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/app/src/main/java/io/legado/app/utils/EncodingDetect.java b/app/src/main/java/io/legado/app/utils/EncodingDetect.java index 29174b88e..b5bd4cf66 100644 --- a/app/src/main/java/io/legado/app/utils/EncodingDetect.java +++ b/app/src/main/java/io/legado/app/utils/EncodingDetect.java @@ -66,7 +66,7 @@ public class EncodingDetect { } public static String getEncode(@NonNull byte[] bytes) { - int len = bytes.length > 2000 ? 2000 : bytes.length; + int len = Math.min(bytes.length, 2000); byte[] cBytes = new byte[len]; System.arraycopy(bytes, 0, cBytes, 0, len); BytesEncodingDetect bytesEncodingDetect = new BytesEncodingDetect(); @@ -1010,14 +1010,8 @@ class BytesEncodingDetect extends Encoding { column = rawtext[i + 1] + 256; if (column < 0x9f) { adjust = 1; - if (column > 0x7f) { - column -= 0x20; - } else { - column -= 0x19; - } } else { adjust = 0; - column -= 0x7e; } if (row < 0xa0) { row = ((row - 0x70) << 1) - adjust; From 44183959c5f6132f4b287c339fae528f37ab57ba Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 22 Mar 2020 12:56:23 +0800 Subject: [PATCH 186/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values-night/colors.xml | 2 +- app/src/main/res/values/colors.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 8ac7aa66a..eb9189f7a 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -7,7 +7,7 @@ @color/md_grey_900 @color/md_grey_850 @color/md_grey_800 - #10303030 + #10ffffff #69000000 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 0fe64b7ca..91906845e 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -16,7 +16,7 @@ @color/md_grey_50 @color/md_grey_100 @color/md_grey_200 - @color/md_grey_50 + #10000000 #00000000 #10000000 From fd00bf2509d42d5d1f1667dc60bdb4e928e8a392 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 22 Mar 2020 13:11:41 +0800 Subject: [PATCH 187/350] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 37586e6fa..5e5d52454 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -269,14 +269,7 @@ - 调试正文页>>输入正文页URL,如:`--https://www.zhaishuyuan.com/chapter/30394/20940996` * 修改订阅中自动添加style的情景 - 订阅源的内容规则中存在` - ``` + 订阅源的内容规则中存在`