{"version":3,"sources":["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/./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/routes/$user_link_name_.$article_id/body/related-topic/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/./shared/utils/local-storage-util.ts"],"names":["$RelatedPostCarouselShow","atom","RELATED_ARTICLE_CAROUSEL_HIDE_RANK","ArticleCard","props","article","imageList","articleClass","title","groupId","shortContent","largeImage","author","canonicalUri","articleLikes","imprId","isLCP","rank","t","useTranslation","region","useAtomValue","$Locale","formatNum","useNumFormatter","active","usePageActive","isRealUser","useBasicCondition","currentPageModule","useScopedAtomValue","$CurrentPageModule","prefix","$CurrentPositionPrefix","setRelatedPostCarouselShow","useSetAtom","posterImageList","useMemo","temp","length","slice","articleHref","concat","handleClickArticle","useReflowClick","clickEvent","_","bundle","_objectSpread","current_page_module","current_position","ClickPosition","page_click_id","reflowBehavior","schemaOption","pageType","ArticleClass","authorId","userId","ampExtra","enter_position","authorHref","split","handleClickAuthor","defaultBehavior","e","stopPropagation","articleCardRef","useViewTracking","onView","useCallback","window","Tea","group_id","media_id","article_class","impr_id","isVideo","jsxs","Link","ref","className","cls","multi_images","onClick","to","children","map","image","index","jsx","Image","src","url","fetchpriority","PlayIcon","dangerouslySetInnerHTML","buildInnerHtml","DivisibleStack","wrapper","divider","avatar","alt","nickName","Heart","num","replace","pxToRem","px","DEFAULT_WIDTH","DEFAULT_HEIGHT","DEFAULT_MARGIN_LEFT","UserAuthIcon","width","height","marginLeft","light","authInfo","style","showAuthSymbol","$CurrentArticleId","get","traffic","$PageLevelTraffic","EPageType","includes","console","log","Promise","resolve","pendingQueue","$CurrentArticle","currentArticleId","$ArticleDetail","$CurrentAvailableArticleOrNull","ArticleDetailUtil","$CurrentArticleAsAvailable","useSemanticUrlBuilder","enterHref","$RootTraffic","path","originalRegion","URL","startsWith","warn","protocol","host","useActiveToCurrentArticle","position","id","categoryId","enter_page_click_id","EArticleClass","RepliesSeeMore","activeToCurrentArticle","isMobileUser","$IsMobileUser","comment","commentId","replyCount","hasMore","cursor","$ArticleCommentDetail","replyLoader","useRouteLoader","comment_id","offset","atomFamilies","$ArticleCommentDetailLoadmore","seeMoreObservedRef","ModuleType","handleReadMoreClick","load","state","Loading","variant","String","ShowMoreIcon","CommentReplyList","replies","reply","CommentItem","CommentContent","richContent","text","buildSemanticUrl","handleCommentRichContentClick","richContentArray","sortedRichContent","_sortBy","end","richContentCursor","richContentEnd","res","push","substring","currentRich","start","type","ECommentRichContentCategory","rich","mentionUserId","mentionedUerHref","articleRegion","IMAGE_MIN_DESIGN_WIDTH","useCommentImage","aspectRatio","_clamp","Math","max","CommentImage","commentImage","activeToCurrentPage","handleClickImage","CURRENT_PAGE_MODULE","formatTimeAgo","useTimeAgoFormatter","createTime","linkName","isPrimaryComment","CommentUtil","isReply","userCanonicalUrl","isAuthor","articleAuthorId","commentAuthorId","formattedCreatedTime","likeIconRef","commentAuthorObservedRef","handleClickUser","commentReplyRef","handleCommentReplyClick","handleClickLike","Avatar","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","items","currentArticleTranslated","articleAvailable","commentCount","commentPermission","ECommentPermission","ArticleInfoSection","favoriteCount","diggCount","savedRef","handleSavedClick","diggRef","handleDiggClick","commentedRef","handleCommentedClick","Bookmark","EllipsisBubble","ArticleContent","navigate","useNavigate","content","isMobile","isBot","isInApp","$UserAgent","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","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","$SimpleCTAModalShow","readMoreBtnRef","handleClickModalConfirm","currentPosition","body","handleClickConfirm","ChevronDownFill","PartialArticleLoading","ArticleContentSkeleton","WapArticleSection","translated","Fragment","GalleryAuthorSection","mainAuthorRef","followBtnObservedRef","handleAuthorInfoClick","handleFollowClick","Button","size","ButtonSize","$CurrentVideoArticle","$EndRecommendShow","$ReplayVideo","handler","VideoPlayer","player","video","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","setLocalStorageStatus","handleClickCancel","handleVolumeClicked","unmute","mute","videoReplayHandler","seek","SimpleVideo","videoSrc","posterSrc","autoPlay","PlayFill","SpeakerMutedFillIcon","SpeakerWaveFillIcon","VideoWrapper","VideoContentFooter","formattedTime","forum","maxWidth","VideoAuthor","userHref","videoAuthorObservedRef","handleButtonClick","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","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","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","ClickPositionPrefix","$CurrentModuleRank","SectionTitle","TopicCard","topic","topicId","SeeMore","onClickSeeMore","ArticleRelatedPostSection","relatedPosts","sectionObservedRef","search_id","$ArticleRelatedPostLoadmore","loading","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","join","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","deleteOutdatedKeys","len","keyName","removeItem","storageKey","storageValue","setItem"],"mappings":"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","file":"routes/$user_link_name_.$article_id-41dc1588878a56609bff.js","sourcesContent":["import { atom } from 'jotai';\n\nexport const $RelatedPostCarouselShow = atom(false);\n","import { useTranslation } from 'react-i18next';\nimport { Link } from '@remix-run/react';\nimport { useCallback, useMemo } from 'react';\nimport cls from 'classnames';\nimport { Article, ArticleClass } from 'shared/models/legacy';\nimport { Image } from '~/components/image';\nimport Heart from '@lemon8/design/lib/icons/icon_assets/heart.svg';\nimport PlayIcon from '@lemon8/design/lib/icons/icon_assets/play_fill.svg';\nimport { DivisibleStack } from '~/components/divisible-stack';\nimport { useNumFormatter } from '~/utils/format/num-formatter';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\nimport { ClickPosition } from '~/utils/click-position';\nimport { usePageActive } from '~/utils/active/use-page-active';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useBasicCondition } from '~/utils/libra';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { useScopedAtomValue } from '@lemon8/web-app-shared/ssr';\nimport { $CurrentPageModule } from '~/models/current-page-module';\nimport { $RelatedPostCarouselShow } from '@article/shared/atoms/related-post-carousel-show';\nimport { $CurrentPositionPrefix } from '~/models/current-position-prefix';\nimport { buildInnerHtml } from '@lemon8/web-app-shared/util';\n\nimport './style.scss';\n\ninterface ArticleCardProps {\n article: Article;\n isLCP?: boolean;\n\n /**\n * starts from 0\n */\n rank: number;\n}\n\nconst RELATED_ARTICLE_CAROUSEL_HIDE_RANK = 9;\n\nexport const ArticleCard = (props: ArticleCardProps): JSX.Element => {\n const {\n article: {\n imageList,\n articleClass,\n title,\n groupId,\n shortContent,\n largeImage,\n author,\n canonicalUri,\n articleLikes,\n imprId,\n },\n isLCP = false,\n rank,\n } = props;\n const { t } = useTranslation();\n const { region } = useAtomValue($Locale);\n const formatNum = useNumFormatter();\n const active = usePageActive();\n const isRealUser = useBasicCondition();\n const currentPageModule = useScopedAtomValue($CurrentPageModule);\n const prefix = useScopedAtomValue($CurrentPositionPrefix);\n const setRelatedPostCarouselShow = useSetAtom($RelatedPostCarouselShow);\n\n const posterImageList = useMemo(() => {\n const temp = imageList.length ? [...imageList] : [largeImage];\n return temp.slice(0, temp.length < 3 ? 1 : 3);\n }, [largeImage, imageList]);\n\n const articleHref = useMemo(() => `${canonicalUri}?region=${region}`, [region]);\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 rank,\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 authorHref = useMemo(() => `/${canonicalUri.split('/')[1]}?region=${region}`, [region]);\n\n const handleClickAuthor = 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 rank,\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 defaultBehavior: (e) => {\n e?.stopPropagation();\n },\n },\n [active, groupId, articleClass, author],\n );\n\n const articleCardRef = useViewTracking({\n onView: useCallback(() => {\n if (isRealUser) {\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 if (rank >= RELATED_ARTICLE_CAROUSEL_HIDE_RANK) {\n setRelatedPostCarouselShow(false);\n }\n }, [isRealUser]),\n });\n\n const isVideo = articleClass === 'Video';\n\n return (\n 1,\n })}\n onClick={handleClickArticle}\n to={articleHref}\n >\n
\n
\n {posterImageList.map((image, index) => (\n
\n {isLCP ? : }\n
\n ))}\n {isVideo && (\n
\n \n
\n )}\n
\n
\n
\n
\n
\n
\n \n \n \n {author.nickName}\n

{author.nickName}

\n \n
\n
\n \n

{t('like_count_plural', { num: articleLikes }).replace('%d', formatNum(articleLikes))}

\n
\n
\n \n );\n};\n","export const pxToRem = (px: number): string => {\n return `${(px * 16) / 375}rem`;\n};\n","import { CSSProperties, FC, useMemo } from 'react';\nimport cls from 'classnames';\nimport { pxToRem } from '~/utils/px-to-rem';\nimport { IUserAuthInfo } from 'shared/models/user-auth-info';\n\nimport './index.rem.scss';\n\ninterface UserAuthIconProps {\n authInfo: IUserAuthInfo;\n width?: number | string | undefined;\n height?: number | string | undefined;\n marginLeft?: number | string | undefined;\n /** 用户认证icon显示为白色,视频详情页icon颜色为白色 */\n light?: boolean;\n}\n\nconst DEFAULT_WIDTH = pxToRem(20);\nconst DEFAULT_HEIGHT = pxToRem(20);\nconst DEFAULT_MARGIN_LEFT = pxToRem(4);\n\nexport const UserAuthIcon: FC = (props) => {\n const {\n width = DEFAULT_WIDTH,\n height = DEFAULT_HEIGHT,\n marginLeft = DEFAULT_MARGIN_LEFT,\n light = false,\n authInfo,\n } = props;\n\n const style: CSSProperties = useMemo(\n () => ({\n width: typeof width === 'number' ? pxToRem(width) : width,\n height: typeof height === 'number' ? pxToRem(height) : height,\n marginLeft: typeof marginLeft === 'number' ? pxToRem(marginLeft) : marginLeft,\n }),\n [width, height, marginLeft],\n );\n\n if (!authInfo.showAuthSymbol) {\n return null;\n }\n\n return (\n \n );\n};\n","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 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';\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\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 {items.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 { 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';\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 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 if (\n topics.length === 0 ||\n (articleAvailable && ArticleDetailUtil.isTranslatedArticleToShow(currentArticle, region))\n ) {\n return null;\n }\n\n return (\n \n );\n};\n","import { FC, useCallback, 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 { ArticleCard } from '~/components/article-card';\nimport { useRouteLoader } from '~/utils/use-route-loader';\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 } from '@lemon8/web-app-shared/ssr';\nimport { DivisibleStack } from '~/components/divisible-stack';\nimport { $CurrentPositionPrefix } from '~/models/current-position-prefix';\nimport { ClickPositionPrefix } from '~/utils/click-position';\n\nimport './style.scss';\n\nexport const ArticleRelatedPostSection: FC = () => {\n const { t } = useTranslation();\n\n const { groupId } = useAtomValue($CurrentArticle);\n const relatedPosts = useAtomValue($CurrentArticleRelatedPost);\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 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