Skip to content

Commit 1bfbde8

Browse files
committed
update app
1 parent 5858740 commit 1bfbde8

File tree

5 files changed

+44
-86
lines changed

5 files changed

+44
-86
lines changed

app/src-react/assets/css/index.css

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
@import "fonts.css";
33

44
:root {
5-
--theme-hue: 340;
65
font-family: "Roboto Slab", sans-serif;
76
font-optical-sizing: auto;
87
font-feature-settings: "liga" 1, "calt" 1;

app/src-react/assets/css/themes.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,8 @@
6262
--scrollbar-color: hsla(var(--theme-hue), 100%, 83%, 0.25);
6363
--scrollbar-color-hover: hsla(var(--theme-hue), 100%, 83%, 0.5);
6464
--scrollbar-color-active: hsla(var(--theme-hue), 100%, 83%, 0.75);
65+
}
66+
67+
:root {
68+
--theme-hue: 25;
6569
}

app/src-react/components/header.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { useState, useEffect } from "react";
22
import "../assets/css/header.css";
3-
43
import GitHub from "../assets/svgs/github.svg?react";
54
import Sun from "../assets/svgs/sun.svg?react";
65
import Moon from "../assets/svgs/moon.svg?react";

app/src-react/index.tsx

Lines changed: 38 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import React, { useState } from "react";
22
import ReactDOM from "react-dom/client";
3-
43
import "./assets/css/index.css";
5-
64
import Header from "./components/header.tsx";
75
import Footer from "./components/footer.tsx";
86

7+
type MetricKey = keyof typeof metricEndpoints;
8+
type Metrics = Record<MetricKey, number>;
9+
910
const metricEndpoints = {
10-
ari: "/api/ari",
11+
automatic_reading_index: "/api/ari",
1112
characters: "/api/characters",
1213
characters_per_word: "/api/characters-per-word",
1314
coleman_liau: "/api/coleman-liau",
@@ -20,93 +21,64 @@ const metricEndpoints = {
2021
reading_time: "/api/reading-time",
2122
sentences: "/api/sentences",
2223
sentences_per_paragraph: "/api/sentences-per-paragraph",
23-
smog: "/api/smog",
24+
simple_measure_of_gobbledygook: "/api/smog",
2425
spache: "/api/spache",
2526
speaking_time: "/api/speaking-time",
2627
syllables: "/api/syllables",
2728
syllables_per_word: "/api/syllables-per-word",
2829
words: "/api/words",
2930
words_per_sentence: "/api/words-per-sentence",
30-
};
31+
} as const;
3132

32-
const fetchMetric = (text: string, endpoint: string, setMetricValue: Function) => {
33+
const fetchMetric = (
34+
text: string,
35+
endpoint: string,
36+
setMetricValue: (value: number) => void
37+
) => {
3338
fetch(endpoint, {
3439
method: "POST",
3540
headers: { "Content-Type": "application/json" },
3641
body: text,
3742
})
3843
.then((response) => response.json())
39-
.then((data) => {
44+
.then((data: number) => {
4045
setMetricValue(data);
4146
})
4247
.catch((error) => console.error(`Error fetching metric from ${endpoint}:`, error));
4348
};
4449

4550
const onTextInput = (
4651
event: React.ChangeEvent<HTMLTextAreaElement>,
47-
setMetrics: Function
52+
setMetrics: React.Dispatch<React.SetStateAction<Metrics>>
4853
) => {
4954
const text = event.target.value.trim();
50-
55+
const resetMetrics: Metrics = Object.keys(metricEndpoints).reduce((acc, key) => {
56+
acc[key as MetricKey] = 0;
57+
return acc;
58+
}, {} as Metrics);
59+
5160
if (!text) {
52-
setMetrics({
53-
ari: 0,
54-
characters: 0,
55-
characters_per_word: 0,
56-
coleman_liau: 0,
57-
dale_chall: 0,
58-
flesch_kincaid_grade_level: 0,
59-
flesch_reading_ease_score: 0,
60-
gunning_fog: 0,
61-
lines: 0,
62-
paragraphs: 0,
63-
reading_time: 0,
64-
sentences: 0,
65-
sentences_per_paragraph: 0,
66-
smog: 0,
67-
spache: 0,
68-
speaking_time: 0,
69-
syllables: 0,
70-
syllables_per_word: 0,
71-
words: 0,
72-
words_per_sentence: 0,
73-
});
61+
setMetrics(resetMetrics);
7462
return;
7563
}
7664

77-
for (const [metric, endpoint] of Object.entries(metricEndpoints)) {
65+
(Object.entries(metricEndpoints) as [MetricKey, string][]).forEach(([metric, endpoint]) => {
7866
fetchMetric(text, endpoint, (value: number) => {
79-
setMetrics((prevMetrics: any) => ({
67+
setMetrics((prevMetrics) => ({
8068
...prevMetrics,
8169
[metric]: value,
8270
}));
8371
});
84-
}
72+
});
8573
};
8674

87-
const App = () => {
88-
const [metrics, setMetrics] = useState({
89-
ari: 0,
90-
characters: 0,
91-
characters_per_word: 0,
92-
coleman_liau: 0,
93-
dale_chall: 0,
94-
flesch_kincaid_grade_level: 0,
95-
flesch_reading_ease_score: 0,
96-
gunning_fog: 0,
97-
lines: 0,
98-
paragraphs: 0,
99-
reading_time: 0,
100-
sentences: 0,
101-
sentences_per_paragraph: 0,
102-
smog: 0,
103-
spache: 0,
104-
speaking_time: 0,
105-
syllables: 0,
106-
syllables_per_word: 0,
107-
words: 0,
108-
words_per_sentence: 0,
109-
});
75+
const App: React.FC = () => {
76+
const initialMetrics: Metrics = Object.keys(metricEndpoints).reduce((acc, key) => {
77+
acc[key as MetricKey] = 0;
78+
return acc;
79+
}, {} as Metrics);
80+
81+
const [metrics, setMetrics] = useState<Metrics>(initialMetrics);
11082

11183
return (
11284
<React.StrictMode>
@@ -116,35 +88,20 @@ const App = () => {
11688
<textarea
11789
id="readability-textarea"
11890
className="textarea"
119-
placeholder="Paste your text here..."
91+
placeholder="Paste or type your text here..."
12092
spellCheck="false"
12193
onInput={(event: React.ChangeEvent<HTMLTextAreaElement>) =>
12294
onTextInput(event, setMetrics)
12395
}
12496
/>
12597
</div>
126-
<div className="metrics">
127-
<div className="metric">Automated Readability Index (ARI): {metrics.ari}</div>
128-
<div className="metric">Characters: {metrics.characters}</div>
129-
<div className="metric">Characters per Word: {metrics.characters_per_word}</div>
130-
<div className="metric">Coleman-Liau Index: {metrics.coleman_liau}</div>
131-
<div className="metric">Dale-Chall Readability Score: {metrics.dale_chall}</div>
132-
<div className="metric">Flesch-Kincaid Grade Level: {metrics.flesch_kincaid_grade_level}</div>
133-
<div className="metric">Flesch Reading Ease Score: {metrics.flesch_reading_ease_score}</div>
134-
<div className="metric">Gunning Fog Index: {metrics.gunning_fog}</div>
135-
<div className="metric">Lines: {metrics.lines}</div>
136-
<div className="metric">Paragraphs: {metrics.paragraphs}</div>
137-
<div className="metric">Reading Time: {metrics.reading_time}</div>
138-
<div className="metric">Sentences: {metrics.sentences}</div>
139-
<div className="metric">Sentences per Paragraph: {metrics.sentences_per_paragraph}</div>
140-
<div className="metric">SMOG Index: {metrics.smog}</div>
141-
<div className="metric">Spache Index: {metrics.spache}</div>
142-
<div className="metric">Speaking Time: {metrics.speaking_time}</div>
143-
<div className="metric">Syllables: {metrics.syllables}</div>
144-
<div className="metric">Syllables per Word: {metrics.syllables_per_word}</div>
145-
<div className="metric">Words: {metrics.words}</div>
146-
<div className="metric">Words per Sentence: {metrics.words_per_sentence}</div>
147-
</div>
98+
<div className="metrics">
99+
{Object.entries(metrics).map(([metric, value]) => (
100+
<div key={metric} className="metric">
101+
{metric.replace(/_/g, ' ').replace(/\b\w/g, char => char.toUpperCase())}: {value}
102+
</div>
103+
))}
104+
</div>
148105
</main>
149106
<Footer />
150107
</React.StrictMode>
@@ -154,6 +111,5 @@ const App = () => {
154111
const rootElement = document.getElementById("root") as HTMLDivElement;
155112

156113
if (rootElement) {
157-
const root = ReactDOM.createRoot(rootElement);
158-
root.render(<App />);
114+
ReactDOM.createRoot(rootElement).render(<App />);
159115
}

src/Readability.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""
22
# Readability.jl
33
4-
Julia package for computing readability scores.
4+
Julia package for computing readability scores and text statistics.
55
66
## Functions:
77
@@ -78,4 +78,4 @@ for file in [
7878
include(file)
7979
end
8080

81-
end
81+
end # Readability.jl

0 commit comments

Comments
 (0)