This commit is contained in:
Tutur33
2023-11-24 22:35:41 +01:00
parent 3c0b507a93
commit 7644b2a0f7
45165 changed files with 4803356 additions and 3 deletions
+29
View File
@@ -0,0 +1,29 @@
/* jshint node:true */
"use strict";
function badger(content, imgUrl, linkUrl, altText) {
var lines = content.split('\n');
var idealLine = findIdealLineForInsert(lines);
var badgeContent = '\nimage:' + imgUrl + '[link="' + linkUrl + '"]';
lines.splice(idealLine, 0, badgeContent);
return lines.join('\n');
}
function findIdealLineForInsert(lines) {
var i = 0;
var seenHeader = false;
for(;i < lines.length;i++) {
if(/^\s*(\=+|={3,}|-{3,})/.test(lines[i])) {
seenHeader = true;
} else {
if(seenHeader) break;
}
}
return i;
}
module.exports = badger;
+62
View File
@@ -0,0 +1,62 @@
/* jshint node:true */
"use strict";
var markdownBadger = require('./markdown');
var textileBadger = require('./textile');
var rdocBadger = require('./rdoc');
var orgmodeBadger = require('./orgmode');
var mediawikiBadger = require('./mediawiki');
var rstBadger = require('./rst');
var asciidocBadger = require('./asciidoc');
var podBadger = require('./pod');
var plaintextBadger = require('./plaintext');
var assert = require('assert');
var markupBadgers = {
markdown: markdownBadger,
mdown: markdownBadger,
mkdn: markdownBadger,
md: markdownBadger,
textile: textileBadger,
rdoc: rdocBadger,
org: orgmodeBadger,
mediawiki: mediawikiBadger,
wiki: mediawikiBadger,
rst: rstBadger,
asciidoc: asciidocBadger,
adoc: asciidocBadger,
asc: asciidocBadger,
pod: podBadger
};
var addBadge = function(content, fileExt, imageUrl, linkUrl, altText) {
assert(typeof content === 'string', 'readme content required');
assert(imageUrl, 'badge imageUrl required');
assert(linkUrl, 'badge linkUrl required');
assert(altText, 'badge altText required');
var plaintextBadger = function(content) {
return content + '\n' + altText + '\n';
};
// failover to plaintext
var badger = markupBadgers[fileExt && fileExt.toLowerCase()] || plaintextBadger;
return badger(content, imageUrl, linkUrl, altText);
};
var hasImageSupport = function(fileExt) {
return !!markupBadgers[fileExt && fileExt.toLowerCase()];
};
module.exports = {
addBadge: addBadge,
hasImageSupport: hasImageSupport
};
+66
View File
@@ -0,0 +1,66 @@
/* jshint node:true */
"use strict";
var balanced = require('balanced-match');
var rHeader = /^\s*(\#+|={3,}|-{3,})/;
var rBadgePrefix = /\[!\[[^\]]*\]\([^)]*\)\]\(/g; // ends with the first parenthesis of link
function markdownBadger(content, imgUrl, linkUrl, altText) {
var badgeContent = getBadgeMarkdown(imgUrl, linkUrl, altText);
var lines = content.split(/\n/);
// Try to find an existing line with badges in it
var idealLine = findLastBadgeLine(lines);
if(idealLine >= 0) {
var line = lines[idealLine];
// Count badges and find the prefix end index of the last badge in this line
var count = 0;
var end;
line.replace(rBadgePrefix, function(match, offset) {
count++;
end = offset + match.length - 1;
return match;
});
var lastPart = line.substring(end);
var balancedMatch = balanced('(', ')', lastPart);
// Insert into the same line
lines[idealLine] = line.substring(0, end + balancedMatch.end + 1) + ' ' + badgeContent
+ lastPart.substring(balancedMatch.end + 1);
// Otherwise try to place it below the header
} else {
idealLine = findHeaderLine(lines);
// If the next line is not empty, add another empty line
if(lines[idealLine + 1]) badgeContent += '\n';
lines.splice(idealLine + 1, 0, '\n' + badgeContent);
}
return lines.join('\n');
}
function findHeaderLine(lines) {
var i = 0;
for(;i < lines.length;i++) {
if(rHeader.test(lines[i])) return i;
}
return -1;
}
function findLastBadgeLine(lines) {
var i = lines.length - 1;
for(;i >= 0;i--) {
if(rBadgePrefix.test(lines[i])) return i;
}
return -1;
}
function getBadgeMarkdown(imgUrl, linkUrl, altText) {
return '[![' + altText + '](' + imgUrl + ')](' + linkUrl + ')';
}
module.exports = markdownBadger;
+29
View File
@@ -0,0 +1,29 @@
/* jshint node:true */
"use strict";
function badger(content, imgUrl, linkUrl, altText) {
var lines = content.split('\n');
var idealLine = findIdealLineForInsert(lines);
var badgeContent = '\n<a href="' + linkUrl + '"><img src="' + imgUrl + '" alt="' + altText + '"/></a>';
lines.splice(idealLine, 0, badgeContent);
return lines.join('\n');
}
function findIdealLineForInsert(lines) {
var i = 0;
var seenHeader = false;
for(; i < lines.length; i++) {
if(/^\s*(\=+)/.test(lines[i])) {
seenHeader = true;
} else {
if(seenHeader) break;
}
}
return i;
}
module.exports = badger;
+30
View File
@@ -0,0 +1,30 @@
/* jshint node:true */
"use strict";
function badger(content, imgUrl, linkUrl, altText) {
var lines = content.split('\n');
var idealLine = findIdealLineForInsert(lines);
var badgeContent = '\n #+ATTR_HTML: title="' + altText + '"' +
'\n [[' + linkUrl + '][file:' + imgUrl + ']]';
lines.splice(idealLine, 0, badgeContent);
return lines.join('\n');
}
function findIdealLineForInsert(lines) {
var i = 0;
var seenHeader = false;
for(; i < lines.length; i++) {
if(/^\s*(\*\s)/.test(lines[i])) {
seenHeader = true;
} else {
if(seenHeader) break;
}
}
return i;
}
module.exports = badger;
+10
View File
@@ -0,0 +1,10 @@
/* jshint node:true */
"use strict";
/**
* Sticks a url at the bottom of the page. Simple.
*/
module.exports = function(content, badgeUrl, linkUrl) {
var plainUrl = linkUrl.split('?')[0];
return content + '\nJoin the chat: '+ plainUrl + '\n';
};
+32
View File
@@ -0,0 +1,32 @@
/* jshint node:true */
"use strict";
function badger(content, imgUrl, linkUrl, altText) {
var lines = content.split('\n');
var idealLine = findIdealLineForInsert(lines);
var badgeContent = '\n=begin HTML\n' +
'\n' +
'<p><a href="' + linkUrl + '"><img src="' + imgUrl + '" alt="' + altText + '"></a></p>\n' +
'\n' +
'=end HTML';
lines.splice(idealLine, 0, badgeContent);
return lines.join('\n');
}
function findIdealLineForInsert(lines) {
var i = 0;
var seenHeader = false;
for(; i < lines.length; i++) {
if(/^\s*(\=head1)/.test(lines[i])) {
seenHeader = true;
} else {
if(seenHeader) break;
}
}
return i;
}
module.exports = badger;
+29
View File
@@ -0,0 +1,29 @@
/* jshint node:true */
"use strict";
function badger(content, imgUrl, linkUrl, altText) {
var lines = content.split('\n');
var idealLine = findIdealLineForInsert(lines);
var badgeContent = '\n{<img src="' + imgUrl + '" alt="' + altText + '">}[' + linkUrl + ']';
lines.splice(idealLine, 0, badgeContent);
return lines.join('\n');
}
function findIdealLineForInsert(lines) {
var i = 0;
var seenHeader = false;
for(; i < lines.length; i++) {
if(/^\s*(\=+)/.test(lines[i])) {
seenHeader = true;
} else {
if(seenHeader) break;
}
}
return i;
}
module.exports = badger;
+43
View File
@@ -0,0 +1,43 @@
/* 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;
+30
View File
@@ -0,0 +1,30 @@
/* jshint node:true */
"use strict";
function badger(content, imgUrl, linkUrl, altText) {
var lines = content.split('\n');
var idealLine = findIdealLineForInsert(lines);
var badgeContent = '\n!' + imgUrl + '(' + altText + ')!:' + linkUrl;
lines.splice(idealLine, 0, badgeContent);
return lines.join('\n');
}
function findIdealLineForInsert(lines) {
var i = 0;
var seenHeader = false;
for(; i < lines.length; i++) {
if(/^\s*(h1\.\s)/.test(lines[i])) {
seenHeader = true;
} else {
if(seenHeader) break;
}
}
return i;
}
module.exports = badger;