mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-09-12 06:40:50 +02:00
* Cleaning up public/ and documenting js/css libs. This commit mostly addresses #1484 by moving vendor'ed plugins into a vendor/ directory and documenting their upstream source and license in vendor/librejs.html. This also proves gitea is using only open source js/css libraries which helps toward reaching #1524. * Removing unused css file. The version of this file in use is located at: vendor/plugins/highlight/github.css * Cleaned up librejs.html and added javascript header A SafeJS function was added to templates/helper.go to allow keeping comments inside of javascript. A javascript comment was added in the header of templates/base/head.tmpl to mark all non-inline source as free. The librejs.html file was updated to meet the current librejs spec. I have now verified that the librejs plugin detects most of the scripts included in gitea and suspect the non-free detections are the result of a bug in the plugin. I believe this commit is enough to meet the C0.0 requirement of #1534. * Updating SafeJS function per lint suggestion * Added VERSIONS file, per request
45 lines
1.6 KiB
JavaScript
45 lines
1.6 KiB
JavaScript
(function () {
|
|
var re = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-]*)?\??(?:[\-\+:=&;%@\.\w]*)#?(?:[\.\!\/\\\w]*))?)/g;
|
|
function textNodesUnder(node) {
|
|
var textNodes = [];
|
|
if(typeof document.createTreeWalker === 'function') {
|
|
// Efficient TreeWalker
|
|
var currentNode, walker;
|
|
walker = document.createTreeWalker(node, NodeFilter.SHOW_TEXT, null, false);
|
|
while(currentNode = walker.nextNode()) {
|
|
textNodes.push(currentNode);
|
|
}
|
|
} else {
|
|
// Less efficient recursive function
|
|
for(node = node.firstChild; node; node = node.nextSibling) {
|
|
if(node.nodeType === 3) {
|
|
textNodes.push(node);
|
|
} else {
|
|
textNodes = textNodes.concat(textNodesUnder(node));
|
|
}
|
|
}
|
|
}
|
|
return textNodes;
|
|
}
|
|
|
|
function processNode(node) {
|
|
re.lastIndex = 0;
|
|
var results = re.exec(node.textContent);
|
|
if(results !== null) {
|
|
if($(node).parents().filter('pre>code').length === 0) {
|
|
$(node).replaceWith(
|
|
$('<span />').html(
|
|
node.nodeValue.replace(re, '<a href="$1">$1</a>')
|
|
)
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
jQuery.fn.autolink = function () {
|
|
this.each(function () {
|
|
textNodesUnder(this).forEach(processNode);
|
|
});
|
|
return this;
|
|
};
|
|
})();
|