{"version":3,"sources":["webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/current-article-id.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/current-article.ts","webpack://@lemon8/web-seo/./client/utils/use-semantic-url-builder.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/utils/use-active-to-current-article.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/replies-see-more/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/comment-reply-list/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/comment-item-content/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/comment-item-image/use-comment-image.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/comment-item-image/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/comment-item/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/current-article-comments.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/comments-see-more/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/current-article-translated.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/comment-no-permission/assets/close-comment.svg","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/comment-no-permission/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/components/article-info-bar/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-content/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/components/legacy-hashtag-item/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/current-article-fold.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/partial-article-content/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-sar/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/wap-article/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/gallery-author-section/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/atoms/current-video-article.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/atoms/end-recommend-show.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/atoms/replay-video.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/components/video-player/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/components/video-wrapper/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/components/video-content/video-content-footer/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/components/video-content/video-author/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/components/video-content/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/components/warning-label-section/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/current-article-related-post.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/components/end-recommend/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/large-image/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/original-post-banner/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/campaign/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/current-article-related-hashtag.ts","webpack://@lemon8/web-seo/./client/components/see-more-banner/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/related-topic/index.tsx","webpack://@lemon8/web-seo/./client/components/masonry/index.tsx","webpack://@lemon8/web-seo/./client/components/article-recommend-card/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/related-post/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/current-article-author.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/json-ld/use-author-jsonld.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/json-ld/use-video-jsonld.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/json-ld/use-comments-jsonld.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/current-article-canonical.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/json-ld/use-article-base-jsonld.ts","webpack://@lemon8/web-seo/./client/utils/escape-xml.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/json-ld/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/utils/use-article-description.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/utils/use-article-title.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/og.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/utils/use-article-keywords.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/tdk.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/preload.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/canonical.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/rebots.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/twitter.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/index.tsx","webpack://@lemon8/web-seo/client/routes/$user_link_name_.$article_id/route.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/related-post-carousel-show.ts","webpack://@lemon8/web-seo/./client/components/article-card/index.tsx","webpack://@lemon8/web-seo/./client/utils/px-to-rem.ts","webpack://@lemon8/web-seo/./client/components/user-auth-icon/index.tsx","webpack://@lemon8/web-seo/./shared/utils/local-storage-util.ts"],"names":["$CurrentArticleId","atom","get","traffic","$PageLevelTraffic","pageType","EPageType","includes","console","log","Promise","resolve","pendingQueue","groupId","$CurrentArticle","currentArticleId","$ArticleDetail","$CurrentAvailableArticleOrNull","article","ArticleDetailUtil","$CurrentArticleAsAvailable","useSemanticUrlBuilder","region","useAtomValue","$Locale","enterHref","$RootTraffic","useCallback","path","originalRegion","url","URL","startsWith","warn","concat","protocol","host","useActiveToCurrentArticle","active","usePageActive","position","id","schemaOption","categoryId","ampExtra","enter_position","enter_page_click_id","articleClass","author","userId","EArticleClass","authorId","RepliesSeeMore","props","t","useTranslation","activeToCurrentArticle","isMobileUser","$IsMobileUser","comment","commentId","replyCount","hasMore","cursor","$ArticleCommentDetail","replyLoader","useRouteLoader","media_id","comment_id","offset","atomFamilies","$ArticleCommentDetailLoadmore","seeMoreObservedRef","useViewTracking","onView","window","Tea","current_page_module","ModuleType","current_position","ClickPosition","handleReadMoreClick","useReflowClick","defaultBehavior","load","reflowBehavior","clickEvent","state","jsx","Loading","variant","jsxs","ref","className","onClick","children","String","ShowMoreIcon","CommentReplyList","replies","map","reply","CommentItem","CommentContent","richContent","text","buildSemanticUrl","handleCommentRichContentClick","page_click_id","richContentArray","useMemo","length","sortedRichContent","_sortBy","end","richContentCursor","richContentEnd","res","push","substring","currentRich","start","type","ECommentRichContentCategory","rich","mentionUserId","mentionedUerHref","articleRegion","Link","to","IMAGE_MIN_DESIGN_WIDTH","useCommentImage","imageList","image","width","height","aspectRatio","_clamp","Math","max","src","alt","CommentImage","commentImage","activeToCurrentPage","handleClickImage","style","Image","CURRENT_PAGE_MODULE","formatTimeAgo","useTimeAgoFormatter","createTime","avatar","nickName","linkName","isPrimaryComment","CommentUtil","isReply","userCanonicalUrl","isAuthor","articleAuthorId","commentAuthorId","formattedCreatedTime","likeIconRef","commentAuthorObservedRef","handleClickUser","commentReplyRef","handleCommentReplyClick","handleClickLike","cls","Avatar","replace","HeartIcon","Boolean","$CurrentArticleComments","$ArticleComments","CommentsSeeMore","loader","$ArticleCommentsLoadmore","handleSeeMoreClick","$CurrentArticleTranslated","_path","_path2","_circle","_circle2","_circle3","_circle4","_path3","_extends","target","i","source","key","SvgCloseComment","CommentNoPermission","CloseComment","ArticleCommentsSection","formatNum","useNumFormatter","items","currentArticleTranslated","articleAvailable","isBot","$UserAgent","hitPostCommentCountExp","$HitPostCommentCountExp","commentItems","slice","commentCount","commentPermission","ECommentPermission","num","DivisibleStack","ArticleInfoSection","favoriteCount","diggCount","savedRef","handleSavedClick","diggRef","handleDiggClick","commentedRef","handleCommentedClick","Bookmark","Heart","EllipsisBubble","ArticleContent","navigate","useNavigate","title","content","isMobile","isInApp","isRealUser","search","useSearchParams","handleAnchorClick","anchorType","customParams","event","preventDefault","poiId","hashtagId","mentionedId","is_cta","handleHashtagClick","pathName","handlePoiClick","handleMentionedClick","mentionedHref","handleLinkClick","data","cardType","href","open","Article","articleTitle","isSSR","__BUILD_TARGET__","isShow","countryRegion","onLinkClick","onHashtagClick","onPoiClick","onMentionedClick","filterXSS","LegacyHashtagItem","hashtag","name","$CurrentArticleFold","$CurrentArticleHeightComputed","PartialArticleContent","folded","setFolded","useScopedAtom","computed","setComputed","partialArticleRef","useRef","shortContent","formattedShortContent","useEffect","current","lineHeight","lineHeightInStr","getComputedStyle","scrollHeight","parseFloat","round","display","visibility","ArticleSarSection","relatedQuery","articleTranslated","kepUrl","kepQueryFormat","sarObservedRef","click_position","handleSarClick","ArticleEditTime","publishTime","modifyTime","timeAgo","des","sep","ArticlePOI","locationInfo","poiObservedRef","poiName","LegacyForumList","forumList","f","ArticleReadMoreBanner","setSimpleCTAModel","useSetAtom","$SimpleCTAModalShow","useScopedAtomValue","readMoreBtnRef","handleClickModalConfirm","currentPosition","body","handleClickConfirm","ChevronDownFill","PartialArticleLoading","ArticleContentSkeleton","WapArticleSection","translated","Fragment","GalleryAuthorSection","mainAuthorRef","followBtnObservedRef","authorHref","handleAuthorInfoClick","handleFollowClick","UserAuthIcon","authInfo","Button","size","ButtonSize","$CurrentVideoArticle","$EndRecommendShow","$ReplayVideo","handler","VideoPlayer","player","video","largeImage","setEndRecommendShow","useSetScopedAtom","isFirstPlay","setSimpleCTAModal","showPlay","setShowPlay","useState","localStorageKey","setLocalStorageKey","muted","setMuted","keyPrefix","videoClicked","setVideoReplayHandler","onVisibilitychange","_a","_b","document","visibilityState","pause","status","VideoStatus","addEventListener","removeEventListener","handlePlayEvent","handlePlayingEvent","handlePauseEvent","handleEndEvent","playerInst","dateToday","today","Date","getFullYear","getMonth","getDate","lastVideoVisitState","localStorage","getItem","useManualPlay","play","handleVideoClick","handlePlayClick","stopPropagation","setLocalStorageStatus","handleClickCancel","handleVolumeClicked","unmute","mute","videoReplayHandler","seek","SimpleVideo","videoSrc","posterSrc","autoPlay","PlayFill","SpeakerMutedFillIcon","SpeakerWaveFillIcon","VideoWrapper","VideoContentFooter","formattedTime","forum","maxWidth","VideoAuthor","userHref","videoAuthorObservedRef","handleButtonClick","marginLeft","light","LONG_READ_MORE_COUNTRY","VideoContent","maskHeight","setMaskHeight","articleFirstHeight","setArticleFirstHeight","contentRef","contentExpended","isLongReadMore","requestAnimationFrame","overflow","$article","querySelector","_el","$title","p","titleLineHeight","fontSize","titleFontSize","titleHeightStr","titleHeight","ceil","_fontSize","Number","isNaN","$content","callback","contentStyle","scrollTo","e","WarningLabelSection","illegalInfo","WarningLabel","$CurrentArticleRelatedPost","$ArticleRelatedPost","VideoEndRecommendSection","show","relatedPost","loadable","VideoEndRecommend","searchId","onClickReplay","ArticleVideoSectionImpl","ArticleVideoSection","sessionStorage","imgUrl","oneLink","generateOneLink","pid","enter_page_id","enter_page_type","sendNotification","icon","requireInteraction","time","now","toString","ScopedProvider","atoms","atomsWithHydration","LargeImageSection","paddingBottom","OriginalPostBanner","originArticleHref","handleBannerClick","ArticleMainSections","store","useStore","currentArticle","isAvailable","articleRelatedPost","unavailableReason","NotFound","EArticleUnavailableReason","ENotFoundType","$CurrentGalleryArticle","ArticleGallery","enableIndexForRecommend","articleRelatedPosts","ArticleCampaignSection","campaigns","$CampaignBanner","campaignObservedRef","CampaignCarousel","$CurrentArticleRelatedHashtag","$ArticleRelatedHashtag","SeeMoreBanner","onClickSeeMore","loading","currentPageModule","$CurrentPageModule","prefix","$CurrentPositionPrefix","ChevronDownIcon","queryLengthFilter","str","ArticleRelatedTopicSection","relatedQueryInfos","sugWords","gptExtendWords","pageIndex","setPageIndex","PAGE_NUMBER","MAX_VALUE","words","longTailWords","highVolumeWords","relatedSEOWords","relatedQueries","info","word","topicNameSet","Set","item","topicName","_uniq","filter","has","topics","handleClickSeeMore","topicSectionObservedRef","renderBottomText","SeeMore","ClickPositionPrefix","$CurrentModuleRank","SectionTitle","TopicCard","topic","topicId","parseToNumber","val","useContainerRef","setCurrentRef","setRef","instance","Masonry","forwardRef","columnCount","childrenArray","Children","container","setContainer","containerHeight","setContainerHeight","floor","postLayoutQueue","useImperativeHandle","postLayout","func","heightList","setHeightList","_range","orderList","setOrderList","o","doLayout","columnHeights","Array","fill","columnItems","childOrderList","child","min","_min","minIndex","findIndex","v","_","index","join","forEach","observer","ResizeObserver","observe","disconnect","maxHeight","_max","maxHeightIndex","indexOf","maxHeightCount","left","top","r","bottom","lastIndexOf","order","marginBottom","ArticleRecommendCard","rank","articleLikes","imprId","cardObservedRef","group_id","article_class","impr_id","handleClickArticle","bundle","_objectSpread","ArticleClass","coverUrl","onContextMenu","dangerouslySetInnerHTML","buildInnerHtml","ArticleRelatedPostSection","relatedPosts","bannerShow","setBannerShow","sectionObservedRef","search_id","$ArticleRelatedPostLoadmore","evenRelatedPosts","filteredPosts","masonryRef","darkBackground","pageModule","clickPosition","divider","ArticleCard","ArticleBody","Suspense","fallback","ArticleBodySkeleton","ArticleRecommendSkeleton","$CurrentArticleAuthor","$UserDetail","$CurrentAvailableArticleAuthorOrNull","UserDetailUtil","useArticleAuthorJsonld","user","userRegion","useVideoJsonLD","authorJsonLd","abInfo","videoObject","creator","useCommentsJsonLD","comments","$CurrentArticleCanonical","canonicalRegion","Region","useArticleBaseJsonLD","canonicalUrl","escapeSpecialXmlCharacter","unescapeSpecialXmlCharacter","removeEscapedSpecialXmlCharacter","ArticleJsonLD","articleBaseJsonLD","authorJsonLD","videoJsonLD","commentJsonLD","articleJsonLd","isTranslatedVersion","__html","JSON","stringify","BreadCrumbJsonLD","breadCrumbList","itemListElement","useArticleDescription","description","useArticleTitle","ArticleOpenGraph","imageMeta","property","endsWith","useArticleKeywords","result","ArticleTDK","keywords","ArticlePreload","preloadUrl","rel","as","ArticleCanonical","canonicalPathname","translatedRegions","hasTranslatedVersion","alternateRegions","hrefLang","alternateRegion","RegionHrefLangMap","ArticleRobots","isOnlyFollow","ArticleTwitter","ArticleHead","links","cssLinks","buildMasterLoader","shouldRevalidate","args","currentParams","user_link_name","currentUserLinkName","article_id","nextParams","userLinkName","articleId","defaultShouldRevalidate","ArticlePage","RemixPage","constructor","arguments","Head","Body","$RelatedPostCarouselShow","RELATED_ARTICLE_CAROUSEL_HIDE_RANK","canonicalUri","isLCP","setRelatedPostCarouselShow","posterImageList","temp","articleHref","split","handleClickAuthor","articleCardRef","isVideo","multi_images","fetchpriority","PlayIcon","wrapper","pxToRem","px","DEFAULT_WIDTH","DEFAULT_HEIGHT","DEFAULT_MARGIN_LEFT","showAuthSymbol","deleteOutdatedKeys","len","keyName","removeItem","storageKey","storageValue","setItem"],"mappings":"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","file":"routes/$user_link_name_.$article_id-7ff74523e85fbd1792de.js","sourcesContent":["import { atom } from 'jotai';\nimport { $PageLevelTraffic } from 'shared/atoms';\nimport { EPageType, IArticlePageTraffic, IVideoPageTraffic } from 'shared/models';\nimport { pendingQueue } from '~/utils/pending-queue';\n\nexport const $CurrentArticleId = atom((get) => {\n const traffic = get($PageLevelTraffic);\n const { pageType } = traffic;\n\n if (![EPageType.article, EPageType.video].includes(pageType)) {\n console.log('>>>>>>>', 'get current article', 'return promise');\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n throw new Promise((resolve) => pendingQueue.push(resolve));\n }\n\n const articleTraffic = traffic as IArticlePageTraffic | IVideoPageTraffic;\n\n return articleTraffic.groupId;\n});\n","import { atom } from 'jotai';\nimport { $ArticleDetail } from 'shared/atoms';\nimport { $CurrentArticleId } from '@article/shared/atoms/current-article-id';\nimport { ArticleDetailUtil, IArticleDetail } from 'shared/models';\n\nexport const $CurrentArticle = atom((get) => {\n const currentArticleId = get($CurrentArticleId);\n return get($ArticleDetail(currentArticleId));\n});\n\n/**\n * get null when current article is not available\n *\n * e.g. used for short circuit logic.\n */\nexport const $CurrentAvailableArticleOrNull = atom((get) => {\n const article = get($CurrentArticle);\n return ArticleDetailUtil.isArticleAvailable(article) ? article : null;\n});\n\n/**\n * force cast current article to IArticleDetail\n *\n * use this only when you are sure that current article is available to show\n */\nexport const $CurrentArticleAsAvailable = atom((get) => {\n return get($CurrentArticle) as IArticleDetail;\n});\n","import { useAtomValue } from 'jotai';\nimport { $Locale, $RootTraffic } from '@lemon8/web-app-shared/atom';\nimport { useCallback } from 'react';\n\ntype UseSemanticUrlBuilder = () => (path: string, originalRegion?: string) => string;\n\nexport const useSemanticUrlBuilder: UseSemanticUrlBuilder = () => {\n const { region } = useAtomValue($Locale);\n const { enterHref } = useAtomValue($RootTraffic);\n\n return useCallback(\n (path: string, originalRegion?: string) => {\n const url = new URL(enterHref);\n\n if (!path.startsWith('/')) {\n console.warn('path must start with /, path: %s', path);\n }\n\n return `${url.protocol}//${url.host}${path}?region=${originalRegion || region}`;\n },\n [region],\n );\n};\n","import { useAtomValue } from 'jotai';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { ArticleDetailUtil, EArticleClass } from 'shared/models';\nimport { ClickPosition } from '~/utils/click-position';\nimport { usePageActive } from '~/utils/active/use-page-active';\nimport { useCallback } from 'react';\n\nexport const useActiveToCurrentArticle = (): ((position: ClickPosition, id?: string) => void) => {\n const article = useAtomValue($CurrentArticle);\n\n const active = usePageActive();\n\n return useCallback((position, id) => {\n const articleAvailable = ArticleDetailUtil.isArticleAvailable(article);\n\n if (!articleAvailable) {\n return active({\n schemaOption: {\n pageType: 'feed',\n categoryId: 0,\n },\n ampExtra: {\n enter_position: position,\n enter_page_click_id: id || null,\n },\n });\n }\n\n const {\n articleClass,\n groupId,\n author: { userId },\n } = article;\n\n active({\n schemaOption: {\n pageType: articleClass === EArticleClass.VIDEO ? 'video' : 'article',\n groupId,\n authorId: userId,\n },\n ampExtra: {\n enter_position: position,\n enter_page_click_id: id || null,\n },\n });\n }, []);\n};\n","import { FC, useCallback } from 'react';\nimport ShowMoreIcon from 'icon/chevron_down_fill.svg';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { useTranslation } from 'react-i18next';\nimport { useAtomValue } from 'jotai';\nimport { $ArticleCommentDetail } from 'shared/atoms/article/article-comment-detail';\nimport { useRouteLoader } from '~/utils/use-route-loader';\nimport { $ArticleCommentDetailLoadmore } from 'shared/atoms/article/article-comment-detail-loadmore';\nimport { IPrimaryComment } from 'shared/models';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\nimport { Loading } from '~/components/loading';\nimport { ModuleType } from '~/utils/module-type';\nimport { ClickPosition } from '~/utils/click-position';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { $IsMobileUser } from '~/utils/is-mobile-user';\n\nimport './style.scss';\n\ninterface IRepliesSeeMoreProps {\n comment: IPrimaryComment;\n}\n\nexport const RepliesSeeMore: FC = (props) => {\n const { t } = useTranslation();\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const isMobileUser = useAtomValue($IsMobileUser);\n const { comment } = props;\n const { commentId, replyCount } = comment;\n const {\n author: { userId },\n } = useAtomValue($CurrentArticleAsAvailable);\n const { hasMore, cursor } = useAtomValue($ArticleCommentDetail(commentId));\n\n const replyLoader = useRouteLoader(\n 'comment-detail',\n {\n media_id: userId,\n comment_id: commentId,\n offset: cursor,\n },\n {\n atomFamilies: { $ArticleCommentDetailLoadmore },\n },\n );\n\n const seeMoreObservedRef = useViewTracking({\n onView: useCallback(() => {\n if (isMobileUser) {\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.comment,\n current_position: ClickPosition.comment_reply_see_more,\n });\n }\n }, []),\n });\n\n const handleReadMoreClick = useReflowClick(\n {\n defaultBehavior: () => {\n replyLoader.load();\n },\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.comment_reply_see_more);\n },\n clickEvent: () => ({\n current_position: ClickPosition.comment_reply_see_more,\n }),\n },\n [activeToCurrentArticle, replyLoader],\n );\n\n if (!hasMore) {\n return null;\n }\n\n if (replyLoader.state === 'loading') {\n return ;\n }\n\n return (\n
\n
\n {`${t('seo_see_more_reply_comment')}(${String(replyCount - cursor)})`}\n \n
\n );\n};\n","import { FC } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { $ArticleCommentDetail } from 'shared/atoms/article/article-comment-detail';\nimport { IPrimaryComment } from 'shared/models';\nimport { CommentItem } from '@article/body/comment/comment-item';\nimport { RepliesSeeMore } from '@article/body/comment/replies-see-more';\n\ninterface ICommentReplyListProps {\n comment: IPrimaryComment;\n}\n\nexport const CommentReplyList: FC = (props) => {\n const { comment } = props;\n const { commentId } = comment;\n const { replies } = useAtomValue($ArticleCommentDetail(commentId));\n\n return (\n
\n {replies.map((reply) => (\n \n ))}\n \n
\n );\n};\n","import { FC, JSX, useMemo } from 'react';\nimport _sortBy from 'lodash/sortBy';\nimport { ECommentRichContentCategory, IMentionUserRichContent, TComment } from 'shared/models';\nimport { Link } from '@remix-run/react';\nimport { useSemanticUrlBuilder } from '~/utils/use-semantic-url-builder';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { ClickPosition } from '~/utils/click-position';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\nimport { useAtomValue } from 'jotai';\n\nimport './style.scss';\n\ninterface ICommentContentProps {\n comment: TComment;\n}\n\nexport const CommentContent: FC = (props) => {\n const { comment } = props;\n const { richContent, text } = comment;\n const article = useAtomValue($CurrentArticleAsAvailable);\n const buildSemanticUrl = useSemanticUrlBuilder();\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const handleCommentRichContentClick = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.comment_mentioned_user);\n },\n clickEvent: () => ({\n current_position: ClickPosition.comment_mentioned_user,\n page_click_id: comment.commentId,\n }),\n },\n [activeToCurrentArticle],\n );\n\n const richContentArray = useMemo<(string | JSX.Element)[]>(() => {\n if (!richContent?.length) {\n return [];\n }\n\n const sortedRichContent = _sortBy(richContent, '.start');\n\n let cursor = 0;\n const end = text.length;\n\n let richContentCursor = 0;\n const richContentEnd = sortedRichContent.length;\n\n const res: (string | JSX.Element)[] = [];\n\n while (cursor < end) {\n if (richContentCursor < richContentEnd) {\n res.push(text.substring(cursor, end));\n cursor = end;\n break;\n }\n\n const currentRich = sortedRichContent[richContentCursor];\n\n if (cursor === currentRich.start) {\n const { start, length } = currentRich;\n if (currentRich.type === ECommentRichContentCategory.MENTION_USER) {\n const rich = currentRich as IMentionUserRichContent;\n const { mentionUserId } = rich;\n\n const mentionedUerHref = buildSemanticUrl(`/user/${mentionUserId}/share`, article.articleRegion);\n\n res.push(\n \n {text.substring(start, start + length)}\n ,\n );\n } else {\n res.push(text.substring(start, start + length));\n }\n\n richContentCursor += 1;\n cursor += length;\n } else {\n res.push(text.substring(cursor, currentRich.start));\n cursor = currentRich.start;\n }\n }\n\n return res;\n }, [handleCommentRichContentClick]);\n\n if (!richContent?.length) {\n return

{text}

;\n }\n\n return

{richContentArray}

;\n};\n","import _clamp from 'lodash/clamp';\nimport { TComment } from 'shared/models';\n\ninterface ICommentImage {\n width: string;\n height: string;\n src: string;\n alt: string;\n}\n\nconst IMAGE_MIN_DESIGN_WIDTH = 96;\n\nexport const useCommentImage = (comment: TComment): ICommentImage | null => {\n const { imageList } = comment;\n if (!imageList?.length) {\n return null;\n }\n\n const image = imageList[0];\n const { width, height, url } = image;\n const aspectRatio = _clamp(width / height, 3 / 4, 4 / 3);\n\n return {\n width: `${(Math.max(aspectRatio, 1) * IMAGE_MIN_DESIGN_WIDTH * 16) / 375}rem`,\n height: `${(Math.max(1 / aspectRatio, 1) * IMAGE_MIN_DESIGN_WIDTH * 16) / 375}rem`,\n src: url,\n // TODO alt\n alt: '',\n };\n};\n","import { FC } from 'react';\nimport { Image } from '~/components/image';\nimport { TComment } from 'shared/models';\nimport { useCommentImage } from '@article/body/comment/comment-item-image/use-comment-image';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { ClickPosition } from '~/utils/click-position';\n\nimport './style.scss';\n\ninterface ICommentImageProps {\n comment: TComment;\n}\n\nexport const CommentImage: FC = (props) => {\n const { comment } = props;\n const commentImage = useCommentImage(comment);\n const activeToCurrentPage = useActiveToCurrentArticle();\n\n if (!commentImage) {\n return null;\n }\n\n const { height, width, src, alt } = commentImage;\n\n const handleClickImage = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentPage(ClickPosition.comment_image);\n },\n defaultBehavior: () => {\n activeToCurrentPage(ClickPosition.comment_image);\n },\n clickEvent: () => ({\n current_position: ClickPosition.comment_reply,\n page_click_id: comment.commentId,\n }),\n },\n [activeToCurrentPage, comment],\n );\n\n return (\n \n {alt}\n
\n );\n};\n","import { FC, useCallback, useMemo } from 'react';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { Link } from '@remix-run/react';\nimport { useTranslation } from 'react-i18next';\nimport { CommentUtil, TComment } from 'shared/models';\nimport { useSemanticUrlBuilder } from '~/utils/use-semantic-url-builder';\nimport { useTimeAgoFormatter } from '~/utils/format';\nimport HeartIcon from 'icon/heart.svg';\nimport { CommentReplyList } from '@article/body/comment/comment-reply-list';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\nimport { Avatar } from '~/components/avatar';\nimport { useAtomValue } from 'jotai';\nimport { CommentContent } from '../comment-item-content/index';\nimport cls from 'classnames';\nimport { CommentImage } from '../comment-item-image';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { ModuleType } from '~/utils/module-type';\nimport { ClickPosition } from '~/utils/click-position';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { $IsMobileUser } from '~/utils/is-mobile-user';\n\nimport './style.scss';\n\ninterface CommentItemProps {\n comment: TComment;\n}\n\nconst CURRENT_PAGE_MODULE = ModuleType.comment;\n\nexport const CommentItem: FC = (props) => {\n const { t } = useTranslation();\n const formatTimeAgo = useTimeAgoFormatter();\n const buildSemanticUrl = useSemanticUrlBuilder();\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const { comment } = props;\n const isMobileUser = useAtomValue($IsMobileUser);\n const article = useAtomValue($CurrentArticleAsAvailable);\n const { author, createTime } = comment;\n const { avatar, nickName, linkName } = author;\n const isPrimaryComment = CommentUtil.isPrimaryComment(comment);\n const isReply = CommentUtil.isReply(comment);\n\n const userCanonicalUrl = useMemo(() => {\n return buildSemanticUrl(`/${linkName}`, article.articleRegion);\n }, [linkName]);\n\n const isAuthor = useMemo(() => {\n const articleAuthorId = article.author.userId;\n const commentAuthorId = comment.author.userId;\n return articleAuthorId === commentAuthorId;\n }, [article, comment]);\n\n const formattedCreatedTime = useMemo(() => formatTimeAgo(createTime), [formatTimeAgo, createTime]);\n\n const likeIconRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: CURRENT_PAGE_MODULE,\n current_position: ClickPosition.comment_like,\n });\n }, []),\n });\n\n const commentAuthorObservedRef = useViewTracking({\n onView: useCallback(() => {\n if (isMobileUser) {\n window.Tea('wap_cta_show', {\n current_page_module: CURRENT_PAGE_MODULE,\n current_position: ClickPosition.comment_author,\n });\n }\n }, [isMobileUser]),\n });\n\n const handleClickUser = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.comment_author);\n },\n clickEvent: () => ({\n current_position: ClickPosition.comment_author,\n page_click_id: comment.commentId,\n }),\n },\n [activeToCurrentArticle],\n );\n\n const commentReplyRef = useViewTracking({\n onView: useCallback(() => {\n if (isMobileUser) {\n window.Tea('wap_cta_show', {\n current_page_module: CURRENT_PAGE_MODULE,\n current_position: ClickPosition.comment_reply,\n });\n }\n }, [isMobileUser]),\n });\n\n const handleCommentReplyClick = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.comment_reply);\n },\n defaultBehavior: () => {\n activeToCurrentArticle(ClickPosition.comment_reply);\n },\n clickEvent: () => ({\n current_position: ClickPosition.comment_reply,\n page_click_id: comment.commentId,\n }),\n },\n [activeToCurrentArticle],\n );\n\n const handleClickLike = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.comment_like);\n },\n defaultBehavior: () => {\n activeToCurrentArticle(ClickPosition.comment_like);\n },\n clickEvent: () => ({\n current_position: ClickPosition.comment_like,\n page_click_id: comment.commentId,\n }),\n },\n [activeToCurrentArticle],\n );\n\n return (\n
\n
\n \n \n \n\n
\n \n {nickName}\n {isAuthor && {t('author')}}\n \n\n
\n \n \n
\n\n
\n
{formattedCreatedTime}
\n \n {t('seo_comment_reply')}\n \n
\n
\n\n
\n
\n \n
\n
\n
\n {\n // 一级评论渲染回复条数外露\n isPrimaryComment && Boolean(comment.replyCount) && \n }\n
\n );\n};\n","import { atom } from 'jotai';\nimport { $ArticleComments } from 'shared/atoms';\nimport { $CurrentArticleId } from '@article/shared/atoms/current-article-id';\n\nexport const $CurrentArticleComments = atom((get) => {\n const currentArticleId = get($CurrentArticleId);\n return get($ArticleComments(currentArticleId));\n});\n","import { FC, useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport ShowMoreIcon from 'icon/chevron_down_fill.svg';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\nimport { useRouteLoader } from '~/utils/use-route-loader';\nimport { $ArticleCommentsLoadmore } from 'shared/atoms';\nimport { Loading } from '~/components/loading';\nimport { $CurrentArticleComments } from '@article/shared/atoms/current-article-comments';\nimport { ModuleType } from '~/utils/module-type';\nimport { ClickPosition } from '~/utils/click-position';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\n\nimport './style.scss';\n\nexport const CommentsSeeMore: FC = () => {\n const { t } = useTranslation();\n const {\n author: { userId },\n } = useAtomValue($CurrentArticleAsAvailable);\n const { hasMore, cursor } = useAtomValue($CurrentArticleComments);\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const loader = useRouteLoader(\n 'comment-loadmore',\n {\n media_id: userId,\n offset: cursor,\n },\n {\n atomFamilies: { $ArticleCommentsLoadmore },\n },\n );\n\n const handleSeeMoreClick = useReflowClick(\n {\n defaultBehavior: () => {\n loader.load();\n },\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.comment_see_more);\n },\n clickEvent: () => ({\n current_position: ClickPosition.comment_see_more,\n }),\n },\n [activeToCurrentArticle, loader],\n );\n\n const seeMoreObservedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.comment,\n current_position: ClickPosition.comment_see_more,\n });\n }, []),\n });\n\n if (!hasMore) {\n return null;\n }\n\n if (loader.state === 'loading') {\n return ;\n }\n\n return (\n
\n

{t('seo_landing_cta_see_more_comments')}

\n\n \n
\n );\n};\n","import { atom } from 'jotai';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\nimport { ArticleDetailUtil } from 'shared/models';\n\nexport const $CurrentArticleTranslated = atom((get) => {\n const article = get($CurrentArticle);\n if (!ArticleDetailUtil.isArticleAvailable(article)) {\n return false;\n }\n\n const { region } = get($Locale);\n\n return ArticleDetailUtil.isTranslatedArticleToShow(article, region);\n});\n","var _path, _path2, _circle, _circle2, _circle3, _circle4, _path3;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgCloseComment(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 120,\n height: 96,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M0 0h120v96H0z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M37.88 35.75c8.789-10.011 18.368-12.205 26.58-10.916 8.323 1.306 15.34 6.212 18.759 10.536 1.033 1.317 2.501 4.306 3.426 8.132.918 3.799 1.257 8.248.204 12.476a.693.693 0 00.44.815c.384.139.76.297 1.127.475.535.26 1.201.011 1.345-.565 1.202-4.83.795-9.79-.2-13.906-.988-4.087-2.6-7.518-3.983-9.28l-.004-.005c-3.855-4.88-11.533-10.21-20.649-11.642-9.23-1.448-19.835 1.12-29.3 11.902l-.002.002c-3.792 4.336-5.586 8.752-6.018 13.012-.43 4.241.5 8.223 1.99 11.698 2.589 6.04 6.935 10.714 9.198 12.887.332.319.414.818.19 1.221-1.182 2.134-3.14 5.644-4.104 7.223-.113.186-.637 1.104.035 1.993.292.386.673.544.906.61.24.07.464.082.625.082.584 0 1.339-.192 2.044-.404 1.511-.454 3.632-1.274 5.8-2.169 4.032-1.663 8.417-3.663 9.85-4.322a.996.996 0 01.402-.09 71.855 71.855 0 007.58-.501c.532-.065.906-.545.888-1.081-.01-.268-.011-.533-.007-.796.012-.65-.548-1.187-1.194-1.107-2.315.285-4.846.455-7.612.489-.33.004-.684.072-1.025.229-.995.46-5.724 2.632-10.025 4.406-.576.238-1.14.467-1.684.682-.86.341-1.644-.58-1.191-1.389.77-1.374 1.48-2.66 1.9-3.42a2.526 2.526 0 00-.527-3.1c-1.703-1.536-6.585-6.31-9.29-12.624-1.346-3.139-2.13-6.603-1.764-10.214.364-3.593 1.876-7.435 5.29-11.34z\",\n fill: \"#BDBDBD\"\n })), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 49.5,\n cy: 49.5,\n r: 3.5,\n fill: \"#BDBDBD\"\n })), _circle2 || (_circle2 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 61.5,\n cy: 49.5,\n r: 3.5,\n fill: \"#BDBDBD\"\n })), _circle3 || (_circle3 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 73.5,\n cy: 49.5,\n r: 3.5,\n fill: \"#BDBDBD\"\n })), _circle4 || (_circle4 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 80,\n cy: 71,\n r: 11.5,\n stroke: \"#BDBDBD\",\n strokeWidth: 3\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M72 63l16 16\",\n stroke: \"#BDBDBD\",\n strokeWidth: 3,\n strokeLinecap: \"round\"\n })));\n}\nexport default SvgCloseComment;","import { FC } from 'react';\nimport cls from 'classnames';\nimport { useTranslation } from 'react-i18next';\nimport CloseComment from './assets/close-comment.svg';\n\nimport './style.scss';\n\nexport const CommentNoPermission: FC = () => {\n const { t } = useTranslation();\n\n return (\n
\n

{t('comment')}

\n
\n
\n \n
\n

{t('postPrivacy_allowComments_offStatus_other')}

\n
\n
\n );\n};\n","import { useMemo, type FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { ModuleType } from '~/utils/module-type';\nimport { useNumFormatter } from '~/utils/format';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { DivisibleStack } from '~/components/divisible-stack';\nimport { CommentItem } from '@article/body/comment/comment-item';\nimport { CommentsSeeMore } from '@article/body/comment/comments-see-more';\nimport { $CurrentArticleComments } from '@article/shared/atoms/current-article-comments';\nimport { $CurrentArticleTranslated } from '@article/shared/atoms/current-article-translated';\nimport { ArticleDetailUtil, ECommentPermission } from 'shared/models';\nimport { CommentNoPermission } from '@article/body/comment/comment-no-permission';\nimport { $UserAgent } from '@lemon8/web-app-shared/atom';\nimport { $HitPostCommentCountExp } from '~/utils/libra';\n\nimport './style.scss';\n\nexport const ArticleCommentsSection: FC = () => {\n const { t } = useTranslation();\n const formatNum = useNumFormatter();\n const article = useAtomValue($CurrentArticle);\n const { items } = useAtomValue($CurrentArticleComments);\n const currentArticleTranslated = useAtomValue($CurrentArticleTranslated);\n const articleAvailable = ArticleDetailUtil.isArticleAvailable(article);\n const { isBot } = useAtomValue($UserAgent);\n const hitPostCommentCountExp = useAtomValue($HitPostCommentCountExp);\n\n const commentItems = useMemo(() => {\n if (isBot && !hitPostCommentCountExp) {\n return items.slice(0, 10);\n } else {\n return items;\n }\n }, [items, isBot, hitPostCommentCountExp]);\n\n const ref = useViewTracking({\n onView: () => {\n window.Tea('wap_module_show', {\n current_page_module: ModuleType.comment,\n });\n },\n });\n\n if (!articleAvailable) {\n return null;\n }\n\n if (currentArticleTranslated) {\n return null;\n }\n\n const { commentCount, commentPermission } = article;\n\n if (!commentCount) {\n return null;\n }\n\n if (commentPermission === ECommentPermission.Disable) {\n return (\n
\n \n
\n );\n }\n\n return (\n
\n

\n {t('comment_count_plural', { num: commentCount }).replace('%d', formatNum(commentCount))}\n

\n \n {commentItems.map((comment) => (\n \n ))}\n \n \n
\n );\n};\n","import { FC, useCallback } from 'react';\nimport cls from 'classnames';\nimport { useTranslation } from 'react-i18next';\nimport { useNumFormatter } from '~/utils/format';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleAsAvailable } from '../../atoms/current-article';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { ModuleType } from '~/utils/module-type';\nimport { ClickPosition } from '~/utils/click-position';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport Bookmark from 'icon/bookmark.svg';\nimport Heart from 'icon/heart.svg';\nimport EllipsisBubble from 'icon/ellipsis_bubble.svg';\n\nimport './style.scss';\n\nconst CURRENT_PAGE_MODULE = ModuleType.main_content;\n\nexport const ArticleInfoSection: FC = () => {\n const { t } = useTranslation();\n const formatNum = useNumFormatter();\n const { favoriteCount, diggCount, commentCount } = useAtomValue($CurrentArticleAsAvailable);\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const savedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: CURRENT_PAGE_MODULE,\n current_position: ClickPosition.main_favorite_icon,\n });\n }, []),\n });\n\n const handleSavedClick = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_favorite_icon);\n },\n defaultBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_favorite_icon);\n },\n clickEvent: () => ({\n current_position: ClickPosition.main_favorite_icon,\n }),\n },\n [activeToCurrentArticle],\n );\n\n const diggRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.main_content,\n current_position: ClickPosition.main_like_icon,\n });\n }, []),\n });\n\n const handleDiggClick = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_like_icon);\n },\n defaultBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_like_icon);\n },\n clickEvent: () => ({\n current_position: ClickPosition.main_like_icon,\n }),\n },\n [activeToCurrentArticle],\n );\n\n const commentedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.main_content,\n current_position: ClickPosition.main_comment_icon,\n });\n }, []),\n });\n\n const handleCommentedClick = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_comment_icon);\n },\n defaultBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_comment_icon);\n },\n clickEvent: () => ({\n current_position: ClickPosition.main_comment_icon,\n }),\n },\n [activeToCurrentArticle],\n );\n\n return (\n
\n
\n
\n \n {t('saved_text').replace('%d', formatNum(favoriteCount))}\n
\n\n
\n \n {Boolean(diggCount) && {formatNum(diggCount)}}\n
\n\n
\n \n {Boolean(commentCount) && {formatNum(commentCount)}}\n
\n
\n
\n );\n};\n","import { FC, RefObject, useCallback, useEffect } from 'react';\nimport { $UserAgent } from '@lemon8/web-app-shared/atom';\nimport { Article } from '@sharee/article-transcode';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleAsAvailable } from '~/routes/$user_link_name_.$article_id/shared/atoms/current-article';\nimport { ClickPosition } from '~/utils/click-position';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { useNavigate, useSearchParams } from '@remix-run/react';\nimport { EArticleClass } from 'shared/models';\nimport { filterXSS } from '@lemon8/web-app-shared/util';\n\nimport './style.scss';\n\ninterface IArticleContentProps {\n ref?: RefObject>;\n}\n\nexport const ArticleContent: FC = (props) => {\n const { ref } = props;\n const article = useAtomValue($CurrentArticleAsAvailable);\n const activeToCurrentArticle = useActiveToCurrentArticle();\n const navigate = useNavigate();\n const { title, content, groupId, articleClass, articleRegion } = article;\n\n const { isMobile, isBot, isInApp } = useAtomValue($UserAgent);\n const isRealUser = !isBot && isMobile && !isInApp;\n const [search] = useSearchParams();\n\n const handleAnchorClick = (\n position: ClickPosition,\n id: string,\n anchorType: string,\n customParams: Record,\n ) => {\n event?.preventDefault();\n let path = '';\n switch (anchorType) {\n case 'poiAnchor':\n case 'poiInContent':\n const { poiId = '' } = customParams;\n path = `/poi/${poiId}`;\n break;\n case 'hashtagInContent':\n const { hashtagId = '' } = customParams;\n path = `/topic/${hashtagId}`;\n break;\n case 'mentionedUser':\n const { mentionedId = '' } = customParams;\n path = `/user/${mentionedId}/share`;\n break;\n default:\n break;\n }\n window.Tea('wap_click', {\n current_position: position,\n is_cta: 1,\n page_click_id: id,\n });\n if (isRealUser) {\n activeToCurrentArticle(position, id);\n } else {\n navigate(`${path}?region=${articleRegion}`);\n }\n };\n\n const handleHashtagClick = useCallback(\n (pathName: string) => {\n const hashtagId = pathName.replace('/topic/', '');\n handleAnchorClick(ClickPosition.main_hashtag, hashtagId, 'hashtagInContent', { hashtagId });\n },\n [handleAnchorClick],\n );\n const handlePoiClick = useCallback(\n (pathName: string) => {\n const poiId = pathName.replace('/poi/', '');\n handleAnchorClick(ClickPosition.main_content_poi, poiId, 'poiInContent', { poiId });\n },\n [handleAnchorClick],\n );\n const handleMentionedClick = useCallback(\n (mentionedHref: string, mentionedId: string) => {\n handleAnchorClick(ClickPosition.main_content_mentioned_user, mentionedId, 'mentionedUser', { mentionedId });\n },\n [handleAnchorClick],\n );\n\n const handleLinkClick = useCallback(\n (data: any, cardType: string) => {\n window.Tea('wap_click', {\n current_position: ClickPosition.main_inner_link,\n is_cta: 1,\n });\n // 点击跳转逻辑在 基类 中已经处理\n if (cardType === 'menuitem') {\n return;\n }\n // 控制文章内容中链接跳转,wap跳转,ug不跳转\n if (data && data.href) {\n window.open(data.href);\n }\n },\n [handleAnchorClick],\n );\n\n if (search.get('hide_article')) {\n return null;\n }\n\n return (\n
\n \n {article.articleClass === EArticleClass.ARTICLE ? content : filterXSS(content)}\n \n
\n );\n};\n","import { FC, useMemo } from 'react';\nimport { Link } from '@remix-run/react';\nimport { useSemanticUrlBuilder } from '~/utils/use-semantic-url-builder';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { ClickPosition } from '~/utils/click-position';\n\nimport './style.scss';\n\ninterface ILegacyHashtagItemProps {\n hashtag: {\n id: string;\n name: string;\n };\n}\n\nexport const LegacyHashtagItem: FC = (props) => {\n const { hashtag } = props;\n const buildSemanticUrl = useSemanticUrlBuilder();\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const to = useMemo(() => buildSemanticUrl(`/topic/${hashtag.id}`), []);\n\n const handleHashtagClick = useReflowClick(\n {\n clickEvent: () => ({\n current_position: ClickPosition.main_hashtag,\n page_click_id: hashtag.id,\n }),\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_hashtag, hashtag.id);\n },\n },\n [activeToCurrentArticle],\n );\n\n return (\n \n #{hashtag.name}\n \n );\n};\n","import { atom } from 'jotai';\n\nexport const $CurrentArticleFold = atom(true);\n\nexport const $CurrentArticleHeightComputed = atom(false);\n","import { FC, useEffect, useMemo, useRef } from 'react';\nimport { $CurrentArticleTranslated } from '@article/shared/atoms/current-article-translated';\nimport { $CurrentArticleAsAvailable } from '~/routes/$user_link_name_.$article_id/shared/atoms/current-article';\nimport { useAtomValue } from 'jotai';\nimport {\n $CurrentArticleFold,\n $CurrentArticleHeightComputed,\n} from '~/routes/$user_link_name_.$article_id/shared/atoms/current-article-fold';\nimport { useScopedAtom } from '@lemon8/web-app-shared/ssr';\n\nimport './style.scss';\n\nexport const PartialArticleContent: FC = () => {\n const [folded, setFolded] = useScopedAtom($CurrentArticleFold);\n const [computed, setComputed] = useScopedAtom($CurrentArticleHeightComputed);\n const partialArticleRef = useRef(null);\n\n const article = useAtomValue($CurrentArticleAsAvailable);\n\n const { groupId, shortContent = '' } = article;\n\n const currentArticleTranslated = useAtomValue($CurrentArticleTranslated);\n\n const formattedShortContent = useMemo(() => {\n return shortContent.replace(/&(lt|gt|nbsp|amp|quot);/gi, '').replace(/\\s+/g, ' ');\n }, [shortContent, currentArticleTranslated]);\n\n useEffect(() => {\n if (partialArticleRef.current) {\n const { lineHeight: lineHeightInStr } = window.getComputedStyle(partialArticleRef.current);\n const { scrollHeight } = partialArticleRef.current;\n const lineHeight = parseFloat(lineHeightInStr);\n const lineCount = Math.round(scrollHeight / lineHeight);\n if (lineCount <= 3) {\n setFolded(false);\n }\n setComputed(true);\n }\n }, [groupId]);\n\n return (\n \n {formattedShortContent}\n \n );\n};\n","import { FC, useCallback, useMemo } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\nimport { Link } from '@remix-run/react';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { ClickPosition } from '~/utils/click-position';\nimport { useTranslation } from 'react-i18next';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { $CurrentArticleTranslated } from '@article/shared/atoms/current-article-translated';\nimport { kepQueryFormat } from 'shared/utils/format/kep-formatter';\n\nimport './style.scss';\n\nexport const ArticleSarSection: FC = () => {\n const { t } = useTranslation();\n const { relatedQuery = '', articleRegion } = useAtomValue($CurrentArticleAsAvailable);\n const articleTranslated = useAtomValue($CurrentArticleTranslated);\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const kepUrl = useMemo(() => `/discover/${kepQueryFormat(relatedQuery)}?region=${articleRegion}`, [relatedQuery]);\n\n const sarObservedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n click_position: ClickPosition.main_sar,\n });\n }, []),\n });\n\n const handleSarClick = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_sar);\n },\n clickEvent: () => ({\n current_position: ClickPosition.main_sar,\n page_click_id: kepQueryFormat(relatedQuery) || '',\n }),\n },\n [activeToCurrentArticle],\n );\n\n if (!relatedQuery || articleTranslated) {\n return null;\n }\n\n return (\n
\n \n
\n
\n
{t('search_sar_query')} ·
\n
{relatedQuery}
\n
\n
\n \n
\n );\n};\n","import { FC, useCallback } from 'react';\nimport { ArticleContent } from '@article/body/main/article-content';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\nimport { useTranslation } from 'react-i18next';\nimport { useTimeAgoFormatter } from '~/utils/format';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { Link } from '@remix-run/react';\nimport { ClickPosition } from '~/utils/click-position';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { $CurrentArticleTranslated } from '@article/shared/atoms/current-article-translated';\nimport { LegacyHashtagItem } from '@article/shared/components/legacy-hashtag-item';\nimport ChevronDownFill from 'icon/chevron_down_fill.svg';\nimport { $CurrentArticleFold, $CurrentArticleHeightComputed } from '@article/shared/atoms/current-article-fold';\nimport cls from 'classnames';\nimport { PartialArticleContent } from '../partial-article-content/index';\nimport { $SimpleCTAModalShow } from '~/models/portal/simple-cta-modal';\nimport { useScopedAtomValue } from '@lemon8/web-app-shared/ssr';\nimport { ArticleContentSkeleton } from '~/skeleton/article/component';\nimport { ArticleSarSection } from '../article-sar/index';\nimport { $IsMobileUser } from '~/utils/is-mobile-user';\n\nimport './style.scss';\nimport './poi.scss';\n\nconst ArticleEditTime: FC = () => {\n const { t } = useTranslation();\n const formatTimeAgo = useTimeAgoFormatter();\n const { publishTime, modifyTime } = useAtomValue($CurrentArticleAsAvailable);\n\n const timeAgo = formatTimeAgo(modifyTime || publishTime);\n // add description for re-edit;\n const des = (Boolean(modifyTime) && t('article_bottom_time')) || '';\n // add space for slash-formatted-time and re-edited article\n const sep = timeAgo.includes('/') && des ? ' ' : '';\n\n return (\n
\n
{`${timeAgo}${sep}${des}`}
\n
\n );\n};\n\nconst ArticlePOI: FC = () => {\n const { locationInfo, articleRegion } = useAtomValue($CurrentArticleAsAvailable);\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const poiObservedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_position: ClickPosition.main_poi,\n });\n }, []),\n });\n\n const handlePoiClick = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_poi);\n },\n clickEvent: () => ({\n current_position: ClickPosition.main_poi,\n page_click_id: locationInfo?.poiId || '',\n }),\n },\n [activeToCurrentArticle],\n );\n\n if (!locationInfo) {\n return null;\n }\n\n const { poiId, poiName } = locationInfo;\n\n return (\n \n
\n
{poiName}
\n \n );\n};\n\nconst LegacyForumList: FC = () => {\n const { forumList } = useAtomValue($CurrentArticleAsAvailable);\n\n if (!forumList || !forumList.length) {\n return null;\n }\n\n return (\n
\n {forumList.map((f) => (\n \n ))}\n
\n );\n};\n\nconst ArticleReadMoreBanner: FC = () => {\n const activeToCurrentArticle = useActiveToCurrentArticle();\n const setSimpleCTAModel = useSetAtom($SimpleCTAModalShow);\n const { t } = useTranslation();\n const computed = useScopedAtomValue($CurrentArticleHeightComputed);\n const folded = useScopedAtomValue($CurrentArticleFold);\n\n const readMoreBtnRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_position: ClickPosition.main_content_read_more,\n });\n }, []),\n });\n\n const handleClickModalConfirm = useReflowClick(\n {\n reflowBehavior: () => activeToCurrentArticle(ClickPosition.main_content_read_more_modal),\n defaultBehavior: () => activeToCurrentArticle(ClickPosition.main_content_read_more_modal),\n },\n [activeToCurrentArticle],\n );\n const handleReadMoreClick = useCallback(() => {\n window.Tea('wap_click', {\n current_position: ClickPosition.main_content_read_more,\n });\n setSimpleCTAModel({\n currentPosition: ClickPosition.main_content_read_more_modal,\n body: t('seo_nextPic_modal_desc'),\n handleClickConfirm: handleClickModalConfirm,\n });\n }, [handleClickModalConfirm]);\n\n return (\n \n
\n
{t('read_more')}
\n
\n \n
\n
\n
\n );\n};\n\nconst PartialArticleLoading: FC = () => {\n const computed = useScopedAtomValue($CurrentArticleHeightComputed);\n const folded = useScopedAtomValue($CurrentArticleFold);\n return (\n \n \n \n );\n};\n\nexport const WapArticleSection: FC = () => {\n const { title } = useAtomValue($CurrentArticleAsAvailable);\n const translated = useAtomValue($CurrentArticleTranslated);\n const isMobileUser = useAtomValue($IsMobileUser);\n const folded = useScopedAtomValue($CurrentArticleFold);\n\n return (\n
\n {title &&

{title}

}\n {isMobileUser ? (\n <>\n
\n \n \n \n
\n \n \n \n \n ) : (\n <>\n \n {!translated && }\n {!translated && }\n \n )}\n \n \n
\n );\n};\n","import { Button, ButtonSize } from '@lemon8/design';\nimport { Link } from '@remix-run/react';\nimport { FC, useCallback, useMemo } from 'react';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\nimport { useSemanticUrlBuilder } from '~/utils/use-semantic-url-builder';\nimport { useTranslation } from 'react-i18next';\nimport { UserAuthIcon } from '~/components/user-auth-icon';\nimport { Avatar } from '~/components/avatar';\nimport { ModuleType } from '~/utils/module-type';\nimport { ClickPosition } from '~/utils/click-position';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\n\nimport './style.scss';\n\nexport const GalleryAuthorSection: FC = () => {\n const buildSemanticUrl = useSemanticUrlBuilder();\n const { t } = useTranslation();\n const article = useAtomValue($CurrentArticleAsAvailable);\n const { author } = article;\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const mainAuthorRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.main_content,\n current_position: ClickPosition.main_author,\n });\n }, []),\n });\n\n const followBtnObservedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.main_content,\n current_position: ClickPosition.main_author_follow_btn,\n });\n }, []),\n });\n\n const authorHref = useMemo(() => {\n const { linkName } = author;\n return buildSemanticUrl(`/${linkName}`, article.articleRegion);\n }, [author]);\n\n const handleAuthorInfoClick = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_author);\n },\n clickEvent: () => ({\n current_position: ClickPosition.main_author,\n page_click_id: author.userId,\n }),\n },\n [activeToCurrentArticle, author],\n );\n\n const handleFollowClick = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_author_follow_btn);\n },\n defaultBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_author_follow_btn);\n },\n clickEvent: () => ({\n current_position: ClickPosition.main_author_follow_btn,\n page_click_id: author.userId,\n }),\n },\n [activeToCurrentArticle, author],\n );\n\n return (\n
\n
\n \n \n \n \n {author.nickName}\n \n \n
\n
\n
\n
\n );\n};\n","import { atom } from 'jotai';\nimport { IVideoArticleDetail } from 'shared/models';\n\nexport const $CurrentVideoArticle = atom({} as IVideoArticleDetail);\n","import { atom } from 'jotai';\n\nexport const $EndRecommendShow = atom(false);\n","import { atom } from 'jotai';\n\ntype ReplayVideo = {\n handler: () => void;\n};\n\nexport const $ReplayVideo = atom({\n handler: () => void 0,\n});\n","import { useScopedAtomValue, useSetScopedAtom } from '@lemon8/web-app-shared/ssr';\nimport { FC, SyntheticEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport SimpleVideo, { SimpleVideoForwardProps, VideoStatus } from '~/components/simple-video/index';\nimport { $CurrentVideoArticle, $EndRecommendShow, $ReplayVideo } from '@article/body/main/article-video/atoms';\nimport PlayFill from 'icon/play_fill.svg';\nimport SpeakerMutedFillIcon from 'icon/speaker_x_mark_fill.svg';\nimport SpeakerWaveFillIcon from 'icon/speaker_wave_2_fill.svg';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { $SimpleCTAModalShow } from '~/models/portal/simple-cta-modal';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { ClickPosition } from '~/utils/click-position';\nimport { useTranslation } from 'react-i18next';\nimport { $IsMobileUser } from '~/utils/is-mobile-user';\nimport { $UserAgent } from '@lemon8/web-app-shared/atom';\nimport { setLocalStorageStatus } from 'shared/utils/local-storage-util';\n\nimport './style.scss';\n\nexport const VideoPlayer: FC = () => {\n const { t } = useTranslation();\n const isMobileUser = useAtomValue($IsMobileUser);\n const player = useRef(null);\n const { video, largeImage } = useScopedAtomValue($CurrentVideoArticle);\n const setEndRecommendShow = useSetScopedAtom($EndRecommendShow);\n const isFirstPlay = useRef(true);\n const setSimpleCTAModal = useSetAtom($SimpleCTAModalShow);\n const [showPlay, setShowPlay] = useState(false);\n const [localStorageKey, setLocalStorageKey] = useState('');\n const [muted, setMuted] = useState(true);\n const { isBot } = useAtomValue($UserAgent);\n const keyPrefix = 'seo_video_first_visit';\n const videoClicked = useRef(false);\n const activeToCurrentArticle = useActiveToCurrentArticle();\n const setVideoReplayHandler = useSetScopedAtom($ReplayVideo);\n\n useEffect(() => {\n const onVisibilitychange = () => {\n if (document.visibilityState === 'hidden') {\n window.Tea('wap_click', {\n current_position: ClickPosition.main_video_pause_auto,\n });\n player.current?.pause();\n setShowPlay(true);\n } else {\n if (player.current?.status === VideoStatus.PLAYING && showPlay) {\n setShowPlay(false);\n }\n }\n };\n\n document.addEventListener('visibilitychange', onVisibilitychange);\n\n return () => {\n document.removeEventListener('visibilitychange', onVisibilitychange);\n };\n }, []);\n\n useEffect(() => {\n if (!player.current) {\n return;\n }\n\n const handlePlayEvent = () => {\n if (isFirstPlay.current) {\n console.log(isFirstPlay.current, 'isFirstPlay');\n window.Tea('wap_video_play');\n }\n isFirstPlay.current = false;\n setShowPlay(false);\n setEndRecommendShow(false);\n };\n\n const handlePlayingEvent = () => {\n setShowPlay(false);\n setEndRecommendShow(false);\n };\n\n const handlePauseEvent = () => {\n setShowPlay(true);\n };\n\n const handleEndEvent = () => {\n setEndRecommendShow(true);\n };\n\n const playerInst = player.current;\n\n playerInst.addEventListener('play', handlePlayEvent);\n playerInst.addEventListener('playing', handlePlayingEvent);\n playerInst.addEventListener('pause', handlePauseEvent);\n playerInst.addEventListener('ended', handleEndEvent);\n\n return () => {\n playerInst.removeEventListener('play', handlePlayEvent);\n playerInst.removeEventListener('playing', handlePlayingEvent);\n playerInst.removeEventListener('pause', handlePauseEvent);\n playerInst.removeEventListener('ended', handleEndEvent);\n };\n }, []);\n\n useEffect(() => {\n const dateToday = ((): string => {\n const today = new Date();\n const date = `${today.getFullYear()}-${today.getMonth() + 1}-${today.getDate()}`;\n return date;\n })();\n const key = `${keyPrefix}_${dateToday}`;\n // first visit or clicks open last time, use manual play mode\n const lastVideoVisitState = window.localStorage.getItem(key) || '0';\n // '0' means first landing, '1' means user clicks cancel, '2' means click open last time\n const useManualPlay = isMobileUser && (lastVideoVisitState === '0' || lastVideoVisitState === '2');\n if (useManualPlay) {\n setShowPlay(useManualPlay);\n } else {\n player.current?.play();\n }\n setLocalStorageKey(key);\n }, []);\n\n const handleVideoClick = useCallback(() => {\n window.Tea('wap_click', {\n current_position: ClickPosition.main_video_pause_manual,\n });\n player.current?.pause();\n\n if (!videoClicked.current && isMobileUser) {\n setSimpleCTAModal({\n body: t('seo_stopVideo_modal_desc'),\n currentPosition: ClickPosition.main_video_pause_manual_modal,\n handleClickConfirm: () => {\n activeToCurrentArticle(ClickPosition.main_video_pause_manual_modal);\n },\n });\n\n videoClicked.current = true;\n }\n }, []);\n\n const handlePlayClick = useCallback(\n (event: SyntheticEvent) => {\n event.stopPropagation();\n window.Tea('wap_click', {\n current_position: ClickPosition.main_video_play,\n });\n\n const lastVideoVisitState = window.localStorage.getItem(localStorageKey) || '0';\n const useManualPlay = isMobileUser && (lastVideoVisitState === '0' || lastVideoVisitState === '2');\n\n if (useManualPlay) {\n setSimpleCTAModal({\n body: t('seo_stopVideo_modal_desc'),\n currentPosition: ClickPosition.main_video_play_modal,\n handleClickConfirm: () => {\n setLocalStorageStatus(keyPrefix, localStorageKey, '2');\n activeToCurrentArticle(ClickPosition.main_video_play_modal);\n },\n handleClickCancel() {\n setLocalStorageStatus(keyPrefix, localStorageKey, '1');\n player.current?.play();\n },\n });\n } else {\n player.current?.play();\n }\n },\n [localStorageKey, activeToCurrentArticle],\n );\n\n const handleVolumeClicked = useCallback(() => {\n if (player.current) {\n if (player.current.muted) {\n player.current.unmute();\n setMuted(false);\n } else {\n player.current.mute();\n setMuted(true);\n }\n }\n }, []);\n\n const videoReplayHandler = useCallback(() => {\n if (player.current) {\n player.current.seek(0);\n player.current.play();\n }\n }, [player]);\n\n useEffect(() => {\n setVideoReplayHandler({ handler: videoReplayHandler });\n }, [setVideoReplayHandler, videoReplayHandler]);\n\n return (\n <>\n \n\n {showPlay && (\n
\n \n
\n )}\n\n
\n {muted ? : }\n
\n \n );\n};\n","import { FC, PropsWithChildren } from 'react';\n\nimport './style.scss';\n\nexport const VideoWrapper: FC = (props) => {\n const { children } = props;\n\n return
{children}
;\n};\n","import { useScopedAtomValue } from '@lemon8/web-app-shared/ssr';\nimport { FC, useCallback } from 'react';\nimport { $CurrentVideoArticle } from '@article/body/main/article-video/atoms';\nimport { LegacyHashtagItem } from '@article/shared/components/legacy-hashtag-item';\nimport { useAtomValue } from 'jotai';\nimport { useTranslation } from 'react-i18next';\nimport { useTimeAgoFormatter } from '~/utils/format';\nimport { $CurrentArticleTranslated } from '@article/shared/atoms/current-article-translated';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { ClickPosition } from '~/utils/click-position';\nimport { Link } from '@remix-run/react';\nimport { useViewTracking } from '~/utils/use-view-tracking';\n\nimport './style.scss';\n\ninterface IVideoContentFooterProps {\n folded: boolean;\n}\n\nexport const VideoContentFooter: FC = (props) => {\n const { t } = useTranslation();\n const articleTranslated = useAtomValue($CurrentArticleTranslated);\n const { folded } = props;\n const formatTimeAgo = useTimeAgoFormatter();\n const { forumList, locationInfo, modifyTime, publishTime, articleRegion } = useScopedAtomValue($CurrentVideoArticle);\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const timeAgo = formatTimeAgo(modifyTime || publishTime);\n // add description for re-edit;\n const des = (Boolean(modifyTime) && t('article_bottom_time')) || '';\n // add space for slash-formatted-time and re-edited article\n const sep = timeAgo.includes('/') && des ? ' ' : '';\n const formattedTime = `${timeAgo}${sep}${des}`;\n\n const poiObservedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_position: ClickPosition.main_poi,\n });\n }, []),\n });\n\n const handlePoiClick = useReflowClick(\n {\n clickEvent: () => ({\n current_position: ClickPosition.main_poi,\n page_click_id: locationInfo?.poiId || '',\n }),\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_poi);\n },\n },\n [activeToCurrentArticle],\n );\n\n return (\n
\n {forumList && forumList.length > 0 && !articleTranslated && (\n
\n {forumList.map((forum) => (\n \n ))}\n
\n )}\n {locationInfo && !folded && !articleTranslated && (\n \n
\n
{locationInfo.poiName}
\n \n )}\n {!folded && (\n
\n
{formattedTime}
\n
{t('profile_fold')}
\n
\n )}\n
\n );\n};\n","import { useScopedAtomValue } from '@lemon8/web-app-shared/ssr';\nimport { $CurrentVideoArticle } from '@article/body/main/article-video/atoms';\nimport { FC, useCallback } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { Link } from '@remix-run/react';\nimport { Avatar } from '~/components/avatar/index';\nimport { useSemanticUrlBuilder } from '~/utils/use-semantic-url-builder';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { ClickPosition } from '~/utils/click-position';\nimport { UserAuthIcon } from '~/components/user-auth-icon';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { ModuleType } from '~/utils/module-type';\nimport { Button, ButtonSize } from '@lemon8/design';\nimport { useTranslation } from 'react-i18next';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\n\nimport './style.scss';\n\nexport const VideoAuthor: FC = () => {\n const { author } = useScopedAtomValue($CurrentVideoArticle);\n const { t } = useTranslation();\n\n const article = useAtomValue($CurrentArticleAsAvailable);\n\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const buildSemanticUrl = useSemanticUrlBuilder();\n\n const userHref = buildSemanticUrl(`/${author.linkName}`, article.articleRegion);\n\n const videoAuthorObservedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.main_content,\n current_position: ClickPosition.main_author,\n });\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.main_content,\n current_position: ClickPosition.main_author_follow_btn,\n });\n }, []),\n });\n\n const handleAuthorInfoClick = useReflowClick(\n {\n clickEvent: () => ({\n current_position: ClickPosition.main_author,\n page_click_id: author.userId,\n }),\n reflowBehavior: () => activeToCurrentArticle(ClickPosition.main_author, author.userId),\n },\n [],\n );\n\n const handleButtonClick = useReflowClick(\n {\n clickEvent: () => ({\n current_position: ClickPosition.main_author_follow_btn,\n page_click_id: author.userId,\n }),\n reflowBehavior: () => activeToCurrentArticle(ClickPosition.main_author_follow_btn, author.userId),\n defaultBehavior: () => activeToCurrentArticle(ClickPosition.main_author_follow_btn, author.userId),\n },\n [],\n );\n\n return (\n
\n \n \n \n
\n \n {author.nickName || '-'}\n \n \n
\n
\n );\n};\n","import { FC, SyntheticEvent, useEffect, useMemo, useRef, useState } from 'react';\nimport { ArticleContent } from '@article/body/main/article-content';\nimport cls from 'classnames';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { $CurrentVideoArticle } from '@article/body/main/article-video/atoms';\nimport { ClickPosition } from '~/utils/click-position';\nimport { useTranslation } from 'react-i18next';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\nimport { useScopedAtomValue } from '@lemon8/web-app-shared/ssr';\nimport { $SimpleCTAModalShow } from '~/models/portal/simple-cta-modal';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { VideoContentFooter } from './video-content-footer/index';\nimport { VideoAuthor } from '@article/body/main/article-video/components/video-content/video-author';\nimport { $IsMobileUser } from '~/utils/is-mobile-user';\n\nimport './style.scss';\n\nexport const LONG_READ_MORE_COUNTRY = ['id'];\n\nexport const VideoContent: FC = () => {\n const article = useScopedAtomValue($CurrentVideoArticle);\n const { region } = useAtomValue($Locale);\n const { t } = useTranslation();\n const [folded, setFolded] = useState(true);\n const [maskHeight, setMaskHeight] = useState('0');\n const [articleFirstHeight, setArticleFirstHeight] = useState(0);\n const contentRef = useRef(null);\n const contentExpended = useRef(false);\n const setSimpleCTAModal = useSetAtom($SimpleCTAModalShow);\n const activeToCurrentArticle = useActiveToCurrentArticle();\n const isMobileUser = useAtomValue($IsMobileUser);\n\n // 判断是否是长read_more翻译国家\n const isLongReadMore = LONG_READ_MORE_COUNTRY.includes(region);\n\n const articleTitle = useMemo(() => {\n return article.title;\n }, [article, region]);\n\n useEffect(() => {\n if (!folded) {\n // 显示蒙板\n setMaskHeight('calc(100% + 1px)');\n }\n requestAnimationFrame(() => {\n if (contentRef.current) {\n contentRef.current.style.overflow = folded ? 'hidden' : 'scroll';\n if (folded) {\n setMaskHeight('0');\n }\n }\n });\n }, [folded]);\n\n useEffect(() => {\n if (contentRef.current) {\n contentRef.current.style.overflow = 'hidden';\n }\n const $article = contentRef.current?.querySelector('article');\n if ($article) {\n const _el = $article as HTMLDivElement;\n // 获取文字高度\n const $title = document.querySelector('h1.title');\n const p = _el.querySelector('p');\n\n if ($title) {\n // 文本行数\n const {\n lineHeight: titleLineHeight,\n fontSize: titleFontSize,\n height: titleHeightStr,\n } = window.getComputedStyle($title);\n\n // 获取行高\n const lineHeight =\n titleLineHeight === 'normal' ? parseFloat(titleFontSize) * 1.14 : parseFloat(titleLineHeight);\n\n // 获取元素高度\n const titleHeight = parseFloat(titleHeightStr);\n\n // 计算行数\n const lines = Math.ceil(titleHeight / lineHeight);\n\n if (lines >= 2) {\n setArticleFirstHeight(0);\n return;\n }\n }\n\n if (p) {\n const { lineHeight } = window.getComputedStyle(p);\n const _fontSize = parseFloat(lineHeight.replace('px', ''));\n\n if (!Number.isNaN(_fontSize)) {\n setArticleFirstHeight(Math.max(_fontSize, 0));\n }\n }\n }\n }, [contentRef, folded]);\n\n useEffect(() => {\n const $content = contentRef.current;\n if (!$content) {\n return;\n }\n const callback = () => {\n setFolded(true);\n };\n\n $content.addEventListener('click', callback);\n\n return () => {\n $content.removeEventListener('click', callback);\n };\n }, [contentRef, setFolded]);\n\n const contentStyle = folded\n ? {\n height: `${articleFirstHeight}px`,\n }\n : {};\n\n return (\n
\n {\n setFolded(true);\n if (contentRef.current) {\n contentRef.current.scrollTo(0, 0);\n }\n }}\n />\n
\n {\n if (!folded) {\n setFolded(true);\n if (contentRef.current) {\n contentRef.current.scrollTo(0, 0);\n }\n }\n }}\n >\n {folded && (\n {\n e.stopPropagation();\n setFolded(false);\n\n window.Tea('wap_click', {\n current_position: ClickPosition.main_video_see_more,\n });\n\n if (!contentExpended.current && isMobileUser) {\n setSimpleCTAModal({\n body: t('seo_stopVideo_modal_desc'),\n currentPosition: ClickPosition.main_video_see_more_modal,\n handleClickConfirm: () => activeToCurrentArticle(ClickPosition.main_video_see_more_modal),\n });\n contentExpended.current = true;\n }\n }}\n >\n {t('read_more')}\n
\n )}\n
\n \n

{articleTitle}

\n
\n
\n \n \n
\n
\n
\n );\n};\n","import { FC } from 'react';\nimport { WarningLabel } from '~/components/warning-label';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\n\nexport const WarningLabelSection: FC = () => {\n const { illegalInfo } = useAtomValue($CurrentArticleAsAvailable);\n\n return ;\n};\n","import { atom } from 'jotai';\nimport { $ArticleRelatedPost } from 'shared/atoms';\nimport { $CurrentArticleId } from '@article/shared/atoms/current-article-id';\n\nexport const $CurrentArticleRelatedPost = atom((get) => {\n const currentArticleId = get($CurrentArticleId);\n return get($ArticleRelatedPost(currentArticleId));\n});\n","import { useScopedAtomValue } from '@lemon8/web-app-shared/ssr';\nimport { FC } from 'react';\nimport { VideoEndRecommend } from '~/components/video-end-recommend';\nimport { $CurrentVideoArticle, $EndRecommendShow, $ReplayVideo } from '@article/body/main/article-video/atoms';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleRelatedPost } from '@article/shared/atoms/current-article-related-post';\nimport { loadable } from 'jotai/utils';\n\nexport const VideoEndRecommendSection: FC = () => {\n const article = useScopedAtomValue($CurrentVideoArticle);\n const show = useScopedAtomValue($EndRecommendShow);\n const relatedPost = useAtomValue(loadable($CurrentArticleRelatedPost));\n const { handler } = useScopedAtomValue($ReplayVideo);\n\n return (\n handler()}\n />\n );\n};\n","import { FC, useEffect } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { IVideoArticleDetail } from 'shared/models';\nimport { ScopedProvider } from '@lemon8/web-app-shared/ssr';\nimport { $CurrentVideoArticle, $EndRecommendShow, $ReplayVideo } from './atoms';\nimport { VideoPlayer } from './components/video-player';\nimport { VideoWrapper } from './components/video-wrapper';\nimport { VideoContent } from './components/video-content';\nimport { WarningLabelSection } from '@article/shared/components/warning-label-section';\nimport { VideoEndRecommendSection } from '@article/body/main/article-video/components/end-recommend';\nimport { $UserAgent } from '@lemon8/web-app-shared/atom';\nimport { sendNotification } from '~/utils/pwa/notification';\nimport { ClickPosition } from '~/utils/click-position';\nimport { generateOneLink } from '~/utils/active';\n\nconst ArticleVideoSectionImpl: FC = () => {\n return (\n
\n \n \n \n \n \n \n
\n );\n};\n\nexport const ArticleVideoSection: FC = () => {\n const article = useAtomValue($CurrentArticle) as IVideoArticleDetail;\n const { title, shortContent, largeImage, groupId } = article;\n const { isBot } = useAtomValue($UserAgent);\n\n useEffect(() => {\n /** 含有is_notification'说明本次发送过了 */\n if (!sessionStorage.getItem('is_notification') && !isBot) {\n const imgUrl = largeImage && largeImage.url;\n const oneLink = generateOneLink({\n pid: 'website_seo_notification',\n schemaOption: { pageType: 'video', groupId },\n ampExtra: {\n enter_position: ClickPosition.pwa_notification_banner,\n enter_page_id: groupId,\n enter_page_type: 'video',\n },\n });\n\n sendNotification(title, {\n body: shortContent,\n icon: 'https://p16-va.lemon8cdn.com/tos-maliva-p-0000/5d8e5f313d1b470799f8450327ec6dee~tplv-tej9nj120t-scaling:120:0:q75.jpeg',\n requireInteraction: true,\n image: imgUrl,\n data: {\n time: new Date(Date.now()).toString(),\n url: oneLink,\n },\n });\n }\n }, []);\n\n return (\n \n \n \n );\n};\n","import { FC } from 'react';\nimport { Image } from '~/components/image';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { IRichArticleDetail } from 'shared/models';\nimport { useTranslation } from 'react-i18next';\n\nimport './style.scss';\n\nexport const LargeImageSection: FC = () => {\n const { t } = useTranslation();\n const { largeImage, title } = useAtomValue($CurrentArticle) as IRichArticleDetail;\n const { width, height, url } = largeImage;\n\n const alt = t('own_picture').replace('%s', title);\n\n return (\n
\n
\n {alt}\n
\n
\n );\n};\n","import { FC, useCallback, useMemo } from 'react';\nimport { ClickPosition } from '~/utils/click-position';\nimport { useTranslation } from 'react-i18next';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\nimport { Link } from '@remix-run/react';\nimport { $CurrentArticleTranslated } from '@article/shared/atoms/current-article-translated';\nimport { $UserAgent } from '@lemon8/web-app-shared/atom';\n\nimport './style.scss';\n\nexport const OriginalPostBanner: FC = () => {\n const { t } = useTranslation();\n const currentArticleTranslated = useAtomValue($CurrentArticleTranslated);\n const { isBot } = useAtomValue($UserAgent);\n\n const {\n groupId,\n articleRegion,\n author: { linkName },\n } = useAtomValue($CurrentArticleAsAvailable);\n\n const originArticleHref = useMemo(() => `/${linkName}/${groupId}?region=${articleRegion}`, []);\n\n const handleBannerClick = useCallback(() => {\n window.Tea('wap_click', {\n current_position: ClickPosition.original_post_banner,\n is_cta: 1,\n });\n }, []);\n\n if (!currentArticleTranslated || isBot) {\n return null;\n }\n\n return (\n
\n

\n {t('seo_banner_desc_autoTranslated_eng')}\n \n {t('seo_banner_btn_view_originalPost')}\n \n

\n
\n );\n};\n","import { FC } from 'react';\nimport { useAtomValue, useStore } from 'jotai';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { ArticleInfoSection } from '@article/shared/components/article-info-bar';\nimport { ArticleDetailUtil, EArticleClass, EArticleUnavailableReason, IGalleryArticleDetail } from 'shared/models';\nimport { WapArticleSection } from '@article/body/main/wap-article';\nimport { GalleryAuthorSection } from './gallery-author-section';\nimport { ArticleGallery } from '~/components/article-gallery';\nimport { ArticleVideoSection } from '@article/body/main/article-video';\nimport { LargeImageSection } from '@article/body/main/large-image';\nimport { OriginalPostBanner } from './original-post-banner/index';\nimport { ENotFoundType, NotFound } from '~/components/not-found';\nimport { $CurrentArticleRelatedPost } from '@article/shared/atoms/current-article-related-post';\nimport { ScopedProvider } from '@lemon8/web-app-shared/ssr';\nimport { $CurrentArticleFold, $CurrentArticleHeightComputed } from '../../shared/atoms/current-article-fold';\nimport { $CurrentGalleryArticle } from '~/components/article-gallery/atoms';\n\nexport const ArticleMainSections: FC = () => {\n const store = useStore();\n const currentArticle = useAtomValue($CurrentArticle);\n const isAvailable = ArticleDetailUtil.isArticleAvailable(currentArticle);\n const articleRelatedPost = store.get($CurrentArticleRelatedPost);\n\n if (!isAvailable) {\n const { unavailableReason } = currentArticle;\n return (\n \n );\n }\n\n const { articleClass } = currentArticle;\n\n if (articleClass === EArticleClass.GALLERY) {\n const article = useAtomValue($CurrentArticle) as IGalleryArticleDetail;\n return (\n <>\n \n \n \n \n \n \n \n \n );\n }\n\n if (articleClass === EArticleClass.VIDEO) {\n return (\n <>\n \n \n \n \n );\n }\n\n return (\n <>\n \n \n \n \n \n \n );\n};\n","import { FC, useCallback } from 'react';\nimport { CampaignCarousel } from '~/components/campaign-carousel';\nimport { ClickPosition } from '~/utils/click-position';\nimport { ModuleType } from '~/utils/module-type';\nimport { $CampaignBanner } from 'shared/atoms/common/campaign-banner';\nimport { useAtomValue } from 'jotai';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { ArticleDetailUtil } from 'shared/models';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\n\nimport './style.scss';\n\nexport const ArticleCampaignSection: FC = () => {\n const campaigns = useAtomValue($CampaignBanner);\n const article = useAtomValue($CurrentArticle);\n const articleAvailable = ArticleDetailUtil.isArticleAvailable(article);\n const { region } = useAtomValue($Locale);\n\n const campaignObservedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.activity_banner,\n current_position: ClickPosition.activity_banner,\n });\n }, []),\n });\n\n if (!campaigns.length || (articleAvailable && ArticleDetailUtil.isTranslatedArticleToShow(article, region))) {\n return null;\n }\n\n return (\n
\n \n
\n );\n};\n","import { atom } from 'jotai';\nimport { $ArticleRelatedHashtag } from 'shared/atoms';\nimport { $CurrentArticleId } from '@article/shared/atoms/current-article-id';\n\nexport const $CurrentArticleRelatedHashtag = atom((get) => {\n const currentArticleId = get($CurrentArticleId);\n return get($ArticleRelatedHashtag(currentArticleId));\n});\n","import ChevronDownIcon from '@lemon8/design/lib/icons/icon_assets/chevron_down_fill.svg';\nimport { Loading } from '~/components/loading';\nimport { useTranslation } from 'react-i18next';\nimport cls from 'classnames';\nimport { ClickPosition } from '~/utils/click-position';\nimport { useScopedAtomValue } from '@lemon8/web-app-shared/ssr';\nimport { $CurrentPageModule } from '~/models/current-page-module';\nimport { $CurrentPositionPrefix } from '~/models/current-position-prefix';\n\nimport './style.scss';\nimport { useEffect, useState } from 'react';\n\ninterface SeeMoreProps {\n loading?: boolean;\n onClickSeeMore?: () => void;\n}\n\nexport const SeeMoreBanner = (props: SeeMoreProps): JSX.Element => {\n const { onClickSeeMore, loading = false } = props;\n const { t } = useTranslation();\n const currentPageModule = useScopedAtomValue($CurrentPageModule);\n const prefix = useScopedAtomValue($CurrentPositionPrefix);\n\n const onClick = () => {\n window.Tea('wap_click', {\n current_page_module: currentPageModule,\n current_position: prefix + ClickPosition.see_more_button,\n });\n\n onClickSeeMore?.();\n };\n\n return (\n
\n {loading ? (\n
\n \n
\n ) : (\n <>\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
{t('see_more')}
\n
\n \n )}\n
\n );\n};\n","import { FC, useCallback, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport SectionTitle from '~/components/section-title/index';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleRelatedHashtag } from '@article/shared/atoms/current-article-related-hashtag';\nimport _uniq from 'lodash/uniq';\nimport { $Locale, $UserAgent } from '@lemon8/web-app-shared/atom';\nimport { TopicCard } from '~/components/topic-card';\nimport { SeeMore } from '~/components/see-more';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { ModuleType } from '~/utils/module-type';\nimport { $CurrentPageModule } from '~/models/current-page-module';\nimport { ScopedProvider } from '@lemon8/web-app-shared/ssr';\nimport { ArticleDetailUtil } from 'shared/models';\nimport { $CurrentPositionPrefix } from '~/models/current-position-prefix';\nimport { ClickPositionPrefix } from '~/utils/click-position';\nimport { $CurrentModuleRank } from '~/models/current-module-rank';\nimport { $IsMobileUser } from '~/utils/is-mobile-user';\nimport { SeeMoreBanner } from '~/components/see-more-banner';\n\nimport './style.scss';\n\nconst queryLengthFilter = (region: string) => {\n if (region === 'jp') {\n return (str: string) => str.length <= 30;\n } else if (region === 'th') {\n return (str: string) => str.length <= 100;\n } else {\n return (str: string) => str.length <= 60;\n }\n};\n\nexport const ArticleRelatedTopicSection: FC = () => {\n const { t } = useTranslation();\n\n const { region } = useAtomValue($Locale);\n const { isBot } = useAtomValue($UserAgent);\n const isMobileUser = useAtomValue($IsMobileUser);\n const currentArticle = useAtomValue($CurrentArticle);\n const articleAvailable = ArticleDetailUtil.isArticleAvailable(currentArticle);\n const relatedQueryInfos = articleAvailable ? currentArticle.relatedQueryInfos : [];\n const { items, sugWords, gptExtendWords } = useAtomValue($CurrentArticleRelatedHashtag);\n const [pageIndex, setPageIndex] = useState(0);\n const PAGE_NUMBER = isBot ? Number.MAX_VALUE : 10;\n\n const words = useMemo(() => {\n const { longTailWords, highVolumeWords, relatedSEOWords } = gptExtendWords;\n\n const relatedQueries: string[] = relatedQueryInfos.slice(1).map((info) => info.word);\n\n const topicNameSet = new Set(items.map((item) => item.topicName));\n\n return _uniq([...relatedQueries, ...relatedSEOWords, ...longTailWords, ...highVolumeWords, ...sugWords])\n .filter((str) => !topicNameSet.has(str))\n .filter(queryLengthFilter(region));\n }, [gptExtendWords, relatedQueryInfos, items]);\n\n const topics = useMemo(() => [...items, ...words], [items, words]);\n\n const handleClickSeeMore = useCallback(() => {\n setPageIndex((p) => p + 1);\n }, []);\n\n const topicSectionObservedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_module_show', {\n current_page_module: ModuleType.related_topic,\n });\n }, []),\n });\n\n const renderBottomText = (): JSX.Element | null => {\n if (topics.length > (pageIndex + 1) * PAGE_NUMBER) {\n if (isMobileUser) {\n return (\n
\n \n
\n );\n } else {\n return ;\n }\n } else {\n return null;\n }\n };\n\n if (\n topics.length === 0 ||\n (articleAvailable && ArticleDetailUtil.isTranslatedArticleToShow(currentArticle, region))\n ) {\n return null;\n }\n\n return (\n \n );\n};\n","import React, {\n Children,\n useImperativeHandle,\n ForwardRefRenderFunction,\n PropsWithChildren,\n useCallback,\n useEffect,\n useState,\n useRef,\n forwardRef,\n ForwardedRef,\n} from 'react';\nimport _range from 'lodash/range';\nimport _min from 'lodash/min';\nimport _max from 'lodash/max';\nimport cls from 'classnames';\n\nimport './style.scss';\n\nexport const parseToNumber = (val: string) => {\n return Number(val.replace('px', ''));\n};\n\ninterface MasonryProps extends PropsWithChildren {\n className?: string;\n columnCount: number;\n}\n\nexport interface MasonryRef {\n postLayout: (func: () => void) => void;\n}\n\nfunction useContainerRef() {\n const [ref, setCurrentRef] = useState();\n\n const setRef = useCallback((instance: T) => {\n if (instance) {\n setCurrentRef(instance);\n }\n }, []);\n\n return [ref, setRef] as [T, React.RefCallback];\n}\n\nexport const Masonry = forwardRef((props: MasonryProps, ref: ForwardedRef) => {\n const { children, columnCount, className } = props;\n const childrenArray = Children.toArray(children);\n const [container, setContainer] = useContainerRef();\n const [containerHeight, setContainerHeight] = useState(\n `calc(${Math.floor(childrenArray.length / columnCount + 1)} * var(--masonry-item-default-height))`,\n );\n const postLayoutQueue = useRef<(() => void)[]>([]);\n\n useImperativeHandle(ref, () => {\n return {\n postLayout: (func) => {\n postLayoutQueue.current.push(func);\n },\n };\n });\n\n const [heightList, setHeightList] = useState(_range(childrenArray.length).map(() => 0));\n\n const [orderList, setOrderList] = useState(_range(childrenArray.length).map((o) => (o % columnCount) + 1));\n\n const doLayout = useCallback(() => {\n if (!container) {\n return;\n }\n\n const columnHeights: number[] = new Array(columnCount).fill(0);\n const columnItems: number[] = new Array(columnCount).fill(0);\n const childOrderList = [];\n for (let i = 0; i < container.children.length; i++) {\n const child = container.children.item(i);\n if (!child) {\n return;\n }\n const min = _min(columnHeights);\n const minIndex = columnHeights.findIndex((v) => v === min);\n childOrderList.push(minIndex + 1);\n const style = window.getComputedStyle(child);\n columnHeights[minIndex] += parseToNumber(style.height);\n columnItems[minIndex] += 1;\n }\n\n setHeightList(columnHeights);\n setOrderList(childOrderList);\n\n setContainerHeight(\n `max(${columnHeights\n .map(\n (_, index) =>\n `${columnHeights[index]}px + ${Math.max(\n columnItems[index] - 1,\n 0,\n )} * var(--masonry-items-horizontal-interval) + 2 * var(--masonry-padding-vertical)`,\n )\n .join(',')})`,\n );\n\n if (postLayoutQueue.current.length) {\n postLayoutQueue.current.forEach((func) => func());\n postLayoutQueue.current = [];\n }\n }, [container, columnCount]);\n\n useEffect(() => {\n if (!container) {\n return;\n }\n\n requestAnimationFrame(() => {\n doLayout();\n });\n\n const observer = new ResizeObserver(doLayout);\n observer.observe(container);\n\n for (let i = 0; i < container.children.length; i++) {\n const child = container.children.item(i);\n if (child) {\n observer.observe(child);\n }\n }\n\n return () => {\n observer.disconnect();\n };\n }, [container, doLayout, children]);\n\n const maxHeight = _max(heightList) || 0;\n const maxHeightIndex = heightList.indexOf(maxHeight) - 1;\n const maxHeightCount = orderList.filter((item) => item === maxHeightIndex + 1).length;\n\n return (\n \n {childrenArray.map((child, index) => (\n r === orderList[index]) === index,\n bottom: orderList.lastIndexOf(orderList[index]) === index,\n })}\n style={{\n order: orderList[index] || columnCount + 1,\n marginBottom:\n orderList.lastIndexOf(orderList[index]) === index\n ? `calc(${\n (maxHeight || 0) - heightList[orderList[index] - 1]\n }px + var(--masonry-padding-horizontal) * (${\n orderList.filter((item) => item === index + 1).length - maxHeightCount\n }))`\n : 0,\n }}\n >\n {child}\n
\n ))}\n \n );\n});\n","import { SyntheticEvent, useCallback, useMemo } from 'react';\nimport cls from 'classnames';\nimport PlayFill from 'icon/play_fill.svg';\nimport Heart from 'icon/heart.svg';\nimport _clamp from 'lodash/clamp';\nimport { Article, ArticleClass } from 'shared/models/legacy';\nimport { useNumFormatter } from '~/utils/format';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { buildInnerHtml } from '@lemon8/web-app-shared/util';\nimport { ClickPosition } from '~/utils/click-position';\nimport { ModuleType } from '~/utils/module-type';\nimport { useAtomValue } from 'jotai';\nimport { useScopedAtomValue } from '@lemon8/web-app-shared/ssr';\nimport { $CurrentPositionPrefix } from '~/models/current-position-prefix';\nimport { $CurrentPageModule } from '~/models/current-page-module';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { usePageActive } from '~/utils/active/use-page-active';\nimport { $IsMobileUser } from '~/utils/is-mobile-user';\n\nimport './style.scss';\n\ninterface ArticleRecommendCardProps {\n pageModule: ModuleType;\n clickPosition: ClickPosition;\n article: Article;\n rank: number;\n}\n\nexport default function ArticleRecommendCard(props: ArticleRecommendCardProps): JSX.Element {\n const formatNum = useNumFormatter();\n\n const { article, rank } = props;\n\n const { imageList, articleClass, title, groupId, largeImage, author, articleLikes, imprId } = article;\n\n const isMobileUser = useAtomValue($IsMobileUser);\n\n const prefix = useScopedAtomValue($CurrentPositionPrefix);\n\n const currentPageModule = useScopedAtomValue($CurrentPageModule);\n\n const active = usePageActive();\n\n const cardObservedRef = useViewTracking({\n onView: useCallback(() => {\n if (isMobileUser) {\n window.Tea('wap_cta_show', {\n current_page_module: currentPageModule,\n current_position: prefix + ClickPosition.related_post,\n rank,\n });\n }\n\n window.Tea('wap_related_post_show', {\n current_page_module: currentPageModule,\n current_position: prefix + ClickPosition.related_post,\n group_id: groupId,\n media_id: author.userId,\n article_class: articleClass,\n impr_id: imprId,\n rank,\n });\n }, [isMobileUser]),\n });\n\n const handleClickArticle = useReflowClick(\n {\n clickEvent: (_, bundle) => ({\n ...bundle,\n current_page_module: currentPageModule,\n current_position: prefix + ClickPosition.related_post,\n page_click_id: groupId,\n }),\n reflowBehavior: () => {\n active({\n schemaOption: {\n pageType: articleClass === ArticleClass.VIDEO ? 'video' : 'article',\n groupId,\n authorId: author.userId,\n },\n ampExtra: {\n enter_position: prefix + ClickPosition.related_post,\n },\n });\n },\n },\n [active, groupId, articleClass, author],\n );\n\n const aspectRatio = useMemo(() => {\n switch (articleClass) {\n case ArticleClass.GALLERY:\n return _clamp(imageList[0].width / imageList[0].height, 3 / 4, 4 / 3);\n case ArticleClass.ARTICLE:\n case ArticleClass.VIDEO:\n default:\n return _clamp(largeImage.width / largeImage.height, 3 / 4, 4 / 3);\n }\n }, [article]);\n\n const coverUrl = useMemo(() => {\n switch (article.articleClass) {\n case ArticleClass.GALLERY:\n return article.imageList[0].url;\n case ArticleClass.ARTICLE:\n case ArticleClass.VIDEO:\n default:\n return article.largeImage.url;\n }\n }, [article]);\n\n return (\n
\n \n e.preventDefault()} />\n {article.articleClass === ArticleClass.VIDEO && }\n
\n
\n
\n
\n e.preventDefault()}\n />\n {article.author.nickName}\n
\n \n {Boolean(articleLikes) && {formatNum(articleLikes)}}\n
\n
\n
\n
\n );\n}\n","import { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport SectionTitle from '~/components/section-title/index';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleRelatedPost } from '@article/shared/atoms/current-article-related-post';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { SeeMore } from '~/components/see-more';\nimport { SeeMoreBanner } from '~/components/see-more-banner';\nimport { ArticleCard } from '~/components/article-card';\nimport { $ArticleRelatedPostLoadmore } from 'shared/atoms';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { $CurrentPageModule } from '~/models/current-page-module';\nimport { ModuleType } from '~/utils/module-type';\nimport { ScopedProvider, useRouteLoader } from '@lemon8/web-app-shared/ssr';\nimport { DivisibleStack } from '~/components/divisible-stack';\nimport { $CurrentPositionPrefix } from '~/models/current-position-prefix';\nimport { ClickPosition, ClickPositionPrefix } from '~/utils/click-position';\nimport { Masonry, MasonryRef } from '~/components/masonry';\nimport ArticleRecommendCard from '~/components/article-recommend-card';\nimport { $IsMobileUser } from '~/utils/is-mobile-user';\nimport cls from 'classnames';\n\nimport './style.scss';\n\nexport const ArticleRelatedPostSection: FC = () => {\n const { t } = useTranslation();\n\n const { groupId } = useAtomValue($CurrentArticle);\n\n const isMobileUser = useAtomValue($IsMobileUser);\n\n const relatedPosts = useAtomValue($CurrentArticleRelatedPost);\n\n const [bannerShow, setBannerShow] = useState(true);\n\n const sectionObservedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_module_show', {\n current_page_module: ModuleType.related_article,\n });\n }, []),\n });\n\n const loader = useRouteLoader(\n 'related-post-loadmore',\n {\n search_id: relatedPosts.searchId,\n offset: relatedPosts.cursor,\n },\n {\n atomFamilies: {\n $ArticleRelatedPostLoadmore,\n },\n },\n );\n\n const handleClickSeeMore = (): void => loader.load();\n\n const evenRelatedPosts = useMemo(() => {\n const filteredPosts = relatedPosts.items.filter((item) => item.groupId !== groupId);\n return filteredPosts.length % 2 === 0 ? filteredPosts : filteredPosts.slice(0, -1);\n }, [relatedPosts]);\n\n const masonryRef = useRef(null);\n\n useEffect(() => {\n if (loader.state === 'idle') {\n masonryRef.current?.postLayout(() => {\n // change banner show state after masonry completes layout\n setBannerShow(true);\n });\n } else {\n setBannerShow(false);\n }\n }, [loader.state]);\n\n if (relatedPosts.items.length === 0) {\n return null;\n }\n\n return (\n \n );\n};\n","import { FC, Suspense } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { ArticleCommentsSection } from './comment';\nimport { ArticleMainSections } from './main';\nimport { ArticleCampaignSection } from './campaign';\nimport { ArticleRelatedTopicSection } from './related-topic';\nimport { ArticleRelatedPostSection } from './related-post';\nimport { ArticleBodySkeleton, ArticleRecommendSkeleton } from '~/skeleton/article';\n\nexport const ArticleBody: FC = () => {\n return (\n <>\n \n }>\n \n \n }>\n \n \n \n \n \n );\n};\n","import { atom } from 'jotai';\nimport { $CurrentArticleId } from '@article/shared/atoms/current-article-id';\nimport { $ArticleDetail, $UserDetail } from 'shared/atoms';\nimport { ArticleDetailUtil, IUserDetail, UserDetailUtil } from 'shared/models';\n\nexport const $CurrentArticleAuthor = atom((get) => {\n const currentArticleId = get($CurrentArticleId);\n const article = get($ArticleDetail(currentArticleId));\n if (!ArticleDetailUtil.isArticleAvailable(article)) {\n return null;\n }\n\n const {\n author: { userId },\n } = article;\n\n return get($UserDetail(userId));\n});\n\nexport const $CurrentAvailableArticleAuthorOrNull = atom>(async (get) => {\n const author = await get($CurrentArticleAuthor);\n\n if (!author || !UserDetailUtil.isUserAvailable(author)) {\n return null;\n }\n\n return author;\n});\n","import { Person } from 'schema-dts';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentAvailableArticleOrNull } from '@article/shared/atoms/current-article';\nimport { $CurrentAvailableArticleAuthorOrNull } from '@article/shared/atoms/current-article-author';\nimport { UserDetailUtil } from 'shared/models';\nimport { Region } from '@lemon8/web-app-shared/i18n';\n\nexport const useArticleAuthorJsonld = (): Person | null => {\n const article = useAtomValue($CurrentAvailableArticleOrNull);\n const author = useAtomValue($CurrentAvailableArticleAuthorOrNull);\n\n if (!article || !author) {\n return null;\n }\n\n return UserDetailUtil.JsonLD.getPersonJsonLD({ user: author, userRegion: article.articleRegion as Region });\n};\n","import { VideoObject } from 'schema-dts';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { ArticleDetailUtil, EArticleClass, IVideoArticleDetail } from 'shared/models';\nimport { useArticleAuthorJsonld } from '@article/head/json-ld/use-author-jsonld';\nimport { useTranslation } from 'react-i18next';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\n\nexport const useVideoJsonLD = (): VideoObject | null => {\n const article = useAtomValue($CurrentArticle) as IVideoArticleDetail;\n const { t } = useTranslation();\n const { region } = useAtomValue($Locale);\n const authorJsonLd = useArticleAuthorJsonld();\n const abInfo = {};\n\n if (!ArticleDetailUtil.isArticleAvailable(article) || article.articleClass !== EArticleClass.VIDEO) {\n return null;\n }\n\n const videoObject = ArticleDetailUtil.JsonLD.getVideoObjectJsonLD({ article, region, t, abInfo });\n if (authorJsonLd) {\n videoObject.creator = authorJsonLd;\n }\n\n return videoObject;\n};\n","import { Comment } from 'schema-dts';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleComments } from '@article/shared/atoms/current-article-comments';\nimport { $CurrentAvailableArticleOrNull } from '@article/shared/atoms/current-article';\nimport { CommentUtil } from 'shared/models';\nimport { Region } from '@lemon8/web-app-shared/i18n';\n\nexport const useCommentsJsonLD = (): Comment[] | null => {\n const article = useAtomValue($CurrentAvailableArticleOrNull);\n const { items } = useAtomValue($CurrentArticleComments);\n\n if (!article) {\n return null;\n }\n\n return CommentUtil.JsonLd.getCommentsJsonLd({ comments: items, region: article.articleRegion as Region });\n};\n","import { atom } from 'jotai';\nimport { $CurrentAvailableArticleOrNull } from '@article/shared/atoms/current-article';\nimport { ArticleDetailUtil } from 'shared/models';\nimport { $Locale, $RootTraffic } from '@lemon8/web-app-shared/atom';\nimport { Region } from '@lemon8/web-app-shared/i18n';\n\nexport const $CurrentArticleCanonical = atom((get) => {\n const article = get($CurrentAvailableArticleOrNull);\n const { region } = get($Locale);\n const { enterHref: href } = get($RootTraffic);\n\n if (!article) {\n return null;\n }\n\n const url = new URL(href);\n\n const translatedArticleToShow = ArticleDetailUtil.isTranslatedArticleToShow(article, region);\n\n const canonicalRegion = translatedArticleToShow ? Region.us : article.articleRegion;\n\n return `${url.protocol}//${url.host}/${article.author.linkName}/${article.groupId}?region=${canonicalRegion}`;\n});\n","import { SocialMediaPosting } from 'schema-dts';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentAvailableArticleOrNull } from '@article/shared/atoms/current-article';\nimport { $CurrentArticleCanonical } from '@article/shared/atoms/current-article-canonical';\nimport { useTranslation } from 'react-i18next';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\nimport { ArticleDetailUtil } from 'shared/models';\n\nexport const useArticleBaseJsonLD = (): SocialMediaPosting | null => {\n const { t } = useTranslation();\n const { region } = useAtomValue($Locale);\n const article = useAtomValue($CurrentAvailableArticleOrNull);\n const canonicalUrl = useAtomValue($CurrentArticleCanonical);\n const abInfo = {};\n\n if (!article || !canonicalUrl) {\n return null;\n }\n\n return ArticleDetailUtil.JsonLD.getSocialMediaJsonLD({\n article,\n region,\n t,\n abInfo,\n });\n};\n","/**\n * xml 中特殊字符过滤\n * 参考 https://developers.google.com/search/docs/advanced/sitemaps/build-sitemap#sitemap-encoding-guidelines\n */\nexport const escapeSpecialXmlCharacter = (content: string): string =>\n content\n .replace(/&/g, '&')\n .replace(/'/g, ''')\n .replace(/\"/g, '"')\n .replace(/>/g, '>')\n .replace(/\n content\n .replace(/&/g, '&')\n .replace(/'/g, \"'\")\n .replace(/'/g, \"'\")\n .replace(/"/g, '\"')\n .replace(/>/g, '>')\n .replace(/</g, '<');\n\nexport const removeEscapedSpecialXmlCharacter = (content: string): string =>\n content.replace(/&(lt|gt|nbsp|amp|quot);/gi, '');\n","import { BreadcrumbList, SocialMediaPosting, WithContext } from 'schema-dts';\nimport { useVideoJsonLD } from '@article/head/json-ld/use-video-jsonld';\nimport { useCommentsJsonLD } from '@article/head/json-ld/use-comments-jsonld';\nimport { useArticleAuthorJsonld } from '@article/head/json-ld/use-author-jsonld';\nimport { useArticleBaseJsonLD } from '@article/head/json-ld/use-article-base-jsonld';\nimport { FC, useMemo } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentAvailableArticleOrNull } from '@article/shared/atoms/current-article';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\nimport { ArticleDetailUtil, EArticleClass } from 'shared/models';\nimport { useTranslation } from 'react-i18next';\nimport { removeEscapedSpecialXmlCharacter } from '~/utils/escape-xml';\n\nexport const ArticleJsonLD: FC = () => {\n const articleBaseJsonLD = useArticleBaseJsonLD();\n const authorJsonLD = useArticleAuthorJsonld();\n const videoJsonLD = useVideoJsonLD();\n const commentJsonLD = useCommentsJsonLD();\n const article = useAtomValue($CurrentAvailableArticleOrNull);\n\n if (!articleBaseJsonLD) {\n return null;\n }\n\n const articleJsonLd: WithContext = {\n '@context': 'https://schema.org',\n ...articleBaseJsonLD,\n };\n\n if (authorJsonLD) {\n articleJsonLd.author = authorJsonLD;\n }\n\n if (commentJsonLD && article && !article.isTranslatedVersion) {\n articleJsonLd.comment = commentJsonLD;\n }\n\n if (videoJsonLD) {\n articleJsonLd.video = videoJsonLD;\n }\n\n return