This adds some new visualizations and styles and reports and cleans up some existing styles and class names. Daily activity rhythm <img width="1588" height="412" alt="image" src="https://github.com/user-attachments/assets/0c7980e4-7bb6-4e08-9957-24c3c5718572" /> Helping new members <img width="1456" height="310" alt="image" src="https://github.com/user-attachments/assets/096a13da-ab63-45d4-9b68-53a01df62a78" /> Chat activity <img width="1442" height="926" alt="image" src="https://github.com/user-attachments/assets/07ce2cab-1963-4918-a9ff-805c251a1377" /> Assigns <img width="1388" height="844" alt="image" src="https://github.com/user-attachments/assets/ee49c6ee-2da6-4bfa-b500-715ed7ceb13a" /> AI usage <img width="1442" height="1254" alt="image" src="https://github.com/user-attachments/assets/b382bffb-010d-4072-9144-cb7e6a8680e3" /> Invitations <img width="1486" height="1346" alt="image" src="https://github.com/user-attachments/assets/020f68a9-69d2-46ed-9f38-b0d5e98d02de" /> Writing analysis <img width="917" height="409" alt="image" src="https://github.com/user-attachments/assets/1147427c-513f-4737-8f28-99bfc6f4aff9" /> --------- Co-authored-by: awesomerobot <[email protected]> Co-authored-by: Martin Brennan <[email protected]>
173 lines
5.6 KiB
Plaintext
173 lines
5.6 KiB
Plaintext
import Component from "@glimmer/component";
|
|
import { tracked } from "@glimmer/tracking";
|
|
import { action } from "@ember/object";
|
|
import didInsert from "@ember/render-modifiers/modifiers/did-insert";
|
|
import willDestroy from "@ember/render-modifiers/modifiers/will-destroy";
|
|
import { i18n } from "discourse-i18n";
|
|
|
|
export default class WritingAnalysis extends Component {
|
|
@tracked currentColorIndex = 0;
|
|
|
|
terminalColors = ["#0f0", "#ffbf00", "#00ffff", "#ff00ff"];
|
|
|
|
constructor() {
|
|
super(...arguments);
|
|
this.handleKeyDown = this.handleKeyDown.bind(this);
|
|
}
|
|
|
|
@action
|
|
setupKeyListener(element) {
|
|
document.addEventListener("keydown", this.handleKeyDown);
|
|
this.element = element;
|
|
}
|
|
|
|
@action
|
|
teardownKeyListener() {
|
|
document.removeEventListener("keydown", this.handleKeyDown);
|
|
}
|
|
|
|
handleKeyDown(event) {
|
|
if (event.key === "F1") {
|
|
event.preventDefault();
|
|
this.cycleColor();
|
|
}
|
|
}
|
|
|
|
@action
|
|
cycleColor() {
|
|
this.currentColorIndex =
|
|
(this.currentColorIndex + 1) % this.terminalColors.length;
|
|
const newColor = this.terminalColors[this.currentColorIndex];
|
|
document.documentElement.style.setProperty("--rewind-green", newColor);
|
|
}
|
|
|
|
get scoreLabel() {
|
|
const score = this.args.report.data.readability_score;
|
|
const randomNum = Math.floor(Math.random() * 4) + 1;
|
|
|
|
switch (true) {
|
|
case score >= 80 && score <= 100:
|
|
return i18n(
|
|
`discourse_rewind.reports.writing_analysis.readability_score.over_80.${randomNum}`
|
|
);
|
|
case score >= 60 && score < 80:
|
|
return i18n(
|
|
`discourse_rewind.reports.writing_analysis.readability_score.over_60.${randomNum}`
|
|
);
|
|
case score >= 40 && score < 60:
|
|
return i18n(
|
|
`discourse_rewind.reports.writing_analysis.readability_score.over_40.${randomNum}`
|
|
);
|
|
case score >= 20 && score < 40:
|
|
return i18n(
|
|
`discourse_rewind.reports.writing_analysis.readability_score.over_20.${randomNum}`
|
|
);
|
|
default:
|
|
return i18n(
|
|
`discourse_rewind.reports.writing_analysis.readability_score.over_0.${randomNum}`
|
|
);
|
|
}
|
|
}
|
|
|
|
<template>
|
|
<div
|
|
class="rewind-report-page --writing-analysis"
|
|
{{didInsert this.setupKeyListener}}
|
|
{{willDestroy this.teardownKeyListener}}
|
|
>
|
|
<h2 class="rewind-report-title">
|
|
{{i18n "discourse_rewind.reports.writing_analysis.title"}}
|
|
</h2>
|
|
|
|
<div class="writing-analysis">
|
|
|
|
<div class="writing-analysis__menubar">
|
|
<span class="writing-analysis__menu-item">{{i18n
|
|
"discourse_rewind.reports.writing_analysis.menu_file"
|
|
}}</span>
|
|
<span class="writing-analysis__menu-item">{{i18n
|
|
"discourse_rewind.reports.writing_analysis.menu_other"
|
|
}}</span>
|
|
<span class="writing-analysis__menu-item">{{i18n
|
|
"discourse_rewind.reports.writing_analysis.menu_additional"
|
|
}}</span>
|
|
<span
|
|
class="writing-analysis__menu-item writing-analysis__menu-item--right"
|
|
>{{i18n
|
|
"discourse_rewind.reports.writing_analysis.menu_opening"
|
|
}}</span>
|
|
</div>
|
|
|
|
<div class="writing-analysis__frame">
|
|
|
|
<div class="writing-analysis__header-row">
|
|
|
|
<div class="writing-analysis__helpbox">
|
|
{{i18n "discourse_rewind.reports.writing_analysis.help_text"}}
|
|
</div>
|
|
|
|
<div class="writing-analysis__release">
|
|
<div class="writing-analysis__release-name">{{i18n
|
|
"discourse_rewind.reports.writing_analysis.app_name"
|
|
}}</div>
|
|
<div class="writing-analysis__release-meta">
|
|
{{i18n
|
|
"discourse_rewind.reports.writing_analysis.release_info"
|
|
}}
|
|
<span><3</span>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="writing-analysis__stats">
|
|
|
|
<div class="writing-analysis__stats-col">
|
|
<div class="writing-analysis__stats-label">{{i18n
|
|
"discourse_rewind.reports.writing_analysis.total_words"
|
|
}}</div>
|
|
<div
|
|
class="writing-analysis__stats-value"
|
|
>{{@report.data.total_words}}</div>
|
|
|
|
<div class="writing-analysis__stats-label">{{i18n
|
|
"discourse_rewind.reports.writing_analysis.total_posts"
|
|
}}</div>
|
|
<div
|
|
class="writing-analysis__stats-value"
|
|
>{{@report.data.total_posts}}</div>
|
|
</div>
|
|
|
|
<div class="writing-analysis__stats-col">
|
|
<div class="writing-analysis__stats-label">{{i18n
|
|
"discourse_rewind.reports.writing_analysis.avg_post_length"
|
|
}}</div>
|
|
<div
|
|
class="writing-analysis__stats-value"
|
|
>{{@report.data.average_post_length}}</div>
|
|
|
|
<div class="writing-analysis__stats-label">{{i18n
|
|
"discourse_rewind.reports.writing_analysis.readability_score_label"
|
|
}}</div>
|
|
<div
|
|
class="writing-analysis__stats-value"
|
|
>{{@report.data.readability_score}}</div>
|
|
</div>
|
|
|
|
<div class="writing-analysis__stats-col">
|
|
<div class="writing-analysis__stats-label">{{i18n
|
|
"discourse_rewind.reports.writing_analysis.readability_level"
|
|
}}</div>
|
|
<div
|
|
class="writing-analysis__stats-value"
|
|
>{{this.scoreLabel}}</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
}
|