diff --git a/CHANGELOG.md b/CHANGELOG.md
index d7aa43e3..adc8a526 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -47,6 +47,7 @@
- Deprecated global `locationSearch` in favor of using `$location` directly
- Removed global `searchHash` in favor of using `$location` directly
- Added `angularLocationSearch` to expose `$location.search` to code outside Angular
+- Switched to parsing news from YAML file [#348](https://github.com/spraakbanken/korp-frontend/issues/348)
- Removed map layer "Stamen Watercolor" [#339](https://github.com/spraakbanken/korp-frontend/issues/339)
### Fixed
diff --git a/app/scripts/newsdesk.js b/app/scripts/newsdesk.js
index ad828480..5e6edaf1 100644
--- a/app/scripts/newsdesk.js
+++ b/app/scripts/newsdesk.js
@@ -2,6 +2,8 @@
// SB-newsdesk 1.0b
// Requirements: JQuery, JQuery.ui.position, trust filter, loc filter, Font Awesome
import _ from "lodash"
+import Yaml from "js-yaml"
+import moment from "moment"
import settings from "@/settings"
import { safeApply } from "@/util"
@@ -21,13 +23,13 @@ angular.module("newsdesk", []).directive("newsDesk", [
-
{{header | loc:lang}}×
+
{{header | loc:$root.lang}}×
-
{{item.t[currentLang]}}
-
{{item.d}}
-
+ ng-class="{'newsdesk-new-news-item': (item.created > lastChecked)}">
+
{{item.title | locObj}}
+
{{item.created}}
+
@@ -47,32 +49,28 @@ angular.module("newsdesk", []).directive("newsDesk", [
s.newsitems = []
function initData() {
- let d
s.lastChecked = localStorage.getItem(s.storage)
+ // If visitor hasn't been here before, fall back to marking items since one year ago as unread.
if (!s.lastChecked) {
- d = new Date()
+ const d = new Date()
d.setFullYear(d.getFullYear() - 1)
s.lastChecked = d.toISOString().slice(0, 10)
}
+
$.ajax({
type: "GET",
url: settings["news_desk_url"],
async: false,
- jsonpCallback: "newsdata",
- contentType: "application/json",
- dataType: "jsonp",
- success(json) {
+ success(feedYaml) {
+ const items = Yaml.load(feedYaml)
+ // Hide expired items.
const currentDate = new Date().toISOString().slice(0, 10)
- s.newsitems = _.filter(json, (newsitem) => {
- return !newsitem.e || newsitem.e >= currentDate
- })
- let n = 0
- for (let nItem of s.newsitems) {
- if (nItem.d > s.lastChecked) {
- n += 1
- }
- }
+ s.newsitems = items.filter((item) => !item.expires || item.expires >= currentDate)
+ // Stringify dates.
+ s.newsitems.forEach((item) => (item.created = moment(item.created).format("YYYY-MM-DD")))
+ // Count unread items.
+ const n = items.filter((item) => item.created > s.lastChecked).length
safeApply(s, () => (s.numNewNews = n))
},
@@ -89,7 +87,6 @@ angular.module("newsdesk", []).directive("newsDesk", [
if (s.isPopoverVisible) {
s.popHide()
} else {
- s.currentLang = { eng: "en", swe: "sv" }[$location.search().lang || settings["default_language"]]
s.popShow()
s.numNewNews = 0
}
@@ -118,7 +115,8 @@ angular.module("newsdesk", []).directive("newsDesk", [
$rootElement.on("keydown", handleEscape)
$rootElement.on("click", s.popHide)
- localStorage.setItem(s.storage, s.newsitems[0].d)
+ // Remember the date of the newest item, so any future items can be marked as unread.
+ localStorage.setItem(s.storage, s.newsitems[0].created)
}
s.popHide = function () {
diff --git a/package.json b/package.json
index a943c0b7..472547d5 100644
--- a/package.json
+++ b/package.json
@@ -15,6 +15,7 @@
"geokorp": "spraakbanken/geokorp#1.5.0",
"jquery": "3.6.3",
"jquery-flot": "0.8.3",
+ "js-yaml": "^4.1.0",
"jstorage": "andris9/jStorage#0.4.12",
"leaflet": "^1.9.3",
"leaflet-providers": "^1.13.0",
@@ -30,6 +31,7 @@
"devDependencies": {
"@types/jasmine": "^5.1.4",
"@types/jquery": "^3.5.29",
+ "@types/js-yaml": "^4.0.9",
"@types/lodash": "^4.14.118",
"@types/raphael": "^2.3.9",
"@types/rickshaw": "^0.0.31",
diff --git a/yarn.lock b/yarn.lock
index 5f35e094..8449b626 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -255,6 +255,11 @@
dependencies:
"@types/sizzle" "*"
+"@types/js-yaml@^4.0.9":
+ version "4.0.9"
+ resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.9.tgz#cd82382c4f902fed9691a2ed79ec68c5898af4c2"
+ integrity sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==
+
"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
version "7.0.11"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
@@ -699,6 +704,11 @@ arg@^5.0.2:
resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
array-flatten@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
@@ -2547,6 +2557,13 @@ js-tokens@^4.0.0:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+js-yaml@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
jsbn@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040"