Этот коммит содержится в:
Maarten 2024-09-20 13:54:18 +02:00
родитель 42224a17f6
Коммит e7807c542a
7 изменённых файлов: 131 добавлений и 3 удалений

6
google.config.js Обычный файл
Просмотреть файл

@ -0,0 +1,6 @@
export default [
{
"id": "1tSZ6hKWKR0u3pIxvm3L_6SO3ab2yqjM8ww7GMBU3EwE",
"filepath": "src/data/copy.json"
}
]

66
package-lock.json сгенерированный
Просмотреть файл

@ -12,6 +12,7 @@
"@sveltejs/kit": "^2.0.0",
"@sveltejs/vite-plugin-svelte": "^3.0.0",
"@types/eslint": "^9.6.0",
"archieml": "^0.5.0",
"eslint": "^9.0.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-svelte": "^2.36.0",
@ -1013,6 +1014,12 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/archieml": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/archieml/-/archieml-0.5.0.tgz",
"integrity": "sha512-HhL+z+8toD2M9b+TijMR/3fmbs6dhWcATBstpQFTCqU4iyqDENznwZ4JRN0w3EkBbUL34jOv3PJK5/45VF9hJA==",
"dev": true
},
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@ -1078,6 +1085,23 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/chokidar": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.0.tgz",
"integrity": "sha512-mxIojEAQcuEvT/lyXq+jf/3cO/KoA6z4CeNDGGevTybECPOMFCnQy3OPahluUkbqgPNGw5Bi78UC7Po6Lhy+NA==",
"dev": true,
"optional": true,
"peer": true,
"dependencies": {
"readdirp": "^4.0.1"
},
"engines": {
"node": ">= 14.16.0"
},
"funding": {
"url": "https://paulmillr.com/funding/"
}
},
"node_modules/code-red": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz",
@ -1615,6 +1639,14 @@
"node": ">= 4"
}
},
"node_modules/immutable": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
"integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==",
"dev": true,
"optional": true,
"peer": true
},
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@ -2142,6 +2174,21 @@
}
]
},
"node_modules/readdirp": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.1.tgz",
"integrity": "sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==",
"dev": true,
"optional": true,
"peer": true,
"engines": {
"node": ">= 14.16.0"
},
"funding": {
"type": "individual",
"url": "https://paulmillr.com/funding/"
}
},
"node_modules/resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@ -2237,6 +2284,25 @@
"node": ">=6"
}
},
"node_modules/sass": {
"version": "1.79.2",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.79.2.tgz",
"integrity": "sha512-YmT1aoF1MwHsZEu/eXhbAJNsPGAhNP4UixW9ckEwWCvPcVdVF0/C104OGDVEqtoctKq0N+wM20O/rj+sSPsWeg==",
"dev": true,
"optional": true,
"peer": true,
"dependencies": {
"chokidar": "^4.0.0",
"immutable": "^4.0.0",
"source-map-js": ">=0.6.2 <2.0.0"
},
"bin": {
"sass": "sass.js"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/semver": {
"version": "7.6.3",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",

Просмотреть файл

@ -7,13 +7,15 @@
"build": "vite build",
"preview": "vite preview",
"lint": "prettier --check . && eslint .",
"format": "prettier --write ."
"format": "prettier --write .",
"gdoc": "node tasks/fetch-google.js"
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.0.0",
"@sveltejs/kit": "^2.0.0",
"@sveltejs/vite-plugin-svelte": "^3.0.0",
"@types/eslint": "^9.6.0",
"archieml": "^0.5.0",
"eslint": "^9.0.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-svelte": "^2.36.0",

Просмотреть файл

@ -4,6 +4,7 @@
<meta charset="utf-8" />
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@1.0.2/css/bulma.min.css">
%sveltekit.head%
</head>
<body data-sveltekit-preload-data="hover">

1
src/data/copy.json Обычный файл
Просмотреть файл

@ -0,0 +1 @@
{"meta":{"title":"Interference Tracker 2024"},"content":[{"type":"text","text":"The DFRLab's Foreign Interference Attribution Tracker (FIAT) is an interactive, open-source database that captures allegations of foreign interference relevant to the 2020 election. This tool assesses the credibility, bias, evidence, transparency, and impact of each claim. Explore by scrolling through the timeline and map below. Hover over a circle to see details about a particular case."}]}

Просмотреть файл

@ -1,2 +1,14 @@
<h1>Welcome to SvelteKit</h1>
<p>Visit <a href="https://kit.svelte.dev">kit.svelte.dev</a> to read the documentation</p>
<script>
import copy from "../data/copy.json"
</script>
<section class="section">
<div class="container">
<h1 class="is-size-1">{copy.meta.title}</h1>
{#each copy.content as block}
{#if block.type == "text"}
<p>{block.text}</p>
{/if}
{/each}
</div>
</section>

40
tasks/fetch-google.js Обычный файл
Просмотреть файл

@ -0,0 +1,40 @@
import fs from "fs";
import archieml from "archieml";
import docs from "../google.config.js";
const CWD = process.cwd();
const fetchGoogle = async ({ id, gid }) => {
console.log(`fetching...${id}`);
const base = "https://docs.google.com";
const post = gid
? `spreadsheets/u/1/d/${id}/export?format=csv&id=${id}&gid=${gid}`
: `document/d/${id}/export?format=txt`;
const url = `${base}/${post}`;
try {
const response = await fetch(url);
const text = await response.text();
if (gid) return text;
const parsed = archieml.load(text);
const str = JSON.stringify(parsed);
return str;
} catch (err) {
throw new Error(err);
}
};
(async () => {
for (let d of docs) {
try {
const str = await fetchGoogle(d);
const file = `${CWD}/${d.filepath}`;
fs.writeFileSync(file, str);
} catch (err) {
console.log(err);
}
}
})();