Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RES could use snudown compiled to JS via emscripten #452

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Chrome/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
"jquery-fieldselection.min.js",
"tinycon.js",
"jquery.tokeninput.js",
"snuownd.js",
"emsnudown.js",
"reddit_enhancement_suite.user.js"
],
"css": [
Expand Down
2 changes: 1 addition & 1 deletion OperaBlink/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
"jquery-fieldselection.min.js",
"tinycon.js",
"jquery.tokeninput.js",
"snuownd.js",
"emsnudown.js",
"reddit_enhancement_suite.user.js"
],
"css": [
Expand Down
2 changes: 1 addition & 1 deletion RES.safariextension/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
<string>jquery-fieldselection.min.js</string>
<string>tinycon.js</string>
<string>jquery.tokeninput.js</string>
<string>snuownd.js</string>
<string>emsnudown.js</string>
<string>reddit_enhancement_suite.user.js</string>
</array>
</dict>
Expand Down
4 changes: 2 additions & 2 deletions XPI/lib/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ pageMod.PageMod({
self.data.url('jquery-fieldselection.min.js'),
self.data.url('tinycon.js'),
self.data.url('jquery.tokeninput.js'),
self.data.url('snuownd.js'),
self.data.url('emsnudown.js'),
self.data.url('reddit_enhancement_suite.user.js')
],
/* contentStyleFile: [
Expand Down Expand Up @@ -335,4 +335,4 @@ pageMod.PageMod({

});
}
});
});
136 changes: 136 additions & 0 deletions lib/emsnudown.js

Large diffs are not rendered by default.

67 changes: 13 additions & 54 deletions lib/reddit_enhancement_suite.user.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

var RESVersion = "4.3.0.4";

var jQuery, $, guiders, Tinycon, SnuOwnd;
var jQuery, $, guiders, Tinycon, emsnudown;

/*
Reddit Enhancement Suite - a suite of tools to enhance Reddit
Expand Down Expand Up @@ -1368,36 +1368,7 @@ var RESUtils = {
return str;
},
sanitizeHTML: function(htmlStr) {
if (!this.sanitizer) {
var SnuOwnd = window.SnuOwnd;
var redditCallbacks = SnuOwnd.getRedditCallbacks();
var callbacks = SnuOwnd.createCustomCallbacks({
paragraph: function(out, text, options){
if (text) out.s += text.s;
},
autolink: redditCallbacks.autolink,
raw_html_tag: redditCallbacks.raw_html_tag
});
var rendererConfig = SnuOwnd.defaultRenderState();
rendererConfig.flags = SnuOwnd.DEFAULT_WIKI_FLAGS;
rendererConfig.html_element_whitelist = [
'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'span', 'div', 'code',
'br', 'hr', 'p', 'a', 'img', 'pre', 'blockquote', 'table',
'thead', 'tbody', 'tfoot', 'tr', 'th', 'td', 'strong', 'em',
'i', 'b', 'u', 'ul', 'ol', 'li', 'dl', 'dt', 'dd',
'font', 'center', 'small', 's', 'q', 'sub', 'sup', 'del'
];
rendererConfig.html_attr_whitelist = [
'href', 'title', 'src', 'alt', 'colspan',
'rowspan', 'cellspacing', 'cellpadding', 'scope',
'face', 'color', 'size', 'bgcolor', 'align'
];
this.sanitizer = SnuOwnd.getParser({
callbacks: callbacks,
context: rendererConfig
});
}
return this.sanitizer.render(htmlStr);
return emsnudown.sanitise(htmlStr);
},
fadeElementOut: function(obj, speed, callback) {
if (obj.getAttribute('isfading') === 'in') {
Expand Down Expand Up @@ -8830,21 +8801,15 @@ modules['commentPreview'] = {
if ((this.isEnabled()) && (this.isMatchURL())) {
this.isWiki = $(document.body).is(".wiki-page");
if (!this.isWiki) {
this.converter = window.SnuOwnd.getParser();
this.converter = window.emsnudown;
} else {
//We need to configure non-default renderers here
var SnuOwnd = window.SnuOwnd;
var redditCallbacks = SnuOwnd.getRedditCallbacks();
var rendererConfig = SnuOwnd.defaultRenderState();
rendererConfig.flags = SnuOwnd.DEFAULT_WIKI_FLAGS;
rendererConfig.html_element_whitelist = SnuOwnd.DEFAULT_HTML_ELEMENT_WHITELIST;
rendererConfig.html_attr_whitelist = SnuOwnd.DEFAULT_HTML_ATTR_WHITELIST;
this.converter = SnuOwnd.getParser({
callbacks: redditCallbacks,
context: rendererConfig
});

this.tocConverter = SnuOwnd.getParser(SnuOwnd.getTocRenderer());
var emsnudown = window.emsnudown;
this.converter = {
render: function (text) {
emsnudown.render(text, { renderer: emsnudown.RENDERER_WIKI });
}
};
}

this.bigTextTarget = null;
Expand Down Expand Up @@ -8883,14 +8848,8 @@ modules['commentPreview'] = {
markdownToHTML: function(md) {
var body = this.converter.render(md);
if (this.isWiki) {
/*
<s>Snudown, and therefore SnuOwnd, is a bit funny about how it generates its table of contents entries.
To when it encounters a header it tries to perform some of the usual inline formatting such as emphasis, strikethoughs, or superscript in headers. The text containing generated HTML then gets passed into cb_toc_header which escapes all of the passed HTML. When reddit gets it escaped tags are stripped.

It would be nicer if they just used different functions for rendering the emphasis when making headers.</s>

It seems that my understanding was wrong, for some reason reddit doesn't even use snudown's TOC renderer.
*/
// reddit doesn't use snudown's TOC renderer, so generate our
// own table of contents
var doc = $('<body>').html(body);
var header_ids = {};
var headers = doc.find('h1, h2, h3, h4, h5, h6');
Expand Down Expand Up @@ -21074,12 +21033,12 @@ function RESInitReadyCheck() {
// save Reddit's jQuery, because this script is going to jack it up.
// now, take the new jQuery in and store it local to RES's scope (it's a var up top)
var redditJq = window.$;
require(['jquery-1.9.1.min', 'guiders-1.2.8', 'tinycon', 'snuownd', 'jquery.dragsort-0.6', 'jquery.tokeninput', 'jquery-fieldselection.min'], function() {
require(['jquery-1.9.1.min', 'guiders-1.2.8', 'tinycon', 'emsnudown', 'jquery.dragsort-0.6', 'jquery.tokeninput', 'jquery-fieldselection.min'], function() {
$ = window.$;
jQuery = window.jQuery;
guiders = window.guiders;
Tinycon = window.Tinycon;
SnuOwnd = window.SnuOwnd;
emsnudown = window.emsnudown;
// now, return the window.$ / window.jQuery back to its original state.
window.$ = redditJq;
window.jQuery = redditJq;
Expand Down
Loading