ml_cancel: MenuKeypressLine,
ml_edit: MenuKeypressLine,
cl_vis: CyclingMenuLine<Visibility>,
+ cl_sensitive: CyclingMenuLine<bool>,
el_content_warning: EditableMenuLine<Option<String>>,
el_language: EditableMenuLine<String>,
}
"direct (only @mentioned users can see it)",
"rrrrrr ")),
], post.m.visibility);
+ let cl_sensitive = CyclingMenuLine::new(
+ Pr('S'), ColouredString::plain("Mark post as sensitive: "),
+ &[(false, ColouredString::plain("no")),
+ (true, ColouredString::uniform("yes", 'r'))],
+ post.m.content_warning.is_some());
let el_content_warning = EditableMenuLine::new(
- Pr('W'), ColouredString::plain("Content warning: "),
+ Pr('W'), ColouredString::plain(" Content warning: "),
post.m.content_warning.clone());
let el_language = EditableMenuLine::new(
Pr('L'), ColouredString::plain("Language: "),
ml_cancel,
ml_edit,
cl_vis,
+ cl_sensitive,
el_content_warning,
el_language,
};
self.ml_cancel.check_widths(&mut lmaxwid, &mut rmaxwid);
self.ml_edit.check_widths(&mut lmaxwid, &mut rmaxwid);
self.cl_vis.check_widths(&mut lmaxwid, &mut rmaxwid);
+ self.cl_sensitive.check_widths(&mut lmaxwid, &mut rmaxwid);
self.el_content_warning.check_widths(&mut lmaxwid, &mut rmaxwid);
self.el_language.check_widths(&mut lmaxwid, &mut rmaxwid);
self.ml_cancel.reset_widths();
self.ml_edit.reset_widths();
self.cl_vis.reset_widths();
+ self.cl_sensitive.reset_widths();
self.el_content_warning.reset_widths();
self.el_language.reset_widths();
self.ml_cancel.ensure_widths(lmaxwid, rmaxwid);
self.ml_edit.ensure_widths(lmaxwid, rmaxwid);
self.cl_vis.ensure_widths(lmaxwid, rmaxwid);
+ self.cl_sensitive.ensure_widths(lmaxwid, rmaxwid);
self.el_content_warning.ensure_widths(lmaxwid, rmaxwid);
self.el_language.ensure_widths(lmaxwid, rmaxwid);
fn post(&mut self, client: &mut Client) -> LogicalAction {
self.post.m.visibility = self.cl_vis.get_value();
- self.post.m.content_warning =
- self.el_content_warning.get_data().clone();
+ self.post.m.content_warning = if self.cl_sensitive.get_value() {
+ self.el_content_warning.get_data().clone()
+ .or_else(|| Some("".to_owned()))
+ } else {
+ None
+ };
self.post.m.language = self.el_language.get_data().clone();
match client.post_status(&self.post) {
lines.extend_from_slice(&self.ml_edit.render(w));
lines.extend_from_slice(&BlankLine::render_static());
lines.extend_from_slice(&self.cl_vis.render(w));
+ lines.extend_from_slice(&self.cl_sensitive.render(w));
lines.push(self.el_content_warning.render(
w, &mut cursorpos, lines.len()));
lines.push(self.el_language.render(
Pr('a') | Pr('A') => LogicalAction::PostReEdit(
self.post.clone()),
Pr('v') | Pr('V') => self.cl_vis.cycle(),
- Pr('w') | Pr('W') => self.el_content_warning.start_editing(),
+ Pr('s') | Pr('S') => {
+ let action = self.cl_sensitive.cycle();
+ if self.cl_sensitive.get_value() &&
+ self.el_content_warning.get_data().is_none()
+ {
+ // Encourage the user to write a content warning,
+ // by automatically focusing into the content
+ // warning editor.
+ self.el_content_warning.start_editing()
+ } else {
+ action
+ }
+ }
+ Pr('w') | Pr('W') => {
+ // If the user wants to write a content warning, mark
+ // the post as sensitive too, to prevent accidents.
+ if !self.cl_sensitive.get_value() {
+ self.cl_sensitive.cycle();
+ }
+ self.el_content_warning.start_editing()
+ }
Pr('l') | Pr('L') => self.el_language.start_editing(),
_ => LogicalAction::Nothing,
}