#(plugin id can be found at https://plugins.jetbrains.com)
-
-#Specify Qodana linter for analysis (Applied in CI/CD pipeline)
-linter: jetbrains/qodana-js:latest
diff --git a/static/components/ai_recongize_fruit/pictures/background.png b/static/components/ai_recongize_fruit/pictures/background.png
deleted file mode 100644
index 62fac0e..0000000
Binary files a/static/components/ai_recongize_fruit/pictures/background.png and /dev/null differ
diff --git a/static/components/ai_recongize_fruit/pictures/text_and_button.png b/static/components/ai_recongize_fruit/pictures/text_and_button.png
deleted file mode 100644
index 2b23935..0000000
Binary files a/static/components/ai_recongize_fruit/pictures/text_and_button.png and /dev/null differ
diff --git a/static/components/ai_recongize_hot/pictures/background.png b/static/components/ai_recongize_hot/pictures/background.png
deleted file mode 100644
index 7bdc672..0000000
Binary files a/static/components/ai_recongize_hot/pictures/background.png and /dev/null differ
diff --git a/static/components/ai_recongize_hot/pictures/text_and_button.png b/static/components/ai_recongize_hot/pictures/text_and_button.png
deleted file mode 100644
index 2b23935..0000000
Binary files a/static/components/ai_recongize_hot/pictures/text_and_button.png and /dev/null differ
diff --git a/static/components/ai_recongize_plan/pictures/background.png b/static/components/ai_recongize_plan/pictures/background.png
deleted file mode 100644
index 4f70b69..0000000
Binary files a/static/components/ai_recongize_plan/pictures/background.png and /dev/null differ
diff --git a/static/components/ai_recongize_plan/pictures/text_and_button.png b/static/components/ai_recongize_plan/pictures/text_and_button.png
deleted file mode 100644
index 2b23935..0000000
Binary files a/static/components/ai_recongize_plan/pictures/text_and_button.png and /dev/null differ
diff --git a/static/components/ai_recongize_recipe/pictures/background.png b/static/components/ai_recongize_recipe/pictures/background.png
deleted file mode 100644
index 9bce714..0000000
Binary files a/static/components/ai_recongize_recipe/pictures/background.png and /dev/null differ
diff --git a/static/components/ai_recongize_recipe/pictures/text_and_button.png b/static/components/ai_recongize_recipe/pictures/text_and_button.png
deleted file mode 100644
index 2b23935..0000000
Binary files a/static/components/ai_recongize_recipe/pictures/text_and_button.png and /dev/null differ
diff --git a/static/components/dictionary/pictures/background.png b/static/components/dictionary/pictures/background.png
deleted file mode 100644
index 2221835..0000000
Binary files a/static/components/dictionary/pictures/background.png and /dev/null differ
diff --git a/static/components/dictionary/pictures/button.png b/static/components/dictionary/pictures/button.png
deleted file mode 100644
index e32fc3a..0000000
Binary files a/static/components/dictionary/pictures/button.png and /dev/null differ
diff --git a/static/components/my_exercise_plan/pictures/background.png b/static/components/my_exercise_plan/pictures/background.png
deleted file mode 100644
index a7ecd16..0000000
Binary files a/static/components/my_exercise_plan/pictures/background.png and /dev/null differ
diff --git a/static/components/my_exercise_plan/pictures/text_and_button.png b/static/components/my_exercise_plan/pictures/text_and_button.png
deleted file mode 100644
index f91d122..0000000
Binary files a/static/components/my_exercise_plan/pictures/text_and_button.png and /dev/null differ
diff --git a/static/components/my_pop_up/close_icon.png b/static/components/my_pop_up/close_icon.png
deleted file mode 100644
index 8d03d76..0000000
Binary files a/static/components/my_pop_up/close_icon.png and /dev/null differ
diff --git a/static/components/my_pop_up/line.png b/static/components/my_pop_up/line.png
deleted file mode 100644
index 01a4832..0000000
Binary files a/static/components/my_pop_up/line.png and /dev/null differ
diff --git a/static/components/my_pop_up/plane.png b/static/components/my_pop_up/plane.png
deleted file mode 100644
index 73ea167..0000000
Binary files a/static/components/my_pop_up/plane.png and /dev/null differ
diff --git a/static/components/my_recipe_plan/pictures/background.png b/static/components/my_recipe_plan/pictures/background.png
deleted file mode 100644
index 4aef459..0000000
Binary files a/static/components/my_recipe_plan/pictures/background.png and /dev/null differ
diff --git a/static/components/my_recipe_plan/pictures/text_and_button.png b/static/components/my_recipe_plan/pictures/text_and_button.png
deleted file mode 100644
index f91d122..0000000
Binary files a/static/components/my_recipe_plan/pictures/text_and_button.png and /dev/null differ
diff --git a/static/components/read/pictures/background.png b/static/components/read/pictures/background.png
deleted file mode 100644
index 0d1ac0d..0000000
Binary files a/static/components/read/pictures/background.png and /dev/null differ
diff --git a/static/components/read/pictures/button.png b/static/components/read/pictures/button.png
deleted file mode 100644
index e32fc3a..0000000
Binary files a/static/components/read/pictures/button.png and /dev/null differ
diff --git a/static/components/swiper/community/background.png b/static/components/swiper/community/background.png
deleted file mode 100644
index 303b0db..0000000
Binary files a/static/components/swiper/community/background.png and /dev/null differ
diff --git a/static/components/swiper/community/button.png b/static/components/swiper/community/button.png
deleted file mode 100644
index 7edc8ea..0000000
Binary files a/static/components/swiper/community/button.png and /dev/null differ
diff --git a/static/components/swiper/exercise/background.png b/static/components/swiper/exercise/background.png
deleted file mode 100644
index d1c342b..0000000
Binary files a/static/components/swiper/exercise/background.png and /dev/null differ
diff --git a/static/components/swiper/exercise/button.png b/static/components/swiper/exercise/button.png
deleted file mode 100644
index 7edc8ea..0000000
Binary files a/static/components/swiper/exercise/button.png and /dev/null differ
diff --git a/static/components/swiper/puppy_chat/background.png b/static/components/swiper/puppy_chat/background.png
deleted file mode 100644
index 643e08b..0000000
Binary files a/static/components/swiper/puppy_chat/background.png and /dev/null differ
diff --git a/static/components/swiper/puppy_chat/button.png b/static/components/swiper/puppy_chat/button.png
deleted file mode 100644
index 7edc8ea..0000000
Binary files a/static/components/swiper/puppy_chat/button.png and /dev/null differ
diff --git a/static/components/swiper/read/background.png b/static/components/swiper/read/background.png
deleted file mode 100644
index a3a4348..0000000
Binary files a/static/components/swiper/read/background.png and /dev/null differ
diff --git a/static/components/swiper/read/button.png b/static/components/swiper/read/button.png
deleted file mode 100644
index 7edc8ea..0000000
Binary files a/static/components/swiper/read/button.png and /dev/null differ
diff --git a/static/components/tarbar/pictures/assistant.png b/static/components/tarbar/pictures/assistant.png
deleted file mode 100644
index 1f925a7..0000000
Binary files a/static/components/tarbar/pictures/assistant.png and /dev/null differ
diff --git a/static/components/tarbar/pictures/assistant_picked_up.png b/static/components/tarbar/pictures/assistant_picked_up.png
deleted file mode 100644
index 472042c..0000000
Binary files a/static/components/tarbar/pictures/assistant_picked_up.png and /dev/null differ
diff --git a/static/components/tarbar/pictures/bar.png b/static/components/tarbar/pictures/bar.png
deleted file mode 100644
index 0269071..0000000
Binary files a/static/components/tarbar/pictures/bar.png and /dev/null differ
diff --git a/static/components/tarbar/pictures/community.png b/static/components/tarbar/pictures/community.png
deleted file mode 100644
index 59d4226..0000000
Binary files a/static/components/tarbar/pictures/community.png and /dev/null differ
diff --git a/static/components/tarbar/pictures/community_pick_up.png b/static/components/tarbar/pictures/community_pick_up.png
deleted file mode 100644
index 4c200f6..0000000
Binary files a/static/components/tarbar/pictures/community_pick_up.png and /dev/null differ
diff --git a/static/components/tarbar/pictures/home.png b/static/components/tarbar/pictures/home.png
deleted file mode 100644
index b571aaf..0000000
Binary files a/static/components/tarbar/pictures/home.png and /dev/null differ
diff --git a/static/components/tarbar/pictures/home_picked_up.png b/static/components/tarbar/pictures/home_picked_up.png
deleted file mode 100644
index 77dff6b..0000000
Binary files a/static/components/tarbar/pictures/home_picked_up.png and /dev/null differ
diff --git a/static/components/tarbar/pictures/user.png b/static/components/tarbar/pictures/user.png
deleted file mode 100644
index efb6d85..0000000
Binary files a/static/components/tarbar/pictures/user.png and /dev/null differ
diff --git a/static/components/tarbar/pictures/user_picked_up.png b/static/components/tarbar/pictures/user_picked_up.png
deleted file mode 100644
index 770e4a0..0000000
Binary files a/static/components/tarbar/pictures/user_picked_up.png and /dev/null differ
diff --git a/static/homepages/community/add_post/pictures/add_post_image.png b/static/homepages/community/add_post/pictures/add_post_image.png
deleted file mode 100644
index 9634891..0000000
Binary files a/static/homepages/community/add_post/pictures/add_post_image.png and /dev/null differ
diff --git a/static/homepages/community/add_post/pictures/left_arrow.png b/static/homepages/community/add_post/pictures/left_arrow.png
deleted file mode 100644
index 522c772..0000000
Binary files a/static/homepages/community/add_post/pictures/left_arrow.png and /dev/null differ
diff --git a/static/homepages/community/add_post/scss/add_post.scss b/static/homepages/community/add_post/scss/add_post.scss
deleted file mode 100644
index 269c180..0000000
--- a/static/homepages/community/add_post/scss/add_post.scss
+++ /dev/null
@@ -1,169 +0,0 @@
-.add_post_box{
- height: 100vh;
- width: 100vw;
- position: relative;
- .addpost_top_box{
- display: flex;
- align-items: center;
- // background-color: #55aaff;
- height: 10vh;
- width: 100%;
- position: absolute;
- top: 5%;
- .return_box{
- display: flex;
- justify-content: center;
- align-items: center;
- background-color: #E6EEFA;
- height: 5.5vh;
- width: 5.5vh;
- border-radius: 50%;
- position: absolute;
- left: 5vw;
- .return_image{
- width: 3vh;
- }
- }
- .title_box{
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 550;
- font-size: 2.8vh;
- width: fit-content;
- // line-height: 33px;
- /* or 92% */
- text-align: center;
- letter-spacing: -0.604677px;
- color: #000000;
- position: absolute;
- left: 50%;
- transform: translateX(-50%);
- }
- .publish_btn{
- position: absolute;
- right: 5vw;
- display: flex;
- justify-content: center;
- align-items: center;
- background: #5790DF;
- box-shadow: 0px 14.8205px 29.641px rgba(87, 144, 223, 0.5);
- border-radius: 20px;
- padding: 1vh 2vh;
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 500;
- font-size: 1.5vh;
- text-align: center;
- letter-spacing: -0.604677px;
- color: #FFFFFF;
- }
- }
- .addpost_tip_box{
- position: absolute;
- top: 15vh;
- left: 50%;
- transform: translateX(-50%);
- width: 80%;
- text-align: center;
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 600;
- font-size: 1.9vh;
- letter-spacing: -0.604677px;
- color: #CCB8B8;
- padding-bottom: 1vh;
- border-bottom: 1px solid #000000;
- }
- .addpost_box{
- position: absolute;
- left: 50%;
- transform: translateX(-50%);
- top: 25vh;
- width: 90%;
- .post_box{
- background-color: #B2CBF0;
- border-radius: 30px;
- padding: 5vh 2vh;
- box-sizing: border-box;
- margin-bottom: 5vh;
- width: 100%;
- display: flex;
- flex-direction: column;
- position: relative;
- }
- .post_top_box{
- display: flex;
- .post_avatar_box{
- width: 5vh;
- height: 5vh;
- border-radius: 50%;
- background-color: #fff;
- display: flex;
- justify-content: center;
- align-items: center;
- margin-right: 2vh;
- .post_avatar{
- width: 80%;
- }
- }
- .post_info{
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 700;
- font-size: 2vh;
- color: #000000;
- display: flex;
- flex-direction: column;
- justify-content: center;
- }
- }
- .post_word_box{
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 700;
- font-size: 2vh;
- color: #000000;
- margin-top: 2.5vh;
- background-color: #E6EEFA;
- border-radius: 8px;
- box-sizing: border-box;
- padding: 1.5vh 1.5vh;
- height: 5.5vh;
- width:100%;
- letter-spacing: 1px;
- }
- .post_images_box{
- width: 100%;
- height:70%;
- // .post_images{
- // width: 100%;
- // height: 100%;
- // }
- .myimgDV {
- width: 100%;
- height: 100%;
- .flex {
- display: flex;
- }
- .justify {
- justify-content: space-between;
- }
- .receiveimage {
- margin-top: 28rpx;
- display: flex;
- flex-wrap: wrap;
- width: 100%;
- .doublepic {
- // height: 100%;
- width: 49%;
- margin-right: 12rpx;
- margin-bottom: 12rpx;
- &:nth-child(2n) {
- margin-right: 0;
- }
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/static/homepages/community/community/pictures/add_image.png b/static/homepages/community/community/pictures/add_image.png
deleted file mode 100644
index e77a787..0000000
Binary files a/static/homepages/community/community/pictures/add_image.png and /dev/null differ
diff --git a/static/homepages/community/community/pictures/chat_icon.png b/static/homepages/community/community/pictures/chat_icon.png
deleted file mode 100644
index 7554bed..0000000
Binary files a/static/homepages/community/community/pictures/chat_icon.png and /dev/null differ
diff --git a/static/homepages/community/community/pictures/dog_image.png b/static/homepages/community/community/pictures/dog_image.png
deleted file mode 100644
index ce0bdfc..0000000
Binary files a/static/homepages/community/community/pictures/dog_image.png and /dev/null differ
diff --git a/static/homepages/community/community/pictures/love_image.png b/static/homepages/community/community/pictures/love_image.png
deleted file mode 100644
index 3d372e9..0000000
Binary files a/static/homepages/community/community/pictures/love_image.png and /dev/null differ
diff --git a/static/homepages/community/community/pictures/red_love_image.png b/static/homepages/community/community/pictures/red_love_image.png
deleted file mode 100644
index 2008c0a..0000000
Binary files a/static/homepages/community/community/pictures/red_love_image.png and /dev/null differ
diff --git a/static/homepages/community/community/scss/community.scss b/static/homepages/community/community/scss/community.scss
deleted file mode 100644
index c448b61..0000000
--- a/static/homepages/community/community/scss/community.scss
+++ /dev/null
@@ -1,196 +0,0 @@
-.community_box{
- padding: 5vh 5vw;
- display: flex;
- flex-direction: column;
- position: relative;
- .top_box{
- display: flex;
- justify-content: space-between;
- align-items: center;
- height: 10vh;
- // border-bottom: 1.48205px solid #000000;
- .dog_image_box{
- // height: 8vh;
- // width: 8vh;
- height: 110rpx;
- width: 110rpx;
- border-radius: 50%;
- background-color: #D9D9D9;
- display: flex;
- justify-content: center;
- align-items: center;
- .dog_image{
- width: 85rpx;
- }
- }
- .words_box{
- height: 100%;
- width: 60%;
- display: flex;
- flex-direction: column;
- justify-content: space-around;
- align-items: center;
- .title_box{
- width: fit-content;
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 600;
- font-size: 3vh;
- line-height: 33px;
- text-align: center;
- letter-spacing: -0.604677px;
- color: #000000;
- }
- .tip_word_box{
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 600;
- font-size: 2vh;
- line-height: 33px;
- text-align: center;
- letter-spacing: -0.604677px;
- color: #CCB8B8;
- }
- }
- .add_image_box{
- // height: 8vh;
- // width: 8vh;
- height: 110rpx;
- width: 110rpx;
- border-radius: 50%;
- background-color: #D9D9D9;
- display: flex;
- justify-content: center;
- align-items: center;
- .add_image{
- width: 50rpx;
- }
- }
- }
- // 分割线
- .line_box{
- width: 70%;
- border-bottom: 1.48205px solid #000000;
- position: absolute;
- top: 17vh;
- left: 50%;
- transform: translateX(-50%);
- }
- .post_body{
- position: absolute;
- left: 50%;
- transform: translateX(-50%);
- top: 20vh;
- width: 90%;
- .post_scroll_box{
- height: 69vh;
- }
- .post_box{
- background-color: #E6EEFA;
- border-radius: 30px;
- padding: 2vh 2vh;
- box-sizing: border-box;
- margin-bottom: 5vh;
- width: 100%;
- // height: 55vh;
- display: flex;
- flex-direction: column;
- // height:900rpx;
- position: relative;
- .post_top_box{
- display: flex;
- .post_avatar_box{
- width: 5vh;
- height: 5vh;
- border-radius: 50%;
- background-color: #fff;
- display: flex;
- justify-content: center;
- align-items: center;
- margin-right: 2vh;
- .post_avatar{
- width: 80%;
- }
- }
- .post_info{
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 700;
- font-size: 2vh;
- color: #000000;
- display: flex;
- flex-direction: column;
- justify-content: center;
- }
- }
- .post_word_box{
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 700;
- font-size: 2vh;
- color: #000000;
- margin-top: 2.5vh;
- }
- .post_images_box{
- width: 100%;
- height:70%;
- .post_images{
- width: 100%;
- height: 100%;
- }
- }
- .post_bottom_box{
- position: absolute;
- bottom: 0%;
- width: 100%;
- height: 10%;
- padding: 0% 6%;
- box-sizing: border-box;
- display: flex;
- background: rgba(0, 0, 0, 0.3);
- backdrop-filter: blur(2px);
- /* Note: backdrop-filter has minimal browser support */
- border-radius: 0px 0px 30px 30px;
- left: 50%;
- transform: translateX(-50%);
- .comments_box{
- display: flex;
- align-items: center;
- height: 100%;
- // width: 10%;
- .chat_icon{
- width: 3.2vh;
- }
- .comments_num{
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 600;
- font-size: 2vh;
- text-align: center;
- letter-spacing: -0.604677px;
- color: rgba(255, 255, 255, 0.8);
- }
- }
- .like_box{
- display: flex;
- align-items: center;
- height: 100%;
- margin-left: 4%;
- // width: 10%;
- .love_icon{
- width: 3.2vh;
- }
- .like_num{
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 600;
- font-size: 2vh;
- text-align: center;
- letter-spacing: -0.604677px;
- color: rgba(255, 255, 255, 0.8);
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/static/homepages/community/personal_center/pictures/left_arrow.png b/static/homepages/community/personal_center/pictures/left_arrow.png
deleted file mode 100644
index 522c772..0000000
Binary files a/static/homepages/community/personal_center/pictures/left_arrow.png and /dev/null differ
diff --git a/static/homepages/community/personal_center/pictures/top_background.png b/static/homepages/community/personal_center/pictures/top_background.png
deleted file mode 100644
index ddb6cb5..0000000
Binary files a/static/homepages/community/personal_center/pictures/top_background.png and /dev/null differ
diff --git a/static/homepages/community/personal_center/scss/personal_center.scss b/static/homepages/community/personal_center/scss/personal_center.scss
deleted file mode 100644
index c4fe2a8..0000000
--- a/static/homepages/community/personal_center/scss/personal_center.scss
+++ /dev/null
@@ -1,308 +0,0 @@
-.person_center_box{
- height: 100vh;
- width: 100vw;
- position: relative;
- .person_center_top{
- height: 25vh;
- background-image: url("@/static/homepages/community/personal_center/pictures/top_background.png");
- background-size: cover;
- background-position: center;
- .return_box{
- display: flex;
- justify-content: center;
- align-items: center;
- background-color: #E6EEFA;
- height: 5.5vh;
- width: 5.5vh;
- border-radius: 50%;
- position: absolute;
- left: 5vw;
- top: 2vh;
- .return_image{
- width: 3vh;
- }
- }
- }
- .person_center_body{
- box-sizing: border-box;
- position: absolute;
- width: 100vw;
- height: 82vh;
- top: 18vh;
- background: #E6EEFA;
- border-radius: 50px 50px 0px 0px;
- .info_box{
- width: 100vw;
- height: 20vh;
- position: relative;
- // background-color: #fff;
- .height_box{
- width: fit-content;
- position: absolute;
- top: 20%;
- left: 19vw;
- .height_data{
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 700;
- font-size: 2vh;
- text-align: center;
- letter-spacing: -0.604677px;
- color: #000000;
- margin-bottom: 0.5vh;
- }
- .height_words{
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 400;
- font-size: 1.8vh;
- text-align: center;
- letter-spacing: -0.604677px;
- color: #000000;
- }
- }
- .weight_box{
- width: fit-content;
- position: absolute;
- top: 20%;
- right: 19vw;
- .weight_data{
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 700;
- font-size: 2vh;
- text-align: center;
- letter-spacing: -0.604677px;
- color: #000000;
- margin-bottom: 0.5vh;
- }
- .weight_words{
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 400;
- font-size: 1.8vh;
- text-align: center;
- letter-spacing: -0.604677px;
- color: #000000;
- }
- }
- .avatar_box{
- background-color: #fff;
- width: 12vh;
- height: 12vh;
- border-radius: 50%;
- position: absolute;
- left: 50%;
- top: 0%;
- transform: translate(-50%, -50%);
- }
- .name_box{
- position: absolute;
- left: 50%;
- top: 52%;
- transform: translateX(-50%);
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 700;
- font-size: 2.1vh;
- text-align: center;
- letter-spacing: -0.604677px;
- color: #000000;
- }
- .tip_box{
- position: absolute;
- left: 50%;
- top: 70%;
- width: 100vw;
- transform: translateX(-50%);
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 400;
- font-size: 1.8vh;
- text-align: center;
- letter-spacing: -0.604677px;
- color: #6C7A9C;
- }
- }
- .btns_box{
- display: flex;
- height: 5vh;
- .changeInfoBtn{
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-items: center;
- width: 35vw;
- font-size: 1.6vh;
- background: #fff;
- box-shadow: 0px 14.8205px 29.641px rgba(0, 0, 0, 0.25);
- border-radius: 29.641px;
- }
- .addPostBtn{
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-items: center;
- width: 35vw;
- font-size: 1.6vh;
- background: #fff;
- box-shadow: 0px 14.8205px 29.641px rgba(0, 0, 0, 0.25);
- border-radius: 29.641px;
- }
- }
- .posts_box{
- margin-top: 4vh;
- height: 52vh;
- width: 100vw;
- position: relative;
- .post_nav_box{
- width: 100%;
- display: flex;
- justify-content: center;
- .post_nav{
- display: flex;
- flex-direction: column;
- justify-content: flex-end;
- align-items: center;
- width: 20vw;
- height: 3vh;
- margin: 0vh 2vw;
- position: relative;
- .toMypost{
- position: absolute;
- top: 0%;
- }
- .toLikepost{
- position: absolute;
- top: 0%;
- }
- .bottom_line{
- margin-top: 6px;
- height: 1px;
- width: 5vw;
- border-bottom:2px solid #000000 ;
- background: #6C7A9C;
- border-radius: 2.9641px;
- }
- }
- }
- .posts{
- background-color: #fff;
- border-radius: 50px 50px 0px 0px;
- box-sizing: border-box;
- margin-top: 2vh;
- display: flex;
- flex-direction: column;
- height: 49vh;
- padding: 0vw 3vw 0vw 3vw;
- position: relative;
- .post_box{
- background-color: #E6EEFA;
- border-radius: 30px;
- padding: 2vh 2vh;
- box-sizing: border-box;
- margin-bottom: 5vh;
- width: 100%;
- display: flex;
- flex-direction: column;
- position: relative;
- margin-top: 3vh;
- .post_top_box{
- display: flex;
- .post_avatar_box{
- width: 5vh;
- height: 5vh;
- border-radius: 50%;
- background-color: #fff;
- display: flex;
- justify-content: center;
- align-items: center;
- margin-right: 2vh;
- .post_avatar{
- width: 80%;
- }
- }
- .post_info{
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 700;
- font-size: 2vh;
- color: #000000;
- display: flex;
- flex-direction: column;
- justify-content: center;
- }
- }
- .post_word_box{
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 700;
- font-size: 2vh;
- color: #000000;
- margin-top: 2.5vh;
- }
- .post_images_box{
- width: 100%;
- height:70%;
- .post_images{
- width: 100%;
- height: 100%;
- }
- }
- .post_bottom_box{
- position: absolute;
- bottom: 0%;
- width: 100%;
- height: 10%;
- padding: 0% 6%;
- box-sizing: border-box;
- display: flex;
- background: rgba(0, 0, 0, 0.3);
- backdrop-filter: blur(2px);
- /* Note: backdrop-filter has minimal browser support */
- border-radius: 0px 0px 30px 30px;
- left: 50%;
- transform: translateX(-50%);
- .comments_box{
- display: flex;
- align-items: center;
- height: 100%;
- // width: 10%;
- .chat_icon{
- width: 3.2vh;
- }
- .comments_num{
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 600;
- font-size: 2vh;
- text-align: center;
- letter-spacing: -0.604677px;
- color: rgba(255, 255, 255, 0.8);
- }
- }
- .like_box{
- display: flex;
- align-items: center;
- height: 100%;
- margin-left: 4%;
- // width: 10%;
- .love_icon{
- width: 3.2vh;
- }
- .like_num{
- font-family: 'Poppins';
- font-style: normal;
- font-weight: 600;
- font-size: 2vh;
- text-align: center;
- letter-spacing: -0.604677px;
- color: rgba(255, 255, 255, 0.8);
- }
- }
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/static/homepages/homes/ai_recognize_fruit/css/ai_recongnize_fruit.scss b/static/homepages/homes/ai_recognize_fruit/css/ai_recongnize_fruit.scss
deleted file mode 100644
index 43017ac..0000000
--- a/static/homepages/homes/ai_recognize_fruit/css/ai_recongnize_fruit.scss
+++ /dev/null
@@ -1,68 +0,0 @@
-
-.background {
- background-image: url("@/static/homepages/homes/ai_recognize_fruit/pictures/background.png");
- background-size: cover;
- background-position: center;
- height: 100vh;
- display: flex;
- flex-direction: column; /* 纵向排列 */
- align-items: center; /* 水平居中 */
- justify-content: flex-end; /* 使内容向底部对齐 */
- position: relative; /* 为绝对定位子元素提供相对定位的上下文 */
-}
-.upload_picture{
- position: absolute; /* 绝对定位 */
- width: 90%;
- height: 25%;
- top: 45%; /* 距离底部 20% 的位置 */
- left: 50%; /* 水平居中 */
- transform: translateX(-50%); /* 通过 translateX 使其居中 */
-}
-.button {
- position: absolute; /* 绝对定位 */
- width: 13%;
- height: 6%;
- top: 0%;
- left: 6%; /* 水平居中 */
- transform: translateX(-50%); /* 通过 translateX 使其居中 */
-}
-.calorie_container {
- background-image: url("@/static/homepages/homes/ai_recognize_fruit/pictures/calorie.png");
- background-size: cover;
- background-position: center;
- display: flex; /* 使用 flex 布局 */
- flex-direction: column;
- align-items: center; /* 水平居中 */
- justify-content: center; /* 垂直居中 */
- position: absolute;
- width: 40%;
- height: 27%;
- bottom: 3%;
- left: 6%;
-}
-.calorie_text {
- font-size: 23px;
- color: #1b1313;
- font-weight: bold;
- margin-top: 100%; /* 向下移动 100% */
-}
-.name_container{
- background-image: url("@/static/homepages/homes/ai_recognize_fruit/pictures/fruit.png");
- background-size: cover;
- background-position: center;
- display: flex; /* 使用 flex 布局 */
- flex-direction: column;
- align-items: center; /* 水平居中 */
- justify-content: center; /* 垂直居中 */
- position: absolute;
- width: 40%;
- height: 26%;
- bottom: 3%;
- left: 54%;
-}
-.name_text {
- font-size: 23px;
- color: #0c0b0b;
- font-weight: 800;
- margin-top: 100%; /* 向下移动 100% */
-}
\ No newline at end of file
diff --git a/static/homepages/homes/ai_recognize_fruit/pictures/background.png b/static/homepages/homes/ai_recognize_fruit/pictures/background.png
deleted file mode 100644
index a59e83c..0000000
Binary files a/static/homepages/homes/ai_recognize_fruit/pictures/background.png and /dev/null differ
diff --git a/static/homepages/homes/ai_recognize_fruit/pictures/button.png b/static/homepages/homes/ai_recognize_fruit/pictures/button.png
deleted file mode 100644
index f3f43e8..0000000
Binary files a/static/homepages/homes/ai_recognize_fruit/pictures/button.png and /dev/null differ
diff --git a/static/homepages/homes/ai_recognize_fruit/pictures/calorie.png b/static/homepages/homes/ai_recognize_fruit/pictures/calorie.png
deleted file mode 100644
index 71ec982..0000000
Binary files a/static/homepages/homes/ai_recognize_fruit/pictures/calorie.png and /dev/null differ
diff --git a/static/homepages/homes/ai_recognize_fruit/pictures/fruit.png b/static/homepages/homes/ai_recognize_fruit/pictures/fruit.png
deleted file mode 100644
index e00ba82..0000000
Binary files a/static/homepages/homes/ai_recognize_fruit/pictures/fruit.png and /dev/null differ
diff --git a/static/homepages/homes/ai_recognize_fruit/pictures/photo.png b/static/homepages/homes/ai_recognize_fruit/pictures/photo.png
deleted file mode 100644
index c3c2df6..0000000
Binary files a/static/homepages/homes/ai_recognize_fruit/pictures/photo.png and /dev/null differ
diff --git a/static/homepages/homes/ai_recognize_hot/css/ai_recongnize_hot.scss b/static/homepages/homes/ai_recognize_hot/css/ai_recongnize_hot.scss
deleted file mode 100644
index 35a3f17..0000000
--- a/static/homepages/homes/ai_recognize_hot/css/ai_recongnize_hot.scss
+++ /dev/null
@@ -1,68 +0,0 @@
-
-.background {
- background-image: url("@/static/homepages/homes/ai_recognize_hot/pictures/background.png");
- background-size: cover;
- background-position: center;
- height: 100vh;
- display: flex;
- flex-direction: column; /* 纵向排列 */
- align-items: center; /* 水平居中 */
- justify-content: flex-end; /* 使内容向底部对齐 */
- position: relative; /* 为绝对定位子元素提供相对定位的上下文 */
-}
-.upload_picture{
- position: absolute; /* 绝对定位 */
- width: 90%;
- height: 30%;
- top: 43%; /* 距离底部 20% 的位置 */
- left: 50%; /* 水平居中 */
- transform: translateX(-50%); /* 通过 translateX 使其居中 */
-}
-.button {
- position: absolute; /* 绝对定位 */
- width: 15%;
- height: 7%;
- top: 1%; /* 距离底部 20% 的位置 */
- left: 8%; /* 水平居中 */
- transform: translateX(-50%); /* 通过 translateX 使其居中 */
-}
-.calorie_container {
- background-image: url("@/static/homepages/homes/ai_recognize_hot/pictures/calorie.png");
- background-size: cover;
- background-position: center;
- display: flex; /* 使用 flex 布局 */
- flex-direction: column;
- align-items: center; /* 水平居中 */
- justify-content: center; /* 垂直居中 */
- position: absolute;
- width: 40%;
- height: 25%;
- bottom: 2%;
- left: 6%;
-}
-.calorie_text {
- font-size: 23px;
- color: #c63030;
- font-weight: bold;
- margin-top: 100%; /* 向下移动 100% */
-}
-.name_container{
- background-image: url("@/static/homepages/homes/ai_recognize_hot/pictures/name.png");
- background-size: cover;
- background-position: center;
- display: flex; /* 使用 flex 布局 */
- flex-direction: column;
- align-items: center; /* 水平居中 */
- justify-content: center; /* 垂直居中 */
- position: absolute;
- width: 40%;
- height: 26%;
- bottom: 2%;
- left: 54%;
-}
-.name_text {
- font-size: 23px;
- color: #c63030;
- font-weight: 800;
- margin-top: 100%; /* 向下移动 100% */
-}
\ No newline at end of file
diff --git a/static/homepages/homes/ai_recognize_hot/pictures/background.png b/static/homepages/homes/ai_recognize_hot/pictures/background.png
deleted file mode 100644
index d8362f5..0000000
Binary files a/static/homepages/homes/ai_recognize_hot/pictures/background.png and /dev/null differ
diff --git a/static/homepages/homes/ai_recognize_hot/pictures/button.png b/static/homepages/homes/ai_recognize_hot/pictures/button.png
deleted file mode 100644
index f3f43e8..0000000
Binary files a/static/homepages/homes/ai_recognize_hot/pictures/button.png and /dev/null differ
diff --git a/static/homepages/homes/ai_recognize_hot/pictures/calorie.png b/static/homepages/homes/ai_recognize_hot/pictures/calorie.png
deleted file mode 100644
index bdb9312..0000000
Binary files a/static/homepages/homes/ai_recognize_hot/pictures/calorie.png and /dev/null differ
diff --git a/static/homepages/homes/ai_recognize_hot/pictures/name.png b/static/homepages/homes/ai_recognize_hot/pictures/name.png
deleted file mode 100644
index 2c71c16..0000000
Binary files a/static/homepages/homes/ai_recognize_hot/pictures/name.png and /dev/null differ
diff --git a/static/homepages/homes/ai_recognize_hot/pictures/photo.png b/static/homepages/homes/ai_recognize_hot/pictures/photo.png
deleted file mode 100644
index 97240d5..0000000
Binary files a/static/homepages/homes/ai_recognize_hot/pictures/photo.png and /dev/null differ
diff --git a/static/homepages/homes/ai_recognize_plan/pictures/background.png b/static/homepages/homes/ai_recognize_plan/pictures/background.png
deleted file mode 100644
index 42ac2f2..0000000
Binary files a/static/homepages/homes/ai_recognize_plan/pictures/background.png and /dev/null differ
diff --git a/static/homepages/homes/ai_recognize_plan/pictures/button.png b/static/homepages/homes/ai_recognize_plan/pictures/button.png
deleted file mode 100644
index 496eade..0000000
Binary files a/static/homepages/homes/ai_recognize_plan/pictures/button.png and /dev/null differ
diff --git a/static/homepages/homes/ai_recognize_plan/pictures/generate.png b/static/homepages/homes/ai_recognize_plan/pictures/generate.png
deleted file mode 100644
index 447395b..0000000
Binary files a/static/homepages/homes/ai_recognize_plan/pictures/generate.png and /dev/null differ
diff --git a/static/homepages/homes/ai_recognize_recipe/pictures/background.png b/static/homepages/homes/ai_recognize_recipe/pictures/background.png
deleted file mode 100644
index 1a39585..0000000
Binary files a/static/homepages/homes/ai_recognize_recipe/pictures/background.png and /dev/null differ
diff --git a/static/homepages/homes/ai_recognize_recipe/pictures/button.png b/static/homepages/homes/ai_recognize_recipe/pictures/button.png
deleted file mode 100644
index 496eade..0000000
Binary files a/static/homepages/homes/ai_recognize_recipe/pictures/button.png and /dev/null differ
diff --git a/static/homepages/homes/ai_recognize_recipe/pictures/generate.png b/static/homepages/homes/ai_recognize_recipe/pictures/generate.png
deleted file mode 100644
index 5929e86..0000000
Binary files a/static/homepages/homes/ai_recognize_recipe/pictures/generate.png and /dev/null differ
diff --git a/static/homepages/homes/ai_recognize_recipe/pictures/go_back_button.png b/static/homepages/homes/ai_recognize_recipe/pictures/go_back_button.png
deleted file mode 100644
index b1db9e3..0000000
Binary files a/static/homepages/homes/ai_recognize_recipe/pictures/go_back_button.png and /dev/null differ
diff --git a/static/homepages/homes/choice_book/pictures/book.png b/static/homepages/homes/choice_book/pictures/book.png
deleted file mode 100644
index af9d07f..0000000
Binary files a/static/homepages/homes/choice_book/pictures/book.png and /dev/null differ
diff --git a/static/homepages/homes/choice_book/pictures/book1.png b/static/homepages/homes/choice_book/pictures/book1.png
deleted file mode 100644
index de37502..0000000
Binary files a/static/homepages/homes/choice_book/pictures/book1.png and /dev/null differ
diff --git a/static/homepages/homes/choice_book/pictures/book2.png b/static/homepages/homes/choice_book/pictures/book2.png
deleted file mode 100644
index 8adef45..0000000
Binary files a/static/homepages/homes/choice_book/pictures/book2.png and /dev/null differ
diff --git a/static/homepages/homes/choice_book/pictures/book3.png b/static/homepages/homes/choice_book/pictures/book3.png
deleted file mode 100644
index 22b0b0e..0000000
Binary files a/static/homepages/homes/choice_book/pictures/book3.png and /dev/null differ
diff --git a/static/homepages/homes/choice_book/pictures/book4.png b/static/homepages/homes/choice_book/pictures/book4.png
deleted file mode 100644
index 30f2375..0000000
Binary files a/static/homepages/homes/choice_book/pictures/book4.png and /dev/null differ
diff --git a/static/homepages/homes/choice_book/pictures/search_area.png b/static/homepages/homes/choice_book/pictures/search_area.png
deleted file mode 100644
index 1455f41..0000000
Binary files a/static/homepages/homes/choice_book/pictures/search_area.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/Bread.png b/static/homepages/homes/dictionary/pictures/Bread.png
deleted file mode 100644
index 1707590..0000000
Binary files a/static/homepages/homes/dictionary/pictures/Bread.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/Fried Egg.png b/static/homepages/homes/dictionary/pictures/Fried Egg.png
deleted file mode 100644
index 459d600..0000000
Binary files a/static/homepages/homes/dictionary/pictures/Fried Egg.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/Grape.png b/static/homepages/homes/dictionary/pictures/Grape.png
deleted file mode 100644
index 7f84d0a..0000000
Binary files a/static/homepages/homes/dictionary/pictures/Grape.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/Kiwi fruit.png b/static/homepages/homes/dictionary/pictures/Kiwi fruit.png
deleted file mode 100644
index 4eabe74..0000000
Binary files a/static/homepages/homes/dictionary/pictures/Kiwi fruit.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/Mango.png b/static/homepages/homes/dictionary/pictures/Mango.png
deleted file mode 100644
index 3ae9260..0000000
Binary files a/static/homepages/homes/dictionary/pictures/Mango.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/Pineapple.png b/static/homepages/homes/dictionary/pictures/Pineapple.png
deleted file mode 100644
index 73d5606..0000000
Binary files a/static/homepages/homes/dictionary/pictures/Pineapple.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/Pizza.png b/static/homepages/homes/dictionary/pictures/Pizza.png
deleted file mode 100644
index 58b549c..0000000
Binary files a/static/homepages/homes/dictionary/pictures/Pizza.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/Pulled noodles.png b/static/homepages/homes/dictionary/pictures/Pulled noodles.png
deleted file mode 100644
index 972a7a2..0000000
Binary files a/static/homepages/homes/dictionary/pictures/Pulled noodles.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/Strawberry.png b/static/homepages/homes/dictionary/pictures/Strawberry.png
deleted file mode 100644
index 82b9b71..0000000
Binary files a/static/homepages/homes/dictionary/pictures/Strawberry.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/apple.png b/static/homepages/homes/dictionary/pictures/apple.png
deleted file mode 100644
index 5cebaf1..0000000
Binary files a/static/homepages/homes/dictionary/pictures/apple.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/avocado.png b/static/homepages/homes/dictionary/pictures/avocado.png
deleted file mode 100644
index badb40f..0000000
Binary files a/static/homepages/homes/dictionary/pictures/avocado.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/banana.png b/static/homepages/homes/dictionary/pictures/banana.png
deleted file mode 100644
index eed3274..0000000
Binary files a/static/homepages/homes/dictionary/pictures/banana.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/broccoli.png b/static/homepages/homes/dictionary/pictures/broccoli.png
deleted file mode 100644
index 4edfadd..0000000
Binary files a/static/homepages/homes/dictionary/pictures/broccoli.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/button.png b/static/homepages/homes/dictionary/pictures/button.png
deleted file mode 100644
index 0771b38..0000000
Binary files a/static/homepages/homes/dictionary/pictures/button.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/carrot.png b/static/homepages/homes/dictionary/pictures/carrot.png
deleted file mode 100644
index 28d0900..0000000
Binary files a/static/homepages/homes/dictionary/pictures/carrot.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/corn.png b/static/homepages/homes/dictionary/pictures/corn.png
deleted file mode 100644
index 504295d..0000000
Binary files a/static/homepages/homes/dictionary/pictures/corn.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/eggplant.png b/static/homepages/homes/dictionary/pictures/eggplant.png
deleted file mode 100644
index df001e4..0000000
Binary files a/static/homepages/homes/dictionary/pictures/eggplant.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/garlic.png b/static/homepages/homes/dictionary/pictures/garlic.png
deleted file mode 100644
index f81e127..0000000
Binary files a/static/homepages/homes/dictionary/pictures/garlic.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/lemon.png b/static/homepages/homes/dictionary/pictures/lemon.png
deleted file mode 100644
index 5574e9a..0000000
Binary files a/static/homepages/homes/dictionary/pictures/lemon.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/loquat.png b/static/homepages/homes/dictionary/pictures/loquat.png
deleted file mode 100644
index 7d23e42..0000000
Binary files a/static/homepages/homes/dictionary/pictures/loquat.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/mushroom.png b/static/homepages/homes/dictionary/pictures/mushroom.png
deleted file mode 100644
index 6806f8e..0000000
Binary files a/static/homepages/homes/dictionary/pictures/mushroom.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/orange.png b/static/homepages/homes/dictionary/pictures/orange.png
deleted file mode 100644
index 630a462..0000000
Binary files a/static/homepages/homes/dictionary/pictures/orange.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/papaya.png b/static/homepages/homes/dictionary/pictures/papaya.png
deleted file mode 100644
index d03abbb..0000000
Binary files a/static/homepages/homes/dictionary/pictures/papaya.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/pear.png b/static/homepages/homes/dictionary/pictures/pear.png
deleted file mode 100644
index 497ed39..0000000
Binary files a/static/homepages/homes/dictionary/pictures/pear.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/pepper.png b/static/homepages/homes/dictionary/pictures/pepper.png
deleted file mode 100644
index 6fa8a13..0000000
Binary files a/static/homepages/homes/dictionary/pictures/pepper.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/radish.png b/static/homepages/homes/dictionary/pictures/radish.png
deleted file mode 100644
index 1cd76ab..0000000
Binary files a/static/homepages/homes/dictionary/pictures/radish.png and /dev/null differ
diff --git a/static/homepages/homes/dictionary/pictures/watermelon.png b/static/homepages/homes/dictionary/pictures/watermelon.png
deleted file mode 100644
index 1dc73d2..0000000
Binary files a/static/homepages/homes/dictionary/pictures/watermelon.png and /dev/null differ
diff --git a/static/homepages/homes/home/css/home.scss b/static/homepages/homes/home/css/home.scss
deleted file mode 100644
index a3b35cb..0000000
--- a/static/homepages/homes/home/css/home.scss
+++ /dev/null
@@ -1,214 +0,0 @@
-.background {
- background-size: cover;
- background-position: center;
- min-height: 100vh;
- display: flex;
- flex-direction: column;
- align-items: center;
- overflow-y: auto;
- -webkit-overflow-scrolling: touch;
-}
-.home_text{
- position: absolute;
- top: 5%;
- height: 27%;
- width: 100%;
- left: -13%;
-}
-.swiper{
- position: absolute;
- top: 15%;
- height: 28%;
- width: 98%;
- left: 1%;
-}
-
-.swiper_item_background{
- justify-content: center;
- align-items: center;
- height: 100%;
- width: 100%;
-
-}
-.puppy_chat_button{
- position: absolute;
- height: 20%;
- width: 38%;
- left: 6%;
- top: 63%;
- z-index: 1000;
-}
-.exercise_button{
- position: absolute;
- height: 18%;
- width: 38%;
- left: 6%;
- top: 69%;
- z-index: 1000;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-.swiper_item {
- justify-content: center;
- align-items: center;
- height: 100%;
- width: 100%;
-}
-.swipe_dot{
- position: absolute;
- top: 43.8%;
- height: 2%;
- width: 25%;
- left: 37.5%;
-}
-.line{
- position: absolute;
- top: 48%;
- height: 0.3%;
- width: 70%;
- left: 15%;
-}
-.recipe_area_word{
- position: absolute;
- top: 53%;
- height: 3.7%;
- width: 30%;
- left: 6%;
-}
-.recipe_area {
- background-color: #E0E0BA;
- position: absolute;
- top: 58%;
- height: 85%;
- width: 90%;
- left: 5%;
- border-radius: 30px;
- .ai_recognize_recipe {
- position: absolute;
- top: -5%;
- width: 105%;
- height: 32%;
- left: -2.5%;
-
- }
- .ai_recognize_hot {
- position: absolute;
- top: 24%;
- width: 105%;
- height: 28%;
- left: -2.5%;
-
- }
- .ai_recognize_fruit {
- position: absolute;
- top: 46%;
- width: 105%;
- height: 30%;
- left: -2.5%;
- }
- .my_recipe_plan {
- position: absolute;
- top: 71%;
- width: 105%;
- height: 30%;
- left: -2.5%;
- }
-}
-.sport_text{
- position: absolute;
- top: 146%;
- height: 3.7%;
- width: 30%;
- left: 6%;
-}
-.sport_area{
- background-color: #A9D0AE;
- position: absolute;
- top: 151%;
- height: 50%;
- width: 90%;
- left: 5%;
- border-radius: 30px;
- .ai_recognize_plan{
- position: absolute;
- top: -1%;
- width: 105%;
- height: 50%;
- left: -2.5%;
- }
- .my_exercise_plan{
- position: absolute;
- top: 45%;
- width: 105%;
- height: 50%;
- left: -2.5%;
- }
-}
-.read_text{
- position: absolute;
- top: 203%;
- height: 3.7%;
- width: 30%;
- left: 6%;
-}
-.read_area{
- background-color: #E7ABAB;
- position: absolute;
- top: 208%;
- height: 40%;
- width: 90%;
- left: 5%;
- border-radius: 30px;
- .dictionary_background{
- position: absolute;
- top: 0;
- width: 50%;
- height: 90%;
- left: -2.5%;
- }
- .dictionary_button{
- position: absolute;
- top: 65%;
- width: 10%;
- height: 10%;
- left: 27%;
- }
- .read_background{
- position: absolute;
- top: 0;
- width: 50%;
- height: 90%;
- left: 52.5%;
- }
- .read_button{
- position: absolute;
- top: 65%;
- width: 10%;
- height: 10%;
- left: 83%;
- }
-}
-.block_area{
- position: absolute;
- top: 258%;
- height: 5%;
- width: 100%;
-}
-.bar{
-
-
-
-
-}
-
diff --git a/static/homepages/homes/home/pictures/dot1.png b/static/homepages/homes/home/pictures/dot1.png
deleted file mode 100644
index 05a92fd..0000000
Binary files a/static/homepages/homes/home/pictures/dot1.png and /dev/null differ
diff --git a/static/homepages/homes/home/pictures/dot2.png b/static/homepages/homes/home/pictures/dot2.png
deleted file mode 100644
index eec6186..0000000
Binary files a/static/homepages/homes/home/pictures/dot2.png and /dev/null differ
diff --git a/static/homepages/homes/home/pictures/dot3.png b/static/homepages/homes/home/pictures/dot3.png
deleted file mode 100644
index d31c79f..0000000
Binary files a/static/homepages/homes/home/pictures/dot3.png and /dev/null differ
diff --git a/static/homepages/homes/home/pictures/dot4.png b/static/homepages/homes/home/pictures/dot4.png
deleted file mode 100644
index ee2f969..0000000
Binary files a/static/homepages/homes/home/pictures/dot4.png and /dev/null differ
diff --git a/static/homepages/homes/home/pictures/home_text.png b/static/homepages/homes/home/pictures/home_text.png
deleted file mode 100644
index 100232c..0000000
Binary files a/static/homepages/homes/home/pictures/home_text.png and /dev/null differ
diff --git a/static/homepages/homes/home/pictures/line.png b/static/homepages/homes/home/pictures/line.png
deleted file mode 100644
index 5cfd72e..0000000
Binary files a/static/homepages/homes/home/pictures/line.png and /dev/null differ
diff --git a/static/homepages/homes/home/pictures/puppy.png b/static/homepages/homes/home/pictures/puppy.png
deleted file mode 100644
index dfe415f..0000000
Binary files a/static/homepages/homes/home/pictures/puppy.png and /dev/null differ
diff --git a/static/homepages/homes/home/pictures/read_text.png b/static/homepages/homes/home/pictures/read_text.png
deleted file mode 100644
index 06f3c44..0000000
Binary files a/static/homepages/homes/home/pictures/read_text.png and /dev/null differ
diff --git a/static/homepages/homes/home/pictures/recipe_area.png b/static/homepages/homes/home/pictures/recipe_area.png
deleted file mode 100644
index 9a8ee52..0000000
Binary files a/static/homepages/homes/home/pictures/recipe_area.png and /dev/null differ
diff --git a/static/homepages/homes/home/pictures/sport_text.png b/static/homepages/homes/home/pictures/sport_text.png
deleted file mode 100644
index f5fae08..0000000
Binary files a/static/homepages/homes/home/pictures/sport_text.png and /dev/null differ
diff --git a/static/homepages/homes/home/pictures/swipe_dot.png b/static/homepages/homes/home/pictures/swipe_dot.png
deleted file mode 100644
index 65bf747..0000000
Binary files a/static/homepages/homes/home/pictures/swipe_dot.png and /dev/null differ
diff --git a/static/homepages/homes/knowledge_dictionary/pictures/background.png b/static/homepages/homes/knowledge_dictionary/pictures/background.png
deleted file mode 100644
index f1c8a03..0000000
Binary files a/static/homepages/homes/knowledge_dictionary/pictures/background.png and /dev/null differ
diff --git a/static/homepages/homes/knowledge_dictionary/pictures/banana.png b/static/homepages/homes/knowledge_dictionary/pictures/banana.png
deleted file mode 100644
index 5dbd8ac..0000000
Binary files a/static/homepages/homes/knowledge_dictionary/pictures/banana.png and /dev/null differ
diff --git a/static/homepages/homes/knowledge_dictionary/pictures/carrot.png b/static/homepages/homes/knowledge_dictionary/pictures/carrot.png
deleted file mode 100644
index 5c7680d..0000000
Binary files a/static/homepages/homes/knowledge_dictionary/pictures/carrot.png and /dev/null differ
diff --git a/static/homepages/homes/knowledge_dictionary/pictures/go_back_button.png b/static/homepages/homes/knowledge_dictionary/pictures/go_back_button.png
deleted file mode 100644
index fc62fbf..0000000
Binary files a/static/homepages/homes/knowledge_dictionary/pictures/go_back_button.png and /dev/null differ
diff --git a/static/homepages/homes/knowledge_dictionary/pictures/orange.png b/static/homepages/homes/knowledge_dictionary/pictures/orange.png
deleted file mode 100644
index e68cd16..0000000
Binary files a/static/homepages/homes/knowledge_dictionary/pictures/orange.png and /dev/null differ
diff --git a/static/homepages/homes/knowledge_dictionary/pictures/peach.png b/static/homepages/homes/knowledge_dictionary/pictures/peach.png
deleted file mode 100644
index 39ec2c4..0000000
Binary files a/static/homepages/homes/knowledge_dictionary/pictures/peach.png and /dev/null differ
diff --git a/static/homepages/homes/knowledge_dictionary/pictures/pineapple.png b/static/homepages/homes/knowledge_dictionary/pictures/pineapple.png
deleted file mode 100644
index 2127b71..0000000
Binary files a/static/homepages/homes/knowledge_dictionary/pictures/pineapple.png and /dev/null differ
diff --git a/static/homepages/homes/knowledge_dictionary/pictures/search_button.png b/static/homepages/homes/knowledge_dictionary/pictures/search_button.png
deleted file mode 100644
index 5c63021..0000000
Binary files a/static/homepages/homes/knowledge_dictionary/pictures/search_button.png and /dev/null differ
diff --git a/static/homepages/homes/knowledge_dictionary/pictures/strawberry.png b/static/homepages/homes/knowledge_dictionary/pictures/strawberry.png
deleted file mode 100644
index 7d946e1..0000000
Binary files a/static/homepages/homes/knowledge_dictionary/pictures/strawberry.png and /dev/null differ
diff --git a/static/homepages/homes/my_recipe_plan/js/database.js b/static/homepages/homes/my_recipe_plan/js/database.js
deleted file mode 100644
index d8bfd26..0000000
--- a/static/homepages/homes/my_recipe_plan/js/database.js
+++ /dev/null
@@ -1,133 +0,0 @@
-export const foodCaloriesDB = {
- // 主食类
- '米饭': 116,
- '馒头': 223,
- '面条': 110,
- '包子': 200,
- '饺子': 220,
- '油条': 389,
- '面包': 265,
- '粥': 50,
- '炒面': 260,
- '炒饭': 290,
-
- // 肉类
- '猪肉': 143,
- '牛肉': 106,
- '鸡肉': 167,
- '鸭肉': 240,
- '羊肉': 203,
- '鱼肉': 100,
- '虾': 85,
- '蛋': 155,
-
- // 蔬菜类
- '西红柿': 20,
- '黄瓜': 16,
- '胡萝卜': 36,
- '白菜': 20,
- '菠菜': 23,
- '生菜': 15,
- '茄子': 24,
- '土豆': 81,
- '青椒': 20,
-
- // 水果类
- '苹果': 52,
- '香蕉': 89,
- '橙子': 47,
- '葡萄': 69,
- '西瓜': 32,
- '梨': 51,
- '草莓': 32,
- '柚子': 39,
-
- // 饮品类
- '牛奶': 79,
- '豆浆': 31,
- '可乐': 42,
- '果汁': 54,
- '咖啡': 1,
- '奶茶': 150,
-
- // 常见菜品
- '西红柿炒鸡蛋': 100,
- '宫保鸡丁': 260,
- '鱼香肉丝': 195,
- '红烧肉': 425,
- '糖醋里脊': 290,
- '麻婆豆腐': 174,
- '青椒炒肉': 180,
- '回锅肉': 327,
- '蒜蓉炒菜心': 45,
- '炒青菜': 30,
- '土豆炖牛肉': 215,
- '红烧排骨': 289,
- '清炒白菜': 35,
- '炸鸡': 260,
- '水煮鱼': 180,
- '酸菜鱼': 168,
-
- // 零食类
- '薯片': 536,
- '巧克力': 546,
- '饼干': 435,
- '爆米花': 382,
- '坚果': 607,
- '冰淇淋': 267,
- '蛋糕': 257,
-
- // 快餐类
- '汉堡': 295,
- '披萨': 266,
- '炸薯条': 312,
- '炸鸡翅': 246,
- '热狗': 290
-}
-
-// 模糊搜索函数
-export const searchFood = (keyword) => {
- keyword = keyword.toLowerCase()
- const results = []
-
- for (const [food, calories] of Object.entries(foodCaloriesDB)) {
- if (food.toLowerCase().includes(keyword)) {
- results.push({
- name: food,
- calories: calories
- })
- }
- }
-
- return results
-}
-
-// 获取单个食物的卡路里
-export const getFoodCalories = (foodName) => {
- // 直接匹配
- if (foodCaloriesDB[foodName]) {
- return foodCaloriesDB[foodName]
- }
-
- // 模糊匹配
- const results = searchFood(foodName)
- if (results.length > 0) {
- return results[0].calories
- }
-
- return null
-}
-
-// 获取食物分类列表
-export const getFoodCategories = () => {
- return {
- '主食类': ['米饭', '馒头', '面条', '包子', '饺子', '油条', '面包', '粥'],
- '肉类': ['猪肉', '牛肉', '鸡肉', '鸭肉', '羊肉', '鱼肉', '虾', '蛋'],
- '蔬菜类': ['西红柿', '黄瓜', '胡萝卜', '白菜', '菠菜', '生菜', '茄子', '土豆', '青椒'],
- '水果类': ['苹果', '香蕉', '橙子', '葡萄', '西瓜', '梨', '草莓', '柚子'],
- '饮品类': ['牛奶', '豆浆', '可乐', '果汁', '咖啡', '奶茶'],
- '常见菜品': ['西红柿炒鸡蛋', '宫保鸡丁', '鱼香肉丝', '红烧肉', '糖醋里脊', '麻婆豆腐'],
- '零食类': ['薯片', '巧克力', '饼干', '爆米花', '坚果', '冰淇淋', '蛋糕'],
- '快餐类': ['汉堡', '披萨', '炸薯条', '炸鸡翅', '热狗']
- }
-}
diff --git a/static/homepages/homes/my_recipe_plan/my_recipe_plan.scss b/static/homepages/homes/my_recipe_plan/my_recipe_plan.scss
deleted file mode 100644
index 945c9b4..0000000
--- a/static/homepages/homes/my_recipe_plan/my_recipe_plan.scss
+++ /dev/null
@@ -1 +0,0 @@
-.
\ No newline at end of file
diff --git a/static/homepages/homes/my_recipe_plan/pictures/button.png b/static/homepages/homes/my_recipe_plan/pictures/button.png
deleted file mode 100644
index d404bd4..0000000
Binary files a/static/homepages/homes/my_recipe_plan/pictures/button.png and /dev/null differ
diff --git a/static/homepages/homes/my_recipe_plan/pictures/time_line.png b/static/homepages/homes/my_recipe_plan/pictures/time_line.png
deleted file mode 100644
index ff531df..0000000
Binary files a/static/homepages/homes/my_recipe_plan/pictures/time_line.png and /dev/null differ
diff --git a/static/homepages/puppy_chat/css/puppy_chat.scss b/static/homepages/puppy_chat/css/puppy_chat.scss
deleted file mode 100644
index 8747a1b..0000000
--- a/static/homepages/puppy_chat/css/puppy_chat.scss
+++ /dev/null
@@ -1,111 +0,0 @@
-.background {
- position: fixed;
- width: 100%;
- height: 75%;
- top: 4%;
- z-index: -3;
-
-}
-
-#chat_scroll{
- position: absolute;
- width: 100%;
- top: 12%;
- height: 65vh;
- padding: 10px;
-}
-
-.chat {
- position: absolute;
- width: 100%;
- // top: 12%;
- height: 100%;
- // z-index: -1;
- // padding: 10px;
- // overflow-y: auto;
- // -webkit-overflow-scrolling: touch;
- display: flex;
- flex-direction: column; /* 消息从上往下显示 */
-
-}
-.chat_area {
- margin-bottom: 10px;
- padding: 10px;
- max-width: 75%;
- word-wrap: break-word;
- display: flex;
- flex-direction: row; /* 头像和消息水平排列 */
- align-items: center; /* 内容垂直居中 */
-}
-.user_message {
- /*background-color: #7879F1; */
- color: white;
- margin-top: 2%; /* 让用户的消息气泡靠右 */
- margin-right: 5%; /* AI消息靠左 */
- margin-left: auto; /* 让AI的消息气泡靠右 */
- text-align: left;
- word-break: break-word; /* 自动换行 */
-}
-.ai_message {
- /*background-color: #e5e5ea;*/
- color: black;
- margin-left: 2%; /* 用户消息靠右 */
- margin-right: auto; /* 让用户的消息气泡靠左 */
- text-align: left;
- word-break: break-word; /* 自动换行 */
-}
-.avatar_container {
- right: 10%;
- height: 100%;
- padding-top: 30rpx;
-}
-.ai_avatar_container {
- margin-right: 10px; /* AI头像与气泡的间距 */
-}
-.user_avatar_container {
- margin-left: 10px; /* 用户头像与气泡的间距 */
-}
-.ai_avatar, .user_avatar {
- right: 5%;
- width: 40px; /* 头像的大小 */
- height: 40px; /* 头像的大小 */
- border-radius: 50%; /* 头像圆形 */
-}
-.message_content {
- max-width: 80%; /* 限制消息气泡的最大宽度 */
-}
-.user_message_content{
- background-color: #7879F1;
- border-radius: 15px;
-}
-.ai_message_content{
- background-color: #e5e5ea;
- border-radius: 15px;
-}
-.input_box {
- position: fixed;
- width: 100%;
- height: 9%;
- top: 79%;
-}
-.input_box_background {
- position: absolute;
- width: 98%;
- height: 90%;
- left: 1%;
- top: 5%;
-}
-.input_words {
- position: absolute;
- width: 70%;
- height: 80%;
- left: 5%;
- top: 10%;
-}
-.send_button {
- position: absolute;
- width: 12%;
- height: 70%;
- left: 84%;
- top: 15%;
-}
diff --git a/static/homepages/puppy_chat/pictures/ai_avatar.png b/static/homepages/puppy_chat/pictures/ai_avatar.png
deleted file mode 100644
index 851b325..0000000
Binary files a/static/homepages/puppy_chat/pictures/ai_avatar.png and /dev/null differ
diff --git a/static/homepages/puppy_chat/pictures/chat_image.png b/static/homepages/puppy_chat/pictures/chat_image.png
deleted file mode 100644
index d1a27bc..0000000
Binary files a/static/homepages/puppy_chat/pictures/chat_image.png and /dev/null differ
diff --git a/static/homepages/puppy_chat/pictures/input_box_background.png b/static/homepages/puppy_chat/pictures/input_box_background.png
deleted file mode 100644
index 8e5828d..0000000
Binary files a/static/homepages/puppy_chat/pictures/input_box_background.png and /dev/null differ
diff --git a/static/homepages/puppy_chat/pictures/send_button.png b/static/homepages/puppy_chat/pictures/send_button.png
deleted file mode 100644
index e378e15..0000000
Binary files a/static/homepages/puppy_chat/pictures/send_button.png and /dev/null differ
diff --git a/static/homepages/puppy_chat/pictures/user_avatar.png b/static/homepages/puppy_chat/pictures/user_avatar.png
deleted file mode 100644
index 2b887e4..0000000
Binary files a/static/homepages/puppy_chat/pictures/user_avatar.png and /dev/null differ
diff --git a/static/homepages/user/basic_information/back.png b/static/homepages/user/basic_information/back.png
deleted file mode 100644
index ac33336..0000000
Binary files a/static/homepages/user/basic_information/back.png and /dev/null differ
diff --git a/static/homepages/user/basic_information/but.png b/static/homepages/user/basic_information/but.png
deleted file mode 100644
index 1d1793a..0000000
Binary files a/static/homepages/user/basic_information/but.png and /dev/null differ
diff --git a/static/homepages/user/basic_information/button.png b/static/homepages/user/basic_information/button.png
deleted file mode 100644
index 7ef651c..0000000
Binary files a/static/homepages/user/basic_information/button.png and /dev/null differ
diff --git a/static/homepages/user/basic_information/head.png b/static/homepages/user/basic_information/head.png
deleted file mode 100644
index 34d2844..0000000
Binary files a/static/homepages/user/basic_information/head.png and /dev/null differ
diff --git a/static/homepages/user/basic_information/head_pic.png b/static/homepages/user/basic_information/head_pic.png
deleted file mode 100644
index f7a9513..0000000
Binary files a/static/homepages/user/basic_information/head_pic.png and /dev/null differ
diff --git a/static/homepages/user/basic_information/img.png b/static/homepages/user/basic_information/img.png
deleted file mode 100644
index 32bee67..0000000
Binary files a/static/homepages/user/basic_information/img.png and /dev/null differ
diff --git a/static/homepages/user/basic_information/self_back.png b/static/homepages/user/basic_information/self_back.png
deleted file mode 100644
index db07d5c..0000000
Binary files a/static/homepages/user/basic_information/self_back.png and /dev/null differ
diff --git a/static/homepages/user/basic_information/user_back.png b/static/homepages/user/basic_information/user_back.png
deleted file mode 100644
index 60c727c..0000000
Binary files a/static/homepages/user/basic_information/user_back.png and /dev/null differ
diff --git a/static/homepages/user/basic_information/user_name.png b/static/homepages/user/basic_information/user_name.png
deleted file mode 100644
index b62051b..0000000
Binary files a/static/homepages/user/basic_information/user_name.png and /dev/null differ
diff --git a/static/homepages/user/bmi_information/pictures/background.png b/static/homepages/user/bmi_information/pictures/background.png
deleted file mode 100644
index 8b941f8..0000000
Binary files a/static/homepages/user/bmi_information/pictures/background.png and /dev/null differ
diff --git a/static/homepages/user/bmi_information/pictures/button.png b/static/homepages/user/bmi_information/pictures/button.png
deleted file mode 100644
index 19e7e8c..0000000
Binary files a/static/homepages/user/bmi_information/pictures/button.png and /dev/null differ
diff --git a/static/homepages/user/bmi_information/pictures/submit_button.png b/static/homepages/user/bmi_information/pictures/submit_button.png
deleted file mode 100644
index 2266862..0000000
Binary files a/static/homepages/user/bmi_information/pictures/submit_button.png and /dev/null differ
diff --git a/static/homepages/user/bmi_information/pictures/text_background.png b/static/homepages/user/bmi_information/pictures/text_background.png
deleted file mode 100644
index 9e8bb3d..0000000
Binary files a/static/homepages/user/bmi_information/pictures/text_background.png and /dev/null differ
diff --git a/static/homepages/user/bmi_information/pictures/write.png b/static/homepages/user/bmi_information/pictures/write.png
deleted file mode 100644
index 91024aa..0000000
Binary files a/static/homepages/user/bmi_information/pictures/write.png and /dev/null differ
diff --git a/static/homepages/user/exercise_plans/pictures/background.png b/static/homepages/user/exercise_plans/pictures/background.png
deleted file mode 100644
index f00edde..0000000
Binary files a/static/homepages/user/exercise_plans/pictures/background.png and /dev/null differ
diff --git a/static/homepages/user/exercise_plans/pictures/button.png b/static/homepages/user/exercise_plans/pictures/button.png
deleted file mode 100644
index 19e7e8c..0000000
Binary files a/static/homepages/user/exercise_plans/pictures/button.png and /dev/null differ
diff --git a/static/homepages/user/exercise_plans/pictures/submit_button.png b/static/homepages/user/exercise_plans/pictures/submit_button.png
deleted file mode 100644
index 2266862..0000000
Binary files a/static/homepages/user/exercise_plans/pictures/submit_button.png and /dev/null differ
diff --git a/static/homepages/user/exercise_plans/pictures/text_background.png b/static/homepages/user/exercise_plans/pictures/text_background.png
deleted file mode 100644
index 9e8bb3d..0000000
Binary files a/static/homepages/user/exercise_plans/pictures/text_background.png and /dev/null differ
diff --git a/static/homepages/user/exercise_plans/pictures/write.png b/static/homepages/user/exercise_plans/pictures/write.png
deleted file mode 100644
index 119487d..0000000
Binary files a/static/homepages/user/exercise_plans/pictures/write.png and /dev/null differ
diff --git a/static/homepages/user/user/pictures/ad_button.png b/static/homepages/user/user/pictures/ad_button.png
deleted file mode 100644
index 321585c..0000000
Binary files a/static/homepages/user/user/pictures/ad_button.png and /dev/null differ
diff --git a/static/homepages/user/user/pictures/background.png b/static/homepages/user/user/pictures/background.png
deleted file mode 100644
index 7a6666f..0000000
Binary files a/static/homepages/user/user/pictures/background.png and /dev/null differ
diff --git a/static/homepages/user/user/pictures/bmi_button.png b/static/homepages/user/user/pictures/bmi_button.png
deleted file mode 100644
index 08c3061..0000000
Binary files a/static/homepages/user/user/pictures/bmi_button.png and /dev/null differ
diff --git a/static/homepages/user/user/pictures/button.png b/static/homepages/user/user/pictures/button.png
deleted file mode 100644
index 472ab5d..0000000
Binary files a/static/homepages/user/user/pictures/button.png and /dev/null differ
diff --git a/static/homepages/user/user/pictures/eat_button.png b/static/homepages/user/user/pictures/eat_button.png
deleted file mode 100644
index 58d4439..0000000
Binary files a/static/homepages/user/user/pictures/eat_button.png and /dev/null differ
diff --git a/static/homepages/user/user/pictures/female.png b/static/homepages/user/user/pictures/female.png
deleted file mode 100644
index ffd4fc0..0000000
Binary files a/static/homepages/user/user/pictures/female.png and /dev/null differ
diff --git a/static/homepages/user/user/pictures/head_button.png b/static/homepages/user/user/pictures/head_button.png
deleted file mode 100644
index 8dae942..0000000
Binary files a/static/homepages/user/user/pictures/head_button.png and /dev/null differ
diff --git a/static/homepages/user/user/pictures/head_pic.png b/static/homepages/user/user/pictures/head_pic.png
deleted file mode 100644
index e154b5e..0000000
Binary files a/static/homepages/user/user/pictures/head_pic.png and /dev/null differ
diff --git a/static/homepages/user/user/pictures/male.png b/static/homepages/user/user/pictures/male.png
deleted file mode 100644
index 9f3be1c..0000000
Binary files a/static/homepages/user/user/pictures/male.png and /dev/null differ
diff --git a/static/homepages/user/user/pictures/pie.png b/static/homepages/user/user/pictures/pie.png
deleted file mode 100644
index ec55b3f..0000000
Binary files a/static/homepages/user/user/pictures/pie.png and /dev/null differ
diff --git a/static/homepages/user/user/pictures/point.png b/static/homepages/user/user/pictures/point.png
deleted file mode 100644
index 737e30d..0000000
Binary files a/static/homepages/user/user/pictures/point.png and /dev/null differ
diff --git a/static/information/boy_height/pictures/bkg_roll.png b/static/information/boy_height/pictures/bkg_roll.png
deleted file mode 100644
index 7be6d5c..0000000
Binary files a/static/information/boy_height/pictures/bkg_roll.png and /dev/null differ
diff --git a/static/information/boy_height/pictures/button.png b/static/information/boy_height/pictures/button.png
deleted file mode 100644
index 6b4feba..0000000
Binary files a/static/information/boy_height/pictures/button.png and /dev/null differ
diff --git a/static/information/boy_height/pictures/button2.png b/static/information/boy_height/pictures/button2.png
deleted file mode 100644
index 3cbdbd9..0000000
Binary files a/static/information/boy_height/pictures/button2.png and /dev/null differ
diff --git a/static/information/boy_height/pictures/human.png b/static/information/boy_height/pictures/human.png
deleted file mode 100644
index 71a02e4..0000000
Binary files a/static/information/boy_height/pictures/human.png and /dev/null differ
diff --git a/static/information/boy_height/pictures/img.png b/static/information/boy_height/pictures/img.png
deleted file mode 100644
index 32bee67..0000000
Binary files a/static/information/boy_height/pictures/img.png and /dev/null differ
diff --git a/static/information/boy_height/pictures/progress.png b/static/information/boy_height/pictures/progress.png
deleted file mode 100644
index 5bcd3d9..0000000
Binary files a/static/information/boy_height/pictures/progress.png and /dev/null differ
diff --git a/static/information/boy_height/pictures/roll.png b/static/information/boy_height/pictures/roll.png
deleted file mode 100644
index 253e4fd..0000000
Binary files a/static/information/boy_height/pictures/roll.png and /dev/null differ
diff --git a/static/information/boy_weight/css/boy_weight_end.scss b/static/information/boy_weight/css/boy_weight_end.scss
deleted file mode 100644
index b7da157..0000000
--- a/static/information/boy_weight/css/boy_weight_end.scss
+++ /dev/null
@@ -1,60 +0,0 @@
-
-.background {
- background-image: url("/static/information/boy_weight/pictures/img.png");
- background-size: cover;
- background-position: center;
- height: 100vh;
- display: flex;
- align-items: center;
- justify-content: center;
- overflow: hidden;
- position: relative;
-}
-
-/* Human 动画,从页面中部向上移动 */
-.human {
- position: absolute;
- width: 100%;
- height: 90%;
- top:-10%;
- object-fit: contain; /* 保持图片比例 */
-}
-
-.progress{
- position: absolute;
- width: 77%;
- height: 7%;
- object-fit: contain; /* 保持图片比例 */
- opacity: 1;
- top: 2%; /* 根据需要调整位置 */
-}
-
-/* Text 延迟显示 */
-.roll {
- position: absolute;
- width: 77%;
- height: 20%;
- object-fit: contain; /* 保持图片比例 */
- opacity: 1;
- top: 55%; /* 根据需要调整位置 */
-}
-
-/* Button 延迟显示并加缩放特效,放在下方 */
-.button {
- position: absolute;
- height: 13%;
- width: 80%;
- opacity: 1;
- right: 10%; /* 距右边 10% */
- bottom: 2%; /* 距底部 3.5% */
-}
-
-.text{
- position: absolute;
- text-align: center;
- font-size: 1.5em;
- width: 100%;
- height: 20%;
- top: 69%;
- color:#ffffff;
-}
\ No newline at end of file
diff --git a/static/information/boy_weight/pictures/bkg_roll.png b/static/information/boy_weight/pictures/bkg_roll.png
deleted file mode 100644
index ac1e774..0000000
Binary files a/static/information/boy_weight/pictures/bkg_roll.png and /dev/null differ
diff --git a/static/information/boy_weight/pictures/button.png b/static/information/boy_weight/pictures/button.png
deleted file mode 100644
index 6b4feba..0000000
Binary files a/static/information/boy_weight/pictures/button.png and /dev/null differ
diff --git a/static/information/boy_weight/pictures/button2.png b/static/information/boy_weight/pictures/button2.png
deleted file mode 100644
index 3cbdbd9..0000000
Binary files a/static/information/boy_weight/pictures/button2.png and /dev/null differ
diff --git a/static/information/boy_weight/pictures/human.png b/static/information/boy_weight/pictures/human.png
deleted file mode 100644
index 81c2157..0000000
Binary files a/static/information/boy_weight/pictures/human.png and /dev/null differ
diff --git a/static/information/boy_weight/pictures/img.png b/static/information/boy_weight/pictures/img.png
deleted file mode 100644
index 32bee67..0000000
Binary files a/static/information/boy_weight/pictures/img.png and /dev/null differ
diff --git a/static/information/boy_weight/pictures/progress.png b/static/information/boy_weight/pictures/progress.png
deleted file mode 100644
index a977853..0000000
Binary files a/static/information/boy_weight/pictures/progress.png and /dev/null differ
diff --git a/static/information/boy_weight/pictures/roll.png b/static/information/boy_weight/pictures/roll.png
deleted file mode 100644
index fd78ade..0000000
Binary files a/static/information/boy_weight/pictures/roll.png and /dev/null differ
diff --git a/static/information/girl_height/css/girl_height_end.scss b/static/information/girl_height/css/girl_height_end.scss
deleted file mode 100644
index 93b38ea..0000000
--- a/static/information/girl_height/css/girl_height_end.scss
+++ /dev/null
@@ -1,59 +0,0 @@
-.background {
- background-image: url("/static/information/girl_height/pictures/img.png");
- background-size: cover;
- background-position: center;
- height: 100vh;
- display: flex;
- align-items: center;
- justify-content: center;
- overflow: hidden;
- position: relative;
-}
-
-
-.human {
- position: absolute;
- width: 100%;
- height: 90%;
- top:-10%;
- object-fit: contain; /* 保持图片比例 */
-}
-
-.progress{
- position: absolute;
- width: 77%;
- height: 7%;
- object-fit: contain; /* 保持图片比例 */
- opacity: 1;
- top: 2%; /* 根据需要调整位置 */
-}
-
-/* Text 延迟显示 */
-.roll {
- position: absolute;
- width: 77%;
- height: 20%;
- object-fit: contain; /* 保持图片比例 */
- opacity: 1;
- top: 55%; /* 根据需要调整位置 */
-}
-
-/* Button 延迟显示并加缩放特效,放在下方 */
-.button {
- position: absolute;
- height: 13%;
- width: 80%;
- opacity: 1;
- right: 10%; /* 距右边 10% */
- bottom: 2%; /* 距底部 3.5% */
-}
-
-.text{
- position: absolute;
- text-align: center;
- font-size: 1.5em;
- width: 100%;
- height: 20%;
- top: 69%;
- color:#ffffff;
-}
\ No newline at end of file
diff --git a/static/information/girl_height/css/girl_height_start.scss b/static/information/girl_height/css/girl_height_start.scss
deleted file mode 100644
index 8edb8b2..0000000
--- a/static/information/girl_height/css/girl_height_start.scss
+++ /dev/null
@@ -1,99 +0,0 @@
-.background {
- background-image: url("/static/information/girl_height/pictures/img.png");
- background-size: cover;
- background-position: center;
- height: 100vh;
- display: flex;
- align-items: center;
- justify-content: center;
- overflow: hidden;
- position: relative;
-}
-
-/* Human 动画,从页面中部向上移动 */
-.human {
- position: absolute;
- width: 100%;
- height: 90%;
- top:10%;
- object-fit: contain; /* 保持图片比例 */
- animation: moveUp 2s ease forwards;
- top: 30%; /* 起始位置 */
- transform: translateY(-50%); /* 垂直居中 */
-}
-
-.progress{
- position: absolute;
- width: 77%;
- height: 7%;
- object-fit: contain; /* 保持图片比例 */
- animation: fadeIn 1s ease 2s forwards; /* 2秒后显示 */
- opacity: 0;
- top: 2%; /* 根据需要调整位置 */
-}
-
-/* Text 延迟显示 */
-.roll {
- position: absolute;
- width: 77%;
- height: 20%;
- object-fit: contain; /* 保持图片比例 */
- animation: fadeIn 1s ease 2s forwards; /* 2秒后显示 */
- opacity: 0;
- top: 55%; /* 根据需要调整位置 */
-}
-
-/* Button 延迟显示并加缩放特效,放在下方 */
-.button {
- position: absolute;
- height: 13%;
- width: 80%;
- animation: fadeInScale 1s ease 2.5s forwards; /* 2.5秒后显示并缩放 */
- opacity: 0;
- right: 10%; /* 距右边 10% */
- bottom: 2%; /* 距底部 3.5% */
-}
-
-.text{
- position: absolute;
- font-size: 1.5em;
- text-align: center;
- width: 100%;
- height: 20%;
- top: 69%;
- animation: fadeIn 1s ease 2s forwards; /* 2秒后显示 */
- opacity: 0;
- color:#ffffff;
-}
-
-/* 定义 human 上移动画 */
-@keyframes moveUp {
- from {
- top: 55%;
- }
- to {
- top: 35%;
- }
-}
-
-/* Text 和 Button 的渐入动画 */
-@keyframes fadeIn {
- from {
- opacity: 0;
- }
- to {
- opacity: 1;
- }
-}
-
-/* Button 的缩放渐入动画 */
-@keyframes fadeInScale {
- from {
- opacity: 0;
- transform: scale(0.8);
- }
- to {
- opacity: 1;
- transform: scale(1);
- }
-}
\ No newline at end of file
diff --git a/static/information/girl_height/pictures/bkg_roll.png b/static/information/girl_height/pictures/bkg_roll.png
deleted file mode 100644
index 7be6d5c..0000000
Binary files a/static/information/girl_height/pictures/bkg_roll.png and /dev/null differ
diff --git a/static/information/girl_height/pictures/button.png b/static/information/girl_height/pictures/button.png
deleted file mode 100644
index 72d3cb0..0000000
Binary files a/static/information/girl_height/pictures/button.png and /dev/null differ
diff --git a/static/information/girl_height/pictures/button2.png b/static/information/girl_height/pictures/button2.png
deleted file mode 100644
index 3cbdbd9..0000000
Binary files a/static/information/girl_height/pictures/button2.png and /dev/null differ
diff --git a/static/information/girl_height/pictures/human.png b/static/information/girl_height/pictures/human.png
deleted file mode 100644
index c0447d2..0000000
Binary files a/static/information/girl_height/pictures/human.png and /dev/null differ
diff --git a/static/information/girl_height/pictures/img.png b/static/information/girl_height/pictures/img.png
deleted file mode 100644
index 32bee67..0000000
Binary files a/static/information/girl_height/pictures/img.png and /dev/null differ
diff --git a/static/information/girl_height/pictures/progress.png b/static/information/girl_height/pictures/progress.png
deleted file mode 100644
index 5bcd3d9..0000000
Binary files a/static/information/girl_height/pictures/progress.png and /dev/null differ
diff --git a/static/information/girl_height/pictures/roll.png b/static/information/girl_height/pictures/roll.png
deleted file mode 100644
index 3a429ed..0000000
Binary files a/static/information/girl_height/pictures/roll.png and /dev/null differ
diff --git a/static/information/girl_weight/pictures/bkg_roll.png b/static/information/girl_weight/pictures/bkg_roll.png
deleted file mode 100644
index cc5f7a5..0000000
Binary files a/static/information/girl_weight/pictures/bkg_roll.png and /dev/null differ
diff --git a/static/information/girl_weight/pictures/button.png b/static/information/girl_weight/pictures/button.png
deleted file mode 100644
index cb196c4..0000000
Binary files a/static/information/girl_weight/pictures/button.png and /dev/null differ
diff --git a/static/information/girl_weight/pictures/button_roll.png b/static/information/girl_weight/pictures/button_roll.png
deleted file mode 100644
index 85257ce..0000000
Binary files a/static/information/girl_weight/pictures/button_roll.png and /dev/null differ
diff --git a/static/information/girl_weight/pictures/human.png b/static/information/girl_weight/pictures/human.png
deleted file mode 100644
index 7f91660..0000000
Binary files a/static/information/girl_weight/pictures/human.png and /dev/null differ
diff --git a/static/information/girl_weight/pictures/img.png b/static/information/girl_weight/pictures/img.png
deleted file mode 100644
index 32bee67..0000000
Binary files a/static/information/girl_weight/pictures/img.png and /dev/null differ
diff --git a/static/information/girl_weight/pictures/progress.png b/static/information/girl_weight/pictures/progress.png
deleted file mode 100644
index f07a6b1..0000000
Binary files a/static/information/girl_weight/pictures/progress.png and /dev/null differ
diff --git a/static/information/girl_weight/pictures/roll.png b/static/information/girl_weight/pictures/roll.png
deleted file mode 100644
index d9a3a56..0000000
Binary files a/static/information/girl_weight/pictures/roll.png and /dev/null differ
diff --git a/static/information/purpose/pictures/background.png b/static/information/purpose/pictures/background.png
deleted file mode 100644
index e5b63a9..0000000
Binary files a/static/information/purpose/pictures/background.png and /dev/null differ
diff --git a/static/information/purpose/pictures/button.png b/static/information/purpose/pictures/button.png
deleted file mode 100644
index 6f52f38..0000000
Binary files a/static/information/purpose/pictures/button.png and /dev/null differ
diff --git a/static/information/purpose/pictures/dot1.png b/static/information/purpose/pictures/dot1.png
deleted file mode 100644
index b3b6c2d..0000000
Binary files a/static/information/purpose/pictures/dot1.png and /dev/null differ
diff --git a/static/information/purpose/pictures/dot2.png b/static/information/purpose/pictures/dot2.png
deleted file mode 100644
index d4de8a7..0000000
Binary files a/static/information/purpose/pictures/dot2.png and /dev/null differ
diff --git a/static/information/purpose/pictures/dot3.png b/static/information/purpose/pictures/dot3.png
deleted file mode 100644
index 8b8af32..0000000
Binary files a/static/information/purpose/pictures/dot3.png and /dev/null differ
diff --git a/static/information/purpose/pictures/dot4.png b/static/information/purpose/pictures/dot4.png
deleted file mode 100644
index 5afd54e..0000000
Binary files a/static/information/purpose/pictures/dot4.png and /dev/null differ
diff --git a/static/information/purpose/pictures/dot5.png b/static/information/purpose/pictures/dot5.png
deleted file mode 100644
index 5e78c76..0000000
Binary files a/static/information/purpose/pictures/dot5.png and /dev/null differ
diff --git a/static/information/purpose/pictures/picture1.png b/static/information/purpose/pictures/picture1.png
deleted file mode 100644
index 6e21bd1..0000000
Binary files a/static/information/purpose/pictures/picture1.png and /dev/null differ
diff --git a/static/information/purpose/pictures/picture2.png b/static/information/purpose/pictures/picture2.png
deleted file mode 100644
index a15233a..0000000
Binary files a/static/information/purpose/pictures/picture2.png and /dev/null differ
diff --git a/static/information/purpose/pictures/picture3.png b/static/information/purpose/pictures/picture3.png
deleted file mode 100644
index 0accbae..0000000
Binary files a/static/information/purpose/pictures/picture3.png and /dev/null differ
diff --git a/static/information/purpose/pictures/picture4.png b/static/information/purpose/pictures/picture4.png
deleted file mode 100644
index 133f468..0000000
Binary files a/static/information/purpose/pictures/picture4.png and /dev/null differ
diff --git a/static/information/purpose/pictures/picture5.png b/static/information/purpose/pictures/picture5.png
deleted file mode 100644
index ba7eeed..0000000
Binary files a/static/information/purpose/pictures/picture5.png and /dev/null differ
diff --git a/static/information/sex/css/sex.css b/static/information/sex/css/sex.css
deleted file mode 100644
index 67b1005..0000000
--- a/static/information/sex/css/sex.css
+++ /dev/null
@@ -1,82 +0,0 @@
-
-.background {
- background-image: url("/static/information/sex/pictures/background.png");
- background-size: cover;
- background-position: center;
- height: 100vh;
- display: flex;
- flex-direction: column; /* 纵向排列 */
- align-items: center; /* 水平居中 */
- justify-content: flex-end; /* 使内容向底部对齐 */
- position: relative; /* 为绝对定位子元素提供相对定位的上下文 */
-}
-
-.boy_image {
- position: absolute; /* 绝对定位 */
- width: 30%;
- height: 16%;
- bottom: 33%; /* 距离底部 20% 的位置 */
- left: 10%; /* 水平居中 */
-}
-
-.girl_image {
- position: absolute; /* 绝对定位 */
- width: 30%;
- height: 16%;
- bottom: 33%; /* 距离底部 20% 的位置 */
- right: 10%; /* 水平居中 */
-}
-
-.button {
- position: absolute; /* 绝对定位 */
- width: 90%;
- height: 12%;
- bottom: 2%; /* 距离底部 20% 的位置 */
- left: 50%; /* 水平居中 */
- transform: translateX(-50%); /* 通过 translateX 使其居中 */
-}
-
-
-.boy_image,
-.girl_image {
- transition: transform 0.3s ease; /* 设置过渡效果 */
-}
-
-.boy_image:hover,
-.girl_image:hover {
- transform: scale(1.1); /* 鼠标悬浮时放大 */
-}
-.human{
- height: 30%;
- width: 80%;
- bottom: 55%;
-
-
-
-
-}
-@keyframes slideInLeft {
- from {
- transform: translateX(-100%);
- }
- to {
- transform: translateX(0);
- }
-}
-
-@keyframes slideInRight {
- from {
- transform: translateX(100%);
- }
- to {
- transform: translateX(0);
- }
-}
-
-.slide-in-left {
- animation: slideInLeft 0.5s ease forwards;
-}
-
-.slide-in-right {
- animation: slideInRight 0.5s ease forwards;
-}
diff --git a/static/information/sex/pictures/background.png b/static/information/sex/pictures/background.png
deleted file mode 100644
index 61767a9..0000000
Binary files a/static/information/sex/pictures/background.png and /dev/null differ
diff --git a/static/information/sex/pictures/boy.png b/static/information/sex/pictures/boy.png
deleted file mode 100644
index 6c673a5..0000000
Binary files a/static/information/sex/pictures/boy.png and /dev/null differ
diff --git a/static/information/sex/pictures/button.png b/static/information/sex/pictures/button.png
deleted file mode 100644
index 72d3cb0..0000000
Binary files a/static/information/sex/pictures/button.png and /dev/null differ
diff --git a/static/information/sex/pictures/girl.png b/static/information/sex/pictures/girl.png
deleted file mode 100644
index b38e310..0000000
Binary files a/static/information/sex/pictures/girl.png and /dev/null differ
diff --git a/static/information/sex/pictures/human.png b/static/information/sex/pictures/human.png
deleted file mode 100644
index 65e9e97..0000000
Binary files a/static/information/sex/pictures/human.png and /dev/null differ
diff --git a/static/information/sex/pictures/shift_boy.png b/static/information/sex/pictures/shift_boy.png
deleted file mode 100644
index f87ed18..0000000
Binary files a/static/information/sex/pictures/shift_boy.png and /dev/null differ
diff --git a/static/information/sex/pictures/shift_girl.png b/static/information/sex/pictures/shift_girl.png
deleted file mode 100644
index 91863ca..0000000
Binary files a/static/information/sex/pictures/shift_girl.png and /dev/null differ
diff --git a/static/login/account_login/background.png b/static/login/account_login/background.png
deleted file mode 100644
index 19903d8..0000000
Binary files a/static/login/account_login/background.png and /dev/null differ
diff --git a/static/login/account_login/css/acccount_login.scss b/static/login/account_login/css/acccount_login.scss
deleted file mode 100644
index e986918..0000000
--- a/static/login/account_login/css/acccount_login.scss
+++ /dev/null
@@ -1,221 +0,0 @@
-.background{
- background-image: url("@/static/login/account_login/background.png");
- background-size: cover;
- background-position: center;
- height: 100vh;
- width: auto;
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- position: relative;
- object-fit: contain;
- .welcome{
- position: absolute;
- width: 62%;
- height: 19%;
- top: 20%;
- object-fit: contain;
- }
- .login_part{
- /* 登录 */
- position: absolute;
- width: 76%;
- height: 30%;
- top: 41%;
- .login_ways{
- position: absolute;
- width: 58%;
- height: 8.1%;
- display: flex;
- .account_words{
- height: 90%;
- margin-right: 5%;
- padding-bottom: 0.5rem;
- border-bottom: 1rem solid #094ABC;
- font-family: 'PingFang SC';
- font-style: normal;
- font-weight: 400;
- font-size: 1rem;
- text-align: center;
- color: #000364;
- }
- .captcha_words{
- height: 90%;
- padding-bottom: 0.5rem;
- margin-left: 3%;
- font-family: 'PingFang SC';
- font-style: normal;
- font-weight: 400;
- font-size: 1rem;
- text-align: center;
- color: #000364;
- }
- }
- .login_form{
- position: absolute;
- width: 97.8%;
- height: 73.1%;
- top: 20%;
- .form_input{
- position: absolute;
- width: 100%;
- height: 100%;
- .login_form_item{
- height: auto;
- margin-bottom: 5%;
- .form_input_box{
- padding-left: 3%;
- padding-right: 3%;
- background-color: #D5E9FF;
- border-radius: 12px;
- }
- .error_tip{
- margin-top: 0.6vh;
- padding-left: 3%;
- font-size: 0.8rem;
- color: #FF1E1E;
- }
- }
- .account_box{
- display: flex;
- flex-direction: column;
- .account{
- height: 5.5vh;
- padding-left: 11%;
- background-image: url("@/static/login/account_login/login_part/phone_icon.png");
- background-repeat: no-repeat;
- background-size: 0.8rem;
- background-position: 3% 50%;
- background-color: #D5E9FF;
- font-size: 0.8rem;
- }
- }
- .passage_box{
- display: flex;
- flex-direction: column;
- .passage_input_box{
- display: flex;
- align-items: center;
- background-color: #D5E9FF;
- border-radius: 12px;
- position: relative;
- .passage{
- height: 5.5vh;
- padding-left: 11%;
- background-image: url("@/static/login/account_login/login_part/lock_icon.png");
- background-repeat: no-repeat;
- background-size: 0.8rem;
- background-position: 4.7% 50%;
- font-size: 0.8rem;
- }
- .eyes{
- width: 1rem;
- height: 1rem;
- position: absolute;
- right: 13%;
- }
- }
- }
- .captcha_box{
- display: flex;
- flex-direction: column;
- .captcha_input_box{
- display: flex;
- align-items: center;
- padding-left: 3%;
- background-color: #D5E9FF;
- border-radius: 12px;
- position: relative;
- .captcha{
- height: 5.5vh;
- padding-left: 11%;
- background-image: url("@/static/login/account_login/login_part/captcha_icon.png");
- background-repeat: no-repeat;
- background-size: 0.8rem;
- background-position: 4.5% 50%;
- font-size: 0.8rem;
- }
- .captcha_button{
- /* 发送验证码 */
- width: 5.5rem;
- height: 1.9rem;
- border-radius: 15px;
- font-size: 0.8rem;
- color: #000364;
- position: absolute;
- right: 5%;
- }
- }
- }
- .forget_passage{
- margin-bottom: 0.4rem;
- margin-top: 1.2rem;
- text-align: right;
- color: #000364;
- font-family: 'PingFang SC';
- font-style: normal;
- font-weight: 24rems;
- font-size: 0.8rem;
- // line-height: 24px;
- }
- .login_button{
- display: flex;
- align-items: center;
- justify-content: center;
- height: 5.5vh;
- border-radius: 12px;
- background-color: #4A69F7;
- color: #FFFCFC;
- text-align: center;
- font-size: 1.2rem;
- }
- }
- }
- }
- .goto_register{
- position: absolute;
- width: 14%;
- height: 2%;
- top: 78%;
- left: 43%;
- object-fit: contain;
- }
- .otherways_part{
- position: absolute;
- width: 59%;
- height: 10.9%;
- top: 82%;
- .otherways_tips{
- position: absolute;
- width: 98.6%;
- height: 24%;
- top: 0%;
- }
- .two_ways{
- /* 图标 */
- position: absolute;
- width: 46.9%;
- height: 50%;
- left: 26.6%;
- top: 35%;
- display: flex;
- justify-content: center;
- align-items: center;
- .qq_icon{
- /* qq图标 */
- position: absolute;
- width: 2.6rem;
- height: 2.6rem;
- left: 0%;
- }
- .weixin_icon{
- /* 微信图标 */
- position: absolute;
- width: 2.2rem;
- height: 2.2rem;
- left: 50%;
- }
- }
- }
-}
\ No newline at end of file
diff --git a/static/login/account_login/login_part/account_line.png b/static/login/account_login/login_part/account_line.png
deleted file mode 100644
index 614c08c..0000000
Binary files a/static/login/account_login/login_part/account_line.png and /dev/null differ
diff --git a/static/login/account_login/login_part/captcha_icon.png b/static/login/account_login/login_part/captcha_icon.png
deleted file mode 100644
index d0c16f3..0000000
Binary files a/static/login/account_login/login_part/captcha_icon.png and /dev/null differ
diff --git a/static/login/account_login/login_part/closedeyes.png b/static/login/account_login/login_part/closedeyes.png
deleted file mode 100644
index 73ca339..0000000
Binary files a/static/login/account_login/login_part/closedeyes.png and /dev/null differ
diff --git a/static/login/account_login/login_part/lock_icon.png b/static/login/account_login/login_part/lock_icon.png
deleted file mode 100644
index 5999bc3..0000000
Binary files a/static/login/account_login/login_part/lock_icon.png and /dev/null differ
diff --git a/static/login/account_login/login_part/openedeyes.png b/static/login/account_login/login_part/openedeyes.png
deleted file mode 100644
index 6582f62..0000000
Binary files a/static/login/account_login/login_part/openedeyes.png and /dev/null differ
diff --git a/static/login/account_login/login_part/phone_icon.png b/static/login/account_login/login_part/phone_icon.png
deleted file mode 100644
index 8a6a7ce..0000000
Binary files a/static/login/account_login/login_part/phone_icon.png and /dev/null differ
diff --git a/static/login/account_login/other_ways.png b/static/login/account_login/other_ways.png
deleted file mode 100644
index 9e85a42..0000000
Binary files a/static/login/account_login/other_ways.png and /dev/null differ
diff --git a/static/login/account_login/qq_icon.png b/static/login/account_login/qq_icon.png
deleted file mode 100644
index 0769e77..0000000
Binary files a/static/login/account_login/qq_icon.png and /dev/null differ
diff --git a/static/login/account_login/register.png b/static/login/account_login/register.png
deleted file mode 100644
index 093bbbf..0000000
Binary files a/static/login/account_login/register.png and /dev/null differ
diff --git a/static/login/account_login/weixin_icon.png b/static/login/account_login/weixin_icon.png
deleted file mode 100644
index cf289d5..0000000
Binary files a/static/login/account_login/weixin_icon.png and /dev/null differ
diff --git a/static/login/account_login/welcome.png b/static/login/account_login/welcome.png
deleted file mode 100644
index 931b57a..0000000
Binary files a/static/login/account_login/welcome.png and /dev/null differ
diff --git a/static/login/change_password/css/change_password.scss b/static/login/change_password/css/change_password.scss
deleted file mode 100644
index 63db798..0000000
--- a/static/login/change_password/css/change_password.scss
+++ /dev/null
@@ -1,97 +0,0 @@
-.change_password_box{
- background-image: url("@/static/login/change_password/pictures/background.png");
- background-size: cover;
- background-position: center;
- height: 100vh;
- width: auto;
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- position: relative;
- object-fit: contain;
- // 返回图标
- .return_image{
- position: absolute;
- left: 16.5%;
- right: 80.1%;
- top: 8.62%;
- bottom: 89.09%;
- width: 0.8rem;
- height: auto;
- object-fit: contain;
- }
- //修改密码文字
- .change_passage_words{
- position: absolute;
- left: 12.4%;
- top: 30.8%;
- font-family: 'PingFang SC';
- font-size: 1.4rem;
- color: #000364;
- }
- //修改密码表单
- .change_password_form{
- position: absolute;
- width: 74.5%;
- height: 33.6%;
- top: 40%;
- //每个表单项
- .change_password_form_item{
- height: auto;
- margin-bottom: 5%;
- .form_input_box{
- padding-left: 3%;
- padding-right: 3%;
- background-color: #D5E9FF;
- border-radius: 12px;
- }
- .error_tip{
- margin-top: 0.6vh;
- padding-left: 3%;
- font-size: 0.8rem;
- color: #FF1E1E;
- }
- }
- //密码输入盒子;确认密码盒子
- .passage_box{
- display: flex;
- flex-direction: column;
- .passage_input_box{
- display: flex;
- align-items: center;
- background-color: #D5E9FF;
- border-radius: 12px;
- position: relative;
- .passage{
- height: 5.5vh;
- padding-left: 11%;
- background-image: url("@/static/login/change_password/pictures/lock_icon.png");
- background-repeat: no-repeat;
- background-size: 0.8rem;
- background-position: 4.7% 50%;
- font-size: 0.8rem;
- }
- .eyes{
- width: 1rem;
- height: 1rem;
- position: absolute;
- right: 13%;
- }
- }
- }
- //确认修改按钮
- .ensure_button{
- display: flex;
- align-items: center;
- justify-content: center;
- margin-top: 8%;
- height: 5.5vh;
- border-radius: 12px;
- background-color: #4A69F7;
- color: #FFFCFC;
- text-align: center;
- font-size: 1.2rem;
- }
- }
-}
\ No newline at end of file
diff --git a/static/login/change_password/pictures/background.png b/static/login/change_password/pictures/background.png
deleted file mode 100644
index 19903d8..0000000
Binary files a/static/login/change_password/pictures/background.png and /dev/null differ
diff --git a/static/login/change_password/pictures/closedeyes.png b/static/login/change_password/pictures/closedeyes.png
deleted file mode 100644
index 73ca339..0000000
Binary files a/static/login/change_password/pictures/closedeyes.png and /dev/null differ
diff --git a/static/login/change_password/pictures/lock_icon.png b/static/login/change_password/pictures/lock_icon.png
deleted file mode 100644
index 5999bc3..0000000
Binary files a/static/login/change_password/pictures/lock_icon.png and /dev/null differ
diff --git a/static/login/change_password/pictures/openedeyes.png b/static/login/change_password/pictures/openedeyes.png
deleted file mode 100644
index 6582f62..0000000
Binary files a/static/login/change_password/pictures/openedeyes.png and /dev/null differ
diff --git a/static/login/change_password/pictures/return_icon.png b/static/login/change_password/pictures/return_icon.png
deleted file mode 100644
index c3c6044..0000000
Binary files a/static/login/change_password/pictures/return_icon.png and /dev/null differ
diff --git a/static/login/forget_password/pictures/background.png b/static/login/forget_password/pictures/background.png
deleted file mode 100644
index 19903d8..0000000
Binary files a/static/login/forget_password/pictures/background.png and /dev/null differ
diff --git a/static/login/forget_password/pictures/captcha_icon.png b/static/login/forget_password/pictures/captcha_icon.png
deleted file mode 100644
index d0c16f3..0000000
Binary files a/static/login/forget_password/pictures/captcha_icon.png and /dev/null differ
diff --git a/static/login/forget_password/pictures/phone_icon.png b/static/login/forget_password/pictures/phone_icon.png
deleted file mode 100644
index 8a6a7ce..0000000
Binary files a/static/login/forget_password/pictures/phone_icon.png and /dev/null differ
diff --git a/static/login/forget_password/pictures/return_icon.png b/static/login/forget_password/pictures/return_icon.png
deleted file mode 100644
index c3c6044..0000000
Binary files a/static/login/forget_password/pictures/return_icon.png and /dev/null differ
diff --git a/static/login/phone_login/pictures/img.png b/static/login/phone_login/pictures/img.png
deleted file mode 100644
index 32bee67..0000000
Binary files a/static/login/phone_login/pictures/img.png and /dev/null differ
diff --git a/static/login/register/css/register.scss b/static/login/register/css/register.scss
deleted file mode 100644
index edb86b9..0000000
--- a/static/login/register/css/register.scss
+++ /dev/null
@@ -1,153 +0,0 @@
-.register_box{
- background-image: url("@/static/login/register/pictures/background.png");
- background-size: cover;
- background-position: center;
- height: 100vh;
- width: auto;
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- position: relative;
- object-fit: contain;
- // 返回图标
- .return_image{
- position: absolute;
- left: 16.5%;
- right: 80.1%;
- top: 8.62%;
- bottom: 89.09%;
- width: 0.8rem;
- height: auto;
- object-fit: contain;
- }
- //欢迎文字
- .welcom_words{
- position: absolute;
- left: 12.4%;
- top: 30.8%;
- font-family: 'PingFang SC';
- font-size: 1.4rem;
- color: #000364;
- }
- //软件名称
- .soft_name{
- position: absolute;
- left: 12.4%;
- top: 34.5%;
- font-family: 'PingFang SC';
- font-size: 1rem;
- color: #000364;
- }
- //注册表单
- .register_form{
- position: absolute;
- width: 74.5%;
- height: 33.6%;
- top: 40%;
- //每个表单项
- .register_form_item{
- height: auto;
- margin-bottom: 5%;
- .form_input_box{
- padding-left: 3%;
- padding-right: 3%;
- background-color: #D5E9FF;
- border-radius: 12px;
- }
- .error_tip{
- margin-top: 0.6vh;
- padding-left: 3%;
- font-size: 0.8rem;
- color: #FF1E1E;
- }
- }
- //手机号盒子
- .phone_number_box{
- display: flex;
- flex-direction: column;
- .phone_number{
- height: 5.5vh;
- padding-left: 11%;
- background-image: url("@/static/login/register/pictures/phone_icon.png");
- background-repeat: no-repeat;
- background-size: 0.8rem;
- background-position: 3% 50%;
- background-color: #D5E9FF;
- font-size: 0.8rem;
- }
- }
- // 验证码盒子
- .captcha_box{
- display: flex;
- flex-direction: column;
- .captcha_input_box{
- display: flex;
- align-items: center;
- padding-left: 3%;
- background-color: #D5E9FF;
- border-radius: 12px;
- position: relative;
- .captcha{
- height: 5.5vh;
- padding-left: 11%;
- background-image: url("@/static/login/register/pictures/captcha_icon.png");
- background-repeat: no-repeat;
- background-size: 0.8rem;
- background-position: 4.5% 50%;
- font-size: 0.8rem;
- }
- .captcha_button{
- /* 发送验证码 */
- width: 5.5rem;
- height: 1.9rem;
- border-radius: 15px;
- font-size: 0.8rem;
- color: #000364;
- position: absolute;
- right: 5%;
- }
- }
- }
- //密码输入盒子;确认密码盒子
- .passage_box{
- display: flex;
- flex-direction: column;
- .passage_input_box{
- display: flex;
- align-items: center;
- background-color: #D5E9FF;
- border-radius: 12px;
- position: relative;
- .passage{
- height: 5.5vh;
- padding-left: 11%;
- background-image: url("@/static/login/register/pictures/lock_icon.png");
- background-repeat: no-repeat;
- background-size: 0.8rem;
- background-position: 4.7% 50%;
- font-size: 0.8rem;
- }
- .eyes{
- width: 1rem;
- height: 1rem;
- position: absolute;
- right: 13%;
- }
- }
- }
- //注册按钮
- .register_button{
- display: flex;
- align-items: center;
- justify-content: center;
- margin-top: 8%;
- height: 5.5vh;
- border-radius: 12px;
- background-color: #4A69F7;
- color: #FFFCFC;
- text-align: center;
- font-size: 1.2rem;
- }
- }
-}
diff --git a/static/login/register/pictures/background.png b/static/login/register/pictures/background.png
deleted file mode 100644
index 19903d8..0000000
Binary files a/static/login/register/pictures/background.png and /dev/null differ
diff --git a/static/login/register/pictures/captcha_icon.png b/static/login/register/pictures/captcha_icon.png
deleted file mode 100644
index d0c16f3..0000000
Binary files a/static/login/register/pictures/captcha_icon.png and /dev/null differ
diff --git a/static/login/register/pictures/closedeyes.png b/static/login/register/pictures/closedeyes.png
deleted file mode 100644
index 73ca339..0000000
Binary files a/static/login/register/pictures/closedeyes.png and /dev/null differ
diff --git a/static/login/register/pictures/img.png b/static/login/register/pictures/img.png
deleted file mode 100644
index 32bee67..0000000
Binary files a/static/login/register/pictures/img.png and /dev/null differ
diff --git a/static/login/register/pictures/lock_icon.png b/static/login/register/pictures/lock_icon.png
deleted file mode 100644
index 5999bc3..0000000
Binary files a/static/login/register/pictures/lock_icon.png and /dev/null differ
diff --git a/static/login/register/pictures/openedeyes.png b/static/login/register/pictures/openedeyes.png
deleted file mode 100644
index 6582f62..0000000
Binary files a/static/login/register/pictures/openedeyes.png and /dev/null differ
diff --git a/static/login/register/pictures/phone_icon.png b/static/login/register/pictures/phone_icon.png
deleted file mode 100644
index 8a6a7ce..0000000
Binary files a/static/login/register/pictures/phone_icon.png and /dev/null differ
diff --git a/static/login/register/pictures/return_icon.png b/static/login/register/pictures/return_icon.png
deleted file mode 100644
index c3c6044..0000000
Binary files a/static/login/register/pictures/return_icon.png and /dev/null differ
diff --git a/static/transition/page1/pictures/page1.png b/static/transition/page1/pictures/page1.png
deleted file mode 100644
index ac09e8c..0000000
Binary files a/static/transition/page1/pictures/page1.png and /dev/null differ
diff --git a/static/transition/page2/pictures/background.png b/static/transition/page2/pictures/background.png
deleted file mode 100644
index 4c4b6cf..0000000
Binary files a/static/transition/page2/pictures/background.png and /dev/null differ
diff --git a/static/transition/page2/pictures/button.png b/static/transition/page2/pictures/button.png
deleted file mode 100644
index 17c202e..0000000
Binary files a/static/transition/page2/pictures/button.png and /dev/null differ
diff --git a/static/transition/page3/pictures/Button.png b/static/transition/page3/pictures/Button.png
deleted file mode 100644
index 149f156..0000000
Binary files a/static/transition/page3/pictures/Button.png and /dev/null differ
diff --git a/static/transition/page3/pictures/background.png b/static/transition/page3/pictures/background.png
deleted file mode 100644
index fccc1e2..0000000
Binary files a/static/transition/page3/pictures/background.png and /dev/null differ
diff --git a/static/transition/page3/pictures/blue_background.png b/static/transition/page3/pictures/blue_background.png
deleted file mode 100644
index b613ddf..0000000
Binary files a/static/transition/page3/pictures/blue_background.png and /dev/null differ
diff --git a/static/transition/page3/pictures/human.png b/static/transition/page3/pictures/human.png
deleted file mode 100644
index 53f8ecc..0000000
Binary files a/static/transition/page3/pictures/human.png and /dev/null differ
diff --git a/static/transition/page3/pictures/text.png b/static/transition/page3/pictures/text.png
deleted file mode 100644
index fecd728..0000000
Binary files a/static/transition/page3/pictures/text.png and /dev/null differ
diff --git a/static/transition/page4/pictures/background.png b/static/transition/page4/pictures/background.png
deleted file mode 100644
index fccc1e2..0000000
Binary files a/static/transition/page4/pictures/background.png and /dev/null differ
diff --git a/static/transition/page4/pictures/blue_background.png b/static/transition/page4/pictures/blue_background.png
deleted file mode 100644
index b613ddf..0000000
Binary files a/static/transition/page4/pictures/blue_background.png and /dev/null differ
diff --git a/static/transition/page4/pictures/button.png b/static/transition/page4/pictures/button.png
deleted file mode 100644
index 149f156..0000000
Binary files a/static/transition/page4/pictures/button.png and /dev/null differ
diff --git a/static/transition/page4/pictures/human.png b/static/transition/page4/pictures/human.png
deleted file mode 100644
index 039f2b2..0000000
Binary files a/static/transition/page4/pictures/human.png and /dev/null differ
diff --git a/static/transition/page4/pictures/text.png b/static/transition/page4/pictures/text.png
deleted file mode 100644
index 105797c..0000000
Binary files a/static/transition/page4/pictures/text.png and /dev/null differ
diff --git a/static/transition/page5/pictures/background.png b/static/transition/page5/pictures/background.png
deleted file mode 100644
index fccc1e2..0000000
Binary files a/static/transition/page5/pictures/background.png and /dev/null differ
diff --git a/static/transition/page5/pictures/blue_background.png b/static/transition/page5/pictures/blue_background.png
deleted file mode 100644
index 4ad1dbc..0000000
Binary files a/static/transition/page5/pictures/blue_background.png and /dev/null differ
diff --git a/static/transition/page5/pictures/button.png b/static/transition/page5/pictures/button.png
deleted file mode 100644
index 7ab8dfb..0000000
Binary files a/static/transition/page5/pictures/button.png and /dev/null differ
diff --git a/static/transition/page5/pictures/human.png b/static/transition/page5/pictures/human.png
deleted file mode 100644
index 7c80ddd..0000000
Binary files a/static/transition/page5/pictures/human.png and /dev/null differ
diff --git a/static/transition/page5/pictures/text.png b/static/transition/page5/pictures/text.png
deleted file mode 100644
index 93fd810..0000000
Binary files a/static/transition/page5/pictures/text.png and /dev/null differ
diff --git a/static/transition/page6/pictures/background.png b/static/transition/page6/pictures/background.png
deleted file mode 100644
index fccc1e2..0000000
Binary files a/static/transition/page6/pictures/background.png and /dev/null differ
diff --git a/static/transition/page6/pictures/blue_background.png b/static/transition/page6/pictures/blue_background.png
deleted file mode 100644
index a586b81..0000000
Binary files a/static/transition/page6/pictures/blue_background.png and /dev/null differ
diff --git a/static/transition/page6/pictures/button.png b/static/transition/page6/pictures/button.png
deleted file mode 100644
index e918839..0000000
Binary files a/static/transition/page6/pictures/button.png and /dev/null differ
diff --git a/static/transition/page6/pictures/human.png b/static/transition/page6/pictures/human.png
deleted file mode 100644
index d61d2bf..0000000
Binary files a/static/transition/page6/pictures/human.png and /dev/null differ
diff --git a/static/transition/page6/pictures/text.png b/static/transition/page6/pictures/text.png
deleted file mode 100644
index d508d40..0000000
Binary files a/static/transition/page6/pictures/text.png and /dev/null differ
diff --git a/static/transition/page7/pictures/background.png b/static/transition/page7/pictures/background.png
deleted file mode 100644
index 7fb69d9..0000000
Binary files a/static/transition/page7/pictures/background.png and /dev/null differ
diff --git a/static/transition/page7/pictures/button.png b/static/transition/page7/pictures/button.png
deleted file mode 100644
index c49ad6d..0000000
Binary files a/static/transition/page7/pictures/button.png and /dev/null differ
diff --git a/static/transition/page8/pictures/background.png b/static/transition/page8/pictures/background.png
deleted file mode 100644
index b94fbf2..0000000
Binary files a/static/transition/page8/pictures/background.png and /dev/null differ
diff --git a/static/transition/page8/pictures/button.png b/static/transition/page8/pictures/button.png
deleted file mode 100644
index fb3aa07..0000000
Binary files a/static/transition/page8/pictures/button.png and /dev/null differ
diff --git a/uni.promisify.adaptor.js b/uni.promisify.adaptor.js
deleted file mode 100644
index 47fbce1..0000000
--- a/uni.promisify.adaptor.js
+++ /dev/null
@@ -1,10 +0,0 @@
-uni.addInterceptor({
- returnValue (res) {
- if (!(!!res && (typeof res === "object" || typeof res === "function") && typeof res.then === "function")) {
- return res;
- }
- return new Promise((resolve, reject) => {
- res.then((res) => res[0] ? reject(res[0]) : resolve(res[1]));
- });
- },
-});
\ No newline at end of file
diff --git a/uni.scss b/uni.scss
deleted file mode 100644
index b9249e9..0000000
--- a/uni.scss
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * 这里是uni-app内置的常用样式变量
- *
- * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
- * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
- *
- */
-
-/**
- * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
- *
- * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
- */
-
-/* 颜色变量 */
-
-/* 行为相关颜色 */
-$uni-color-primary: #007aff;
-$uni-color-success: #4cd964;
-$uni-color-warning: #f0ad4e;
-$uni-color-error: #dd524d;
-
-/* 文字基本颜色 */
-$uni-text-color:#333;//基本色
-$uni-text-color-inverse:#fff;//反色
-$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
-$uni-text-color-placeholder: #808080;
-$uni-text-color-disable:#c0c0c0;
-
-/* 背景颜色 */
-$uni-bg-color:#ffffff;
-$uni-bg-color-grey:#f8f8f8;
-$uni-bg-color-hover:#f1f1f1;//点击状态颜色
-$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
-
-/* 边框颜色 */
-$uni-border-color:#c8c7cc;
-
-/* 尺寸变量 */
-
-/* 文字尺寸 */
-$uni-font-size-sm:12px;
-$uni-font-size-base:14px;
-$uni-font-size-lg:16px;
-
-/* 图片尺寸 */
-$uni-img-size-sm:20px;
-$uni-img-size-base:26px;
-$uni-img-size-lg:40px;
-
-/* Border Radius */
-$uni-border-radius-sm: 2px;
-$uni-border-radius-base: 3px;
-$uni-border-radius-lg: 6px;
-$uni-border-radius-circle: 50%;
-
-/* 水平间距 */
-$uni-spacing-row-sm: 5px;
-$uni-spacing-row-base: 10px;
-$uni-spacing-row-lg: 15px;
-
-/* 垂直间距 */
-$uni-spacing-col-sm: 4px;
-$uni-spacing-col-base: 8px;
-$uni-spacing-col-lg: 12px;
-
-/* 透明度 */
-$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
-
-/* 文章场景相关 */
-$uni-color-title: #2C405A; // 文章标题颜色
-$uni-font-size-title:20px;
-$uni-color-subtitle: #555555; // 二级标题颜色
-$uni-font-size-subtitle:26px;
-$uni-color-paragraph: #3F536E; // 文章段落颜色
-$uni-font-size-paragraph:15px;
diff --git a/uni_modules/zero-markdown-view/changelog.md b/uni_modules/zero-markdown-view/changelog.md
deleted file mode 100644
index d13259c..0000000
--- a/uni_modules/zero-markdown-view/changelog.md
+++ /dev/null
@@ -1,15 +0,0 @@
-## 2.0.5(2024-04-24)
-## 流式输出代码块解决方案
-## 2.0.4(2023-12-06)
-### 长按复制代码改为点击代码块复制
-## 2.0.3(2023-10-30)
-doc: 文档说明
-## 2.0.2(2023-10-30)
-- 新增长按复制代码-仅小程序可用
-- 新增代码块语言显示
-## 2.0.1(2023-10-27)
-##支持vue2,vue3
-## 2.0.0(2022-11-01)
-使用mp-html自带的插件,重新生成uniapp包,大幅减少插件体积
-## 1.0.0(2022-09-13)
-首次发布
diff --git a/uni_modules/zero-markdown-view/components/mp-html/highlight/config.js b/uni_modules/zero-markdown-view/components/mp-html/highlight/config.js
deleted file mode 100644
index 2f81762..0000000
--- a/uni_modules/zero-markdown-view/components/mp-html/highlight/config.js
+++ /dev/null
@@ -1,5 +0,0 @@
-export default {
- copyByClickCode: true, // 点击代码块复制
- showLanguageName: true, // 是否在代码块右上角显示语言的名称
- showLineNumber: false // 是否显示行号
-}
diff --git a/uni_modules/zero-markdown-view/components/mp-html/highlight/index.js b/uni_modules/zero-markdown-view/components/mp-html/highlight/index.js
deleted file mode 100644
index 7faa633..0000000
--- a/uni_modules/zero-markdown-view/components/mp-html/highlight/index.js
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * @fileoverview highlight 插件
- * Include prismjs (https://prismjs.com)
- */
-import prism from './prism.min'
-import config from './config'
-import Parser from '../parser'
-
-function Highlight (vm) {
- this.vm = vm
-}
-
-Highlight.prototype.onParse = function (node, vm) {
- if (node.name === 'pre') {
- if (vm.options.editable) {
- node.attrs.class = (node.attrs.class || '') + ' hl-pre'
- return
- }
- let i
- for (i = node.children.length; i--;) {
- if (node.children[i].name === 'code') break
- }
- if (i === -1) return
- const code = node.children[i]
- let className = code.attrs.class + ' ' + node.attrs.class
- i = className.indexOf('language-')
- if (i === -1) {
- i = className.indexOf('lang-')
- if (i === -1) {
- className = 'language-text'
- i = 9
- } else {
- i += 5
- }
- } else {
- i += 9
- }
- let j
- for (j = i; j < className.length; j++) {
- if (className[j] === ' ') break
- }
- const lang = className.substring(i, j)
- if (code.children.length) {
- const text = this.vm.getText(code.children).replace(/&/g, '&')
- if (!text) return
- if (node.c) {
- node.c = undefined
- }
- if (prism.languages[lang]) {
- code.children = (new Parser(this.vm).parse(
- // 加一层 pre 保留空白符
- '' + prism.highlight(text, prism.languages[lang], lang).replace(/token /g, 'hl-') + '
'))[0].children
- }
- node.attrs.class = 'hl-pre'
- code.attrs.class = 'hl-code'
- code.attrs.style ='display:block;overflow: auto;'
- if (config.showLanguageName) {
- node.children.push({
- name: 'div',
- attrs: {
- class: 'hl-language',
- style: 'user-select:none;position:absolute;top:0;right:2px;font-size:10px;'
- },
- children: [{
- type: 'text',
- text: lang
- }]
- })
- }
- if (config.copyByClickCode) {
- node.attrs.style += (node.attrs.style || '') + ';user-select:none;'
- node.attrs['data-content'] = text
- node.children.push({
- name: 'div',
- attrs: {
- class: 'hl-copy',
- style: 'user-select:none;position:absolute;top:0;right:3px;font-size:10px;'
- },
- // children: [{
- // type: 'text',
- // text: '复制'
- // }]
- })
- vm.expose()
- // console.log('vm',node,vm)
- }
- if (config.showLineNumber) {
- const line = text.split('\n').length; const children = []
- for (let k = line; k--;) {
- children.push({
- name: 'span',
- attrs: {
- class: 'span'
- }
- })
- }
- node.children.push({
- name: 'span',
- attrs: {
- class: 'line-numbers-rows'
- },
- children
- })
- }
- }
- }
-}
-
-export default Highlight
diff --git a/uni_modules/zero-markdown-view/components/mp-html/highlight/prism.min.js b/uni_modules/zero-markdown-view/components/mp-html/highlight/prism.min.js
deleted file mode 100644
index 0b67d39..0000000
--- a/uni_modules/zero-markdown-view/components/mp-html/highlight/prism.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*! PrismJS 1.22.0
-https://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+css+clike+javascript */
-var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(u){var c=/\blang(?:uage)?-([\w-]+)\b/i,n=0,M={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof W?new W(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=l.reach);k+=y.value.length,y=y.next){var b=y.value;if(t.length>n.length)return;if(!(b instanceof W)){var x=1;if(h&&y!=t.tail.prev){m.lastIndex=k;var w=m.exec(n);if(!w)break;var A=w.index+(f&&w[1]?w[1].length:0),P=w.index+w[0].length,S=k;for(S+=y.value.length;S<=A;)y=y.next,S+=y.value.length;if(S-=y.value.length,k=S,y.value instanceof W)continue;for(var E=y;E!==t.tail&&(Sl.reach&&(l.reach=j);var C=y.prev;L&&(C=I(t,C,L),k+=L.length),z(t,C,x);var _=new W(o,g?M.tokenize(O,g):O,v,O);y=I(t,C,_),N&&I(t,y,N),1"+a.content+""+a.tag+">"},!u.document)return u.addEventListener&&(M.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),t=n.language,r=n.code,a=n.immediateClose;u.postMessage(M.highlight(r,M.languages[t],t)),a&&u.close()},!1)),M;var e=M.util.currentScript();function t(){M.manual||M.highlightAll()}if(e&&(M.filename=e.src,e.hasAttribute("data-manual")&&(M.manual=!0)),!M.manual){var r=document.readyState;"loading"===r||"interactive"===r&&e&&e.defer?document.addEventListener("DOMContentLoaded",t):window.requestAnimationFrame?window.requestAnimationFrame(t):window.setTimeout(t,16)}return M}(_self);export default Prism;"undefined"!=typeof global&&(global.Prism=Prism);
-Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/,name:/[^\s<>'"]+/}},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var n={"included-cdata":{pattern://i,inside:s}};n["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var t={};t[a]={pattern:RegExp("(<__[^]*?>)(?:))*\\]\\]>|(?!)".replace(/__/g,function(){return a}),"i"),lookbehind:!0,greedy:!0,inside:n},Prism.languages.insertBefore("markup","cdata",t)}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml;
-!function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+[\s\S]*?(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\((?!\s*\))\s*)(?:[^()]|\((?:[^()]|\([^()]*\))*\))+?(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|(?:[^\\\\\r\n()\"']|\\\\[^])*)\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:RegExp("[^{}\\s](?:[^{};\"']|"+t.source+")*?(?=\\s*\\{)"),string:{pattern:t,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var s=e.languages.markup;s&&(s.tag.addInlined("style","css"),e.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/(^|["'\s])style\s*=\s*(?:"[^"]*"|'[^']*')/i,lookbehind:!0,inside:{"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{style:{pattern:/(["'])[\s\S]+(?=["']$)/,lookbehind:!0,alias:"language-css",inside:e.languages.css},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},"attr-name":/^style/i}}},s.tag))}(Prism);
-Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/};
-Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|(?:get|set)(?=\s*[\[$\w\xA0-\uFFFF])|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,function:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-flags":/[a-z]+$/,"regex-delimiter":/^\/|\/$/}},"function-variable":{pattern:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.js=Prism.languages.javascript;
diff --git a/uni_modules/zero-markdown-view/components/mp-html/markdown/index.js b/uni_modules/zero-markdown-view/components/mp-html/markdown/index.js
deleted file mode 100644
index 8900403..0000000
--- a/uni_modules/zero-markdown-view/components/mp-html/markdown/index.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * @fileoverview markdown 插件
- * Include marked (https://github.com/markedjs/marked)
- * Include github-markdown-css (https://github.com/sindresorhus/github-markdown-css)
- */
-import marked from './marked.min'
-let index = 0
-
-function Markdown (vm) {
- this.vm = vm
- vm._ids = {}
-}
-
-Markdown.prototype.onUpdate = function (content) {
- if (this.vm.markdown) {
- return marked(content)
- }
-}
-
-Markdown.prototype.onParse = function (node, vm) {
- if (vm.options.markdown) {
- // 中文 id 需要转换,否则无法跳转
- if (vm.options.useAnchor && node.attrs && /[\u4e00-\u9fa5]/.test(node.attrs.id)) {
- const id = 't' + index++
- this.vm._ids[node.attrs.id] = id
- node.attrs.id = id
- }
- if (node.name === 'p' || node.name === 'table' || node.name === 'tr' || node.name === 'th' || node.name === 'td' || node.name === 'blockquote' || node.name === 'pre' || node.name === 'code') {
- node.attrs.class = `md-${node.name} ${node.attrs.class || ''}`
- }
- }
-}
-
-export default Markdown
diff --git a/uni_modules/zero-markdown-view/components/mp-html/markdown/marked.min.js b/uni_modules/zero-markdown-view/components/mp-html/markdown/marked.min.js
deleted file mode 100644
index 2efcf53..0000000
--- a/uni_modules/zero-markdown-view/components/mp-html/markdown/marked.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- * marked - a markdown parser
- * Copyright (c) 2011-2020, Christopher Jeffrey. (MIT Licensed)
- * https://github.com/markedjs/marked
- */
-function t(){"use strict";function i(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function n(e){return c[e]}var e,t=(function(t){function e(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}t.exports={defaults:e(),getDefaults:e,changeDefaults:function(e){t.exports.defaults=e}}}(e={exports:{}}),e.exports),r=(t.defaults,t.getDefaults,t.changeDefaults,/[&<>"']/),l=/[&<>"']/g,a=/[<>"']|&(?!#?\w+;)/,o=/[<>"']|&(?!#?\w+;)/g,c={"&":"&","<":"<",">":">",'"':""","'":"'"};var u=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function h(e){return e.replace(u,function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}var g=/(^|[^\[])\^/g;var f=/[^\w:]/g,d=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;var k={},b=/^[^:]+:\/*[^/]*$/,m=/^([^:]+:)[\s\S]*$/,x=/^([^:]+:\/*[^/]*)[\s\S]*$/;function w(e,t){k[" "+e]||(b.test(e)?k[" "+e]=e+"/":k[" "+e]=v(e,"/",!0));var n=-1===(e=k[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(m,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(x,"$1")+t:e+t}function v(e,t,n){var r=e.length;if(0===r)return"";for(var i=0;it)n.splice(t);else for(;n.length>=1,e+=e;return n+e},q=t.defaults,O=v,C=R,U=_,j=T;function E(e,t,n){var r=t.href,i=t.title?U(t.title):null,t=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?{type:"link",raw:n,href:r,title:i,text:t}:{type:"image",raw:n,href:r,title:i,text:U(t)}}var D=function(){function e(e){this.options=e||q}var t=e.prototype;return t.space=function(e){e=this.rules.block.newline.exec(e);if(e)return 1=n.length?e.slice(n.length):e}).join("\n")}(n,t[3]||"");return{type:"code",raw:n,lang:t[2]&&t[2].trim(),text:e}}},t.heading=function(e){e=this.rules.block.heading.exec(e);if(e)return{type:"heading",raw:e[0],depth:e[1].length,text:e[2]}},t.nptable=function(e){e=this.rules.block.nptable.exec(e);if(e){var t={type:"table",header:C(e[1].replace(/^ *| *\| *$/g,"")),align:e[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:e[3]?e[3].replace(/\n$/,"").split("\n"):[],raw:e[0]};if(t.header.length===t.align.length){for(var n=t.align.length,r=0;r ?/gm,"");return{type:"blockquote",raw:t[0],text:e}}},t.list=function(e){e=this.rules.block.list.exec(e);if(e){for(var t,n,r,i,s,l=e[0],a=e[2],o=1g[0].length||3/i.test(e[0])&&(t=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(e[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(e[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:e[0],inLink:t,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):U(e[0]):e[0]}},t.link=function(e){var t=this.rules.inline.link.exec(e);if(t){e=j(t[2],"()");-1$/,"$1"))&&e.replace(this.rules.inline._escapes,"$1"),title:r&&r.replace(this.rules.inline._escapes,"$1")},t[0])}},t.reflink=function(e,t){if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){e=(n[2]||n[1]).replace(/\s+/g," ");if((e=t[e.toLowerCase()])&&e.href)return E(n,e,n[0]);var n=n[0].charAt(0);return{type:"text",raw:n,text:n}}},t.strong=function(e,t,n){void 0===n&&(n="");var r=this.rules.inline.strong.start.exec(e);if(r&&(!r[1]||r[1]&&(""===n||this.rules.inline.punctuation.exec(n)))){t=t.slice(-1*e.length);var i,s="**"===r[0]?this.rules.inline.strong.endAst:this.rules.inline.strong.endUnd;for(s.lastIndex=0;null!=(r=s.exec(t));)if(i=this.rules.inline.strong.middle.exec(t.slice(0,r.index+3)))return{type:"strong",raw:e.slice(0,i[0].length),text:e.slice(2,i[0].length-2)}}},t.em=function(e,t,n){void 0===n&&(n="");var r=this.rules.inline.em.start.exec(e);if(r&&(!r[1]||r[1]&&(""===n||this.rules.inline.punctuation.exec(n)))){t=t.slice(-1*e.length);var i,s="*"===r[0]?this.rules.inline.em.endAst:this.rules.inline.em.endUnd;for(s.lastIndex=0;null!=(r=s.exec(t));)if(i=this.rules.inline.em.middle.exec(t.slice(0,r.index+2)))return{type:"em",raw:e.slice(0,i[0].length),text:e.slice(1,i[0].length-1)}}},t.codespan=function(e){var t=this.rules.inline.code.exec(e);if(t){var n=t[2].replace(/\n/g," "),r=/[^ ]/.test(n),e=n.startsWith(" ")&&n.endsWith(" ");return r&&e&&(n=n.substring(1,n.length-1)),n=U(n,!0),{type:"codespan",raw:t[0],text:n}}},t.br=function(e){e=this.rules.inline.br.exec(e);if(e)return{type:"br",raw:e[0]}},t.del=function(e){e=this.rules.inline.del.exec(e);if(e)return{type:"del",raw:e[0],text:e[2]}},t.autolink=function(e,t){e=this.rules.inline.autolink.exec(e);if(e){var n,t="@"===e[2]?"mailto:"+(n=U(this.options.mangle?t(e[1]):e[1])):n=U(e[1]);return{type:"link",raw:e[0],text:n,href:t,tokens:[{type:"text",raw:n,text:n}]}}},t.url=function(e,t){var n,r,i,s;if(n=this.rules.inline.url.exec(e)){if("@"===n[2])i="mailto:"+(r=U(this.options.mangle?t(n[0]):n[0]));else{for(;s=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0],s!==n[0];);r=U(n[0]),i="www."===n[1]?"http://"+r:r}return{type:"link",raw:n[0],text:r,href:i,tokens:[{type:"text",raw:r,text:r}]}}},t.inlineText=function(e,t,n){e=this.rules.inline.text.exec(e);if(e){n=t?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):U(e[0]):e[0]:U(this.options.smartypants?n(e[0]):e[0]);return{type:"text",raw:e[0],text:n}}},e}(),R=$,T=z,$=A,z={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6}) +([^\n]*?)(?: +#+)? *(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:R,table:R,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};z.def=T(z.def).replace("label",z._label).replace("title",z._title).getRegex(),z.bullet=/(?:[*+-]|\d{1,9}[.)])/,z.item=/^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/,z.item=T(z.item,"gm").replace(/bull/g,z.bullet).getRegex(),z.listItemStart=T(/^( *)(bull)/).replace("bull",z.bullet).getRegex(),z.list=T(z.list).replace(/bull/g,z.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+z.def.source+")").getRegex(),z._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",z._comment=/|$)/,z.html=T(z.html,"i").replace("comment",z._comment).replace("tag",z._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),z.paragraph=T(z._paragraph).replace("hr",z.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",z._tag).getRegex(),z.blockquote=T(z.blockquote).replace("paragraph",z.paragraph).getRegex(),z.normal=$({},z),z.gfm=$({},z.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n {0,3}([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n {0,3}\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),z.gfm.nptable=T(z.gfm.nptable).replace("hr",z.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",z._tag).getRegex(),z.gfm.table=T(z.gfm.table).replace("hr",z.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",z._tag).getRegex(),z.pedantic=$({},z.normal,{html:T("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?\\1> *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",z._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,fences:R,paragraph:T(z.normal._paragraph).replace("hr",z.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",z.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});R={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:R,tag:"^comment|^[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",strong:{start:/^(?:(\*\*(?=[*punctuation]))|\*\*)(?![\s])|__/,middle:/^\*\*(?:(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)|\*(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)*?\*)+?\*\*$|^__(?![\s])((?:(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)*?_)+?)__$/,endAst:/[^punctuation\s]\*\*(?!\*)|[punctuation]\*\*(?!\*)(?:(?=[punctuation_\s]|$))/,endUnd:/[^\s]__(?!_)(?:(?=[punctuation*\s])|$)/},em:{start:/^(?:(\*(?=[punctuation]))|\*)(?![*\s])|_/,middle:/^\*(?:(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)|\*(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)*?\*)+?\*$|^_(?![_\s])(?:(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)*?_)+?_$/,endAst:/[^punctuation\s]\*(?!\*)|[punctuation]\*(?!\*)(?:(?=[punctuation_\s]|$))/,endUnd:/[^\s]_(?!_)(?:(?=[punctuation*\s])|$)/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:R,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\?@\\[\\]`^{|}~"};R.punctuation=T(R.punctuation).replace(/punctuation/g,R._punctuation).getRegex(),R._blockSkip="\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>",R._overlapSkip="__[^_]*?__|\\*\\*\\[^\\*\\]*?\\*\\*",R._comment=T(z._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),R.em.start=T(R.em.start).replace(/punctuation/g,R._punctuation).getRegex(),R.em.middle=T(R.em.middle).replace(/punctuation/g,R._punctuation).replace(/overlapSkip/g,R._overlapSkip).getRegex(),R.em.endAst=T(R.em.endAst,"g").replace(/punctuation/g,R._punctuation).getRegex(),R.em.endUnd=T(R.em.endUnd,"g").replace(/punctuation/g,R._punctuation).getRegex(),R.strong.start=T(R.strong.start).replace(/punctuation/g,R._punctuation).getRegex(),R.strong.middle=T(R.strong.middle).replace(/punctuation/g,R._punctuation).replace(/overlapSkip/g,R._overlapSkip).getRegex(),R.strong.endAst=T(R.strong.endAst,"g").replace(/punctuation/g,R._punctuation).getRegex(),R.strong.endUnd=T(R.strong.endUnd,"g").replace(/punctuation/g,R._punctuation).getRegex(),R.blockSkip=T(R._blockSkip,"g").getRegex(),R.overlapSkip=T(R._overlapSkip,"g").getRegex(),R._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,R._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,R._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,R.autolink=T(R.autolink).replace("scheme",R._scheme).replace("email",R._email).getRegex(),R._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,R.tag=T(R.tag).replace("comment",R._comment).replace("attribute",R._attribute).getRegex(),R._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,R._href=/<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*/,R._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,R.link=T(R.link).replace("label",R._label).replace("href",R._href).replace("title",R._title).getRegex(),R.reflink=T(R.reflink).replace("label",R._label).getRegex(),R.reflinkSearch=T(R.reflinkSearch,"g").replace("reflink",R.reflink).replace("nolink",R.nolink).getRegex(),R.normal=$({},R),R.pedantic=$({},R.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:T(/^!?\[(label)\]\((.*?)\)/).replace("label",R._label).getRegex(),reflink:T(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",R._label).getRegex()}),R.gfm=$({},R.normal,{escape:T(R.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\'+(n?e:V(e,!0))+"
\n":""+(n?e:V(e,!0))+"
\n"},t.blockquote=function(e){return"\n"+e+"
\n"},t.html=function(e){return e},t.heading=function(e,t,n,r){return this.options.headerIds?"\n":""+e+"\n"},t.hr=function(){return this.options.xhtml?"
\n":"
\n"},t.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+""+r+">\n"},t.listitem=function(e){return""+e+"\n"},t.checkbox=function(e){return" "},t.paragraph=function(e){return""+e+"
\n"},t.table=function(e,t){return"\n\n"+e+"\n"+(t=t&&""+t+"")+"
\n"},t.tablerow=function(e){return"\n"+e+"
\n"},t.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+""+n+">\n"},t.strong=function(e){return""+e+""},t.em=function(e){return""+e+""},t.codespan=function(e){return""+e+"
"},t.br=function(){return this.options.xhtml?"
":"
"},t.del=function(e){return""+e+""},t.link=function(e,t,n){if(null===(e=G(this.options.sanitize,this.options.baseUrl,e)))return n;e='"+n+""},t.image=function(e,t,n){if(null===(e=G(this.options.sanitize,this.options.baseUrl,e)))return n;n='
":">"},t.text=function(e){return e},e}(),J=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.html=function(e){return e},t.text=function(e){return e},t.link=function(e,t,n){return""+n},t.image=function(e,t,n){return""+n},t.br=function(){return""},e}(),K=function(){function e(){this.seen={}}var t=e.prototype;return t.serialize=function(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")},t.getNextSafeSlug=function(e,t){var n=e,r=0;if(this.seen.hasOwnProperty(n))for(r=this.seen[e];n=e+"-"+ ++r,this.seen.hasOwnProperty(n););return t||(this.seen[e]=r,this.seen[n]=0),n},t.slug=function(e,t){void 0===t&&(t={});var n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)},e}(),Q=t.defaults,Y=y,ee=function(){function n(e){this.options=e||Q,this.options.renderer=this.options.renderer||new H,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new J,this.slugger=new K}n.parse=function(e,t){return new n(t).parse(e)},n.parseInline=function(e,t){return new n(t).parseInline(e)};var e=n.prototype;return e.parse=function(e,t){void 0===t&&(t=!0);for(var n,r,i,s,l,a,o,c,u,p,h,g,f,d,k,b="",m=e.length,x=0;xAn error occurred:
"+re(e.message+"",!0)+"
";throw e}}return se.options=se.setOptions=function(e){return te(se.defaults,e),ie(se.defaults),se},se.getDefaults=_,se.defaults=t,se.use=function(a){var t,n=te({},a);a.renderer&&function(){var e,l=se.defaults.renderer||new H;for(e in a.renderer)!function(i){var s=l[i];l[i]=function(){for(var e=arguments.length,t=new Array(e),n=0;nAn error occurred:"+re(e.message+"",!0)+"
";throw e}},se.Parser=ee,se.parser=ee.parse,se.Renderer=H,se.TextRenderer=J,se.Lexer=W,se.lexer=W.lex,se.Tokenizer=D,se.Slugger=K,se.parse=se};export default t();
\ No newline at end of file
diff --git a/uni_modules/zero-markdown-view/components/mp-html/mp-html.vue b/uni_modules/zero-markdown-view/components/mp-html/mp-html.vue
deleted file mode 100644
index 332c3e0..0000000
--- a/uni_modules/zero-markdown-view/components/mp-html/mp-html.vue
+++ /dev/null
@@ -1,503 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/uni_modules/zero-markdown-view/components/mp-html/node/node.vue b/uni_modules/zero-markdown-view/components/mp-html/node/node.vue
deleted file mode 100644
index 3253509..0000000
--- a/uni_modules/zero-markdown-view/components/mp-html/node/node.vue
+++ /dev/null
@@ -1,678 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{n.text}}
-
-
- {{n.text}}
-
- \n
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/uni_modules/zero-markdown-view/components/mp-html/parser.js b/uni_modules/zero-markdown-view/components/mp-html/parser.js
deleted file mode 100644
index e2e7a87..0000000
--- a/uni_modules/zero-markdown-view/components/mp-html/parser.js
+++ /dev/null
@@ -1,1335 +0,0 @@
-/**
- * @fileoverview html 解析器
- */
-
-// 配置
-const config = {
- // 信任的标签(保持标签名不变)
- trustTags: makeMap('a,abbr,ad,audio,b,blockquote,br,code,col,colgroup,dd,del,dl,dt,div,em,fieldset,h1,h2,h3,h4,h5,h6,hr,i,img,ins,label,legend,li,ol,p,q,ruby,rt,source,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,title,ul,video'),
-
- // 块级标签(转为 div,其他的非信任标签转为 span)
- blockTags: makeMap('address,article,aside,body,caption,center,cite,footer,header,html,nav,pre,section'),
-
- // #ifdef (MP-WEIXIN || MP-QQ || APP-PLUS || MP-360) && VUE3
- // 行内标签
- inlineTags: makeMap('abbr,b,big,code,del,em,i,ins,label,q,small,span,strong,sub,sup'),
- // #endif
-
- // 要移除的标签
- ignoreTags: makeMap('area,base,canvas,embed,frame,head,iframe,input,link,map,meta,param,rp,script,source,style,textarea,title,track,wbr'),
-
- // 自闭合的标签
- voidTags: makeMap('area,base,br,col,circle,ellipse,embed,frame,hr,img,input,line,link,meta,param,path,polygon,rect,source,track,use,wbr'),
-
- // html 实体
- entities: {
- lt: '<',
- gt: '>',
- quot: '"',
- apos: "'",
- ensp: '\u2002',
- emsp: '\u2003',
- nbsp: '\xA0',
- semi: ';',
- ndash: '–',
- mdash: '—',
- middot: '·',
- lsquo: '‘',
- rsquo: '’',
- ldquo: '“',
- rdquo: '”',
- bull: '•',
- hellip: '…',
- larr: '←',
- uarr: '↑',
- rarr: '→',
- darr: '↓'
- },
-
- // 默认的标签样式
- tagStyle: {
- // #ifndef APP-PLUS-NVUE
- address: 'font-style:italic',
- big: 'display:inline;font-size:1.2em',
- caption: 'display:table-caption;text-align:center',
- center: 'text-align:center',
- cite: 'font-style:italic',
- dd: 'margin-left:40px',
- mark: 'background-color:yellow',
- pre: 'font-family:monospace;white-space:pre',
- s: 'text-decoration:line-through',
- small: 'display:inline;font-size:0.8em',
- strike: 'text-decoration:line-through',
- u: 'text-decoration:underline'
- // #endif
- },
-
- // svg 大小写对照表
- svgDict: {
- animatetransform: 'animateTransform',
- lineargradient: 'linearGradient',
- viewbox: 'viewBox',
- attributename: 'attributeName',
- repeatcount: 'repeatCount',
- repeatdur: 'repeatDur'
- }
-}
-const tagSelector={}
-const {
- windowWidth,
- // #ifdef MP-WEIXIN
- system
- // #endif
-} = uni.getSystemInfoSync()
-const blankChar = makeMap(' ,\r,\n,\t,\f')
-let idIndex = 0
-
-// #ifdef H5 || APP-PLUS
-config.ignoreTags.iframe = undefined
-config.trustTags.iframe = true
-config.ignoreTags.embed = undefined
-config.trustTags.embed = true
-// #endif
-// #ifdef APP-PLUS-NVUE
-config.ignoreTags.source = undefined
-config.ignoreTags.style = undefined
-// #endif
-
-/**
- * @description 创建 map
- * @param {String} str 逗号分隔
- */
-function makeMap (str) {
- const map = Object.create(null)
- const list = str.split(',')
- for (let i = list.length; i--;) {
- map[list[i]] = true
- }
- return map
-}
-
-/**
- * @description 解码 html 实体
- * @param {String} str 要解码的字符串
- * @param {Boolean} amp 要不要解码 &
- * @returns {String} 解码后的字符串
- */
-function decodeEntity (str, amp) {
- let i = str.indexOf('&')
- while (i !== -1) {
- const j = str.indexOf(';', i + 3)
- let code
- if (j === -1) break
- if (str[i + 1] === '#') {
- // { 形式的实体
- code = parseInt((str[i + 2] === 'x' ? '0' : '') + str.substring(i + 2, j))
- if (!isNaN(code)) {
- str = str.substr(0, i) + String.fromCharCode(code) + str.substr(j + 1)
- }
- } else {
- // 形式的实体
- code = str.substring(i + 1, j)
- if (config.entities[code] || (code === 'amp' && amp)) {
- str = str.substr(0, i) + (config.entities[code] || '&') + str.substr(j + 1)
- }
- }
- i = str.indexOf('&', i + 1)
- }
- return str
-}
-
-/**
- * @description 合并多个块级标签,加快长内容渲染
- * @param {Array} nodes 要合并的标签数组
- */
-function mergeNodes (nodes) {
- let i = nodes.length - 1
- for (let j = i; j >= -1; j--) {
- if (j === -1 || nodes[j].c || !nodes[j].name || (nodes[j].name !== 'div' && nodes[j].name !== 'p' && nodes[j].name[0] !== 'h') || (nodes[j].attrs.style || '').includes('inline')) {
- if (i - j >= 5) {
- nodes.splice(j + 1, i - j, {
- name: 'div',
- attrs: {},
- children: nodes.slice(j + 1, i + 1)
- })
- }
- i = j - 1
- }
- }
-}
-
-/**
- * @description html 解析器
- * @param {Object} vm 组件实例
- */
-function Parser (vm) {
- this.options = vm || {}
- this.tagStyle = Object.assign({}, config.tagStyle, this.options.tagStyle)
- this.imgList = vm.imgList || []
- this.imgList._unloadimgs = 0
- this.plugins = vm.plugins || []
- this.attrs = Object.create(null)
- this.stack = []
- this.nodes = []
- this.pre = (this.options.containerStyle || '').includes('white-space') && this.options.containerStyle.includes('pre') ? 2 : 0
-}
-
-/**
- * @description 执行解析
- * @param {String} content 要解析的文本
- */
-Parser.prototype.parse = function (content) {
- // 插件处理
- for (let i = this.plugins.length; i--;) {
- if (this.plugins[i].onUpdate) {
- content = this.plugins[i].onUpdate(content, config) || content
- }
- }
-
- new Lexer(this).parse(content)
- // 出栈未闭合的标签
- while (this.stack.length) {
- this.popNode()
- }
- if (this.nodes.length > 50) {
- mergeNodes(this.nodes)
- }
- return this.nodes
-}
-
-/**
- * @description 将标签暴露出来(不被 rich-text 包含)
- */
-Parser.prototype.expose = function () {
- // #ifndef APP-PLUS-NVUE
- for (let i = this.stack.length; i--;) {
- const item = this.stack[i]
- if (item.c || item.name === 'a' || item.name === 'video' || item.name === 'audio') return
- item.c = 1
- }
- // #endif
-}
-
-/**
- * @description 处理插件
- * @param {Object} node 要处理的标签
- * @returns {Boolean} 是否要移除此标签
- */
-Parser.prototype.hook = function (node) {
- for (let i = this.plugins.length; i--;) {
- if (this.plugins[i].onParse && this.plugins[i].onParse(node, this) === false) {
- return false
- }
- }
- return true
-}
-
-/**
- * @description 将链接拼接上主域名
- * @param {String} url 需要拼接的链接
- * @returns {String} 拼接后的链接
- */
-Parser.prototype.getUrl = function (url) {
- const domain = this.options.domain
- if (url[0] === '/') {
- if (url[1] === '/') {
- // // 开头的补充协议名
- url = (domain ? domain.split('://')[0] : 'http') + ':' + url
- } else if (domain) {
- // 否则补充整个域名
- url = domain + url
- } /* #ifdef APP-PLUS */ else {
- url = plus.io.convertLocalFileSystemURL(url)
- } /* #endif */
- } else if (!url.includes('data:') && !url.includes('://')) {
- if (domain) {
- url = domain + '/' + url
- } /* #ifdef APP-PLUS */ else {
- url = plus.io.convertLocalFileSystemURL(url)
- } /* #endif */
- }
- return url
-}
-
-/**
- * @description 解析样式表
- * @param {Object} node 标签
- * @returns {Object}
- */
-Parser.prototype.parseStyle = function (node) {
- const attrs = node.attrs
- const list = (this.tagStyle[node.name] || '').split(';').concat((attrs.style || '').split(';'))
- const styleObj = {}
- let tmp = ''
-
- if (attrs.id && !this.xml) {
- // 暴露锚点
- if (this.options.useAnchor) {
- this.expose()
- } else if (node.name !== 'img' && node.name !== 'a' && node.name !== 'video' && node.name !== 'audio') {
- attrs.id = undefined
- }
- }
-
- // 转换 width 和 height 属性
- if (attrs.width) {
- styleObj.width = parseFloat(attrs.width) + (attrs.width.includes('%') ? '%' : 'px')
- attrs.width = undefined
- }
- if (attrs.height) {
- styleObj.height = parseFloat(attrs.height) + (attrs.height.includes('%') ? '%' : 'px')
- attrs.height = undefined
- }
-
- for (let i = 0, len = list.length; i < len; i++) {
- const info = list[i].split(':')
- if (info.length < 2) continue
- const key = info.shift().trim().toLowerCase()
- let value = info.join(':').trim()
- if ((value[0] === '-' && value.lastIndexOf('-') > 0) || value.includes('safe')) {
- // 兼容性的 css 不压缩
- tmp += `;${key}:${value}`
- } else if (!styleObj[key] || value.includes('import') || !styleObj[key].includes('import')) {
- // 重复的样式进行覆盖
- if (value.includes('url')) {
- // 填充链接
- let j = value.indexOf('(') + 1
- if (j) {
- while (value[j] === '"' || value[j] === "'" || blankChar[value[j]]) {
- j++
- }
- value = value.substr(0, j) + this.getUrl(value.substr(j))
- }
- } else if (value.includes('rpx')) {
- // 转换 rpx(rich-text 内部不支持 rpx)
- value = value.replace(/[0-9.]+\s*rpx/g, $ => parseFloat($) * windowWidth / 750 + 'px')
- }
- styleObj[key] = value
- }
- }
-
- node.attrs.style = tmp
- return styleObj
-}
-
-/**
- * @description 解析到标签名
- * @param {String} name 标签名
- * @private
- */
-Parser.prototype.onTagName = function (name) {
- this.tagName = this.xml ? name : name.toLowerCase()
- if (this.tagName === 'svg') {
- this.xml = (this.xml || 0) + 1 // svg 标签内大小写敏感
- config.ignoreTags.style = undefined // svg 标签内 style 可用
- }
-}
-
-/**
- * @description 解析到属性名
- * @param {String} name 属性名
- * @private
- */
-Parser.prototype.onAttrName = function (name) {
- name = this.xml ? name : name.toLowerCase()
- if (name.substr(0, 5) === 'data-') {
- if (name === 'data-src' && !this.attrs.src) {
- // data-src 自动转为 src
- this.attrName = 'src'
- } else if (this.tagName === 'img' || this.tagName === 'a') {
- // a 和 img 标签保留 data- 的属性,可以在 imgtap 和 linktap 事件中使用
- this.attrName = name
- } else {
- // 剩余的移除以减小大小
- this.attrName = undefined
- }
- } else {
- this.attrName = name
- this.attrs[name] = 'T' // boolean 型属性缺省设置
- }
-}
-
-/**
- * @description 解析到属性值
- * @param {String} val 属性值
- * @private
- */
-Parser.prototype.onAttrVal = function (val) {
- const name = this.attrName || ''
- if (name === 'style' || name === 'href') {
- // 部分属性进行实体解码
- this.attrs[name] = decodeEntity(val, true)
- } else if (name.includes('src')) {
- // 拼接主域名
- this.attrs[name] = this.getUrl(decodeEntity(val, true))
- } else if (name) {
- this.attrs[name] = val
- }
-}
-
-/**
- * @description 解析到标签开始
- * @param {Boolean} selfClose 是否有自闭合标识 />
- * @private
- */
-Parser.prototype.onOpenTag = function (selfClose) {
- // 拼装 node
- const node = Object.create(null)
- node.name = this.tagName
- node.attrs = this.attrs
- // 避免因为自动 diff 使得 type 被设置为 null 导致部分内容不显示
- if (this.options.nodes.length) {
- node.type = 'node'
- }
- this.attrs = Object.create(null)
-
- const attrs = node.attrs
- const parent = this.stack[this.stack.length - 1]
- const siblings = parent ? parent.children : this.nodes
- const close = this.xml ? selfClose : config.voidTags[node.name]
-
- // 替换标签名选择器
- if (tagSelector[node.name]) {
- attrs.class = tagSelector[node.name] + (attrs.class ? ' ' + attrs.class : '')
- }
-
- // 转换 embed 标签
- if (node.name === 'embed') {
- // #ifndef H5 || APP-PLUS
- const src = attrs.src || ''
- // 按照后缀名和 type 将 embed 转为 video 或 audio
- if (src.includes('.mp4') || src.includes('.3gp') || src.includes('.m3u8') || (attrs.type || '').includes('video')) {
- node.name = 'video'
- } else if (src.includes('.mp3') || src.includes('.wav') || src.includes('.aac') || src.includes('.m4a') || (attrs.type || '').includes('audio')) {
- node.name = 'audio'
- }
- if (attrs.autostart) {
- attrs.autoplay = 'T'
- }
- attrs.controls = 'T'
- // #endif
- // #ifdef H5 || APP-PLUS
- this.expose()
- // #endif
- }
-
- // #ifndef APP-PLUS-NVUE
- // 处理音视频
- if (node.name === 'video' || node.name === 'audio') {
- // 设置 id 以便获取 context
- if (node.name === 'video' && !attrs.id) {
- attrs.id = 'v' + idIndex++
- }
- // 没有设置 controls 也没有设置 autoplay 的自动设置 controls
- if (!attrs.controls && !attrs.autoplay) {
- attrs.controls = 'T'
- }
- // 用数组存储所有可用的 source
- node.src = []
- if (attrs.src) {
- node.src.push(attrs.src)
- attrs.src = undefined
- }
- this.expose()
- }
- // #endif
-
- // 处理自闭合标签
- if (close) {
- if (!this.hook(node) || config.ignoreTags[node.name]) {
- // 通过 base 标签设置主域名
- if (node.name === 'base' && !this.options.domain) {
- this.options.domain = attrs.href
- } /* #ifndef APP-PLUS-NVUE */ else if (node.name === 'source' && parent && (parent.name === 'video' || parent.name === 'audio') && attrs.src) {
- // 设置 source 标签(仅父节点为 video 或 audio 时有效)
- parent.src.push(attrs.src)
- } /* #endif */
- return
- }
-
- // 解析 style
- const styleObj = this.parseStyle(node)
-
- // 处理图片
- if (node.name === 'img') {
- if (attrs.src) {
- // 标记 webp
- if (attrs.src.includes('webp')) {
- node.webp = 'T'
- }
- // data url 图片如果没有设置 original-src 默认为不可预览的小图片
- if (attrs.src.includes('data:') && !attrs['original-src']) {
- attrs.ignore = 'T'
- }
- if (!attrs.ignore || node.webp || attrs.src.includes('cloud://')) {
- for (let i = this.stack.length; i--;) {
- const item = this.stack[i]
- if (item.name === 'a') {
- node.a = item.attrs
- }
- if (item.name === 'table' && !node.webp && !attrs.src.includes('cloud://')) {
- if (!styleObj.display || styleObj.display.includes('inline')) {
- node.t = 'inline-block'
- } else {
- node.t = styleObj.display
- }
- styleObj.display = undefined
- }
- // #ifndef H5 || APP-PLUS
- const style = item.attrs.style || ''
- if (style.includes('flex:') && !style.includes('flex:0') && !style.includes('flex: 0') && (!styleObj.width || parseInt(styleObj.width) > 100)) {
- styleObj.width = '100% !important'
- styleObj.height = ''
- for (let j = i + 1; j < this.stack.length; j++) {
- this.stack[j].attrs.style = (this.stack[j].attrs.style || '').replace('inline-', '')
- }
- } else if (style.includes('flex') && styleObj.width === '100%') {
- for (let j = i + 1; j < this.stack.length; j++) {
- const style = this.stack[j].attrs.style || ''
- if (!style.includes(';width') && !style.includes(' width') && style.indexOf('width') !== 0) {
- styleObj.width = ''
- break
- }
- }
- } else if (style.includes('inline-block')) {
- if (styleObj.width && styleObj.width[styleObj.width.length - 1] === '%') {
- item.attrs.style += ';max-width:' + styleObj.width
- styleObj.width = ''
- } else {
- item.attrs.style += ';max-width:100%'
- }
- }
- // #endif
- item.c = 1
- }
- attrs.i = this.imgList.length.toString()
- let src = attrs['original-src'] || attrs.src
- // #ifndef H5 || MP-ALIPAY || APP-PLUS || MP-360
- if (this.imgList.includes(src)) {
- // 如果有重复的链接则对域名进行随机大小写变换避免预览时错位
- let i = src.indexOf('://')
- if (i !== -1) {
- i += 3
- let newSrc = src.substr(0, i)
- for (; i < src.length; i++) {
- if (src[i] === '/') break
- newSrc += Math.random() > 0.5 ? src[i].toUpperCase() : src[i]
- }
- newSrc += src.substr(i)
- src = newSrc
- }
- }
- // #endif
- this.imgList.push(src)
- if (!node.t) {
- this.imgList._unloadimgs += 1
- }
- // #ifdef H5 || APP-PLUS
- if (this.options.lazyLoad) {
- attrs['data-src'] = attrs.src
- attrs.src = undefined
- }
- // #endif
- }
- }
- if (styleObj.display === 'inline') {
- styleObj.display = ''
- }
- // #ifndef APP-PLUS-NVUE
- if (attrs.ignore) {
- styleObj['max-width'] = styleObj['max-width'] || '100%'
- attrs.style += ';-webkit-touch-callout:none'
- }
- // #endif
- // 设置的宽度超出屏幕,为避免变形,高度转为自动
- if (parseInt(styleObj.width) > windowWidth) {
- styleObj.height = undefined
- }
- // 记录是否设置了宽高
- if (!isNaN(parseInt(styleObj.width))) {
- node.w = 'T'
- }
- if (!isNaN(parseInt(styleObj.height)) && (!styleObj.height.includes('%') || (parent && (parent.attrs.style || '').includes('height')))) {
- node.h = 'T'
- }
- } else if (node.name === 'svg') {
- siblings.push(node)
- this.stack.push(node)
- this.popNode()
- return
- }
- for (const key in styleObj) {
- if (styleObj[key]) {
- attrs.style += `;${key}:${styleObj[key].replace(' !important', '')}`
- }
- }
- attrs.style = attrs.style.substr(1) || undefined
- // #ifdef (MP-WEIXIN || MP-QQ) && VUE3
- if (!attrs.style) {
- delete attrs.style
- }
- // #endif
- } else {
- if ((node.name === 'pre' || ((attrs.style || '').includes('white-space') && attrs.style.includes('pre'))) && this.pre !== 2) {
- this.pre = node.pre = 1
- }
- node.children = []
- this.stack.push(node)
- }
-
- // 加入节点树
- siblings.push(node)
-}
-
-/**
- * @description 解析到标签结束
- * @param {String} name 标签名
- * @private
- */
-Parser.prototype.onCloseTag = function (name) {
- // 依次出栈到匹配为止
- name = this.xml ? name : name.toLowerCase()
- let i
- for (i = this.stack.length; i--;) {
- if (this.stack[i].name === name) break
- }
- if (i !== -1) {
- while (this.stack.length > i) {
- this.popNode()
- }
- } else if (name === 'p' || name === 'br') {
- const siblings = this.stack.length ? this.stack[this.stack.length - 1].children : this.nodes
- siblings.push({
- name,
- attrs: {
- class: tagSelector[name] || '',
- style: this.tagStyle[name] || ''
- }
- })
- }
-}
-
-/**
- * @description 处理标签出栈
- * @private
- */
-Parser.prototype.popNode = function () {
- const node = this.stack.pop()
- let attrs = node.attrs
- const children = node.children
- const parent = this.stack[this.stack.length - 1]
- const siblings = parent ? parent.children : this.nodes
-
- if (!this.hook(node) || config.ignoreTags[node.name]) {
- // 获取标题
- if (node.name === 'title' && children.length && children[0].type === 'text' && this.options.setTitle) {
- uni.setNavigationBarTitle({
- title: children[0].text
- })
- }
- siblings.pop()
- return
- }
-
- if (node.pre && this.pre !== 2) {
- // 是否合并空白符标识
- this.pre = node.pre = undefined
- for (let i = this.stack.length; i--;) {
- if (this.stack[i].pre) {
- this.pre = 1
- }
- }
- }
-
- const styleObj = {}
-
- // 转换 svg
- if (node.name === 'svg') {
- if (this.xml > 1) {
- // 多层 svg 嵌套
- this.xml--
- return
- }
- // #ifdef APP-PLUS-NVUE
- (function traversal (node) {
- if (node.name) {
- // 调整 svg 的大小写
- node.name = config.svgDict[node.name] || node.name
- for (const item in node.attrs) {
- if (config.svgDict[item]) {
- node.attrs[config.svgDict[item]] = node.attrs[item]
- node.attrs[item] = undefined
- }
- }
- for (let i = 0; i < (node.children || []).length; i++) {
- traversal(node.children[i])
- }
- }
- })(node)
- // #endif
- // #ifndef APP-PLUS-NVUE
- let src = ''
- const style = attrs.style
- attrs.style = ''
- attrs.xmlns = 'http://www.w3.org/2000/svg';
- (function traversal (node) {
- if (node.type === 'text') {
- src += node.text
- return
- }
- const name = config.svgDict[node.name] || node.name
- src += '<' + name
- for (const item in node.attrs) {
- const val = node.attrs[item]
- if (val) {
- src += ` ${config.svgDict[item] || item}="${val}"`
- }
- }
- if (!node.children) {
- src += '/>'
- } else {
- src += '>'
- for (let i = 0; i < node.children.length; i++) {
- traversal(node.children[i])
- }
- src += '' + name + '>'
- }
- })(node)
- node.name = 'img'
- node.attrs = {
- src: 'data:image/svg+xml;utf8,' + src.replace(/#/g, '%23'),
- style,
- ignore: 'T'
- }
- node.children = undefined
- // #endif
- this.xml = false
- config.ignoreTags.style = true
- return
- }
-
- // #ifndef APP-PLUS-NVUE
- // 转换 align 属性
- if (attrs.align) {
- if (node.name === 'table') {
- if (attrs.align === 'center') {
- styleObj['margin-inline-start'] = styleObj['margin-inline-end'] = 'auto'
- } else {
- styleObj.float = attrs.align
- }
- } else {
- styleObj['text-align'] = attrs.align
- }
- attrs.align = undefined
- }
-
- // 转换 dir 属性
- if (attrs.dir) {
- styleObj.direction = attrs.dir
- attrs.dir = undefined
- }
-
- // 转换 font 标签的属性
- if (node.name === 'font') {
- if (attrs.color) {
- styleObj.color = attrs.color
- attrs.color = undefined
- }
- if (attrs.face) {
- styleObj['font-family'] = attrs.face
- attrs.face = undefined
- }
- if (attrs.size) {
- let size = parseInt(attrs.size)
- if (!isNaN(size)) {
- if (size < 1) {
- size = 1
- } else if (size > 7) {
- size = 7
- }
- styleObj['font-size'] = ['x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', 'xxx-large'][size - 1]
- }
- attrs.size = undefined
- }
- }
- // #endif
-
- // 一些编辑器的自带 class
- if ((attrs.class || '').includes('align-center')) {
- styleObj['text-align'] = 'center'
- }
-
- Object.assign(styleObj, this.parseStyle(node))
-
- if (node.name !== 'table' && parseInt(styleObj.width) > windowWidth) {
- styleObj['max-width'] = '100%'
- styleObj['box-sizing'] = 'border-box'
- }
-
- // #ifndef APP-PLUS-NVUE
- if (config.blockTags[node.name]) {
- node.name = 'div'
- } else if (!config.trustTags[node.name] && !this.xml) {
- // 未知标签转为 span,避免无法显示
- node.name = 'span'
- }
-
- if (node.name === 'a' || node.name === 'ad'
- // #ifdef H5 || APP-PLUS
- || node.name === 'iframe' // eslint-disable-line
- // #endif
- ) {
- this.expose()
- } else if (node.name === 'video') {
- if ((styleObj.height || '').includes('auto')) {
- styleObj.height = undefined
- }
- /* #ifdef APP-PLUS */
- let str = ''
- node.html = str
- /* #endif */
- } else if ((node.name === 'ul' || node.name === 'ol') && node.c) {
- // 列表处理
- const types = {
- a: 'lower-alpha',
- A: 'upper-alpha',
- i: 'lower-roman',
- I: 'upper-roman'
- }
- if (types[attrs.type]) {
- attrs.style += ';list-style-type:' + types[attrs.type]
- attrs.type = undefined
- }
- for (let i = children.length; i--;) {
- if (children[i].name === 'li') {
- children[i].c = 1
- }
- }
- } else if (node.name === 'table') {
- // 表格处理
- // cellpadding、cellspacing、border 这几个常用表格属性需要通过转换实现
- let padding = parseFloat(attrs.cellpadding)
- let spacing = parseFloat(attrs.cellspacing)
- const border = parseFloat(attrs.border)
- const bordercolor = styleObj['border-color']
- const borderstyle = styleObj['border-style']
- if (node.c) {
- // padding 和 spacing 默认 2
- if (isNaN(padding)) {
- padding = 2
- }
- if (isNaN(spacing)) {
- spacing = 2
- }
- }
- if (border) {
- attrs.style += `;border:${border}px ${borderstyle || 'solid'} ${bordercolor || 'gray'}`
- }
- if (node.flag && node.c) {
- // 有 colspan 或 rowspan 且含有链接的表格通过 grid 布局实现
- styleObj.display = 'grid'
- if (spacing) {
- styleObj['grid-gap'] = spacing + 'px'
- styleObj.padding = spacing + 'px'
- } else if (border) {
- // 无间隔的情况下避免边框重叠
- attrs.style += ';border-left:0;border-top:0'
- }
-
- const width = [] // 表格的列宽
- const trList = [] // tr 列表
- const cells = [] // 保存新的单元格
- const map = {}; // 被合并单元格占用的格子
-
- (function traversal (nodes) {
- for (let i = 0; i < nodes.length; i++) {
- if (nodes[i].name === 'tr') {
- trList.push(nodes[i])
- } else {
- traversal(nodes[i].children || [])
- }
- }
- })(children)
-
- for (let row = 1; row <= trList.length; row++) {
- let col = 1
- for (let j = 0; j < trList[row - 1].children.length; j++) {
- const td = trList[row - 1].children[j]
- if (td.name === 'td' || td.name === 'th') {
- // 这个格子被上面的单元格占用,则列号++
- while (map[row + '.' + col]) {
- col++
- }
- let style = td.attrs.style || ''
- let start = style.indexOf('width') ? style.indexOf(';width') : 0
- // 提取出 td 的宽度
- if (start !== -1) {
- let end = style.indexOf(';', start + 6)
- if (end === -1) {
- end = style.length
- }
- if (!td.attrs.colspan) {
- width[col] = style.substring(start ? start + 7 : 6, end)
- }
- style = style.substr(0, start) + style.substr(end)
- }
- // 设置竖直对齐
- style += ';display:flex'
- start = style.indexOf('vertical-align')
- if (start !== -1) {
- const val = style.substr(start + 15, 10)
- if (val.includes('middle')) {
- style += ';align-items:center'
- } else if (val.includes('bottom')) {
- style += ';align-items:flex-end'
- }
- } else {
- style += ';align-items:center'
- }
- // 设置水平对齐
- start = style.indexOf('text-align')
- if (start !== -1) {
- const val = style.substr(start + 11, 10)
- if (val.includes('center')) {
- style += ';justify-content: center'
- } else if (val.includes('right')) {
- style += ';justify-content: right'
- }
- }
- style = (border ? `;border:${border}px ${borderstyle || 'solid'} ${bordercolor || 'gray'}` + (spacing ? '' : ';border-right:0;border-bottom:0') : '') + (padding ? `;padding:${padding}px` : '') + ';' + style
- // 处理列合并
- if (td.attrs.colspan) {
- style += `;grid-column-start:${col};grid-column-end:${col + parseInt(td.attrs.colspan)}`
- if (!td.attrs.rowspan) {
- style += `;grid-row-start:${row};grid-row-end:${row + 1}`
- }
- col += parseInt(td.attrs.colspan) - 1
- }
- // 处理行合并
- if (td.attrs.rowspan) {
- style += `;grid-row-start:${row};grid-row-end:${row + parseInt(td.attrs.rowspan)}`
- if (!td.attrs.colspan) {
- style += `;grid-column-start:${col};grid-column-end:${col + 1}`
- }
- // 记录下方单元格被占用
- for (let rowspan = 1; rowspan < td.attrs.rowspan; rowspan++) {
- for (let colspan = 0; colspan < (td.attrs.colspan || 1); colspan++) {
- map[(row + rowspan) + '.' + (col - colspan)] = 1
- }
- }
- }
- if (style) {
- td.attrs.style = style
- }
- cells.push(td)
- col++
- }
- }
- if (row === 1) {
- let temp = ''
- for (let i = 1; i < col; i++) {
- temp += (width[i] ? width[i] : 'auto') + ' '
- }
- styleObj['grid-template-columns'] = temp
- }
- }
- node.children = cells
- } else {
- // 没有使用合并单元格的表格通过 table 布局实现
- if (node.c) {
- styleObj.display = 'table'
- }
- if (!isNaN(spacing)) {
- styleObj['border-spacing'] = spacing + 'px'
- }
- if (border || padding) {
- // 遍历
- (function traversal (nodes) {
- for (let i = 0; i < nodes.length; i++) {
- const td = nodes[i]
- if (td.name === 'th' || td.name === 'td') {
- if (border) {
- td.attrs.style = `border:${border}px ${borderstyle || 'solid'} ${bordercolor || 'gray'};${td.attrs.style || ''}`
- }
- if (padding) {
- td.attrs.style = `padding:${padding}px;${td.attrs.style || ''}`
- }
- } else if (td.children) {
- traversal(td.children)
- }
- }
- })(children)
- }
- }
- // 给表格添加一个单独的横向滚动层
- if (this.options.scrollTable && !(attrs.style || '').includes('inline')) {
- const table = Object.assign({}, node)
- node.name = 'div'
- node.attrs = {
- style: 'overflow:auto'
- }
- node.children = [table]
- attrs = table.attrs
- }
- } else if ((node.name === 'td' || node.name === 'th') && (attrs.colspan || attrs.rowspan)) {
- for (let i = this.stack.length; i--;) {
- if (this.stack[i].name === 'table') {
- this.stack[i].flag = 1 // 指示含有合并单元格
- break
- }
- }
- } else if (node.name === 'ruby') {
- // 转换 ruby
- node.name = 'span'
- for (let i = 0; i < children.length - 1; i++) {
- if (children[i].type === 'text' && children[i + 1].name === 'rt') {
- children[i] = {
- name: 'div',
- attrs: {
- style: 'display:inline-block;text-align:center'
- },
- children: [{
- name: 'div',
- attrs: {
- style: 'font-size:50%;' + (children[i + 1].attrs.style || '')
- },
- children: children[i + 1].children
- }, children[i]]
- }
- children.splice(i + 1, 1)
- }
- }
- } else if (node.c) {
- (function traversal (node) {
- node.c = 2
- for (let i = node.children.length; i--;) {
- const child = node.children[i]
- // #ifdef (MP-WEIXIN || MP-QQ || APP-PLUS || MP-360) && VUE3
- if (child.name && (config.inlineTags[child.name] || ((child.attrs.style || '').includes('inline') && child.children)) && !child.c) {
- traversal(child)
- }
- // #endif
- if (!child.c || child.name === 'table') {
- node.c = 1
- }
- }
- })(node)
- }
-
- if ((styleObj.display || '').includes('flex') && !node.c) {
- for (let i = children.length; i--;) {
- const item = children[i]
- if (item.f) {
- item.attrs.style = (item.attrs.style || '') + item.f
- item.f = undefined
- }
- }
- }
- // flex 布局时部分样式需要提取到 rich-text 外层
- const flex = parent && ((parent.attrs.style || '').includes('flex') || (parent.attrs.style || '').includes('grid'))
- // #ifdef MP-WEIXIN
- // 检查基础库版本 virtualHost 是否可用
- && !(node.c && wx.getNFCAdapter) // eslint-disable-line
- // #endif
- // #ifndef MP-WEIXIN || MP-QQ || MP-BAIDU || MP-TOUTIAO
- && !node.c // eslint-disable-line
- // #endif
- if (flex) {
- node.f = ';max-width:100%'
- }
-
- if (children.length >= 50 && node.c && !(styleObj.display || '').includes('flex')) {
- mergeNodes(children)
- }
- // #endif
-
- for (const key in styleObj) {
- if (styleObj[key]) {
- const val = `;${key}:${styleObj[key].replace(' !important', '')}`
- /* #ifndef APP-PLUS-NVUE */
- if (flex && ((key.includes('flex') && key !== 'flex-direction') || key === 'align-self' || key.includes('grid') || styleObj[key][0] === '-' || (key.includes('width') && val.includes('%')))) {
- node.f += val
- if (key === 'width') {
- attrs.style += ';width:100%'
- }
- } else /* #endif */ {
- attrs.style += val
- }
- }
- }
- attrs.style = attrs.style.substr(1) || undefined
- // #ifdef (MP-WEIXIN || MP-QQ) && VUE3
- for (const key in attrs) {
- if (!attrs[key]) {
- delete attrs[key]
- }
- }
- // #endif
-}
-
-/**
- * @description 解析到文本
- * @param {String} text 文本内容
- */
-Parser.prototype.onText = function (text) {
- if (!this.pre) {
- // 合并空白符
- let trim = ''
- let flag
- for (let i = 0, len = text.length; i < len; i++) {
- if (!blankChar[text[i]]) {
- trim += text[i]
- } else {
- if (trim[trim.length - 1] !== ' ') {
- trim += ' '
- }
- if (text[i] === '\n' && !flag) {
- flag = true
- }
- }
- }
- // 去除含有换行符的空串
- if (trim === ' ') {
- if (flag) return
- // #ifdef VUE3
- else {
- const parent = this.stack[this.stack.length - 1]
- if (parent && parent.name[0] === 't') return
- }
- // #endif
- }
- text = trim
- }
- const node = Object.create(null)
- node.type = 'text'
- // #ifdef (MP-BAIDU || MP-ALIPAY || MP-TOUTIAO) && VUE3
- node.attrs = {}
- // #endif
- node.text = decodeEntity(text)
- if (this.hook(node)) {
- // #ifdef MP-WEIXIN
- if (this.options.selectable === 'force' && system.includes('iOS') && !uni.canIUse('rich-text.user-select')) {
- this.expose()
- }
- // #endif
- const siblings = this.stack.length ? this.stack[this.stack.length - 1].children : this.nodes
- siblings.push(node)
- }
-}
-
-/**
- * @description html 词法分析器
- * @param {Object} handler 高层处理器
- */
-function Lexer (handler) {
- this.handler = handler
-}
-
-/**
- * @description 执行解析
- * @param {String} content 要解析的文本
- */
-Lexer.prototype.parse = function (content) {
- this.content = content || ''
- this.i = 0 // 标记解析位置
- this.start = 0 // 标记一个单词的开始位置
- this.state = this.text // 当前状态
- for (let len = this.content.length; this.i !== -1 && this.i < len;) {
- this.state()
- }
-}
-
-/**
- * @description 检查标签是否闭合
- * @param {String} method 如果闭合要进行的操作
- * @returns {Boolean} 是否闭合
- * @private
- */
-Lexer.prototype.checkClose = function (method) {
- const selfClose = this.content[this.i] === '/'
- if (this.content[this.i] === '>' || (selfClose && this.content[this.i + 1] === '>')) {
- if (method) {
- this.handler[method](this.content.substring(this.start, this.i))
- }
- this.i += selfClose ? 2 : 1
- this.start = this.i
- this.handler.onOpenTag(selfClose)
- if (this.handler.tagName === 'script') {
- this.i = this.content.indexOf('', this.i)
- if (this.i !== -1) {
- this.i += 2
- this.start = this.i
- }
- this.state = this.endTag
- } else {
- this.state = this.text
- }
- return true
- }
- return false
-}
-
-/**
- * @description 文本状态
- * @private
- */
-Lexer.prototype.text = function () {
- this.i = this.content.indexOf('<', this.i) // 查找最近的标签
- if (this.i === -1) {
- // 没有标签了
- if (this.start < this.content.length) {
- this.handler.onText(this.content.substring(this.start, this.content.length))
- }
- return
- }
- const c = this.content[this.i + 1]
- if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
- // 标签开头
- if (this.start !== this.i) {
- this.handler.onText(this.content.substring(this.start, this.i))
- }
- this.start = ++this.i
- this.state = this.tagName
- } else if (c === '/' || c === '!' || c === '?') {
- if (this.start !== this.i) {
- this.handler.onText(this.content.substring(this.start, this.i))
- }
- const next = this.content[this.i + 2]
- if (c === '/' && ((next >= 'a' && next <= 'z') || (next >= 'A' && next <= 'Z'))) {
- // 标签结尾
- this.i += 2
- this.start = this.i
- this.state = this.endTag
- return
- }
- // 处理注释
- let end = '-->'
- if (c !== '!' || this.content[this.i + 2] !== '-' || this.content[this.i + 3] !== '-') {
- end = '>'
- }
- this.i = this.content.indexOf(end, this.i)
- if (this.i !== -1) {
- this.i += end.length
- this.start = this.i
- }
- } else {
- this.i++
- }
-}
-
-/**
- * @description 标签名状态
- * @private
- */
-Lexer.prototype.tagName = function () {
- if (blankChar[this.content[this.i]]) {
- // 解析到标签名
- this.handler.onTagName(this.content.substring(this.start, this.i))
- while (blankChar[this.content[++this.i]]);
- if (this.i < this.content.length && !this.checkClose()) {
- this.start = this.i
- this.state = this.attrName
- }
- } else if (!this.checkClose('onTagName')) {
- this.i++
- }
-}
-
-/**
- * @description 属性名状态
- * @private
- */
-Lexer.prototype.attrName = function () {
- let c = this.content[this.i]
- if (blankChar[c] || c === '=') {
- // 解析到属性名
- this.handler.onAttrName(this.content.substring(this.start, this.i))
- let needVal = c === '='
- const len = this.content.length
- while (++this.i < len) {
- c = this.content[this.i]
- if (!blankChar[c]) {
- if (this.checkClose()) return
- if (needVal) {
- // 等号后遇到第一个非空字符
- this.start = this.i
- this.state = this.attrVal
- return
- }
- if (this.content[this.i] === '=') {
- needVal = true
- } else {
- this.start = this.i
- this.state = this.attrName
- return
- }
- }
- }
- } else if (!this.checkClose('onAttrName')) {
- this.i++
- }
-}
-
-/**
- * @description 属性值状态
- * @private
- */
-Lexer.prototype.attrVal = function () {
- const c = this.content[this.i]
- const len = this.content.length
- if (c === '"' || c === "'") {
- // 有冒号的属性
- this.start = ++this.i
- this.i = this.content.indexOf(c, this.i)
- if (this.i === -1) return
- this.handler.onAttrVal(this.content.substring(this.start, this.i))
- } else {
- // 没有冒号的属性
- for (; this.i < len; this.i++) {
- if (blankChar[this.content[this.i]]) {
- this.handler.onAttrVal(this.content.substring(this.start, this.i))
- break
- } else if (this.checkClose('onAttrVal')) return
- }
- }
- while (blankChar[this.content[++this.i]]);
- if (this.i < len && !this.checkClose()) {
- this.start = this.i
- this.state = this.attrName
- }
-}
-
-/**
- * @description 结束标签状态
- * @returns {String} 结束的标签名
- * @private
- */
-Lexer.prototype.endTag = function () {
- const c = this.content[this.i]
- if (blankChar[c] || c === '>' || c === '/') {
- this.handler.onCloseTag(this.content.substring(this.start, this.i))
- if (c !== '>') {
- this.i = this.content.indexOf('>', this.i)
- if (this.i === -1) return
- }
- this.start = ++this.i
- this.state = this.text
- } else {
- this.i++
- }
-}
-
-export default Parser
diff --git a/uni_modules/zero-markdown-view/components/mp-html/style/index.js b/uni_modules/zero-markdown-view/components/mp-html/style/index.js
deleted file mode 100644
index abfb371..0000000
--- a/uni_modules/zero-markdown-view/components/mp-html/style/index.js
+++ /dev/null
@@ -1,129 +0,0 @@
-/**
- * @fileoverview style 插件
- */
-// #ifndef APP-PLUS-NVUE
-import Parser from './parser'
-// #endif
-
-function Style () {
- this.styles = []
-}
-
-// #ifndef APP-PLUS-NVUE
-Style.prototype.onParse = function (node, vm) {
- // 获取样式
- if (node.name === 'style' && node.children.length && node.children[0].type === 'text') {
- this.styles = this.styles.concat(new Parser().parse(node.children[0].text))
- } else if (node.name) {
- // 匹配样式(对非文本标签)
- // 存储不同优先级的样式 name < class < id < 后代
- let matched = ['', '', '', '']
- for (let i = 0, len = this.styles.length; i < len; i++) {
- const item = this.styles[i]
- let res = match(node, item.key || item.list[item.list.length - 1])
- let j
- if (res) {
- // 后代选择器
- if (!item.key) {
- j = item.list.length - 2
- for (let k = vm.stack.length; j >= 0 && k--;) {
- // 子选择器
- if (item.list[j] === '>') {
- // 错误情况
- if (j < 1 || j > item.list.length - 2) break
- if (match(vm.stack[k], item.list[j - 1])) {
- j -= 2
- } else {
- j++
- }
- } else if (match(vm.stack[k], item.list[j])) {
- j--
- }
- }
- res = 4
- }
- if (item.key || j < 0) {
- // 添加伪类
- if (item.pseudo && node.children) {
- let text
- item.style = item.style.replace(/content:([^;]+)/, (_, $1) => {
- text = $1.replace(/['"]/g, '')
- // 处理 attr 函数
- .replace(/attr\((.+?)\)/, (_, $1) => node.attrs[$1.trim()] || '')
- // 编码 \xxx
- .replace(/\\(\w{4})/, (_, $1) => String.fromCharCode(parseInt($1, 16)))
- return ''
- })
- const pseudo = {
- name: 'span',
- attrs: {
- style: item.style
- },
- children: [{
- type: 'text',
- text
- }]
- }
- if (item.pseudo === 'before') {
- node.children.unshift(pseudo)
- } else {
- node.children.push(pseudo)
- }
- } else {
- matched[res - 1] += item.style + (item.style[item.style.length - 1] === ';' ? '' : ';')
- }
- }
- }
- }
- matched = matched.join('')
- if (matched.length > 2) {
- node.attrs.style = matched + (node.attrs.style || '')
- }
- }
-}
-
-/**
- * @description 匹配样式
- * @param {object} node 要匹配的标签
- * @param {string|string[]} keys 选择器
- * @returns {number} 0:不匹配;1:name 匹配;2:class 匹配;3:id 匹配
- */
-function match (node, keys) {
- function matchItem (key) {
- if (key[0] === '#') {
- // 匹配 id
- if (node.attrs.id && node.attrs.id.trim() === key.substr(1)) return 3
- } else if (key[0] === '.') {
- // 匹配 class
- key = key.substr(1)
- const selectors = (node.attrs.class || '').split(' ')
- for (let i = 0; i < selectors.length; i++) {
- if (selectors[i].trim() === key) return 2
- }
- } else if (node.name === key) {
- // 匹配 name
- return 1
- }
- return 0
- }
-
- // 多选择器交集
- if (keys instanceof Array) {
- let res = 0
- for (let j = 0; j < keys.length; j++) {
- const tmp = matchItem(keys[j])
- // 任意一个不匹配就失败
- if (!tmp) return 0
- // 优先级最大的一个作为最终优先级
- if (tmp > res) {
- res = tmp
- }
- }
- return res
- }
-
- return matchItem(keys)
-}
-// #endif
-
-export default Style
diff --git a/uni_modules/zero-markdown-view/components/mp-html/style/parser.js b/uni_modules/zero-markdown-view/components/mp-html/style/parser.js
deleted file mode 100644
index b639334..0000000
--- a/uni_modules/zero-markdown-view/components/mp-html/style/parser.js
+++ /dev/null
@@ -1,175 +0,0 @@
-const blank = {
- ' ': true,
- '\n': true,
- '\t': true,
- '\r': true,
- '\f': true
-}
-
-function Parser () {
- this.styles = []
- this.selectors = []
-}
-
-/**
- * @description 解析 css 字符串
- * @param {string} content css 内容
- */
-Parser.prototype.parse = function (content) {
- new Lexer(this).parse(content)
- return this.styles
-}
-
-/**
- * @description 解析到一个选择器
- * @param {string} name 名称
- */
-Parser.prototype.onSelector = function (name) {
- // 不支持的选择器
- if (name.includes('[') || name.includes('*') || name.includes('@')) return
- const selector = {}
- // 伪类
- if (name.includes(':')) {
- const info = name.split(':')
- const pseudo = info.pop()
- if (pseudo === 'before' || pseudo === 'after') {
- selector.pseudo = pseudo
- name = info[0]
- } else return
- }
-
- // 分割交集选择器
- function splitItem (str) {
- const arr = []
- let i, start
- for (i = 1, start = 0; i < str.length; i++) {
- if (str[i] === '.' || str[i] === '#') {
- arr.push(str.substring(start, i))
- start = i
- }
- }
- if (!arr.length) {
- return str
- } else {
- arr.push(str.substring(start, i))
- return arr
- }
- }
-
- // 后代选择器
- if (name.includes(' ')) {
- selector.list = []
- const list = name.split(' ')
- for (let i = 0; i < list.length; i++) {
- if (list[i].length) {
- // 拆分子选择器
- const arr = list[i].split('>')
- for (let j = 0; j < arr.length; j++) {
- selector.list.push(splitItem(arr[j]))
- if (j < arr.length - 1) {
- selector.list.push('>')
- }
- }
- }
- }
- } else {
- selector.key = splitItem(name)
- }
-
- this.selectors.push(selector)
-}
-
-/**
- * @description 解析到选择器内容
- * @param {string} content 内容
- */
-Parser.prototype.onContent = function (content) {
- // 并集选择器
- for (let i = 0; i < this.selectors.length; i++) {
- this.selectors[i].style = content
- }
- this.styles = this.styles.concat(this.selectors)
- this.selectors = []
-}
-
-/**
- * @description css 词法分析器
- * @param {object} handler 高层处理器
- */
-function Lexer (handler) {
- this.selector = ''
- this.style = ''
- this.handler = handler
-}
-
-Lexer.prototype.parse = function (content) {
- this.i = 0
- this.content = content
- this.state = this.blank
- for (let len = content.length; this.i < len; this.i++) {
- this.state(content[this.i])
- }
-}
-
-Lexer.prototype.comment = function () {
- this.i = this.content.indexOf('*/', this.i) + 1
- if (!this.i) {
- this.i = this.content.length
- }
-}
-
-Lexer.prototype.blank = function (c) {
- if (!blank[c]) {
- if (c === '/' && this.content[this.i + 1] === '*') {
- this.comment()
- return
- }
- this.selector += c
- this.state = this.name
- }
-}
-
-Lexer.prototype.name = function (c) {
- if (c === '/' && this.content[this.i + 1] === '*') {
- this.comment()
- return
- }
- if (c === '{' || c === ',' || c === ';') {
- this.handler.onSelector(this.selector.trimEnd())
- this.selector = ''
- if (c !== '{') {
- while (blank[this.content[++this.i]]);
- }
- if (this.content[this.i] === '{') {
- this.floor = 1
- this.state = this.val
- } else {
- this.selector += this.content[this.i]
- }
- } else if (blank[c]) {
- this.selector += ' '
- } else {
- this.selector += c
- }
-}
-
-Lexer.prototype.val = function (c) {
- if (c === '/' && this.content[this.i + 1] === '*') {
- this.comment()
- return
- }
- if (c === '{') {
- this.floor++
- } else if (c === '}') {
- this.floor--
- if (!this.floor) {
- this.handler.onContent(this.style)
- this.style = ''
- this.state = this.blank
- return
- }
- }
- this.style += c
-}
-
-export default Parser
diff --git a/uni_modules/zero-markdown-view/components/zero-markdown-view/zero-markdown-view.vue b/uni_modules/zero-markdown-view/components/zero-markdown-view/zero-markdown-view.vue
deleted file mode 100644
index 2e02721..0000000
--- a/uni_modules/zero-markdown-view/components/zero-markdown-view/zero-markdown-view.vue
+++ /dev/null
@@ -1,177 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/uni_modules/zero-markdown-view/package.json b/uni_modules/zero-markdown-view/package.json
deleted file mode 100644
index 4c62dd3..0000000
--- a/uni_modules/zero-markdown-view/package.json
+++ /dev/null
@@ -1,86 +0,0 @@
-{
- "id": "zero-markdown-view",
- "displayName": "zero-markdown-view(markdown解析)",
- "version": "2.0.5",
- "description": "一行代码即可实现markdown解析,支持自定义主题色,支持vue2,vue3.",
- "keywords": [
- "markdown",
- "markdown解析",
- "代码块",
- "代码高亮",
- "mp-html"
-],
- "repository": "",
- "engines": {
- "HBuilderX": "^3.1.0"
- },
- "dcloudext": {
- "type": "component-vue",
- "sale": {
- "regular": {
- "price": "0.00"
- },
- "sourcecode": {
- "price": "0.00"
- }
- },
- "contact": {
- "qq": ""
- },
- "declaration": {
- "ads": "无",
- "data": "插件不采集任何数据",
- "permissions": "无"
- },
- "npmurl": ""
- },
- "uni_modules": {
- "dependencies": [],
- "encrypt": [],
- "platforms": {
- "cloud": {
- "tcb": "y",
- "aliyun": "y",
- "alipay": "n"
- },
- "client": {
- "Vue": {
- "vue2": "y",
- "vue3": "y"
- },
- "App": {
- "app-vue": "u",
- "app-nvue": "u"
- },
- "H5-mobile": {
- "Safari": "y",
- "Android Browser": "y",
- "微信浏览器(Android)": "y",
- "QQ浏览器(Android)": "y"
- },
- "H5-pc": {
- "Chrome": "y",
- "IE": "u",
- "Edge": "y",
- "Firefox": "y",
- "Safari": "y"
- },
- "小程序": {
- "微信": "y",
- "阿里": "u",
- "百度": "u",
- "字节跳动": "u",
- "QQ": "u",
- "钉钉": "u",
- "快手": "u",
- "飞书": "u",
- "京东": "u"
- },
- "快应用": {
- "华为": "u",
- "联盟": "u"
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/uni_modules/zero-markdown-view/readme.md b/uni_modules/zero-markdown-view/readme.md
deleted file mode 100644
index 1c93ad3..0000000
--- a/uni_modules/zero-markdown-view/readme.md
+++ /dev/null
@@ -1,134 +0,0 @@
-# zero-markdown-view
-
-
-## 一. 重要更新说明
-
-### v2.0.4
-- 新增点击代码块复制代码-仅小程序可用
-
-### v2.0.1
-- 兼容vue2,vue3
-
-### v2.0.0
-- 省去了 npm install marked
-- 省去了 npm install highlight.js
-- 使用mp-html自带的插件,重新生成uniapp包,大幅减少插件体积
-传送门: [优化思路及详细过程](https://juejin.cn/post/7160995270476431373/) https://juejin.cn/post/7160995270476431373/
-
-## 二. 使用方法
-
-**符合`easycom`组件模式, 导入 `uni_modules` 后直接使用即可 **
-
-```html
-
-
-
-
-
-
-
-
-```
-
-## 三. 参数说明
-
-|参数 |类型 |默认值 |描述 |
-|-- |-- |-- |-- |
-|markdown |String | |markdown文本 |
-|themeColor |String |'#007AFF' |主题色 |
-|codeBgColor|String |'#2d2d2d' |代码块背景色 (不建议修改) |
-
-
-
-## 四. 注意事项
-
-### 关于代码块流式输出闪烁,可以尝试 给代码块后增加 `\n`
-
-
-```javascript
- computed: {
- // 流式输出时代码块处理 , 这时候请使用 msgContent 传入组件中
- msgContent() {
- if (!this.content) {
- return
- }
- let htmlString = ''
- // 判断markdown中代码块标识符的数量是否为偶数
- if (this.content.split("```").length % 2) {
- let content = this.content
- if (content[content.length - 1] != '\n') {
- content += '\n'
- }
- htmlString = content
- } else {
- htmlString = this.content
- }
- return htmlString
- }
- },
-```
-
-
-
-### 如何关闭点击代码块复制功能?
-
-找到组件文件夹 `zero-markdown-view`-`mp-html`-`highlight`-`config.js`
-
-**把 `copyByClickCode` 改成 false 即可**
-```
-export default {
- copyByClickCode: true, // 点击代码块复制
- showLanguageName: true, // 是否在代码块右上角显示语言的名称
- showLineNumber: false // 是否显示行号
-}
-```
-
-### 感谢 mp-html 插件
-
-插件地址: [https://ext.dcloud.net.cn/plugin?id=805](https://ext.dcloud.net.cn/plugin?id=805)
-
-文档地址: [https://jin-yufeng.gitee.io/mp-html/#/overview/quickstart](https://jin-yufeng.gitee.io/mp-html/#/overview/quickstart)
-
-
-插件预览:
-
-
-
-> 小程序搜索: zerojs零技术
-
-> 预览的小程序不一定能及时更新当前插件
diff --git a/unpackage/dist/cache/.vite/deps/_metadata.json b/unpackage/dist/cache/.vite/deps/_metadata.json
deleted file mode 100644
index 71bef9f..0000000
--- a/unpackage/dist/cache/.vite/deps/_metadata.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "hash": "0aaf698d",
- "configHash": "cc60d382",
- "lockfileHash": "22a0e42d",
- "browserHash": "89d9bfb2",
- "optimized": {},
- "chunks": {}
-}
\ No newline at end of file
diff --git a/unpackage/dist/cache/.vite/deps/package.json b/unpackage/dist/cache/.vite/deps/package.json
deleted file mode 100644
index 3dbc1ca..0000000
--- a/unpackage/dist/cache/.vite/deps/package.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "type": "module"
-}
diff --git a/unpackage/dist/dev/mp-weixin/app.js b/unpackage/dist/dev/mp-weixin/app.js
deleted file mode 100644
index ad0e2a8..0000000
--- a/unpackage/dist/dev/mp-weixin/app.js
+++ /dev/null
@@ -1,28 +0,0 @@
-"use strict";
-Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
-const common_vendor = require("./common/vendor.js");
-if (!Math) {
- "./pages/transition/page1/page1.js";
- "./pages/transition/page2/page2.js";
- "./pages/transition/page3/page3.js";
- "./pages/transition/page4/page4.js";
-}
-const _sfc_main = {
- onLaunch: function() {
- console.log("App Launch");
- },
- onShow: function() {
- console.log("App Show");
- },
- onHide: function() {
- console.log("App Hide");
- }
-};
-function createApp() {
- const app = common_vendor.createSSRApp(_sfc_main);
- return {
- app
- };
-}
-createApp().app.mount("#app");
-exports.createApp = createApp;
diff --git a/unpackage/dist/dev/mp-weixin/app.json b/unpackage/dist/dev/mp-weixin/app.json
deleted file mode 100644
index 5418113..0000000
--- a/unpackage/dist/dev/mp-weixin/app.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "pages": [
- "pages/transition/page1/page1",
- "pages/transition/page2/page2",
- "pages/transition/page3/page3",
- "pages/transition/page4/page4"
- ],
- "usingComponents": {}
-}
\ No newline at end of file
diff --git a/unpackage/dist/dev/mp-weixin/app.wxss b/unpackage/dist/dev/mp-weixin/app.wxss
deleted file mode 100644
index c1b6251..0000000
--- a/unpackage/dist/dev/mp-weixin/app.wxss
+++ /dev/null
@@ -1 +0,0 @@
-page{--status-bar-height:25px;--top-window-height:0px;--window-top:0px;--window-bottom:0px;--window-left:0px;--window-right:0px;--window-magin:0px}[data-c-h="true"]{display: none !important;}
\ No newline at end of file
diff --git a/unpackage/dist/dev/mp-weixin/common/assets.js b/unpackage/dist/dev/mp-weixin/common/assets.js
deleted file mode 100644
index 7300a52..0000000
--- a/unpackage/dist/dev/mp-weixin/common/assets.js
+++ /dev/null
@@ -1,3 +0,0 @@
-"use strict";
-const _imports_0 = "/static/transition/page1/pictures/button.png";
-exports._imports_0 = _imports_0;
diff --git a/unpackage/dist/dev/mp-weixin/common/vendor.js b/unpackage/dist/dev/mp-weixin/common/vendor.js
deleted file mode 100644
index 4236673..0000000
--- a/unpackage/dist/dev/mp-weixin/common/vendor.js
+++ /dev/null
@@ -1,7464 +0,0 @@
-"use strict";
-const _export_sfc = (sfc, props) => {
- const target = sfc.__vccOpts || sfc;
- for (const [key, val] of props) {
- target[key] = val;
- }
- return target;
-};
-/**
-* @vue/shared v3.4.21
-* (c) 2018-present Yuxi (Evan) You and Vue contributors
-* @license MIT
-**/
-function makeMap(str, expectsLowerCase) {
- const set2 = new Set(str.split(","));
- return expectsLowerCase ? (val) => set2.has(val.toLowerCase()) : (val) => set2.has(val);
-}
-const EMPTY_OBJ = Object.freeze({});
-const EMPTY_ARR = Object.freeze([]);
-const NOOP = () => {
-};
-const NO = () => false;
-const isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter
-(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);
-const isModelListener = (key) => key.startsWith("onUpdate:");
-const extend = Object.assign;
-const remove = (arr, el) => {
- const i = arr.indexOf(el);
- if (i > -1) {
- arr.splice(i, 1);
- }
-};
-const hasOwnProperty$1 = Object.prototype.hasOwnProperty;
-const hasOwn = (val, key) => hasOwnProperty$1.call(val, key);
-const isArray = Array.isArray;
-const isMap = (val) => toTypeString(val) === "[object Map]";
-const isSet = (val) => toTypeString(val) === "[object Set]";
-const isFunction = (val) => typeof val === "function";
-const isString = (val) => typeof val === "string";
-const isSymbol = (val) => typeof val === "symbol";
-const isObject = (val) => val !== null && typeof val === "object";
-const isPromise = (val) => {
- return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);
-};
-const objectToString = Object.prototype.toString;
-const toTypeString = (value) => objectToString.call(value);
-const toRawType = (value) => {
- return toTypeString(value).slice(8, -1);
-};
-const isPlainObject = (val) => toTypeString(val) === "[object Object]";
-const isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key;
-const isReservedProp = /* @__PURE__ */ makeMap(
- // the leading comma is intentional so empty string "" is also included
- ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"
-);
-const isBuiltInDirective = /* @__PURE__ */ makeMap(
- "bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"
-);
-const cacheStringFunction = (fn) => {
- const cache = /* @__PURE__ */ Object.create(null);
- return (str) => {
- const hit = cache[str];
- return hit || (cache[str] = fn(str));
- };
-};
-const camelizeRE = /-(\w)/g;
-const camelize = cacheStringFunction((str) => {
- return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : "");
-});
-const hyphenateRE = /\B([A-Z])/g;
-const hyphenate = cacheStringFunction(
- (str) => str.replace(hyphenateRE, "-$1").toLowerCase()
-);
-const capitalize = cacheStringFunction((str) => {
- return str.charAt(0).toUpperCase() + str.slice(1);
-});
-const toHandlerKey = cacheStringFunction((str) => {
- const s = str ? `on${capitalize(str)}` : ``;
- return s;
-});
-const hasChanged = (value, oldValue) => !Object.is(value, oldValue);
-const invokeArrayFns$1 = (fns, arg) => {
- for (let i = 0; i < fns.length; i++) {
- fns[i](arg);
- }
-};
-const def = (obj, key, value) => {
- Object.defineProperty(obj, key, {
- configurable: true,
- enumerable: false,
- value
- });
-};
-const looseToNumber = (val) => {
- const n = parseFloat(val);
- return isNaN(n) ? val : n;
-};
-let _globalThis;
-const getGlobalThis = () => {
- return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {});
-};
-const SLOT_DEFAULT_NAME = "d";
-const ON_SHOW = "onShow";
-const ON_HIDE = "onHide";
-const ON_LAUNCH = "onLaunch";
-const ON_ERROR = "onError";
-const ON_THEME_CHANGE = "onThemeChange";
-const ON_PAGE_NOT_FOUND = "onPageNotFound";
-const ON_UNHANDLE_REJECTION = "onUnhandledRejection";
-const ON_EXIT = "onExit";
-const ON_LOAD = "onLoad";
-const ON_READY = "onReady";
-const ON_UNLOAD = "onUnload";
-const ON_INIT = "onInit";
-const ON_SAVE_EXIT_STATE = "onSaveExitState";
-const ON_RESIZE = "onResize";
-const ON_BACK_PRESS = "onBackPress";
-const ON_PAGE_SCROLL = "onPageScroll";
-const ON_TAB_ITEM_TAP = "onTabItemTap";
-const ON_REACH_BOTTOM = "onReachBottom";
-const ON_PULL_DOWN_REFRESH = "onPullDownRefresh";
-const ON_SHARE_TIMELINE = "onShareTimeline";
-const ON_ADD_TO_FAVORITES = "onAddToFavorites";
-const ON_SHARE_APP_MESSAGE = "onShareAppMessage";
-const ON_NAVIGATION_BAR_BUTTON_TAP = "onNavigationBarButtonTap";
-const ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED = "onNavigationBarSearchInputClicked";
-const ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED = "onNavigationBarSearchInputChanged";
-const ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED = "onNavigationBarSearchInputConfirmed";
-const ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED = "onNavigationBarSearchInputFocusChanged";
-const customizeRE = /:/g;
-function customizeEvent(str) {
- return camelize(str.replace(customizeRE, "-"));
-}
-function hasLeadingSlash(str) {
- return str.indexOf("/") === 0;
-}
-function addLeadingSlash(str) {
- return hasLeadingSlash(str) ? str : "/" + str;
-}
-const invokeArrayFns = (fns, arg) => {
- let ret;
- for (let i = 0; i < fns.length; i++) {
- ret = fns[i](arg);
- }
- return ret;
-};
-function once(fn, ctx = null) {
- let res;
- return (...args) => {
- if (fn) {
- res = fn.apply(ctx, args);
- fn = null;
- }
- return res;
- };
-}
-function getValueByDataPath(obj, path) {
- if (!isString(path)) {
- return;
- }
- path = path.replace(/\[(\d+)\]/g, ".$1");
- const parts = path.split(".");
- let key = parts[0];
- if (!obj) {
- obj = {};
- }
- if (parts.length === 1) {
- return obj[key];
- }
- return getValueByDataPath(obj[key], parts.slice(1).join("."));
-}
-function sortObject(obj) {
- let sortObj = {};
- if (isPlainObject(obj)) {
- Object.keys(obj).sort().forEach((key) => {
- const _key = key;
- sortObj[_key] = obj[_key];
- });
- }
- return !Object.keys(sortObj) ? obj : sortObj;
-}
-const encode = encodeURIComponent;
-function stringifyQuery(obj, encodeStr = encode) {
- const res = obj ? Object.keys(obj).map((key) => {
- let val = obj[key];
- if (typeof val === void 0 || val === null) {
- val = "";
- } else if (isPlainObject(val)) {
- val = JSON.stringify(val);
- }
- return encodeStr(key) + "=" + encodeStr(val);
- }).filter((x) => x.length > 0).join("&") : null;
- return res ? `?${res}` : "";
-}
-const PAGE_HOOKS = [
- ON_INIT,
- ON_LOAD,
- ON_SHOW,
- ON_HIDE,
- ON_UNLOAD,
- ON_BACK_PRESS,
- ON_PAGE_SCROLL,
- ON_TAB_ITEM_TAP,
- ON_REACH_BOTTOM,
- ON_PULL_DOWN_REFRESH,
- ON_SHARE_TIMELINE,
- ON_SHARE_APP_MESSAGE,
- ON_ADD_TO_FAVORITES,
- ON_SAVE_EXIT_STATE,
- ON_NAVIGATION_BAR_BUTTON_TAP,
- ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED,
- ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED,
- ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED,
- ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED
-];
-function isRootHook(name) {
- return PAGE_HOOKS.indexOf(name) > -1;
-}
-const UniLifecycleHooks = [
- ON_SHOW,
- ON_HIDE,
- ON_LAUNCH,
- ON_ERROR,
- ON_THEME_CHANGE,
- ON_PAGE_NOT_FOUND,
- ON_UNHANDLE_REJECTION,
- ON_EXIT,
- ON_INIT,
- ON_LOAD,
- ON_READY,
- ON_UNLOAD,
- ON_RESIZE,
- ON_BACK_PRESS,
- ON_PAGE_SCROLL,
- ON_TAB_ITEM_TAP,
- ON_REACH_BOTTOM,
- ON_PULL_DOWN_REFRESH,
- ON_SHARE_TIMELINE,
- ON_ADD_TO_FAVORITES,
- ON_SHARE_APP_MESSAGE,
- ON_SAVE_EXIT_STATE,
- ON_NAVIGATION_BAR_BUTTON_TAP,
- ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED,
- ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED,
- ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED,
- ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED
-];
-const MINI_PROGRAM_PAGE_RUNTIME_HOOKS = /* @__PURE__ */ (() => {
- return {
- onPageScroll: 1,
- onShareAppMessage: 1 << 1,
- onShareTimeline: 1 << 2
- };
-})();
-function isUniLifecycleHook(name, value, checkType = true) {
- if (checkType && !isFunction(value)) {
- return false;
- }
- if (UniLifecycleHooks.indexOf(name) > -1) {
- return true;
- } else if (name.indexOf("on") === 0) {
- return true;
- }
- return false;
-}
-let vueApp;
-const createVueAppHooks = [];
-function onCreateVueApp(hook) {
- if (vueApp) {
- return hook(vueApp);
- }
- createVueAppHooks.push(hook);
-}
-function invokeCreateVueAppHook(app) {
- vueApp = app;
- createVueAppHooks.forEach((hook) => hook(app));
-}
-const invokeCreateErrorHandler = once((app, createErrorHandler2) => {
- if (isFunction(app._component.onError)) {
- return createErrorHandler2(app);
- }
-});
-const E = function() {
-};
-E.prototype = {
- on: function(name, callback, ctx) {
- var e = this.e || (this.e = {});
- (e[name] || (e[name] = [])).push({
- fn: callback,
- ctx
- });
- return this;
- },
- once: function(name, callback, ctx) {
- var self2 = this;
- function listener() {
- self2.off(name, listener);
- callback.apply(ctx, arguments);
- }
- listener._ = callback;
- return this.on(name, listener, ctx);
- },
- emit: function(name) {
- var data = [].slice.call(arguments, 1);
- var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
- var i = 0;
- var len = evtArr.length;
- for (i; i < len; i++) {
- evtArr[i].fn.apply(evtArr[i].ctx, data);
- }
- return this;
- },
- off: function(name, callback) {
- var e = this.e || (this.e = {});
- var evts = e[name];
- var liveEvents = [];
- if (evts && callback) {
- for (var i = evts.length - 1; i >= 0; i--) {
- if (evts[i].fn === callback || evts[i].fn._ === callback) {
- evts.splice(i, 1);
- break;
- }
- }
- liveEvents = evts;
- }
- liveEvents.length ? e[name] = liveEvents : delete e[name];
- return this;
- }
-};
-var E$1 = E;
-const LOCALE_ZH_HANS = "zh-Hans";
-const LOCALE_ZH_HANT = "zh-Hant";
-const LOCALE_EN = "en";
-const LOCALE_FR = "fr";
-const LOCALE_ES = "es";
-function include(str, parts) {
- return !!parts.find((part) => str.indexOf(part) !== -1);
-}
-function startsWith(str, parts) {
- return parts.find((part) => str.indexOf(part) === 0);
-}
-function normalizeLocale(locale, messages) {
- if (!locale) {
- return;
- }
- locale = locale.trim().replace(/_/g, "-");
- if (messages && messages[locale]) {
- return locale;
- }
- locale = locale.toLowerCase();
- if (locale === "chinese") {
- return LOCALE_ZH_HANS;
- }
- if (locale.indexOf("zh") === 0) {
- if (locale.indexOf("-hans") > -1) {
- return LOCALE_ZH_HANS;
- }
- if (locale.indexOf("-hant") > -1) {
- return LOCALE_ZH_HANT;
- }
- if (include(locale, ["-tw", "-hk", "-mo", "-cht"])) {
- return LOCALE_ZH_HANT;
- }
- return LOCALE_ZH_HANS;
- }
- let locales = [LOCALE_EN, LOCALE_FR, LOCALE_ES];
- if (messages && Object.keys(messages).length > 0) {
- locales = Object.keys(messages);
- }
- const lang = startsWith(locale, locales);
- if (lang) {
- return lang;
- }
-}
-function getBaseSystemInfo() {
- return wx.getSystemInfoSync();
-}
-function validateProtocolFail(name, msg) {
- console.warn(`${name}: ${msg}`);
-}
-function validateProtocol(name, data, protocol, onFail) {
- if (!onFail) {
- onFail = validateProtocolFail;
- }
- for (const key in protocol) {
- const errMsg = validateProp$1(key, data[key], protocol[key], !hasOwn(data, key));
- if (isString(errMsg)) {
- onFail(name, errMsg);
- }
- }
-}
-function validateProtocols(name, args, protocol, onFail) {
- if (!protocol) {
- return;
- }
- if (!isArray(protocol)) {
- return validateProtocol(name, args[0] || /* @__PURE__ */ Object.create(null), protocol, onFail);
- }
- const len = protocol.length;
- const argsLen = args.length;
- for (let i = 0; i < len; i++) {
- const opts = protocol[i];
- const data = /* @__PURE__ */ Object.create(null);
- if (argsLen > i) {
- data[opts.name] = args[i];
- }
- validateProtocol(name, data, { [opts.name]: opts }, onFail);
- }
-}
-function validateProp$1(name, value, prop, isAbsent) {
- if (!isPlainObject(prop)) {
- prop = { type: prop };
- }
- const { type, required, validator } = prop;
- if (required && isAbsent) {
- return 'Missing required args: "' + name + '"';
- }
- if (value == null && !required) {
- return;
- }
- if (type != null) {
- let isValid = false;
- const types = isArray(type) ? type : [type];
- const expectedTypes = [];
- for (let i = 0; i < types.length && !isValid; i++) {
- const { valid, expectedType } = assertType$1(value, types[i]);
- expectedTypes.push(expectedType || "");
- isValid = valid;
- }
- if (!isValid) {
- return getInvalidTypeMessage$1(name, value, expectedTypes);
- }
- }
- if (validator) {
- return validator(value);
- }
-}
-const isSimpleType$1 = /* @__PURE__ */ makeMap("String,Number,Boolean,Function,Symbol");
-function assertType$1(value, type) {
- let valid;
- const expectedType = getType$1(type);
- if (isSimpleType$1(expectedType)) {
- const t = typeof value;
- valid = t === expectedType.toLowerCase();
- if (!valid && t === "object") {
- valid = value instanceof type;
- }
- } else if (expectedType === "Object") {
- valid = isObject(value);
- } else if (expectedType === "Array") {
- valid = isArray(value);
- } else {
- {
- valid = value instanceof type;
- }
- }
- return {
- valid,
- expectedType
- };
-}
-function getInvalidTypeMessage$1(name, value, expectedTypes) {
- let message = `Invalid args: type check failed for args "${name}". Expected ${expectedTypes.map(capitalize).join(", ")}`;
- const expectedType = expectedTypes[0];
- const receivedType = toRawType(value);
- const expectedValue = styleValue$1(value, expectedType);
- const receivedValue = styleValue$1(value, receivedType);
- if (expectedTypes.length === 1 && isExplicable$1(expectedType) && !isBoolean$1(expectedType, receivedType)) {
- message += ` with value ${expectedValue}`;
- }
- message += `, got ${receivedType} `;
- if (isExplicable$1(receivedType)) {
- message += `with value ${receivedValue}.`;
- }
- return message;
-}
-function getType$1(ctor) {
- const match = ctor && ctor.toString().match(/^\s*function (\w+)/);
- return match ? match[1] : "";
-}
-function styleValue$1(value, type) {
- if (type === "String") {
- return `"${value}"`;
- } else if (type === "Number") {
- return `${Number(value)}`;
- } else {
- return `${value}`;
- }
-}
-function isExplicable$1(type) {
- const explicitTypes = ["string", "number", "boolean"];
- return explicitTypes.some((elem) => type.toLowerCase() === elem);
-}
-function isBoolean$1(...args) {
- return args.some((elem) => elem.toLowerCase() === "boolean");
-}
-function tryCatch(fn) {
- return function() {
- try {
- return fn.apply(fn, arguments);
- } catch (e) {
- console.error(e);
- }
- };
-}
-let invokeCallbackId = 1;
-const invokeCallbacks = {};
-function addInvokeCallback(id, name, callback, keepAlive = false) {
- invokeCallbacks[id] = {
- name,
- keepAlive,
- callback
- };
- return id;
-}
-function invokeCallback(id, res, extras) {
- if (typeof id === "number") {
- const opts = invokeCallbacks[id];
- if (opts) {
- if (!opts.keepAlive) {
- delete invokeCallbacks[id];
- }
- return opts.callback(res, extras);
- }
- }
- return res;
-}
-const API_SUCCESS = "success";
-const API_FAIL = "fail";
-const API_COMPLETE = "complete";
-function getApiCallbacks(args) {
- const apiCallbacks = {};
- for (const name in args) {
- const fn = args[name];
- if (isFunction(fn)) {
- apiCallbacks[name] = tryCatch(fn);
- delete args[name];
- }
- }
- return apiCallbacks;
-}
-function normalizeErrMsg(errMsg, name) {
- if (!errMsg || errMsg.indexOf(":fail") === -1) {
- return name + ":ok";
- }
- return name + errMsg.substring(errMsg.indexOf(":fail"));
-}
-function createAsyncApiCallback(name, args = {}, { beforeAll, beforeSuccess } = {}) {
- if (!isPlainObject(args)) {
- args = {};
- }
- const { success, fail, complete } = getApiCallbacks(args);
- const hasSuccess = isFunction(success);
- const hasFail = isFunction(fail);
- const hasComplete = isFunction(complete);
- const callbackId = invokeCallbackId++;
- addInvokeCallback(callbackId, name, (res) => {
- res = res || {};
- res.errMsg = normalizeErrMsg(res.errMsg, name);
- isFunction(beforeAll) && beforeAll(res);
- if (res.errMsg === name + ":ok") {
- isFunction(beforeSuccess) && beforeSuccess(res, args);
- hasSuccess && success(res);
- } else {
- hasFail && fail(res);
- }
- hasComplete && complete(res);
- });
- return callbackId;
-}
-const HOOK_SUCCESS = "success";
-const HOOK_FAIL = "fail";
-const HOOK_COMPLETE = "complete";
-const globalInterceptors = {};
-const scopedInterceptors = {};
-function wrapperHook(hook, params) {
- return function(data) {
- return hook(data, params) || data;
- };
-}
-function queue$2(hooks, data, params) {
- let promise = false;
- for (let i = 0; i < hooks.length; i++) {
- const hook = hooks[i];
- if (promise) {
- promise = Promise.resolve(wrapperHook(hook, params));
- } else {
- const res = hook(data, params);
- if (isPromise(res)) {
- promise = Promise.resolve(res);
- }
- if (res === false) {
- return {
- then() {
- },
- catch() {
- }
- };
- }
- }
- }
- return promise || {
- then(callback) {
- return callback(data);
- },
- catch() {
- }
- };
-}
-function wrapperOptions(interceptors2, options = {}) {
- [HOOK_SUCCESS, HOOK_FAIL, HOOK_COMPLETE].forEach((name) => {
- const hooks = interceptors2[name];
- if (!isArray(hooks)) {
- return;
- }
- const oldCallback = options[name];
- options[name] = function callbackInterceptor(res) {
- queue$2(hooks, res, options).then((res2) => {
- return isFunction(oldCallback) && oldCallback(res2) || res2;
- });
- };
- });
- return options;
-}
-function wrapperReturnValue(method, returnValue) {
- const returnValueHooks = [];
- if (isArray(globalInterceptors.returnValue)) {
- returnValueHooks.push(...globalInterceptors.returnValue);
- }
- const interceptor = scopedInterceptors[method];
- if (interceptor && isArray(interceptor.returnValue)) {
- returnValueHooks.push(...interceptor.returnValue);
- }
- returnValueHooks.forEach((hook) => {
- returnValue = hook(returnValue) || returnValue;
- });
- return returnValue;
-}
-function getApiInterceptorHooks(method) {
- const interceptor = /* @__PURE__ */ Object.create(null);
- Object.keys(globalInterceptors).forEach((hook) => {
- if (hook !== "returnValue") {
- interceptor[hook] = globalInterceptors[hook].slice();
- }
- });
- const scopedInterceptor = scopedInterceptors[method];
- if (scopedInterceptor) {
- Object.keys(scopedInterceptor).forEach((hook) => {
- if (hook !== "returnValue") {
- interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);
- }
- });
- }
- return interceptor;
-}
-function invokeApi(method, api, options, params) {
- const interceptor = getApiInterceptorHooks(method);
- if (interceptor && Object.keys(interceptor).length) {
- if (isArray(interceptor.invoke)) {
- const res = queue$2(interceptor.invoke, options);
- return res.then((options2) => {
- return api(wrapperOptions(getApiInterceptorHooks(method), options2), ...params);
- });
- } else {
- return api(wrapperOptions(interceptor, options), ...params);
- }
- }
- return api(options, ...params);
-}
-function hasCallback(args) {
- if (isPlainObject(args) && [API_SUCCESS, API_FAIL, API_COMPLETE].find((cb) => isFunction(args[cb]))) {
- return true;
- }
- return false;
-}
-function handlePromise(promise) {
- return promise;
-}
-function promisify$1(name, fn) {
- return (args = {}, ...rest) => {
- if (hasCallback(args)) {
- return wrapperReturnValue(name, invokeApi(name, fn, args, rest));
- }
- return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => {
- invokeApi(name, fn, extend(args, { success: resolve, fail: reject }), rest);
- })));
- };
-}
-function formatApiArgs(args, options) {
- const params = args[0];
- if (!options || !options.formatArgs || !isPlainObject(options.formatArgs) && isPlainObject(params)) {
- return;
- }
- const formatArgs = options.formatArgs;
- const keys = Object.keys(formatArgs);
- for (let i = 0; i < keys.length; i++) {
- const name = keys[i];
- const formatterOrDefaultValue = formatArgs[name];
- if (isFunction(formatterOrDefaultValue)) {
- const errMsg = formatterOrDefaultValue(args[0][name], params);
- if (isString(errMsg)) {
- return errMsg;
- }
- } else {
- if (!hasOwn(params, name)) {
- params[name] = formatterOrDefaultValue;
- }
- }
- }
-}
-function invokeSuccess(id, name, res) {
- const result = {
- errMsg: name + ":ok"
- };
- return invokeCallback(id, extend(res || {}, result));
-}
-function invokeFail(id, name, errMsg, errRes = {}) {
- const apiErrMsg = name + ":fail" + (errMsg ? " " + errMsg : "");
- delete errRes.errCode;
- let res = extend({ errMsg: apiErrMsg }, errRes);
- return invokeCallback(id, res);
-}
-function beforeInvokeApi(name, args, protocol, options) {
- {
- validateProtocols(name, args, protocol);
- }
- if (options && options.beforeInvoke) {
- const errMsg2 = options.beforeInvoke(args);
- if (isString(errMsg2)) {
- return errMsg2;
- }
- }
- const errMsg = formatApiArgs(args, options);
- if (errMsg) {
- return errMsg;
- }
-}
-function parseErrMsg(errMsg) {
- if (!errMsg || isString(errMsg)) {
- return errMsg;
- }
- if (errMsg.stack) {
- console.error(errMsg.message + "\n" + errMsg.stack);
- return errMsg.message;
- }
- return errMsg;
-}
-function wrapperTaskApi(name, fn, protocol, options) {
- return (args) => {
- const id = createAsyncApiCallback(name, args, options);
- const errMsg = beforeInvokeApi(name, [args], protocol, options);
- if (errMsg) {
- return invokeFail(id, name, errMsg);
- }
- return fn(args, {
- resolve: (res) => invokeSuccess(id, name, res),
- reject: (errMsg2, errRes) => invokeFail(id, name, parseErrMsg(errMsg2), errRes)
- });
- };
-}
-function wrapperSyncApi(name, fn, protocol, options) {
- return (...args) => {
- const errMsg = beforeInvokeApi(name, args, protocol, options);
- if (errMsg) {
- throw new Error(errMsg);
- }
- return fn.apply(null, args);
- };
-}
-function wrapperAsyncApi(name, fn, protocol, options) {
- return wrapperTaskApi(name, fn, protocol, options);
-}
-function defineSyncApi(name, fn, protocol, options) {
- return wrapperSyncApi(name, fn, protocol, options);
-}
-function defineAsyncApi(name, fn, protocol, options) {
- return promisify$1(name, wrapperAsyncApi(name, fn, protocol, options));
-}
-const API_UPX2PX = "upx2px";
-const Upx2pxProtocol = [
- {
- name: "upx",
- type: [Number, String],
- required: true
- }
-];
-const EPS = 1e-4;
-const BASE_DEVICE_WIDTH = 750;
-let isIOS = false;
-let deviceWidth = 0;
-let deviceDPR = 0;
-function checkDeviceWidth() {
- const { platform, pixelRatio, windowWidth } = getBaseSystemInfo();
- deviceWidth = windowWidth;
- deviceDPR = pixelRatio;
- isIOS = platform === "ios";
-}
-const upx2px = defineSyncApi(API_UPX2PX, (number, newDeviceWidth) => {
- if (deviceWidth === 0) {
- checkDeviceWidth();
- }
- number = Number(number);
- if (number === 0) {
- return 0;
- }
- let width = newDeviceWidth || deviceWidth;
- let result = number / BASE_DEVICE_WIDTH * width;
- if (result < 0) {
- result = -result;
- }
- result = Math.floor(result + EPS);
- if (result === 0) {
- if (deviceDPR === 1 || !isIOS) {
- result = 1;
- } else {
- result = 0.5;
- }
- }
- return number < 0 ? -result : result;
-}, Upx2pxProtocol);
-const API_ADD_INTERCEPTOR = "addInterceptor";
-const API_REMOVE_INTERCEPTOR = "removeInterceptor";
-const AddInterceptorProtocol = [
- {
- name: "method",
- type: [String, Object],
- required: true
- }
-];
-const RemoveInterceptorProtocol = AddInterceptorProtocol;
-function mergeInterceptorHook(interceptors2, interceptor) {
- Object.keys(interceptor).forEach((hook) => {
- if (isFunction(interceptor[hook])) {
- interceptors2[hook] = mergeHook(interceptors2[hook], interceptor[hook]);
- }
- });
-}
-function removeInterceptorHook(interceptors2, interceptor) {
- if (!interceptors2 || !interceptor) {
- return;
- }
- Object.keys(interceptor).forEach((name) => {
- const hooks = interceptors2[name];
- const hook = interceptor[name];
- if (isArray(hooks) && isFunction(hook)) {
- remove(hooks, hook);
- }
- });
-}
-function mergeHook(parentVal, childVal) {
- const res = childVal ? parentVal ? parentVal.concat(childVal) : isArray(childVal) ? childVal : [childVal] : parentVal;
- return res ? dedupeHooks(res) : res;
-}
-function dedupeHooks(hooks) {
- const res = [];
- for (let i = 0; i < hooks.length; i++) {
- if (res.indexOf(hooks[i]) === -1) {
- res.push(hooks[i]);
- }
- }
- return res;
-}
-const addInterceptor = defineSyncApi(API_ADD_INTERCEPTOR, (method, interceptor) => {
- if (isString(method) && isPlainObject(interceptor)) {
- mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), interceptor);
- } else if (isPlainObject(method)) {
- mergeInterceptorHook(globalInterceptors, method);
- }
-}, AddInterceptorProtocol);
-const removeInterceptor = defineSyncApi(API_REMOVE_INTERCEPTOR, (method, interceptor) => {
- if (isString(method)) {
- if (isPlainObject(interceptor)) {
- removeInterceptorHook(scopedInterceptors[method], interceptor);
- } else {
- delete scopedInterceptors[method];
- }
- } else if (isPlainObject(method)) {
- removeInterceptorHook(globalInterceptors, method);
- }
-}, RemoveInterceptorProtocol);
-const interceptors = {};
-const API_ON = "$on";
-const OnProtocol = [
- {
- name: "event",
- type: String,
- required: true
- },
- {
- name: "callback",
- type: Function,
- required: true
- }
-];
-const API_ONCE = "$once";
-const OnceProtocol = OnProtocol;
-const API_OFF = "$off";
-const OffProtocol = [
- {
- name: "event",
- type: [String, Array]
- },
- {
- name: "callback",
- type: Function
- }
-];
-const API_EMIT = "$emit";
-const EmitProtocol = [
- {
- name: "event",
- type: String,
- required: true
- }
-];
-const emitter = new E$1();
-const $on = defineSyncApi(API_ON, (name, callback) => {
- emitter.on(name, callback);
- return () => emitter.off(name, callback);
-}, OnProtocol);
-const $once = defineSyncApi(API_ONCE, (name, callback) => {
- emitter.once(name, callback);
- return () => emitter.off(name, callback);
-}, OnceProtocol);
-const $off = defineSyncApi(API_OFF, (name, callback) => {
- if (!name) {
- emitter.e = {};
- return;
- }
- if (!isArray(name))
- name = [name];
- name.forEach((n) => emitter.off(n, callback));
-}, OffProtocol);
-const $emit = defineSyncApi(API_EMIT, (name, ...args) => {
- emitter.emit(name, ...args);
-}, EmitProtocol);
-let cid;
-let cidErrMsg;
-let enabled;
-function normalizePushMessage(message) {
- try {
- return JSON.parse(message);
- } catch (e) {
- }
- return message;
-}
-function invokePushCallback(args) {
- if (args.type === "enabled") {
- enabled = true;
- } else if (args.type === "clientId") {
- cid = args.cid;
- cidErrMsg = args.errMsg;
- invokeGetPushCidCallbacks(cid, args.errMsg);
- } else if (args.type === "pushMsg") {
- const message = {
- type: "receive",
- data: normalizePushMessage(args.message)
- };
- for (let i = 0; i < onPushMessageCallbacks.length; i++) {
- const callback = onPushMessageCallbacks[i];
- callback(message);
- if (message.stopped) {
- break;
- }
- }
- } else if (args.type === "click") {
- onPushMessageCallbacks.forEach((callback) => {
- callback({
- type: "click",
- data: normalizePushMessage(args.message)
- });
- });
- }
-}
-const getPushCidCallbacks = [];
-function invokeGetPushCidCallbacks(cid2, errMsg) {
- getPushCidCallbacks.forEach((callback) => {
- callback(cid2, errMsg);
- });
- getPushCidCallbacks.length = 0;
-}
-const API_GET_PUSH_CLIENT_ID = "getPushClientId";
-const getPushClientId = defineAsyncApi(API_GET_PUSH_CLIENT_ID, (_, { resolve, reject }) => {
- Promise.resolve().then(() => {
- if (typeof enabled === "undefined") {
- enabled = false;
- cid = "";
- cidErrMsg = "uniPush is not enabled";
- }
- getPushCidCallbacks.push((cid2, errMsg) => {
- if (cid2) {
- resolve({ cid: cid2 });
- } else {
- reject(errMsg);
- }
- });
- if (typeof cid !== "undefined") {
- invokeGetPushCidCallbacks(cid, cidErrMsg);
- }
- });
-});
-const onPushMessageCallbacks = [];
-const onPushMessage = (fn) => {
- if (onPushMessageCallbacks.indexOf(fn) === -1) {
- onPushMessageCallbacks.push(fn);
- }
-};
-const offPushMessage = (fn) => {
- if (!fn) {
- onPushMessageCallbacks.length = 0;
- } else {
- const index2 = onPushMessageCallbacks.indexOf(fn);
- if (index2 > -1) {
- onPushMessageCallbacks.splice(index2, 1);
- }
- }
-};
-const SYNC_API_RE = /^\$|getLocale|setLocale|sendNativeEvent|restoreGlobal|requireGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64|getDeviceInfo|getAppBaseInfo|getWindowInfo|getSystemSetting|getAppAuthorizeSetting/;
-const CONTEXT_API_RE = /^create|Manager$/;
-const CONTEXT_API_RE_EXC = ["createBLEConnection"];
-const ASYNC_API = ["createBLEConnection"];
-const CALLBACK_API_RE = /^on|^off/;
-function isContextApi(name) {
- return CONTEXT_API_RE.test(name) && CONTEXT_API_RE_EXC.indexOf(name) === -1;
-}
-function isSyncApi(name) {
- return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1;
-}
-function isCallbackApi(name) {
- return CALLBACK_API_RE.test(name) && name !== "onPush";
-}
-function shouldPromise(name) {
- if (isContextApi(name) || isSyncApi(name) || isCallbackApi(name)) {
- return false;
- }
- return true;
-}
-if (!Promise.prototype.finally) {
- Promise.prototype.finally = function(onfinally) {
- const promise = this.constructor;
- return this.then((value) => promise.resolve(onfinally && onfinally()).then(() => value), (reason) => promise.resolve(onfinally && onfinally()).then(() => {
- throw reason;
- }));
- };
-}
-function promisify(name, api) {
- if (!shouldPromise(name)) {
- return api;
- }
- if (!isFunction(api)) {
- return api;
- }
- return function promiseApi(options = {}, ...rest) {
- if (isFunction(options.success) || isFunction(options.fail) || isFunction(options.complete)) {
- return wrapperReturnValue(name, invokeApi(name, api, options, rest));
- }
- return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => {
- invokeApi(name, api, extend({}, options, {
- success: resolve,
- fail: reject
- }), rest);
- })));
- };
-}
-const CALLBACKS = ["success", "fail", "cancel", "complete"];
-function initWrapper(protocols2) {
- function processCallback(methodName, method, returnValue) {
- return function(res) {
- return method(processReturnValue(methodName, res, returnValue));
- };
- }
- function processArgs(methodName, fromArgs, argsOption = {}, returnValue = {}, keepFromArgs = false) {
- if (isPlainObject(fromArgs)) {
- const toArgs = keepFromArgs === true ? fromArgs : {};
- if (isFunction(argsOption)) {
- argsOption = argsOption(fromArgs, toArgs) || {};
- }
- for (const key in fromArgs) {
- if (hasOwn(argsOption, key)) {
- let keyOption = argsOption[key];
- if (isFunction(keyOption)) {
- keyOption = keyOption(fromArgs[key], fromArgs, toArgs);
- }
- if (!keyOption) {
- console.warn(`微信小程序 ${methodName} 暂不支持 ${key}`);
- } else if (isString(keyOption)) {
- toArgs[keyOption] = fromArgs[key];
- } else if (isPlainObject(keyOption)) {
- toArgs[keyOption.name ? keyOption.name : key] = keyOption.value;
- }
- } else if (CALLBACKS.indexOf(key) !== -1) {
- const callback = fromArgs[key];
- if (isFunction(callback)) {
- toArgs[key] = processCallback(methodName, callback, returnValue);
- }
- } else {
- if (!keepFromArgs && !hasOwn(toArgs, key)) {
- toArgs[key] = fromArgs[key];
- }
- }
- }
- return toArgs;
- } else if (isFunction(fromArgs)) {
- fromArgs = processCallback(methodName, fromArgs, returnValue);
- }
- return fromArgs;
- }
- function processReturnValue(methodName, res, returnValue, keepReturnValue = false) {
- if (isFunction(protocols2.returnValue)) {
- res = protocols2.returnValue(methodName, res);
- }
- return processArgs(methodName, res, returnValue, {}, keepReturnValue);
- }
- return function wrapper(methodName, method) {
- if (!hasOwn(protocols2, methodName)) {
- return method;
- }
- const protocol = protocols2[methodName];
- if (!protocol) {
- return function() {
- console.error(`微信小程序 暂不支持${methodName}`);
- };
- }
- return function(arg1, arg2) {
- let options = protocol;
- if (isFunction(protocol)) {
- options = protocol(arg1);
- }
- arg1 = processArgs(methodName, arg1, options.args, options.returnValue);
- const args = [arg1];
- if (typeof arg2 !== "undefined") {
- args.push(arg2);
- }
- const returnValue = wx[options.name || methodName].apply(wx, args);
- if (isSyncApi(methodName)) {
- return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName));
- }
- return returnValue;
- };
- };
-}
-const getLocale = () => {
- const app = isFunction(getApp) && getApp({ allowDefault: true });
- if (app && app.$vm) {
- return app.$vm.$locale;
- }
- return normalizeLocale(wx.getSystemInfoSync().language) || LOCALE_EN;
-};
-const setLocale = (locale) => {
- const app = isFunction(getApp) && getApp();
- if (!app) {
- return false;
- }
- const oldLocale = app.$vm.$locale;
- if (oldLocale !== locale) {
- app.$vm.$locale = locale;
- onLocaleChangeCallbacks.forEach((fn) => fn({ locale }));
- return true;
- }
- return false;
-};
-const onLocaleChangeCallbacks = [];
-const onLocaleChange = (fn) => {
- if (onLocaleChangeCallbacks.indexOf(fn) === -1) {
- onLocaleChangeCallbacks.push(fn);
- }
-};
-if (typeof global !== "undefined") {
- global.getLocale = getLocale;
-}
-const UUID_KEY = "__DC_STAT_UUID";
-let deviceId;
-function useDeviceId(global2 = wx) {
- return function addDeviceId(_, toRes) {
- deviceId = deviceId || global2.getStorageSync(UUID_KEY);
- if (!deviceId) {
- deviceId = Date.now() + "" + Math.floor(Math.random() * 1e7);
- wx.setStorage({
- key: UUID_KEY,
- data: deviceId
- });
- }
- toRes.deviceId = deviceId;
- };
-}
-function addSafeAreaInsets(fromRes, toRes) {
- if (fromRes.safeArea) {
- const safeArea = fromRes.safeArea;
- toRes.safeAreaInsets = {
- top: safeArea.top,
- left: safeArea.left,
- right: fromRes.windowWidth - safeArea.right,
- bottom: fromRes.screenHeight - safeArea.bottom
- };
- }
-}
-function populateParameters(fromRes, toRes) {
- const { brand = "", model = "", system = "", language = "", theme, version: version2, platform, fontSizeSetting, SDKVersion, pixelRatio, deviceOrientation } = fromRes;
- let osName = "";
- let osVersion = "";
- {
- osName = system.split(" ")[0] || "";
- osVersion = system.split(" ")[1] || "";
- }
- let hostVersion = version2;
- let deviceType = getGetDeviceType(fromRes, model);
- let deviceBrand = getDeviceBrand(brand);
- let _hostName = getHostName(fromRes);
- let _deviceOrientation = deviceOrientation;
- let _devicePixelRatio = pixelRatio;
- let _SDKVersion = SDKVersion;
- const hostLanguage = language.replace(/_/g, "-");
- const parameters = {
- appId: "",
- appName: "fitjourney前端代码",
- appVersion: "1.0.0",
- appVersionCode: "100",
- appLanguage: getAppLanguage(hostLanguage),
- uniCompileVersion: "4.24",
- uniRuntimeVersion: "4.24",
- uniPlatform: "mp-weixin",
- deviceBrand,
- deviceModel: model,
- deviceType,
- devicePixelRatio: _devicePixelRatio,
- deviceOrientation: _deviceOrientation,
- osName: osName.toLocaleLowerCase(),
- osVersion,
- hostTheme: theme,
- hostVersion,
- hostLanguage,
- hostName: _hostName,
- hostSDKVersion: _SDKVersion,
- hostFontSizeSetting: fontSizeSetting,
- windowTop: 0,
- windowBottom: 0,
- // TODO
- osLanguage: void 0,
- osTheme: void 0,
- ua: void 0,
- hostPackageName: void 0,
- browserName: void 0,
- browserVersion: void 0
- };
- extend(toRes, parameters);
-}
-function getGetDeviceType(fromRes, model) {
- let deviceType = fromRes.deviceType || "phone";
- {
- const deviceTypeMaps = {
- ipad: "pad",
- windows: "pc",
- mac: "pc"
- };
- const deviceTypeMapsKeys = Object.keys(deviceTypeMaps);
- const _model = model.toLocaleLowerCase();
- for (let index2 = 0; index2 < deviceTypeMapsKeys.length; index2++) {
- const _m = deviceTypeMapsKeys[index2];
- if (_model.indexOf(_m) !== -1) {
- deviceType = deviceTypeMaps[_m];
- break;
- }
- }
- }
- return deviceType;
-}
-function getDeviceBrand(brand) {
- let deviceBrand = brand;
- if (deviceBrand) {
- deviceBrand = deviceBrand.toLocaleLowerCase();
- }
- return deviceBrand;
-}
-function getAppLanguage(defaultLanguage) {
- return getLocale ? getLocale() : defaultLanguage;
-}
-function getHostName(fromRes) {
- const _platform = "WeChat";
- let _hostName = fromRes.hostName || _platform;
- {
- if (fromRes.environment) {
- _hostName = fromRes.environment;
- } else if (fromRes.host && fromRes.host.env) {
- _hostName = fromRes.host.env;
- }
- }
- return _hostName;
-}
-const getSystemInfo = {
- returnValue: (fromRes, toRes) => {
- addSafeAreaInsets(fromRes, toRes);
- useDeviceId()(fromRes, toRes);
- populateParameters(fromRes, toRes);
- }
-};
-const getSystemInfoSync = getSystemInfo;
-const redirectTo = {};
-const previewImage = {
- args(fromArgs, toArgs) {
- let currentIndex = parseInt(fromArgs.current);
- if (isNaN(currentIndex)) {
- return;
- }
- const urls = fromArgs.urls;
- if (!isArray(urls)) {
- return;
- }
- const len = urls.length;
- if (!len) {
- return;
- }
- if (currentIndex < 0) {
- currentIndex = 0;
- } else if (currentIndex >= len) {
- currentIndex = len - 1;
- }
- if (currentIndex > 0) {
- toArgs.current = urls[currentIndex];
- toArgs.urls = urls.filter((item, index2) => index2 < currentIndex ? item !== urls[currentIndex] : true);
- } else {
- toArgs.current = urls[0];
- }
- return {
- indicator: false,
- loop: false
- };
- }
-};
-const showActionSheet = {
- args(fromArgs, toArgs) {
- toArgs.alertText = fromArgs.title;
- }
-};
-const getDeviceInfo = {
- returnValue: (fromRes, toRes) => {
- const { brand, model } = fromRes;
- let deviceType = getGetDeviceType(fromRes, model);
- let deviceBrand = getDeviceBrand(brand);
- useDeviceId()(fromRes, toRes);
- toRes = sortObject(extend(toRes, {
- deviceType,
- deviceBrand,
- deviceModel: model
- }));
- }
-};
-const getAppBaseInfo = {
- returnValue: (fromRes, toRes) => {
- const { version: version2, language, SDKVersion, theme } = fromRes;
- let _hostName = getHostName(fromRes);
- let hostLanguage = language.replace(/_/g, "-");
- toRes = sortObject(extend(toRes, {
- hostVersion: version2,
- hostLanguage,
- hostName: _hostName,
- hostSDKVersion: SDKVersion,
- hostTheme: theme,
- appId: "",
- appName: "fitjourney前端代码",
- appVersion: "1.0.0",
- appVersionCode: "100",
- appLanguage: getAppLanguage(hostLanguage)
- }));
- }
-};
-const getWindowInfo = {
- returnValue: (fromRes, toRes) => {
- addSafeAreaInsets(fromRes, toRes);
- toRes = sortObject(extend(toRes, {
- windowTop: 0,
- windowBottom: 0
- }));
- }
-};
-const getAppAuthorizeSetting = {
- returnValue: function(fromRes, toRes) {
- const { locationReducedAccuracy } = fromRes;
- toRes.locationAccuracy = "unsupported";
- if (locationReducedAccuracy === true) {
- toRes.locationAccuracy = "reduced";
- } else if (locationReducedAccuracy === false) {
- toRes.locationAccuracy = "full";
- }
- }
-};
-const baseApis = {
- $on,
- $off,
- $once,
- $emit,
- upx2px,
- interceptors,
- addInterceptor,
- removeInterceptor,
- onCreateVueApp,
- invokeCreateVueAppHook,
- getLocale,
- setLocale,
- onLocaleChange,
- getPushClientId,
- onPushMessage,
- offPushMessage,
- invokePushCallback
-};
-function initUni(api, protocols2, platform = wx) {
- const wrapper = initWrapper(protocols2);
- const UniProxyHandlers = {
- get(target, key) {
- if (hasOwn(target, key)) {
- return target[key];
- }
- if (hasOwn(api, key)) {
- return promisify(key, api[key]);
- }
- if (hasOwn(baseApis, key)) {
- return promisify(key, baseApis[key]);
- }
- return promisify(key, wrapper(key, platform[key]));
- }
- };
- return new Proxy({}, UniProxyHandlers);
-}
-function initGetProvider(providers) {
- return function getProvider2({ service, success, fail, complete }) {
- let res;
- if (providers[service]) {
- res = {
- errMsg: "getProvider:ok",
- service,
- provider: providers[service]
- };
- isFunction(success) && success(res);
- } else {
- res = {
- errMsg: "getProvider:fail:服务[" + service + "]不存在"
- };
- isFunction(fail) && fail(res);
- }
- isFunction(complete) && complete(res);
- };
-}
-const objectKeys = [
- "qy",
- "env",
- "error",
- "version",
- "lanDebug",
- "cloud",
- "serviceMarket",
- "router",
- "worklet",
- "__webpack_require_UNI_MP_PLUGIN__"
-];
-const singlePageDisableKey = ["lanDebug", "router", "worklet"];
-const launchOption = wx.getLaunchOptionsSync ? wx.getLaunchOptionsSync() : null;
-function isWxKey(key) {
- if (launchOption && launchOption.scene === 1154 && singlePageDisableKey.includes(key)) {
- return false;
- }
- return objectKeys.indexOf(key) > -1 || typeof wx[key] === "function";
-}
-function initWx() {
- const newWx = {};
- for (const key in wx) {
- if (isWxKey(key)) {
- newWx[key] = wx[key];
- }
- }
- if (typeof globalThis !== "undefined" && typeof requireMiniProgram === "undefined") {
- globalThis.wx = newWx;
- }
- return newWx;
-}
-const mocks$1 = ["__route__", "__wxExparserNodeId__", "__wxWebviewId__"];
-const getProvider = initGetProvider({
- oauth: ["weixin"],
- share: ["weixin"],
- payment: ["wxpay"],
- push: ["weixin"]
-});
-function initComponentMocks(component) {
- const res = /* @__PURE__ */ Object.create(null);
- mocks$1.forEach((name) => {
- res[name] = component[name];
- });
- return res;
-}
-function createSelectorQuery() {
- const query = wx$2.createSelectorQuery();
- const oldIn = query.in;
- query.in = function newIn(component) {
- return oldIn.call(this, initComponentMocks(component));
- };
- return query;
-}
-const wx$2 = initWx();
-let baseInfo = wx$2.getAppBaseInfo && wx$2.getAppBaseInfo();
-if (!baseInfo) {
- baseInfo = wx$2.getSystemInfoSync();
-}
-const host = baseInfo ? baseInfo.host : null;
-const shareVideoMessage = host && host.env === "SAAASDK" ? wx$2.miniapp.shareVideoMessage : wx$2.shareVideoMessage;
-var shims = /* @__PURE__ */ Object.freeze({
- __proto__: null,
- createSelectorQuery,
- getProvider,
- shareVideoMessage
-});
-const compressImage = {
- args(fromArgs, toArgs) {
- if (fromArgs.compressedHeight && !toArgs.compressHeight) {
- toArgs.compressHeight = fromArgs.compressedHeight;
- }
- if (fromArgs.compressedWidth && !toArgs.compressWidth) {
- toArgs.compressWidth = fromArgs.compressedWidth;
- }
- }
-};
-var protocols = /* @__PURE__ */ Object.freeze({
- __proto__: null,
- compressImage,
- getAppAuthorizeSetting,
- getAppBaseInfo,
- getDeviceInfo,
- getSystemInfo,
- getSystemInfoSync,
- getWindowInfo,
- previewImage,
- redirectTo,
- showActionSheet
-});
-const wx$1 = initWx();
-var index = initUni(shims, protocols, wx$1);
-new Set(
- /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol)
-);
-function toRaw$1(observed) {
- const raw = observed && observed["__v_raw"];
- return raw ? toRaw$1(raw) : observed;
-}
-function isRef$1(r2) {
- return !!(r2 && r2.__v_isRef === true);
-}
-/**
-* @vue/runtime-core v3.4.21
-* (c) 2018-present Yuxi (Evan) You and Vue contributors
-* @license MIT
-**/
-const stack$1 = [];
-function pushWarningContext$1(vnode) {
- stack$1.push(vnode);
-}
-function popWarningContext$1() {
- stack$1.pop();
-}
-function warn$1$1(msg, ...args) {
- const instance = stack$1.length ? stack$1[stack$1.length - 1].component : null;
- const appWarnHandler = instance && instance.appContext.config.warnHandler;
- const trace = getComponentTrace$1();
- if (appWarnHandler) {
- callWithErrorHandling$1(
- appWarnHandler,
- instance,
- 11,
- [
- msg + args.map((a) => {
- var _a, _b;
- return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);
- }).join(""),
- instance && instance.proxy,
- trace.map(
- ({ vnode }) => `at <${formatComponentName$1(instance, vnode.type)}>`
- ).join("\n"),
- trace
- ]
- );
- } else {
- const warnArgs = [`[Vue warn]: ${msg}`, ...args];
- if (trace.length && // avoid spamming console during tests
- true) {
- warnArgs.push(`
-`, ...formatTrace$1(trace));
- }
- console.warn(...warnArgs);
- }
-}
-function getComponentTrace$1() {
- let currentVNode = stack$1[stack$1.length - 1];
- if (!currentVNode) {
- return [];
- }
- const normalizedStack = [];
- while (currentVNode) {
- const last = normalizedStack[0];
- if (last && last.vnode === currentVNode) {
- last.recurseCount++;
- } else {
- normalizedStack.push({
- vnode: currentVNode,
- recurseCount: 0
- });
- }
- const parentInstance = currentVNode.component && currentVNode.component.parent;
- currentVNode = parentInstance && parentInstance.vnode;
- }
- return normalizedStack;
-}
-function formatTrace$1(trace) {
- const logs = [];
- trace.forEach((entry, i) => {
- logs.push(...i === 0 ? [] : [`
-`], ...formatTraceEntry$1(entry));
- });
- return logs;
-}
-function formatTraceEntry$1({ vnode, recurseCount }) {
- const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;
- const isRoot = vnode.component ? vnode.component.parent == null : false;
- const open = ` at <${formatComponentName$1(
- vnode.component,
- vnode.type,
- isRoot
- )}`;
- const close = `>` + postfix;
- return vnode.props ? [open, ...formatProps$1(vnode.props), close] : [open + close];
-}
-function formatProps$1(props) {
- const res = [];
- const keys = Object.keys(props);
- keys.slice(0, 3).forEach((key) => {
- res.push(...formatProp$1(key, props[key]));
- });
- if (keys.length > 3) {
- res.push(` ...`);
- }
- return res;
-}
-function formatProp$1(key, value, raw) {
- if (isString(value)) {
- value = JSON.stringify(value);
- return raw ? value : [`${key}=${value}`];
- } else if (typeof value === "number" || typeof value === "boolean" || value == null) {
- return raw ? value : [`${key}=${value}`];
- } else if (isRef$1(value)) {
- value = formatProp$1(key, toRaw$1(value.value), true);
- return raw ? value : [`${key}=Ref<`, value, `>`];
- } else if (isFunction(value)) {
- return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];
- } else {
- value = toRaw$1(value);
- return raw ? value : [`${key}=`, value];
- }
-}
-const ErrorTypeStrings$1 = {
- ["sp"]: "serverPrefetch hook",
- ["bc"]: "beforeCreate hook",
- ["c"]: "created hook",
- ["bm"]: "beforeMount hook",
- ["m"]: "mounted hook",
- ["bu"]: "beforeUpdate hook",
- ["u"]: "updated",
- ["bum"]: "beforeUnmount hook",
- ["um"]: "unmounted hook",
- ["a"]: "activated hook",
- ["da"]: "deactivated hook",
- ["ec"]: "errorCaptured hook",
- ["rtc"]: "renderTracked hook",
- ["rtg"]: "renderTriggered hook",
- [0]: "setup function",
- [1]: "render function",
- [2]: "watcher getter",
- [3]: "watcher callback",
- [4]: "watcher cleanup function",
- [5]: "native event handler",
- [6]: "component event handler",
- [7]: "vnode hook",
- [8]: "directive hook",
- [9]: "transition hook",
- [10]: "app errorHandler",
- [11]: "app warnHandler",
- [12]: "ref function",
- [13]: "async component loader",
- [14]: "scheduler flush. This is likely a Vue internals bug. Please open an issue at https://github.com/vuejs/core ."
-};
-function callWithErrorHandling$1(fn, instance, type, args) {
- try {
- return args ? fn(...args) : fn();
- } catch (err) {
- handleError$1(err, instance, type);
- }
-}
-function handleError$1(err, instance, type, throwInDev = true) {
- const contextVNode = instance ? instance.vnode : null;
- if (instance) {
- let cur = instance.parent;
- const exposedInstance = instance.proxy;
- const errorInfo = ErrorTypeStrings$1[type];
- while (cur) {
- const errorCapturedHooks = cur.ec;
- if (errorCapturedHooks) {
- for (let i = 0; i < errorCapturedHooks.length; i++) {
- if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {
- return;
- }
- }
- }
- cur = cur.parent;
- }
- const appErrorHandler = instance.appContext.config.errorHandler;
- if (appErrorHandler) {
- callWithErrorHandling$1(
- appErrorHandler,
- null,
- 10,
- [err, exposedInstance, errorInfo]
- );
- return;
- }
- }
- logError$1(err, type, contextVNode, throwInDev);
-}
-function logError$1(err, type, contextVNode, throwInDev = true) {
- {
- const info = ErrorTypeStrings$1[type];
- if (contextVNode) {
- pushWarningContext$1(contextVNode);
- }
- warn$1$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);
- if (contextVNode) {
- popWarningContext$1();
- }
- if (throwInDev) {
- throw err;
- } else {
- console.error(err);
- }
- }
-}
-let isFlushing$1 = false;
-let isFlushPending$1 = false;
-const queue$1 = [];
-let flushIndex$1 = 0;
-const pendingPostFlushCbs$1 = [];
-let activePostFlushCbs$1 = null;
-let postFlushIndex$1 = 0;
-const resolvedPromise$1 = /* @__PURE__ */ Promise.resolve();
-const RECURSION_LIMIT$1 = 100;
-function findInsertionIndex$1(id) {
- let start = flushIndex$1 + 1;
- let end = queue$1.length;
- while (start < end) {
- const middle = start + end >>> 1;
- const middleJob = queue$1[middle];
- const middleJobId = getId$1(middleJob);
- if (middleJobId < id || middleJobId === id && middleJob.pre) {
- start = middle + 1;
- } else {
- end = middle;
- }
- }
- return start;
-}
-function queueJob$1(job) {
- if (!queue$1.length || !queue$1.includes(
- job,
- isFlushing$1 && job.allowRecurse ? flushIndex$1 + 1 : flushIndex$1
- )) {
- if (job.id == null) {
- queue$1.push(job);
- } else {
- queue$1.splice(findInsertionIndex$1(job.id), 0, job);
- }
- queueFlush$1();
- }
-}
-function queueFlush$1() {
- if (!isFlushing$1 && !isFlushPending$1) {
- isFlushPending$1 = true;
- resolvedPromise$1.then(flushJobs$1);
- }
-}
-function queuePostFlushCb$1(cb) {
- if (!isArray(cb)) {
- if (!activePostFlushCbs$1 || !activePostFlushCbs$1.includes(
- cb,
- cb.allowRecurse ? postFlushIndex$1 + 1 : postFlushIndex$1
- )) {
- pendingPostFlushCbs$1.push(cb);
- }
- } else {
- pendingPostFlushCbs$1.push(...cb);
- }
- queueFlush$1();
-}
-function flushPostFlushCbs$1(seen) {
- if (pendingPostFlushCbs$1.length) {
- const deduped = [...new Set(pendingPostFlushCbs$1)].sort(
- (a, b) => getId$1(a) - getId$1(b)
- );
- pendingPostFlushCbs$1.length = 0;
- if (activePostFlushCbs$1) {
- activePostFlushCbs$1.push(...deduped);
- return;
- }
- activePostFlushCbs$1 = deduped;
- {
- seen = seen || /* @__PURE__ */ new Map();
- }
- for (postFlushIndex$1 = 0; postFlushIndex$1 < activePostFlushCbs$1.length; postFlushIndex$1++) {
- if (checkRecursiveUpdates$1(seen, activePostFlushCbs$1[postFlushIndex$1])) {
- continue;
- }
- activePostFlushCbs$1[postFlushIndex$1]();
- }
- activePostFlushCbs$1 = null;
- postFlushIndex$1 = 0;
- }
-}
-const getId$1 = (job) => job.id == null ? Infinity : job.id;
-const comparator$1 = (a, b) => {
- const diff2 = getId$1(a) - getId$1(b);
- if (diff2 === 0) {
- if (a.pre && !b.pre)
- return -1;
- if (b.pre && !a.pre)
- return 1;
- }
- return diff2;
-};
-function flushJobs$1(seen) {
- isFlushPending$1 = false;
- isFlushing$1 = true;
- {
- seen = seen || /* @__PURE__ */ new Map();
- }
- queue$1.sort(comparator$1);
- const check = (job) => checkRecursiveUpdates$1(seen, job);
- try {
- for (flushIndex$1 = 0; flushIndex$1 < queue$1.length; flushIndex$1++) {
- const job = queue$1[flushIndex$1];
- if (job && job.active !== false) {
- if (check(job)) {
- continue;
- }
- callWithErrorHandling$1(job, null, 14);
- }
- }
- } finally {
- flushIndex$1 = 0;
- queue$1.length = 0;
- flushPostFlushCbs$1(seen);
- isFlushing$1 = false;
- if (queue$1.length || pendingPostFlushCbs$1.length) {
- flushJobs$1(seen);
- }
- }
-}
-function checkRecursiveUpdates$1(seen, fn) {
- if (!seen.has(fn)) {
- seen.set(fn, 1);
- } else {
- const count = seen.get(fn);
- if (count > RECURSION_LIMIT$1) {
- const instance = fn.ownerInstance;
- const componentName = instance && getComponentName$1(instance.type);
- handleError$1(
- `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,
- null,
- 10
- );
- return true;
- } else {
- seen.set(fn, count + 1);
- }
- }
-}
-const hmrDirtyComponents = /* @__PURE__ */ new Set();
-{
- getGlobalThis().__VUE_HMR_RUNTIME__ = {
- createRecord: tryWrap(createRecord),
- rerender: tryWrap(rerender),
- reload: tryWrap(reload)
- };
-}
-const map = /* @__PURE__ */ new Map();
-function createRecord(id, initialDef) {
- if (map.has(id)) {
- return false;
- }
- map.set(id, {
- initialDef: normalizeClassComponent(initialDef),
- instances: /* @__PURE__ */ new Set()
- });
- return true;
-}
-function normalizeClassComponent(component) {
- return isClassComponent$1(component) ? component.__vccOpts : component;
-}
-function rerender(id, newRender) {
- const record = map.get(id);
- if (!record) {
- return;
- }
- record.initialDef.render = newRender;
- [...record.instances].forEach((instance) => {
- if (newRender) {
- instance.render = newRender;
- normalizeClassComponent(instance.type).render = newRender;
- }
- instance.renderCache = [];
- instance.effect.dirty = true;
- instance.update();
- });
-}
-function reload(id, newComp) {
- const record = map.get(id);
- if (!record)
- return;
- newComp = normalizeClassComponent(newComp);
- updateComponentDef(record.initialDef, newComp);
- const instances = [...record.instances];
- for (const instance of instances) {
- const oldComp = normalizeClassComponent(instance.type);
- if (!hmrDirtyComponents.has(oldComp)) {
- if (oldComp !== record.initialDef) {
- updateComponentDef(oldComp, newComp);
- }
- hmrDirtyComponents.add(oldComp);
- }
- instance.appContext.propsCache.delete(instance.type);
- instance.appContext.emitsCache.delete(instance.type);
- instance.appContext.optionsCache.delete(instance.type);
- if (instance.ceReload) {
- hmrDirtyComponents.add(oldComp);
- instance.ceReload(newComp.styles);
- hmrDirtyComponents.delete(oldComp);
- } else if (instance.parent) {
- instance.parent.effect.dirty = true;
- queueJob$1(instance.parent.update);
- } else if (instance.appContext.reload) {
- instance.appContext.reload();
- } else if (typeof window !== "undefined") {
- window.location.reload();
- } else {
- console.warn(
- "[HMR] Root or manually mounted instance modified. Full reload required."
- );
- }
- }
- queuePostFlushCb$1(() => {
- for (const instance of instances) {
- hmrDirtyComponents.delete(
- normalizeClassComponent(instance.type)
- );
- }
- });
-}
-function updateComponentDef(oldComp, newComp) {
- extend(oldComp, newComp);
- for (const key in oldComp) {
- if (key !== "__file" && !(key in newComp)) {
- delete oldComp[key];
- }
- }
-}
-function tryWrap(fn) {
- return (id, arg) => {
- try {
- return fn(id, arg);
- } catch (e2) {
- console.error(e2);
- console.warn(
- `[HMR] Something went wrong during Vue component hot-reload. Full reload required.`
- );
- }
- };
-}
-{
- const g = getGlobalThis();
- const registerGlobalSetter = (key, setter) => {
- let setters;
- if (!(setters = g[key]))
- setters = g[key] = [];
- setters.push(setter);
- return (v) => {
- if (setters.length > 1)
- setters.forEach((set2) => set2(v));
- else
- setters[0](v);
- };
- };
- registerGlobalSetter(
- `__VUE_INSTANCE_SETTERS__`,
- (v) => v
- );
- registerGlobalSetter(
- `__VUE_SSR_SETTERS__`,
- (v) => v
- );
-}
-const classifyRE$1 = /(?:^|[-_])(\w)/g;
-const classify$1 = (str) => str.replace(classifyRE$1, (c2) => c2.toUpperCase()).replace(/[-_]/g, "");
-function getComponentName$1(Component2, includeInferred = true) {
- return isFunction(Component2) ? Component2.displayName || Component2.name : Component2.name || includeInferred && Component2.__name;
-}
-function formatComponentName$1(instance, Component2, isRoot = false) {
- let name = getComponentName$1(Component2);
- if (!name && Component2.__file) {
- const match = Component2.__file.match(/([^/\\]+)\.\w+$/);
- if (match) {
- name = match[1];
- }
- }
- if (!name && instance && instance.parent) {
- const inferFromRegistry = (registry) => {
- for (const key in registry) {
- if (registry[key] === Component2) {
- return key;
- }
- }
- };
- name = inferFromRegistry(
- instance.components || instance.parent.type.components
- ) || inferFromRegistry(instance.appContext.components);
- }
- return name ? classify$1(name) : isRoot ? `App` : `Anonymous`;
-}
-function isClassComponent$1(value) {
- return isFunction(value) && "__vccOpts" in value;
-}
-/**
-* @dcloudio/uni-mp-vue v3.4.21
-* (c) 2018-present Yuxi (Evan) You and Vue contributors
-* @license MIT
-**/
-function warn$2(msg, ...args) {
- console.warn(`[Vue warn] ${msg}`, ...args);
-}
-let activeEffectScope;
-class EffectScope {
- constructor(detached = false) {
- this.detached = detached;
- this._active = true;
- this.effects = [];
- this.cleanups = [];
- this.parent = activeEffectScope;
- if (!detached && activeEffectScope) {
- this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(
- this
- ) - 1;
- }
- }
- get active() {
- return this._active;
- }
- run(fn) {
- if (this._active) {
- const currentEffectScope = activeEffectScope;
- try {
- activeEffectScope = this;
- return fn();
- } finally {
- activeEffectScope = currentEffectScope;
- }
- } else {
- warn$2(`cannot run an inactive effect scope.`);
- }
- }
- /**
- * This should only be called on non-detached scopes
- * @internal
- */
- on() {
- activeEffectScope = this;
- }
- /**
- * This should only be called on non-detached scopes
- * @internal
- */
- off() {
- activeEffectScope = this.parent;
- }
- stop(fromParent) {
- if (this._active) {
- let i, l;
- for (i = 0, l = this.effects.length; i < l; i++) {
- this.effects[i].stop();
- }
- for (i = 0, l = this.cleanups.length; i < l; i++) {
- this.cleanups[i]();
- }
- if (this.scopes) {
- for (i = 0, l = this.scopes.length; i < l; i++) {
- this.scopes[i].stop(true);
- }
- }
- if (!this.detached && this.parent && !fromParent) {
- const last = this.parent.scopes.pop();
- if (last && last !== this) {
- this.parent.scopes[this.index] = last;
- last.index = this.index;
- }
- }
- this.parent = void 0;
- this._active = false;
- }
- }
-}
-function recordEffectScope(effect2, scope = activeEffectScope) {
- if (scope && scope.active) {
- scope.effects.push(effect2);
- }
-}
-function getCurrentScope() {
- return activeEffectScope;
-}
-let activeEffect;
-class ReactiveEffect2 {
- constructor(fn, trigger2, scheduler, scope) {
- this.fn = fn;
- this.trigger = trigger2;
- this.scheduler = scheduler;
- this.active = true;
- this.deps = [];
- this._dirtyLevel = 4;
- this._trackId = 0;
- this._runnings = 0;
- this._shouldSchedule = false;
- this._depsLength = 0;
- recordEffectScope(this, scope);
- }
- get dirty() {
- if (this._dirtyLevel === 2 || this._dirtyLevel === 3) {
- this._dirtyLevel = 1;
- pauseTracking();
- for (let i = 0; i < this._depsLength; i++) {
- const dep = this.deps[i];
- if (dep.computed) {
- triggerComputed(dep.computed);
- if (this._dirtyLevel >= 4) {
- break;
- }
- }
- }
- if (this._dirtyLevel === 1) {
- this._dirtyLevel = 0;
- }
- resetTracking();
- }
- return this._dirtyLevel >= 4;
- }
- set dirty(v) {
- this._dirtyLevel = v ? 4 : 0;
- }
- run() {
- this._dirtyLevel = 0;
- if (!this.active) {
- return this.fn();
- }
- let lastShouldTrack = shouldTrack;
- let lastEffect = activeEffect;
- try {
- shouldTrack = true;
- activeEffect = this;
- this._runnings++;
- preCleanupEffect(this);
- return this.fn();
- } finally {
- postCleanupEffect(this);
- this._runnings--;
- activeEffect = lastEffect;
- shouldTrack = lastShouldTrack;
- }
- }
- stop() {
- var _a;
- if (this.active) {
- preCleanupEffect(this);
- postCleanupEffect(this);
- (_a = this.onStop) == null ? void 0 : _a.call(this);
- this.active = false;
- }
- }
-}
-function triggerComputed(computed2) {
- return computed2.value;
-}
-function preCleanupEffect(effect2) {
- effect2._trackId++;
- effect2._depsLength = 0;
-}
-function postCleanupEffect(effect2) {
- if (effect2.deps.length > effect2._depsLength) {
- for (let i = effect2._depsLength; i < effect2.deps.length; i++) {
- cleanupDepEffect(effect2.deps[i], effect2);
- }
- effect2.deps.length = effect2._depsLength;
- }
-}
-function cleanupDepEffect(dep, effect2) {
- const trackId = dep.get(effect2);
- if (trackId !== void 0 && effect2._trackId !== trackId) {
- dep.delete(effect2);
- if (dep.size === 0) {
- dep.cleanup();
- }
- }
-}
-let shouldTrack = true;
-let pauseScheduleStack = 0;
-const trackStack = [];
-function pauseTracking() {
- trackStack.push(shouldTrack);
- shouldTrack = false;
-}
-function resetTracking() {
- const last = trackStack.pop();
- shouldTrack = last === void 0 ? true : last;
-}
-function pauseScheduling() {
- pauseScheduleStack++;
-}
-function resetScheduling() {
- pauseScheduleStack--;
- while (!pauseScheduleStack && queueEffectSchedulers.length) {
- queueEffectSchedulers.shift()();
- }
-}
-function trackEffect(effect2, dep, debuggerEventExtraInfo) {
- var _a;
- if (dep.get(effect2) !== effect2._trackId) {
- dep.set(effect2, effect2._trackId);
- const oldDep = effect2.deps[effect2._depsLength];
- if (oldDep !== dep) {
- if (oldDep) {
- cleanupDepEffect(oldDep, effect2);
- }
- effect2.deps[effect2._depsLength++] = dep;
- } else {
- effect2._depsLength++;
- }
- {
- (_a = effect2.onTrack) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo));
- }
- }
-}
-const queueEffectSchedulers = [];
-function triggerEffects(dep, dirtyLevel, debuggerEventExtraInfo) {
- var _a;
- pauseScheduling();
- for (const effect2 of dep.keys()) {
- let tracking;
- if (effect2._dirtyLevel < dirtyLevel && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) {
- effect2._shouldSchedule || (effect2._shouldSchedule = effect2._dirtyLevel === 0);
- effect2._dirtyLevel = dirtyLevel;
- }
- if (effect2._shouldSchedule && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) {
- {
- (_a = effect2.onTrigger) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo));
- }
- effect2.trigger();
- if ((!effect2._runnings || effect2.allowRecurse) && effect2._dirtyLevel !== 2) {
- effect2._shouldSchedule = false;
- if (effect2.scheduler) {
- queueEffectSchedulers.push(effect2.scheduler);
- }
- }
- }
- }
- resetScheduling();
-}
-const createDep = (cleanup, computed2) => {
- const dep = /* @__PURE__ */ new Map();
- dep.cleanup = cleanup;
- dep.computed = computed2;
- return dep;
-};
-const targetMap = /* @__PURE__ */ new WeakMap();
-const ITERATE_KEY = Symbol("iterate");
-const MAP_KEY_ITERATE_KEY = Symbol("Map key iterate");
-function track(target, type, key) {
- if (shouldTrack && activeEffect) {
- let depsMap = targetMap.get(target);
- if (!depsMap) {
- targetMap.set(target, depsMap = /* @__PURE__ */ new Map());
- }
- let dep = depsMap.get(key);
- if (!dep) {
- depsMap.set(key, dep = createDep(() => depsMap.delete(key)));
- }
- trackEffect(
- activeEffect,
- dep,
- {
- target,
- type,
- key
- }
- );
- }
-}
-function trigger(target, type, key, newValue, oldValue, oldTarget) {
- const depsMap = targetMap.get(target);
- if (!depsMap) {
- return;
- }
- let deps = [];
- if (type === "clear") {
- deps = [...depsMap.values()];
- } else if (key === "length" && isArray(target)) {
- const newLength = Number(newValue);
- depsMap.forEach((dep, key2) => {
- if (key2 === "length" || !isSymbol(key2) && key2 >= newLength) {
- deps.push(dep);
- }
- });
- } else {
- if (key !== void 0) {
- deps.push(depsMap.get(key));
- }
- switch (type) {
- case "add":
- if (!isArray(target)) {
- deps.push(depsMap.get(ITERATE_KEY));
- if (isMap(target)) {
- deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
- }
- } else if (isIntegerKey(key)) {
- deps.push(depsMap.get("length"));
- }
- break;
- case "delete":
- if (!isArray(target)) {
- deps.push(depsMap.get(ITERATE_KEY));
- if (isMap(target)) {
- deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
- }
- }
- break;
- case "set":
- if (isMap(target)) {
- deps.push(depsMap.get(ITERATE_KEY));
- }
- break;
- }
- }
- pauseScheduling();
- for (const dep of deps) {
- if (dep) {
- triggerEffects(
- dep,
- 4,
- {
- target,
- type,
- key,
- newValue,
- oldValue,
- oldTarget
- }
- );
- }
- }
- resetScheduling();
-}
-const isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);
-const builtInSymbols = new Set(
- /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol)
-);
-const arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations();
-function createArrayInstrumentations() {
- const instrumentations = {};
- ["includes", "indexOf", "lastIndexOf"].forEach((key) => {
- instrumentations[key] = function(...args) {
- const arr = toRaw(this);
- for (let i = 0, l = this.length; i < l; i++) {
- track(arr, "get", i + "");
- }
- const res = arr[key](...args);
- if (res === -1 || res === false) {
- return arr[key](...args.map(toRaw));
- } else {
- return res;
- }
- };
- });
- ["push", "pop", "shift", "unshift", "splice"].forEach((key) => {
- instrumentations[key] = function(...args) {
- pauseTracking();
- pauseScheduling();
- const res = toRaw(this)[key].apply(this, args);
- resetScheduling();
- resetTracking();
- return res;
- };
- });
- return instrumentations;
-}
-function hasOwnProperty(key) {
- const obj = toRaw(this);
- track(obj, "has", key);
- return obj.hasOwnProperty(key);
-}
-class BaseReactiveHandler2 {
- constructor(_isReadonly = false, _isShallow = false) {
- this._isReadonly = _isReadonly;
- this._isShallow = _isShallow;
- }
- get(target, key, receiver) {
- const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;
- if (key === "__v_isReactive") {
- return !isReadonly2;
- } else if (key === "__v_isReadonly") {
- return isReadonly2;
- } else if (key === "__v_isShallow") {
- return isShallow2;
- } else if (key === "__v_raw") {
- if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype
- // this means the reciever is a user proxy of the reactive proxy
- Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {
- return target;
- }
- return;
- }
- const targetIsArray = isArray(target);
- if (!isReadonly2) {
- if (targetIsArray && hasOwn(arrayInstrumentations, key)) {
- return Reflect.get(arrayInstrumentations, key, receiver);
- }
- if (key === "hasOwnProperty") {
- return hasOwnProperty;
- }
- }
- const res = Reflect.get(target, key, receiver);
- if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {
- return res;
- }
- if (!isReadonly2) {
- track(target, "get", key);
- }
- if (isShallow2) {
- return res;
- }
- if (isRef(res)) {
- return targetIsArray && isIntegerKey(key) ? res : res.value;
- }
- if (isObject(res)) {
- return isReadonly2 ? readonly(res) : reactive(res);
- }
- return res;
- }
-}
-class MutableReactiveHandler2 extends BaseReactiveHandler2 {
- constructor(isShallow2 = false) {
- super(false, isShallow2);
- }
- set(target, key, value, receiver) {
- let oldValue = target[key];
- if (!this._isShallow) {
- const isOldValueReadonly = isReadonly(oldValue);
- if (!isShallow(value) && !isReadonly(value)) {
- oldValue = toRaw(oldValue);
- value = toRaw(value);
- }
- if (!isArray(target) && isRef(oldValue) && !isRef(value)) {
- if (isOldValueReadonly) {
- return false;
- } else {
- oldValue.value = value;
- return true;
- }
- }
- }
- const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key);
- const result = Reflect.set(target, key, value, receiver);
- if (target === toRaw(receiver)) {
- if (!hadKey) {
- trigger(target, "add", key, value);
- } else if (hasChanged(value, oldValue)) {
- trigger(target, "set", key, value, oldValue);
- }
- }
- return result;
- }
- deleteProperty(target, key) {
- const hadKey = hasOwn(target, key);
- const oldValue = target[key];
- const result = Reflect.deleteProperty(target, key);
- if (result && hadKey) {
- trigger(target, "delete", key, void 0, oldValue);
- }
- return result;
- }
- has(target, key) {
- const result = Reflect.has(target, key);
- if (!isSymbol(key) || !builtInSymbols.has(key)) {
- track(target, "has", key);
- }
- return result;
- }
- ownKeys(target) {
- track(
- target,
- "iterate",
- isArray(target) ? "length" : ITERATE_KEY
- );
- return Reflect.ownKeys(target);
- }
-}
-class ReadonlyReactiveHandler2 extends BaseReactiveHandler2 {
- constructor(isShallow2 = false) {
- super(true, isShallow2);
- }
- set(target, key) {
- {
- warn$2(
- `Set operation on key "${String(key)}" failed: target is readonly.`,
- target
- );
- }
- return true;
- }
- deleteProperty(target, key) {
- {
- warn$2(
- `Delete operation on key "${String(key)}" failed: target is readonly.`,
- target
- );
- }
- return true;
- }
-}
-const mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler2();
-const readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler2();
-const shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler2(
- true
-);
-const shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler2(true);
-const toShallow = (value) => value;
-const getProto = (v) => Reflect.getPrototypeOf(v);
-function get(target, key, isReadonly2 = false, isShallow2 = false) {
- target = target["__v_raw"];
- const rawTarget = toRaw(target);
- const rawKey = toRaw(key);
- if (!isReadonly2) {
- if (hasChanged(key, rawKey)) {
- track(rawTarget, "get", key);
- }
- track(rawTarget, "get", rawKey);
- }
- const { has: has2 } = getProto(rawTarget);
- const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
- if (has2.call(rawTarget, key)) {
- return wrap(target.get(key));
- } else if (has2.call(rawTarget, rawKey)) {
- return wrap(target.get(rawKey));
- } else if (target !== rawTarget) {
- target.get(key);
- }
-}
-function has(key, isReadonly2 = false) {
- const target = this["__v_raw"];
- const rawTarget = toRaw(target);
- const rawKey = toRaw(key);
- if (!isReadonly2) {
- if (hasChanged(key, rawKey)) {
- track(rawTarget, "has", key);
- }
- track(rawTarget, "has", rawKey);
- }
- return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);
-}
-function size(target, isReadonly2 = false) {
- target = target["__v_raw"];
- !isReadonly2 && track(toRaw(target), "iterate", ITERATE_KEY);
- return Reflect.get(target, "size", target);
-}
-function add(value) {
- value = toRaw(value);
- const target = toRaw(this);
- const proto = getProto(target);
- const hadKey = proto.has.call(target, value);
- if (!hadKey) {
- target.add(value);
- trigger(target, "add", value, value);
- }
- return this;
-}
-function set$1(key, value) {
- value = toRaw(value);
- const target = toRaw(this);
- const { has: has2, get: get2 } = getProto(target);
- let hadKey = has2.call(target, key);
- if (!hadKey) {
- key = toRaw(key);
- hadKey = has2.call(target, key);
- } else {
- checkIdentityKeys(target, has2, key);
- }
- const oldValue = get2.call(target, key);
- target.set(key, value);
- if (!hadKey) {
- trigger(target, "add", key, value);
- } else if (hasChanged(value, oldValue)) {
- trigger(target, "set", key, value, oldValue);
- }
- return this;
-}
-function deleteEntry(key) {
- const target = toRaw(this);
- const { has: has2, get: get2 } = getProto(target);
- let hadKey = has2.call(target, key);
- if (!hadKey) {
- key = toRaw(key);
- hadKey = has2.call(target, key);
- } else {
- checkIdentityKeys(target, has2, key);
- }
- const oldValue = get2 ? get2.call(target, key) : void 0;
- const result = target.delete(key);
- if (hadKey) {
- trigger(target, "delete", key, void 0, oldValue);
- }
- return result;
-}
-function clear() {
- const target = toRaw(this);
- const hadItems = target.size !== 0;
- const oldTarget = isMap(target) ? new Map(target) : new Set(target);
- const result = target.clear();
- if (hadItems) {
- trigger(target, "clear", void 0, void 0, oldTarget);
- }
- return result;
-}
-function createForEach(isReadonly2, isShallow2) {
- return function forEach(callback, thisArg) {
- const observed = this;
- const target = observed["__v_raw"];
- const rawTarget = toRaw(target);
- const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
- !isReadonly2 && track(rawTarget, "iterate", ITERATE_KEY);
- return target.forEach((value, key) => {
- return callback.call(thisArg, wrap(value), wrap(key), observed);
- });
- };
-}
-function createIterableMethod(method, isReadonly2, isShallow2) {
- return function(...args) {
- const target = this["__v_raw"];
- const rawTarget = toRaw(target);
- const targetIsMap = isMap(rawTarget);
- const isPair = method === "entries" || method === Symbol.iterator && targetIsMap;
- const isKeyOnly = method === "keys" && targetIsMap;
- const innerIterator = target[method](...args);
- const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
- !isReadonly2 && track(
- rawTarget,
- "iterate",
- isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY
- );
- return {
- // iterator protocol
- next() {
- const { value, done } = innerIterator.next();
- return done ? { value, done } : {
- value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),
- done
- };
- },
- // iterable protocol
- [Symbol.iterator]() {
- return this;
- }
- };
- };
-}
-function createReadonlyMethod(type) {
- return function(...args) {
- {
- const key = args[0] ? `on key "${args[0]}" ` : ``;
- warn$2(
- `${capitalize(type)} operation ${key}failed: target is readonly.`,
- toRaw(this)
- );
- }
- return type === "delete" ? false : type === "clear" ? void 0 : this;
- };
-}
-function createInstrumentations() {
- const mutableInstrumentations2 = {
- get(key) {
- return get(this, key);
- },
- get size() {
- return size(this);
- },
- has,
- add,
- set: set$1,
- delete: deleteEntry,
- clear,
- forEach: createForEach(false, false)
- };
- const shallowInstrumentations2 = {
- get(key) {
- return get(this, key, false, true);
- },
- get size() {
- return size(this);
- },
- has,
- add,
- set: set$1,
- delete: deleteEntry,
- clear,
- forEach: createForEach(false, true)
- };
- const readonlyInstrumentations2 = {
- get(key) {
- return get(this, key, true);
- },
- get size() {
- return size(this, true);
- },
- has(key) {
- return has.call(this, key, true);
- },
- add: createReadonlyMethod("add"),
- set: createReadonlyMethod("set"),
- delete: createReadonlyMethod("delete"),
- clear: createReadonlyMethod("clear"),
- forEach: createForEach(true, false)
- };
- const shallowReadonlyInstrumentations2 = {
- get(key) {
- return get(this, key, true, true);
- },
- get size() {
- return size(this, true);
- },
- has(key) {
- return has.call(this, key, true);
- },
- add: createReadonlyMethod("add"),
- set: createReadonlyMethod("set"),
- delete: createReadonlyMethod("delete"),
- clear: createReadonlyMethod("clear"),
- forEach: createForEach(true, true)
- };
- const iteratorMethods = [
- "keys",
- "values",
- "entries",
- Symbol.iterator
- ];
- iteratorMethods.forEach((method) => {
- mutableInstrumentations2[method] = createIterableMethod(method, false, false);
- readonlyInstrumentations2[method] = createIterableMethod(method, true, false);
- shallowInstrumentations2[method] = createIterableMethod(method, false, true);
- shallowReadonlyInstrumentations2[method] = createIterableMethod(
- method,
- true,
- true
- );
- });
- return [
- mutableInstrumentations2,
- readonlyInstrumentations2,
- shallowInstrumentations2,
- shallowReadonlyInstrumentations2
- ];
-}
-const [
- mutableInstrumentations,
- readonlyInstrumentations,
- shallowInstrumentations,
- shallowReadonlyInstrumentations
-] = /* @__PURE__ */ createInstrumentations();
-function createInstrumentationGetter(isReadonly2, shallow) {
- const instrumentations = shallow ? isReadonly2 ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly2 ? readonlyInstrumentations : mutableInstrumentations;
- return (target, key, receiver) => {
- if (key === "__v_isReactive") {
- return !isReadonly2;
- } else if (key === "__v_isReadonly") {
- return isReadonly2;
- } else if (key === "__v_raw") {
- return target;
- }
- return Reflect.get(
- hasOwn(instrumentations, key) && key in target ? instrumentations : target,
- key,
- receiver
- );
- };
-}
-const mutableCollectionHandlers = {
- get: /* @__PURE__ */ createInstrumentationGetter(false, false)
-};
-const shallowCollectionHandlers = {
- get: /* @__PURE__ */ createInstrumentationGetter(false, true)
-};
-const readonlyCollectionHandlers = {
- get: /* @__PURE__ */ createInstrumentationGetter(true, false)
-};
-const shallowReadonlyCollectionHandlers = {
- get: /* @__PURE__ */ createInstrumentationGetter(true, true)
-};
-function checkIdentityKeys(target, has2, key) {
- const rawKey = toRaw(key);
- if (rawKey !== key && has2.call(target, rawKey)) {
- const type = toRawType(target);
- warn$2(
- `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`
- );
- }
-}
-const reactiveMap = /* @__PURE__ */ new WeakMap();
-const shallowReactiveMap = /* @__PURE__ */ new WeakMap();
-const readonlyMap = /* @__PURE__ */ new WeakMap();
-const shallowReadonlyMap = /* @__PURE__ */ new WeakMap();
-function targetTypeMap(rawType) {
- switch (rawType) {
- case "Object":
- case "Array":
- return 1;
- case "Map":
- case "Set":
- case "WeakMap":
- case "WeakSet":
- return 2;
- default:
- return 0;
- }
-}
-function getTargetType(value) {
- return value["__v_skip"] || !Object.isExtensible(value) ? 0 : targetTypeMap(toRawType(value));
-}
-function reactive(target) {
- if (isReadonly(target)) {
- return target;
- }
- return createReactiveObject(
- target,
- false,
- mutableHandlers,
- mutableCollectionHandlers,
- reactiveMap
- );
-}
-function shallowReactive(target) {
- return createReactiveObject(
- target,
- false,
- shallowReactiveHandlers,
- shallowCollectionHandlers,
- shallowReactiveMap
- );
-}
-function readonly(target) {
- return createReactiveObject(
- target,
- true,
- readonlyHandlers,
- readonlyCollectionHandlers,
- readonlyMap
- );
-}
-function shallowReadonly(target) {
- return createReactiveObject(
- target,
- true,
- shallowReadonlyHandlers,
- shallowReadonlyCollectionHandlers,
- shallowReadonlyMap
- );
-}
-function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {
- if (!isObject(target)) {
- {
- warn$2(`value cannot be made reactive: ${String(target)}`);
- }
- return target;
- }
- if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) {
- return target;
- }
- const existingProxy = proxyMap.get(target);
- if (existingProxy) {
- return existingProxy;
- }
- const targetType = getTargetType(target);
- if (targetType === 0) {
- return target;
- }
- const proxy = new Proxy(
- target,
- targetType === 2 ? collectionHandlers : baseHandlers
- );
- proxyMap.set(target, proxy);
- return proxy;
-}
-function isReactive(value) {
- if (isReadonly(value)) {
- return isReactive(value["__v_raw"]);
- }
- return !!(value && value["__v_isReactive"]);
-}
-function isReadonly(value) {
- return !!(value && value["__v_isReadonly"]);
-}
-function isShallow(value) {
- return !!(value && value["__v_isShallow"]);
-}
-function toRaw(observed) {
- const raw = observed && observed["__v_raw"];
- return raw ? toRaw(raw) : observed;
-}
-function markRaw(value) {
- if (Object.isExtensible(value)) {
- def(value, "__v_skip", true);
- }
- return value;
-}
-const toReactive = (value) => isObject(value) ? reactive(value) : value;
-const toReadonly = (value) => isObject(value) ? readonly(value) : value;
-const COMPUTED_SIDE_EFFECT_WARN = `Computed is still dirty after getter evaluation, likely because a computed is mutating its own dependency in its getter. State mutations in computed getters should be avoided. Check the docs for more details: https://vuejs.org/guide/essentials/computed.html#getters-should-be-side-effect-free`;
-class ComputedRefImpl {
- constructor(getter, _setter, isReadonly2, isSSR) {
- this.getter = getter;
- this._setter = _setter;
- this.dep = void 0;
- this.__v_isRef = true;
- this["__v_isReadonly"] = false;
- this.effect = new ReactiveEffect2(
- () => getter(this._value),
- () => triggerRefValue(
- this,
- this.effect._dirtyLevel === 2 ? 2 : 3
- )
- );
- this.effect.computed = this;
- this.effect.active = this._cacheable = !isSSR;
- this["__v_isReadonly"] = isReadonly2;
- }
- get value() {
- const self2 = toRaw(this);
- if ((!self2._cacheable || self2.effect.dirty) && hasChanged(self2._value, self2._value = self2.effect.run())) {
- triggerRefValue(self2, 4);
- }
- trackRefValue(self2);
- if (self2.effect._dirtyLevel >= 2) {
- if (this._warnRecursive) {
- warn$2(COMPUTED_SIDE_EFFECT_WARN, `
-
-getter: `, this.getter);
- }
- triggerRefValue(self2, 2);
- }
- return self2._value;
- }
- set value(newValue) {
- this._setter(newValue);
- }
- // #region polyfill _dirty for backward compatibility third party code for Vue <= 3.3.x
- get _dirty() {
- return this.effect.dirty;
- }
- set _dirty(v) {
- this.effect.dirty = v;
- }
- // #endregion
-}
-function computed$1(getterOrOptions, debugOptions, isSSR = false) {
- let getter;
- let setter;
- const onlyGetter = isFunction(getterOrOptions);
- if (onlyGetter) {
- getter = getterOrOptions;
- setter = () => {
- warn$2("Write operation failed: computed value is readonly");
- };
- } else {
- getter = getterOrOptions.get;
- setter = getterOrOptions.set;
- }
- const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);
- if (debugOptions && !isSSR) {
- cRef.effect.onTrack = debugOptions.onTrack;
- cRef.effect.onTrigger = debugOptions.onTrigger;
- }
- return cRef;
-}
-function trackRefValue(ref2) {
- var _a;
- if (shouldTrack && activeEffect) {
- ref2 = toRaw(ref2);
- trackEffect(
- activeEffect,
- (_a = ref2.dep) != null ? _a : ref2.dep = createDep(
- () => ref2.dep = void 0,
- ref2 instanceof ComputedRefImpl ? ref2 : void 0
- ),
- {
- target: ref2,
- type: "get",
- key: "value"
- }
- );
- }
-}
-function triggerRefValue(ref2, dirtyLevel = 4, newVal) {
- ref2 = toRaw(ref2);
- const dep = ref2.dep;
- if (dep) {
- triggerEffects(
- dep,
- dirtyLevel,
- {
- target: ref2,
- type: "set",
- key: "value",
- newValue: newVal
- }
- );
- }
-}
-function isRef(r2) {
- return !!(r2 && r2.__v_isRef === true);
-}
-function ref(value) {
- return createRef(value, false);
-}
-function createRef(rawValue, shallow) {
- if (isRef(rawValue)) {
- return rawValue;
- }
- return new RefImpl(rawValue, shallow);
-}
-class RefImpl {
- constructor(value, __v_isShallow) {
- this.__v_isShallow = __v_isShallow;
- this.dep = void 0;
- this.__v_isRef = true;
- this._rawValue = __v_isShallow ? value : toRaw(value);
- this._value = __v_isShallow ? value : toReactive(value);
- }
- get value() {
- trackRefValue(this);
- return this._value;
- }
- set value(newVal) {
- const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);
- newVal = useDirectValue ? newVal : toRaw(newVal);
- if (hasChanged(newVal, this._rawValue)) {
- this._rawValue = newVal;
- this._value = useDirectValue ? newVal : toReactive(newVal);
- triggerRefValue(this, 4, newVal);
- }
- }
-}
-function unref(ref2) {
- return isRef(ref2) ? ref2.value : ref2;
-}
-const shallowUnwrapHandlers = {
- get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),
- set: (target, key, value, receiver) => {
- const oldValue = target[key];
- if (isRef(oldValue) && !isRef(value)) {
- oldValue.value = value;
- return true;
- } else {
- return Reflect.set(target, key, value, receiver);
- }
- }
-};
-function proxyRefs(objectWithRefs) {
- return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);
-}
-const stack = [];
-function pushWarningContext(vnode) {
- stack.push(vnode);
-}
-function popWarningContext() {
- stack.pop();
-}
-function warn$1(msg, ...args) {
- pauseTracking();
- const instance = stack.length ? stack[stack.length - 1].component : null;
- const appWarnHandler = instance && instance.appContext.config.warnHandler;
- const trace = getComponentTrace();
- if (appWarnHandler) {
- callWithErrorHandling(
- appWarnHandler,
- instance,
- 11,
- [
- msg + args.map((a) => {
- var _a, _b;
- return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);
- }).join(""),
- instance && instance.proxy,
- trace.map(
- ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`
- ).join("\n"),
- trace
- ]
- );
- } else {
- const warnArgs = [`[Vue warn]: ${msg}`, ...args];
- if (trace.length && // avoid spamming console during tests
- true) {
- warnArgs.push(`
-`, ...formatTrace(trace));
- }
- console.warn(...warnArgs);
- }
- resetTracking();
-}
-function getComponentTrace() {
- let currentVNode = stack[stack.length - 1];
- if (!currentVNode) {
- return [];
- }
- const normalizedStack = [];
- while (currentVNode) {
- const last = normalizedStack[0];
- if (last && last.vnode === currentVNode) {
- last.recurseCount++;
- } else {
- normalizedStack.push({
- vnode: currentVNode,
- recurseCount: 0
- });
- }
- const parentInstance = currentVNode.component && currentVNode.component.parent;
- currentVNode = parentInstance && parentInstance.vnode;
- }
- return normalizedStack;
-}
-function formatTrace(trace) {
- const logs = [];
- trace.forEach((entry, i) => {
- logs.push(...i === 0 ? [] : [`
-`], ...formatTraceEntry(entry));
- });
- return logs;
-}
-function formatTraceEntry({ vnode, recurseCount }) {
- const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;
- const isRoot = vnode.component ? vnode.component.parent == null : false;
- const open = ` at <${formatComponentName(
- vnode.component,
- vnode.type,
- isRoot
- )}`;
- const close = `>` + postfix;
- return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];
-}
-function formatProps(props) {
- const res = [];
- const keys = Object.keys(props);
- keys.slice(0, 3).forEach((key) => {
- res.push(...formatProp(key, props[key]));
- });
- if (keys.length > 3) {
- res.push(` ...`);
- }
- return res;
-}
-function formatProp(key, value, raw) {
- if (isString(value)) {
- value = JSON.stringify(value);
- return raw ? value : [`${key}=${value}`];
- } else if (typeof value === "number" || typeof value === "boolean" || value == null) {
- return raw ? value : [`${key}=${value}`];
- } else if (isRef(value)) {
- value = formatProp(key, toRaw(value.value), true);
- return raw ? value : [`${key}=Ref<`, value, `>`];
- } else if (isFunction(value)) {
- return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];
- } else {
- value = toRaw(value);
- return raw ? value : [`${key}=`, value];
- }
-}
-const ErrorTypeStrings = {
- ["sp"]: "serverPrefetch hook",
- ["bc"]: "beforeCreate hook",
- ["c"]: "created hook",
- ["bm"]: "beforeMount hook",
- ["m"]: "mounted hook",
- ["bu"]: "beforeUpdate hook",
- ["u"]: "updated",
- ["bum"]: "beforeUnmount hook",
- ["um"]: "unmounted hook",
- ["a"]: "activated hook",
- ["da"]: "deactivated hook",
- ["ec"]: "errorCaptured hook",
- ["rtc"]: "renderTracked hook",
- ["rtg"]: "renderTriggered hook",
- [0]: "setup function",
- [1]: "render function",
- [2]: "watcher getter",
- [3]: "watcher callback",
- [4]: "watcher cleanup function",
- [5]: "native event handler",
- [6]: "component event handler",
- [7]: "vnode hook",
- [8]: "directive hook",
- [9]: "transition hook",
- [10]: "app errorHandler",
- [11]: "app warnHandler",
- [12]: "ref function",
- [13]: "async component loader",
- [14]: "scheduler flush. This is likely a Vue internals bug. Please open an issue at https://github.com/vuejs/core ."
-};
-function callWithErrorHandling(fn, instance, type, args) {
- try {
- return args ? fn(...args) : fn();
- } catch (err) {
- handleError(err, instance, type);
- }
-}
-function callWithAsyncErrorHandling(fn, instance, type, args) {
- if (isFunction(fn)) {
- const res = callWithErrorHandling(fn, instance, type, args);
- if (res && isPromise(res)) {
- res.catch((err) => {
- handleError(err, instance, type);
- });
- }
- return res;
- }
- const values = [];
- for (let i = 0; i < fn.length; i++) {
- values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));
- }
- return values;
-}
-function handleError(err, instance, type, throwInDev = true) {
- const contextVNode = instance ? instance.vnode : null;
- if (instance) {
- let cur = instance.parent;
- const exposedInstance = instance.proxy;
- const errorInfo = ErrorTypeStrings[type] || type;
- while (cur) {
- const errorCapturedHooks = cur.ec;
- if (errorCapturedHooks) {
- for (let i = 0; i < errorCapturedHooks.length; i++) {
- if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {
- return;
- }
- }
- }
- cur = cur.parent;
- }
- const appErrorHandler = instance.appContext.config.errorHandler;
- if (appErrorHandler) {
- callWithErrorHandling(
- appErrorHandler,
- null,
- 10,
- [err, exposedInstance, errorInfo]
- );
- return;
- }
- }
- logError(err, type, contextVNode, throwInDev);
-}
-function logError(err, type, contextVNode, throwInDev = true) {
- {
- const info = ErrorTypeStrings[type] || type;
- if (contextVNode) {
- pushWarningContext(contextVNode);
- }
- warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);
- if (contextVNode) {
- popWarningContext();
- }
- if (throwInDev) {
- console.error(err);
- } else {
- console.error(err);
- }
- }
-}
-let isFlushing = false;
-let isFlushPending = false;
-const queue = [];
-let flushIndex = 0;
-const pendingPostFlushCbs = [];
-let activePostFlushCbs = null;
-let postFlushIndex = 0;
-const resolvedPromise = /* @__PURE__ */ Promise.resolve();
-let currentFlushPromise = null;
-const RECURSION_LIMIT = 100;
-function nextTick$1(fn) {
- const p2 = currentFlushPromise || resolvedPromise;
- return fn ? p2.then(this ? fn.bind(this) : fn) : p2;
-}
-function findInsertionIndex(id) {
- let start = flushIndex + 1;
- let end = queue.length;
- while (start < end) {
- const middle = start + end >>> 1;
- const middleJob = queue[middle];
- const middleJobId = getId(middleJob);
- if (middleJobId < id || middleJobId === id && middleJob.pre) {
- start = middle + 1;
- } else {
- end = middle;
- }
- }
- return start;
-}
-function queueJob(job) {
- if (!queue.length || !queue.includes(
- job,
- isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex
- )) {
- if (job.id == null) {
- queue.push(job);
- } else {
- queue.splice(findInsertionIndex(job.id), 0, job);
- }
- queueFlush();
- }
-}
-function queueFlush() {
- if (!isFlushing && !isFlushPending) {
- isFlushPending = true;
- currentFlushPromise = resolvedPromise.then(flushJobs);
- }
-}
-function hasQueueJob(job) {
- return queue.indexOf(job) > -1;
-}
-function invalidateJob(job) {
- const i = queue.indexOf(job);
- if (i > flushIndex) {
- queue.splice(i, 1);
- }
-}
-function queuePostFlushCb(cb) {
- if (!isArray(cb)) {
- if (!activePostFlushCbs || !activePostFlushCbs.includes(
- cb,
- cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex
- )) {
- pendingPostFlushCbs.push(cb);
- }
- } else {
- pendingPostFlushCbs.push(...cb);
- }
- queueFlush();
-}
-function flushPreFlushCbs(instance, seen, i = isFlushing ? flushIndex + 1 : 0) {
- {
- seen = seen || /* @__PURE__ */ new Map();
- }
- for (; i < queue.length; i++) {
- const cb = queue[i];
- if (cb && cb.pre) {
- if (instance && cb.id !== instance.uid) {
- continue;
- }
- if (checkRecursiveUpdates(seen, cb)) {
- continue;
- }
- queue.splice(i, 1);
- i--;
- cb();
- }
- }
-}
-function flushPostFlushCbs(seen) {
- if (pendingPostFlushCbs.length) {
- const deduped = [...new Set(pendingPostFlushCbs)].sort(
- (a, b) => getId(a) - getId(b)
- );
- pendingPostFlushCbs.length = 0;
- if (activePostFlushCbs) {
- activePostFlushCbs.push(...deduped);
- return;
- }
- activePostFlushCbs = deduped;
- {
- seen = seen || /* @__PURE__ */ new Map();
- }
- for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {
- if (checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) {
- continue;
- }
- activePostFlushCbs[postFlushIndex]();
- }
- activePostFlushCbs = null;
- postFlushIndex = 0;
- }
-}
-const getId = (job) => job.id == null ? Infinity : job.id;
-const comparator = (a, b) => {
- const diff2 = getId(a) - getId(b);
- if (diff2 === 0) {
- if (a.pre && !b.pre)
- return -1;
- if (b.pre && !a.pre)
- return 1;
- }
- return diff2;
-};
-function flushJobs(seen) {
- isFlushPending = false;
- isFlushing = true;
- {
- seen = seen || /* @__PURE__ */ new Map();
- }
- queue.sort(comparator);
- const check = (job) => checkRecursiveUpdates(seen, job);
- try {
- for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {
- const job = queue[flushIndex];
- if (job && job.active !== false) {
- if (check(job)) {
- continue;
- }
- callWithErrorHandling(job, null, 14);
- }
- }
- } finally {
- flushIndex = 0;
- queue.length = 0;
- flushPostFlushCbs(seen);
- isFlushing = false;
- currentFlushPromise = null;
- if (queue.length || pendingPostFlushCbs.length) {
- flushJobs(seen);
- }
- }
-}
-function checkRecursiveUpdates(seen, fn) {
- if (!seen.has(fn)) {
- seen.set(fn, 1);
- } else {
- const count = seen.get(fn);
- if (count > RECURSION_LIMIT) {
- const instance = fn.ownerInstance;
- const componentName = instance && getComponentName(instance.type);
- handleError(
- `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,
- null,
- 10
- );
- return true;
- } else {
- seen.set(fn, count + 1);
- }
- }
-}
-let devtools;
-let buffer = [];
-let devtoolsNotInstalled = false;
-function emit$1(event, ...args) {
- if (devtools) {
- devtools.emit(event, ...args);
- } else if (!devtoolsNotInstalled) {
- buffer.push({ event, args });
- }
-}
-function setDevtoolsHook(hook, target) {
- var _a, _b;
- devtools = hook;
- if (devtools) {
- devtools.enabled = true;
- buffer.forEach(({ event, args }) => devtools.emit(event, ...args));
- buffer = [];
- } else if (
- // handle late devtools injection - only do this if we are in an actual
- // browser environment to avoid the timer handle stalling test runner exit
- // (#4815)
- typeof window !== "undefined" && // some envs mock window but not fully
- window.HTMLElement && // also exclude jsdom
- !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes("jsdom"))
- ) {
- const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];
- replay.push((newHook) => {
- setDevtoolsHook(newHook, target);
- });
- setTimeout(() => {
- if (!devtools) {
- target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;
- devtoolsNotInstalled = true;
- buffer = [];
- }
- }, 3e3);
- } else {
- devtoolsNotInstalled = true;
- buffer = [];
- }
-}
-function devtoolsInitApp(app, version2) {
- emit$1("app:init", app, version2, {
- Fragment,
- Text,
- Comment,
- Static
- });
-}
-const devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook(
- "component:added"
- /* COMPONENT_ADDED */
-);
-const devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook(
- "component:updated"
- /* COMPONENT_UPDATED */
-);
-const _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(
- "component:removed"
- /* COMPONENT_REMOVED */
-);
-const devtoolsComponentRemoved = (component) => {
- if (devtools && typeof devtools.cleanupBuffer === "function" && // remove the component if it wasn't buffered
- !devtools.cleanupBuffer(component)) {
- _devtoolsComponentRemoved(component);
- }
-};
-/*! #__NO_SIDE_EFFECTS__ */
-// @__NO_SIDE_EFFECTS__
-function createDevtoolsComponentHook(hook) {
- return (component) => {
- emit$1(
- hook,
- component.appContext.app,
- component.uid,
- // fixed by xxxxxx
- // 为 0 是 App,无 parent 是 Page 指向 App
- component.uid === 0 ? void 0 : component.parent ? component.parent.uid : 0,
- component
- );
- };
-}
-const devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook(
- "perf:start"
- /* PERFORMANCE_START */
-);
-const devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook(
- "perf:end"
- /* PERFORMANCE_END */
-);
-function createDevtoolsPerformanceHook(hook) {
- return (component, type, time) => {
- emit$1(hook, component.appContext.app, component.uid, component, type, time);
- };
-}
-function devtoolsComponentEmit(component, event, params) {
- emit$1(
- "component:emit",
- component.appContext.app,
- component,
- event,
- params
- );
-}
-function emit(instance, event, ...rawArgs) {
- if (instance.isUnmounted)
- return;
- const props = instance.vnode.props || EMPTY_OBJ;
- {
- const {
- emitsOptions,
- propsOptions: [propsOptions]
- } = instance;
- if (emitsOptions) {
- if (!(event in emitsOptions) && true) {
- if (!propsOptions || !(toHandlerKey(event) in propsOptions)) {
- warn$1(
- `Component emitted event "${event}" but it is neither declared in the emits option nor as an "${toHandlerKey(event)}" prop.`
- );
- }
- } else {
- const validator = emitsOptions[event];
- if (isFunction(validator)) {
- const isValid = validator(...rawArgs);
- if (!isValid) {
- warn$1(
- `Invalid event arguments: event validation failed for event "${event}".`
- );
- }
- }
- }
- }
- }
- let args = rawArgs;
- const isModelListener2 = event.startsWith("update:");
- const modelArg = isModelListener2 && event.slice(7);
- if (modelArg && modelArg in props) {
- const modifiersKey = `${modelArg === "modelValue" ? "model" : modelArg}Modifiers`;
- const { number, trim } = props[modifiersKey] || EMPTY_OBJ;
- if (trim) {
- args = rawArgs.map((a) => isString(a) ? a.trim() : a);
- }
- if (number) {
- args = rawArgs.map(looseToNumber);
- }
- }
- {
- devtoolsComponentEmit(instance, event, args);
- }
- {
- const lowerCaseEvent = event.toLowerCase();
- if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) {
- warn$1(
- `Event "${lowerCaseEvent}" is emitted in component ${formatComponentName(
- instance,
- instance.type
- )} but the handler is registered for "${event}". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "${hyphenate(
- event
- )}" instead of "${event}".`
- );
- }
- }
- let handlerName;
- let handler = props[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249)
- props[handlerName = toHandlerKey(camelize(event))];
- if (!handler && isModelListener2) {
- handler = props[handlerName = toHandlerKey(hyphenate(event))];
- }
- if (handler) {
- callWithAsyncErrorHandling(
- handler,
- instance,
- 6,
- args
- );
- }
- const onceHandler = props[handlerName + `Once`];
- if (onceHandler) {
- if (!instance.emitted) {
- instance.emitted = {};
- } else if (instance.emitted[handlerName]) {
- return;
- }
- instance.emitted[handlerName] = true;
- callWithAsyncErrorHandling(
- onceHandler,
- instance,
- 6,
- args
- );
- }
-}
-function normalizeEmitsOptions(comp, appContext, asMixin = false) {
- const cache = appContext.emitsCache;
- const cached = cache.get(comp);
- if (cached !== void 0) {
- return cached;
- }
- const raw = comp.emits;
- let normalized = {};
- let hasExtends = false;
- if (!isFunction(comp)) {
- const extendEmits = (raw2) => {
- const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true);
- if (normalizedFromExtend) {
- hasExtends = true;
- extend(normalized, normalizedFromExtend);
- }
- };
- if (!asMixin && appContext.mixins.length) {
- appContext.mixins.forEach(extendEmits);
- }
- if (comp.extends) {
- extendEmits(comp.extends);
- }
- if (comp.mixins) {
- comp.mixins.forEach(extendEmits);
- }
- }
- if (!raw && !hasExtends) {
- if (isObject(comp)) {
- cache.set(comp, null);
- }
- return null;
- }
- if (isArray(raw)) {
- raw.forEach((key) => normalized[key] = null);
- } else {
- extend(normalized, raw);
- }
- if (isObject(comp)) {
- cache.set(comp, normalized);
- }
- return normalized;
-}
-function isEmitListener(options, key) {
- if (!options || !isOn(key)) {
- return false;
- }
- key = key.slice(2).replace(/Once$/, "");
- return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key);
-}
-let currentRenderingInstance = null;
-function setCurrentRenderingInstance(instance) {
- const prev = currentRenderingInstance;
- currentRenderingInstance = instance;
- instance && instance.type.__scopeId || null;
- return prev;
-}
-const INITIAL_WATCHER_VALUE = {};
-function watch(source, cb, options) {
- if (!isFunction(cb)) {
- warn$1(
- `\`watch(fn, options?)\` signature has been moved to a separate API. Use \`watchEffect(fn, options?)\` instead. \`watch\` now only supports \`watch(source, cb, options?) signature.`
- );
- }
- return doWatch(source, cb, options);
-}
-function doWatch(source, cb, {
- immediate,
- deep,
- flush,
- once: once2,
- onTrack,
- onTrigger
-} = EMPTY_OBJ) {
- if (cb && once2) {
- const _cb = cb;
- cb = (...args) => {
- _cb(...args);
- unwatch();
- };
- }
- if (deep !== void 0 && typeof deep === "number") {
- warn$1(
- `watch() "deep" option with number value will be used as watch depth in future versions. Please use a boolean instead to avoid potential breakage.`
- );
- }
- if (!cb) {
- if (immediate !== void 0) {
- warn$1(
- `watch() "immediate" option is only respected when using the watch(source, callback, options?) signature.`
- );
- }
- if (deep !== void 0) {
- warn$1(
- `watch() "deep" option is only respected when using the watch(source, callback, options?) signature.`
- );
- }
- if (once2 !== void 0) {
- warn$1(
- `watch() "once" option is only respected when using the watch(source, callback, options?) signature.`
- );
- }
- }
- const warnInvalidSource = (s2) => {
- warn$1(
- `Invalid watch source: `,
- s2,
- `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`
- );
- };
- const instance = currentInstance;
- const reactiveGetter = (source2) => deep === true ? source2 : (
- // for deep: false, only traverse root-level properties
- traverse(source2, deep === false ? 1 : void 0)
- );
- let getter;
- let forceTrigger = false;
- let isMultiSource = false;
- if (isRef(source)) {
- getter = () => source.value;
- forceTrigger = isShallow(source);
- } else if (isReactive(source)) {
- getter = () => reactiveGetter(source);
- forceTrigger = true;
- } else if (isArray(source)) {
- isMultiSource = true;
- forceTrigger = source.some((s2) => isReactive(s2) || isShallow(s2));
- getter = () => source.map((s2) => {
- if (isRef(s2)) {
- return s2.value;
- } else if (isReactive(s2)) {
- return reactiveGetter(s2);
- } else if (isFunction(s2)) {
- return callWithErrorHandling(s2, instance, 2);
- } else {
- warnInvalidSource(s2);
- }
- });
- } else if (isFunction(source)) {
- if (cb) {
- getter = () => callWithErrorHandling(source, instance, 2);
- } else {
- getter = () => {
- if (cleanup) {
- cleanup();
- }
- return callWithAsyncErrorHandling(
- source,
- instance,
- 3,
- [onCleanup]
- );
- };
- }
- } else {
- getter = NOOP;
- warnInvalidSource(source);
- }
- if (cb && deep) {
- const baseGetter = getter;
- getter = () => traverse(baseGetter());
- }
- let cleanup;
- let onCleanup = (fn) => {
- cleanup = effect2.onStop = () => {
- callWithErrorHandling(fn, instance, 4);
- cleanup = effect2.onStop = void 0;
- };
- };
- let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;
- const job = () => {
- if (!effect2.active || !effect2.dirty) {
- return;
- }
- if (cb) {
- const newValue = effect2.run();
- if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue)) || false) {
- if (cleanup) {
- cleanup();
- }
- callWithAsyncErrorHandling(cb, instance, 3, [
- newValue,
- // pass undefined as the old value when it's changed for the first time
- oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,
- onCleanup
- ]);
- oldValue = newValue;
- }
- } else {
- effect2.run();
- }
- };
- job.allowRecurse = !!cb;
- let scheduler;
- if (flush === "sync") {
- scheduler = job;
- } else if (flush === "post") {
- scheduler = () => queuePostRenderEffect$1(job, instance && instance.suspense);
- } else {
- job.pre = true;
- if (instance)
- job.id = instance.uid;
- scheduler = () => queueJob(job);
- }
- const effect2 = new ReactiveEffect2(getter, NOOP, scheduler);
- const scope = getCurrentScope();
- const unwatch = () => {
- effect2.stop();
- if (scope) {
- remove(scope.effects, effect2);
- }
- };
- {
- effect2.onTrack = onTrack;
- effect2.onTrigger = onTrigger;
- }
- if (cb) {
- if (immediate) {
- job();
- } else {
- oldValue = effect2.run();
- }
- } else if (flush === "post") {
- queuePostRenderEffect$1(
- effect2.run.bind(effect2),
- instance && instance.suspense
- );
- } else {
- effect2.run();
- }
- return unwatch;
-}
-function instanceWatch(source, value, options) {
- const publicThis = this.proxy;
- const getter = isString(source) ? source.includes(".") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis);
- let cb;
- if (isFunction(value)) {
- cb = value;
- } else {
- cb = value.handler;
- options = value;
- }
- const reset = setCurrentInstance(this);
- const res = doWatch(getter, cb.bind(publicThis), options);
- reset();
- return res;
-}
-function createPathGetter(ctx, path) {
- const segments = path.split(".");
- return () => {
- let cur = ctx;
- for (let i = 0; i < segments.length && cur; i++) {
- cur = cur[segments[i]];
- }
- return cur;
- };
-}
-function traverse(value, depth, currentDepth = 0, seen) {
- if (!isObject(value) || value["__v_skip"]) {
- return value;
- }
- if (depth && depth > 0) {
- if (currentDepth >= depth) {
- return value;
- }
- currentDepth++;
- }
- seen = seen || /* @__PURE__ */ new Set();
- if (seen.has(value)) {
- return value;
- }
- seen.add(value);
- if (isRef(value)) {
- traverse(value.value, depth, currentDepth, seen);
- } else if (isArray(value)) {
- for (let i = 0; i < value.length; i++) {
- traverse(value[i], depth, currentDepth, seen);
- }
- } else if (isSet(value) || isMap(value)) {
- value.forEach((v) => {
- traverse(v, depth, currentDepth, seen);
- });
- } else if (isPlainObject(value)) {
- for (const key in value) {
- traverse(value[key], depth, currentDepth, seen);
- }
- }
- return value;
-}
-function validateDirectiveName(name) {
- if (isBuiltInDirective(name)) {
- warn$1("Do not use built-in directive ids as custom directive id: " + name);
- }
-}
-function createAppContext() {
- return {
- app: null,
- config: {
- isNativeTag: NO,
- performance: false,
- globalProperties: {},
- optionMergeStrategies: {},
- errorHandler: void 0,
- warnHandler: void 0,
- compilerOptions: {}
- },
- mixins: [],
- components: {},
- directives: {},
- provides: /* @__PURE__ */ Object.create(null),
- optionsCache: /* @__PURE__ */ new WeakMap(),
- propsCache: /* @__PURE__ */ new WeakMap(),
- emitsCache: /* @__PURE__ */ new WeakMap()
- };
-}
-let uid$1 = 0;
-function createAppAPI(render, hydrate) {
- return function createApp2(rootComponent, rootProps = null) {
- if (!isFunction(rootComponent)) {
- rootComponent = extend({}, rootComponent);
- }
- if (rootProps != null && !isObject(rootProps)) {
- warn$1(`root props passed to app.mount() must be an object.`);
- rootProps = null;
- }
- const context = createAppContext();
- const installedPlugins = /* @__PURE__ */ new WeakSet();
- const app = context.app = {
- _uid: uid$1++,
- _component: rootComponent,
- _props: rootProps,
- _container: null,
- _context: context,
- _instance: null,
- version,
- get config() {
- return context.config;
- },
- set config(v) {
- {
- warn$1(
- `app.config cannot be replaced. Modify individual options instead.`
- );
- }
- },
- use(plugin2, ...options) {
- if (installedPlugins.has(plugin2)) {
- warn$1(`Plugin has already been applied to target app.`);
- } else if (plugin2 && isFunction(plugin2.install)) {
- installedPlugins.add(plugin2);
- plugin2.install(app, ...options);
- } else if (isFunction(plugin2)) {
- installedPlugins.add(plugin2);
- plugin2(app, ...options);
- } else {
- warn$1(
- `A plugin must either be a function or an object with an "install" function.`
- );
- }
- return app;
- },
- mixin(mixin) {
- {
- if (!context.mixins.includes(mixin)) {
- context.mixins.push(mixin);
- } else {
- warn$1(
- "Mixin has already been applied to target app" + (mixin.name ? `: ${mixin.name}` : "")
- );
- }
- }
- return app;
- },
- component(name, component) {
- {
- validateComponentName(name, context.config);
- }
- if (!component) {
- return context.components[name];
- }
- if (context.components[name]) {
- warn$1(`Component "${name}" has already been registered in target app.`);
- }
- context.components[name] = component;
- return app;
- },
- directive(name, directive) {
- {
- validateDirectiveName(name);
- }
- if (!directive) {
- return context.directives[name];
- }
- if (context.directives[name]) {
- warn$1(`Directive "${name}" has already been registered in target app.`);
- }
- context.directives[name] = directive;
- return app;
- },
- // fixed by xxxxxx
- mount() {
- },
- // fixed by xxxxxx
- unmount() {
- },
- provide(key, value) {
- if (key in context.provides) {
- warn$1(
- `App already provides property with key "${String(key)}". It will be overwritten with the new value.`
- );
- }
- context.provides[key] = value;
- return app;
- },
- runWithContext(fn) {
- const lastApp = currentApp;
- currentApp = app;
- try {
- return fn();
- } finally {
- currentApp = lastApp;
- }
- }
- };
- return app;
- };
-}
-let currentApp = null;
-function provide(key, value) {
- if (!currentInstance) {
- {
- warn$1(`provide() can only be used inside setup().`);
- }
- } else {
- let provides = currentInstance.provides;
- const parentProvides = currentInstance.parent && currentInstance.parent.provides;
- if (parentProvides === provides) {
- provides = currentInstance.provides = Object.create(parentProvides);
- }
- provides[key] = value;
- if (currentInstance.type.mpType === "app") {
- currentInstance.appContext.app.provide(key, value);
- }
- }
-}
-function inject(key, defaultValue, treatDefaultAsFactory = false) {
- const instance = currentInstance || currentRenderingInstance;
- if (instance || currentApp) {
- const provides = instance ? instance.parent == null ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : currentApp._context.provides;
- if (provides && key in provides) {
- return provides[key];
- } else if (arguments.length > 1) {
- return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue;
- } else {
- warn$1(`injection "${String(key)}" not found.`);
- }
- } else {
- warn$1(`inject() can only be used inside setup() or functional components.`);
- }
-}
-const isKeepAlive = (vnode) => vnode.type.__isKeepAlive;
-function onActivated(hook, target) {
- registerKeepAliveHook(hook, "a", target);
-}
-function onDeactivated(hook, target) {
- registerKeepAliveHook(hook, "da", target);
-}
-function registerKeepAliveHook(hook, type, target = currentInstance) {
- const wrappedHook = hook.__wdc || (hook.__wdc = () => {
- let current = target;
- while (current) {
- if (current.isDeactivated) {
- return;
- }
- current = current.parent;
- }
- return hook();
- });
- injectHook(type, wrappedHook, target);
- if (target) {
- let current = target.parent;
- while (current && current.parent) {
- if (isKeepAlive(current.parent.vnode)) {
- injectToKeepAliveRoot(wrappedHook, type, target, current);
- }
- current = current.parent;
- }
- }
-}
-function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {
- const injected = injectHook(
- type,
- hook,
- keepAliveRoot,
- true
- /* prepend */
- );
- onUnmounted(() => {
- remove(keepAliveRoot[type], injected);
- }, target);
-}
-function injectHook(type, hook, target = currentInstance, prepend = false) {
- if (target) {
- if (isRootHook(type)) {
- target = target.root;
- }
- const hooks = target[type] || (target[type] = []);
- const wrappedHook = hook.__weh || (hook.__weh = (...args) => {
- if (target.isUnmounted) {
- return;
- }
- pauseTracking();
- const reset = setCurrentInstance(target);
- const res = callWithAsyncErrorHandling(hook, target, type, args);
- reset();
- resetTracking();
- return res;
- });
- if (prepend) {
- hooks.unshift(wrappedHook);
- } else {
- hooks.push(wrappedHook);
- }
- return wrappedHook;
- } else {
- const apiName = toHandlerKey(
- (ErrorTypeStrings[type] || type.replace(/^on/, "")).replace(/ hook$/, "")
- );
- warn$1(
- `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().`
- );
- }
-}
-const createHook = (lifecycle) => (hook, target = currentInstance) => (
- // post-create lifecycle registrations are noops during SSR (except for serverPrefetch)
- (!isInSSRComponentSetup || lifecycle === "sp") && injectHook(lifecycle, (...args) => hook(...args), target)
-);
-const onBeforeMount = createHook("bm");
-const onMounted = createHook("m");
-const onBeforeUpdate = createHook("bu");
-const onUpdated = createHook("u");
-const onBeforeUnmount = createHook("bum");
-const onUnmounted = createHook("um");
-const onServerPrefetch = createHook("sp");
-const onRenderTriggered = createHook(
- "rtg"
-);
-const onRenderTracked = createHook(
- "rtc"
-);
-function onErrorCaptured(hook, target = currentInstance) {
- injectHook("ec", hook, target);
-}
-const getPublicInstance = (i) => {
- if (!i)
- return null;
- if (isStatefulComponent(i))
- return getExposeProxy(i) || i.proxy;
- return getPublicInstance(i.parent);
-};
-const publicPropertiesMap = (
- // Move PURE marker to new line to workaround compiler discarding it
- // due to type annotation
- /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {
- $: (i) => i,
- // fixed by xxxxxx vue-i18n 在 dev 模式,访问了 $el,故模拟一个假的
- // $el: i => i.vnode.el,
- $el: (i) => i.__$el || (i.__$el = {}),
- $data: (i) => i.data,
- $props: (i) => shallowReadonly(i.props),
- $attrs: (i) => shallowReadonly(i.attrs),
- $slots: (i) => shallowReadonly(i.slots),
- $refs: (i) => shallowReadonly(i.refs),
- $parent: (i) => getPublicInstance(i.parent),
- $root: (i) => getPublicInstance(i.root),
- $emit: (i) => i.emit,
- $options: (i) => resolveMergedOptions(i),
- $forceUpdate: (i) => i.f || (i.f = () => {
- i.effect.dirty = true;
- queueJob(i.update);
- }),
- // $nextTick: i => i.n || (i.n = nextTick.bind(i.proxy!)),// fixed by xxxxxx
- $watch: (i) => instanceWatch.bind(i)
- })
-);
-const isReservedPrefix = (key) => key === "_" || key === "$";
-const hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);
-const PublicInstanceProxyHandlers = {
- get({ _: instance }, key) {
- const { ctx, setupState, data, props, accessCache, type, appContext } = instance;
- if (key === "__isVue") {
- return true;
- }
- let normalizedProps;
- if (key[0] !== "$") {
- const n2 = accessCache[key];
- if (n2 !== void 0) {
- switch (n2) {
- case 1:
- return setupState[key];
- case 2:
- return data[key];
- case 4:
- return ctx[key];
- case 3:
- return props[key];
- }
- } else if (hasSetupBinding(setupState, key)) {
- accessCache[key] = 1;
- return setupState[key];
- } else if (data !== EMPTY_OBJ && hasOwn(data, key)) {
- accessCache[key] = 2;
- return data[key];
- } else if (
- // only cache other properties when instance has declared (thus stable)
- // props
- (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key)
- ) {
- accessCache[key] = 3;
- return props[key];
- } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {
- accessCache[key] = 4;
- return ctx[key];
- } else if (shouldCacheAccess) {
- accessCache[key] = 0;
- }
- }
- const publicGetter = publicPropertiesMap[key];
- let cssModule, globalProperties;
- if (publicGetter) {
- if (key === "$attrs") {
- track(instance, "get", key);
- } else if (key === "$slots") {
- track(instance, "get", key);
- }
- return publicGetter(instance);
- } else if (
- // css module (injected by vue-loader)
- (cssModule = type.__cssModules) && (cssModule = cssModule[key])
- ) {
- return cssModule;
- } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {
- accessCache[key] = 4;
- return ctx[key];
- } else if (
- // global properties
- globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)
- ) {
- {
- return globalProperties[key];
- }
- } else if (currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading
- // to infinite warning loop
- key.indexOf("__v") !== 0)) {
- if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {
- warn$1(
- `Property ${JSON.stringify(
- key
- )} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.`
- );
- } else if (instance === currentRenderingInstance) {
- warn$1(
- `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`
- );
- }
- }
- },
- set({ _: instance }, key, value) {
- const { data, setupState, ctx } = instance;
- if (hasSetupBinding(setupState, key)) {
- setupState[key] = value;
- return true;
- } else if (setupState.__isScriptSetup && hasOwn(setupState, key)) {
- warn$1(`Cannot mutate
-
-
diff --git a/unpackage/dist/dev/mp-weixin/static/logo.png b/unpackage/dist/dev/mp-weixin/static/logo.png
deleted file mode 100644
index b5771e2..0000000
Binary files a/unpackage/dist/dev/mp-weixin/static/logo.png and /dev/null differ
diff --git a/unpackage/dist/dev/mp-weixin/static/transition/page1/pictrues/page1.png b/unpackage/dist/dev/mp-weixin/static/transition/page1/pictrues/page1.png
deleted file mode 100644
index ac09e8c..0000000
Binary files a/unpackage/dist/dev/mp-weixin/static/transition/page1/pictrues/page1.png and /dev/null differ
diff --git a/unpackage/dist/dev/mp-weixin/static/transition/page1/pictures/background.png b/unpackage/dist/dev/mp-weixin/static/transition/page1/pictures/background.png
deleted file mode 100644
index 4c4b6cf..0000000
Binary files a/unpackage/dist/dev/mp-weixin/static/transition/page1/pictures/background.png and /dev/null differ
diff --git a/unpackage/dist/dev/mp-weixin/static/transition/page1/pictures/button.png b/unpackage/dist/dev/mp-weixin/static/transition/page1/pictures/button.png
deleted file mode 100644
index 17c202e..0000000
Binary files a/unpackage/dist/dev/mp-weixin/static/transition/page1/pictures/button.png and /dev/null differ
diff --git a/unpackage/dist/dev/mp-weixin/static/transition/page2/pictures/background.png b/unpackage/dist/dev/mp-weixin/static/transition/page2/pictures/background.png
deleted file mode 100644
index 4c4b6cf..0000000
Binary files a/unpackage/dist/dev/mp-weixin/static/transition/page2/pictures/background.png and /dev/null differ
diff --git a/unpackage/dist/dev/mp-weixin/static/transition/page2/pictures/button.png b/unpackage/dist/dev/mp-weixin/static/transition/page2/pictures/button.png
deleted file mode 100644
index 17c202e..0000000
Binary files a/unpackage/dist/dev/mp-weixin/static/transition/page2/pictures/button.png and /dev/null differ