{"version":3,"sources":["utils.js","calculation.js","chart.js","searchControl.js","ControlsForm.js","ContextMenu.js","utils/hooks/handleOutsideClick.js","utils/filter.js","App.js","utils/chart.js","serviceWorker.js","index.js"],"names":["mediaType","enableValues","mediaName","locationOptions","label","value","getKeyByValue","object","Object","keys","find","key","dynamicSort","property","sortOrder","substr","a","b","localeCompare","sourceToExclude","cleanArticles","articles","sources","filter","article","includes","moniker_name","forEach","record","source","bias_total","bias_count","reliability_total","reliability_count","bias","reliability","dict","wBias","wReliability","sourceLocation","map","ownership","entries","bias_mean","reliability_mean","sourceBlockList","push","countries","states","cities","usa_states","sort","reach","wrap","text","width","each","word","d3","this","words","split","reverse","line","lineNumber","dy","parseFloat","attr","tspan","append","pop","join","node","getComputedTextLength","xTranslate","transform","baseVal","matrix","e","yTranslate","height","margin","top","bottom","right","left","xDomain","xLabels","xLabelsPoints","yDomain","yLabels","yLabelsPoints","xGridDomain","yGridDomain","fontFamily","fontColor","Chart","customMargin","handleOpenContextMenu","sourceReach","lastTransform","k","x","y","zoomed","bind","plotData","defineProperty","freeze","createRoot","createScales","createDefs","createContainers","createSegments","createTitles","createToolTips","createZoomButtons","createZoom","zoomContainer","call","zoom","displayArticles","transition","duration","type","newK","Math","min","max","scaleTo","el","selectAll","remove","zx","rescaleX","interpolate","zy","rescaleY","gArticles","gSourceReach","lower","gSources","d","logoWidth","logoHeight","gSegmentGreen","gSegmentYellow","gSegmentOrange","gSegmentRed","segmentContainer","ceil","gx","xAxis","gy","yAxis","gxDesc","xAxisDesc","gyDesc","yAxisDesc","gGrid","grid","that","data","length","color","on","articleTooltip","raise","hoverArticle","window","open","url","image_path","sourceTooltip","sourceReachCicleHighlight","sourceArticleHighlight","sourceReachCicleUnHighlight","style","about_url","pageY","pageX","preventDefault","scaleReach","maxReach","domain","range","defs","zoomButtonContainer","gxContainer","gyContainer","dataContainer","process","copyrightContainer","Date","getFullYear","then","documentElement","select","scaleExtent","extent","translateExtent","toolTipSource","toolTipArticle","clickZoom","g","tickValues","tickSize","tickPadding","tickFormat","i","enter","update","exit","toolTip","toFixed","String","mediatype","reachCircle","SOURCE_DATA","defaultData","moment","format","localStorage","getItem","setItem","JSON","stringify","oldData","parse","oldYear","oldMonth","oldDay","oldSearches","currStamp","Option","Select","ControlsForm","props","formRef","React","createRef","showDrawer","setState","visible","onClose","onSourcesChange","current","setFieldsValue","allSources","queryString","location","search","version","yearLimit","monthLimit","dayLimit","listLength","slist","every","val","item","Set","canAccess","tf","setModalVisible","onFinish","onLocationChange","target","countrySelection","stateSelection","locationState","locationCountry","locationCountryChange","locationStateChange","ownershipChange","formSubmit","getFieldsValue","onReset","citySelection","resetFields","chartReset","state","defaultFormValues","rangeReliability","rangeBias","slice","alert","prevProps","removedSources","getFieldValue","removedSource","chartLoading","mediaTypeOptions","disabled","formSources","ref","name","layout","className","initialValues","Item","colon","rules","required","mode","placeholder","listHeight","onChange","allowClear","o","Group","options","marks","title","placement","size","onClick","FilterOutlined","htmlType","UndoOutlined","bodyStyle","paddingBottom","forceRender","gutter","span","valuePropName","checkedChildren","CheckOutlined","unCheckedChildren","CloseOutlined","optionType","buttonStyle","showSearch","Component","ContextMenu","handler","show","onRemove","wrapperRef","useRef","useEffect","handleClickOutside","event","contains","document","addEventListener","removeEventListener","id","getIncludedExcludedSources","defaultSources","selectedSources","includedSources","excludedSources","withExcluded","formValues","filteredMedia","utils","coverage","Array","isArray","country","antIcon","LoadingOutlined","fontSize","spin","App","callAPI","aam_member_id","API_ENDPOINT","axios","get","chart","handleClickContextMenu","create","console","log","showContextMenu","selectedSource","handleCloseContextMenu","handleRemoveSource","drawChart","handleResetRemovedSources","isLoading","dimensions","showGeneralModal","rangeAudience","values","includedArticles","includedSourceNames","ChartUtils","reset","includedSourcesName","excludedSourcesName","includedContentPieces","excludedContentPieces","bias_label","reliability_label","unshift","includedSourcesBlob","Blob","excludedSourcesBlob","includedContentPiecesBlob","excludedContentPiecesBlob","zip","JSZip","file","generateAsync","content","FileSaver","saveAs","toString","replace","ob","download","dataExport","canvas","createElement","body","appendChild","ctx","getContext","fillStyle","fillRect","svg","serializer","XMLSerializer","svgStr","serializeToString","canvg","fromString","anonymousCrossOrigin","ignoreClear","v","render","lnk","toLocaleString","href","toDataURL","click","modal_id","paddingTop","resetRemovedSources","icon","DownloadOutlined","handleClickDownload","loading","indicator","spinning","onCancel","footer","portalId","formId","onSubmit","onReady","form","Boolean","hostname","match","ReactDOM","getElementById","navigator","serviceWorker","ready","registration","unregister","catch","error","message"],"mappings":"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","file":"static/js/main.de6ba549.chunk.js","sourcesContent":["import queryString from 'query-string';\r\n\r\nvar mediaType = [2,3,4];\r\nvar enableValues = [0,1,1,1];\r\n\r\nvar mediaName = {\r\n \"Website / Articles\": 2,\r\n \"TV / Video\": 3,\r\n \"Podcast / Audio\": 4\r\n}\r\n\r\nconst locationOptions = [\r\n {\r\n label: 'Local',\r\n value: 'Local',\r\n },\r\n {\r\n label: 'National',\r\n value: 'National',\r\n },\r\n {\r\n label: 'International',\r\n value: 'International',\r\n },\r\n];\r\n\r\nfunction aamMember(){\r\n let member_id = queryString.parse(window.location.search)['member_id'];\r\n return member_id;\r\n}\r\n\r\nfunction downloadParameter(){\r\n if(queryString.parse(window.location.search)['download'] === \"1\"){\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction unlimitedSearchParameter(){\r\n if(queryString.parse(window.location.search)['unlimitedSearch'] === \"1\"){\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction getKeyByValue(object, value) {\r\n return Object.keys(object).find(key => object[key] === value);\r\n}\r\n\r\nfunction dynamicSort(property) {\r\n var sortOrder = 1;\r\n\r\n if (property[0] === \"-\") {\r\n sortOrder = -1;\r\n property = property.substr(1);\r\n }\r\n\r\n return function (a,b) {\r\n if(sortOrder === -1){\r\n return b[property].localeCompare(a[property]);\r\n }\r\n else{\r\n return a[property].localeCompare(b[property]);\r\n }\r\n }\r\n}\r\n\r\nfunction dict2array(dict) {\r\n return Object.keys(dict).map((key) => dict[key]);\r\n}\r\n\r\nfunction availableStates(countryList, sources){\r\n if (countryList) {\r\n // let countryids = countryList.map(Number);\r\n let cleanSources = sources.filter((source) => countryList.includes(source.location.country.name));\r\n let filteredStates = {};\r\n cleanSources.forEach((source) => {\r\n if (source['location']['state']['id']){\r\n if (getKeyByValue(filteredStates,source['location']['state']['name']) in filteredStates){}\r\n else{filteredStates[source['location']['state']['id']] = source['location']['state']['name']}\r\n }\r\n });\r\n return filteredStates;\r\n }\r\n else {\r\n return {}\r\n }\r\n}\r\n\r\nfunction availableCities(stateList, sources){\r\n if (stateList){\r\n // let stateids = stateList.map(Number);\r\n let cleanSources = sources.filter((source) => stateList.includes(source.location.state.name));\r\n let filteredCities = {};\r\n cleanSources.forEach((source) => {\r\n if (source['location']['city']['id']){\r\n if(getKeyByValue(filteredCities,source['location']['city']['name']) in filteredCities){}\r\n else{filteredCities[source['location']['city']['id']] = source['location']['city']['name']}\r\n }\r\n });\r\n return filteredCities;\r\n }\r\n else {\r\n return {}\r\n }\r\n}\r\n\r\nexport { aamMember, downloadParameter, unlimitedSearchParameter, mediaName, mediaType, enableValues, locationOptions, getKeyByValue, dynamicSort, dict2array, availableStates, availableCities };","import * as d3 from \"d3\";\r\nimport { dict2array, getKeyByValue } from \"./utils\";\r\n\r\nconst sourceToExclude = [];\r\n\r\nfunction reliabilityWeight(reliability) {\r\n if (reliability >= 24) {\r\n return 1;\r\n } else if (reliability >= 16) {\r\n return 4;\r\n } else if (reliability >= 8) {\r\n return 8;\r\n } else {\r\n return 16;\r\n }\r\n }\r\n \r\n function biasWeight(bias) {\r\n if (-6 <= bias && bias <= 6) {\r\n return 1;\r\n } else if (-18 <= bias && bias <= 18) {\r\n return 4;\r\n } else if (-30 <= bias && bias <= 30) {\r\n return 8;\r\n } else {\r\n return 16;\r\n }\r\n }\r\n\r\n function biasLabel(bias){\r\n if(-6 <= bias && bias <= 6){\r\n return \"Middle\";\r\n } else if (-18 <= bias && bias < -6){\r\n return \"Skews Left\";\r\n } else if (-30 <= bias && bias < -18){\r\n return \"Hyper-Partisan Left\";\r\n } else if (-42 <= bias && bias < -30){\r\n return \"Most Extreme Left\";\r\n } else if (6 < bias && bias < 18){\r\n return \"Skews Right\";\r\n } else if (18 <= bias && bias < 30){\r\n return \"Hyper-Partisan Right\";\r\n } else if (30 <= bias && bias < 42){\r\n return \"Most Extreme Right\";\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n function reliabilityLabel(reliability){\r\n if(0 <= reliability && reliability <= 8){\r\n return \"Unreliable; Inaccurate\";\r\n } else if (8 < reliability && reliability <= 16){\r\n return \"Unreliable; Misleading\";\r\n } else if (16 < reliability && reliability <= 24){\r\n return \"Unreliable; Problematic\";\r\n } else if (24 < reliability && reliability <= 32){\r\n return \"Mixed Reliability/Opinion OR Other Issues\";\r\n } else if (32 < reliability && reliability <= 40){\r\n return \"Generally Reliable/Analysis OR Other Issues\";\r\n } else if (40 < reliability && reliability <= 48){\r\n return \"Reliable; Analysis/Fact Reporting\";\r\n } else if (48 < reliability && reliability <= 56){\r\n return \"Reliable; Fact Reporting\";\r\n } else if (reliability > 56) {\r\n return \"Reliable; Original Fact Reporting\";\r\n } else {\r\n return null;\r\n }\r\n }\r\n \r\n function cleanArticles(articles) {\r\n var sources = {};\r\n \r\n articles = articles.filter(\r\n (article) => !sourceToExclude.includes(article.moniker_name)\r\n );\r\n \r\n articles.forEach((record) => {\r\n let source = sources[record[\"moniker_name\"]];\r\n if (!source) {\r\n source = {\r\n bias_total: 0,\r\n bias_count: 0,\r\n reliability_total: 0,\r\n reliability_count: 0,\r\n };\r\n }\r\n \r\n const wBias = biasWeight(record[\"bias\"]);\r\n const wReliability = reliabilityWeight(record[\"reliability\"]);\r\n let sourceLocation = {};\r\n \r\n source[\"domain\"] = record[\"main_url\"];\r\n source[\"about_url\"] = record[\"about_url\"];\r\n source[\"moniker_name\"] = record[\"moniker_name\"];\r\n source[\"image_path\"] = record[\"image_path\"];\r\n source[\"mediatype\"] = record[\"mediatype\"];\r\n sourceLocation[\"country\"] = {'id': record[\"country_id\"],'name': record[\"country_name\"]};\r\n sourceLocation[\"state\"] = {'id': record[\"state_id\"],'name': record[\"state_name\"]};\r\n sourceLocation[\"city\"] = {'id': record[\"city_id\"],'name': record[\"city_name\"]};\r\n source[\"location\"] = sourceLocation;\r\n source[\"ownership\"] = dict2array(record[\"ownership\"]);\r\n source[\"bias_total\"] += record[\"bias\"] * wBias;\r\n source[\"bias_count\"] += wBias;\r\n source[\"reliability_total\"] += record[\"reliability\"] * wReliability;\r\n source[\"reliability_count\"] += wReliability;\r\n sources[record[\"moniker_name\"]] = source;\r\n });\r\n\r\n // create owners list from content pieces\r\n let ownership = {}\r\n articles.forEach((record) => {\r\n for ( let [key, value] of Object.entries(record['ownership']) ){\r\n if (!(key in ownership)) ownership[key] = value\r\n }\r\n });\r\n \r\n sources = Object.keys(sources).map((key) => {\r\n return {\r\n ...sources[key],\r\n bias_mean: sources[key][\"bias_total\"] / sources[key][\"bias_count\"],\r\n reliability_mean:\r\n sources[key][\"reliability_total\"] / sources[key][\"reliability_count\"],\r\n };\r\n });\r\n\r\n // supress sources and it's content-pieces if reliability is below 24\r\n let sourceBlockList = []; // prepare block list\r\n sources.forEach((source)=>{\r\n if (source.reliability_mean < 24){\r\n sourceBlockList.push(source.moniker_name);\r\n }\r\n });\r\n \r\n // apply that block list\r\n sources = sources.filter((source) => !sourceBlockList.includes(source.moniker_name));\r\n articles = articles.filter((article) => !sourceBlockList.includes(article.moniker_name));\r\n\r\n // add label based on score/value\r\n sources.forEach((source) => {\r\n source[\"bias_label\"] = biasLabel(source[\"bias_mean\"]);\r\n source[\"reliability_label\"] = reliabilityLabel(source[\"reliability_mean\"]);\r\n });\r\n\r\n \r\n // Calculate International, National and Local coverage for source\r\n sources.forEach((source) => {\r\n \r\n if(source['location']['country']['id'] !== 233){\r\n source['coverage'] = \"International\";\r\n }\r\n\r\n else if(source['location']['country']['id'] === 233 && (source['location']['state']['id'] === null) && (source['location']['city']['id'] === null) ){\r\n source['coverage'] = \"National\";\r\n }\r\n\r\n else if(source['location']['country']['id'] === 233 && (source['location']['state']['id'] !== null)){\r\n source['coverage'] = \"Local\";\r\n }\r\n });\r\n\r\n let countries = {};\r\n let states = {};\r\n let cities = {};\r\n let usa_states = {};\r\n\r\n sources.forEach(source => {\r\n if (source['location']['country']['id']){\r\n if (getKeyByValue(countries,source['location']['country']['name']) in countries){}\r\n else{countries[source['location']['country']['id']] = source['location']['country']['name']}\r\n }\r\n\r\n if (source['location']['state']['id']){\r\n if (getKeyByValue(states,source['location']['state']['name']) in states){}\r\n else{states[source['location']['state']['id']] = source['location']['state']['name']}\r\n }\r\n\r\n if (source['location']['state']['id'] && source['location']['country']['id'] === 233){\r\n if (getKeyByValue(usa_states,source['location']['state']['name']) in usa_states){}\r\n else{usa_states[source['location']['state']['id']] = source['location']['state']['name']}\r\n }\r\n\r\n if (source['location']['city']['id']){\r\n if (getKeyByValue(cities,source['location']['city']['name']) in cities){}\r\n else{cities[source['location']['city']['id']] = source['location']['city']['name']}\r\n }\r\n });\r\n \r\n // sort source list by reach value\r\n sources.sort((a, b) => a.reach - b.reach);\r\n \r\n return { articles, sources, countries, states, usa_states, cities, ownership };\r\n }\r\n \r\n function wrap(text, width) {\r\n text.each(function () {\r\n var text = d3.select(this),\r\n words = text.text().split(/\\s+/).reverse(),\r\n word,\r\n line = [],\r\n lineNumber = 0,\r\n lineHeight = 15, // ems\r\n y = 0,\r\n dy = parseFloat(text.attr(\"dy\")),\r\n tspan = text\r\n .text(null)\r\n .append(\"tspan\")\r\n .attr(\"x\", 0)\r\n .attr(\"y\", y)\r\n .attr(\"dy\", dy)\r\n .attr(\"dx\", 0);\r\n \r\n while ((word = words.pop())) {\r\n line.push(word);\r\n tspan.text(line.join(\" \"));\r\n if (tspan.node().getComputedTextLength() > width) {\r\n line.pop();\r\n tspan.text(line.join(\" \"));\r\n line = [word];\r\n tspan = text\r\n .append(\"tspan\")\r\n .attr(\"x\", 0)\r\n .attr(\"y\", y)\r\n .attr(\"dy\", ++lineNumber * lineHeight + dy)\r\n .attr(\"dx\", 0)\r\n .text(word);\r\n }\r\n }\r\n \r\n if (lineNumber > 0) {\r\n const xTranslate = text.node().transform.baseVal[0].matrix.e;\r\n const yTranslate = ((lineNumber - 1) * lineHeight) / 2;\r\n text.attr(\"transform\", `translate(${xTranslate}, -${yTranslate})`);\r\n }\r\n });\r\n }\r\n \r\n function formatNumber(number) {\r\n let nums = number.replace(/,/g, \"\");\r\n if (!nums) return;\r\n return parseInt(nums).toLocaleString();\r\n }\r\n\r\n export { cleanArticles, wrap, formatNumber };","import * as d3 from \"d3\";\r\nimport { wrap } from \"./calculation\";\r\nimport { mediaName, getKeyByValue } from \"./utils\";\r\n\r\nconst MEDIAICONS_URL = \"/mediaicons\";\r\nconst width = 1200;\r\nconst height = 725;\r\n\r\nconst margin = {\r\n top: 40,\r\n bottom: 90,\r\n right: 150,\r\n left: 170\r\n};\r\n\r\nconst xDomain = [-42, -30, -18, -6, 0, 6, 18, 30, 42];\r\nconst xLabels = [\r\n \"Most Extreme Left\",\r\n \"Hyper-Partisan Left\",\r\n \"Skews Left\",\r\n \"Middle or Balanced Bias\",\r\n \"Skews Right\",\r\n \"Hyper-Partisan Right\",\r\n \"Most Extreme Right\",\r\n];\r\nconst xLabelsPoints = [-36, -24, -12, 0, 12, 24, 36];\r\n\r\nconst yDomain = [0, 8, 16, 24, 32, 40, 48, 56, 64];\r\nconst yLabels = [\r\n \"Contains Inaccurate / Fabricated Info\",\r\n \"Contains Misleading Info\",\r\n \"Selective or Incomplete Story / Unfair Persuasion / Propaganda\",\r\n \"Opinion or High Variation in Reliability\",\r\n \"Analysis or High Variation in Reliability\",\r\n \"Complex Analysis or Mix of Fact Reporting and Analysis\",\r\n \"Fact Reporting\",\r\n \"Original Fact Reporting\",\r\n];\r\nconst yLabelsPoints = [4, 12, 20, 28, 36, 44, 52, 60];\r\n\r\nconst xGridDomain = [-30, -18, -6, 0, 6, 18, 30];\r\nconst yGridDomain = [8, 16, 24, 32, 40, 48, 56];\r\n\r\nconst logoHeight = 50;\r\nconst logoWidth = 50;\r\n\r\nconst fontFamily = `\"Nunito Sans\", -apple-system, system-ui, BlinkMacSystemFont,\r\nSegoe UI, Roboto, Helvetica Neue, Arial, sans-serif`;\r\nconst fontColor = \"#2e2e2e\";\r\nclass Chart {\r\n constructor(articles, sources, customMargin, handleOpenContextMenu) {\r\n this.sourceReach = false;\r\n this.lastTransform = { k: 1, x: 0, y: 0 };\r\n this.articles = articles;\r\n this.sources = sources;\r\n this.x = null;\r\n this.y = null;\r\n this.zoomed = this.zoomed.bind(this);\r\n this.plotData = this.plotData.bind(this);\r\n this.customMargin = customMargin;\r\n this.handleOpenContextMenu = handleOpenContextMenu;\r\n if(this.customMargin){\r\n Object.defineProperty(margin,\"right\",{value: 20});\r\n }\r\n\r\n Object.freeze(margin);\r\n }\r\n\r\n create() {\r\n this.createRoot();\r\n this.createScales();\r\n this.createDefs();\r\n this.createContainers();\r\n if(!this.customMargin){\r\n this.createSegments();\r\n }\r\n this.createTitles();\r\n this.createToolTips();\r\n this.createZoomButtons();\r\n this.createZoom();\r\n this.plotData();\r\n this.zoomContainer.call(this.zoom.transform, d3.zoomIdentity);\r\n }\r\n\r\n update(articles, sources, sourceReach, displayArticles) {\r\n this.displayArticles = displayArticles;\r\n this.sourceReach = sourceReach;\r\n this.articles = articles;\r\n this.sources = sources;\r\n this.plotData();\r\n }\r\n\r\n reset() {\r\n this.zoomContainer\r\n .transition()\r\n .duration(750)\r\n .call(this.zoom.transform, d3.zoomIdentity);\r\n }\r\n\r\n clickZoom(type) {\r\n const newK =\r\n type === \"plus\"\r\n ? Math.min(50, this.lastTransform.k + 2)\r\n : Math.max(1, this.lastTransform.k - 2);\r\n\r\n this.zoomContainer.transition().duration(300).call(this.zoom.scaleTo, newK);\r\n }\r\n\r\n destroy() {\r\n d3.select(this.el).selectAll(\"svg\").remove();\r\n }\r\n\r\n zoomed() {\r\n const transform = d3.event.transform;\r\n const zx = transform.rescaleX(this.x).interpolate(d3.interpolateRound);\r\n const zy = transform.rescaleY(this.y).interpolate(d3.interpolateRound);\r\n\r\n this.gArticles\r\n .attr(\"transform\", transform)\r\n .attr(\"stroke-width\", 5 / transform.k);\r\n\r\n if (this.sourceReach) {\r\n this.gSourceReach.attr(\"transform\", transform).lower();\r\n if (transform.k !== this.lastTransform.k) {\r\n d3.selectAll(\".sourceReach\").attr(\"stroke-width\", 1 / transform.k);\r\n }\r\n }\r\n\r\n this.gSources.attr(\"transform\", transform);\r\n if (transform.k !== this.lastTransform.k) {\r\n d3.selectAll(\".sourceAverage\")\r\n .attr(\"width\", logoWidth / transform.k)\r\n .attr(\"height\", logoHeight / transform.k)\r\n .attr(\r\n \"x\",\r\n (d) => this.x(d.bias_mean) - logoWidth / 2 / transform.k\r\n )\r\n .attr(\r\n \"y\",\r\n (d) => this.y(d.reliability_mean) - logoHeight / 2 / transform.k\r\n );\r\n }\r\n if(!this.customMargin){\r\n this.gSegmentGreen.attr(\"transform\", transform);\r\n this.gSegmentYellow.attr(\"transform\", transform);\r\n this.gSegmentOrange.attr(\"transform\", transform);\r\n this.gSegmentRed.attr(\"transform\", transform);\r\n }\r\n \r\n if (transform.k !== this.lastTransform.k) {\r\n this.segmentContainer.attr(\r\n \"style\",\r\n `stroke-width: ${Math.ceil(3 / transform.k)}`\r\n );\r\n }\r\n\r\n this.gx.call(xAxis, zx);\r\n this.gy.call(yAxis, zy);\r\n\r\n this.gxDesc.call(xAxisDesc, zx);\r\n this.gyDesc.call(yAxisDesc, zy);\r\n\r\n this.gGrid.call(grid, zx, zy);\r\n\r\n this.lastTransform = transform;\r\n }\r\n\r\n plotData() {\r\n // articles\r\n // if(this.displayArticles){\r\n const that = this;\r\n this.gArticles\r\n .selectAll(\".sourceArticle\")\r\n .data(this.articles)\r\n .join(\"path\")\r\n .attr(\"class\", \"sourceArticle\")\r\n .attr(\"moniker_name\", (d) => `${d.moniker_name}`)\r\n .attr(\"d\", (d) => `M${this.x(d.bias)},${this.y(d.reliability)}h0`)\r\n .attr(\"stroke\", (d) => {\r\n if (this.sources.length < 10) {\r\n return this.color(d.moniker_name);\r\n } else {\r\n return \"gainsboro\";\r\n }\r\n })\r\n .on(\"mouseover\", function (d) {\r\n articleTooltip(d3.event, d);\r\n d3.select(this).attr(\"stroke\", \"black\");\r\n d3.select(this).raise();\r\n })\r\n .on(\"mousemove\", (d) => articleTooltip(d3.event, d))\r\n .on(\"mouseout\", (d) => this.hoverArticle(d))\r\n .on(\"click\", (d) => window.open(d.url, \"_blank\"));\r\n // }else{\r\n // this.gArticles.selectAll(\".sourceArticle\").remove();\r\n // }\r\n\r\n // sources\r\n this.gSources\r\n .selectAll(\".sourceAverage\")\r\n .data(this.sources)\r\n .join(\"image\")\r\n .attr(\"class\", \"sourceAverage\")\r\n .attr(\r\n \"x\",\r\n (d) => this.x(d.bias_mean) - logoWidth / 2 / this.lastTransform.k\r\n )\r\n .attr(\r\n \"y\",\r\n (d) =>\r\n this.y(d.reliability_mean) - logoHeight / 2 / this.lastTransform.k\r\n )\r\n .attr(\"width\", logoWidth / this.lastTransform.k)\r\n .attr(\"height\", logoHeight / this.lastTransform.k)\r\n .attr(\"href\", function (d) {\r\n if (d.image_path) {\r\n return `${MEDIAICONS_URL}/${d.image_path}`;\r\n }\r\n })\r\n .on(\"mouseover\", function (d) {\r\n sourceTooltip(d3.event, d);\r\n sourceReachCicleHighlight(d3.event, d);\r\n d3.select(\".chartContainer\").attr(\"class\", \"chartContainer has-cursor\");\r\n })\r\n .on(\"mousemove\", (d) => {\r\n sourceTooltip(d3.event, d);\r\n sourceReachCicleHighlight(d3.event, d);\r\n sourceArticleHighlight(d3.event, d);\r\n })\r\n .on(\"mouseout\", function (source) {\r\n d3.selectAll(\".sourceArticle\")\r\n .filter(function (d) {\r\n return d.moniker_name === source.moniker_name;\r\n })\r\n .attr(\"stroke\", (d) => {\r\n return \"gainsboro\";\r\n });\r\n sourceReachCicleUnHighlight(source);\r\n d3.select(\".svg-tooltip.toolTipSource\").style(\"visibility\", \"hidden\");\r\n d3.select(\".chartContainer\").attr(\"class\", \"chartContainer no-cursor\");\r\n })\r\n .on(\"click\", function (d) {\r\n if (d.about_url) {\r\n return window.open(`${d.about_url}`, \"_blank\");\r\n }\r\n })\r\n .on(\"contextmenu\", function(data) {\r\n that.handleOpenContextMenu(data);\r\n d3.select(\"#chart-context-menu\")\r\n .style(\"position\", \"absolute\")\r\n .style(\"display\", \"block\")\r\n .style(\"top\", d3.event.pageY + \"px\")\r\n .style(\"left\", d3.event.pageX + \"px\");\r\n d3.event.preventDefault();\r\n d3.select(\".svg-tooltip.toolTipSource\").style(\"visibility\", \"hidden\");\r\n d3.select(\".chartContainer\").attr(\"class\", \"chartContainer no-cursor\");\r\n });\r\n\r\n // reach\r\n if (this.sourceReach) {\r\n this.gSourceReach\r\n .selectAll(\".sourceReach\")\r\n .data(this.sources.filter((source) => source.reach))\r\n .join(\"circle\")\r\n .attr(\"class\", \"sourceReach\")\r\n .attr(\"source-reach\", (d) => d.moniker_name)\r\n .attr(\"cx\", (d) => this.x(d.bias_mean))\r\n .attr(\"cy\", (d) => this.y(d.reliability_mean))\r\n .attr(\"r\", (d) => this.scaleReach(Math.min(d.reach, this.maxReach)))\r\n .attr(\"opacity\", 0.9)\r\n .attr(\"stroke\", \"#323232\")\r\n .attr(\"stroke-dasharray\", \"2 1\")\r\n .attr(\"fill\", \"#ededed\");\r\n\r\n this.gSourceReach.attr(\"transform\", this.lastTransform).lower();\r\n d3.selectAll(\".sourceReach\").attr(\r\n \"stroke-width\",\r\n 1 / this.lastTransform.k\r\n );\r\n } else {\r\n this.gSourceReach.selectAll(\".sourceReach\").remove();\r\n }\r\n }\r\n\r\n createRoot() {\r\n this.el = d3\r\n .select(\"div.chartContainer\")\r\n .append(\"svg\")\r\n .attr(\"viewBox\", [0, 0, width, height])\r\n .attr(\"class\", \"chartSVG\")\r\n .style(\"fill\", \"white\");\r\n }\r\n\r\n createScales() {\r\n this.color = d3\r\n .scaleOrdinal()\r\n .domain(this.sources.map((d) => d.moniker_name).sort())\r\n .range(d3.schemeTableau10);\r\n\r\n this.x = d3\r\n .scaleLinear()\r\n .domain([-42, 42])\r\n .range([margin.left, width - margin.right]);\r\n\r\n this.y = d3\r\n .scaleLinear()\r\n .domain([0, 64])\r\n .range([height - margin.bottom, margin.top]);\r\n }\r\n\r\n createDefs() {\r\n const defs = this.el.append(\"defs\");\r\n\r\n defs\r\n .append(\"clipPath\")\r\n .attr(\"id\", \"clipData\")\r\n .append(\"rect\")\r\n .attr(\"x\", margin.left)\r\n .attr(\"y\", margin.top)\r\n .attr(\"width\", width - margin.left - margin.right)\r\n .attr(\"height\", height - margin.top - margin.bottom);\r\n\r\n defs\r\n .append(\"clipPath\")\r\n .attr(\"id\", \"clipXAxis\")\r\n .append(\"rect\")\r\n .attr(\"x\", margin.left - 15)\r\n .attr(\"y\", 0)\r\n .attr(\"width\", width - margin.left - margin.right + 30)\r\n .attr(\"height\", height)\r\n .attr(\"style\", \"fill: transparent; stroke-width: 1; stroke: rgb(0,0,0)\");\r\n\r\n defs\r\n .append(\"clipPath\")\r\n .attr(\"id\", \"clipYAxis\")\r\n .append(\"rect\")\r\n .attr(\"x\", 0)\r\n .attr(\"y\", margin.top - 5)\r\n .attr(\"width\", width)\r\n .attr(\"height\", height - margin.top - margin.bottom + 10)\r\n .attr(\"style\", \"fill: transparent; stroke-width: 1; stroke: rgb(0,0,0)\");\r\n }\r\n\r\n createContainers() {\r\n this.zoomContainer = this.el.append(\"g\").attr(\"class\", \"zoomableArea\");\r\n this.zoomContainer\r\n .append(\"rect\")\r\n .attr(\"x\", margin.left)\r\n .attr(\"y\", margin.top)\r\n .attr(\"width\", width - margin.left - margin.right)\r\n .attr(\"height\", height - margin.top - margin.bottom)\r\n .attr(\r\n \"style\",\r\n \"fill:transparent; stroke-width: 1; stroke: rgba(0, 0, 0);\"\r\n );\r\n\r\n this.segmentContainer = this.zoomContainer\r\n .append(\"g\")\r\n .attr(\"style\", \"stroke-width: 3\")\r\n .attr(\"clip-path\", \"url(#clipData)\");\r\n\r\n this.zoomButtonContainer = this.zoomContainer\r\n .append(\"g\")\r\n .attr(\"class\", \"zoomRefContainer\")\r\n .attr(\"clip-path\", \"url(#clipData)\");\r\n\r\n this.gGrid = this.zoomContainer\r\n .append(\"g\")\r\n .attr(\"clip-path\", \"url(#clipData)\");\r\n const gxContainer = this.zoomContainer\r\n .append(\"g\")\r\n .attr(\"clip-path\", \"url(#clipXAxis)\");\r\n const gyContainer = this.zoomContainer\r\n .append(\"g\")\r\n .attr(\"clip-path\", \"url(#clipYAxis)\");\r\n\r\n this.gx = gxContainer.append(\"g\").attr(\r\n \"style\",\r\n `\r\n color: ${fontColor};\r\n font-family: ${fontFamily};\r\n font-size: 12px;\r\n `\r\n );\r\n this.gy = gyContainer.append(\"g\").attr(\r\n \"style\",\r\n `\r\n color: ${fontColor};\r\n font-family: ${fontFamily};\r\n font-size: 12px;\r\n `\r\n );\r\n\r\n this.gxDesc = gxContainer.append(\"g\").attr(\r\n \"style\",\r\n `\r\n color: ${fontColor};\r\n font-family: ${fontFamily};\r\n font-size: 12px;\r\n `\r\n );\r\n this.gyDesc = gyContainer.append(\"g\").attr(\r\n \"style\",\r\n `\r\n color: ${fontColor};\r\n font-family: ${fontFamily};\r\n font-size: 12px;\r\n `\r\n );\r\n\r\n this.dataContainer = this.zoomContainer\r\n .append(\"g\")\r\n .attr(\"clip-path\", \"url(#clipData)\");\r\n this.gArticles = this.dataContainer\r\n .append(\"g\")\r\n .attr(\"stroke-linecap\", \"round\");\r\n\r\n this.gSourceReach = this.dataContainer.append(\"g\");\r\n this.gSources = this.dataContainer.append(\"g\");\r\n }\r\n\r\n createSegments() {\r\n // green\r\n this.gSegmentGreen = this.segmentContainer\r\n .append(\"rect\")\r\n .attr(\"clip-path\", \"url(#clipData)\")\r\n .attr(\"x\", this.x(-16.5))\r\n .attr(\"y\", this.y(63))\r\n .attr(\"height\", this.y(40) - this.y(63))\r\n .attr(\"width\", this.x(16.5) - this.x(-16.5))\r\n .attr(\"rx\", 10)\r\n .attr(\"ry\", 10)\r\n .attr(\"style\", \"fill:none; stroke:#27AE60; opacity:0.5;\")\r\n .attr(\"stroke-dasharray\", \"4\");\r\n\r\n // yellow\r\n this.gSegmentYellow = this.segmentContainer\r\n .append(\"rect\")\r\n .attr(\"x\", this.x(-22))\r\n .attr(\"y\", this.y(46))\r\n .attr(\"height\", this.y(24) - this.y(46))\r\n .attr(\"width\", this.x(22) - this.x(-22))\r\n .attr(\"rx\", 10)\r\n .attr(\"ry\", 10)\r\n .attr(\"style\", \"fill:none; stroke:#F1C40F; opacity:0.5;\")\r\n .attr(\"stroke-dasharray\", \"4 2 1\");\r\n\r\n // orange\r\n this.gSegmentOrange = this.segmentContainer\r\n .append(\"polyline\")\r\n .attr(\r\n \"points\",\r\n `\r\n ${this.x(-41.5)},${this.y(46)}\r\n ${this.x(-41.5)},${this.y(16)},\r\n ${this.x(41.5)},${this.y(16)},\r\n ${this.x(41.5)},${this.y(46)},\r\n ${this.x(22)},${this.y(46)},\r\n ${this.x(22)},${this.y(24)},\r\n ${this.x(-22)},${this.y(24)},\r\n ${this.x(-22)},${this.y(46)},\r\n ${this.x(-41.5)},${this.y(46)}\r\n `\r\n )\r\n .attr(\"style\", \"fill:none; stroke:#E67E22; opacity:0.5;\")\r\n .attr(\"stroke-dasharray\", \"4 1 1\");\r\n\r\n // red\r\n this.gSegmentRed = this.segmentContainer\r\n .append(\"rect\")\r\n .attr(\"x\", this.x(-41.5))\r\n .attr(\"y\", this.y(16))\r\n .attr(\"height\", this.y(0.5) - this.y(16))\r\n .attr(\"width\", this.x(41.5) - this.x(-41.5))\r\n .attr(\"rx\", 10)\r\n .attr(\"ry\", 10)\r\n .attr(\"style\", \"fill:none; stroke:#E74C3C;opacity:0.5;\")\r\n .attr(\"stroke-dasharray\", \"4 2 2\");\r\n }\r\n\r\n createTitles() {\r\n // xAxisTitle\r\n this.el\r\n .append(\"image\")\r\n .attr(\"width\", width - margin.left - margin.right)\r\n .attr(\"height\", 30)\r\n .attr(\"x\", margin.left)\r\n .attr(\"y\", height - margin.bottom / 1.5)\r\n .attr(\"href\", `${process.env.PUBLIC_URL}/images/xAxisTitle.png`);\r\n\r\n // Add copyright\r\n this.copyrightContainer = this.el\r\n .append(\"g\")\r\n .append(\"text\")\r\n .attr(\"width\", width - margin.left - margin.right)\r\n .attr(\"height\", 30)\r\n .attr(\"x\", width / 2)\r\n .attr(\"y\", height - margin.bottom / 24)\r\n .attr(\"xml:space\", \"preserve\")\r\n .attr(\r\n \"style\",\r\n `\r\n fill: ${fontColor};\r\n font-family: ${fontFamily};\r\n font-size: 10px;\r\n text-anchor: middle;\r\n `\r\n );\r\n\r\n this.copyrightContainer\r\n .append(\"tspan\")\r\n .text(`Media Bias Chart® Licensed Copy. Copyright © `);\r\n \r\n this.copyrightContainer\r\n .append(\"tspan\")\r\n .text(`Ad Fontes Media, Inc`)\r\n .attr(\"dx\", \"4px\")\r\n .attr(\r\n \"style\",\r\n `fill: #1890ff; cursor: pointer; text-decoration: underline`\r\n )\r\n .on(\"click\", () =>\r\n window.open(\"https://www.adfontesmedia.com/\", \"_blank\")\r\n );\r\n \r\n this.copyrightContainer\r\n .append(\"tspan\")\r\n .attr(\"dx\", \"4px\")\r\n .text(`${new Date().getFullYear()}.`);\r\n \r\n this.copyrightContainer\r\n .append(\"tspan\")\r\n .attr(\"dx\", \"4px\")\r\n .text(`Ratings and data are not audited by AAM.`);\r\n\r\n // yAxisTitle\r\n this.el\r\n .append(\"image\")\r\n .attr(\"width\", 30)\r\n .attr(\"height\", height - margin.bottom - margin.top)\r\n .attr(\"x\", (margin.left * 2) / 3 - 5)\r\n .attr(\"y\", margin.top)\r\n .attr(\"href\", `${process.env.PUBLIC_URL}/images/yAxisTitle.png`);\r\n\r\n // Add typeKey\r\n if(!this.customMargin){\r\n d3.xml(`${process.env.PUBLIC_URL}/images/typeKey.svg`).then((data) => {\r\n this.el.node().append(data.documentElement);\r\n this.el\r\n .select(\"#typeKey\")\r\n .attr(\"viewBox\", \"0,0,210,520\")\r\n .attr(\"x\", width - margin.right - 30)\r\n .attr(\"y\", margin.top / 2)\r\n .attr(\"width\", 210)\r\n .attr(\"height\", 320);\r\n });\r\n }\r\n }\r\n\r\n createZoom() {\r\n this.zoom = d3\r\n .zoom()\r\n .scaleExtent([1, 50])\r\n .extent([\r\n [margin.left, margin.top],\r\n [width - margin.right, height - margin.bottom],\r\n ])\r\n .translateExtent([\r\n [margin.left, margin.top],\r\n [width - margin.right, height - margin.bottom],\r\n ]);\r\n\r\n this.zoomContainer.call(this.zoom.on(\"zoom\", this.zoomed));\r\n }\r\n\r\n createToolTips() {\r\n this.toolTipSource = d3\r\n .select(\".chartContainer\")\r\n .append(\"div\")\r\n .attr(\"class\", \"svg-tooltip toolTipSource\");\r\n this.toolTipSource.append(\"div\").attr(\"class\", \"toolTipSource\");\r\n this.toolTipSource.append(\"div\").attr(\"class\", \"toolTipDomain\");\r\n this.toolTipSource.append(\"div\").attr(\"class\", \"toolTipQuality\");\r\n this.toolTipSource.append(\"div\").attr(\"class\", \"toolTipBias\");\r\n this.toolTipSource.append(\"div\").attr(\"class\", \"toolTipReach\");\r\n this.toolTipSource.append(\"div\").attr(\"class\", \"toolTipMediaType\");\r\n\r\n this.toolTipArticle = d3\r\n .select(\".chartContainer\")\r\n .append(\"div\")\r\n .attr(\"class\", \"svg-tooltip toolTipArticle\");\r\n this.toolTipArticle.append(\"div\").attr(\"class\", \"toolTipSource\");\r\n this.toolTipArticle.append(\"div\").attr(\"class\", \"toolTipDomain\");\r\n this.toolTipArticle.append(\"div\").attr(\"class\", \"toolTipQuality\");\r\n this.toolTipArticle.append(\"div\").attr(\"class\", \"toolTipBias\");\r\n this.toolTipArticle.append(\"div\").attr(\"class\", \"toolTipReach\");\r\n }\r\n\r\n hoverArticle(article) {\r\n d3.select(\".svg-tooltip.toolTipArticle\").style(\"visibility\", \"hidden\");\r\n d3.selectAll(\".sourceArticle\")\r\n .filter(function (d) {\r\n return d.moniker_name === article.moniker_name;\r\n })\r\n .attr(\"stroke\", (d) => {\r\n if (this.sources.length < 10) {\r\n return this.color(d.moniker_name);\r\n } else {\r\n return \"gainsboro\";\r\n }\r\n });\r\n }\r\n\r\n createZoomButtons() {\r\n d3.xml(`${process.env.PUBLIC_URL}/images/zoomButtons.svg`).then((data) => {\r\n this.zoomButtonContainer.node().append(data.documentElement);\r\n this.el\r\n .select(\"#zoomButtons\")\r\n .attr(\"class\", \"zoomRef\")\r\n .attr(\"x\", width - margin.right - 30)\r\n .attr(\"y\", margin.top / 2 + 10)\r\n .attr(\"width\", 50)\r\n .attr(\"height\", 100);\r\n\r\n this.zoomButtonContainer\r\n .select(\".zoomPlus\")\r\n .on(\"click\", () => this.clickZoom(\"plus\"));\r\n\r\n this.zoomButtonContainer\r\n .select(\".zoomMinus\")\r\n .on(\"click\", () => this.clickZoom(\"minus\"));\r\n });\r\n }\r\n}\r\n\r\n// Define xAxis\r\nconst xAxis = (g, x) => {\r\n g.attr(\"transform\", `translate(0, ${height - margin.bottom})`).call(\r\n d3\r\n .axisBottom(x)\r\n .tickValues(xDomain)\r\n .tickSize(0)\r\n .tickPadding(10)\r\n .tickFormat(d3.format(\".1f\"))\r\n );\r\n};\r\n\r\n// Define yAxis\r\nconst yAxis = (g, y) =>\r\n g\r\n .attr(\"transform\", `translate(${margin.left}, 0)`)\r\n .call(\r\n d3\r\n .axisLeft(y)\r\n .tickValues(yDomain)\r\n .tickSize(0)\r\n .tickPadding(10)\r\n .tickFormat(d3.format(\".1f\"))\r\n );\r\n\r\n// Define xAxisDesc\r\nconst xAxisDesc = (g, x) =>\r\n g\r\n .attr(\"transform\", `translate(0, ${margin.top})`)\r\n .call(\r\n d3\r\n .axisBottom(x)\r\n .tickValues(xLabelsPoints)\r\n .tickSize(0)\r\n .tickPadding(10)\r\n .tickFormat((d, i) => xLabels[i])\r\n )\r\n .selectAll(\".tick text\")\r\n .attr(\"transform\", `translate(0,-${margin.top - 10})`);\r\n\r\n// Define xAxisDesc\r\nconst yAxisDesc = (g, y) =>\r\n g\r\n .attr(\"transform\", `translate(${margin.left}, 0)`)\r\n .call(\r\n d3\r\n .axisLeft(y)\r\n .tickValues(yLabelsPoints)\r\n .tickSize(0)\r\n .tickPadding(10)\r\n .tickFormat((d, i) => yLabels[i])\r\n )\r\n .selectAll(\".tick text\")\r\n .attr(\"transform\", `translate(-${margin.left * (2 / 3)},0)`)\r\n .attr(\"style\", \"text-anchor: middle; \")\r\n .call(wrap, 100);\r\n\r\n// Define grid\r\nconst grid = (g, x, y) =>\r\n g\r\n .attr(\"stroke\", \"currentColor\")\r\n .attr(\"stroke-opacity\", 0.1)\r\n .call((g) =>\r\n g\r\n .selectAll(\".x\")\r\n .data(xGridDomain)\r\n .join(\r\n (enter) => enter.append(\"line\").attr(\"class\", \"x\"),\r\n (update) => update,\r\n (exit) => exit.remove()\r\n )\r\n .attr(\"x1\", (d) => 0.5 + x(d))\r\n .attr(\"x2\", (d) => 0.5 + x(d))\r\n .attr(\"y1\", margin.top)\r\n .attr(\"y2\", height - margin.bottom)\r\n .attr(\"stroke-opacity\", (d) => (d === 0 ? 0.3 : 0.1))\r\n )\r\n .call((g) =>\r\n g\r\n .selectAll(\".y\")\r\n .data(yGridDomain)\r\n .join(\r\n (enter) => enter.append(\"line\").attr(\"class\", \"y\"),\r\n (update) => update,\r\n (exit) => exit.remove()\r\n )\r\n .attr(\"y1\", (d) => 0.5 + y(d))\r\n .attr(\"y2\", (d) => 0.5 + y(d))\r\n .attr(\"x1\", margin.left)\r\n .attr(\"x2\", width - margin.right)\r\n );\r\n\r\nconst sourceTooltip = (e, d) => {\r\n let toolTip = d3.select(\".svg-tooltip.toolTipSource\");\r\n toolTip\r\n .style(\"position\", \"absolute\")\r\n .style(\"visibility\", \"visible\")\r\n .style(\"top\", d3.event.pageY - 10 + \"px\")\r\n .style(\"left\", d3.event.pageX + 10 + \"px\");\r\n\r\n toolTip.select(\".toolTipSource\").text(`Name: ${d.moniker_name}`);\r\n toolTip.select(\".toolTipDomain\").text(`Domain: ${d.domain}`);\r\n toolTip.select(\".toolTipQuality\").text(`Reliability: ${d.reliability_mean.toFixed(2)}`);\r\n toolTip.select(\".toolTipBias\").text(`Bias: ${d.bias_mean.toFixed(2)}`);\r\n toolTip.select(\".toolTipMediaType\").text(`Media Type: ${String(getKeyByValue(mediaName,d.mediatype))}`);\r\n};\r\n\r\nconst sourceArticleHighlight = (e, source) => {\r\n d3.selectAll(\".sourceArticle\")\r\n .filter(function (d) {\r\n return d.moniker_name === source.moniker_name;\r\n })\r\n .attr(\"stroke\", (d) => {\r\n return \"green\";\r\n });\r\n}\r\n\r\nconst articleTooltip = (e, d) => {\r\n let toolTip = d3.select(\".svg-tooltip.toolTipArticle\");\r\n toolTip\r\n .style(\"position\", \"absolute\")\r\n .style(\"visibility\", \"visible\")\r\n .style(\"top\", d3.event.pageY - 10 + \"px\")\r\n .style(\"left\", d3.event.pageX + 10 + \"px\");\r\n\r\n toolTip.select(\".toolTipSource\").text(`Name: ${d.moniker_name}`);\r\n toolTip.select(\".toolTipDomain\").text(`Domain: ${d.domain}`);\r\n toolTip\r\n .select(\".toolTipQuality\")\r\n .text(`Reliability: ${d.reliability.toFixed(2)}`);\r\n toolTip.select(\".toolTipBias\").text(`Bias: ${d.bias.toFixed(2)}`);\r\n toolTip.select(\".toolTipReach\").text(`Content Url: ${d.url}`);\r\n};\r\n\r\nconst sourceReachCicleHighlight = (e, d) => {\r\n let reachCircle = d3.selectAll(`circle[source-reach=\"${d.moniker_name}\"]`);\r\n d3.selectAll(\".sourceReach\").sort(function(a, b) {\r\n if(a.moniker_name === d.moniker_name) {\r\n return 1;\r\n }\r\n return a.reach > b.reach ? -1: 1;\r\n })\r\n reachCircle\r\n .attr(\"fill\", \"#969696\")\r\n};\r\n\r\nconst sourceReachCicleUnHighlight = (d) => {\r\n let reachCircle = d3.selectAll(`circle[source-reach=\"${d.moniker_name}\"]`);\r\n reachCircle\r\n .attr(\"fill\", \"#ededed\")\r\n};\r\n\r\nexport { Chart, height, width };\r\n","import moment from 'moment';\r\nconst SOURCE_DATA = 'source_data';\r\nvar defaultData = {\r\n 'stamp' : moment().format('YYYYMMDD'),\r\n 'year' : 0,\r\n 'month' : 0,\r\n 'day' : 0,\r\n 'searches' : []\r\n}\r\n\r\n// set defaultData if not found in localstorage\r\nif(localStorage.getItem(SOURCE_DATA) === null){\r\n localStorage.setItem(SOURCE_DATA,JSON.stringify(defaultData));\r\n}\r\n\r\n// set old values from localstorage\r\nvar oldData = JSON.parse(localStorage.getItem(SOURCE_DATA));\r\nvar oldYear = oldData['year'];\r\nvar oldMonth = oldData['month'];\r\nvar oldDay = oldData['day'];\r\nvar oldSearches = oldData['searches'];\r\n\r\n// get current timestamp when request is made\r\nconst currStamp = moment().format('YYYYMMDD');\r\n\r\n// function to check whether user can view source list\r\nexport function canAccess(value,version){\r\n\r\n if(oldData['stamp'] === currStamp){\r\n\r\n var yearLimit, monthLimit, dayLimit, listLength;\r\n\r\n if (version === \"free\"){\r\n yearLimit = 50;\r\n monthLimit = 20;\r\n dayLimit = 5;\r\n listLength = false;\r\n }\r\n\r\n else if (version === \"plus\"){\r\n yearLimit = 100;\r\n monthLimit = 40;\r\n dayLimit = 15;\r\n listLength = true;\r\n }\r\n\r\n else if (version === \"paid\"){\r\n yearLimit = 500;\r\n monthLimit = 200;\r\n dayLimit = 75;\r\n listLength = true;\r\n }\r\n\r\n if (oldYear < yearLimit && oldMonth < monthLimit && oldDay < dayLimit && (oldSearches.length < 5 || listLength)){\r\n \r\n var slist;\r\n if (value.every(val => oldSearches.includes(val))){\r\n slist = oldSearches.filter(item => value.includes(item));\r\n defaultData['searches'] = oldSearches;\r\n }\r\n else {\r\n oldSearches = [...new Set([...oldSearches , ...value])];\r\n slist = value;\r\n defaultData['searches'] = oldSearches;\r\n oldDay += 1; oldMonth += 1; oldYear += 1;\r\n }\r\n\r\n defaultData['day'] = oldDay; defaultData['month'] = oldMonth; defaultData['year'] = oldYear;\r\n localStorage.setItem(SOURCE_DATA,JSON.stringify(defaultData));\r\n return [true, slist];\r\n }\r\n\r\n else {\r\n let slist = oldSearches.filter(item => value.includes(item));\r\n if (slist.length >= dayLimit || slist.length < value.length){\r\n return [false, slist];\r\n }\r\n else return [true, slist];\r\n }\r\n }\r\n\r\n else if(oldData['stamp'] < currStamp){\r\n return [false, value];\r\n }\r\n\r\n else {\r\n return [false, []]\r\n }\r\n}\r\n\r\n// function to reset timestamp with correct values in localStorage\r\nexport function needReset(){\r\n\r\n if (oldData['stamp'] < currStamp){\r\n if (currStamp.slice(0,4) > oldData['stamp'].slice(0,4)){\r\n oldData['stamp'] = currStamp;\r\n oldSearches = []; oldYear = 0; oldMonth = 0; oldDay= 0;\r\n localStorage.setItem(SOURCE_DATA,JSON.stringify(defaultData));\r\n }\r\n\r\n else if (currStamp.slice(4,6) > oldData['stamp'].slice(4,6)){\r\n oldData['stamp'] = currStamp;\r\n oldSearches = []; oldMonth = 0; oldDay= 0;\r\n defaultData['year'] = oldData['year'];\r\n localStorage.setItem(SOURCE_DATA,JSON.stringify(defaultData));\r\n }\r\n\r\n else if (currStamp.slice(6,8) > oldData['stamp'].slice(6,8)){\r\n oldData['stamp'] = currStamp;\r\n oldSearches = []; oldDay= 0;\r\n defaultData['month'] = oldData['month'];\r\n defaultData['year'] = oldData['year'];\r\n localStorage.setItem(SOURCE_DATA,JSON.stringify(defaultData));\r\n }\r\n }\r\n\r\n else if (oldData['stamp'] > currStamp){\r\n alert(\"This incident has been reported. Please pay for membership.\");\r\n }\r\n}","import React from \"react\";\r\nimport { Form, Button, Select, Radio, Switch, Slider, Drawer, Col, Row, Checkbox, Tooltip} from \"antd\";\r\nimport { CloseOutlined, CheckOutlined, FilterOutlined, UndoOutlined } from \"@ant-design/icons\";\r\nimport { mediaType, enableValues, locationOptions, dynamicSort, unlimitedSearchParameter } from \"./utils\";\r\nimport \"./ControlsForm.less\";\r\nimport { canAccess, needReset } from \"./searchControl.js\";\r\n\r\nconst { Option } = Select;\r\nclass ControlsForm extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state ={\r\n visible: false,\r\n defaultFormValues: {\r\n allSources: true,\r\n displayArticles: true,\r\n sources: [],\r\n location: null,\r\n countrySelection: false,\r\n stateSelection: false,\r\n locationCountry: [],\r\n locationState:[],\r\n rangeReliability: [0, 64],\r\n rangeBias: [-42, 42],\r\n mediaType: mediaType,\r\n ownership: null,\r\n }\r\n }\r\n }\r\n\r\n componentDidMount(){\r\n needReset();\r\n }\r\n\r\n formRef = React.createRef();\r\n \r\n showDrawer = () => {\r\n this.setState({\r\n visible: true,\r\n });\r\n };\r\n\r\n onClose = () => {\r\n this.setState({\r\n visible: false,\r\n });\r\n };\r\n\r\n onSourcesChange = (value) => {\r\n if (value) {\r\n this.formRef.current.setFieldsValue({\r\n allSources: false,\r\n displayArticles: true\r\n });\r\n \r\n if (!unlimitedSearchParameter()){\r\n let [tf, slist] = canAccess(value,\"free\");\r\n this.formRef.current.setFieldsValue({\r\n sources: slist,\r\n });\r\n if(!tf){\r\n this.props.setModalVisible(\"general_modal\",true);\r\n }\r\n }\r\n }\r\n this.onFinish();\r\n };\r\n\r\n onLocationChange = ({ target: { value } }) => {\r\n if (value) {\r\n this.formRef.current.setFieldsValue({\r\n allSources: false,\r\n displayArticles: true,\r\n ownership: null\r\n });\r\n }\r\n\r\n if (value === \"International\"){\r\n this.setState({countrySelection: true, stateSelection: false});\r\n this.formRef.current.setFieldsValue({locationState: []});\r\n }\r\n else if (value === \"Local\"){\r\n this.setState({countrySelection: false, stateSelection: true});\r\n this.formRef.current.setFieldsValue({locationCountry: []});\r\n }\r\n else {\r\n this.setState({countrySelection: false, stateSelection: false});\r\n this.formRef.current.setFieldsValue({locationCountry: [], locationState: []});\r\n }\r\n\r\n this.onFinish();\r\n };\r\n\r\n locationCountryChange = () => this.onFinish();\r\n\r\n locationStateChange = () => this.onFinish();\r\n\r\n ownershipChange = (value) => {\r\n if (value) {\r\n this.formRef.current.setFieldsValue({\r\n allSources: false,\r\n displayArticles: true,\r\n location: null,\r\n locationCountry: [],\r\n locationState: []\r\n });\r\n this.setState({countrySelection: false, stateSelection: false});\r\n }\r\n this.onFinish();\r\n };\r\n\r\n onFinish = () => {\r\n this.props.formSubmit(this.formRef.current.getFieldsValue());\r\n };\r\n\r\n onReset = () => {\r\n this.setState({countrySelection: false, stateSelection: false, citySelection: false});\r\n this.formRef.current.resetFields();\r\n this.props.chartReset();\r\n this.onFinish();\r\n };\r\n\r\n componentDidUpdate(prevProps) {\r\n if(prevProps.removedSources.length !== this.props.removedSources.length\r\n || prevProps.sources.length !== this.props.sources.length\r\n ) {\r\n this.formRef.current.setFieldsValue({\r\n sources: this.formRef.current.getFieldValue(\"sources\").filter(\r\n (source) => !this.props.removedSources.find(\r\n removedSource => removedSource.moniker_name === source\r\n )\r\n )\r\n })\r\n this.onFinish();\r\n }\r\n }\r\n\r\n render() {\r\n\r\n const { sources, countries, states, chartLoading, ownership } = this.props;\r\n\r\n var mediaTypeOptions = [\r\n {label: 'Website / Articles', value: 2, disabled: !enableValues[1]},\r\n {label: 'TV / Video', value: 3, disabled: !enableValues[2]},\r\n {label: 'Podcast / Audio', value: 4, disabled: !enableValues[3]},\r\n ];\r\n\r\n let formSources = [];\r\n\r\n if (this.formRef.current) {\r\n formSources = this.formRef.current.getFieldValue(\"sources\");\r\n }\r\n\r\n return (\r\n