markdown-it-footnote
Advanced tools
Comparing version 2.0.0 to 3.0.0
@@ -0,1 +1,10 @@ | ||
3.0.0 / 2016-06-28 | ||
------------------ | ||
- Add `env.docId` support to guarantee unique ancors for differenet docements. | ||
- Add overridable helpers: `md.renderer.rules.footnote_anchor_name` | ||
& `md.renderer.rules.footnote_caption` to simplify templating. | ||
- Fixed anchor symbol display on iOS, #11. | ||
2.0.0 / 2015-10-05 | ||
@@ -2,0 +11,0 @@ ------------------ |
@@ -1,2 +0,2 @@ | ||
/*! markdown-it-footnote 2.0.0 https://github.com//markdown-it/markdown-it-footnote @license MIT */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.markdownitFootnote = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | ||
/*! markdown-it-footnote 3.0.0 https://github.com//markdown-it/markdown-it-footnote @license MIT */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.markdownitFootnote = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | ||
// Process footnotes | ||
@@ -9,11 +9,36 @@ // | ||
function _footnote_ref(tokens, idx) { | ||
function render_footnote_anchor_name(tokens, idx, options, env/*, slf*/) { | ||
var n = Number(tokens[idx].meta.id + 1).toString(); | ||
var id = 'fnref' + n; | ||
if (tokens[idx].meta.subId > 0) { | ||
id += ':' + tokens[idx].meta.subId; | ||
n += ':' + tokens[idx].meta.subId; | ||
} | ||
return '<sup class="footnote-ref"><a href="#fn' + n + '" id="' + id + '">[' + n + ']</a></sup>'; | ||
var prefix = ''; | ||
if (typeof env.docId === 'string') { | ||
prefix = '-' + env.docId + '-'; | ||
} | ||
return prefix + n; | ||
} | ||
function _footnote_block_open(tokens, idx, options) { | ||
function render_footnote_caption(tokens, idx/*, options, env, slf*/) { | ||
var n = Number(tokens[idx].meta.id + 1).toString(); | ||
if (tokens[idx].meta.subId > 0) { | ||
n += ':' + tokens[idx].meta.subId; | ||
} | ||
return '[' + n + ']'; | ||
} | ||
function render_footnote_ref(tokens, idx, options, env, slf) { | ||
var id = slf.rules.footnote_anchor_name(tokens, idx, options, env, slf); | ||
var caption = slf.rules.footnote_caption(tokens, idx, options, env, slf); | ||
return '<sup class="footnote-ref"><a href="#fn' + id + '" id="fnref' + id + '">' + caption + '</a></sup>'; | ||
} | ||
function render_footnote_block_open(tokens, idx, options) { | ||
return (options.xhtmlOut ? '<hr class="footnotes-sep" />\n' : '<hr class="footnotes-sep">\n') + | ||
@@ -23,35 +48,40 @@ '<section class="footnotes">\n' + | ||
} | ||
function _footnote_block_close() { | ||
function render_footnote_block_close() { | ||
return '</ol>\n</section>\n'; | ||
} | ||
function _footnote_open(tokens, idx) { | ||
var id = Number(tokens[idx].meta.id + 1).toString(); | ||
return '<li id="fn' + id + '" class="footnote-item">'; | ||
function render_footnote_open(tokens, idx, options, env, slf) { | ||
var id = slf.rules.footnote_anchor_name(tokens, idx, options, env, slf); | ||
return '<li id="fn' + id + '" class="footnote-item">'; | ||
} | ||
function _footnote_close() { | ||
function render_footnote_close() { | ||
return '</li>\n'; | ||
} | ||
function _footnote_anchor(tokens, idx) { | ||
var n = Number(tokens[idx].meta.id + 1).toString(); | ||
var id = 'fnref' + n; | ||
if (tokens[idx].meta.subId > 0) { | ||
id += ':' + tokens[idx].meta.subId; | ||
} | ||
return ' <a href="#' + id + '" class="footnote-backref">\u21a9</a>'; /* ↩ */ | ||
function render_footnote_anchor(tokens, idx, options, env, slf) { | ||
var id = slf.rules.footnote_anchor_name(tokens, idx, options, env, slf); | ||
/* ↩ with escape code to prevent display as Apple Emoji on iOS */ | ||
return ' <a href="#fnref' + id + '" class="footnote-backref">\u21a9\uFE0E</a>'; | ||
} | ||
//////////////////////////////////////////////////////////////////////////////// | ||
module.exports = function sub_plugin(md) { | ||
module.exports = function footnote_plugin(md) { | ||
var parseLinkLabel = md.helpers.parseLinkLabel, | ||
isSpace = md.utils.isSpace; | ||
md.renderer.rules.footnote_ref = _footnote_ref; | ||
md.renderer.rules.footnote_block_open = _footnote_block_open; | ||
md.renderer.rules.footnote_block_close = _footnote_block_close; | ||
md.renderer.rules.footnote_open = _footnote_open; | ||
md.renderer.rules.footnote_close = _footnote_close; | ||
md.renderer.rules.footnote_anchor = _footnote_anchor; | ||
md.renderer.rules.footnote_ref = render_footnote_ref; | ||
md.renderer.rules.footnote_block_open = render_footnote_block_open; | ||
md.renderer.rules.footnote_block_close = render_footnote_block_close; | ||
md.renderer.rules.footnote_open = render_footnote_open; | ||
md.renderer.rules.footnote_close = render_footnote_close; | ||
md.renderer.rules.footnote_anchor = render_footnote_anchor; | ||
// helpers (only used in other rules, no tokens are attached to those) | ||
md.renderer.rules.footnote_caption = render_footnote_caption; | ||
md.renderer.rules.footnote_anchor_name = render_footnote_anchor_name; | ||
// Process footnote block definition | ||
@@ -235,3 +265,3 @@ function footnote_def(state, startLine, endLine, silent) { | ||
token = state.push('footnote_ref', '', 0); | ||
token.meta = { id: footnoteId, subId: footnoteSubId }; | ||
token.meta = { id: footnoteId, subId: footnoteSubId, label: label }; | ||
} | ||
@@ -252,3 +282,3 @@ | ||
state.tokens = state.tokens.filter(function(tok) { | ||
state.tokens = state.tokens.filter(function (tok) { | ||
if (tok.type === 'footnote_reference_open') { | ||
@@ -278,3 +308,3 @@ insideRef = true; | ||
token = new state.Token('footnote_open', '', 1); | ||
token.meta = { id: i }; | ||
token.meta = { id: i, label: list[i].label }; | ||
state.tokens.push(token); | ||
@@ -312,3 +342,3 @@ | ||
token = new state.Token('footnote_anchor', '', 0); | ||
token.meta = { id: i, subId: j }; | ||
token.meta = { id: i, subId: j, label: list[i].label }; | ||
state.tokens.push(token); | ||
@@ -315,0 +345,0 @@ } |
@@ -1,2 +0,2 @@ | ||
/*! markdown-it-footnote 2.0.0 https://github.com//markdown-it/markdown-it-footnote @license MIT */ | ||
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var o;o="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,o.markdownitFootnote=e()}}(function(){return function e(o,t,n){function r(f,i){if(!t[f]){if(!o[f]){var u="function"==typeof require&&require;if(!i&&u)return u(f,!0);if(s)return s(f,!0);var l=new Error("Cannot find module '"+f+"'");throw l.code="MODULE_NOT_FOUND",l}var a=t[f]={exports:{}};o[f][0].call(a.exports,function(e){var t=o[f][1][e];return r(t?t:e)},a,a.exports,e,o,t,n)}return t[f].exports}for(var s="function"==typeof require&&require,f=0;f<n.length;f++)r(n[f]);return r}({1:[function(e,o,t){"use strict";function n(e,o){var t=Number(e[o].meta.id+1).toString(),n="fnref"+t;return e[o].meta.subId>0&&(n+=":"+e[o].meta.subId),'<sup class="footnote-ref"><a href="#fn'+t+'" id="'+n+'">['+t+"]</a></sup>"}function r(e,o,t){return(t.xhtmlOut?'<hr class="footnotes-sep" />\n':'<hr class="footnotes-sep">\n')+'<section class="footnotes">\n<ol class="footnotes-list">\n'}function s(){return"</ol>\n</section>\n"}function f(e,o){var t=Number(e[o].meta.id+1).toString();return'<li id="fn'+t+'" class="footnote-item">'}function i(){return"</li>\n"}function u(e,o){var t=Number(e[o].meta.id+1).toString(),n="fnref"+t;return e[o].meta.subId>0&&(n+=":"+e[o].meta.subId),' <a href="#'+n+'" class="footnote-backref">\u21a9</a>'}o.exports=function(e){function o(e,o,t,n){var r,s,f,i,u,l,a,c,d,h,k,v=e.bMarks[o]+e.tShift[o],b=e.eMarks[o];if(v+4>b)return!1;if(91!==e.src.charCodeAt(v))return!1;if(94!==e.src.charCodeAt(v+1))return!1;for(u=v+2;b>u;u++){if(32===e.src.charCodeAt(u))return!1;if(93===e.src.charCodeAt(u))break}if(u===v+2)return!1;if(u+1>=b||58!==e.src.charCodeAt(++u))return!1;if(n)return!0;for(u++,e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.refs||(e.env.footnotes.refs={}),l=e.src.slice(v+2,u-2),e.env.footnotes.refs[":"+l]=-1,a=new e.Token("footnote_reference_open","",1),a.meta={label:l},a.level=e.level++,e.tokens.push(a),r=e.bMarks[o],s=e.tShift[o],f=e.sCount[o],i=e.parentType,k=u,c=d=e.sCount[o]+u-(e.bMarks[o]+e.tShift[o]);b>u&&(h=e.src.charCodeAt(u),p(h));)9===h?d+=4-d%4:d++,u++;return e.tShift[o]=u-k,e.sCount[o]=d-c,e.bMarks[o]=k,e.blkIndent+=4,e.parentType="footnote",e.sCount[o]<e.blkIndent&&(e.sCount[o]+=e.blkIndent),e.md.block.tokenize(e,o,t,!0),e.parentType=i,e.blkIndent-=4,e.tShift[o]=s,e.sCount[o]=f,e.bMarks[o]=r,a=new e.Token("footnote_reference_close","",-1),a.level=--e.level,e.tokens.push(a),!0}function t(e,o){var t,n,r,s,f,i=e.posMax,u=e.pos;return u+2>=i?!1:94!==e.src.charCodeAt(u)?!1:91!==e.src.charCodeAt(u+1)?!1:(t=u+2,n=c(e,u+1),0>n?!1:(o||(e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.list||(e.env.footnotes.list=[]),r=e.env.footnotes.list.length,e.md.inline.parse(e.src.slice(t,n),e.md,e.env,f=[]),s=e.push("footnote_ref","",0),s.meta={id:r},e.env.footnotes.list[r]={tokens:f}),e.pos=n+1,e.posMax=i,!0))}function l(e,o){var t,n,r,s,f,i=e.posMax,u=e.pos;if(u+3>i)return!1;if(!e.env.footnotes||!e.env.footnotes.refs)return!1;if(91!==e.src.charCodeAt(u))return!1;if(94!==e.src.charCodeAt(u+1))return!1;for(n=u+2;i>n;n++){if(32===e.src.charCodeAt(n))return!1;if(10===e.src.charCodeAt(n))return!1;if(93===e.src.charCodeAt(n))break}return n===u+2?!1:n>=i?!1:(n++,t=e.src.slice(u+2,n-1),"undefined"==typeof e.env.footnotes.refs[":"+t]?!1:(o||(e.env.footnotes.list||(e.env.footnotes.list=[]),e.env.footnotes.refs[":"+t]<0?(r=e.env.footnotes.list.length,e.env.footnotes.list[r]={label:t,count:0},e.env.footnotes.refs[":"+t]=r):r=e.env.footnotes.refs[":"+t],s=e.env.footnotes.list[r].count,e.env.footnotes.list[r].count++,f=e.push("footnote_ref","",0),f.meta={id:r,subId:s}),e.pos=n,e.posMax=i,!0))}function a(e){var o,t,n,r,s,f,i,u,l,a,c=!1,p={};if(e.env.footnotes&&(e.tokens=e.tokens.filter(function(e){return"footnote_reference_open"===e.type?(c=!0,l=[],a=e.meta.label,!1):"footnote_reference_close"===e.type?(c=!1,p[":"+a]=l,!1):(c&&l.push(e),!c)}),e.env.footnotes.list)){for(f=e.env.footnotes.list,i=new e.Token("footnote_block_open","",1),e.tokens.push(i),o=0,t=f.length;t>o;o++){for(i=new e.Token("footnote_open","",1),i.meta={id:o},e.tokens.push(i),f[o].tokens?(u=[],i=new e.Token("paragraph_open","p",1),i.block=!0,u.push(i),i=new e.Token("inline","",0),i.children=f[o].tokens,i.content="",u.push(i),i=new e.Token("paragraph_close","p",-1),i.block=!0,u.push(i)):f[o].label&&(u=p[":"+f[o].label]),e.tokens=e.tokens.concat(u),s="paragraph_close"===e.tokens[e.tokens.length-1].type?e.tokens.pop():null,r=f[o].count>0?f[o].count:1,n=0;r>n;n++)i=new e.Token("footnote_anchor","",0),i.meta={id:o,subId:n},e.tokens.push(i);s&&e.tokens.push(s),i=new e.Token("footnote_close","",-1),e.tokens.push(i)}i=new e.Token("footnote_block_close","",-1),e.tokens.push(i)}}var c=e.helpers.parseLinkLabel,p=e.utils.isSpace;e.renderer.rules.footnote_ref=n,e.renderer.rules.footnote_block_open=r,e.renderer.rules.footnote_block_close=s,e.renderer.rules.footnote_open=f,e.renderer.rules.footnote_close=i,e.renderer.rules.footnote_anchor=u,e.block.ruler.before("reference","footnote_def",o,{alt:["paragraph","reference"]}),e.inline.ruler.after("image","footnote_inline",t),e.inline.ruler.after("footnote_inline","footnote_ref",l),e.core.ruler.after("inline","footnote_tail",a)}},{}]},{},[1])(1)}); | ||
/*! markdown-it-footnote 3.0.0 https://github.com//markdown-it/markdown-it-footnote @license MIT */ | ||
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var o;o="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,o.markdownitFootnote=e()}}(function(){return function e(o,n,t){function r(f,l){if(!n[f]){if(!o[f]){var i="function"==typeof require&&require;if(!l&&i)return i(f,!0);if(s)return s(f,!0);var u=new Error("Cannot find module '"+f+"'");throw u.code="MODULE_NOT_FOUND",u}var a=n[f]={exports:{}};o[f][0].call(a.exports,function(e){var n=o[f][1][e];return r(n?n:e)},a,a.exports,e,o,n,t)}return n[f].exports}for(var s="function"==typeof require&&require,f=0;f<t.length;f++)r(t[f]);return r}({1:[function(e,o,n){"use strict";function t(e,o,n,t){var r=Number(e[o].meta.id+1).toString();e[o].meta.subId>0&&(r+=":"+e[o].meta.subId);var s="";return"string"==typeof t.docId&&(s="-"+t.docId+"-"),s+r}function r(e,o){var n=Number(e[o].meta.id+1).toString();return e[o].meta.subId>0&&(n+=":"+e[o].meta.subId),"["+n+"]"}function s(e,o,n,t,r){var s=r.rules.footnote_anchor_name(e,o,n,t,r),f=r.rules.footnote_caption(e,o,n,t,r);return'<sup class="footnote-ref"><a href="#fn'+s+'" id="fnref'+s+'">'+f+"</a></sup>"}function f(e,o,n){return(n.xhtmlOut?'<hr class="footnotes-sep" />\n':'<hr class="footnotes-sep">\n')+'<section class="footnotes">\n<ol class="footnotes-list">\n'}function l(){return"</ol>\n</section>\n"}function i(e,o,n,t,r){var s=r.rules.footnote_anchor_name(e,o,n,t,r);return'<li id="fn'+s+'" class="footnote-item">'}function u(){return"</li>\n"}function a(e,o,n,t,r){var s=r.rules.footnote_anchor_name(e,o,n,t,r);return' <a href="#fnref'+s+'" class="footnote-backref">\u21a9\ufe0e</a>'}o.exports=function(e){function o(e,o,n,t){var r,s,f,l,i,u,a,c,p,d,k,v=e.bMarks[o]+e.tShift[o],_=e.eMarks[o];if(v+4>_)return!1;if(91!==e.src.charCodeAt(v))return!1;if(94!==e.src.charCodeAt(v+1))return!1;for(i=v+2;i<_;i++){if(32===e.src.charCodeAt(i))return!1;if(93===e.src.charCodeAt(i))break}if(i===v+2)return!1;if(i+1>=_||58!==e.src.charCodeAt(++i))return!1;if(t)return!0;for(i++,e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.refs||(e.env.footnotes.refs={}),u=e.src.slice(v+2,i-2),e.env.footnotes.refs[":"+u]=-1,a=new e.Token("footnote_reference_open","",1),a.meta={label:u},a.level=e.level++,e.tokens.push(a),r=e.bMarks[o],s=e.tShift[o],f=e.sCount[o],l=e.parentType,k=i,c=p=e.sCount[o]+i-(e.bMarks[o]+e.tShift[o]);i<_&&(d=e.src.charCodeAt(i),h(d));)9===d?p+=4-p%4:p++,i++;return e.tShift[o]=i-k,e.sCount[o]=p-c,e.bMarks[o]=k,e.blkIndent+=4,e.parentType="footnote",e.sCount[o]<e.blkIndent&&(e.sCount[o]+=e.blkIndent),e.md.block.tokenize(e,o,n,!0),e.parentType=l,e.blkIndent-=4,e.tShift[o]=s,e.sCount[o]=f,e.bMarks[o]=r,a=new e.Token("footnote_reference_close","",(-1)),a.level=--e.level,e.tokens.push(a),!0}function n(e,o){var n,t,r,s,f,l=e.posMax,i=e.pos;return!(i+2>=l)&&(94===e.src.charCodeAt(i)&&(91===e.src.charCodeAt(i+1)&&(n=i+2,t=d(e,i+1),!(t<0)&&(o||(e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.list||(e.env.footnotes.list=[]),r=e.env.footnotes.list.length,e.md.inline.parse(e.src.slice(n,t),e.md,e.env,f=[]),s=e.push("footnote_ref","",0),s.meta={id:r},e.env.footnotes.list[r]={tokens:f}),e.pos=t+1,e.posMax=l,!0))))}function c(e,o){var n,t,r,s,f,l=e.posMax,i=e.pos;if(i+3>l)return!1;if(!e.env.footnotes||!e.env.footnotes.refs)return!1;if(91!==e.src.charCodeAt(i))return!1;if(94!==e.src.charCodeAt(i+1))return!1;for(t=i+2;t<l;t++){if(32===e.src.charCodeAt(t))return!1;if(10===e.src.charCodeAt(t))return!1;if(93===e.src.charCodeAt(t))break}return t!==i+2&&(!(t>=l)&&(t++,n=e.src.slice(i+2,t-1),"undefined"!=typeof e.env.footnotes.refs[":"+n]&&(o||(e.env.footnotes.list||(e.env.footnotes.list=[]),e.env.footnotes.refs[":"+n]<0?(r=e.env.footnotes.list.length,e.env.footnotes.list[r]={label:n,count:0},e.env.footnotes.refs[":"+n]=r):r=e.env.footnotes.refs[":"+n],s=e.env.footnotes.list[r].count,e.env.footnotes.list[r].count++,f=e.push("footnote_ref","",0),f.meta={id:r,subId:s,label:n}),e.pos=t,e.posMax=l,!0)))}function p(e){var o,n,t,r,s,f,l,i,u,a,c=!1,p={};if(e.env.footnotes&&(e.tokens=e.tokens.filter(function(e){return"footnote_reference_open"===e.type?(c=!0,u=[],a=e.meta.label,!1):"footnote_reference_close"===e.type?(c=!1,p[":"+a]=u,!1):(c&&u.push(e),!c)}),e.env.footnotes.list)){for(f=e.env.footnotes.list,l=new e.Token("footnote_block_open","",1),e.tokens.push(l),o=0,n=f.length;o<n;o++){for(l=new e.Token("footnote_open","",1),l.meta={id:o,label:f[o].label},e.tokens.push(l),f[o].tokens?(i=[],l=new e.Token("paragraph_open","p",1),l.block=!0,i.push(l),l=new e.Token("inline","",0),l.children=f[o].tokens,l.content="",i.push(l),l=new e.Token("paragraph_close","p",(-1)),l.block=!0,i.push(l)):f[o].label&&(i=p[":"+f[o].label]),e.tokens=e.tokens.concat(i),s="paragraph_close"===e.tokens[e.tokens.length-1].type?e.tokens.pop():null,r=f[o].count>0?f[o].count:1,t=0;t<r;t++)l=new e.Token("footnote_anchor","",0),l.meta={id:o,subId:t,label:f[o].label},e.tokens.push(l);s&&e.tokens.push(s),l=new e.Token("footnote_close","",(-1)),e.tokens.push(l)}l=new e.Token("footnote_block_close","",(-1)),e.tokens.push(l)}}var d=e.helpers.parseLinkLabel,h=e.utils.isSpace;e.renderer.rules.footnote_ref=s,e.renderer.rules.footnote_block_open=f,e.renderer.rules.footnote_block_close=l,e.renderer.rules.footnote_open=i,e.renderer.rules.footnote_close=u,e.renderer.rules.footnote_anchor=a,e.renderer.rules.footnote_caption=r,e.renderer.rules.footnote_anchor_name=t,e.block.ruler.before("reference","footnote_def",o,{alt:["paragraph","reference"]}),e.inline.ruler.after("image","footnote_inline",n),e.inline.ruler.after("footnote_inline","footnote_ref",c),e.core.ruler.after("inline","footnote_tail",p)}},{}]},{},[1])(1)}); |
90
index.js
@@ -8,11 +8,36 @@ // Process footnotes | ||
function _footnote_ref(tokens, idx) { | ||
function render_footnote_anchor_name(tokens, idx, options, env/*, slf*/) { | ||
var n = Number(tokens[idx].meta.id + 1).toString(); | ||
var id = 'fnref' + n; | ||
if (tokens[idx].meta.subId > 0) { | ||
id += ':' + tokens[idx].meta.subId; | ||
n += ':' + tokens[idx].meta.subId; | ||
} | ||
return '<sup class="footnote-ref"><a href="#fn' + n + '" id="' + id + '">[' + n + ']</a></sup>'; | ||
var prefix = ''; | ||
if (typeof env.docId === 'string') { | ||
prefix = '-' + env.docId + '-'; | ||
} | ||
return prefix + n; | ||
} | ||
function _footnote_block_open(tokens, idx, options) { | ||
function render_footnote_caption(tokens, idx/*, options, env, slf*/) { | ||
var n = Number(tokens[idx].meta.id + 1).toString(); | ||
if (tokens[idx].meta.subId > 0) { | ||
n += ':' + tokens[idx].meta.subId; | ||
} | ||
return '[' + n + ']'; | ||
} | ||
function render_footnote_ref(tokens, idx, options, env, slf) { | ||
var id = slf.rules.footnote_anchor_name(tokens, idx, options, env, slf); | ||
var caption = slf.rules.footnote_caption(tokens, idx, options, env, slf); | ||
return '<sup class="footnote-ref"><a href="#fn' + id + '" id="fnref' + id + '">' + caption + '</a></sup>'; | ||
} | ||
function render_footnote_block_open(tokens, idx, options) { | ||
return (options.xhtmlOut ? '<hr class="footnotes-sep" />\n' : '<hr class="footnotes-sep">\n') + | ||
@@ -22,35 +47,40 @@ '<section class="footnotes">\n' + | ||
} | ||
function _footnote_block_close() { | ||
function render_footnote_block_close() { | ||
return '</ol>\n</section>\n'; | ||
} | ||
function _footnote_open(tokens, idx) { | ||
var id = Number(tokens[idx].meta.id + 1).toString(); | ||
return '<li id="fn' + id + '" class="footnote-item">'; | ||
function render_footnote_open(tokens, idx, options, env, slf) { | ||
var id = slf.rules.footnote_anchor_name(tokens, idx, options, env, slf); | ||
return '<li id="fn' + id + '" class="footnote-item">'; | ||
} | ||
function _footnote_close() { | ||
function render_footnote_close() { | ||
return '</li>\n'; | ||
} | ||
function _footnote_anchor(tokens, idx) { | ||
var n = Number(tokens[idx].meta.id + 1).toString(); | ||
var id = 'fnref' + n; | ||
if (tokens[idx].meta.subId > 0) { | ||
id += ':' + tokens[idx].meta.subId; | ||
} | ||
return ' <a href="#' + id + '" class="footnote-backref">\u21a9</a>'; /* ↩ */ | ||
function render_footnote_anchor(tokens, idx, options, env, slf) { | ||
var id = slf.rules.footnote_anchor_name(tokens, idx, options, env, slf); | ||
/* ↩ with escape code to prevent display as Apple Emoji on iOS */ | ||
return ' <a href="#fnref' + id + '" class="footnote-backref">\u21a9\uFE0E</a>'; | ||
} | ||
//////////////////////////////////////////////////////////////////////////////// | ||
module.exports = function sub_plugin(md) { | ||
module.exports = function footnote_plugin(md) { | ||
var parseLinkLabel = md.helpers.parseLinkLabel, | ||
isSpace = md.utils.isSpace; | ||
md.renderer.rules.footnote_ref = _footnote_ref; | ||
md.renderer.rules.footnote_block_open = _footnote_block_open; | ||
md.renderer.rules.footnote_block_close = _footnote_block_close; | ||
md.renderer.rules.footnote_open = _footnote_open; | ||
md.renderer.rules.footnote_close = _footnote_close; | ||
md.renderer.rules.footnote_anchor = _footnote_anchor; | ||
md.renderer.rules.footnote_ref = render_footnote_ref; | ||
md.renderer.rules.footnote_block_open = render_footnote_block_open; | ||
md.renderer.rules.footnote_block_close = render_footnote_block_close; | ||
md.renderer.rules.footnote_open = render_footnote_open; | ||
md.renderer.rules.footnote_close = render_footnote_close; | ||
md.renderer.rules.footnote_anchor = render_footnote_anchor; | ||
// helpers (only used in other rules, no tokens are attached to those) | ||
md.renderer.rules.footnote_caption = render_footnote_caption; | ||
md.renderer.rules.footnote_anchor_name = render_footnote_anchor_name; | ||
// Process footnote block definition | ||
@@ -234,3 +264,3 @@ function footnote_def(state, startLine, endLine, silent) { | ||
token = state.push('footnote_ref', '', 0); | ||
token.meta = { id: footnoteId, subId: footnoteSubId }; | ||
token.meta = { id: footnoteId, subId: footnoteSubId, label: label }; | ||
} | ||
@@ -251,3 +281,3 @@ | ||
state.tokens = state.tokens.filter(function(tok) { | ||
state.tokens = state.tokens.filter(function (tok) { | ||
if (tok.type === 'footnote_reference_open') { | ||
@@ -277,3 +307,3 @@ insideRef = true; | ||
token = new state.Token('footnote_open', '', 1); | ||
token.meta = { id: i }; | ||
token.meta = { id: i, label: list[i].label }; | ||
state.tokens.push(token); | ||
@@ -311,3 +341,3 @@ | ||
token = new state.Token('footnote_anchor', '', 0); | ||
token.meta = { id: i, subId: j }; | ||
token.meta = { id: i, subId: j, label: list[i].label }; | ||
state.tokens.push(token); | ||
@@ -314,0 +344,0 @@ } |
{ | ||
"name": "markdown-it-footnote", | ||
"version": "2.0.0", | ||
"version": "3.0.0", | ||
"description": "Footnotes for markdown-it markdown parser.", | ||
@@ -11,12 +11,4 @@ "keywords": [ | ||
], | ||
"homepage": "https://github.com/markdown-it/markdown-it-footnote", | ||
"repository": { | ||
"type": "git", | ||
"url": "git://github.com/markdown-it/markdown-it-footnote.git" | ||
}, | ||
"bugs": { | ||
"url": "https://github.com/markdown-it/markdown-it-footnote/issues" | ||
}, | ||
"repository": "markdown-it/markdown-it-footnote", | ||
"license": "MIT", | ||
"main": "index.js", | ||
"scripts": { | ||
@@ -28,4 +20,3 @@ "test": "make test" | ||
"coveralls": "^2.11.2", | ||
"eslint": "0.10.2", | ||
"eslint-plugin-nodeca": "^1.0.0", | ||
"eslint": "~2.13.1", | ||
"istanbul": "*", | ||
@@ -32,0 +23,0 @@ "lodash": "*", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
No website
QualityPackage does not have a website.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
34944
10
612
2
2
5