aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/configuration.rs32
-rw-r--r--src/to_html.rs5
-rw-r--r--tests/gfm_task_list_item.rs17
3 files changed, 52 insertions, 2 deletions
diff --git a/src/configuration.rs b/src/configuration.rs
index fe5698b..e995c09 100644
--- a/src/configuration.rs
+++ b/src/configuration.rs
@@ -831,6 +831,38 @@ pub struct CompileOptions {
/// ```
pub gfm_footnote_clobber_prefix: Option<String>,
+ /// Whether or not GFM task list html `<input>` items are enabled.
+ ///
+ /// This determines whether or not the user of the browser is able
+ /// to click and toggle generated checkbox items. The default is false.
+ ///
+ /// ## Examples
+ ///
+ /// ```
+ /// use markdown::{to_html_with_options, CompileOptions, Options, ParseOptions};
+ /// # fn main() -> Result<(), String> {
+ ///
+ /// // With `gfm_task_list_item_checkable`, generated `<input type="checkbox" />`
+ /// // tags do not contain the attribute `disabled=""` and are thus toggleable by
+ /// // browser users.
+ /// assert_eq!(
+ /// to_html_with_options(
+ /// "* [x] y.",
+ /// &Options {
+ /// parse: ParseOptions::gfm(),
+ /// compile: CompileOptions {
+ /// gfm_task_list_item_checkable: true,
+ /// ..CompileOptions::gfm()
+ /// }
+ /// }
+ /// )?,
+ /// "<ul>\n<li><input type=\"checkbox\" checked=\"\" /> y.</li>\n</ul>"
+ /// );
+ /// # Ok(())
+ /// # }
+ /// ```
+ pub gfm_task_list_item_checkable: bool,
+
/// Whether to support the GFM tagfilter.
///
/// This option does nothing if `allow_dangerous_html` is not turned on.
diff --git a/src/to_html.rs b/src/to_html.rs
index 1892ba1..edd397d 100644
--- a/src/to_html.rs
+++ b/src/to_html.rs
@@ -601,7 +601,10 @@ fn on_enter_gfm_table_row(context: &mut CompileContext) {
/// Handle [`Enter`][Kind::Enter]:[`GfmTaskListItemCheck`][Name::GfmTaskListItemCheck].
fn on_enter_gfm_task_list_item_check(context: &mut CompileContext) {
if !context.image_alt_inside {
- context.push("<input type=\"checkbox\" disabled=\"\" ");
+ context.push("<input type=\"checkbox\" ");
+ if !context.options.gfm_task_list_item_checkable {
+ context.push("disabled=\"\" ");
+ }
}
}
diff --git a/tests/gfm_task_list_item.rs b/tests/gfm_task_list_item.rs
index 8b3f066..b65681d 100644
--- a/tests/gfm_task_list_item.rs
+++ b/tests/gfm_task_list_item.rs
@@ -2,7 +2,7 @@ use markdown::{
mdast::{Emphasis, List, ListItem, Node, Paragraph, Root, Text},
to_html, to_html_with_options, to_mdast,
unist::Position,
- Options, ParseOptions,
+ CompileOptions, Options, ParseOptions,
};
use pretty_assertions::assert_eq;
@@ -27,6 +27,21 @@ fn gfm_task_list_item() -> Result<(), String> {
);
assert_eq!(
+ to_html_with_options(
+ "* [x] y.",
+ &Options {
+ parse: ParseOptions::gfm(),
+ compile: CompileOptions {
+ gfm_task_list_item_checkable: true,
+ ..CompileOptions::gfm()
+ }
+ }
+ )?,
+ "<ul>\n<li><input type=\"checkbox\" checked=\"\" /> y.</li>\n</ul>",
+ "should support option for enabled (checkable) task list item checks"
+ );
+
+ assert_eq!(
to_html_with_options("*\n [x]", &Options::gfm())?,
"<ul>\n<li>[x]</li>\n</ul>",
"should not support laziness (1)"