diff --git a/Gemfile b/Gemfile
index 452797cb9..8ac2f0b00 100644
--- a/Gemfile
+++ b/Gemfile
@@ -4,9 +4,8 @@ gem "redcarpet"
gem "activesupport"
gem "highline"
gem "rake"
-gem "coderay"
+gem "coderay", :git => "git://github.com/dgeb/coderay.git", :branch => "handlebars"
gem "middleman", '~> 3.0'
-gem "byebug"
gem "thin"
gem "rack"
gem "listen"
diff --git a/Gemfile.lock b/Gemfile.lock
index 405249871..151040176 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -7,6 +7,13 @@ GIT
nokogiri
swiftype (>= 0.0.4)
+GIT
+ remote: git://github.com/dgeb/coderay.git
+ revision: 1362fd4af63331aed51ce9907ad7295cea228874
+ branch: handlebars
+ specs:
+ coderay (1.1.0.rc1)
+
GEM
remote: https://rubygems.org/
remote: https://rails-assets.org/
@@ -18,9 +25,6 @@ GEM
thread_safe (~> 0.1)
tzinfo (~> 1.1)
builder (3.2.2)
- byebug (4.0.1)
- columnize (= 0.9.0)
- rb-readline (= 0.5.2)
capybara (2.4.4)
mime-types (>= 1.16)
nokogiri (>= 1.3.3)
@@ -31,12 +35,10 @@ GEM
timers (~> 4.0.0)
chunky_png (1.3.3)
cliver (0.3.2)
- coderay (1.1.0)
coffee-script (2.3.0)
coffee-script-source
execjs
coffee-script-source (1.9.0)
- columnize (0.9.0)
compass (1.0.3)
chunky_png (~> 1.2)
compass-core (~> 1.0.2)
@@ -140,7 +142,6 @@ GEM
rb-fsevent (0.9.4)
rb-inotify (0.9.5)
ffi (>= 0.5.0)
- rb-readline (0.5.2)
redcarpet (3.2.2)
rspec (3.2.0)
rspec-core (~> 3.2.0)
@@ -201,9 +202,8 @@ PLATFORMS
DEPENDENCIES
activesupport
builder
- byebug
capybara
- coderay
+ coderay!
hashie
highline
listen
diff --git a/lib/highlighter.rb b/lib/highlighter.rb
index a52ac69bb..e7f10e7e7 100644
--- a/lib/highlighter.rb
+++ b/lib/highlighter.rb
@@ -1,13 +1,5 @@
require "redcarpet"
-require "byebug"
require "coderay"
-require "nokogiri"
-
-class EmberEncoder < CodeRay::Encoders::Div
- FILE_EXTENSION = 'ember.html'
- register_for :ember
-
-end
module Highlighter
class MissingLanguageError < StandardError; end
@@ -25,75 +17,47 @@ def _highlight(string, language, class_name=nil)
raise MissingLanguageError, error_message if language.nil?
- language, file_name, changes = _detect_language_filename_and_changes(language)
+ language, file_name = _detect_language_and_filename(language)
result = %Q{
}
result += '
'
result += '
'
- result += _code_table(string, language, file_name, changes)
+ result += _code_table(string, language, file_name)
result += '
'
result += %Q{
}
result
end
- def _detect_language_filename_and_changes(language)
+ def _detect_language_and_filename(language)
+
file_name = nil
- changes = []
- changes_regex = /\{(.+)\}$/
bare_language_regex = /\A\w+\z/
- if change_numbers = changes_regex.match(language)
- language = language.sub(changes_regex, '')
-
- changes = _parse_changes(change_numbers[1])
- end
-
unless language =~ bare_language_regex
file_name = language
- language = _determine_language(language)
- end
- [language, file_name, changes]
- end
-
- def _determine_language(language)
- case /\.(\w+)$/.match(language)[1]
- when 'hbs'
- 'handlebars'
- when 'js'
- 'javascript'
- when 'html'
- 'html'
- when 'css'
- 'css'
- when 'json'
- 'json'
- end
- end
-
- def _parse_changes(change_numbers)
- changes = change_numbers.split(',').map do |change|
- state = case change.slice(0)
- when '+'
- 'added'
- when '-'
- 'removed'
- else
- nil
- end
-
- [change.to_i.abs, state]
+ language = case /\.(\w+)$/.match(language)[1]
+ when 'hbs'
+ 'handlebars'
+ when 'js'
+ 'javascript'
+ when 'html'
+ 'html'
+ when 'css'
+ 'css'
+ when 'json'
+ 'json'
+ end
end
+ [language, file_name]
end
- def _code_table(string, language, file_name, changes)
+ def _code_table(string, language, file_name)
code = CodeRay.scan(string, language)
- # debugger
- table = code.ember css: :class,
+ table = code.div css: :class,
line_numbers: :table,
- line_number_anchors: false,
- highlight_lines: [1,3]
+ line_number_anchors: false
if file_name.present?
@@ -107,30 +71,7 @@ def _code_table(string, language, file_name, changes)
HEADER
end
- _highlight_lines(table, changes)
- end
-
- def _highlight_lines(table, highlights)
- return table if highlights.empty?
-
- table_xml = Nokogiri.XML(table)
-
- numbers_node = table_xml.at_xpath('//td[@class="line-numbers"]/pre')
- code_node = table_xml.at_xpath('//td[@class="code"]/pre')
-
- numbers_contents = numbers_node.inner_html.split("\n")
- code_contents = code_node.inner_html.split("\n")
-
- highlights.each do |line_number, state|
- index = line_number - 1
- numbers_contents[index] = "#{numbers_contents[index]}"
- code_contents[index] = "#{code_contents[index]}"
- end
-
- numbers_node.inner_html = numbers_contents.join("\n")
- code_node.inner_html = code_contents.join("\n")
-
- table_xml.to_xml
+ table
end
def highlight(language, class_name, &block)
diff --git a/source/stylesheets/highlight.css.scss b/source/stylesheets/highlight.css.scss
index 1a1d24ff8..902e0cb3e 100644
--- a/source/stylesheets/highlight.css.scss
+++ b/source/stylesheets/highlight.css.scss
@@ -4,19 +4,12 @@
$border-radius: 5px;
$blue: #1f58ce;
-$gray: #545454;
-$textColor: #222;
-$green: #005f00;
-$orange: #8f4a2c;
-
-$highlight-yellow: #f8eec7;
-$highlight-green: #E8F4E5;
-$highlight-red: #ffecec;
+$gray: #777777;
+$green: #007700;
body.guides .highlight {
@include border-radius($border-radius);
border: 1px solid #d1d1d1;
- color: $textColor;
}
#content .highlight {
@@ -53,45 +46,6 @@ body.guides .highlight {
&.handlebars .ribbon {
@include hidpi('handlebars-ribbon', png);
}
-
- .highlight-line {
- display: inline-block;
- margin: 0 -10px;
- background-color: $highlight-yellow;
- border-right: $highlight-yellow solid 5px;
- border-left: $highlight-yellow solid 5px;
- box-sizing: content-box;
-
- &.added {
- border-color: $highlight-green;
- background-color: $highlight-green;
- }
-
- &.removed {
- border-color: $highlight-red;
- background-color: $highlight-red;
- }
- }
-
- .code .highlight-line {
- width: 613px;
- margin: 0 -13px;
- border-left-width: 13px;
- border-right-width: 13px;
- }
-
- .line-numbers .highlight-line {
- width: 28px;
- border-right-color: darken($highlight-yellow, 20%);
-
- &.added {
- border-right-color: darken($highlight-green, 20%);
- }
-
- &.removed {
- border-right-color: darken($highlight-red, 20%);
- }
- }
}
.CodeRay {
@@ -101,7 +55,7 @@ body.guides .highlight {
text-align: center;
border-right: 1px solid #d1d1d1;
background-color: #f6f6f6;
- color: $gray;
+ color: #b4b4b4;
@include border-top-left-radius($border-radius);
@include border-bottom-left-radius($border-radius);
}
@@ -117,7 +71,7 @@ body.guides .highlight {
}
.comment {
- color: $green;
+ color: $gray;
}
.attribute-name {
@@ -133,7 +87,7 @@ body.guides .highlight {
}
.keyword {
- color: $orange;
+ color: #ce791f;
}
.key, .function {
diff --git a/spec/highlighter_spec.rb b/spec/highlighter_spec.rb
index 007252294..ca4d6b8ca 100644
--- a/spec/highlighter_spec.rb
+++ b/spec/highlighter_spec.rb
@@ -12,65 +12,37 @@ class HelperTester
Object.send :remove_const, :HelperTester
end
- describe '#_detect_language_filename_and_changes' do
+ describe '#_detect_language_and_filename' do
it 'returns bare languages and does not return a filename' do
- language, filename, changes = HelperTester.new._detect_language_filename_and_changes('javascript')
+ language, filename = HelperTester.new._detect_language_and_filename('javascript')
expect(language).to eq 'javascript'
expect(filename).to be_nil
- expect(changes).to eq []
- language, filename, changes = HelperTester.new._detect_language_filename_and_changes('handlebars')
+ language, filename = HelperTester.new._detect_language_and_filename('handlebars')
expect(language).to eq 'handlebars'
expect(filename).to be_nil
- expect(changes).to eq []
end
it 'returns the detected language and the filename from a filename' do
- language, filename, changes = HelperTester.new._detect_language_filename_and_changes('app/components/my-component.js')
+ language, filename = HelperTester.new._detect_language_and_filename('app/components/my-component.js')
expect(language).to eq 'javascript'
expect(filename).to eq 'app/components/my-component.js'
- expect(changes).to eq []
- language, filename, changes = HelperTester.new._detect_language_filename_and_changes('app/templates/application.hbs')
+ language, filename = HelperTester.new._detect_language_and_filename('app/templates/application.hbs')
expect(language).to eq 'handlebars'
expect(filename).to eq 'app/templates/application.hbs'
- expect(changes).to eq []
- language, filename, changes = HelperTester.new._detect_language_filename_and_changes('app/index.html')
+ language, filename = HelperTester.new._detect_language_and_filename('app/index.html')
expect(language).to eq 'html'
expect(filename).to eq 'app/index.html'
- expect(changes).to eq []
- language, filename, changes = HelperTester.new._detect_language_filename_and_changes('app/styles/app.css')
+ language, filename = HelperTester.new._detect_language_and_filename('app/styles/app.css')
expect(language).to eq 'css'
expect(filename).to eq 'app/styles/app.css'
- expect(changes).to eq []
- language, filename, changes = HelperTester.new._detect_language_filename_and_changes('bower.json')
+ language, filename = HelperTester.new._detect_language_and_filename('bower.json')
expect(language).to eq 'json'
expect(filename).to eq 'bower.json'
- expect(changes).to eq []
- end
-
- it 'returns detected code changes' do
- _, _, changes = HelperTester.new._detect_language_filename_and_changes('app/components/my-component.js{1,+3,4,-5,+6,-7}')
-
- expect(changes).to eq [
- [1, nil],
- [3, 'added'],
- [4, nil],
- [5, 'removed'],
- [6, 'added'],
- [7, 'removed'],
- ]
-
- _, _, changes = HelperTester.new._detect_language_filename_and_changes('javascript{+2,3,-5}')
-
- expect(changes).to eq [
- [2, 'added'],
- [3, nil],
- [5, 'removed']
- ]
end
end
@@ -110,48 +82,6 @@ class HelperTester
export default Ember.Component.extend() |
-OUTPUT
- end
-
- it 'returns a code block with a filename in the table when using a filename fence with highlighting' do
- code_block = HelperTester.new._highlight("export default Ember.Component.extend()\nvar added;\nvar removed;",
- 'app/components/my-foo.js{1,+2,-3}')
- expect(code_block).to eq <<-OUTPUT.sub(/\n$/, '')
-
-OUTPUT
- end
-
- it 'returns a code block with a filename in the table when using a filename fence with highlighting' do
- code_block = HelperTester.new._highlight("export default Ember.Component.extend()\nvar added;\nvar removed;",
- 'javascript{1,+2,-3}')
- expect(code_block).to eq <<-OUTPUT.sub(/\n$/, '')
-
OUTPUT
end
end