{"version":3,"sources":["investor.js"],"names":["document","addEventListener","formatNumberWithSpaces","num","toString","replace","renderLargestShareholders","model","targetContainer","data","rows","unmappedShareholderRankings","slice","totalShares","pop","values","TOTAL_NUMBER_OF_SHARES","unrankedPercentage","unrankedShareCount","parseInt","rankNumber","templateModel","shareholderRankings","map","rank","shares","TOP_POSITION_SHARES_","percentage","toFixed","investorName","TOP_INVESTOR_","mappedRanking","type","TOP_INVESTOR_ACCOUNT_TYPE_","country","TOP_INVESTOR_COUNTRY_","template","$","html","renderedTable","Mustache","render","append","key","each","this","ajax","url","success","response","responseData","JSON","parse","renderTicker","viewModel","renderedElement","$target","buildViewModel","tickerData","sharePerformanceData","tickers","sortedTickerData","Instruments","instrumentIx","length","ticker","instrument","lastDate","i","Quotes","quote","QuoteTime","extend","TickerName","TickerSymbol","TradeCurrency","DeltaPercentage","Time","moment","format","Date","p","useKiloFormat","useMegaFormat","currency","isPrefixedCurrency","kiloPrefix","megaPrefix","lastPrice","LastPrice","ClosePrice1D","numberOfShares","NumberOfShares","marketCap","mcapTotalRaw","Math","round","mcapTotalKilo","mcapTotalMega","mcapTotal","Delta","ChangeType","Price","AskPrice","BidPrice","HighPrice","LowPrice","push","accessKey","urlTicker","dataType","done","dataObj","fail","urlPerformance"],"mappings":"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","file":"../investor.js","sourcesContent":["document.addEventListener('DOMContentLoaded', function() {\n var key = 'ELK'; /* This is super specific for what we're doing here so we're just hard coding it here */\n\n $('[data-largest-shareholders-block]').each(function () {\n var targetContainer = $(this);\n\n $.ajax({\n url: '/api/shareholders/largest?key=' + key,\n success: function (response) {\n var responseData = JSON.parse(response);\n renderLargestShareholders(responseData, targetContainer);\n }\n });\n });\n\n function formatNumberWithSpaces(num) {\n return num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ' ');\n }\n\n function renderLargestShareholders(model, targetContainer) {\n var data = model.rows;\n var unmappedShareholderRankings = data.slice(0, -1);\n var totalShares = data.slice(-1).pop().values.TOTAL_NUMBER_OF_SHARES;\n var unrankedPercentage = 100;\n var unrankedShareCount = parseInt(totalShares);\n var rankNumber = 1;\n\n var templateModel = {\n shareholderRankings: unmappedShareholderRankings.map(function (rank) {\n var shares = parseInt(rank.values.TOP_POSITION_SHARES_);\n var percentage = (rank.values.TOP_POSITION_SHARES_ / totalShares * 100).toFixed(2);\n var investorName = rank.values.TOP_INVESTOR_;\n\n var mappedRanking = {\n rankNumber: rankNumber,\n investorName: investorName,\n shares: formatNumberWithSpaces(shares),\n percentage: percentage,\n type: rank.values.TOP_INVESTOR_ACCOUNT_TYPE_,\n country: rank.values.TOP_INVESTOR_COUNTRY_\n };\n\n unrankedPercentage -= percentage;\n unrankedShareCount -= shares;\n rankNumber++;\n\n return mappedRanking;\n })\n };\n\n var template = $('[data-largest-shareholders-table-template]').html();\n var renderedTable = Mustache.render(template, templateModel);\n\n $(targetContainer).append(renderedTable);\n\n /* If you ever want to show 'others', these are the numbers */\n // unrankedPercentage = Math.round(unrankedPercentage * 10) / 10;\n // console.log('unrankedPercentage: ' + unrankedPercentage);\n // console.log('unrankedShareCount: ' + unrankedShareCount);\n }\n \n});\ndocument.addEventListener('DOMContentLoaded', function () {\n $('[data-stock-ticker]').each(function () {\n var $target = $(this);\n var accessKey = $target.data('ticker-key');\n\n var sharePerformanceData = null,\n tickerData = null; \n\n var urlTicker = 'https://publish.ne.cision.com/papi/Ticker/{{accessKey}}';\n\n $.ajax({\n url: urlTicker.replace('{{accessKey}}', accessKey),\n type: \"GET\",\n dataType: \"json\"\n })\n .done(function (dataObj) {\n tickerData = dataObj;\n if (sharePerformanceData) {\n var viewModel = buildViewModel(tickerData, sharePerformanceData);\n renderTicker(viewModel);\n }\n })\n .fail(function () {\n //console.log('Could not retrieve ticker data');\n });\n\n var urlPerformance = 'https://publish.ne.cision.com/papi/Ticker/{{accessKey}}/Performance';\n\n $.ajax({\n url: urlPerformance.replace('{{accessKey}}', accessKey),\n type: 'GET',\n dataType: 'json'\n })\n .done(function (dataObj) {\n sharePerformanceData = dataObj;\n if (tickerData) {\n var viewModel = buildViewModel(tickerData, sharePerformanceData);\n renderTicker(viewModel);\n }\n });\n\n function renderTicker(viewModel) {\n var template = $('[data-stock-ticker-template]').html();\n var renderedElement = Mustache.render(template, viewModel);\n $target.html(renderedElement);\n }\n\n function buildViewModel(tickerData, sharePerformanceData) {\n var viewModel = {\n tickers: []\n };\n\n var sortedTickerData = tickerData.Instruments;\n\n for (var instrumentIx = 0; instrumentIx < sortedTickerData.length; instrumentIx++) {\n var instrument = sortedTickerData[instrumentIx],\n lastDate = \"2010-02-01T00:00:00.000000Z\",\n ticker;\n\n for (var i = 0; i < instrument.Quotes.length; i++) {\n var quote = instrument.Quotes[0];\n if (quote.QuoteTime >= lastDate) {\n ticker = quote;\n }\n lastDate = quote.QuoteTime;\n }\n\n var model = $.extend({}, ticker);\n\n model.TickerName = instrument.TickerName;\n model.TickerSymbol = instrument.TickerSymbol;\n model.TradeCurrency = instrument.TradeCurrency;\n\n if (model.DeltaPercentage) {\n model.DeltaPercentage = model.DeltaPercentage * 100;\n model.DeltaPercentage = model.DeltaPercentage.toFixed(2);\n //console.log(model);\n }\n\n model.Time = new moment(model.QuoteTime).format('HH:mm');\n model.Date = new moment(model.QuoteTime).format('DD MMM YYYY');\n\n var p = sharePerformanceData.Instruments[instrumentIx],\n useKiloFormat = false, //om tusen\n useMegaFormat = true, //om miljon\n currency = 'NOK',\n isPrefixedCurrency = false, //före el efter\n kiloPrefix = \" k\", //prefix, sätts av user\n megaPrefix = \" M\"; //prefix, sätts av user\n\n var lastPrice = p.LastPrice || p.ClosePrice1D || -1;\n var numberOfShares = p.NumberOfShares || -1;\n\n var marketCap = numberOfShares * lastPrice;\n\n model.mcapTotalRaw = Math.round(marketCap);\n model.mcapTotalKilo = Math.round(marketCap / 1000);\n model.mcapTotalMega = Math.round(marketCap / 1000000);\n\n if (useKiloFormat) {\n model.mcapTotal = model.mcapTotalKilo + kiloPrefix;\n } else if (useMegaFormat) {\n model.mcapTotal = model.mcapTotalMega + megaPrefix;\n } else {\n model.mcapTotal = model.mcapTotalRaw + megaPrefix;\n }\n\n if (isPrefixedCurrency) {\n model.mcapTotal = currency + model.mcapTotal;\n } else {\n model.mcapTotal = model.mcapTotal + currency;\n }\n\n // Instead of returning a NaN, turn this into an empty string if needed\n model.mcapTotal = model.mcapTotal || '';\n\n if (model.Delta > 0) {\n model.ChangeType = 'positive-change';\n } else if (model.Delta < 0) {\n model.ChangeType = 'negative-change';\n } else {\n model.ChangeType = 'no-change';\n }\n\n model.Price = model.Price.toFixed(2);\n model.AskPrice = model.AskPrice.toFixed(2);\n model.BidPrice = model.BidPrice.toFixed(2);\n model.HighPrice = model.HighPrice.toFixed(2);\n model.LowPrice = model.LowPrice.toFixed(2);\n\n viewModel.tickers.push(model);\n }\n\n return viewModel;\n }\n });\n});"]}