Add syntax highlighting for markdown content
This commit is contained in:
parent
dd2e1ea29e
commit
0cffa00004
6 changed files with 47 additions and 4 deletions
3
Gemfile
3
Gemfile
|
|
@ -93,13 +93,14 @@ gem "js-routes", "1.0.0"
|
||||||
source "https://rails-assets.org" do
|
source "https://rails-assets.org" do
|
||||||
gem "rails-assets-jquery", "1.11.2" # Should be kept in sync with jquery-rails
|
gem "rails-assets-jquery", "1.11.2" # Should be kept in sync with jquery-rails
|
||||||
|
|
||||||
gem "rails-assets-markdown-it", "4.2.0"
|
gem "rails-assets-markdown-it", "4.2.1"
|
||||||
gem "rails-assets-markdown-it-hashtag", "0.3.0"
|
gem "rails-assets-markdown-it-hashtag", "0.3.0"
|
||||||
gem "rails-assets-markdown-it-diaspora-mention", "0.3.0"
|
gem "rails-assets-markdown-it-diaspora-mention", "0.3.0"
|
||||||
gem "rails-assets-markdown-it-sanitizer", "0.3.0"
|
gem "rails-assets-markdown-it-sanitizer", "0.3.0"
|
||||||
gem "rails-assets-markdown-it--markdown-it-for-inline", "0.1.0"
|
gem "rails-assets-markdown-it--markdown-it-for-inline", "0.1.0"
|
||||||
gem "rails-assets-markdown-it-sub", "1.0.0"
|
gem "rails-assets-markdown-it-sub", "1.0.0"
|
||||||
gem "rails-assets-markdown-it-sup", "1.0.0"
|
gem "rails-assets-markdown-it-sup", "1.0.0"
|
||||||
|
gem "rails-assets-highlightjs", "8.5.0"
|
||||||
|
|
||||||
# jQuery plugins
|
# jQuery plugins
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -489,6 +489,7 @@ GEM
|
||||||
rails-assets-jquery-fullscreen (~> 1.1.4)
|
rails-assets-jquery-fullscreen (~> 1.1.4)
|
||||||
rails-assets-jquery-ui (~> 1.10.4)
|
rails-assets-jquery-ui (~> 1.10.4)
|
||||||
rails-assets-jquery.slimscroll (~> 1.3.3)
|
rails-assets-jquery.slimscroll (~> 1.3.3)
|
||||||
|
rails-assets-highlightjs (8.5.0)
|
||||||
rails-assets-jakobmattsson--jquery-elastic (1.6.11)
|
rails-assets-jakobmattsson--jquery-elastic (1.6.11)
|
||||||
rails-assets-jquery (>= 1.2.6)
|
rails-assets-jquery (>= 1.2.6)
|
||||||
rails-assets-jasmine (2.3.0)
|
rails-assets-jasmine (2.3.0)
|
||||||
|
|
@ -513,7 +514,7 @@ GEM
|
||||||
rails-assets-jquery.slimscroll (1.3.3)
|
rails-assets-jquery.slimscroll (1.3.3)
|
||||||
rails-assets-jquery (>= 1.7)
|
rails-assets-jquery (>= 1.7)
|
||||||
rails-assets-markdown-it--markdown-it-for-inline (0.1.0)
|
rails-assets-markdown-it--markdown-it-for-inline (0.1.0)
|
||||||
rails-assets-markdown-it (4.2.0)
|
rails-assets-markdown-it (4.2.1)
|
||||||
rails-assets-markdown-it-diaspora-mention (0.3.0)
|
rails-assets-markdown-it-diaspora-mention (0.3.0)
|
||||||
rails-assets-markdown-it-hashtag (0.3.0)
|
rails-assets-markdown-it-hashtag (0.3.0)
|
||||||
rails-assets-markdown-it-sanitizer (0.3.0)
|
rails-assets-markdown-it-sanitizer (0.3.0)
|
||||||
|
|
@ -774,6 +775,7 @@ DEPENDENCIES
|
||||||
rack-ssl (= 1.4.1)
|
rack-ssl (= 1.4.1)
|
||||||
rails (= 4.2.1)
|
rails (= 4.2.1)
|
||||||
rails-assets-diaspora_jsxc (~> 0.1.1)!
|
rails-assets-diaspora_jsxc (~> 0.1.1)!
|
||||||
|
rails-assets-highlightjs (= 8.5.0)!
|
||||||
rails-assets-jakobmattsson--jquery-elastic (= 1.6.11)!
|
rails-assets-jakobmattsson--jquery-elastic (= 1.6.11)!
|
||||||
rails-assets-jasmine-ajax (= 3.1.0)!
|
rails-assets-jasmine-ajax (= 3.1.0)!
|
||||||
rails-assets-jeresig--jquery.hotkeys (= 0.2.0)!
|
rails-assets-jeresig--jquery.hotkeys (= 0.2.0)!
|
||||||
|
|
@ -783,7 +785,7 @@ DEPENDENCIES
|
||||||
rails-assets-jquery-simulate (= 1.0.1)!
|
rails-assets-jquery-simulate (= 1.0.1)!
|
||||||
rails-assets-jquery-simulate-ext (= 1.3.0)!
|
rails-assets-jquery-simulate-ext (= 1.3.0)!
|
||||||
rails-assets-jquery-textchange (= 0.2.3)!
|
rails-assets-jquery-textchange (= 0.2.3)!
|
||||||
rails-assets-markdown-it (= 4.2.0)!
|
rails-assets-markdown-it (= 4.2.1)!
|
||||||
rails-assets-markdown-it--markdown-it-for-inline (= 0.1.0)!
|
rails-assets-markdown-it--markdown-it-for-inline (= 0.1.0)!
|
||||||
rails-assets-markdown-it-diaspora-mention (= 0.3.0)!
|
rails-assets-markdown-it-diaspora-mention (= 0.3.0)!
|
||||||
rails-assets-markdown-it-hashtag (= 0.3.0)!
|
rails-assets-markdown-it-hashtag (= 0.3.0)!
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,8 @@
|
||||||
breaks: true,
|
breaks: true,
|
||||||
html: true,
|
html: true,
|
||||||
linkify: true,
|
linkify: true,
|
||||||
typographer: true
|
typographer: true,
|
||||||
|
langPrefix: ""
|
||||||
});
|
});
|
||||||
|
|
||||||
var inlinePlugin = window.markdownitForInline;
|
var inlinePlugin = window.markdownitForInline;
|
||||||
|
|
@ -50,6 +51,23 @@
|
||||||
var sanitizerPlugin = window.markdownitSanitizer;
|
var sanitizerPlugin = window.markdownitSanitizer;
|
||||||
md.use(sanitizerPlugin);
|
md.use(sanitizerPlugin);
|
||||||
|
|
||||||
|
var hljs = window.hljs;
|
||||||
|
md.set({
|
||||||
|
highlight: function(str, lang) {
|
||||||
|
if (lang && hljs.getLanguage(lang)) {
|
||||||
|
try {
|
||||||
|
return hljs.highlight(lang, str).value;
|
||||||
|
} catch (__) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return hljs.highlightAuto(str).value;
|
||||||
|
} catch (__) {}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// xmpp: should behave like mailto:
|
// xmpp: should behave like mailto:
|
||||||
md.linkify.add("xmpp:","mailto:");
|
md.linkify.add("xmpp:","mailto:");
|
||||||
// mumble:// should behave like http://:
|
// mumble:// should behave like http://:
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@
|
||||||
//= require markdown-it-sanitizer
|
//= require markdown-it-sanitizer
|
||||||
//= require markdown-it-sub
|
//= require markdown-it-sub
|
||||||
//= require markdown-it-sup
|
//= require markdown-it-sup
|
||||||
|
//= require highlightjs
|
||||||
//= require clear-form
|
//= require clear-form
|
||||||
//= require app/app
|
//= require app/app
|
||||||
//= require diaspora
|
//= require diaspora
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,7 @@
|
||||||
|
|
||||||
/* code */
|
/* code */
|
||||||
@import 'new_styles/code';
|
@import 'new_styles/code';
|
||||||
|
@import 'highlightjs/github';
|
||||||
|
|
||||||
/* statistics */
|
/* statistics */
|
||||||
@import 'new_styles/statistics';
|
@import 'new_styles/statistics';
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,26 @@ describe("app.helpers.textFormatter", function(){
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
context("highlight", function(){
|
||||||
|
it("works with javascript code", function(){
|
||||||
|
var code = "```js\nfunction test() { return; } //test\n```";
|
||||||
|
expect(this.formatter(code)).toContain("<span class=\"hljs-function\">");
|
||||||
|
expect(this.formatter(code)).toContain("<span class=\"hljs-comment\">");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("works with markdown", function(){
|
||||||
|
var code = "```markdown\n# header\n**strong**\n```";
|
||||||
|
expect(this.formatter(code)).toContain("<span class=\"hljs-header\">");
|
||||||
|
expect(this.formatter(code)).toContain("<span class=\"hljs-strong\">");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("works with ruby code", function(){
|
||||||
|
var code = "```ruby\n# comment\nmodule test\nend\n```";
|
||||||
|
expect(this.formatter(code)).toContain("<span class=\"hljs-comment\">");
|
||||||
|
expect(this.formatter(code)).toContain("<span class=\"hljs-class\">");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
context("markdown", function(){
|
context("markdown", function(){
|
||||||
it("autolinks", function(){
|
it("autolinks", function(){
|
||||||
var links = [
|
var links = [
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue