fdaudens HF staff commited on
Commit
d16b35e
·
verified ·
1 Parent(s): 1694e07

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +201 -19
index.html CHANGED
@@ -1,19 +1,201 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>🔮 Mapping Nieman Lab's 2025 Journalism Predictions</title>
7
+ <script src="libs/d3.min.js"></script>
8
+ <script src="libs/plot.umd.min.js"></script>
9
+ <style>
10
+ body {
11
+ margin: 0;
12
+ font-family: Arial, sans-serif;
13
+ }
14
+ #viz {
15
+ width: 100%;
16
+ height: 100vh;
17
+ position: relative;
18
+ overflow: hidden;
19
+ }
20
+ #popup {
21
+ display: none;
22
+ position: absolute;
23
+ background: white;
24
+ border: 1px solid #ccc;
25
+ padding: 15px;
26
+ border-radius: 4px;
27
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
28
+ max-width: 400px;
29
+ z-index: 1000;
30
+ font-size: 14px;
31
+ line-height: 1.4;
32
+ pointer-events: auto; /* Changed to allow interaction */
33
+ }
34
+ h1 {
35
+ color: #1a1a1a;
36
+ margin-bottom: 20px;
37
+ }
38
+ .intro {
39
+ max-width: 800px;
40
+ margin: 0 auto 40px;
41
+ text-align: center;
42
+ line-height: 1.6;
43
+ color: #374151;
44
+ }
45
+ .popup-headline {
46
+ font-weight: bold;
47
+ margin-bottom: 8px;
48
+ }
49
+ .popup-author {
50
+ color: #666;
51
+ margin-bottom: 8px;
52
+ }
53
+ .popup-url {
54
+ color: #0066cc;
55
+ word-break: break-all;
56
+ }
57
+ </style>
58
+ </head>
59
+ <body>
60
+ <div class="intro">
61
+ <h1>🔮 Mapping Nieman Lab's 2025 Journalism Predictions</h1>
62
+ <p>This interactive visualization maps 90 predictions from Nieman Lab contributos about the future of journalism in 2025, clustered by theme using natural language processing. Each point represents a prediction - click to read the original article and details.<br/>
63
+ <em>P.s.: Content from Nieman Lab is shared under a Creative Commons license.</em></p>
64
+ </div>
65
+ <div id="viz">
66
+ <div id="popup"></div>
67
+ </div>
68
+ <script>
69
+ const pointsData = [{"x": 8.44501781463623, "y": -1.9416298866271973, "topic": 5, "headline": "The rise of informal news networks", "author": "Heather Chaplin", "url": "https://www.niemanlab.org/2024/12/the-rise-of-informal-news-networks/"}, {"x": 7.096116065979004, "y": -3.4139668941497803, "topic": 1, "headline": "The media industry adopts an insurgent strategy", "author": "Saba Long", "url": "https://www.niemanlab.org/2024/12/the-media-industry-adopts-an-insurgent-strategy/"}, {"x": 9.058985710144043, "y": 0.5641253590583801, "topic": 0, "headline": "New dimensions for news storytelling", "author": "Kawandeep Virdee", "url": "https://www.niemanlab.org/2024/12/new-dimensions-for-news-storytelling/"}, {"x": 9.15906810760498, "y": -0.604259729385376, "topic": 3, "headline": "Readers will seek out well-moderated spaces", "author": "Scott Lamb", "url": "https://www.niemanlab.org/2024/12/readers-will-seek-out-well-moderated-spaces/"}, {"x": 7.4088521003723145, "y": -2.1410419940948486, "topic": 6, "headline": "Breaking old habits", "author": "Andrea Faye Hart", "url": "https://www.niemanlab.org/2024/12/breaking-old-habits/"}, {"x": 6.837618827819824, "y": -2.639793872833252, "topic": 4, "headline": "The darkness that democracy dies in is here", "author": "Carrie Brown", "url": "https://www.niemanlab.org/2024/12/the-darkness-that-democracy-dies-in-is-here/"}, {"x": 8.178898811340332, "y": -4.384067058563232, "topic": 1, "headline": "There\u2019s no \u201cTrump Bump\u201d (and that\u2019s good!)", "author": "Hillary Frey", "url": "https://www.niemanlab.org/2024/12/theres-no-trump-bump-and-thats-good/"}, {"x": 9.176912307739258, "y": 1.1151294708251953, "topic": 0, "headline": "Journalists build the AI tools they actually want to use", "author": "Retha Hill", "url": "https://www.niemanlab.org/2024/12/journalists-build-the-ai-tools-they-actually-want-to-use/"}, {"x": 8.568703651428223, "y": -1.9133816957473755, "topic": 5, "headline": "We\u2019ll rethink scale, trust, and our life\u2019s work", "author": "S. Mitra Kalita", "url": "https://www.niemanlab.org/2024/12/well-rethink-scale-trust-and-our-lifes-work/"}, {"x": 9.80218505859375, "y": 1.529496669769287, "topic": 0, "headline": "Using AI to make news more accessible", "author": "Chitranshu Tewari", "url": "https://www.niemanlab.org/2024/12/using-ai-to-make-news-more-accessible/"}, {"x": 9.823975563049316, "y": 0.1786373257637024, "topic": 3, "headline": "Media companies will love their websites a lot less", "author": "Jonathan Hunt", "url": "https://www.niemanlab.org/2024/12/media-companies-will-love-their-websites-a-lot-less/"}, {"x": 7.814012050628662, "y": -3.551880121231079, "topic": 1, "headline": "An authoritarian anti-journalism playbook", "author": "Benjamin Toff", "url": "https://www.niemanlab.org/2024/12/an-authoritarian-anti-journalism-playbook/"}, {"x": 10.513821601867676, "y": -1.6853375434875488, "topic": -1, "headline": "We can\u2019t predict the future \u2014 but it\u2019s essential to plan for it", "author": "AX Mina", "url": "https://www.niemanlab.org/2024/12/we-cant-predict-the-future-but-its-essential-to-plan-for-it/"}, {"x": 9.129205703735352, "y": 1.2994041442871094, "topic": 0, "headline": "The year we stop talking about \u201cAI\u201d", "author": "Burt Herman", "url": "https://www.niemanlab.org/2024/12/the-year-we-stop-talking-about-ai/"}, {"x": 7.5631794929504395, "y": -3.7726199626922607, "topic": 1, "headline": "Journalism faces a reckoning, in Soviet style", "author": "Izabella Kaminska", "url": "https://www.niemanlab.org/2024/12/journalism-faces-a-reckoning-in-soviet-style/"}, {"x": 8.17159366607666, "y": -3.496154308319092, "topic": -1, "headline": "The federal attack on the press will trickle down locally", "author": "Katie Honan", "url": "https://www.niemanlab.org/2024/12/the-federal-attack-on-the-press-will-trickle-down-locally/"}, {"x": 6.893141269683838, "y": -3.2622017860412598, "topic": 4, "headline": "We\u2019ll reach beyond our own lane", "author": "Sharon Moshavi", "url": "https://www.niemanlab.org/2024/12/well-reach-beyond-our-own-lane/"}, {"x": 7.782461166381836, "y": -3.9657416343688965, "topic": 1, "headline": "Newsrooms will keep losing their conservative audiences", "author": "Jonathan Stray", "url": "https://www.niemanlab.org/2024/12/newsrooms-will-keep-losing-their-conservative-audiences/"}, {"x": 8.328720092773438, "y": -3.8211424350738525, "topic": 1, "headline": "The media becomes an activist for democracy", "author": "Gideon Lichfield", "url": "https://www.niemanlab.org/2024/12/the-media-becomes-an-activist-for-democracy/"}, {"x": 6.93303108215332, "y": -2.379122495651245, "topic": -1, "headline": "Embracing influencers as allies", "author": "Marlon A. Walker", "url": "https://www.niemanlab.org/2024/12/embracing-influencers-as-allies/"}, {"x": 8.412482261657715, "y": 0.28052857518196106, "topic": -1, "headline": "Action over analysis", "author": "Meredith Artley", "url": "https://www.niemanlab.org/2024/12/action-over-analysis/"}, {"x": 8.239283561706543, "y": -3.9283080101013184, "topic": 1, "headline": "The New York Times will hire a pro-Trump columnist", "author": "Matthew Pressman", "url": "https://www.niemanlab.org/2024/12/the-new-york-times-will-hire-a-pro-trump-columnist/"}, {"x": 7.821789741516113, "y": -3.1256449222564697, "topic": 1, "headline": "Watch your language", "author": "Doris Truong", "url": "https://www.niemanlab.org/2024/12/watch-your-language/"}, {"x": 9.876710891723633, "y": -0.062480129301548004, "topic": -1, "headline": "News websites hit an evolutionary dead end", "author": "Simon Allison", "url": "https://www.niemanlab.org/2024/12/news-websites-hit-an-evolutionary-dead-end/"}, {"x": 9.292717933654785, "y": -0.034649841487407684, "topic": -1, "headline": "Taking lessons from independent bookstores", "author": "Eric Nuzum", "url": "https://www.niemanlab.org/2024/12/taking-lessons-from-independent-bookstores/"}, {"x": 7.547028064727783, "y": -2.4716436862945557, "topic": 6, "headline": "No more baby steps in fixing crime coverage", "author": "Cassie Owens", "url": "https://www.niemanlab.org/2024/12/no-more-baby-steps-in-fixing-crime-coverage/"}, {"x": 7.68869161605835, "y": -2.934065818786621, "topic": -1, "headline": "Science journalism becomes plain old journalism", "author": "Siri Carpenter", "url": "https://www.niemanlab.org/2024/12/science-journalism-becomes-plain-old-journalism/"}, {"x": 7.461018085479736, "y": -1.6307631731033325, "topic": -1, "headline": "Accommodating journalists is in \u2014 or you\u2019re out", "author": "Rachel S. Hunt", "url": "https://www.niemanlab.org/2024/12/accommodating-journalists-is-in-or-youre-out/"}, {"x": 8.91421127319336, "y": 1.558112621307373, "topic": 0, "headline": "AI turns news into a conversation", "author": "Nikita Roy", "url": "https://www.niemanlab.org/2024/12/ai-turns-news-into-a-conversation/"}, {"x": 8.042552947998047, "y": -4.413753032684326, "topic": 1, "headline": "Covering Trump 2.0, now with less Trump", "author": "Joshua P. Darr", "url": "https://www.niemanlab.org/2024/12/covering-trump-2-0-now-with-less-trump/"}, {"x": 8.543889999389648, "y": -1.6245245933532715, "topic": 5, "headline": "The rebirth of local news", "author": "Sarabeth Berman", "url": "https://www.niemanlab.org/2024/12/the-rebirth-of-local-news/"}, {"x": 9.16274642944336, "y": -2.0761513710021973, "topic": 2, "headline": "To hell with algorithms", "author": "Rodney Gibbs", "url": "https://www.niemanlab.org/2024/12/to-hell-with-algorithms/"}, {"x": 9.39547348022461, "y": 0.783242404460907, "topic": 0, "headline": "Adjusting to a tech-heavy but code-light world", "author": "Daniel Trielli", "url": "https://www.niemanlab.org/2024/12/adjusting-to-a-tech-heavy-but-code-light-world/"}, {"x": 7.675912380218506, "y": -2.132913827896118, "topic": -1, "headline": "Journalism as a social service", "author": "Simon Galperin", "url": "https://www.niemanlab.org/2024/12/journalism-as-a-social-service/"}, {"x": 8.515488624572754, "y": -2.053623676300049, "topic": 5, "headline": "A renewed appetite for print", "author": "Aimee Rinehart", "url": "https://www.niemanlab.org/2024/12/a-renewed-appetite-for-print/"}, {"x": 9.204963684082031, "y": -0.4479573369026184, "topic": 3, "headline": "Bluesky is just the beginning", "author": "Ethan Toven-Lindsey", "url": "https://www.niemanlab.org/2024/12/bluesky-is-just-the-beginning/"}, {"x": 7.088955879211426, "y": -2.8292393684387207, "topic": 4, "headline": "Journalists fight digital decay", "author": "Basile Simon", "url": "https://www.niemanlab.org/2024/12/journalists-fight-digital-decay/"}, {"x": 7.850964069366455, "y": -2.691260576248169, "topic": -1, "headline": "A generation of journalists moves on", "author": "Meena Thiruvengadam", "url": "https://www.niemanlab.org/2024/12/a-generation-of-journalists-moves-on/"}, {"x": 10.357245445251465, "y": -1.5493714809417725, "topic": -1, "headline": "Prediction markets go mainstream", "author": "Taylor Lorenz", "url": "https://www.niemanlab.org/2024/12/prediction-markets-go-mainstream/"}, {"x": 7.835875511169434, "y": -3.224935293197632, "topic": -1, "headline": "Maybe we really are done with news?", "author": "Matt Carlson", "url": "https://www.niemanlab.org/2024/12/maybe-we-really-are-done-with-news/"}, {"x": 8.706042289733887, "y": 0.22054125368595123, "topic": 3, "headline": "A new generation of knowledge management tools", "author": "Jeremy Gilbert", "url": "https://www.niemanlab.org/2024/12/a-new-generation-of-knowledge-management-tools/"}, {"x": 10.028475761413574, "y": -0.9752873778343201, "topic": 2, "headline": "The podcast middle class will continue to shrink", "author": "Alex Sujong Laughlin", "url": "https://www.niemanlab.org/2024/12/the-podcast-middle-class-will-continue-to-shrink/"}, {"x": 9.02426815032959, "y": -2.260519027709961, "topic": 2, "headline": "Journalism has its Kendrick Lamar year", "author": "Delano Massey", "url": "https://www.niemanlab.org/2024/12/journalism-has-its-kendrick-lamar-year/"}, {"x": 7.88631534576416, "y": -3.726055860519409, "topic": 1, "headline": "Newsrooms fight back against criminalization", "author": "Jos\u00e9 Zamora", "url": "https://www.niemanlab.org/2024/12/newsrooms-fight-back-against-criminalization/"}, {"x": 6.960431098937988, "y": -2.824310302734375, "topic": 4, "headline": "Humanness > authenticity", "author": "Val\u00e9rie B\u00e9lair-Gagnon", "url": "https://www.niemanlab.org/2024/12/humanness-authenticity/"}, {"x": 8.349125862121582, "y": -2.720919609069824, "topic": -1, "headline": "Journalists embrace transparency about the business side", "author": "Jacob L. Nelson", "url": "https://www.niemanlab.org/2024/12/journalists-embrace-transparency-about-the-business-side/"}, {"x": 6.763571739196777, "y": -2.972921371459961, "topic": 4, "headline": "The line between activism and journalism breaks", "author": "Hafsa Maqsood", "url": "https://www.niemanlab.org/2024/12/the-line-between-activism-and-journalism-breaks/"}, {"x": 9.39100170135498, "y": 1.2959803342819214, "topic": 0, "headline": "Put AI at the beginning, not at the end", "author": "Ole Rei\u00dfmann", "url": "https://www.niemanlab.org/2024/12/put-ai-at-the-beginning-not-at-the-end/"}, {"x": 9.251703262329102, "y": 1.8666800260543823, "topic": 0, "headline": "The distinct human writer becomes more essential", "author": "Mario Garc\u00eda", "url": "https://www.niemanlab.org/2024/12/the-distinct-human-writer-becomes-more-essential/"}, {"x": 9.212112426757812, "y": -1.7202296257019043, "topic": 2, "headline": "Local collaboration follows contraction", "author": "Larry Ryckman", "url": "https://www.niemanlab.org/2024/12/local-collaboration-follows-contraction/"}, {"x": 9.474239349365234, "y": -2.0235114097595215, "topic": 2, "headline": "Public media embraces its future", "author": "Kerri Hoffman", "url": "https://www.niemanlab.org/2024/12/public-media-embraces-its-future/"}, {"x": 8.307257652282715, "y": -0.9246782064437866, "topic": -1, "headline": "Story budgets get reshaped to coax the disengaged", "author": "Jody Brannon", "url": "https://www.niemanlab.org/2024/12/story-budgets-get-reshaped-to-coax-the-disengaged/"}, {"x": 9.648368835449219, "y": 0.5126778483390808, "topic": -1, "headline": "B2B media shifts from content to solutions", "author": "Jay Lauf", "url": "https://www.niemanlab.org/2024/12/b2b-media-shifts-from-content-to-solutions/"}, {"x": 8.485305786132812, "y": -1.514387607574463, "topic": 5, "headline": "Lessons learned in The Building of Lost Causes", "author": "Linda Solomon Wood", "url": "https://www.niemanlab.org/2024/12/lessons-learned-in-the-building-of-lost-causes/"}, {"x": 8.514511108398438, "y": -3.458909273147583, "topic": -1, "headline": "Blocking out the audience\u2019s siren song", "author": "Jonas Kaiser", "url": "https://www.niemanlab.org/2024/12/blocking-out-the-audiences-siren-song/"}, {"x": 6.461420059204102, "y": -2.7899937629699707, "topic": 4, "headline": "Journalism education leads the change we seek", "author": "Mira Lowe", "url": "https://www.niemanlab.org/2024/12/journalism-education-leads-the-change-we-seek/"}, {"x": 8.235584259033203, "y": -0.37742146849632263, "topic": -1, "headline": "Newsrooms break new ground in AI", "author": "Chase Davis", "url": "https://www.niemanlab.org/2024/12/newsrooms-break-new-ground-in-ai/"}, {"x": 9.648283958435059, "y": -1.7892142534255981, "topic": 2, "headline": "Podcasting becomes the primary strategy, not an afterthought", "author": "Joni Deutsch", "url": "https://www.niemanlab.org/2024/12/podcasting-becomes-the-primary-strategy-not-an-afterthought/"}, {"x": 9.010839462280273, "y": 1.5115655660629272, "topic": 0, "headline": "Get ready for the AI-driven world of news", "author": "Gina Chua", "url": "https://www.niemanlab.org/2024/12/get-ready-for-the-ai-driven-world-of-news/"}, {"x": 9.827605247497559, "y": 1.4666876792907715, "topic": 0, "headline": "Antitrust and AI news converge and get local", "author": "Karina Montoya", "url": "https://www.niemanlab.org/2024/12/antitrust-and-ai-news-converge-and-get-local/"}, {"x": 9.649171829223633, "y": -1.464978814125061, "topic": 2, "headline": "Progressive media at a crossroads", "author": "Anthony Nadler", "url": "https://www.niemanlab.org/2024/12/progressive-media-at-a-crossroads/"}, {"x": 9.300054550170898, "y": -1.5130516290664673, "topic": 2, "headline": "Public media reconciles its past with the present", "author": "Kristen Muller", "url": "https://www.niemanlab.org/2024/12/public-media-reconciles-its-past-with-the-present/"}, {"x": 8.21888256072998, "y": -2.640571355819702, "topic": -1, "headline": "Conflict of interest norms will shift", "author": "Kaitlin C. Miller", "url": "https://www.niemanlab.org/2024/12/conflict-of-interest-norms-will-shift/"}, {"x": 7.195061683654785, "y": -2.105961322784424, "topic": 6, "headline": "The moral injury epidemic", "author": "Andrew Losowsky", "url": "https://www.niemanlab.org/2024/12/the-moral-injury-epidemic/"}, {"x": 9.610570907592773, "y": 1.669007420539856, "topic": 0, "headline": "Adaptive partnerships in the AI data marketplace", "author": "Courtney Radsch", "url": "https://www.niemanlab.org/2024/12/adaptive-partnerships-in-the-ai-data-marketplace/"}, {"x": 8.538067817687988, "y": -1.1496936082839966, "topic": -1, "headline": "Outlets pivot to promoting action, not just news", "author": "Anita Li", "url": "https://www.niemanlab.org/2024/12/outlets-pivot-to-promoting-action-not-just-news/"}, {"x": 9.442846298217773, "y": 1.1098229885101318, "topic": 0, "headline": "AI adoption matures in small and local newsrooms", "author": "Ernest Kung", "url": "https://www.niemanlab.org/2024/12/ai-adoption-matures-in-small-and-local-newsrooms/"}, {"x": 9.263209342956543, "y": -1.3434534072875977, "topic": 2, "headline": "Local media gets its swagger back", "author": "Fran Wills", "url": "https://www.niemanlab.org/2024/12/local-media-gets-its-swagger-back/"}, {"x": 7.562410831451416, "y": -3.8842029571533203, "topic": 1, "headline": "Focus on the people who elect populists", "author": "Francesco Zaffarano", "url": "https://www.niemanlab.org/2024/12/focus-on-the-people-who-elect-populists/"}, {"x": 6.556802749633789, "y": -2.8690528869628906, "topic": 4, "headline": "Young journalists will reimagine a better press", "author": "Christoph Mergerson", "url": "https://www.niemanlab.org/2024/12/young-journalists-will-reimagine-a-better-press/"}, {"x": 8.465250968933105, "y": -2.881842613220215, "topic": -1, "headline": "The publisher is always right", "author": "Gabe Schneider", "url": "https://www.niemanlab.org/2024/12/the-publisher-is-always-right/"}, {"x": 8.041629791259766, "y": -4.015467643737793, "topic": 1, "headline": "Journalists explain legislative procedure", "author": "Nik Usher", "url": "https://www.niemanlab.org/2024/12/journalists-explain-legislative-procedure/"}, {"x": 8.016718864440918, "y": -0.5251643657684326, "topic": -1, "headline": "Impact investment enters the chat", "author": "Adam Thomas", "url": "https://www.niemanlab.org/2024/12/impact-investment-enters-the-chat/"}, {"x": 9.30647087097168, "y": 1.7692039012908936, "topic": 0, "headline": "Divergent paths for journalism\u2019s future with AI", "author": "Alfred Hermida", "url": "https://www.niemanlab.org/2024/12/divergent-paths-for-journalisms-future-with-ai/"}, {"x": 7.298443794250488, "y": -3.590010166168213, "topic": 1, "headline": "Newsrooms reinvent their political journalism", "author": "Alexandra Borchardt", "url": "https://www.niemanlab.org/2024/12/newsrooms-reinvent-their-political-journalism/"}, {"x": 9.568115234375, "y": 1.326934576034546, "topic": 0, "headline": "AI companies grapple with what it means to be creators of news", "author": "Maggie Harrison Dupr\u00e9", "url": "https://www.niemanlab.org/2024/12/ai-companies-grapple-with-what-it-means-to-be-creators-of-news/"}, {"x": 8.867267608642578, "y": 0.02396288700401783, "topic": 3, "headline": "The year newsrooms tackle their structural issues", "author": "Nick Petrie", "url": "https://www.niemanlab.org/2024/12/the-year-newsrooms-tackle-their-structural-issues/"}, {"x": 8.832939147949219, "y": 1.0873624086380005, "topic": -1, "headline": "AI inspires innovation in journalism education", "author": "Cindy Royal", "url": "https://www.niemanlab.org/2024/12/ai-inspires-innovation-in-journalism-education/"}, {"x": 9.809760093688965, "y": -1.6418691873550415, "topic": 2, "headline": "Influencers become journalists", "author": "Jessica Maddox", "url": "https://www.niemanlab.org/2024/12/influencers-become-journalists/"}, {"x": 9.171928405761719, "y": -1.2261309623718262, "topic": 2, "headline": "The print revival comes to news", "author": "Esther Kezia Thorpe", "url": "https://www.niemanlab.org/2024/12/the-print-revival-comes-to-news/"}, {"x": 8.0382080078125, "y": -1.585949420928955, "topic": 5, "headline": "Communities relearn the habits of local news", "author": "Sam Mintz", "url": "https://www.niemanlab.org/2024/12/communities-relearn-the-habits-of-local-news/"}, {"x": 9.958175659179688, "y": -1.3390289545059204, "topic": 2, "headline": "Back to the bundle", "author": "Ben Smith", "url": "https://www.niemanlab.org/2024/12/back-to-the-bundle/"}, {"x": 8.175270080566406, "y": -4.323156356811523, "topic": 1, "headline": "Religious-sounding language will be everywhere in 2025", "author": "Whitney Phillips", "url": "https://www.niemanlab.org/2024/12/religious-sounding-language-will-be-everywhere-in-2025/"}, {"x": 8.503951072692871, "y": -0.14836566150188446, "topic": 3, "headline": "Newsroom planning goes silo-free", "author": "Kendall Trammell", "url": "https://www.niemanlab.org/2024/12/newsroom-planning-goes-silo-free/"}, {"x": 9.602263450622559, "y": 0.4812554717063904, "topic": 3, "headline": "You\u2019ll need to care more about your value chain", "author": "Sam Guzik", "url": "https://www.niemanlab.org/2024/12/youll-need-to-care-more-about-your-value-chain/"}, {"x": 8.86210823059082, "y": 1.6203187704086304, "topic": 0, "headline": "Play with AI like your career depends on it (it does)", "author": "Marie Gilot", "url": "https://www.niemanlab.org/2024/12/play-with-ai-like-your-career-depends-on-it-it-does/"}, {"x": 8.226726531982422, "y": -0.8211579322814941, "topic": -1, "headline": "Your Audience team is now your Creator team", "author": "Ryan Kellett", "url": "https://www.niemanlab.org/2024/12/your-audience-team-is-now-your-creator-team/"}, {"x": 9.464988708496094, "y": -1.6766172647476196, "topic": 2, "headline": "Sports journalists break away from access-based journalism", "author": "Brian Moritz", "url": "https://www.niemanlab.org/2024/12/sports-journalists-break-away-from-access-based-journalism/"}, {"x": 10.09488296508789, "y": -1.4310035705566406, "topic": 2, "headline": "The mainstream media will lose its last grip on relevancy", "author": "Alice Marwick", "url": "https://www.niemanlab.org/2024/12/the-mainstream-media-will-lose-its-last-grip-on-relevancy/"}, {"x": 9.498276710510254, "y": -0.7930121421813965, "topic": -1, "headline": "Meet the new metrics, same as the old metrics", "author": "Margarita Noriega", "url": "https://www.niemanlab.org/2024/12/meet-the-new-metrics-same-as-the-old-metrics/"}];
70
+ const labelData = [{"x": 9.316549301147461, "y": 1.365714192390442, "label": "AI, journalism, technology", "topic": 0}, {"x": 7.845077991485596, "y": -3.8511440753936768, "label": "Political news, journalist protections, legislative process", "topic": 1}, {"x": 9.518735885620117, "y": -1.605789065361023, "label": "Mainstream media, information overload, podcasting", "topic": 2}, {"x": 9.123933792114258, "y": -0.04231225699186325, "label": "Digital news design, audience-centered journalism, strategy", "topic": 3}, {"x": 6.794563293457031, "y": -2.8839304447174072, "label": " Journalism, democracy, change", "topic": 4}, {"x": 8.432768821716309, "y": -1.7722495794296265, "label": " Local, news, decline", "topic": 5}, {"x": 7.383647441864014, "y": -2.239548921585083, "label": " Crime, journalism, burnout", "topic": 6}];
71
+
72
+ function createVisualization() {
73
+ const container = d3.select("#viz");
74
+
75
+ // Set dynamic width and height for responsiveness
76
+ const width = window.innerWidth;
77
+ const height = window.innerHeight;
78
+
79
+ const plot = Plot.plot({
80
+ width: width,
81
+ height: height,
82
+ margin: 50,
83
+ style: {
84
+ background: "white",
85
+ fontSize: 12,
86
+ overflow: "visible"
87
+ },
88
+ color: {
89
+ scheme: "tableau10"
90
+ },
91
+ marks: [
92
+ Plot.dot(pointsData, {
93
+ x: "x",
94
+ y: "y",
95
+ fill: d => `topic${d.topic}`,
96
+ r: 12,
97
+ opacity: 0.6,
98
+ stroke: "white",
99
+ strokeWidth: 0.5
100
+ }),
101
+ Plot.text(labelData, {
102
+ x: "x",
103
+ y: "y",
104
+ text: "label",
105
+ fill: "black",
106
+ fontSize: 16,
107
+ fontWeight: "bold",
108
+ dx: 0,
109
+ dy: 0,
110
+ background: true,
111
+ backgroundPadding: 8,
112
+ backgroundFill: "white",
113
+ backgroundOpacity: 0.9
114
+ })
115
+ ],
116
+ x: {
117
+ axis: null
118
+ },
119
+ y: {
120
+ axis: null
121
+ }
122
+ });
123
+
124
+ container.node().appendChild(plot);
125
+
126
+ const popup = d3.select("#popup");
127
+
128
+ // Function to update popup content and position
129
+ function updatePopup(circle) {
130
+ const index = Array.from(document.querySelectorAll('circle')).indexOf(circle);
131
+ const point = pointsData[index];
132
+ const topic = point.topic;
133
+ const topicLabel = labelData.find(l => l.topic === topic)?.label || 'Unknown Topic';
134
+
135
+ popup
136
+ .style("display", "block")
137
+ .html(`
138
+ <div class="popup-headline">${point.headline}</div>
139
+ <div class="popup-author">By ${point.author || 'Unknown Author'}</div>
140
+ <div class="popup-url">${point.url}</div>
141
+ <div style="margin-top: 8px"><strong>Topic:</strong> ${topicLabel}</div>
142
+ `);
143
+
144
+ const rect = circle.getBoundingClientRect();
145
+ const vizRect = document.getElementById("viz").getBoundingClientRect();
146
+ const popupRect = popup.node().getBoundingClientRect();
147
+ const windowWidth = window.innerWidth;
148
+ const windowHeight = window.innerHeight;
149
+
150
+ // Calculate initial position
151
+ let leftPos = rect.left - vizRect.left + rect.width/2;
152
+ let topPos = rect.top - vizRect.top - popupRect.height - 10;
153
+
154
+ // Check if popup would go outside the window on the right
155
+ if (rect.left + popupRect.width > windowWidth) {
156
+ leftPos = windowWidth - popupRect.width - 20;
157
+ }
158
+ // Check if popup would go outside the window on the left
159
+ if (leftPos < 0) {
160
+ leftPos = 20;
161
+ }
162
+
163
+ // If popup would go above the window, place it below the point instead
164
+ if (topPos < 0) {
165
+ topPos = rect.top - vizRect.top + rect.height + 10;
166
+ }
167
+
168
+ popup
169
+ .style("left", leftPos + "px")
170
+ .style("top", topPos + "px");
171
+ }
172
+
173
+ // Handle clicks on points
174
+ d3.selectAll("circle")
175
+ .style("cursor", "pointer")
176
+ .on("click", function(event) {
177
+ event.stopPropagation(); // Prevent click from immediately closing popup
178
+ updatePopup(this);
179
+ });
180
+
181
+ // Click anywhere else to close popup
182
+ document.addEventListener("click", function() {
183
+ popup.style("display", "none");
184
+ });
185
+
186
+ // Prevent popup from closing when clicking inside it
187
+ popup.node().addEventListener("click", function(event) {
188
+ event.stopPropagation();
189
+ });
190
+ }
191
+
192
+ // Wait for everything to be loaded and on window resize to adjust
193
+ window.addEventListener('load', createVisualization);
194
+ window.addEventListener('resize', function() {
195
+ // Re-create the visualization on window resize
196
+ d3.select("#viz").html('');
197
+ createVisualization();
198
+ });
199
+ </script>
200
+ </body>
201
+ </html>