Files
neo 932ec3ac8f KPI cards: Bloomberg stock ticker style
- Redesign KPI cards to look like stock tickers
- Add ticker ID (e.g. ВЫРУЧК:KPI, AOV:KPI)
- Arrow up/down SVG indicators for change direction
- Mini trend-line (50px) inside each card
- Change color: green (#16a34a) for up, red (#e21d1d) for down
- Remove sparkline background area, keep only line
- Fix duplicate arrowUp variable naming (bArrowUp/bArrowDown/bArrowNeutral)
2026-06-21 18:14:08 +05:00

2 lines
11 KiB
JavaScript

!function(){"use strict";!function(){const e={VERSION:"3.4.1"};try{if(process)return process.env=Object.assign({},process.env),void Object.assign(process.env,e)}catch(e){}globalThis.process={env:e}}();const e="bbgconsentstring",t="cmpconsentmodal",n="consented",i="5f29641df70e58290010d5aa",o="5f2c366203c8584077858803",r=["en","ja"],a={ccpa:{ja:"私の個人情報を販売しない(カリフォルニア州消費者プライバシー法)",en:"Do Not Sell or Share My Personal Information"},gdpr:{ja:"クッキーを管理する",en:"Manage Cookies"}};function s(e,t,n){const i=new Date;i.setTime(i.getTime()+864e5*n),document.cookie=`${e}=${t};path=/;domain=${function(e){const t=e.split("bloomberg.");return(null==t?void 0:t.length)<=1?e:`.bloomberg.${t[1]}`}(window.location.hostname)};expires=${i.toUTCString()}`}const c=["usnat","usca","usco","usct","usut","usva"],d=e=>{for(const t of c)if(void 0!==e.parsedSections[t])return e.parsedSections[t]};var l,p,u,h,w,m,g,f,v,b,_,y,S,P,C,E,k,x,M,L,A,W,D=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)},j=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},T=(e,t,n)=>(D(e,t,"access private method"),n);class ${constructor({domain:e="sourcepointcmp.bloomberg.com",language:t="en"}){j(this,p),j(this,h),j(this,m),j(this,f),j(this,b),j(this,y),j(this,P),j(this,E),j(this,x),j(this,L),this.parseLanguage=e=>{var t;const n=null==e?void 0:e.toLowerCase().split("-")[0];return null!=(t=r.find((e=>e===n)))?t:"en"},j(this,l,(()=>{const e=window._sp_.config.targetingParams.isKisa?880326:817623;window._sp_.gdpr.loadPrivacyManagerModal&&window._sp_.gdpr.loadPrivacyManagerModal(e)})),this.baseEndpoint=`https://${e}`,this.startTime=Date.now(),this.loaded=!1,this.consentReadyEventFired=!1,this.language=this.parseLanguage(t),this.initialized=!1}init(){window.__tcfapi?(this.startTime=Date.now(),window.gtag_enable_tcf_support=!0,this.initialized=!0,window.__tcfapi("addEventListener",2,T(this,f,v).bind(this)),window.addEventListener("beforeunload",T(this,L,A).bind(this))):console.error("[cmp-client] CMP required tcfapi stub missing, exiting init")}addPrivacyManager(e){window.__tcfapi?window.__tcfapi("addEventListener",2,T(this,p,u).bind(this,e)):console.warn("[cmp-client] CMP required stub missing, exiting addPrivacyManager")}removeEventListener(e){window.__tcfapi("removeEventListener",2,(t=>{t||console.warn(`[cmp-client] Failed to remove __tcfapi event listener with id: ${e}`)}),e)}onGdprConsent(t,n){if(!n){const e=new Error("[cmp-client] Failed to `getCustomVendorConsents` with __tcfapi");return void console.error("[cmp-client]",e)}const r={req:"req1",fun:"fun0",pad:"pad0"};[...t.consentedPurposes,...t.legIntPurposes].forEach((e=>{if(e._id===i){r.fun="fun1";for(const[,e]of Object.entries(t.grants))i in e.purposeGrants&&!e.purposeGrants[i]&&(r.fun="fun0")}if(e._id===o){r.pad="pad1";for(const[,e]of Object.entries(t.grants))o in e.purposeGrants&&!e.purposeGrants[o]&&(r.pad="pad0")}}));const a=Object.values(r).join("");return s(e,a,365),T(this,y,S).call(this,a),console.log("[cmp-client] GDPR applies, custom consent string",a),a}onUSPSPing(t,n){if(!n)return console.error("[cmp-client] Failed to `ping` with __gpp"),"";if(0===t.applicableSections.filter((e=>-1!==e)).length){console.info("[cpm-client] this region doesn't apply GDPR nor MSPS");const t="req1fun1pad1";return s(e,t,365),T(this,y,S).call(this,t),""}if("ready"!==t.signalStatus)return console.info("[cmp-client] gpp ping data is not ready yet"),"";const i=d(t),o=2===(null==i?void 0:i.SaleOptOut)?"req1fun1pad1":"req1fun0pad0";return s(e,o,365),T(this,y,S).call(this,o),o}}let O;if(l=new WeakMap,p=new WeakSet,u=function(e,t,n){T(this,b,_).call(this,t,n)&&e&&(t.gdprApplies?(e.textContent=a.gdpr[this.language],e.onclick=()=>{return(e=this,t=l,D(e,t,"read from private field"),n?n.call(e):t.get(e)).call(this);var e,t,n}):(e.textContent=a.ccpa[this.language],e.onclick=()=>window._sp_.usnat.loadPrivacyManagerModal&&window._sp_.usnat.loadPrivacyManagerModal(987296)),this.removeEventListener(t.listenerId))},h=new WeakSet,w=function(e,t){if(!t){const e=new Error("[cmp-client] Failure received from __gpp `addEventListener`");return console.warn("[cmp-client]",e),void T(this,x,M).call(this,e)}this.onUSPSPing(e.pingData,t)},m=new WeakSet,g=function(){function e(e){return new Promise((t=>{let n=0;const i=()=>{const o=function(e){const t=document.cookie.match(`(^|;) ?${e}=([^;$]*)`);return t?t[2]:""}(e);o?t(o):n>=3e3?t(""):(n+=100,setTimeout(i,100))};i()}))}const i=e("geo_info"),o=e("_accesslist-membership"),r=e("_user-data"),a=e(t),c=navigator.userAgent.includes("BloombergHorseshoe"),d=window.location.href,l=(null==d?void 0:d.includes("utm_medium=email"))&&(null==d?void 0:d.includes("utm_source=newsletter")),p=(null==d?void 0:d.includes("/notices/tos"))||(null==d?void 0:d.includes("/notices/privacy")),u=null==d?void 0:d.includes("bloomberg.com/jp");Promise.all([i,o,r,a]).then((([e,i,o,r])=>{var a;const d=(null==e?void 0:e.includes("%22countryCode%22%3A%22US%22"))||(null==e?void 0:e.includes("%22country%22:%22US%22")),h="bloomberg"===i,w=!o||o.includes("anonymous");if(Boolean(d&&w&&!h&&!(r===n)&&!c&&!l&&!p&&!u)){const e=document.createElement("div");e.id="cmp-consent-modal",e.innerHTML='\n <div style="position: fixed; display: flex; justify-content: center; align-items: center; width: 100%; height: 100%; top: 0; left: 0; z-index: 99999999999999; background: rgba(0, 0, 0, 0.7);">\n <div style="pointer-events: auto; background-color: white; max-width: 500px; width: 90%; text-align: center; padding: 20px; border-radius: 8px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); color: black; font-family: BWHaasGroteskWeb, BWHaasGroteskWeb-fallback, Helvetica, Arial, sans-serif; line-height: 24px;">\n <h2 style="font-weight: bold; font-size: 18px; margin-bottom: 5px;">We\'ve updated our terms</h2>\n <p>\n By accepting, you agree to our updated\n <a href="/notices/tos" target="_blank" rel="noopener noreferrer" style="text-decoration: underline; color: black;">Terms of Service,</a>\n including the arbitration provision and class action waiver. You understand that we process your information as described in the\n <a href="/notices/privacy" target="_blank" rel="noopener noreferrer" style="text-decoration: underline; color: black;">Privacy Policy,</a>\n which may include sharing information about your use of\n <a href="https://www.bloomberg.com/" target="_blank" rel="noopener noreferrer" style="text-decoration: underline; color: black;">Bloomberg.com</a>\n with third parties. Accepting does not affect your right to opt-out at any time via the Do Not Sell or Share My Personal Information link in the website footer.\n </p>\n <button id="cmp-consent-button" style="cursor: pointer; margin-top: 15px; padding-left: 24px; padding-right: 24px; min-height: 46px; width: 100%; background-color: black; border-radius: 8px; color: white; text-align: center; font-weight: 500; font-size: 16px; line-height: 100%;">\n Accept\n </button>\n </div>\n </div>\n ',document.body.appendChild(e),null==(a=document.getElementById("cmp-consent-button"))||a.addEventListener("click",(()=>{s(t,n,365),e.remove()}))}}))},f=new WeakSet,v=function(e,t){if(T(this,b,_).call(this,e,t))if(this.loaded=!0,e.gdprApplies){if("tcloaded"!==e.eventStatus&&"useractioncomplete"!==e.eventStatus)return void console.warn("[cmp-client] CMP UI is shown, waiting for user consent");window.__tcfapi("getCustomVendorConsents",2,this.onGdprConsent.bind(this))}else{if(!window.__gpp)return void console.error("[cmp-client] CMP required gpp stub missing");window.__gpp("addEventListener",T(this,h,w).bind(this))}},b=new WeakSet,_=function(e,t){if(!t){const e=new Error("[cmp-client] Failure received from __tcfapi `addEventListener`");return console.warn("[cmp-client]",e),T(this,x,M).call(this,e),!1}if(void 0===e.gdprApplies){const e=new Error("[cmp-client] Received `gdprApplies` as undefined");return console.warn("[cmp-client]",e),T(this,x,M).call(this,e),!1}return!0},y=new WeakSet,S=function(e){if(!this.consentReadyEventFired){window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"bbg_consent_ready"}),T(this,E,k).call(this,e);try{T(this,m,g).call(this)}catch(e){console.error(`Error injecting cmp consent modal: ${e}`)}}this.consentReadyEventFired=!0},P=new WeakSet,C=function(e,t){window.eventRecorder=window.eventRecorder||{cmd:[]},window.eventRecorder.cmd.push((()=>{window.getEventRecorderClient().fireEvent(e,void 0,t)}))},E=new WeakSet,k=function(e){T(this,P,C).call(this,"CmpClient",{consent:e})},x=new WeakSet,M=function(e){T(this,P,C).call(this,"cmp-error",{url:window.location.href,message:e.message,timeElapsed:(Date.now()-this.startTime)/1e3})},L=new WeakSet,A=function(){const e=window.dataLayer.find((({event:e})=>"gtm.dom"===e)),t=window.dataLayer.find((({event:e})=>"gtm.load"===e)),n=Boolean(window.googletag._loadStarted_);this.loaded&&this.consentReadyEventFired&&n||T(this,P,C).call(this,"cmp-integration-anomaly",{url:window.location.href,sourcepointCMPLoaded:this.loaded,gtmDom:e,gtmLoad:t,googletagLoadStart:n,message:"See attached metadata",timeElapsed:(Date.now()-this.startTime)/1e3}),this.loaded&&!this.consentReadyEventFired&&T(this,P,C).call(this,"cmp-consent-ready",{url:window.location.href,message:"User left the page before CMP was submitted",timeElapsed:(Date.now()-this.startTime)/1e3})},Object.defineProperty(window,"getCmpClient",{value:function(e={}){return void 0!==O||(O=new $(e)),O}}),Object.defineProperty(window,"getCMPData",{value:function(){return window.__tcfapi?new Promise(((e,t)=>{window.__tcfapi("addEventListener",2,((n,i)=>{if(i){if("tcloaded"===n.eventStatus||"useractioncomplete"===n.eventStatus){n.gdprApplies?e({gdprApplies:!0,iabConsentString:n.tcString}):window.__gpp("addEventListener",((n,i)=>{if(i)if(0===n.pingData.applicableSections.filter((e=>-1!==e)).length)e({gdprApplies:!1,usPrivacyString:"1NNN"});else if("ready"===n.pingData.signalStatus){const t=d(n.pingData);e({gdprApplies:!1,usPrivacyString:`1${1===(null==t?void 0:t.SaleOptOutNotice)?"Y":"N"}${2===(null==t?void 0:t.SaleOptOut)?"N":"Y"}${1===(null==t?void 0:t.MspaCoveredTransactions)?"Y":"N"}`});const i=n.listenerId;window.__gpp("removeEventListener",((e,t)=>{t||console.warn(`[cmp-client] Failed to remove __gpp event listener with id: ${i}`)}),i)}else console.warn("[cmp-client] Ping data is not ready yet. waiting...");else t("MSPA did not return proper data")}));const i=n.listenerId;window.__tcfapi("removeEventListener",2,(e=>{e||console.warn(`[cmp-client] Failed to remove __tcfapi event listener with id: ${i}`)}),i)}}else t("CMP did not return proper data")}))})):(console.error("[cmp-client] CMP required tcfapi stub missing, exiting init"),Promise.reject("tcfapi stub is missing"))}}),Array.isArray(null==(W=null==window?void 0:window.cmpClient)?void 0:W.cmd)||(window.cmpClient=window.cmpClient||{cmd:[]}),Array.isArray(window.cmpClient.cmd)){let e=window.cmpClient.cmd.shift();for(;e;)e(),e=window.cmpClient.cmd.shift();window.cmpClient.cmd={push:e=>{e()}}}}();