From e226c2a98bed241304585552b1621a508ad8ffba Mon Sep 17 00:00:00 2001 From: FND Date: Sun, 15 Sep 2013 10:30:56 +0200 Subject: [PATCH] added checklist class to list elements this makes it easier for external entities (e.g. CSS, JavaScript) to identify checklists using a postprocessor is a little crude, but pragmatic --- markdown_checklist/__init__.py | 2 +- markdown_checklist/checklists.js | 2 +- markdown_checklist/extension.py | 19 +++++++++++++++++ test/test_main.py | 35 +++++++++++++++++++++++++++++--- 4 files changed, 53 insertions(+), 5 deletions(-) diff --git a/markdown_checklist/__init__.py b/markdown_checklist/__init__.py index 9a2c07f..7aaa8e8 100644 --- a/markdown_checklist/__init__.py +++ b/markdown_checklist/__init__.py @@ -59,6 +59,6 @@ See included `checklists.js` for details. """ -__version__ = '0.2.0' +__version__ = '0.3.0' __author__ = 'FND' __license__ = 'MIT' diff --git a/markdown_checklist/checklists.js b/markdown_checklist/checklists.js index 205ad5a..771bad8 100644 --- a/markdown_checklist/checklists.js +++ b/markdown_checklist/checklists.js @@ -20,7 +20,7 @@ function Checklists(container, retriever, storer) { this.retriever = retriever; this.storer = storer; - var checklists = $("ul:has(" + this.checkboxSelector + ")", container); // XXX: imprecise, inefficient + var checklists = $(".checklist", container); checklists.find(this.checkboxSelector).prop("disabled", false); var self = this; checklists.on("change", this.checkboxSelector, function() { diff --git a/markdown_checklist/extension.py b/markdown_checklist/extension.py index a37a1e4..8f3711a 100644 --- a/markdown_checklist/extension.py +++ b/markdown_checklist/extension.py @@ -2,6 +2,7 @@ from markdown.extensions import Extension from markdown.preprocessors import Preprocessor +from markdown.postprocessors import Postprocessor def makeExtension(configs=None): @@ -13,9 +14,14 @@ class ChecklistExtension(Extension): def extendMarkdown(self, md, md_globals): md.preprocessors.add('checklist', ChecklistPreprocessor(md), 'unescape') class ChecklistPreprocessor(Preprocessor): + """ + injects checkbox elements + """ pattern = re.compile(r'^([*-]) \[([ Xx])\]') @@ -29,3 +35,16 @@ def _replacer(self, match): list_prefix, state = match.groups() checked = ' checked' if state != ' ' else '' return '%s ' % (list_prefix, checked) + + +class ChecklistPostprocessor(Postprocessor): + """ + adds checklist class to list element + """ + + pattern = re.compile(r'^([*-]) \[([ Xx])\]') + + def run(self, html): + before = '