Commit 78b2fb5de9d96390110f469d057a2081be34a69b

Authored by Dmitriy Zaporozhets
1 parent ffee5bb0

Add highlight.js support to markdown, snippets etc

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
app/assets/stylesheets/application.scss
... ... @@ -39,6 +39,7 @@
39 39 @import "generic/lists.scss";
40 40 @import "generic/forms.scss";
41 41 @import "generic/selects.scss";
  42 +@import "generic/highlight.scss";
42 43  
43 44 /**
44 45 * Page specific styles (issues, projects etc):
... ...
app/assets/stylesheets/generic/files.scss
... ... @@ -143,68 +143,6 @@
143 143 */
144 144 &.code {
145 145 padding: 0;
146   -
147   - .highlighted-data {
148   - border: none;
149   - box-shadow: none;
150   - margin: 0px;
151   - padding: 0px;
152   - table-layout: fixed;
153   -
154   - pre {
155   - border: none;
156   - border-radius: 0;
157   - font-family: $monospace_font;
158   - font-size: 12px !important;
159   - line-height: 16px !important;
160   - margin: 0;
161   -
162   - code {
163   - white-space: pre;
164   - word-wrap: normal;
165   - }
166   - }
167   -
168   - .hljs {
169   - padding: 0;
170   - }
171   -
172   - .line-numbers {
173   - padding: 10px;
174   - text-align: right;
175   - float: left;
176   - width: 60px;
177   -
178   - a {
179   - font-family: $monospace_font;
180   - display: block;
181   - font-size: 12px !important;
182   - line-height: 16px !important;
183   -
184   - i {
185   - display: none;
186   - }
187   -
188   - &:hover i {
189   - display: inline;
190   - }
191   - }
192   - }
193   -
194   - .highlight {
195   - overflow: auto;
196   - overflow-y: hidden;
197   -
198   - pre {
199   - white-space: pre;
200   - word-wrap: normal;
201   -
202   - .line {
203   - padding: 0 10px;
204   - }
205   - }
206   - }
207   - }
208 146 }
209 147 }
210 148 }
... ...
app/assets/stylesheets/generic/highlight.scss 0 → 100644
... ... @@ -0,0 +1,61 @@
  1 +.highlighted-data {
  2 + border: none;
  3 + box-shadow: none;
  4 + margin: 0px;
  5 + padding: 0px;
  6 + table-layout: fixed;
  7 +
  8 + pre {
  9 + border: none;
  10 + border-radius: 0;
  11 + font-family: $monospace_font;
  12 + font-size: 12px !important;
  13 + line-height: 16px !important;
  14 + margin: 0;
  15 +
  16 + code {
  17 + white-space: pre;
  18 + word-wrap: normal;
  19 + }
  20 + }
  21 +
  22 + .hljs {
  23 + padding: 0;
  24 + }
  25 +
  26 + .line-numbers {
  27 + padding: 10px;
  28 + text-align: right;
  29 + float: left;
  30 + width: 60px;
  31 +
  32 + a {
  33 + font-family: $monospace_font;
  34 + display: block;
  35 + font-size: 12px !important;
  36 + line-height: 16px !important;
  37 +
  38 + i {
  39 + display: none;
  40 + }
  41 +
  42 + &:hover i {
  43 + display: inline;
  44 + }
  45 + }
  46 + }
  47 +
  48 + .highlight {
  49 + overflow: auto;
  50 + overflow-y: hidden;
  51 +
  52 + pre {
  53 + white-space: pre;
  54 + word-wrap: normal;
  55 +
  56 + .line {
  57 + padding: 0 10px;
  58 + }
  59 + }
  60 + }
  61 +}
... ...
app/helpers/application_helper.rb
... ... @@ -203,8 +203,14 @@ module ApplicationHelper
203 203 def highlight_js(&block)
204 204 string = capture(&block)
205 205  
206   - content_tag :div, class: user_color_scheme_class do
207   - Pygments::Lexer[:js].highlight(string).html_safe
  206 + content_tag :div, class: "highlighted-data #{user_color_scheme_class}" do
  207 + content_tag :div, class: 'highlight' do
  208 + content_tag :pre do
  209 + content_tag :code do
  210 + string.html_safe
  211 + end
  212 + end
  213 + end
208 214 end
209 215 end
210 216  
... ...
app/views/projects/blob/_text.html.haml
... ... @@ -8,16 +8,6 @@
8 8 - else
9 9 .file-content.code
10 10 - unless blob.empty?
11   - %div.highlighted-data{class: user_color_scheme_class}
12   - .line-numbers
13   - - blob.data.lines.size.times do |index|
14   - - i = index + 1
15   - = link_to "#L#{i}", id: "L#{i}", rel: "#L#{i}" do
16   - %i.icon-link
17   - = i
18   - .highlight
19   - %pre
20   - %code
21   - = raw blob.data
  11 + = render 'shared/file_hljs', blob: blob
22 12 - else
23 13 %p.nothing_here_message Empty file
... ...
app/views/projects/snippets/_blob.html.haml
... ... @@ -9,7 +9,6 @@
9 9 = link_to "raw", raw_project_snippet_path(@project, @snippet), class: "btn btn-tiny", target: "_blank"
10 10 .file-content.code
11 11 - unless @snippet.content.empty?
12   - %div{class: user_color_scheme_class}
13   - = raw @snippet.colorize(formatter: :gitlab)
  12 + = render 'shared/file_hljs', blob: @snippet
14 13 - else
15 14 %p.nothing_here_message Empty file
... ...
app/views/shared/_file_hljs.html.haml 0 → 100644
... ... @@ -0,0 +1,11 @@
  1 +%div.highlighted-data{class: user_color_scheme_class}
  2 + .line-numbers
  3 + - blob.data.lines.size.times do |index|
  4 + - i = index + 1
  5 + = link_to "#L#{i}", id: "L#{i}", rel: "#L#{i}" do
  6 + %i.icon-link
  7 + = i
  8 + .highlight
  9 + %pre
  10 + %code
  11 + = raw blob.data
... ...
app/views/snippets/_blob.html.haml
... ... @@ -18,8 +18,7 @@
18 18 = render_markup(@snippet.file_name, @snippet.data)
19 19 - else
20 20 .file-content.code
21   - %div{class: user_color_scheme_class}
22   - = raw @snippet.colorize(formatter: :gitlab)
  21 + = render 'shared/file_hljs', blob: @snippet
23 22 - else
24 23 .file-content.code
25 24 %p.nothing_here_message Empty file
... ...
doc/raketasks/user_management.md
1 1 ### Add user as a developer to all projects
2 2  
3   -```
  3 +```bash
4 4 bundle exec rake gitlab:import:user_to_projects[username@domain.tld]
5 5 ```
6 6  
... ... @@ -11,6 +11,6 @@ Notes:
11 11  
12 12 * admin users are added as masters
13 13  
14   -```
  14 +```bash
15 15 bundle exec rake gitlab:import:all_users_to_all_projects
16 16 ```
... ...
lib/redcarpet/render/gitlab_html.rb
... ... @@ -12,10 +12,6 @@ class Redcarpet::Render::GitlabHTML &lt; Redcarpet::Render::HTML
12 12 end
13 13  
14 14 def block_code(code, language)
15   - options = { options: {encoding: 'utf-8'} }
16   - lexer = Pygments::Lexer.find(language) # language can be an alias
17   - options.merge!(lexer: lexer.aliases[0].downcase) if lexer # downcase is required
18   -
19 15 # New lines are placed to fix an rendering issue
20 16 # with code wrapped inside <h1> tag for next case:
21 17 #
... ... @@ -25,7 +21,13 @@ class Redcarpet::Render::GitlabHTML &lt; Redcarpet::Render::HTML
25 21 #
26 22 <<-HTML
27 23  
28   - <div class="#{h.user_color_scheme_class}">#{Pygments.highlight(code, options)}</div>
  24 +<div class="highlighted-data #{h.user_color_scheme_class}">
  25 + <div class="highlight">
  26 + <pre>
  27 + <code class="#{language}">#{code}</code>
  28 + </pre>
  29 + </div>
  30 +</div>
29 31  
30 32 HTML
31 33 end
... ...