PageSourceSearch

https://scoring.evidencebasedwyoming.com/my-legislators

html evidencebasedwyoming.com collected 2026-10-01 02:03:38 UTC 19,724 bytes, 557 lines download raw bytes

1<!-- ReSharper disable Html.PathError -->
2<!DOCTYPE html>
3<html lang="en">
4
5<head>
6    <meta charset="utf-8"/>
7    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
8    <title>Evidence Based Wyoming</title>
9    <base href="/"/>
10
11    <!-- MudBlazor CSS -->
12    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
13    <link href="_content/MudBlazor/MudBlazor.min.css" rel="stylesheet"/>
14    <!-- Leaflet.js for district maps -->
15    <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css"
16          integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY="
17          crossorigin=""/>
18    <!-- PSC Markdown Editor CSS -->
19    <link href="_content/PSC.Blazor.Components.MarkdownEditor/css/easymde.min.css" rel="stylesheet"/>
20    <link href="_content/PSC.Blazor.Components.MarkdownEditor/css/markdowneditor.css" rel="stylesheet"/>
21    <!-- MudBlazor.Markdown CSS -->
22    <link href="_content/MudBlazor.Markdown/MudBlazor.Markdown.min.css" rel="stylesheet"/>
23    <link rel="stylesheet" href="css/app.css"/>
24    <link rel="icon" href="favicon.ico"/>
25    <link href="WyomingUltra.Web.styles.css" rel="stylesheet"/>
26
27    <!-- Google reCAPTCHA v2 -->
vendor: 125 bytes, lines 27-30
27
28    <script src="https://www.google.com/recaptcha/api.js?onload=onRecaptchaLoad&render=explicit" async defer></script>
29
30    
30<!-- Application Insights JS SDK (client-side telemetry) -->
31    
31<script type="text/javascript">
32        (function(w, d, cfg) {
33            var t = cfg.name || "appInsights";
34            if (cfg.name || w.appInsightsSDK) {
35                w.appInsightsSDK = t;
36            }
37
38            var ai = w[t] ||
39            (function(cfg) {
40                var s = d.createElement("script");
41                s.src = cfg.src || "https://js.monitor.azure.com/scripts/b/ai.2.min.js";
42                s.async = true;
43                if (cfg.crossOrigin) s.crossOrigin = cfg.crossOrigin;
44                d.getElementsByTagName("head")[0].appendChild(s);
45
46                var queue = [];
47                var methods = [
48                    "Event", "PageView", "Exception", "Trace", "DependencyData", "Metric", "PageViewPerformance", "CustomEvent", "AuthenticatedUserContext", "TelemetryInitializers"
49                ];
50
51                var aiObj = {
52                    config: cfg.cfg || {},
53                    queue: queue,
54                    version: 2,
55                    sv: "8"
56                };
57
58                function createStub(method) {
59                    var name = "track" + method;
60                    aiObj[name] = function() {
61                        var args = arguments;
62                        queue.push(function() { aiObj[name].apply(aiObj, args); });
63                    };
64                }
65
66                for (var i = 0; i < methods.length; i++) {
67                    createStub(methods[i]);
68                }
69
70                aiObj.setAuthenticatedUserContext = function() {
71                    var args = arguments;
72                    queue.push(function() { aiObj.setAuthenticatedUserContext.apply(aiObj, args); });
73                };
74
75                aiObj.clearAuthenticatedUserContext = function() {
76                    var args = arguments;
77                    queue.push(function() { aiObj.clearAuthenticatedUserContext.apply(aiObj, args); });
78                };
79
80                aiObj.flush = function() {
81                    var args = arguments;
82                    queue.push(function() { aiObj.flush.apply(aiObj, args); });
83                };
84
85                return aiObj;
86            })(cfg);
87
88            w[t] = ai;
89            if (ai.queue && ai.queue.length === 0 && typeof ai.trackPageView === "function") {
90                ai.trackPageView({});
91            }
92        })(window,
93            document,
94            {
95                src: "https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js",
96                crossOrigin: "anonymous",
97                cfg: {
98                    connectionString: "InstrumentationKey=9581a67f-7ae4-435e-bd62-4c310492f4ef;IngestionEndpoint=https://eastus-8.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus.livediagnostics.monitor.azure.com/;ApplicationId=58c0397f-8237-45d2-895d-3869f88d3d30",
99                    disableExceptionTracking: false,
100                    enableUnhandledPromiseRejectionTracking: true,
101                    enableAutoRouteTracking: true
102                }
103            });
104    </script>
104
105</head>
106
107<body>
108<div id="app">
109    <div style="display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100vh; background: linear-gradient(135deg, #3a2a1f 0, #492F24 100%);">
110        <svg class="loading-progress" style="width: 80px; height: 80px;">
111            <circle r="40%" cx="50%" cy="50%" style="stroke: #ffffff; stroke: rgba(255, 255, 255, 0.2); fill: none; stroke-width: 8px;"/>
112            <circle r="40%" cx="50%" cy="50%" style="stroke: #ffc425; fill: none; stroke-width: 8px; stroke-dasharray: 251.2; stroke-dashoffset: 0; animation: loading-spin 1.5s linear infinite;"/>
113        </svg>
114        <div style="color: white; font-family: 'Inter', sans-serif; font-size: 1.2rem; margin-top: 1rem;">Loading Evidence Based Wyoming...</div>
115    </div>
116    <style>
117        @keyframes loading-spin {
118            0% { stroke-dashoffset: 251.2; }
119
120            50% { stroke-dashoffset: 62.8; }
121
122            100% { stroke-dashoffset: 251.2; }
123        }
124    </style>
125</div>
126
127<div id="blazor-error-ui">
128    <div class="error-content">
129        <span class="error-icon">⚠️</span>
130        <span class="error-message" onclick="window.showErrorDetails()">
131            <span id="error-summary">An error occurred</span>
132            <span class="click-hint">(click for details)</span>
133        </span>
134        <a href="" class="reload">Reload</a>
135        <a class="dismiss" onclick="document.getElementById('blazor-error-ui').style.display = 'none'">✕</a>
136    </div>
137</div>
138
139<!-- Error Details Modal -->
140<div id="error-modal" class="error-modal">
141    <div class="error-modal-content">
142        <div class="error-modal-header">
143            <span>⚠️ Error Details</span>
144            <button class="error-modal-close" onclick="window.hideErrorDetails()">&times;</button>
145        </div>
146        <div class="error-modal-body">
147            <div class="error-section">
148                <strong>Message:</strong>
149                <pre id="error-detail-message"></pre>
150            </div>
151            <div class="error-section">
152                <strong>Stack Trace:</strong>
153                <pre id="error-detail-stack"></pre>
154            </div>
155            <div class="error-section">
156                <strong>Time:</strong>
157                <span id="error-detail-time"></span>
158            </div>
159        </div>
160        <div class="error-modal-footer">
161            <button onclick="window.copyErrorToClipboard()">📋 Copy to Clipboard</button>
162            <button onclick="window.hideErrorDetails()">Close</button>
163        </div>
164    </div>
165</div>
166
167<style>
168    #blazor-error-ui {
169        display: none;
170        position: fixed;
171        bottom: 0;
172        left: 0;
173        right: 0;
174        z-index: 9999;
175        background: linear-gradient(135deg, #dc2626 0, #b91c1c 100%);
176        color: white;
177        box-shadow: 0 -4px 20px #000000;
178        box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.3);
179        font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
180    }
181
182    #blazor-error-ui .error-content {
183        display: flex;
184        align-items: center;
185        justify-content: center;
186        gap: 1rem;
187        padding: 1rem 2rem;
188        max-width: 1200px;
189        margin: 0 auto;
190    }
191
192    #blazor-error-ui .error-icon { font-size: 1.5rem; }
193
194    #blazor-error-ui .error-message {
195        flex: 1;
196        font-size: 0.95rem;
197        cursor: pointer;
198        padding: 0.5rem;
199        border-radius: 4px;
200        transition: background 0.2s;
201    }
202
203    #blazor-error-ui .error-message:hover {
204        background: #ffffff;
205        background: rgba(255, 255, 255, 0.1);
206    }
207
208    #blazor-error-ui .click-hint {
209        font-size: 0.8rem;
210        opacity: 0.8;
211        margin-left: 0.5rem;
212    }
213
214    #blazor-error-ui a, #blazor-error-ui .dismiss {
215        padding: 0.5rem 1rem;
216        border-radius: 4px;
217        text-decoration: none;
218        font-weight: 500;
219        transition: background 0.2s;
220        cursor: pointer;
221    }
222
223    #blazor-error-ui .reload {
224        background: #ffc425;
225        color: #1a1a1a;
226    }
227
228    #blazor-error-ui .reload:hover { background: #ffd54f; }
229
230    #blazor-error-ui .dismiss {
231        background: #ffffff;
232        background: rgba(255, 255, 255, 0.2);
233        color: white;
234    }
235
236    #blazor-error-ui .dismiss:hover {
237        background: #ffffff;
238        background: rgba(255, 255, 255, 0.3);
239    }
240
241    /* Error Modal Styles */
242
243    .error-modal {
244        display: none;
245        position: fixed;
246        top: 0;
247        left: 0;
248        right: 0;
249        bottom: 0;
250        background: #000000;
251        background: rgba(0, 0, 0, 0.7);
252        z-index: 10000;
253        font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
254    }
255
256    .error-modal-content {
257        position: absolute;
258        top: 50%;
259        left: 50%;
260        transform: translate(-50%, -50%);
261        background: #1a1a1a;
262        color: #e5e5e5;
263        border-radius: 8px;
264        width: 90%;
265        max-width: 800px;
266        max-height: 80vh;
267        display: flex;
268        flex-direction: column;
269        box-shadow: 0 20px 60px #000000;
270        box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
271    }
272
273    .error-modal-header {
274        display: flex;
275        justify-content: space-between;
276        align-items: center;
277        padding: 1rem 1.5rem;
278        background: #dc2626;
279        color: white;
280        border-radius: 8px 8px 0 0;
281        font-weight: 600;
282        font-size: 1.1rem;
283    }
284
285    .error-modal-close {
286        background: none;
287        border: none;
288        color: white;
289        font-size: 1.5rem;
290        cursor: pointer;
291        padding: 0 0.5rem;
292    }
293
294    .error-modal-close:hover { opacity: 0.8; }
295
296    .error-modal-body {
297        padding: 1.5rem;
298        overflow-y: auto;
299        flex: 1;
300    }
301
302    .error-section { margin-bottom: 1rem; }
303
304    .error-section strong {
305        display: block;
306        color: #ffc425;
307        margin-bottom: 0.5rem;
308    }
309
310    .error-section pre {
311        background: #2d2d2d;
312        padding: 1rem;
313        border-radius: 4px;
314        overflow-x: auto;
315        font-size: 0.85rem;
316        line-height: 1.5;
317        white-space: pre-wrap;
318        word-break: break-word;
319        margin: 0;
320        max-height: 200px;
321        overflow-y: auto;
322    }
323
324    .error-modal-footer {
325        padding: 1rem 1.5rem;
326        border-top: 1px solid #333;
327        display: flex;
328        gap: 1rem;
329        justify-content: flex-end;
330    }
331
332    .error-modal-footer button {
333        padding: 0.5rem 1rem;
334        border: none;
335        border-radius: 4px;
336        cursor: pointer;
337        font-weight: 500;
338        transition: background 0.2s;
339    }
340
341    .error-modal-footer button:first-child {
342        background: #ffc425;
343        color: #1a1a1a;
344    }
345
346    .error-modal-footer button:last-child {
347        background: #444;
348        color: white;
349    }
350
351    .error-modal-footer button:hover { opacity: 0.9; }
352</style>
353
354<script>
355    // Store error details
356    window.lastError = { message: '', stack: '', time: '' };
357
358// Intercept console.error to capture Blazor .NET exceptions.
359// Blazor WASM logs unhandled .NET exceptions via console.error but does NOT
360// trigger window.onerror or onunhandledrejection, so we must intercept here.
361    (function() {
362        var originalConsoleError = console.error;
363        console.error = function() {
364            var parts = [];
365            for (var i = 0; i < arguments.length; i++) {
366                var arg = arguments[i];
367                if (arg instanceof Error) {
368                    parts.push(arg.message);
369                    if (arg.stack) {
370                        window.lastError.stack = arg.stack;
371                    }
372                } else if (typeof arg === 'object' && arg !== null) {
373                    try {
374                        parts.push(JSON.stringify(arg));
375                    } catch (e) {
376                        parts.push(String(arg));
377                    }
378                } else {
379                    parts.push(String(arg));
380                }
381            }
382
383            var message = parts.join(' ');
384
385            // Capture if it looks like an actual error (not routine logging)
386            if (message &&
387            (message.includes('Error') ||
388                message.includes('error') ||
389                message.includes('Exception') ||
390                message.includes('exception') ||
391                message.includes('Unhandled') ||
392                message.includes('fail'))) {
393                window.lastError = {
394                    message: message,
395                    stack: window.lastError.stack || 'See browser console (F12) for full details',
396                    time: new Date().toLocaleString()
397                };
398                var summary = document.getElementById('error-summary');
399                if (summary) {
400                    summary.textContent = message.length > 80 ? message.substring(0, 80) + '...' : message;
401                }
402            }
403
404            originalConsoleError.apply(console, arguments);
405        };
406    })();
407
408// Capture unhandled JS errors
409    window.onerror = function(message, source, lineno, colno, error) {
410        window.lastError = {
411            message: message + (source ? '\n\nSource: ' + source + ':' + lineno + ':' + colno : ''),
412            stack: error && error.stack ? error.stack : 'No stack trace available',
413            time: new Date().toLocaleString()
414        };
415        document.getElementById('error-summary').textContent =
416            message.length > 80 ? message.substring(0, 80) + '...' : message;
417    };
418
419// Capture unhandled promise rejections
420    window.onunhandledrejection = function(event) {
421        var reason = event.reason;
422        window.lastError = {
423            message: reason && reason.message ? reason.message : 
423String(reason),
424            stack: reason && reason.stack ? reason.stack : 'No stack trace available',
425            time: new Date().toLocaleString()
426        };
427        var msg = window.lastError.message;
428        document.getElementById('error-summary').textContent =
429            msg.length > 80 ? msg.substring(0, 80) + '...' : msg;
430    };
431
432// Watch for Blazor showing the error bar (display attribute changes).
433// Catches cases where Blazor sets the error UI visible but nothing else captured the details.
434    (function() {
435        var errorUi = document.getElementById('blazor-error-ui');
436        if (errorUi) {
437            var observer = new MutationObserver(function(mutations) {
438                mutations.forEach(function(m) {
439                    if (m.attributeName === 'style' && errorUi.style.display !== 'none' && errorUi.style.display !== '') {
440                        if (!window.lastError.message) {
441                            window.lastError = {
442                                message: 'Blazor runtime error (check browser F12 console for details)',
443                                stack: 'The .NET exception was not captured by JS handlers. Open F12 > Console for the full error.',
444                                time: new Date().toLocaleString()
445                            };
446                        }
447                    }
448                });
449            });
450            observer.observe(errorUi, { attributes: true, attributeFilter: ['style'] });
451        }
452    })();
453
454    window.showErrorDetails = function() {
455        document.getElementById('error-detail-message').textContent = window.lastError.message || 'Unknown error';
456        document.getElementById('error-detail-stack').textContent = window.lastError.stack || 'No stack trace';
457        document.getElementById('error-detail-time').textContent = window.lastError.time || 'Unknown';
458        document.getElementById('error-modal').style.display = 'block';
459    };
460
461    window.hideErrorDetails = function() {
462        document.getElementById('error-modal').style.display = 'none';
463    };
464
465    window.copyErrorToClipboard = function() {
466        var text = 'Error: ' +
467            window.lastError.message +
468            '\n\nStack Trace:\n' +
469            window.lastError.stack +
470            '\n\nTime: ' +
471            window.lastError.time;
472        navigator.clipboard.writeText(text).then(function() {
473            alert('Error details copied to clipboard!');
474        });
475    };
476
477// Close modal on escape key
478    document.addEventListener('keydown',
479        function(e) {
480            if (e.key === 'Escape') window.hideErrorDetails();
481        });
482
483// Close modal on backdrop click
484    document.getElementById('error-modal').addEventListener('click',
485        function(e) {
486            if (e.target === this) window.hideErrorDetails();
487        });
488
489// Legislator lookup for chart tooltips
490    window.legislatorLookup = {};
491
492    window.setLegislatorLookup = function(data) {
493        window.legislatorLookup = data || {};
494    };
495
496// ReSharper disable once UnusedParameter
497    window.getLegislatorName = function(x, y, seriesIndex) {
498        var key = Math.round(x * 10) + '_' + Math.round(y * 10);
499        var entry = window.legislatorLookup[key];
500        return entry ? entry.name : null;
501    };
502</script>
502
503
504<!-- LocalStorage helpers for Blazor interop -->
505<script>
506    window.localStorageGet = function(key) { return localStorage.getItem(key); };
507    window.localStorageSet = function(key, value) { localStorage.setItem(key, value); };
508</script>
508
509
510<!-- D3.js for force-directed network graph -->
511<script src="https://d3js.org/d3.v7.min.js"></script>
511
512<!-- Leaflet.js for district maps -->
513<script src="https://unpkg.com/[email protected]/dist/leaflet.js"
514        integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo="
515        crossorigin=""></script>
515
516<!-- Leaflet map interop -->
517<script src="js/leafletMap.js"></script>
517
518<!-- File helpers for Scorecard export/import -->
519<script src="js/fileHelpers.js"></script>
519
520<!-- Network graph visualization -->
521<script src="js/networkGraph.js"></script>
521
522<!-- Position spectrum bar chart -->
523<script src="js/positionSpectrum.js"></script>
523
524<!-- PSC Markdown Editor JS -->
525<script src="_content/PSC.Blazor.Components.MarkdownEditor/js/easymde.min.js"></script>
vendor: 1 bytes, line 525
525
526<script src="_content/PSC.Blazor.Components.MarkdownEditor/js/markdownEditor.js"></script>
526
527<!-- MudBlazor.Markdown JS -->
528<script src="_content/MudBlazor.Markdown/MudBlazor.Markdown.min.js"></script>
528
529<!-- MudBlazor JS -->
530<script src="_content/MudBlazor/MudBlazor.min.js"></script>
530
531<!-- MSAL authentication for Azure Entra ID -->
532<script src="_content/Microsoft.Authentication.WebAssembly.Msal/AuthenticationService.js"></script>
vendor: 1 bytes, line 532
532
533<script src="_framework/blazor.webassembly.js"></script>
533
534
535<!-- reCAPTCHA Blazor interop -->
536<script>
537    window.recaptchaReady = false;
538    window.onRecaptchaLoad = function() { window.recaptchaReady = true; };
539
540    window.renderRecaptcha = function(elementId, siteKey) {
541        if (!window.recaptchaReady) return -1;
542        return grecaptcha.render(elementId, { 'sitekey': siteKey });
543    };
544
545    window.getRecaptchaResponse = function(widgetId) {
546        if (widgetId < 0) return '';
547        return grecaptcha.getResponse(widgetId);
548    };
549
550    window.resetRecaptcha = function(widgetId) {
551        if (widgetId >= 0) grecaptcha.reset(widgetId);
552    };
553</script>
553
554</body>
555
556</html>
557<!-- ReSharper restore Html.PathError -->

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.