UNPKG

markdown-it-checkbox

Version:

Plugin to create checkboxes for markdown-it markdown parser

99 lines (89 loc) 2.41 kB
// Generated by CoffeeScript 1.9.1 var checkboxReplace; checkboxReplace = function(md) { "use strict"; var arrayReplaceAt, lastId, options, pattern, splitTextToken; arrayReplaceAt = md.utils.arrayReplaceAt; lastId = 0; options = { divWrap: false }; pattern = /\[(X|\s|\_|\-)\]\s(.*)/i; splitTextToken = function(original, Token) { var checked, id, label, matches, nodes, ref, text, token, value; text = original.content; nodes = []; matches = text.match(pattern); value = matches[1]; label = matches[2]; checked = (ref = value === "X" || value === "x") != null ? ref : { "true": false /** * <div class="checkbox"> */ }; if (options.divWrap) { token = new Token("checkbox_open", "div", 1); token.attrs = [["class", "checkbox"]]; nodes.push(token); } /** * <input type="checkbox" id="checkbox{n}" checked="true"> */ id = "checkbox" + lastId; lastId += 1; token = new Token("checkbox_input", "input", 0); token.attrs = [["type", "checkbox"], ["id", id]]; if (checked === true) { token.attrs.push(["checked", "true"]); } nodes.push(token); /** * <label for="checkbox{n}"> */ token = new Token("label_open", "label", 1); token.attrs = [["for", id]]; nodes.push(token); /** * content of label tag */ token = new Token("text", "", 0); token.content = label; nodes.push(token); /** * closing tags */ nodes.push(new Token("label_close", "label", -1)); if (options.div_wrap) { nodes.push(new Token("checkbox_close", "div", -1)); } return nodes; }; return function(state) { var blockTokens, i, j, l, token, tokens; blockTokens = state.tokens; j = 0; l = blockTokens.length; while (j < l) { if (blockTokens[j].type !== "inline") { j++; continue; } tokens = blockTokens[j].children; i = tokens.length - 1; while (i >= 0) { token = tokens[i]; if (token.type === "text" && pattern.test(token.content)) { blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, splitTextToken(token, state.Token)); } i--; } j++; } }; }; /*global module */ module.exports = function(md) { "use strict"; md.core.ruler.push("checkbox", checkboxReplace(md)); };