mirror of
https://github.com/arthur-pbty/portfolio2023.git
synced 2026-06-07 14:55:31 +02:00
44 lines
1.2 KiB
JavaScript
44 lines
1.2 KiB
JavaScript
/* jshint node:true */
|
|
"use strict";
|
|
|
|
// http://docutils.sourceforge.net/docs/user/rst/quickref.html#section-structure
|
|
var ACCEPTED_CHARS = ['=', '-', '`', ':', "'", '"', '~', '^', '_', '*', '+', '#', '<', '>'];
|
|
|
|
function badger(content, imgUrl, linkUrl, altText) {
|
|
var lines = content.split('\n');
|
|
var idealLine = findIdealLineForInsert(lines);
|
|
var badgeContent = '\n.. image:: ' + imgUrl + '\n' +
|
|
' :alt: ' + altText + '\n' +
|
|
' :target: ' + linkUrl;
|
|
lines.splice(idealLine, 0, badgeContent);
|
|
|
|
return lines.join('\n');
|
|
}
|
|
|
|
function findIdealLineForInsert(lines) {
|
|
var lineIdx = 1;
|
|
var chrIdx = 0;
|
|
var seenHeader = false;
|
|
|
|
for(; lineIdx < lines.length; lineIdx++) {
|
|
var line = lines[lineIdx];
|
|
var lineAbove = lines[lineIdx - 1];
|
|
var chrSeen = {};
|
|
for(; chrIdx < line.length; chrIdx++) {
|
|
chrSeen[line[chrIdx]] = null;
|
|
}
|
|
var uniqChars = Object.keys(chrSeen);
|
|
if(uniqChars.length === 1
|
|
&& ACCEPTED_CHARS.indexOf(uniqChars[0]) !== -1
|
|
&& line.length >= lineAbove.length) {
|
|
seenHeader = true;
|
|
} else {
|
|
if(seenHeader) break;
|
|
}
|
|
}
|
|
|
|
return lineIdx;
|
|
}
|
|
|
|
module.exports = badger;
|