yarle-evernote-to-md
Version:
Yet Another Rope Ladder from Evernote
58 lines • 2.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.replaceCodeBlock = exports.codeBlockRule = exports.unescapeMarkdown = void 0;
const filter_by_nodename_1 = require("./filter-by-nodename");
const get_attribute_proxy_1 = require("./get-attribute-proxy");
const LanguageFactory_1 = require("./../../outputLanguages/LanguageFactory");
const yarle_1 = require("./../../yarle");
const isCodeBlock = (node) => {
const nodeProxy = (0, get_attribute_proxy_1.getAttributeProxy)(node);
const codeBlockFlag = '-en-codeblock:true';
return nodeProxy.style && nodeProxy.style.value.indexOf(codeBlockFlag) >= 0;
};
const getIntendNumber = (node) => {
const nodeProxy = (0, get_attribute_proxy_1.getAttributeProxy)(node);
const paddingAttr = 'padding-left:';
let intendNumber = 0;
if (nodeProxy.style && nodeProxy.style.value.indexOf(paddingAttr) >= 0) {
intendNumber = Math.floor(nodeProxy.style.value.split(paddingAttr)[1].split('px')[0] / 20);
}
return intendNumber;
};
const unescapeMarkdown = (s) => s.replace(/\\(.)/g, '$1');
exports.unescapeMarkdown = unescapeMarkdown;
exports.codeBlockRule = {
filter: (0, filter_by_nodename_1.filterByNodeName)('DIV'),
replacement: (content, node) => {
return (0, exports.replaceCodeBlock)(content, node);
},
};
const replaceCodeBlock = (content, node) => {
const nodeProxy = (0, get_attribute_proxy_1.getAttributeProxy)(node);
const intend = getIntendNumber(node);
content = `${'\t'.repeat(intend)}${content}`;
if (isCodeBlock(node)) {
// turndown has already escaped markdown chars (and all '\') in content;
// reverse that to avoid extraneous backslashes in code block.
content = (0, exports.unescapeMarkdown)(content);
const langaugeFactory = new LanguageFactory_1.LanguageFactory();
const targetLanguage = langaugeFactory.createLanguage(yarle_1.yarleOptions.outputFormat);
return `${targetLanguage.codeBlock}${content}${targetLanguage.codeBlock}`;
}
if (node.parentElement && isCodeBlock(node.parentElement) && node.parentElement.firstElementChild === node) {
return `${content}`;
}
if (node.parentElement && isCodeBlock(node.parentElement)) {
return `\n${content}`;
}
const childHtml = node.innerHTML;
/*return node.isBlock
? childHtml !== '<br>'
? `\n${content}\n`
: `${content}`
: `${content}`;
*/
return node.isBlock ? `\n${content}\n` : content;
};
exports.replaceCodeBlock = replaceCodeBlock;
//# sourceMappingURL=replace-code-block.js.map