This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Repository files navigation

AP ELECTION LOADER

Relies on Elex, a command-line tool to get results from the AP Election API 2.0. Demonstrates a method putting those results into a Postgres database using the COPY method and the loader's CSV output.

Assumptions

The following things are assumed to be true in this documentation.

  • You are running OSX.
  • You are using Python 2.7. (Probably the version that came OSX.)
  • You have pip, virtualenv and virtualenvwrapper installed and working.

See "Chapter 2: Install Virtualenv" of NPR's development environment blog post for details.

Having trouble on OS X El Capitan? See: Can't install virtualenvwrapper on OSX 10.11 El Capitan.

Getting started

mkvirtualenv elex-loader
git clone git@github.com:newsdev/elex-loader.git && cd elex-loader
pip install -r requirements.txt
./scripts/$ENV/bootstrap.sh

The bootstrap.sh script will create databases and the user necessary for local development. Note: This does not exist for non-development environments. Please use commands in elex-dotfiles instead.

Environments

The New York Times defines a handful of different environments; principally, dev, stg and prd.

  • dev: Hits test URLs by default. Assumes a local Postgres database where the local user is a superuser.
  • stg: Hits test URLs by default. Requires a Postgres user / host / password to be defined in the environment. We use a .pgpass file and export the rest in /etc/environment. Check out elex-dotfiles for more.
  • prd: Hits live URLs by default. Requires a Postgres user / host / password to be defined in the environment.

Use cases

Load initial data

./scripts/$ENV/reload.sh

The AP will make "live zeros" available in the morning of an election day. You can run reload.sh to get an entire new set of data, including races, reporting units, candidates and zeroed-out results.

Load results on election night

./scripts/$ENV/daemon.sh

The daemon will run 100,000 times (seriously) unless it is stopped. We control ours with a custom Supervisord instance and a modified /etc/supervisord.conf. This configuration file is available in elex-dotfiles along with other secrets.

Set a wait interval

You might want to control how long the daemon waits between cycles. This is hardcoded to a default -- 15s in production, 30s elsewhere. You can create the file /tmp/elex_loader_timeout.sh and export an ELEX_LOADER_TIMEOUT variable like this:

export ELEX_LOADER_TIMEOUT=60

The daemon checks for this file and sources it if it exists in every loop, which means you can dynamically control the wait time. For example, we do this in our admin.

Load results once

./scripts/$ENV/update.sh

Sometimes you just need to load a single update, e.g., to grab final results after we've turned off the loader. This command will get new results without baking or reloading any other parts of the database.

Load delegate data

./scripts/$ENV/delegates.sh

Often, the AP will update delegate information after our daemon has stopped running. To update just delegates for a given racedate, run this command.

About

The NYT AP election loader scripts

Topics

Resources

Stars

22 stars

Watchers

34 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Repository files navigation

AP ELECTION LOADER

Relies on Elex, a command-line tool to get results from the AP Election API 2.0. Demonstrates a method putting those results into a Postgres database using the COPY method and the loader's CSV output.

Assumptions

The following things are assumed to be true in this documentation.

  • You are running OSX.
  • You are using Python 2.7. (Probably the version that came OSX.)
  • You have pip, virtualenv and virtualenvwrapper installed and working.

See "Chapter 2: Install Virtualenv" of NPR's development environment blog post for details.

Having trouble on OS X El Capitan? See: Can't install virtualenvwrapper on OSX 10.11 El Capitan.

Getting started

mkvirtualenv elex-loader
git clone git@github.com:newsdev/elex-loader.git && cd elex-loader
pip install -r requirements.txt
./scripts/$ENV/bootstrap.sh

The bootstrap.sh script will create databases and the user necessary for local development. Note: This does not exist for non-development environments. Please use commands in elex-dotfiles instead.

Environments

The New York Times defines a handful of different environments; principally, dev, stg and prd.

  • dev: Hits test URLs by default. Assumes a local Postgres database where the local user is a superuser.
  • stg: Hits test URLs by default. Requires a Postgres user / host / password to be defined in the environment. We use a .pgpass file and export the rest in /etc/environment. Check out elex-dotfiles for more.
  • prd: Hits live URLs by default. Requires a Postgres user / host / password to be defined in the environment.

Use cases

Load initial data

./scripts/$ENV/reload.sh

The AP will make "live zeros" available in the morning of an election day. You can run reload.sh to get an entire new set of data, including races, reporting units, candidates and zeroed-out results.

Load results on election night

./scripts/$ENV/daemon.sh

The daemon will run 100,000 times (seriously) unless it is stopped. We control ours with a custom Supervisord instance and a modified /etc/supervisord.conf. This configuration file is available in elex-dotfiles along with other secrets.

Set a wait interval

You might want to control how long the daemon waits between cycles. This is hardcoded to a default -- 15s in production, 30s elsewhere. You can create the file /tmp/elex_loader_timeout.sh and export an ELEX_LOADER_TIMEOUT variable like this:

export ELEX_LOADER_TIMEOUT=60

The daemon checks for this file and sources it if it exists in every loop, which means you can dynamically control the wait time. For example, we do this in our admin.

Load results once

./scripts/$ENV/update.sh

Sometimes you just need to load a single update, e.g., to grab final results after we've turned off the loader. This command will get new results without baking or reloading any other parts of the database.

Load delegate data

./scripts/$ENV/delegates.sh

Often, the AP will update delegate information after our daemon has stopped running. To update just delegates for a given racedate, run this command.

About

The NYT AP election loader scripts

Topics

Resources

Stars

22 stars

Watchers

34 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Repository files navigation

AP ELECTION LOADER

Relies on Elex, a command-line tool to get results from the AP Election API 2.0. Demonstrates a method putting those results into a Postgres database using the COPY method and the loader's CSV output.

Assumptions

The following things are assumed to be true in this documentation.

  • You are running OSX.
  • You are using Python 2.7. (Probably the version that came OSX.)
  • You have pip, virtualenv and virtualenvwrapper installed and working.

See "Chapter 2: Install Virtualenv" of NPR's development environment blog post for details.

Having trouble on OS X El Capitan? See: Can't install virtualenvwrapper on OSX 10.11 El Capitan.

Getting started

mkvirtualenv elex-loader
git clone git@github.com:newsdev/elex-loader.git && cd elex-loader
pip install -r requirements.txt
./scripts/$ENV/bootstrap.sh

The bootstrap.sh script will create databases and the user necessary for local development. Note: This does not exist for non-development environments. Please use commands in elex-dotfiles instead.

Environments

The New York Times defines a handful of different environments; principally, dev, stg and prd.

  • dev: Hits test URLs by default. Assumes a local Postgres database where the local user is a superuser.
  • stg: Hits test URLs by default. Requires a Postgres user / host / password to be defined in the environment. We use a .pgpass file and export the rest in /etc/environment. Check out elex-dotfiles for more.
  • prd: Hits live URLs by default. Requires a Postgres user / host / password to be defined in the environment.

Use cases

Load initial data

./scripts/$ENV/reload.sh

The AP will make "live zeros" available in the morning of an election day. You can run reload.sh to get an entire new set of data, including races, reporting units, candidates and zeroed-out results.

Load results on election night

./scripts/$ENV/daemon.sh

The daemon will run 100,000 times (seriously) unless it is stopped. We control ours with a custom Supervisord instance and a modified /etc/supervisord.conf. This configuration file is available in elex-dotfiles along with other secrets.

Set a wait interval

You might want to control how long the daemon waits between cycles. This is hardcoded to a default -- 15s in production, 30s elsewhere. You can create the file /tmp/elex_loader_timeout.sh and export an ELEX_LOADER_TIMEOUT variable like this:

export ELEX_LOADER_TIMEOUT=60

The daemon checks for this file and sources it if it exists in every loop, which means you can dynamically control the wait time. For example, we do this in our admin.

Load results once

./scripts/$ENV/update.sh

Sometimes you just need to load a single update, e.g., to grab final results after we've turned off the loader. This command will get new results without baking or reloading any other parts of the database.

Load delegate data

./scripts/$ENV/delegates.sh

Often, the AP will update delegate information after our daemon has stopped running. To update just delegates for a given racedate, run this command.

About

The NYT AP election loader scripts

Topics

Resources

Stars

22 stars

Watchers

34 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Repository files navigation

AP ELECTION LOADER

Relies on Elex, a command-line tool to get results from the AP Election API 2.0. Demonstrates a method putting those results into a Postgres database using the COPY method and the loader's CSV output.

Assumptions

The following things are assumed to be true in this documentation.

  • You are running OSX.
  • You are using Python 2.7. (Probably the version that came OSX.)
  • You have pip, virtualenv and virtualenvwrapper installed and working.

See "Chapter 2: Install Virtualenv" of NPR's development environment blog post for details.

Having trouble on OS X El Capitan? See: Can't install virtualenvwrapper on OSX 10.11 El Capitan.

Getting started

mkvirtualenv elex-loader
git clone git@github.com:newsdev/elex-loader.git && cd elex-loader
pip install -r requirements.txt
./scripts/$ENV/bootstrap.sh

The bootstrap.sh script will create databases and the user necessary for local development. Note: This does not exist for non-development environments. Please use commands in elex-dotfiles instead.

Environments

The New York Times defines a handful of different environments; principally, dev, stg and prd.

  • dev: Hits test URLs by default. Assumes a local Postgres database where the local user is a superuser.
  • stg: Hits test URLs by default. Requires a Postgres user / host / password to be defined in the environment. We use a .pgpass file and export the rest in /etc/environment. Check out elex-dotfiles for more.
  • prd: Hits live URLs by default. Requires a Postgres user / host / password to be defined in the environment.

Use cases

Load initial data

./scripts/$ENV/reload.sh

The AP will make "live zeros" available in the morning of an election day. You can run reload.sh to get an entire new set of data, including races, reporting units, candidates and zeroed-out results.

Load results on election night

./scripts/$ENV/daemon.sh

The daemon will run 100,000 times (seriously) unless it is stopped. We control ours with a custom Supervisord instance and a modified /etc/supervisord.conf. This configuration file is available in elex-dotfiles along with other secrets.

Set a wait interval

You might want to control how long the daemon waits between cycles. This is hardcoded to a default -- 15s in production, 30s elsewhere. You can create the file /tmp/elex_loader_timeout.sh and export an ELEX_LOADER_TIMEOUT variable like this:

export ELEX_LOADER_TIMEOUT=60

The daemon checks for this file and sources it if it exists in every loop, which means you can dynamically control the wait time. For example, we do this in our admin.

Load results once

./scripts/$ENV/update.sh

Sometimes you just need to load a single update, e.g., to grab final results after we've turned off the loader. This command will get new results without baking or reloading any other parts of the database.

Load delegate data

./scripts/$ENV/delegates.sh

Often, the AP will update delegate information after our daemon has stopped running. To update just delegates for a given racedate, run this command.

About

The NYT AP election loader scripts

Topics

Resources

Stars

22 stars

Watchers

34 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Repository files navigation

AP ELECTION LOADER

Relies on Elex, a command-line tool to get results from the AP Election API 2.0. Demonstrates a method putting those results into a Postgres database using the COPY method and the loader's CSV output.

Assumptions

The following things are assumed to be true in this documentation.

  • You are running OSX.
  • You are using Python 2.7. (Probably the version that came OSX.)
  • You have pip, virtualenv and virtualenvwrapper installed and working.

See "Chapter 2: Install Virtualenv" of NPR's development environment blog post for details.

Having trouble on OS X El Capitan? See: Can't install virtualenvwrapper on OSX 10.11 El Capitan.

Getting started

mkvirtualenv elex-loader
git clone git@github.com:newsdev/elex-loader.git && cd elex-loader
pip install -r requirements.txt
./scripts/$ENV/bootstrap.sh

The bootstrap.sh script will create databases and the user necessary for local development. Note: This does not exist for non-development environments. Please use commands in elex-dotfiles instead.

Environments

The New York Times defines a handful of different environments; principally, dev, stg and prd.

  • dev: Hits test URLs by default. Assumes a local Postgres database where the local user is a superuser.
  • stg: Hits test URLs by default. Requires a Postgres user / host / password to be defined in the environment. We use a .pgpass file and export the rest in /etc/environment. Check out elex-dotfiles for more.
  • prd: Hits live URLs by default. Requires a Postgres user / host / password to be defined in the environment.

Use cases

Load initial data

./scripts/$ENV/reload.sh

The AP will make "live zeros" available in the morning of an election day. You can run reload.sh to get an entire new set of data, including races, reporting units, candidates and zeroed-out results.

Load results on election night

./scripts/$ENV/daemon.sh

The daemon will run 100,000 times (seriously) unless it is stopped. We control ours with a custom Supervisord instance and a modified /etc/supervisord.conf. This configuration file is available in elex-dotfiles along with other secrets.

Set a wait interval

You might want to control how long the daemon waits between cycles. This is hardcoded to a default -- 15s in production, 30s elsewhere. You can create the file /tmp/elex_loader_timeout.sh and export an ELEX_LOADER_TIMEOUT variable like this:

export ELEX_LOADER_TIMEOUT=60

The daemon checks for this file and sources it if it exists in every loop, which means you can dynamically control the wait time. For example, we do this in our admin.

Load results once

./scripts/$ENV/update.sh

Sometimes you just need to load a single update, e.g., to grab final results after we've turned off the loader. This command will get new results without baking or reloading any other parts of the database.

Load delegate data

./scripts/$ENV/delegates.sh

Often, the AP will update delegate information after our daemon has stopped running. To update just delegates for a given racedate, run this command.

About

The NYT AP election loader scripts

Topics

Resources

Stars

22 stars

Watchers

34 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Repository files navigation

AP ELECTION LOADER

Relies on Elex, a command-line tool to get results from the AP Election API 2.0. Demonstrates a method putting those results into a Postgres database using the COPY method and the loader's CSV output.

Assumptions

The following things are assumed to be true in this documentation.

  • You are running OSX.
  • You are using Python 2.7. (Probably the version that came OSX.)
  • You have pip, virtualenv and virtualenvwrapper installed and working.

See "Chapter 2: Install Virtualenv" of NPR's development environment blog post for details.

Having trouble on OS X El Capitan? See: Can't install virtualenvwrapper on OSX 10.11 El Capitan.

Getting started

mkvirtualenv elex-loader
git clone git@github.com:newsdev/elex-loader.git && cd elex-loader
pip install -r requirements.txt
./scripts/$ENV/bootstrap.sh

The bootstrap.sh script will create databases and the user necessary for local development. Note: This does not exist for non-development environments. Please use commands in elex-dotfiles instead.

Environments

The New York Times defines a handful of different environments; principally, dev, stg and prd.

  • dev: Hits test URLs by default. Assumes a local Postgres database where the local user is a superuser.
  • stg: Hits test URLs by default. Requires a Postgres user / host / password to be defined in the environment. We use a .pgpass file and export the rest in /etc/environment. Check out elex-dotfiles for more.
  • prd: Hits live URLs by default. Requires a Postgres user / host / password to be defined in the environment.

Use cases

Load initial data

./scripts/$ENV/reload.sh

The AP will make "live zeros" available in the morning of an election day. You can run reload.sh to get an entire new set of data, including races, reporting units, candidates and zeroed-out results.

Load results on election night

./scripts/$ENV/daemon.sh

The daemon will run 100,000 times (seriously) unless it is stopped. We control ours with a custom Supervisord instance and a modified /etc/supervisord.conf. This configuration file is available in elex-dotfiles along with other secrets.

Set a wait interval

You might want to control how long the daemon waits between cycles. This is hardcoded to a default -- 15s in production, 30s elsewhere. You can create the file /tmp/elex_loader_timeout.sh and export an ELEX_LOADER_TIMEOUT variable like this:

export ELEX_LOADER_TIMEOUT=60

The daemon checks for this file and sources it if it exists in every loop, which means you can dynamically control the wait time. For example, we do this in our admin.

Load results once

./scripts/$ENV/update.sh

Sometimes you just need to load a single update, e.g., to grab final results after we've turned off the loader. This command will get new results without baking or reloading any other parts of the database.

Load delegate data

./scripts/$ENV/delegates.sh

Often, the AP will update delegate information after our daemon has stopped running. To update just delegates for a given racedate, run this command.

About

The NYT AP election loader scripts

Topics

Resources

Stars

22 stars

Watchers

34 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Repository files navigation

AP ELECTION LOADER

Relies on Elex, a command-line tool to get results from the AP Election API 2.0. Demonstrates a method putting those results into a Postgres database using the COPY method and the loader's CSV output.

Assumptions

The following things are assumed to be true in this documentation.

  • You are running OSX.
  • You are using Python 2.7. (Probably the version that came OSX.)
  • You have pip, virtualenv and virtualenvwrapper installed and working.

See "Chapter 2: Install Virtualenv" of NPR's development environment blog post for details.

Having trouble on OS X El Capitan? See: Can't install virtualenvwrapper on OSX 10.11 El Capitan.

Getting started

mkvirtualenv elex-loader
git clone git@github.com:newsdev/elex-loader.git && cd elex-loader
pip install -r requirements.txt
./scripts/$ENV/bootstrap.sh

The bootstrap.sh script will create databases and the user necessary for local development. Note: This does not exist for non-development environments. Please use commands in elex-dotfiles instead.

Environments

The New York Times defines a handful of different environments; principally, dev, stg and prd.

  • dev: Hits test URLs by default. Assumes a local Postgres database where the local user is a superuser.
  • stg: Hits test URLs by default. Requires a Postgres user / host / password to be defined in the environment. We use a .pgpass file and export the rest in /etc/environment. Check out elex-dotfiles for more.
  • prd: Hits live URLs by default. Requires a Postgres user / host / password to be defined in the environment.

Use cases

Load initial data

./scripts/$ENV/reload.sh

The AP will make "live zeros" available in the morning of an election day. You can run reload.sh to get an entire new set of data, including races, reporting units, candidates and zeroed-out results.

Load results on election night

./scripts/$ENV/daemon.sh

The daemon will run 100,000 times (seriously) unless it is stopped. We control ours with a custom Supervisord instance and a modified /etc/supervisord.conf. This configuration file is available in elex-dotfiles along with other secrets.

Set a wait interval

You might want to control how long the daemon waits between cycles. This is hardcoded to a default -- 15s in production, 30s elsewhere. You can create the file /tmp/elex_loader_timeout.sh and export an ELEX_LOADER_TIMEOUT variable like this:

export ELEX_LOADER_TIMEOUT=60

The daemon checks for this file and sources it if it exists in every loop, which means you can dynamically control the wait time. For example, we do this in our admin.

Load results once

./scripts/$ENV/update.sh

Sometimes you just need to load a single update, e.g., to grab final results after we've turned off the loader. This command will get new results without baking or reloading any other parts of the database.

Load delegate data

./scripts/$ENV/delegates.sh

Often, the AP will update delegate information after our daemon has stopped running. To update just delegates for a given racedate, run this command.

About

The NYT AP election loader scripts

Topics

Resources

Stars

22 stars

Watchers

34 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Repository files navigation

AP ELECTION LOADER

Relies on Elex, a command-line tool to get results from the AP Election API 2.0. Demonstrates a method putting those results into a Postgres database using the COPY method and the loader's CSV output.

Assumptions

The following things are assumed to be true in this documentation.

  • You are running OSX.
  • You are using Python 2.7. (Probably the version that came OSX.)
  • You have pip, virtualenv and virtualenvwrapper installed and working.

See "Chapter 2: Install Virtualenv" of NPR's development environment blog post for details.

Having trouble on OS X El Capitan? See: Can't install virtualenvwrapper on OSX 10.11 El Capitan.

Getting started

mkvirtualenv elex-loader
git clone git@github.com:newsdev/elex-loader.git && cd elex-loader
pip install -r requirements.txt
./scripts/$ENV/bootstrap.sh

The bootstrap.sh script will create databases and the user necessary for local development. Note: This does not exist for non-development environments. Please use commands in elex-dotfiles instead.

Environments

The New York Times defines a handful of different environments; principally, dev, stg and prd.

  • dev: Hits test URLs by default. Assumes a local Postgres database where the local user is a superuser.
  • stg: Hits test URLs by default. Requires a Postgres user / host / password to be defined in the environment. We use a .pgpass file and export the rest in /etc/environment. Check out elex-dotfiles for more.
  • prd: Hits live URLs by default. Requires a Postgres user / host / password to be defined in the environment.

Use cases

Load initial data

./scripts/$ENV/reload.sh

The AP will make "live zeros" available in the morning of an election day. You can run reload.sh to get an entire new set of data, including races, reporting units, candidates and zeroed-out results.

Load results on election night

./scripts/$ENV/daemon.sh

The daemon will run 100,000 times (seriously) unless it is stopped. We control ours with a custom Supervisord instance and a modified /etc/supervisord.conf. This configuration file is available in elex-dotfiles along with other secrets.

Set a wait interval

You might want to control how long the daemon waits between cycles. This is hardcoded to a default -- 15s in production, 30s elsewhere. You can create the file /tmp/elex_loader_timeout.sh and export an ELEX_LOADER_TIMEOUT variable like this:

export ELEX_LOADER_TIMEOUT=60

The daemon checks for this file and sources it if it exists in every loop, which means you can dynamically control the wait time. For example, we do this in our admin.

Load results once

./scripts/$ENV/update.sh

Sometimes you just need to load a single update, e.g., to grab final results after we've turned off the loader. This command will get new results without baking or reloading any other parts of the database.

Load delegate data

./scripts/$ENV/delegates.sh

Often, the AP will update delegate information after our daemon has stopped running. To update just delegates for a given racedate, run this command.

About

The NYT AP election loader scripts

Topics

Resources

Stars

22 stars

Watchers

34 watching

Forks

Releases

Packages

Used by

Contributors

Languages