1// è¨èª, å 責 2let lang, disclaimer, globalDrawFinish; 3 4const today = new Date(); 5 6// ãããã¯ããã¼åå¾ 7const product = document.querySelector('#sw-stock-board'); 8 9// ãã¼ã¿åå¾URL 10const data_url = new URL(product.dataset.swDeliverableOrigin + '/board/json?product=' + product.dataset.swProductKey + '&panel=' + product.dataset.swDownloadPanelKey); 11 12async function fetchData(url) { 13 try { 14 const data = await fetch(url).then(response => response.json()); 15 if (data && Object.keys(data).length > 0) { 16 return data; 17 } else { 18 console.error("åå¾ãããã¼ã¿ãç¡å¹ã§ã"); 19 } 20 } catch (error) { 21 console.error("ãã¼ã¿ã®åå¾ã«å¤±æãã¾ãã:", error); 22 } 23} 24 25// ã³ã¼ãã¬ã¼ãã«ã©ã¼èæ¯è²ééï¼hex â rgba ã«å¤æï¼ 26function hexToRGBA(hex, alpha) { 27 const r = parseInt(hex.slice(1, 3), 16); 28 const g = parseInt(hex.slice(3, 5), 16); 29 const b = parseInt(hex.slice(5, 7), 16); 30 return `rgba(${r}, ${g}, ${b}, ${alpha})`; 31} 32 33// å 責äºé çæ 34function generateDisclaimer(disclaimerData) { 35 const fragment = document.createDocumentFragment(); 36 37 // è¨èªãã¨ã«ãã¼ã¿ãå¦ç 38 Object.keys(disclaimerData).forEach(lang => { 39 const textArray = disclaimerData[lang]; 40 41 // ãã¼ã¿ãããå ´åã®ã¿å¦ç 42 if (textArray && textArray.length) { 43 textArray.forEach(text => { 44 // æ¹è¡ã³ã¼ãã<br>ã¿ã°ã«ç½®ãæã 45 const formattedText = text.replace(/\r\n/g, '<br>'); 46 47 // pã¿ã°ãçæãã¦å å®¹ãæ¿å ¥ 48 const p = document.createElement('p'); 49 p.setAttribute('data-sw-lang-txt', lang); 50 p.setAttribute('data-sw-txt-hide', ''); 51 p.innerHTML = formattedText; 52 53 fragment.appendChild(p); 54 }); 55 } 56 }); 57 58 return fragment; 59} 60 61// çæããHTMLãæ¿å ¥ 62function insertGeneratedHTML(disclaimerData) { 63 // ---å 責äºé pã¿ã° 64 const generatedDisclaimerHTML = generateDisclaimer(disclaimerData); 65 const disclaimerContainer = document.querySelector('.sw-disclaimer'); 66 if (generatedDisclaimerHTML && disclaimerContainer) {// çæããã¦ããå ´å&sw-disclaimerãããå ´åã®ã¿æ¿å ¥ 67 disclaimerContainer.appendChild(generatedDisclaimerHTML); 68 } 69} 70 71// 鏿è¨èªã«å¿ã㦠data-sw-txt-hide="on" 追å 72function setLangOption() { 73 const dataNameTxt = document.querySelectorAll('[data-sw-lang-txt]'); 74 for (let i = 0; i < dataNameTxt.length; i++) { 75 let dataNameTxtLng = dataNameTxt[i].dataset.swLangTxt; 76 if (lang === 'ja') { 77 dataNameTxt[i].dataset.swTxtHide = (dataNameTxtLng === "ja" ? '' : 'on'); 78 } else { 79 dataNameTxt[i].dataset.swTxtHide = (dataNameTxtLng === "en" ? '' : 'on'); 80 } 81 } 82} 83 84// æ ªä¾¡æ å ±è¡¨ç¤º 85function StockPrice(data) { 86 const formatNumber = (value, minDigits, maxDigits) => 87 value !== null ? Number(value).toLocaleString(undefined, { minimumFractionDigits: minDigits, maximumFractionDigits: maxDigits }) : null; 88 89 const formatDate = (date) => 90 // date !== null ? new Date(date) : null; 91 date !== null ? new Date(date).toLocaleString() : null; 92 93 const stockData = { 94 code: data.Code, 95 exchange: data.Exchange, 96 market: data.Market, 97 stockPrice: data.StockPrice, 98 tradeDate: formatDate(data.TradeDate), 99 price: formatNumber(data.Price,1,1), 100 change: formatNumber(data.Change,1,1), 101 changeRatio: formatNumber(data.ChangeRatio,2,2), 102 open: formatNumber(data.Open,1,1), 103 openTime: formatDate(data.OpenTime), 104 high: formatNumber(data.High,1,1), 105 highTime: formatDate(data.HighTime), 106 low: formatNumber(data.Low,1,1), 107 lowTime: formatDate(data.LowTime),
108 volume: formatNumber(data.Volume,0,0), 109 volumeTime: formatDate(data.VolumeTime), 110 closing: formatNumber(data.Closing,1,1), 111 closingDate: formatDate(data.ClosingDate), 112 salesProceeds: formatNumber(data.SalesProceeds,1,1), 113 numberOfContracts: formatNumber(data.NumberOfContracts,0,0), 114 yearToDateHigh: formatNumber(data.YearToDateHigh,1,1), 115 yearToDateHighDate: formatDate(data.YearToDateHighDate), 116 yearToDateLow: formatNumber(data.YearToDateLow,1,1), 117 yearToDateLowDate: formatDate(data.YearToDateLowDate), 118 basePrice: formatNumber(data.BasePrice,1,1), 119 basePriceDate: formatDate(data.BasePriceDate), 120 dividend: formatNumber(data.Dividend,1,1), 121 dividendDate: formatDate(data.DividendDate), 122 dividendRatio: formatNumber(data.DividendRatio,1,1), 123 dividendRatioDate: formatDate(data.DividendRatioDate), 124 dividendYield: formatNumber(data.DividendYield,1,1), 125 dividendYieldDate: formatDate(data.DividendYieldDate), 126 expectedDividend: formatNumber(data.ExpectedDividend,1,1), 127 expectedDividendDate: formatDate(data.ExpectedDividendDate), 128 expectedDividendRatio: formatNumber(data.ExpectedDividendRatio,1,1), 129 expectedDividendRatioDate: formatDate(data.ExpectedDividendRatioDate), 130 expectedDividendYield: formatNumber(data.ExpectedDividendYield,1,1), 131 expectedDividendYieldDate: formatDate(data.ExpectedDividendYieldDate), 132 epsActual: formatNumber(data.EpsActual,1,1), 133 epsActualDate: formatDate(data.EpsActualDate), 134 epsForecast: formatNumber(data.EpsForecast,1,1), 135 epsForecastDate: formatDate(data.EpsForecastDate), 136 bpsActual: formatNumber(data.BpsActual,1,1), 137 bpsActualDate: formatDate(data.BpsActualDate), 138 perForecast: formatNumber(data.PerForecast,1,1), 139 perForecastDate: formatDate(data.PerForecastDate), 140 perActual: formatNumber(data.PerActual,1,1), 141 perActualDate: formatDate(data.PerActualDate), 142 pbrActual: formatNumber(data.PbrActual,1,1), 143 pbrActualDate: formatDate(data.PbrActualDate), 144 psrForecast: formatNumber(data.PsrForecast,1,1), 145 psrForecastDate: formatDate(data.PsrForecastDate), 146 psrActual: formatNumber(data.PsrActual,1,1), 147 psrActualDate: formatDate(data.PsrActualDate), 148 roaActual: formatNumber(data.RoaActual,1,1), 149 roaActualDate: formatDate(data.RoaActualDate), 150 roeActual: formatNumber(data.RoeActual,1,1), 151 roeActualDate: formatDate(data.RoeActualDate), 152 roicActual: formatNumber(data.RoicActual,1,1), 153 roicActualDate: formatDate(data.RoicActualDate), 154 roaForecast: formatNumber(data.RoaForecast,1,1), 155 roaForecastDate: formatDate(data.RoaForecastDate), 156 roeForecast: formatNumber(data.RoeForecast,1,1), 157 roeForecastDate: formatDate(data.RoeForecastDate), 158 roicForecast: formatNumber(data.RoicForecast,1,1), 159 roicForecastDate: formatDate(data.RoicForecastDate), 160 ebitda: formatNumber(data.Ebitda,1,1), 161 ebitdaDate: formatDate(data.EbitdaDate), 162 doe: formatNumber(data.Doe,1,1), 163 doeDate: formatDate(data.DoeDate), 164 equityRatio: formatNumber(data.EquityRatio,1,1), 165 equityRatioDate: formatDate(data.EquityRatioDate), 166 totalAssets: formatNumber(data.TotalAssets,0,0), 167 totalAssetsDate: formatDate(data.TotalAssetsDate), 168 netWorthActual: formatNumber(data.NetWorthActual,0,0), 169 netWorthActualDate: formatDate(data.NetWorthActualDate), 170 marketCap: formatNumber(data.MarketCap,2,2), 171 marketCapDate: formatDate(data.MarketCapDate), 172 sharesOutstanding: formatNumber(data.SharesOutstanding,0,0), 173 sharesOutstandingDate: formatDate(data.SharesOutstandingDate), 174 treasuryStock: formatNumber(data.TreasuryStock,0,0), 175 treasuryStockDate: formatDate(data.TreasuryStockDate), 176 sales: formatNumber(data.Sales,0,0), 177 salesDate: formatDate(data.SalesDate), 178 operatingProfit: formatNumber(data.OperatingProfit,0,0), 179 operatingProfitDate: formatDate(data.OperatingProfitDate), 180 ordinaryProfit: formatNumber(data.OrdinaryProfit,0,0), 181 ordinaryProfitDate: formatDate(data.OrdinaryProfitDate), 182 netProfit: formatNumber(data.NetProfit,0,0), 183 netProfitDate: formatDate(data.NetProfitDate), 184 netProfitParent: formatNumber(data.NetProfitParent,0,0), 185 netProfitParentDate: formatDate(data.NetProfitParentDate), 186 operatingProfitRatio: formatNumber(data.OperatingProfitRatio,1,1), 187 operatingProfitRatioDate: formatDate(data.OperatingProfitRatioDate), 188 ordinaryProfitRatio: formatNumber(data.OrdinaryProfitRatio,1,1), 189 ordinaryProfitRatioDate: formatDate(data.OrdinaryProfitRatioDate), 190 netProfitRatio: formatNumber(data.NetProfitRatio,1,1), 191 netProfitRatioDate: formatDate(data.NetProfitRatioDate), 192 netProfitParentRatio: formatNumber(data.NetProfitParentRatio,1,1), 193 netProfitParentRatioDate: formatDate(data.NetProfitParentRatioDate), 194 salesForecast: formatNumber(data.SalesForecast,0,0), 195 salesForecastDate: formatDate(data.SalesForecastDate), 196 operatingProfitForecast: formatNumber(data.OperatingProfitForecast,0,0), 197 operatingProfitForecastDate: formatDate(data.OperatingProfitForecastDate), 198 ordinaryProfitForecast: formatNumber(data.OrdinaryProfitForecast,0,0), 199 ordinaryProfitForecastDate: formatDate(data.OrdinaryProfitForecastDate), 200 netProfitForecast: formatNumber(data.NetProfitForecast,0,0), 201 netProfitForecastDate: formatDate(data.NetProfitForecastDate), 202 netProfitParentForecast: formatNumber(data.NetProfitParentForecast,0,0), 203 netProfitParentForecastDate: formatDate(data.NetProfitParentForecastDate), 204 operatingProfitRatioForecast: formatNumber(data.OperatingProfitRatioForecast,1,1), 205 operatingProfitRatioForecastDate: formatDate(data.OperatingProfitRatioForecastDate), 206 ordinaryProfitRatioForecast: formatNumber(data.OrdinaryProfitRatioForecast,1,1), 207 ordinaryProfitRatioForecastDate: formatDate(data.OrdinaryProfitRatioForecastDate), 208 netProfitRatioForecast: formatNumber(data.NetProfitRatioForecast,1,1), 209 netProfitRatioForecastDate: formatDate(data.NetProfitRatioForecastDate), 210 netProfitParentRatioForecast: formatNumber(data.NetProfitParentRatioForecast,1,1), 211 netProfitParentRatioForecastDate: formatDate(data.NetProfitParentRatioForecastDate), 212 sharesUnitNumber: formatNumber(data.SharesUnitNumber,0,0), 213 minimumPurchasePrice: formatNumber(data.MinimumPurchasePrice,1,1), 214 sellingPrice: formatNumber(data.SellingPrice,1,1), 215 sellingPriceTime: formatDate(data.SellingPriceTime), 216 buyingSpree: formatNumber(data.BuyingSpree,1,1), 217 buyingSpreeTime: formatDate(data.BuyingSpreeTime), 218 nikkei225: data.Nikkei225, 219 fiscalYearEnd: data.FiscalYearEnd, 220 quarterType: data.QuarterType 221 }; 222 223 const { tradeDate } = stockData; // å弿¥æ 224 const { closingDate } = stockData; // çµå¤æ¥æ 225 const { stockPrice } = stockData; // ãã¼ã¿æ´æ°ã¿ã¤ãã³ã° 226 227 // äºæ³ç¨æ±ºç®ææ´å½¢ 228 function formatCustomFiscalYearEnd(fiscalYearEnd, quarterType) { 229 if (!fiscalYearEnd || isNaN(fiscalYearEnd)) { 230 return null; // ç¡å¹ãªå ´å㯠null 231 } 232 if (quarterType === 'FY') { 233 fiscalYearEnd = parseInt(fiscalYearEnd, 10) + 100; 234 } 235 fiscalYearEnd = today.getFullYear().toString().slice(0, 2) + fiscalYearEnd; 236 return fiscalYearEnd; 237 } 238 const { fiscalYearEnd, quarterType } = stockData; 239 const customFiscalYearEnd = formatCustomFiscalYearEnd(fiscalYearEnd, quarterType); 240 241 // 忥æ¯çã«()ãã¤ããå ´åï¼spanã¿ã°çæ 242 const spanTag = document.createElement('span'); 243 244 // 忥æ¯ã»åæ¥æ¯çæ´å½¢ 245 function formatDataIncreaseDecrease(value) { 246 let formattedValue; 247 248 // ï¼ã¼ ã®å ´å 249 formattedValue = Math.sign(value) > 0 ? `+${value}` : value; 250 251 // ââ ã®å ´å 252 // if (value === 0) { 253 // formattedValue = value; // å¤ã 0 ã®å ´åããã®ã¾ã¾åºå 254 // } else if (value > 0) { 255 // formattedValue = `<span class="sw-arrow-up"></span>${value}`; // æ£ã®å¤ã®å ´å 256 // } else { 257 // formattedValue = `<span class="sw-arrow-down"></span>${Math.abs(value)}`; // è² ã®å¤ã®å ´å 258 // } 259 260 return formattedValue; 261 } 262 263 // è±èªå¤å® 264 //const isEnglish = lang === 'en'; 265 /**** SR added! Custom language detection. Needed for tradeDate ****/ 266 const tradeDateLanguage = document.querySelector('[data-sw-id-name="tradeDate"]').getAttribute('data-sr-lang-txt'); 267 const isEnglish = tradeDateLanguage === 'en'; 268 269 // æ¥ä»æ´å½¢ 270 function formatCustomDate(dateInput, dataNameId, fiscalYearEnd) { 271 if (!dateInput || dateInput === '-') return '-'; 272 const date = new Date(dateInput); 273 274 // æ¥ä»ãã¼ãåå¾ 275 const year = date.getFullYear();
276 const month = String(date.getMonth() + 1).padStart(2,'0'); 277 const day = String(date.getDate()).padStart(2,'0'); 278 const hours = String(date.getHours()).padStart(2,'0'); 279 const minutes = String(date.getMinutes()).padStart(2,'0'); 280 281 const monthEn = date.toLocaleString('en-US',{month:'short'}); 282 const weekdayEn = date.toLocaleString('en-US',{weekday:'short'}); 283 284 const dayNamesJa = ['æ¥','æ','ç«','æ°´','æ¨','é','å']; 285 const weekdayJa = dayNamesJa[date.getDay()]; 286 287 // ç§æ´å½¢ 288 const stripSeconds = d => { 289 const t = new Date(d); 290 t.setSeconds(0,0); 291 return +t; 292 }; 293 const tradeTrim = stripSeconds(tradeDate); 294 const closeTrim = stripSeconds(closingDate); 295 const dateTrim = stripSeconds(date); 296 297 // äºæ³ã»å®ç¸¾ã®ãã¼ã¿æ´æ°æ¥ä»å¦ç 298 const targetDate = [ 299 'expectedDividendDate','dividendDate', 300 'expectedDividendYieldDate','dividendYieldDate', 301 'epsForecastDate','epsActualDate','bpsActualDate', 302 'perForecastDate','perActualDate','pbrActualDate', 303 'roeForecastDate','roeActualDate', 304 'roaForecastDate','roaActualDate', 305 'roicForecastDate','roicActualDate', 306 'marketCapDate','sharesOutstandingDate','treasuryStockDate' 307 ]; 308 309 if (targetDate.includes(dataNameId)) { 310 311 if (dateTrim === tradeTrim || dateTrim === closeTrim) { 312 return null; 313 } 314 315 if (/[eE]xpected|[fF]orecast/.test(dataNameId)) { 316 317 const FYyear = fiscalYearEnd.slice(0,4); 318 const FYmonth = fiscalYearEnd.slice(-2); 319 320 return isEnglish 321 ? `${FYyear}.${FYmonth}(${year}.${month}.${day} JTS)` 322 : `${FYyear}/${FYmonth}(${year}/${month}/${day}æç¹)`; 323 } 324 } 325 326 // 表示ã¿ã¤ãåé¡ 327 const dateTypeMap = { 328 tradeDate: 'fullDateWithTime', 329 closingDate: 'fullDateWithTime', 330 yearToDateHighDate: 'fullDate', 331 yearToDateLowDate: 'fullDate', 332 basePriceDate: 'fullDate', 333 dividendDate: 'monthYearWithText',// **å®ç¸¾ 334 dividendRatioDate: 'monthYear', 335 dividendYieldDate: 'monthYearWithText',// **å®ç¸¾ 336 expectedDividendDate: 'monthYear',// **äºæ³ 337 expectedDividendRatioDate: 'monthYear', 338 expectedDividendYieldDate: 'monthYear',// **äºæ³ 339 epsActualDate: 'monthYearWithText',// **å®ç¸¾ 340 epsForecastDate: 'monthYear',// **äºæ³ 341 bpsActualDate: 'monthYearWithText',// **å®ç¸¾ 342 perForecastDate: 'monthYear',// **äºæ³ 343 perActualDate: 'monthYearWithText',// **å®ç¸¾ 344 pbrActualDate: 'monthYearWithText',// **å®ç¸¾ 345 psrForecastDate: 'monthYear', 346 psrActualDate: 'monthYear', 347 roaActualDate: 'monthYearWithText',// **å®ç¸¾ 348 roeActualDate: 'monthYearWithText',// **å®ç¸¾ 349 roicActualDate: 'monthYearWithText',// **å®ç¸¾ 350 roaForecastDate: 'monthYear',// **äºæ³ 351 roeForecastDate: 'monthYear',// **äºæ³ 352 roicForecastDate: 'monthYear',// **äºæ³ 353 ebitdaDate: 'monthYear', 354 doeDate: 'monthYear', 355 equityRatioDate: 'monthYear', 356 totalAssetsDate: 'monthYear', 357 netWorthActualDate: 'monthYear', 358 marketCapDate: 'monthYearWithText',// *å®ç¸¾ã¨åæ§ 359 sharesOutstandingDate: 'monthYearWithText',// *å®ç¸¾ã¨åæ§ 360 treasuryStockDate: 'monthYearWithText',// *å®ç¸¾ã¨åæ§ 361 salesDate: 'monthYear', 362 operatingProfitDate: 'monthYear', 363 ordinaryProfitDate: 'monthYear', 364 netProfitDate: 'monthYear', 365 netProfitParentDate: 'monthYear', 366 operatingProfitRatioDate: 'monthYear', 367 ordinaryProfitRatioDate: 'monthYear', 368 netProfitRatioDate: 'monthYear', 369 netProfitParentRatioDate: 'monthYear', 370 salesForecastDate: 'monthYear', 371 operatingProfitForecastDate: 'monthYear', 372 ordinaryProfitForecastDate: 'monthYear', 373 netProfitForecastDate: 'monthYear', 374 netProfitParentForecastDate: 'monthYear', 375 operatingProfitRatioForecastDate: 'monthYear', 376 ordinaryProfitRatioForecastDate: 'monthYear', 377 netProfitRatioForecastDate: 'monthYear', 378 netProfitParentRatioForecastDate: 'monthYear', 379 volumeTime: 'time', 380 openTime: 'time', 381 highTime: 'time', 382 lowTime: 'time', 383 sellingPriceTime: 'time', 384 buyingSpreeTime: 'time', 385 }; 386 387 const type = dateTypeMap[dataNameId]; 388 389 // åºå 390 switch(type){ 391 392 case 'fullDateWithDay': 393 return isEnglish 394 ? `${weekdayEn}, ${monthEn}. ${day}, ${year} ${hours}:${minutes} JST` 395 : `${year}/${month}/${day}(${weekdayJa}) ${hours}:${minutes}`; 396 397 case 'fullDateWithTime': 398 return isEnglish 399 ? `${monthEn}. ${day}, ${year} ${hours}:${minutes} JST` 400 : `${year}/${month}/${day} ${hours}:${minutes}`; 401 402 case 'fullDate': 403 return isEnglish 404 ? `${month}.${day}.${year}` 405 : `${year}/${month}/${day}`; 406 407 case 'fullDateWithText': 408 return isEnglish 409 ? `${month}.${day}.${year}` 410 : `${year}/${month}/${day}æç¹`; 411 412 case 'monthYear': 413 return isEnglish 414 ? `${month}.${year}` 415 : `${year}/${month}`; 416 417 case 'monthYearWithText': 418 return isEnglish 419 ? `${month}.${year}` 420 : `${year}/${month}æç¹`; 421 422 case 'time': 423 return `${hours}:${minutes}`; 424 425 default: 426 return '-'; 427 } 428 } 429 430 // HTMLè¦ç´ ã«ãã¼ã¿ãã»ãã 431 function setDataToElement(dataNameId, value, isChangeRatio = false, stockPriceObj = {}) { 432 const dataNameUnit = document.querySelector(`[data-sw-id-name="${dataNameId}"]`); 433 if (dataNameUnit) { 434 dataNameUnit.innerHTML = value; 435 436 // 忥æ¯çã«()ãã¤ããå ´åï¼spanã¿ã°è¿½å 437 if (isChangeRatio) { 438 dataNameUnit.appendChild(spanTag); 439 } 440 441 // "price" ã㤠stockPrice ã "çµå¤" ã®å ´åã« dt ãæ¸ãæã 442 if (dataNameId === "price" && stockPriceObj?.stockPrice === "çµå¤") { 443 const dtElement = dataNameUnit.closest("dl")?.querySelector("dt"); 444 if (dtElement) { 445 const jaSpan = dtElement.querySelector('[data-sw-lang-txt="ja"]'); 446 const enSpan = dtElement.querySelector('[data-sw-lang-txt="en"]'); 447 if (jaSpan) jaSpan.textContent = "çµå¤"; 448 if (enSpan) enSpan.textContent = "Close"; 449 } 450 } 451 } 452 } 453 454 // ã«ã¼ãã§ãã¼ã¿ãé©ç¨ 455 const dataName = document.querySelectorAll('[data-sw-id-name]'); 456 457 // --æ¥ä»å¦ç群 458 const dateFields = new Set([ 459 'tradeDate', 'closingDate', 'yearToDateHighDate', 'yearToDateLowDate', 'basePriceDate', 460 'dividendDate', 'dividendRatioDate', 'dividendYieldDate', 461 'expectedDividendDate', 'expectedDividendRatioDate', 'expectedDividendYieldDate', 462 'epsActualDate', 'epsForecastDate', 'bpsActualDate',
463 'perForecastDate', 'perActualDate', 'pbrActualDate', 'psrForecastDate', 'psrActualDate', 464 'roaActualDate', 'roeActualDate', 'roicActualDate', 465 'roaForecastDate', 'roeForecastDate', 'roicForecastDate', 466 'ebitdaDate', 'doeDate', 467 'equityRatioDate', 'totalAssetsDate', 'netWorthActualDate', 468 'marketCapDate', 'sharesOutstandingDate', 'treasuryStockDate', 469 'salesDate', 'operatingProfitDate', 'ordinaryProfitDate', 'netProfitDate', 'netProfitParentDate', 470 'operatingProfitRatioDate', 'ordinaryProfitRatioDate', 'netProfitRatioDate', 'netProfitParentRatioDate', 471 'salesForecastDate', 'operatingProfitForecastDate', 'ordinaryProfitForecastDate', 'netProfitForecastDate', 'netProfitParentForecastDate', 472 'operatingProfitRatioForecastDate', 'ordinaryProfitRatioForecastDate', 'netProfitRatioForecastDate', 'netProfitParentRatioForecastDate' 473 ]); 474 475 // --æéå¦ç群 476 const timeFields = new Set([ 477 'openTime', 'highTime', 'lowTime', 'volumeTime', 478 'sellingPriceTime', 'buyingSpreeTime' 479 ]); 480 481 // --åå¥å¦ç群 482 const fieldHandlers = { 483 price: (id, val) => {// ç¾å¤ï¼ã¾ãã¯ï¼çµå¤ 484 const formatted = val.replace(/(\.\S)/g, "<span>$&</span>"); 485 setDataToElement(id, formatted, false, { stockPrice }); 486 }, 487 change: (id, val) => { 488 setDataToElement(id, formatDataIncreaseDecrease(val)); 489 }, 490 changeRatio: (id, val) => { 491 setDataToElement(id, formatDataIncreaseDecrease(val), true); 492 }, 493 code: (id, val) => { 494 val = isEnglish ? val + ' JPY' : val; 495 setDataToElement(id, val); 496 }, 497 market: (id, val) => {// å¸å ´ 498 if (isEnglish) { 499 if (val === 'æ±è¨¼ãã©ã¤ã ') { 500 val = 'TSE Prime'; 501 } else if (val === 'æ±è¨¼ã¹ã¿ã³ãã¼ã') { 502 val = 'TSE Standard'; 503 } else if (val === 'æ±è¨¼ã°ãã¼ã¹') { 504 val = 'TSE Growth'; 505 } else if (val === 'æè¨¼') { 506 val = 'Sapporo'; 507 } else if (val === 'ç¦è¨¼') { 508 val = 'Fukuoka'; 509 } 510 } 511 setDataToElement(id, val); 512 }, 513 stockPrice: (id, val) => {// æ ªä¾¡è¡¨ç¤º 514 if (isEnglish) { 515 if (val === 'ãªã¢ã«ã¿ã¤ã ') { 516 val = 'Real-Time'; 517 } else if (val === 'çµå¤') { 518 val = 'Closing Price'; 519 } 520 } 521 setDataToElement(id, val); 522 }, 523 marketCap: (id, val) => {// æä¾¡ç·é¡ãååï¼billion夿 524 if (isEnglish) { 525 if (typeof val === "string") { 526 val = val.replace(/,/g, ""); 527 } 528 val = Number(val / 10).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }); 529 } 530 setDataToElement(id, val); 531 }, 532 nikkei225: (id, val) => {// æ¥çµå¹³åæ¡ç¨éæ 533 if (val === 1) { 534 val = isEnglish ? 'NIKKEI 225 Stock value' : 'æ¥çµå¹³åæ¡ç¨éæ'; 535 } else { 536 val = '-'; 537 } 538 setDataToElement(id, val); 539 } 540 }; 541 542 // --åºæ¬åå² 543 function handleDataField(dataNameId, value, customFiscalYearEnd) { 544 if (fieldHandlers[dataNameId]) { 545 // åå¥å®ç¾©ããããã£ã¼ã«ãå¦ç 546 fieldHandlers[dataNameId](dataNameId, value); 547 } else if (dateFields.has(dataNameId)) { 548 // æ¥ä»ãã£ã¼ã«ã 549 setDataToElement(dataNameId, formatCustomDate(value, dataNameId, customFiscalYearEnd)); 550 } else if (timeFields.has(dataNameId)) { 551 // æéãã£ã¼ã«ã 552 setDataToElement(dataNameId, formatCustomDate(value, dataNameId, customFiscalYearEnd)); 553 } else { 554 // ããã©ã«ãå¦ç 555 setDataToElement(dataNameId, value); 556 } 557 } 558 559 dataName.forEach(item => { 560 const dataNameId = item.dataset.swIdName; 561 let value = (stockData[dataNameId] !== null && stockData[dataNameId] !== '') ? stockData[dataNameId] : '-'; 562 handleDataField(dataNameId, value, customFiscalYearEnd); 563 });
564 565 // ãã¼ã¿å±æ§ã®å¤ã«å¿ãã¦åä½ãä»ä¸ãã(æ¥æ¬èª/è±èª) 566 for (let i = 0; i < dataName.length; i++) { 567 const idName = dataName[i].dataset.swIdName; 568 switch (idName) { 569 case 'price': 570 case 'change': 571 case 'open': 572 case 'high': 573 case 'low': 574 case 'closing': 575 case 'yearToDateHigh': 576 case 'yearToDateLow': 577 case 'basePrice': 578 case 'epsActual': 579 case 'epsForecast': 580 case 'bpsActual': 581 case 'ebitda': 582 case 'minimumPurchasePrice': 583 case 'sellingPrice': 584 case 'buyingSpree': 585 dataName[i].dataset.swUnitType = isEnglish ? 'yen' : 'å'; 586 break; 587 case 'changeRatio': 588 case 'dividendRatio': 589 case 'dividendYield': 590 case 'expectedDividendRatio': 591 case 'expectedDividendYield': 592 case 'roaActual': 593 case 'roeActual': 594 case 'roicActual': 595 case 'roaForecast': 596 case 'roeForecast': 597 case 'roicForecast': 598 case 'doe': 599 case 'equityRatio': 600 case 'operatingProfitRatio': 601 case 'ordinaryProfitRatio': 602 case 'netProfitRatio': 603 case 'netProfitParentRatio': 604 case 'operatingProfitRatioForecast': 605 case 'ordinaryProfitRatioForecast': 606 case 'netProfitRatioForecast': 607 case 'netProfitParentRatioForecast': 608 dataName[i].dataset.swUnitType = isEnglish ? '%' : 'ï¼ '; 609 break; 610 case 'perForecast': 611 case 'perActual': 612 case 'pbrActual': 613 case 'psrForecast': 614 case 'psrActual': 615 dataName[i].dataset.swUnitType = isEnglish ? '' : 'å'; 616 break; 617 case 'dividend': 618 case 'expectedDividend': 619 dataName[i].dataset.swUnitType = isEnglish ? '' : 'å/æ ª'; 620 break; 621 case 'volume': 622 case 'sharesOutstanding': 623 case 'treasuryStock': 624 case 'sharesUnitNumber': 625 dataName[i].dataset.swUnitType = isEnglish ? '' : 'æ ª'; 626 break; 627 case 'salesProceeds': 628 case 'totalAssets': 629 case 'netWorthActual': 630 case 'sales': 631 case 'operatingProfit': 632 case 'ordinaryProfit': 633 case 'netProfit': 634 case 'netProfitParent': 635 case 'salesForecast': 636 case 'operatingProfitForecast': 637 case 'ordinaryProfitForecast': 638 case 'netProfitForecast': 639 case 'netProfitParentForecast': 640 dataName[i].dataset.swUnitType = isEnglish ? 'million yen' : 'ç¾ä¸å'; 641 break; 642 case 'marketCap': 643 dataName[i].dataset.swUnitType = isEnglish ? 'billion yen' : 'åå'; 644 break; 645 case 'numberOfContracts': 646 dataName[i].dataset.swUnitType = isEnglish ? 'times' : 'å'; 647 break; 648 } 649 } 650 // 忥æ¯çã«()ãã¤ããå ´åï¼span 651 spanTag.dataset.swUnitType = isEnglish ? '%' : 'ï¼ '; 652} 653 654// 峿å®è¡ 655(async () => { 656 try { 657 const data = await fetchData(data_url); // ãã¼ã¿åå¾ 658 659 // 夿°ä»£å ¥ 660 // ã³ã¼ãã¬ã¼ãã«ã©ã¼ 661 const CORP_COLOR = data.CorpColor || '#000000'; 662 663 // åè¨å®å¤ 664 lang = data.Lang; 665 //lang = 'ja'; 666 disclaimer = data.Disclaimer; 667 668 // ã³ã¼ãã¬ã¼ãã«ã©ã¼è¨å® 669 document.documentElement.style.setProperty('--sw-corporate-color', CORP_COLOR); 670 671 // çæããHTMLæ¿å ¥ï¼è¡¨ç¤ºæéãå è²¬ï¼ 672 insertGeneratedHTML(disclaimer); 673 // è¨èªè¨å® 674 setLangOption(); 675 676 // æ ªä¾¡æ å ± 677 StockPrice(data); 678 679 // æåçµäºè¨å® 680 globalDrawFinish = true; 681
682 // æç»å¾ã«sectionå¯è¦å 683 document.querySelector('.sw-container').style.visibility = 'visible'; 684 685 } catch (error) { 686 console.error("ãã¼ã¿å¦çä¸ã«ã¨ã©ã¼ãçºçãã¾ãã:", error); 687 } 688})(); 689 690async function upDateData() { 691 try { 692 const data = await fetchData(data_url); // ãã¼ã¿ååå¾ 693 694 // æ ªä¾¡æ å ± 695 StockPrice(data); 696 697 // æåçµäºè¨å® 698 globalDrawFinish = true; 699 700 } catch (error) { 701 console.error("ãã¼ã¿å¦çä¸ã«ã¨ã©ã¼ãçºçãã¾ãã:", error); 702 } 703} 704setInterval(upDateData, 300000); // 以é5åãã¨ã«å®è¡ 705 706// iframe é«ãèª¿æ´ 707const observer = new ResizeObserver(() => { 708 if (window.parent !== window) { 709 window.parent.postMessage( 710 { type: 'iframeHeight', height: document.documentElement.offsetHeight }, 711 '*' 712 ); 713 } 714 }); 715observer.observe(document.documentElement);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.