{"version":3,"sources":["context/Context.js","components/banner/BannerItem.js","components/banner/MainSlider.js","components/article/ArticleItem.js","components/banner/AdBanner.js","fun/AdIdSource.js","pages/Home.js","components/banner/ListBanner.js","pages/List.js","components/article/ArticleTag.js","components/article/ArticleSearch.js","components/article/ArticleSingle.js","pages/Article.js","components/main/Menu.js","components/main/Header.js","components/main/Footer.js","App.js","serviceWorker.js","index.js"],"names":["Context","createContext","pageTrans","pageChange","menuState","menuBtnClick","setMeta","Provider","Consumer","EVENT_PATH","window","location","href","search","process","path","typeName","BannerItem","ID","DataTab","Title","ImgSrc","Abstract","link","style","backgroundImage","className","to","substr","MainSlider","props","bannerState","refSlider","useRef","onGoTo","dir","current","slider","goTo","settings","items","slideBy","gutter","edgePadding","center","loop","lazyload","autoplay","autoplayTimeout","autoplayHoverPause","autoplayButtonOutput","speed","mouseDrag","controls","nav","autoHeight","responsive","801","innerWidth","1201","id","ref","map","item","key","onClick","ArticleItem","SiteNo","LinkUrl","TypeCode","IsAD","listArticleState","replace","target","title","src","frameBorder","allow","allowFullScreen","AdBanner","adState","addClass","console","log","dangerouslySetInnerHTML","__html","AdIdSource","LIST_API","AD_API","Status","Cache","params","adID","secondAdID","adParams","Home","useState","bannerStateChange","itemState","itemStateChange","setAdState","secondAdState","sedondAdStateChange","useContext","useEffect","fetch","method","headers","body","then","result","json","res","arcitleArr","JData","Data","filter","data","a","push","ad","Target","IsMobile","Content","setTimeout","requestAd","RequestAD","index","length","ListBanner","titleState","tagState","tagClickChange","tagKeyword","tag","List","listID","listArticleStateChange","titleStateChange","tagStateChange","tagKeywordChange","listWrap","forEach","tagFilter","Tag","includes","e","tagName","textContent","ArticleTag","tagData","t","ArticleTagID","Name","rel","ArticleSearch","zipData","districts","districtState","districtChange","onSubmit","divisionVal","division","value","countyVal","county","districtVal","district","searchTypeVal","searchType","searchRecommendVal","searchRecommend","searchKeywordVal","searchKeyword","open","preventDefault","defaultValue","name","onChange","val","c","city","dist","zip","htmlFor","type","placeholder","adObj","article","ArticleSingle","fixed","fixedChange","fixedLeft","fixedLeftChange","fixedWidth","fixedWidthChange","fixedTaTop","fixedTaTopChange","changeUrl","loadAd","firstID","lastID","Article","DSImg","DSBox","WebTitle","Writer","WebContent","NewDataTime","TotalClick","addEventListener","onScroll","removeEventListener","adArr","Object","keys","detail","i","DSTagName","box","Topic","iframeArr","match","f","thirdPmatch","content","video","articleWrap","fixedWrap","fixedTa","scrollY","articleWrapRec","articleWrapH","articleWrapBottom","fixedRec","fixedW","fixedTaH","document","documentElement","scrollTop","getBoundingClientRect","clientHeight","top","innerHeight","clientWidth","left","fixedStyle","width","appId","wait","colorScheme","layout","share","rightTop","rightBottom","ARTICLE_SINGLE_API","NEXT_LIST_API","articleState","setArticleState","contextValue","isLoading","pathSplit","useLocation","pathname","split","pathType","pathId","history","useHistory","nextList","nextID","nowID","adFirstLoad","winH","getArticle","getNextList","getAD","historyChange","join","callback","Type","ArticleNo","dataTab","specialTopicID","SpecialTopic","setCount","relatedID","pop","ItemType","ItemNo","bodyHeight","list","nextParams","url","obj","float","Guid","arr","API","Menu","menuChange","listId","listIdChange","menuType","FeatureList","MenuUrl","Header","menuOpen","headerKeyWordVal","headerKeyWord","Footer","App","pageTransChange","menuToggle","currentUrl","currentTitle","setGA","gtag","exact","component","Boolean","hostname","ReactDOM","render","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.e023bd73.chunk.js","sourcesContent":["import { createContext } from \"react\";\r\nconst Context = createContext({\r\n\tpageTrans: false,\r\n\tpageChange: {},\r\n\tmenuState: false,\r\n\tmenuBtnClick: {},\r\n\tsetMeta: {}\r\n});\r\nexport const { Provider, Consumer } = Context;\r\nexport default Context;\r\n","import React from 'react'\r\nimport { Link } from 'react-router-dom'\r\n\r\nconst href = window.location.href\r\nlet EVENT_PATH = null\r\nif(href.search('test.') !== -1){\r\n\tEVENT_PATH = process.env.REACT_APP_EVENT_PATH_TEST;\r\n}else{\r\n\tEVENT_PATH = process.env.REACT_APP_EVENT_PATH;\r\n}\r\nconst path = `${EVENT_PATH}/article`\r\n\r\nconst typeName = {\r\n\t\"1\": \"Web\",\r\n\t\"2\": \"Indep\",\r\n\t\"3\": \"Blog\",\r\n\t\"4\": \"Mag\",\r\n\t\"5\": \"DigitalNative\",\r\n\t\"6\": \"DigitalNativePublish\",\r\n\t\"7\": \"Media\",\r\n\t\"8\": \"News\",\r\n\t\"9\": \"Advertisement\",\r\n\t\"13\": \"Audio\",\r\n\t\"20\": \"AudioPublish\"\r\n}\r\n\r\nconst BannerItem = ({ID, DataTab, Title, ImgSrc, Abstract})=>{\r\n\tconst link = `${path}/${typeName[DataTab]}/${ID}`\r\n\tconst style = {\r\n\t\tbackgroundImage: `url(${ImgSrc})`\r\n\t}\r\n\t// const createMarkup = t => ({ __html: `${Content.substr(0,50).replace(/(
||

|<\\/p>||<\\/span>|

|<\\/div>)/g, '')} ...` });\r\n\treturn(\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t

{Title}

\r\n\t\t\t\t\t{/*
*/}\r\n\t\t\t\t\t{ !!Abstract===false?null:
{`${Abstract.substr(0,50)}...`}
}\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t)\r\n}\r\n\r\nexport default BannerItem;","import React, { useRef } from 'react'\r\nimport BannerItem from './BannerItem'\r\nimport TinySlider from \"tiny-slider-react\";\r\n\r\nconst href = window.location.href\r\nlet API = null\r\nif(href.search('test.') !== -1){\r\n\tAPI = process.env.REACT_APP_SLIDER_API_TEST;\r\n}else{\r\n\tAPI = process.env.REACT_APP_SLIDER_API;\r\n}\r\n\r\nconst MainSlider = (props)=>{\r\n\tconst { bannerState } = props\r\n\tconst refSlider = useRef(null);\r\n\tconst onGoTo = dir => {\r\n\t\trefSlider.current.slider.goTo(dir)\r\n\t}\r\n\tconst settings = {\r\n\t\titems: 1,\r\n\t\tslideBy: 1, \r\n\t\tgutter: 0,\r\n\t\tedgePadding: 0,\r\n\t\tcenter: true,\r\n\t\tloop: true,\r\n\t\tlazyload: true,\r\n\t\tautoplay: false,\r\n\t\tautoplayTimeout: 5000,\r\n\t\tautoplayHoverPause: true,\r\n\t\tautoplayButtonOutput: false,\r\n\t\tspeed: 600,\r\n\t\tmouseDrag: false,\r\n\t\tcontrols: false,\r\n\t\t// controlsContainer: '.main_slider_btn',\r\n\t\tnav: false,\r\n\t\t// navContainer: sliderPager,\r\n\t\t// rewind: true,\r\n\t\tautoHeight: false,\r\n\t\tresponsive: {\r\n\t\t\t// 481: {\r\n // // gutter: 8,\r\n // edgePadding: 0\r\n\t\t\t// },\r\n\t\t\t801: {\r\n // gutter: 20,\r\n edgePadding: window.innerWidth*.1\r\n\t\t\t},\r\n\t\t\t1201: {\r\n // gutter: 30,\r\n edgePadding: window.innerWidth*.25\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\treturn(\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t{\r\n\t\t\t\t\tbannerState.map(item =>\t )\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t\t
\r\n\t\t\t\t
onGoTo('prev')}>
\r\n\t\t\t\t
onGoTo('next')}>
\r\n\t\t\t
\r\n\t\t
\r\n\t)\r\n}\r\n\r\nexport default MainSlider;","import React from 'react'\r\nimport { Link } from 'react-router-dom'\r\n\r\nconst href = window.location.href\r\nlet EVENT_PATH = null\r\nif(href.search('test.') !== -1){\r\n\tEVENT_PATH = process.env.REACT_APP_EVENT_PATH_TEST;\r\n}else{\r\n\tEVENT_PATH = process.env.REACT_APP_EVENT_PATH;\r\n}\r\nconst path = `${EVENT_PATH}/article`\r\nconst bwUrl = \"https://www.businessweekly.com.tw/\"\r\n\r\nconst typeName = {\r\n\t\"1\": \"Web\",\r\n\t\"2\": \"Indep\",\r\n\t\"3\": \"Blog\",\r\n\t\"4\": \"Mag\",\r\n\t\"5\": \"DigitalNative\",\r\n\t\"6\": \"DigitalNativePublish\",\r\n\t\"7\": \"Media\",\r\n\t\"8\": \"News\",\r\n\t\"9\": \"Advertisement\",\r\n\t\"13\": \"Audio\",\r\n\t\"20\": \"AudioPublish\"\r\n}\r\n\r\nconst ArticleItem = (props)=>{\r\n\tconst {SiteNo, ID, Title, LinkUrl, TypeCode, Abstract, DataTab, ImgSrc, IsAD, listArticleState } = props\r\n\tlet link = null;\r\n\tif(TypeCode===\"02\" || TypeCode===\"07\"){\r\n\t\tif(SiteNo === 5){\r\n\t\t\tlink = `${path}/${typeName[DataTab]}/${ID}`\r\n\t\t}else if(SiteNo === 10){\r\n\t\t\tlink = bwUrl+LinkUrl\r\n\t\t}else{\r\n\t\t\tlink = LinkUrl\r\n\t\t}\r\n\t}else if(TypeCode===\"06\"){\r\n\t\tlink = `https://www.youtube.com/embed/${LinkUrl.replace(\"https://www.youtube.com/watch?v=\", '')}`\r\n\t}\r\n\tconst style = {\r\n\t\tbackgroundImage: `url(${ImgSrc})`\r\n\t}\r\n\t// const createMarkup = t => ({ __html: `${Content.substr(0,50).replace(/(
||

|<\\/p>||<\\/span>|

|<\\/div>)/g, '')} ...` });\r\n\t\r\n\treturn(\r\n\t\t
\r\n\t\t\t{\r\n\t\t\t\tTypeCode===\"02\" || TypeCode===\"07\"?\r\n\t\t\t\t\tSiteNo === 5?\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t:\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t:\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t}\r\n\t\t\t
\r\n\t\t\t\t

\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tSiteNo === 5?\r\n\t\t\t\t\t\t{Title}\r\n\t\t\t\t\t\t:\r\n\t\t\t\t\t\t{Title}\r\n\t\t\t\t\t}\t\r\n\t\t\t\t

\r\n\t\t\t\t{/* { SubTitle ?

{SubTitle}

: null } */}\r\n\t\t\t\t{ /*Content?
:null*/ }\r\n\t\t\t\t{ !!Abstract===false?null:
\r\n\t\t\t\t\t{ listArticleState?`${Abstract}...`:`${Abstract.substr(0,50)}...` }
}\r\n\t\t\t\t{\r\n\t\t\t\t\tIsAD === true ?\r\n\t\t\t\t\t
Sponsor
\r\n\t\t\t\t\t: null\t\r\n\t\t\t\t}\r\n\t\t\t
\r\n\t\t
\r\n\t)\r\n}\r\n\r\nexport default ArticleItem;","import React from 'react';\r\n\r\nconst AdBanner = ({ adState, addClass }) => {\r\n\tconst adContent = t => ({ __html: adState });\r\n\tconsole.log()\r\n\treturn (\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default AdBanner;\r\n","// 各單元英文名稱,對應廣告版位ID,建立新專區時必須一併修改\r\nconst AdIdSource = {\r\n\t\"home\": \"2474\",\r\n\t\"homeSecond\": \"2502\", \r\n\t\"knowledge\": \"2458\", \r\n\t\"chinese-medicine\": \"2472\", \r\n\t\"diet\": \"2466\", \r\n\t\"physical-examination\": \"2468\",\r\n\t\"regimen\": \"2460\",\r\n\t\"doctor\": \"2464\",\r\n\t\"article\": {\r\n\t\t\"top\": \"2470\", \r\n\t\t\"content\": \"2462\", \r\n\t\t\"video\": \"2479\", \r\n\t\t\"rightTop\": \"2477\", \r\n\t\t\"rightBottom\": \"2478\",\r\n\t\t\"float\": \"2476\"\r\n\t}\r\n}\r\nexport default AdIdSource;","import React, { useState, useEffect, useContext } from 'react'\r\nimport Context from '../context/Context';\r\nimport MainSlider from '../components/banner/MainSlider'\r\nimport ArticleItem from '../components/article/ArticleItem'\r\nimport 'whatwg-fetch'\r\nimport AdBanner from '../components/banner/AdBanner'\r\nimport AdIdSource from '../fun/AdIdSource'\r\n\r\nconst href = window.location.href\r\nlet LIST_API = null\r\nlet AD_API = null\r\nlet Status = null\r\nlet Cache = null\r\nif(href.search('test.') !== -1){\r\n\tLIST_API = process.env.REACT_APP_ARTICLE_LIST_API_TEST;\r\n\tAD_API = process.env.REACT_APP_AD_API_TEST;\r\n\tStatus = 'n'\r\n\tCache = 'n'\r\n}else{\r\n\tLIST_API = process.env.REACT_APP_ARTICLE_LIST_API;\r\n\tAD_API = process.env.REACT_APP_AD_API;\r\n\tStatus = 'y'\r\n\tCache = 'n'\r\n}\r\n\r\nconst SITE_NO = process.env.REACT_APP_SITE_NO\r\nconst EVENT_ID = process.env.REACT_APP_EVENT_ID\r\nconst params = `SiteNo=${SITE_NO}&ID=${EVENT_ID}&Status=${Status}&Cache=${Cache}`\r\n\r\nconst adID = AdIdSource['home']\r\nconst secondAdID = AdIdSource['homeSecond']\r\nconst adParams = `SiteNo=${SITE_NO}&ID=${adID},${secondAdID}`\r\n\r\nconst Home = ()=>{\r\n\tconst [ bannerState, bannerStateChange ] = useState([]);\r\n\tconst [ itemState, itemStateChange ] = useState([]);\r\n\tconst [ adState, setAdState ] = useState([]);\r\n const [ secondAdState, sedondAdStateChange ] = useState([]);\r\n\tconst contextValue = useContext(Context);\r\n\tconst { pageChange } = contextValue;\r\n\t\r\n\tuseEffect(()=>{\r\n\t\tfetch(LIST_API, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'\r\n\t\t\t},\r\n\t\t\tbody: params\r\n\t\t}).then(result=>{\r\n\t\t\treturn result.json()\r\n\t\t}).then( res =>{\r\n\t\t\tconst arcitleArr = []\r\n\r\n\t\t\tres.JData.Data.filter(data => data.TypeCode === \"09\")\r\n\t\t\t.map(data => bannerStateChange(bannerState => [...data.Data]) )\r\n\t\t\tres.JData.Data.filter(data => data.TypeCode === \"07\")\r\n\t\t\t.map(data => data.Data.map(a=>\tarcitleArr.push(a)) )\r\n\t\t\tres.JData.Data.filter(data => data.TypeCode === \"06\")\r\n\t\t\t.map(data => data.Data.map(a=>\tarcitleArr.push(a)) )\r\n\r\n\t\t\titemStateChange(itemState => arcitleArr)\r\n\t\t})\r\n\r\n\t\tfetch(AD_API, {\r\n\t method: 'POST',\r\n\t headers: {\r\n\t\t'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'\r\n\t },\r\n\t body: adParams\r\n\t}).then(result=>{\r\n\t return result.json()\r\n\t}).then( res =>{\r\n\t\t\t// setAdState(adState => [...res.JData])\r\n\t\t\tif(window.innerWidth<1200){\r\n\t\t\t\tres.JData.map(ad => {\r\n\t\t\t\t\tif(ad.Target === \"y\" && ad.IsMobile === \"y\"){\r\n\t\t\t\t\t\t// adElement = a.Content\r\n\t\t\t\t\t\tif(ad.ID === adID){\r\n\t\t\t\t\t\t\tsetAdState(adState => ad.Content)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(ad.ID === secondAdID){\r\n\t\t\t\t\t\t\tsedondAdStateChange(secondAdState => ad.Content)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t\tres.JData.map(ad => {\r\n\t\t\t\tif(ad.Target === \"y\" && ad.IsMobile === \"n\"){\r\n\t\t\t\t\tif(ad.ID === adID){\r\n\t\t\t\t\t\tsetAdState(adState => ad.Content)\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(ad.ID === secondAdID){\r\n\t\t\t\t\t\tsedondAdStateChange(secondAdState => ad.Content)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t})\r\n\t\t\r\n\t\t// page Change Opacity Transition\r\n\t\tsetTimeout(() => {\r\n\t\t\tpageChange();\r\n\t\t\trequestAd();\r\n\t\t}, 500);\r\n\t\treturn ()=>{\r\n\t\t\tpageChange();\r\n\t\t}\r\n\t}, []);\r\n\t\r\n\tconst requestAd = () => {\r\n\t\tif(!!window.RequestAD){\r\n\t\t\twindow.RequestAD();\r\n\t\t\treturn\r\n\t\t}\r\n\t\t// requestAd()\r\n\t}\r\n\t\r\n\tconst secondAdContent = t => ({ __html: secondAdState });\r\n\r\n\treturn(\r\n\t\t
\r\n\t\t\t{ !!bannerState === false?null : }\r\n\t\t\t{/* */}\r\n\t\t\t
\r\n\t\t\t\t{/* */}\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\titemState.map((item, index) => index == 0 ? : null )\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tsecondAdState.length === 0 ? null : \r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\titemState.map((item, index) => index > 0 && index < 6 ? : null )\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t
\r\n\t)\r\n\t\r\n}\r\n\r\nexport default Home;","import React from 'react'\r\n\r\nconst ListBanner = (props)=>{\r\n\tconst { titleState, tagState, tagClickChange, tagKeyword } = props\r\n\tlet style = null;\r\n\tif(!!titleState[0]){\r\n\t\tstyle = {\r\n\t\t\tbackgroundImage: `url(${titleState[0].ImgSrc})`\r\n\t\t}\r\n\t}\r\n\treturn(\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t

\r\n\t\t\t\t\t{!!titleState[0]===false?null:titleState[0].Title}\r\n\t\t\t\t

\r\n\t\t\t\t{\r\n\t\t\t\t\ttagState.length<=0?null:\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
全部
\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t!!tagState === false?null:\r\n\t\t\t\t\t\t\ttagState.map(tag => \r\n\t\t\t\t\t\t\t\t
{tag.Title}
\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t
\r\n\t\t\t\t}\r\n\t\t\t
\r\n\t\t
\r\n\t)\r\n}\r\n\r\nexport default ListBanner;","import React, { useState, useEffect, useContext, useRef } from 'react'\r\nimport Context from '../context/Context';\r\nimport ListBanner from '../components/banner/ListBanner'\r\nimport ArticleItem from '../components/article/ArticleItem'\r\nimport AdBanner from '../components/banner/AdBanner'\r\nimport AdIdSource from '../fun/AdIdSource'\r\nimport 'whatwg-fetch'\r\n\r\nconst href = window.location.href\r\nlet LIST_API = null\r\nlet AD_API = null\r\nlet Status = null\r\nlet Cache = null\r\nif(href.search('test.') !== -1){\r\n\tLIST_API = process.env.REACT_APP_ARTICLE_LIST_API_TEST;\r\n\tAD_API = process.env.REACT_APP_AD_API_TEST;\r\n\tStatus = 'n'\r\n\tCache = 'n'\r\n}else{\r\n\tLIST_API = process.env.REACT_APP_ARTICLE_LIST_API;\r\n\tAD_API = process.env.REACT_APP_AD_API;\r\n\tStatus = 'y'\r\n\tCache = 'n'\r\n}\r\n\r\nconst SITE_NO = process.env.REACT_APP_SITE_NO\r\n// const EVENT_ID = process.env.REACT_APP_EVENT_ID\r\n\r\n// 各單元英文名稱,對應廣告版位ID,建立新專區時必須一併修改\r\n// const adObj = { \r\n// \t\"knowledge\": 2458, \r\n// \t\"chinese-medicine\": 2472, \r\n// \t\"diet\": 2466, \r\n// \t\"physical-examination\": 2468,\r\n// \t\"regimen\": 2460,\r\n// \t\"doctor\": 2464\r\n// }\r\n\r\nconst List = ({listID})=>{\r\n\tconst [ listArticleState, listArticleStateChange ] = useState(false);\r\n\tconst [ titleState, titleStateChange ] = useState([]);\r\n\tconst [ tagState, tagStateChange ] = useState([]);\r\n\tconst [ tagKeyword, tagKeywordChange ] = useState(\"全部\");\r\n\tconst [ itemState, itemStateChange ] = useState([]);\r\n\t// const [ defaultHeight, defaultHeightChange ] = useState(0);\r\n const [ adState, setAdState ] = useState([]);\r\n\tconst contextValue = useContext(Context);\r\n\tconst { pageChange } = contextValue;\r\n\t\r\n\tconst params = `SiteNo=${SITE_NO}&EventName=${listID}&Status=${Status}&Cache=${Cache}`\r\n\tconst adID = AdIdSource[listID]\r\n\tconst adParams = `SiteNo=${SITE_NO}&ID=${adID}`\r\n\tconst listWrap = useRef(null)\r\n\r\n\tuseEffect(()=>{\r\n\t\tfetch(LIST_API, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'\r\n\t\t\t},\r\n\t\t\tbody: params\r\n\t\t}).then(result=>{\r\n\t\t\treturn result.json()\r\n\t\t}).then( res =>{\r\n\t\t\tlistArticleStateChange(listArticleState => false)\r\n\t\t\tconst arcitleArr = []\r\n\t\t\t// 心血管文章格式\r\n\t\t\tres.JData.Data.filter(data => data.TypeCode === \"02\").forEach(data => {\r\n\t\t\t\tdata.Data.map(a=>\tarcitleArr.push(a))\r\n\t\t\t\tlistArticleStateChange(listArticleState => true) \r\n\t\t\t})\r\n\t\t\tres.JData.Data.filter(data => data.TypeCode === \"05\").map(data => titleStateChange( titleState => [...data.Data]) )\r\n\t\t\tres.JData.Data.filter(data => data.TypeCode === \"10\").map(data => tagStateChange(tagState => [...data.Data]) )\r\n\t\t\tres.JData.Data.filter(data => data.TypeCode === \"07\").map(data => data.Data.map(a=>\tarcitleArr.push(a)) )\r\n\t\t\tres.JData.Data.filter(data => data.TypeCode === \"06\").map(data => data.Data.map(a=> arcitleArr.push(a)) )\r\n\r\n\t\t\t// arcitleArr.sort((a, b) => a.Priority > b.Priority ? 1 : -1 );\r\n\t\t\titemStateChange(itemState => arcitleArr)\r\n\r\n\t\t})\r\n\t\tfetch(AD_API, {\r\n\t\t\tmethod: 'POST',\r\n headers: {\r\n\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'\r\n },\r\n body: adParams\r\n }).then(result=>{\r\n\t\t\treturn result.json()\r\n }).then( res =>{\r\n\t\t\t// setAdState(adState => [...res.JData])\r\n\t\t\tif(window.innerWidth<1200){\r\n\t\t\t\tres.JData.map(ad => {\r\n\t\t\t\t\tif(ad.IsMobile === \"y\"){\r\n\t\t\t\t\t\tsetAdState(adState => ad.Content)\r\n\t\t\t\t\t\t// adElement = a.Content\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\treturn\r\n\t\t\t}else{\r\n\t\t\t\tres.JData.map(ad => {\r\n\t\t\t\t\tif(ad.IsMobile === \"n\"){\r\n\t\t\t\t\t\tsetAdState(adState => ad.Content)\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t})\r\n\t\t\r\n\t\t// page Change Opacity Transition\r\n\t\tsetTimeout(() => {\r\n\t\t\tpageChange();\r\n\t\t\trequestAd();\r\n\t\t\t// const wrapH = listWrap.current.clientHeight;\r\n\t\t\t// defaultHeightChange(defaultHeight => wrapH)\r\n\t\t}, 500);\r\n\t\treturn ()=>{\r\n\t\t\tpageChange();\r\n\t\t\ttitleStateChange(titleState => [])\r\n\t\t\ttagStateChange(tagState => [])\r\n\t\t\titemStateChange(itemState => [])\r\n\t\t\ttagKeywordChange(tagKeyword => \"全部\")\r\n\t\t}\r\n\t}, [listID]);\r\n\t\r\n\tconsole.log(itemState)\r\n\t\r\n\tconst requestAd = () => {\r\n\t\tif(!!window.RequestAD){\r\n\t\t\twindow.RequestAD();\r\n\t\t\treturn\r\n\t\t}\r\n\t\t// requestAd()\r\n\t}\r\n\tconst tagClickChange = (e) => {\r\n\t\tconst tagName = e.target.textContent\r\n\t\ttagKeywordChange(tagKeyword => tagName)\r\n\t}\r\n\tlet tagFilter = null;\r\n\tif(tagKeyword === '全部'){\r\n\t\ttagFilter = itemState\r\n\t}else{\r\n\t\ttagFilter = itemState.filter(item => item.Tag.includes(tagKeyword))\t\r\n\t}\r\n\t\r\n\t// const style ={\r\n\t// \tminHeight: defaultHeight \r\n\t// }\r\n\treturn(\r\n\t\t
\r\n\t\t\t{ !!listArticleState ? null : }\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{ tagFilter.map((item, index) => ) }\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t
\r\n\t)\r\n\t\r\n}\r\n\r\nexport default List;","import React from 'react';\r\n\r\n\r\nconst SEARCH_URL = process.env.REACT_APP_SEARCH_URL\r\n\r\nconst ArticleTag = ({tagData}) => {\r\n\treturn (\r\n\t\t
\r\n\t\t\t{\r\n\t\t\t\ttagData.map(t => {t.Name} )\r\n\t\t\t}\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default ArticleTag;\r\n","import React, { useState } from \"react\";\r\nimport zipData from \"../../json/zip.json\";\r\n\r\n\r\nconst SEARCH_ADV_URL = process.env.REACT_APP_SEARCH_ADV_URL\r\n\r\nconst ArticleSearch = () => {\r\n\tconst [districtState, districtChange] = useState(zipData[0].districts);\r\n\r\n\tconst handleChange = e => {\r\n\t\tconst val = e.target.value;\r\n\t\tzipData.map(c => {\r\n\t\t\tif (c.city === val) {\r\n\t\t\t\tdistrictChange(districtState => c.districts);\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\tconst handleSubmit = e => {\r\n\t\tconst divisionVal = e.target.division.value;\r\n\t\tconst countyVal = e.target.county.value;\r\n\t\tconst districtVal = e.target.district.value;\r\n\t\tconst searchTypeVal = e.target.searchType.value || 'None';\r\n\t\tconst searchRecommendVal = e.target.searchRecommend.value;\r\n\t\tconst searchKeywordVal = e.target.searchKeyword.value;\r\n\t\tif (\r\n\t\t\tdivisionVal ||\r\n\t\t\tcountyVal ||\r\n\t\t\tdistrictVal ||\r\n\t\t\tsearchTypeVal ||\r\n\t\t\tsearchRecommendVal ||\r\n\t\t\tsearchKeywordVal\r\n\t\t) {\r\n\t\t\t// console.log(\r\n\t\t\t// \tdivisionVal,\r\n\t\t\t// \tcountyVal,\r\n\t\t\t// \tdistrictVal,\r\n\t\t\t// \tsearchTypeVal,\r\n\t\t\t// \tsearchRecommendVal,\r\n\t\t\t// \tsearchKeywordVal\r\n\t\t\t// );\r\n\t\t\tconst params = `?city=${countyVal}&dist=${districtVal}&dep=${divisionVal}&t=${searchTypeVal}&key=${searchKeywordVal}&pro=${searchRecommendVal}`\r\n\t\t\twindow.open(SEARCH_ADV_URL+params)\r\n\t\t}\r\n\t\te.preventDefault();\r\n\t};\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t科別\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t地區\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t類別\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t推薦來源\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t關鍵字\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default ArticleSearch;\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { FacebookProvider, Like, ShareButton } from 'react-facebook';\r\n// import Author from \"./ArticleAuthor\";\r\nimport Tag from \"./ArticleTag\";\r\nimport AdBanner from \"../banner/AdBanner\";\r\nimport ArticleSearch from \"./ArticleSearch\";\r\nimport AdIdSource from '../../fun/AdIdSource';\r\n\r\n// 廣告版位 ID\r\nconst adObj = AdIdSource.article\r\nconst appID = 136234913116144\r\n\r\nconst ArticleSingle = props => {\r\n\t// 側邊欄位定位\r\n const [fixed, fixedChange] = useState(false);\r\n const [fixedLeft, fixedLeftChange] = useState(\"auto\");\r\n const [fixedWidth, fixedWidthChange] = useState(\"auto\");\r\n const [fixedTaTop, fixedTaTopChange] = useState(\"20px\");\r\n\r\n\t// 取得文章的資料\r\n const { changeUrl, loadAd, adState, firstID, lastID, setMeta } = props;\r\n const { Article, ArticleTag, DSImg, DSBox } = props;\r\n const { ID, DataTab, WebTitle, Writer, WebContent, NewDataTime, TotalClick } = Article;\r\n\r\n useEffect(() => {\r\n window.addEventListener(\"scroll\", onScroll);\r\n\t\twindow.addEventListener(\"resize\", onScroll);\t\t\r\n return () => {\r\n window.removeEventListener(\"scroll\", onScroll);\r\n window.removeEventListener(\"resize\", onScroll);\r\n };\r\n\t}, []);\r\n\t\r\n\t// 廣告版位設定\r\n const adArr = {};\r\n if(adState.length > 0) {\r\n Object.keys(adObj).map(key => {\r\n\t\t\tadArr[key] = null;\r\n\t\t});\r\n adState.map(ad => {\r\n Object.keys(adObj).map(key => {\r\n if (window.innerWidth < 1200) {\r\n if (ad.IsMobile === \"y\" && adObj[key] === ad.ID) {\r\n adArr[key] = ad.Content;\r\n }\r\n } else {\r\n if (ad.IsMobile === \"n\" && adObj[key] === ad.ID) {\r\n adArr[key] = ad.Content;\r\n }\r\n\t\t\t\t}\t\t\t\t\r\n });\r\n\t\t});\r\n\t}\r\n\t\r\n let detail = WebContent;\r\n if (!!detail) {\r\n\t\t// replace DSImg\r\n if (DSImg.length > 0) {\r\n for (let i in DSImg) {\r\n const e = DSImg[i];\r\n const DSTagName = `

${e.DSTagName}

`;\r\n const ImgSrc = e.ImgSrc;\r\n const box = `\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t`;\r\n detail = detail.replace(DSTagName, box);\r\n detail = detail.replace(e.DSTagName, box);\r\n }\r\n\t\t}\r\n\t\t// replace DSBox\r\n\t\t// const imgString = /

(/g\r\n if (DSBox.length > 0) {\r\n for (let i in DSBox) {\r\n const e = DSBox[i];\r\n const DSTagName = `

${e.DSTagName}

`;\r\n const Topic = e.Topic;\r\n\t\t\t\tconst Content = e.Content;\r\n\t\t\t\t// const imgElm = Content.match(imgString)\r\n\t\t\t\t// imgElm.map(elm => {\r\n\t\t\t\t// \tconsole.log(elm)\r\n\t\t\t\t// \telm.replace(/

/g, '

')\r\n\t\t\t\t// });\r\n const box = `\r\n\t\t\t\t

\r\n\t\t\t\t\t
${Topic}
\r\n\t\t\t\t\t
${Content}
\r\n\t\t\t\t
\r\n\t\t\t\t`;\r\n detail = detail.replace(DSTagName, box);\r\n detail = detail.replace(e.DSTagName, box);\r\n }\r\n }\r\n\r\n // 清除舊有符號 DS,此符號於新版沒有作用\r\n detail = detail.replace(/(

{DS}<\\/p>)|{DS}/g, \"\");\r\n\r\n // 用 div 打包 iframe\r\n // const iframeString = /

]*?(?:\\/>|>[^<]*?<\\/iframe><\\/p>)/g;\r\n const iframeString = /

<\\/p>/g;\r\n const iframeArr = detail.match(iframeString);\r\n if (!!iframeArr) {\r\n\t\t\tiframeArr.map(f => {\r\n\t\t\t\tdetail = detail.replace(f, `

${f}
`);\r\n });\r\n\t\t}\r\n\t\t\r\n // 插入文中廣告與底部影音大看板廣告\r\n\t\t// const thirdPmatch = detail.match(/]*?(?:\\/>|>[^<]*?<\\/p>)/g);\r\n\t\tconst thirdPmatch = detail.match(//g);\r\n\t\t;\r\n if (!!adArr.content) {\r\n if(thirdPmatch.length<3){\r\n detail = detail + adArr.content;\r\n }else{\r\n detail = detail.replace(thirdPmatch[2], thirdPmatch[2] + adArr.content);\r\n }\r\n }\r\n if (!!adArr.video) {\r\n detail = detail + adArr.video;\r\n }\r\n }\r\n\r\n const detailContent = t => ({ __html: detail });\r\n\r\n\t// 取得 element\r\n const articleWrap = useRef(null);\r\n const fixedWrap = useRef(null);\r\n const fixedTa = useRef(null);\r\n\r\n\t// 定義 scroll 載入的數值\r\n let scrollY = null;\r\n let articleWrapRec = null;\r\n let articleWrapH = null;\r\n let articleWrapBottom = null;\r\n let fixedRec = null;\r\n let fixedW = null;\r\n let fixedTaH = null;\r\n // let nowY = null;\r\n\tconst scrollDiff = 0.7;\r\n\t\r\n\t// scroll 右側欄位固定,僅寬度 1024 以上執行\r\n const onScroll = () => {\r\n\t\tscrollY = document.documentElement.scrollTop || document.body.scrollTop;\r\n\t\tarticleWrapRec = articleWrap.current.getBoundingClientRect();\r\n\t\tarticleWrapH = articleWrap.current.clientHeight;\r\n\t\tarticleWrapBottom = articleWrapRec.top + scrollY + articleWrapH - scrollY;\r\n\r\n\t\tif (articleWrapRec.top < window.innerHeight * scrollDiff && articleWrapBottom > window.innerHeight * scrollDiff) {\r\n\t\t\t// 網址變更\r\n\t\t\tchangeUrl({ type: DataTab, id: ID });\r\n\t\t\t// 改變 meta title\r\n\t\t\tsetMeta(WebTitle)\r\n\t\t}\r\n\t\t// 廣告載入\r\n\t\tif (articleWrapRec.top < window.innerHeight * 1.4 && articleWrapBottom > window.innerHeight * 1.4) {\r\n\t\t\tloadAd(ID);\r\n\t\t}\r\n\t\tif (window.innerWidth > 1024 && !!fixedWrap.current) {\r\n\t\t\tfixedRec = fixedWrap.current.getBoundingClientRect();\r\n\t\t\tfixedW = fixedWrap.current.clientWidth;\r\n\t\t\tfixedTaH = fixedTa.current.clientHeight;\r\n\t\t\t// 側邊廣告區塊固定判斷\r\n if (fixedRec.top <= 20) {\r\n fixedChange(fixed => true);\r\n fixedLeftChange(fixedLeft => `${fixedRec.left}px`);\r\n fixedWidthChange(fixedWidth => `${fixedW}px`);\r\n if (articleWrapBottom <= fixedTaH + 20) {\r\n fixedTaTopChange(\r\n fixedTaTop => `${articleWrapBottom - (fixedTaH + 20)}px`\r\n );\r\n return;\r\n }\r\n fixedTaTopChange(fixedTaTop => \"20px\");\r\n } else {\r\n fixedChange(fixed => false);\r\n fixedLeftChange(fixedLeft => \"auto\");\r\n fixedWidthChange(fixedWidth => \"auto\");\r\n fixedTaTopChange(fixedTaTop => `20px`);\r\n }\r\n // nowY=scrollY\r\n }\r\n };\r\n\r\n\t// 固定區塊時的數值更新\r\n const fixedStyle = {\r\n left: fixedLeft,\r\n top: fixedTaTop,\r\n width: fixedWidth\r\n\t};\r\n\t\r\n return (\r\n
\r\n \r\n
\r\n
\r\n \r\n {\r\n\t\t\t\t\t\t/*舊良醫不顯示文章大圖,暫時先隱藏*/\r\n\t\t\t\t\t\t/*
\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t!!ArticleImg===false ?null:\r\n\t\t\t\t\t\t\t\t\tInsideShow === 'Y'?\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t: null\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t
*/}\r\n
\r\n\r\n {/* */}\r\n\t\t\t\t\t\r\n {!!ArticleTag === false ? null : }\r\n {ID === lastID ? null : (\r\n
\r\n

下滑接續下一篇

\r\n
\r\n )}\r\n
\r\n\t\t\t\t{ \r\n\t\t\t\t\twindow.innerWidth <= 1024 ? null : \r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{ID === firstID ? : null}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ArticleSingle;\r\n","import React, { useState, useEffect, useContext, useRef } from 'react';\r\nimport { useLocation, useHistory } from \"react-router-dom\";\r\nimport Context from '../context/Context';\r\nimport 'whatwg-fetch'\r\nimport ArticleSingle from '../components/article/ArticleSingle'\r\nimport AdBanner from '../components/banner/AdBanner'\r\nimport AdIdSource from '../fun/AdIdSource'\r\n\r\nconst href = window.location.href\r\nlet ARTICLE_SINGLE_API = null\r\nlet NEXT_LIST_API = null\r\nlet AD_API = null\r\nlet Status = null\r\nlet Cache = null\r\nif(href.search('test.') !== -1){\r\n\tARTICLE_SINGLE_API = process.env.REACT_APP_ARTICLE_SINGLE_API_TEST;\r\n\tNEXT_LIST_API = process.env.REACT_APP_ARTICLE_NEXT_LIST_API_TEST;\r\n\tAD_API = process.env.REACT_APP_AD_API_TEST;\r\n\tStatus = 'n'\r\n\tCache = 'n'\r\n}else{\r\n\tARTICLE_SINGLE_API = process.env.REACT_APP_ARTICLE_SINGLE_API;\r\n\tNEXT_LIST_API = process.env.REACT_APP_ARTICLE_NEXT_LIST_API;\r\n\tAD_API = process.env.REACT_APP_AD_API;\r\n\tStatus = 'y'\r\n\tCache = 'y'\r\n}\r\nconst SET_COUNT_API = process.env.REACT_APP_ARTICLE_SET_COUNT_API\r\n\r\nconst SITE_NO = process.env.REACT_APP_SITE_NO\r\nconst Type = 2\r\n\r\n// 文章類型\r\nconst typeName = {\r\n\t\"1\": \"Web\",\r\n\t\"2\": \"Indep\",\r\n\t\"3\": \"Blog\",\r\n\t\"4\": \"Mag\",\r\n\t\"5\": \"DigitalNative\",\r\n\t\"6\": \"DigitalNativePublish\",\r\n\t\"7\": \"Media\",\r\n\t\"8\": \"News\",\r\n\t\"9\": \"Advertisement\",\r\n\t\"13\": \"Audio\",\r\n\t\"20\": \"AudioPublish\"\r\n}\r\n\r\nconst adObj = AdIdSource.article\r\n\r\nconst Article = ({path}) => {\r\n\t// 文章列表 state\r\n\tconst [ articleState, setArticleState ] = useState([]);\r\n // 廣告 state\r\n\tconst [ adState, setAdState ] = useState([]);\r\n\r\n\t// 取得 context\r\n\tconst contextValue = useContext(Context);\r\n\tconst { pageChange, setMeta } = contextValue;\r\n\r\n\t// 文章載入中狀態\r\n\tconst isLoading = useRef(true);\r\n\t\r\n\t// 路由判斷\r\n\tconst location = useLocation();\r\n\tconst pathname = location.pathname.replace(path, '');\r\n\tconst pathSplit = pathname.split('/')\r\n\t// 文章類型與id\r\n\tconst pathType = pathSplit[0]\r\n\tconst pathId = pathSplit[1]\r\n\t// history 狀態\r\n\tconst history = useHistory()\r\n\t\r\n\t// 儲存下一篇全部文章\r\n\tconst nextList = useRef([]);\r\n\t// 定義前後篇文章 ID\r\n\tconst firstID = useRef(pathId)\r\n\tconst lastID = useRef(null)\r\n\tconst nextID = useRef(0);\r\n\tconst nowID = useRef(pathId)\r\n\t// 儲存廣告ID\r\n\tconst adID = useRef(pathId)\r\n\t// 儲存第一次廣告讀取狀態\r\n\tconst adFirstLoad = useRef(false)\r\n\t\r\n\t// 預先定義 window height\r\n\tlet winH = window.innerHeight;\r\n\tuseEffect(()=>{\r\n\t\t// 載入第一篇文章,getNextList 是取得全部下一篇文章列表的 callback function\r\n\t\tgetArticle({type: pathType, id: pathId}, getNextList)\r\n\t\t// 取得廣告,type:typeName 文章類型,id:網址文章id\r\n\t\tgetAD()\r\n\t\t// bind 點上下頁重整的 function\r\n\t\twindow.addEventListener('popstate', historyChange)\r\n\r\n\t\t// page Change Opacity Transition & requestAd\r\n\t\tsetTimeout(() => {\r\n\t\t\t// 執行頁面切換的 fadein 動畫\r\n\t\t\tpageChange();\r\n\t\t}, 500);\r\n\t\tsetTimeout(() => {\r\n\t\t\t// mount 時 call ad\r\n\t\t\trequestAd()\r\n\t\t}, 700);\r\n\t\tsetTimeout(() => {\r\n\t\t\tif(adFirstLoad.current === false ){\r\n\t\t\t\trequestAd()\r\n\t\t\t\tadFirstLoad.current = true\r\n\t\t\t}\r\n\t\t}, 2000)\r\n\t\treturn ()=>{\r\n\t\t\t// 組件卸載 remove 事件\r\n\t\t\twindow.removeEventListener('scroll', onScroll)\r\n\t\t\twindow.removeEventListener('popstate', historyChange)\r\n\t\t\t// 頁面切換時執行 fadein 動畫\r\n\t\t\tpageChange();\r\n\t\t}\r\n\t}, [])\r\n\t\r\n\tif(articleState.length>0){\r\n\t\tconst t = articleState[0].Article.WebTitle\r\n\t\tsetMeta(t)\r\n\t}\r\n\t\r\n\t// 取得廣告資料\r\n\tconst getAD = () =>{\r\n\t\tlet adArr = []\r\n\t\tlet params = null;\r\n\t\t// 取得各版位 id 參數,AdIdSource.article 為版位的固定id,非動態生成,要變動請修改 AdIdSource.js \r\n\t\tObject.keys(adObj).map(key => {\r\n\t\t\tadArr.push(adObj[key])\r\n\t\t\tparams = `SiteNo=${SITE_NO}&ID=${adArr.join(\",\")}`\r\n\t\t\t// return params\r\n\t\t})\r\n\t\t\r\n\t\t// call 廣告 api\r\n\t\tfetch(AD_API, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'\r\n\t\t\t},\r\n\t\t\tbody: params\r\n\t\t}).then(result=>{\r\n\t\t\treturn result.json()\r\n\t\t}).then( res =>{\r\n\t\t\t\tsetAdState(adState => [...res.JData])\r\n\t\t})\r\n\t}\r\n\r\n\t// 取得第一篇文章\r\n\tconst getArticle = ({type, id}, callback) =>{\r\n\t\t// 設定正在讀取中\r\n\t\tisLoading.current = true\r\n\t\tconst\tType = type\r\n\t\tconst\tArticleNo = id\r\n\t\tconst params = `SiteNo=${SITE_NO}&Type=${Type}&ArticleNo=${ArticleNo}&Status=${Status}&Cache=${Cache}`\r\n\r\n\t\tfetch(ARTICLE_SINGLE_API, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'\r\n\t\t\t},\r\n\t\t\tbody: params\r\n\t\t}).then(result=>{\r\n\t\t\treturn result.json()\r\n\t\t}).then( res =>{\r\n\t\t\tsetArticleState(articleState => [...articleState, res.JData])\r\n\t\t\t// 載入第一篇文章時才有 callback function\r\n\t\t\tif(!!callback){\r\n\t\t\t\t// 取得文章類型\r\n\t\t\t\tconst dataTab = res.JData.Article.DataTab\r\n\t\t\t\t// 取得文章所屬特企的ID\r\n\t\t\t\tconst specialTopicID = res.JData.SpecialTopic.ID\r\n\t\t\t\t// callback 執行 getNextList 取得下一篇文章列表\r\n\t\t\t\tcallback(specialTopicID, dataTab, id)\r\n\t\t\t}\r\n\t\t\t// 儲存文章瀏覽數\r\n\t\t\tsetCount(res.JData.Article.DataTab, id)\r\n\t\t\t// 設定讀取完畢\r\n\t\t\tisLoading.current = false\r\n\t\t})\r\n\t}\r\n\t// 取得全部的下一篇文章列表\r\n\tconst getNextList = (relatedID, dataTab, id) => {\r\n\t\tconst params = `SiteNo=${SITE_NO}&DataTab=${dataTab}&ID=${id}&RelatedID=${relatedID}&Type=${Type}`\r\n\t\tfetch(NEXT_LIST_API, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'\r\n\t\t\t},\r\n\t\t\tbody: params\r\n\t\t}).then(result=>{\r\n\t\t\treturn result.json()\r\n\t\t}).then( res =>{\r\n\t\t\tnextList.current = [...res.JData]\r\n\t\t\t// 存入下一篇列表最後一筆的ID,用於判斷最後一筆不顯示下滑載入提示文字\r\n\t\t\tif(res.JData.length >0){\r\n\t\t\t\tlastID.current = res.JData.pop().ID\r\n\t\t\t}\r\n\t\t\t// 取得下一篇文章列表後再 bind 下篇文章載入的 scroll 事件,確保下一篇的 list 有資料\r\n\t\t\twindow.addEventListener('scroll', onScroll)\r\n\t\t})\r\n\t}\r\n\t// 儲存文章瀏覽數\r\n\tconst setCount = (ItemType, ItemNo)=>{\r\n\t\tconst token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJERVZJQ0VJRCI6IjEyMzQiLCJPUyI6IklPUyIsIlZFUlNJT04iOiIxMi4wLjEiLCJCV1BVU0hUT0tFTiI6IjU1NTU1NTU1IiwiVUlEIjoxNDEwMDkzLCJTVUJTQ1JJQkVSSUQiOiIiLCJFTUFJTCI6ImQwMDc3NzE0QHlhaG9vLmNvbSIsIkZBQ0VCT09LIjoiIiwiR09PR0xFIjoiIiwiTElORSI6IiIsIldFQ0hBVCI6IiIsIk5BTUUiOiLorJ3mmJXluq0iLCJOSUNLIjoiIiwiVklQIjowLCJVU0VSVFlQRSI6Iuacg-WToSIsImV4cCI6MTU1MjI3NDg2MCwibmJmIjoxNTUxNjcwMDYwfQ.pl9fxFJGxIw9ThbC0_8E_NsaBcgkWD-Kwl8gXR0b1Go'\r\n\t\tconst params = `SiteNo=${SITE_NO}&ItemType=${ItemType}&ItemNo=${ItemNo}&Token=${token}`\r\n\t\tfetch(SET_COUNT_API, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'\r\n\t\t\t},\r\n\t\t\tbody: params\r\n\t\t})\r\n\t}\r\n\r\n\t// 判斷下滑載入的定位點\r\n\tconst onScroll = () => {\r\n\t\tlet scrollY = document.documentElement.scrollTop || document.body.scrollTop;\r\n\t\tlet bodyHeight = document.body.clientHeight;\r\n\r\n\t\t// 捲動立即執行再次廣告載入,解決網頁載入緩慢會造成 requestAD 未執行完成的問題 (僅執行一次)\r\n\t\tif(adFirstLoad.current === false ){\r\n\t\t\trequestAd()\r\n\t\t\tadFirstLoad.current = true\r\n\t\t}\r\n\r\n\t\t// 文章捲動剩下螢幕高度的一半時載入\r\n\t\tif(scrollY+winH > bodyHeight-(winH*2)){\r\n\t\t\t// 如果正在讀取就return\r\n\t\t\tif(isLoading.current){\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t\t// 讀取下篇文章\r\n\t\t\tif(nextID.current {\r\n\t\tconst url = window.location.href\r\n\t\twindow.location = url;\r\n\t}\r\n\t// 下滑載入時改變網址\r\n\tconst changeUrl = (obj) => {\r\n\t\tconst { type, id } = obj\r\n\t\tif(id === nowID.current){\r\n\t\t\treturn\r\n\t\t}\r\n\t\tnowID.current = id\r\n\t\thistory.push(`${path+typeName[type]}/${id}`)\r\n\t}\r\n\t// Request Ad function,同時判斷 RequestAD 是否 bind\r\n\tconst requestAd = () => {\r\n\t\tif(!!window.RequestAD){\r\n\t\t\twindow.RequestAD();\r\n\t\t\treturn\r\n\t\t}\r\n\t\t// requestAd()\r\n\t}\r\n\t// 下滑載入新文章時 Request Ad\r\n\tconst loadAd = (id) => {\r\n\t\tif(id === adID.current){\r\n\t\t\treturn\r\n\t\t}\r\n\t\trequestAd()\r\n\t\tadID.current = id\r\n\t}\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{\t\r\n\t\t\t\t// 手機板 float 廣告板位 (PC 無 float 廣告)\r\n\t\t\t\twindow.innerWidth<1200 ? \r\n\t\t\t\t\tadState.filter(ad => ad.ID === adObj.float).map(ad => {\r\n\t\t\t\t\t\treturn \r\n\t\t\t\t\t})\r\n\t\t\t\t: null\r\n\t\t\t}\r\n\t\t\t
0?\"article_single wrap\":\"article_single wrap hide_more\"}>\r\n\t\t\t\t{\r\n\t\t\t\t\tarticleState.map(arr => )\r\n\t\t\t\t}\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default Article;\r\n","import React, { useState, useEffect, useContext } from 'react'\r\nimport { Link, useLocation } from 'react-router-dom'\r\nimport Context from '../../context/Context';\r\n\r\n// const ENV = process.env.REACT_APP_ENV\r\nconst href = window.location.href\r\nlet EVENT_PATH = null\r\nlet API = null\r\nif(href.search('test.') !== -1){\r\n\tEVENT_PATH = process.env.REACT_APP_EVENT_PATH_TEST;\r\n\tAPI = process.env.REACT_APP_EVENT_LIST_API_TEST;\r\n}else{\r\n\tEVENT_PATH = process.env.REACT_APP_EVENT_PATH;\r\n\tAPI = process.env.REACT_APP_EVENT_LIST_API;\r\n}\r\n\r\nconst EVENT_NAME = process.env.REACT_APP_EVENT_NAME;\r\nconst SITE_NO = process.env.REACT_APP_SITE_NO\r\nconst EVENT_ID = process.env.REACT_APP_EVENT_ID\r\nconst Status = 'n'\r\nconst Cache = 'y'\r\nconst params = `SiteNo=${SITE_NO}&ID=${EVENT_ID}&Status=${Status}&Cache=${Cache}`\r\n\r\nconst path = `${EVENT_PATH}/${EVENT_NAME}`\r\n\r\n\r\nconst Menu = props =>{\r\n\tconst [ menuState, menuChange ] = useState([]);\r\n\tconst [ listId, listIdChange ] = useState('');\r\n\tconst { menuType } = props;\r\n\r\n\t\r\n\tconst location = useLocation()\r\n\tconst pathname = location.pathname\r\n\tconst pathId = pathname.replace(`${path}/`,'')\r\n\t\r\n\tconst contextValue = useContext(Context);\r\n\tconst { menuBtnClick, setMeta } = contextValue;\r\n\r\n\tuseEffect(()=>{\r\n\t\tfetch(API, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'\r\n\t\t\t},\r\n\t\t\tbody: params\r\n\t\t}).then(result=>{\r\n\t\t\treturn result.json()\r\n\t\t}).then( res =>{\r\n\t\t\tmenuChange(menuState => [...res.JData.FeatureList])\r\n\t\t\tlistIdChange(listId => pathId)\r\n\t\t})\r\n\t}, [pathId]);\r\n\t\r\n\tconst menuClick =\t(title) => {\r\n\t\tmenuBtnClick()\r\n\t\tsetMeta(title)\r\n\t}\r\n\treturn(\r\n\t\t
\r\n\t\t\t{\r\n\t\t\t\tmenuState.map((item, index) => (\r\n\t\t\t\t\tindex>=6?null:\r\n\t\t\t\t\titem.MenuUrl === 'home'? null:\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t menuClick(item.Title)}>\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t

{item.Title}

\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t))\r\n\t\t\t}\r\n\t\t
\r\n\t)\r\n}\r\n\r\nexport default Menu;","import React, { useContext } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport Context from '../../context/Context';\r\nimport Menu from './Menu'\r\n\r\nconst href = window.location.href\r\nlet EVENT_PATH = null\r\nif(href.search('test.') !== -1){\r\n\tEVENT_PATH = process.env.REACT_APP_EVENT_PATH_TEST;\r\n}else{\r\n\tEVENT_PATH = process.env.REACT_APP_EVENT_PATH;\r\n}\r\nconst SEARCH_URL = process.env.REACT_APP_SEARCH_URL\r\nconst EVENT_NAME = process.env.REACT_APP_EVENT_NAME;\r\n\r\nconst path = `${EVENT_PATH}/${EVENT_NAME}`\r\n\r\nconst Header = ()=>{\r\n\tconst contextValue = useContext(Context);\r\n\tconst { menuOpen, menuBtnClick, setMeta } = contextValue;\r\n\r\n\tconst handleSubmit = (e) => {\r\n\t\te.preventDefault();\r\n\t\tconst headerKeyWordVal = e.target.headerKeyWord.value;\r\n\t\tif(!!headerKeyWordVal === false) {\r\n\t\t\treturn\r\n\t\t}\r\n\t\twindow.open(SEARCH_URL+headerKeyWordVal)\r\n\t}\r\n\r\n\treturn(\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\tsetMeta()}>\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\tHome\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t
menuBtnClick()}>\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t)\r\n}\r\n\r\nexport default Header;","import React from 'react'\r\n\r\nconst Footer = ()=>{\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t

網站版權屬於城邦文化事業股份有限公司所有,未經本站同意,請勿擅用文字及圖案 | 隱私權聲明\r\n\t\t\t\t\t
\r\n\t\t\t\tCopyright © 2019 Business Weekly a division of Cite Publishing Ltd All Rights Reserved.

\r\n\t\t\t
\r\n\t\t
\r\n\t)\r\n}\r\nexport default Footer","import React, { useState, useEffect, useRef } from 'react'\r\nimport { Switch, Route, useLocation } from 'react-router-dom'\r\nimport { Provider } from './context/Context';\r\nimport Home from './pages/Home'\r\nimport List from './pages/List'\r\nimport Article from './pages/Article'\r\nimport Header from './components/main/Header'\r\nimport Footer from './components/main/Footer'\r\n\r\n// const ENV = process.env.REACT_APP_ENV;\r\nconst href = window.location.href\r\nlet EVENT_PATH = null\r\nif(href.search('test.') !== -1){\r\n\tEVENT_PATH = process.env.REACT_APP_EVENT_PATH_TEST;\r\n}else{\r\n\tEVENT_PATH = process.env.REACT_APP_EVENT_PATH;\r\n}\r\n\r\nconst EVENT_NAME = process.env.REACT_APP_EVENT_NAME;\r\nconst EVENT_NAME_CH = process.env.REACT_APP_EVENT_NAME_CH;\r\n\r\n\r\nconst App = ()=>{\r\n\tconst [ pageTrans, pageTransChange ] = useState(false);\r\n\tconst [ menuOpen, menuToggle ] = useState(false);\r\n\r\n\tconst location = useLocation()\r\n\tconst pathname = location.pathname\r\n\tconst listID = pathname.replace(`${EVENT_PATH}/${EVENT_NAME}/`,'')\r\n\tconst currentUrl = useRef(null)\r\n\tconst currentTitle = useRef(document.title)\r\n\t\r\n\tuseEffect(() => {\r\n\t\tsetGA(pathname)\r\n\t}, [pathname]);\r\n\r\n\t// 頁面切換的 fadein 動態\r\n\tconst pageChange = () => {\r\n\t\tpageTransChange(pageTrans => !pageTrans)\r\n\t}\r\n\t// 更新手機板選單開關狀態\r\n\tconst menuBtnClick = () => {\r\n\t\tmenuToggle(menuOpen => !menuOpen)\r\n\t}\r\n\t// \r\n\tconst setGA = (url) => {\r\n\t\tif(url === currentUrl.current) return\r\n\t\twindow.gtag('config', 'UA-904208-83', {'page_path': url});\r\n\t\twindow.gtag('config', 'UA-904208-84', {'page_path': url});\r\n\t\twindow.gtag('config', 'UA-904208-88', {'page_path': url});\r\n\t\t// 個人帳號測試\r\n\t\twindow.gtag('config', 'UA-146672010-3', {'page_path': url});\r\n\t\tcurrentUrl.current = url\r\n\t}\r\n\tconst setMeta = (title) => {\r\n\t\tif(title === currentTitle.current) return\r\n\t\tlet t = null;\r\n\t\tif(!!title === false){\r\n\t\t\tt = EVENT_NAME_CH\r\n\t\t}else{\r\n\t\t\tt = `${title}-${EVENT_NAME_CH}`\r\n\t\t}\r\n\t\tdocument.title = t\r\n\t\tcurrentTitle.current = t\r\n\t}\r\n\t\r\n\tconst contextValue = {\r\n\t\tpageTrans: pageTrans,\r\n\t\tpageChange: pageChange,\r\n\t\tmenuOpen: menuOpen,\r\n\t\tmenuBtnClick: menuBtnClick,\r\n\t\tsetMeta: setMeta,\r\n\t}\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t
\r\n\t)\r\n}\r\n\r\nexport default App;","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter } from 'react-router-dom';\n\n// 支援 IE 11\nimport 'react-app-polyfill/ie11'\nimport 'react-app-polyfill/stable'\n\nimport App from './App';\n// import 'sass/style.sass';\n\nimport * as serviceWorker from './serviceWorker';\nReactDOM.render(\n\t\n\t\t\n\t, \n\tdocument.getElementById('root'))\n\t\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n "],"sourceRoot":""}