diff --git a/README.md b/README.md
index 3c33048..d1171b0 100644
--- a/README.md
+++ b/README.md
@@ -336,9 +336,6 @@ When using Docker:
* **Static deployment**: Mount your `custom.js` file to `/usr/share/nginx/html/scripts/custom.js`
* **Server deployment**: Mount your `custom.js` file to `/app/server/scripts/custom.js`
-### RSS feeds and custom scroll
-If you would like your Weatherstar to have custom scrolling text in the bottom blue bar, or show headlines from an rss feed turn on the setting for `Enable RSS Feed/Text` and then enter a URL or text in the resulting text box. Then press set.
-
## Issue reporting and feature requests
Please do not report issues with api.weather.gov being down. It's a new service and not considered fully operational yet. I've also observed that the API can go down on a regional basis (based on NWS office locations). This means that you may have problems getting data for, say, Chicago right now, but Dallas and others are working just fine.
diff --git a/gulp/publish-frontend.mjs b/gulp/publish-frontend.mjs
index e6369a2..ed83fdd 100644
--- a/gulp/publish-frontend.mjs
+++ b/gulp/publish-frontend.mjs
@@ -86,7 +86,6 @@ const mjsSources = [
'server/scripts/modules/travelforecast.mjs',
'server/scripts/modules/progress.mjs',
'server/scripts/modules/media.mjs',
- 'server/scripts/modules/custom-rss-feed.mjs',
'server/scripts/index.mjs',
];
diff --git a/server/scripts/modules/custom-rss-feed.mjs b/server/scripts/modules/custom-rss-feed.mjs
deleted file mode 100644
index ee03b96..0000000
--- a/server/scripts/modules/custom-rss-feed.mjs
+++ /dev/null
@@ -1,135 +0,0 @@
-import Setting from './utils/setting.mjs';
-import { reset as resetScroll, addScreen as addScroll, hazards } from './currentweatherscroll.mjs';
-import { json } from './utils/fetch.mjs';
-
-let firstRun = true;
-
-const parser = new DOMParser();
-
-// change of enable handler
-const changeEnable = (newValue) => {
- let newDisplay;
- if (newValue) {
- // add the feed to the scroll
- parseFeed(customFeed.value);
- // show the string box
- newDisplay = 'block';
- } else {
- // set scroll back to original
- resetScroll();
- // hide the string entry
- newDisplay = 'none';
- }
- const stringEntry = document.getElementById('settings-customFeed-label');
- if (stringEntry) {
- stringEntry.style.display = newDisplay;
- }
-};
-
-// parse the feed/text provided
-const parseFeed = (textInput) => {
- // skip getting the feed on first run
- if (firstRun) return;
-
- // test validity
- if (textInput === undefined || textInput === '') {
- resetScroll();
- }
-
- // test for url
- if (textInput.match(/https?:\/\//)) {
- getFeed(textInput);
- return;
- }
-
- // add single text scroll after hazards if present
- resetScroll();
- addScroll(hazards);
- addScroll(
- () => (
- {
- type: 'scroll',
- text: textInput,
- }),
- // keep the existing scroll
- true,
- );
-};
-
-// get the rss feed and then swap out the current weather scroll
-const getFeed = async (url) => {
- // get the text as a string
- // it needs to be proxied, use a free service
- const rssResponse = await json(`https://api.allorigins.win/get?url=${url}`);
-
- // this returns a data url
- // a few sanity checks
- if (rssResponse.status.content_type.indexOf('xml') < 0) return;
- // determine return type
- const isBase64 = rssResponse.status.content_type.substring(0, 8) !== 'text/xml';
-
- // base 64 decode everything after the comma
- const rss = isBase64 ? atob(rssResponse.contents.split('base64,')[1]) : rssResponse.contents;
-
- // parse the rss
- const doc = parser.parseFromString(rss, 'text/xml');
-
- // get the title
- const rssTitle = doc.querySelector('channel title').textContent;
-
- // get each item
- const titles = [...doc.querySelectorAll('item title')].map((t) => t.textContent);
-
- // reset the scroll, then add the screens
- resetScroll();
- // add the hazards scroll first
- addScroll(hazards);
- titles.forEach((title) => {
- // data is provided to the screen handler, so we return a function
- addScroll(
- () => ({
- header: rssTitle,
- type: 'scroll',
- text: title,
- }),
- // false parameter does not include the default weather scrolls
- false,
- );
- });
-};
-
-// change the feed source and re-load if necessary
-const changeFeed = (newValue) => {
- // first pass through won't have custom feed enable ready
- if (firstRun) return;
-
- if (customFeedEnable.value) {
- parseFeed(newValue);
- }
-};
-
-const customFeed = new Setting('customFeed', {
- name: 'Custom RSS Feed',
- defaultValue: '',
- type: 'string',
- changeAction: changeFeed,
- placeholder: 'Text or URL',
-});
-
-const customFeedEnable = new Setting('customFeedEnable', {
- name: 'Enable RSS Feed/Text',
- defaultValue: false,
- changeAction: changeEnable,
-});
-
-// initialize the custom feed inputs on the page
-document.addEventListener('DOMContentLoaded', () => {
- // add the controls to the page
- const settingsSection = document.querySelector('#settings');
- settingsSection.append(customFeedEnable.generate(), customFeed.generate());
- // clear the first run value
- firstRun = false;
- // call change enable with the current value to show/hide the url box
- // and make the call to get the feed if enabled
- changeEnable(customFeedEnable.value);
-});
diff --git a/views/index.ejs b/views/index.ejs
index e926d09..73fb8f1 100644
--- a/views/index.ejs
+++ b/views/index.ejs
@@ -62,7 +62,6 @@
-
<% } %>