cabbage_doc 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/lib/cabbage_doc/authentication.rb +18 -0
  3. data/lib/cabbage_doc/cache.rb +23 -0
  4. data/lib/cabbage_doc/client.rb +1 -6
  5. data/lib/cabbage_doc/configuration.rb +7 -4
  6. data/lib/cabbage_doc/path.rb +1 -1
  7. data/lib/cabbage_doc/processor.rb +33 -0
  8. data/lib/cabbage_doc/processors/documentation.rb +3 -1
  9. data/lib/cabbage_doc/request.rb +39 -1
  10. data/lib/cabbage_doc/response.rb +12 -0
  11. data/lib/cabbage_doc/task.rb +8 -20
  12. data/lib/cabbage_doc/version.rb +1 -1
  13. data/lib/cabbage_doc/web.rb +9 -3
  14. data/lib/cabbage_doc/web_helper.rb +36 -1
  15. data/lib/cabbage_doc/worker.rb +28 -0
  16. data/lib/cabbage_doc.rb +2 -1
  17. data/web/public/css/application.css +10 -0
  18. data/web/public/css/highlight/agate.css +108 -0
  19. data/web/public/css/highlight/androidstudio.css +66 -0
  20. data/web/public/css/highlight/arduino-light.css +88 -0
  21. data/web/public/css/highlight/arta.css +73 -0
  22. data/web/public/css/highlight/ascetic.css +45 -0
  23. data/web/public/css/highlight/atelier-cave-dark.css +83 -0
  24. data/web/public/css/highlight/atelier-cave-light.css +85 -0
  25. data/web/public/css/highlight/atelier-dune-dark.css +69 -0
  26. data/web/public/css/highlight/atelier-dune-light.css +69 -0
  27. data/web/public/css/highlight/atelier-estuary-dark.css +84 -0
  28. data/web/public/css/highlight/atelier-estuary-light.css +84 -0
  29. data/web/public/css/highlight/atelier-forest-dark.css +69 -0
  30. data/web/public/css/highlight/atelier-forest-light.css +69 -0
  31. data/web/public/css/highlight/atelier-heath-dark.css +69 -0
  32. data/web/public/css/highlight/atelier-heath-light.css +69 -0
  33. data/web/public/css/highlight/atelier-lakeside-dark.css +69 -0
  34. data/web/public/css/highlight/atelier-lakeside-light.css +69 -0
  35. data/web/public/css/highlight/atelier-plateau-dark.css +84 -0
  36. data/web/public/css/highlight/atelier-plateau-light.css +84 -0
  37. data/web/public/css/highlight/atelier-savanna-dark.css +84 -0
  38. data/web/public/css/highlight/atelier-savanna-light.css +84 -0
  39. data/web/public/css/highlight/atelier-seaside-dark.css +69 -0
  40. data/web/public/css/highlight/atelier-seaside-light.css +69 -0
  41. data/web/public/css/highlight/atelier-sulphurpool-dark.css +69 -0
  42. data/web/public/css/highlight/atelier-sulphurpool-light.css +69 -0
  43. data/web/public/css/highlight/brown-paper.css +64 -0
  44. data/web/public/css/highlight/codepen-embed.css +60 -0
  45. data/web/public/css/highlight/color-brewer.css +71 -0
  46. data/web/public/css/highlight/dark.css +63 -0
  47. data/web/public/css/highlight/darkula.css +74 -0
  48. data/web/public/css/highlight/default.css +99 -0
  49. data/web/public/css/highlight/docco.css +97 -0
  50. data/web/public/css/highlight/dracula.css +76 -0
  51. data/web/public/css/highlight/far.css +71 -0
  52. data/web/public/css/highlight/foundation.css +88 -0
  53. data/web/public/css/highlight/github-gist.css +71 -0
  54. data/web/public/css/highlight/github.css +99 -0
  55. data/web/public/css/highlight/googlecode.css +89 -0
  56. data/web/public/css/highlight/grayscale.css +101 -0
  57. data/web/public/css/highlight/gruvbox-dark.css +108 -0
  58. data/web/public/css/highlight/gruvbox-light.css +108 -0
  59. data/web/public/css/highlight/hopscotch.css +83 -0
  60. data/web/public/css/highlight/hybrid.css +102 -0
  61. data/web/public/css/highlight/idea.css +97 -0
  62. data/web/public/css/highlight/ir-black.css +73 -0
  63. data/web/public/css/highlight/kimbie.dark.css +74 -0
  64. data/web/public/css/highlight/kimbie.light.css +74 -0
  65. data/web/public/css/highlight/magula.css +70 -0
  66. data/web/public/css/highlight/mono-blue.css +59 -0
  67. data/web/public/css/highlight/monokai-sublime.css +83 -0
  68. data/web/public/css/highlight/monokai.css +70 -0
  69. data/web/public/css/highlight/obsidian.css +88 -0
  70. data/web/public/css/highlight/ocean.css +74 -0
  71. data/web/public/css/highlight/paraiso-dark.css +72 -0
  72. data/web/public/css/highlight/paraiso-light.css +72 -0
  73. data/web/public/css/highlight/pojoaque.css +83 -0
  74. data/web/public/css/highlight/purebasic.css +96 -0
  75. data/web/public/css/highlight/qtcreator_dark.css +83 -0
  76. data/web/public/css/highlight/qtcreator_light.css +83 -0
  77. data/web/public/css/highlight/railscasts.css +106 -0
  78. data/web/public/css/highlight/rainbow.css +85 -0
  79. data/web/public/css/highlight/school-book.css +72 -0
  80. data/web/public/css/highlight/solarized-dark.css +84 -0
  81. data/web/public/css/highlight/solarized-light.css +84 -0
  82. data/web/public/css/highlight/sunburst.css +102 -0
  83. data/web/public/css/highlight/tomorrow-night-blue.css +75 -0
  84. data/web/public/css/highlight/tomorrow-night-bright.css +74 -0
  85. data/web/public/css/highlight/tomorrow-night-eighties.css +74 -0
  86. data/web/public/css/highlight/tomorrow-night.css +75 -0
  87. data/web/public/css/highlight/tomorrow.css +72 -0
  88. data/web/public/css/highlight/vs.css +68 -0
  89. data/web/public/css/highlight/xcode.css +93 -0
  90. data/web/public/css/highlight/xt256.css +92 -0
  91. data/web/public/css/highlight/zenburn.css +80 -0
  92. data/web/public/js/application.js +79 -12
  93. data/web/public/js/highlight.min.js +3 -0
  94. data/web/views/layout.haml +6 -3
  95. data/web/views/response.haml +10 -5
  96. metadata +81 -7
  97. data/lib/cabbage_doc/pacto_helper.rb +0 -27
  98. data/lib/cabbage_doc/processors/contracts.rb +0 -12
  99. data/lib/cabbage_doc/processors/rspec.rb +0 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2a930fb03ad28bf25bc142204263b37ca8ec6ca4
4
- data.tar.gz: 663236ed05c311345ab852f0dfa1de68a184f083
3
+ metadata.gz: 27a236fc7439566b6ea5056fcd4fb3ef08697d7e
4
+ data.tar.gz: f0cacbf8131c633330d0c5f08dc35bc77832a3bf
5
5
  SHA512:
6
- metadata.gz: a3ce12e5601660eb0e4259be5dfb2ddcffc3b4bc7abef83e049c0de036e9da40cdfcef3a7eea0a6a7eae013adac4f119d59ad91c2fb95d89b8f5174df2d96727
7
- data.tar.gz: bb24cb30b100840f4e6bc16b74ea61ec1ab894c02f22ba7a8c0b2a7aca0c078038f0dfa90f5df634646b5c2095acfc396edbf3998cf987b1fd419028ffc44b66
6
+ metadata.gz: 8d4a620a2020a673d25bd3706582e999183e2fb269795855154afb11873daa5263f2b235ee36584ea3dac7bc134f03342781bdb29690c4356f448ba08d70b816
7
+ data.tar.gz: 49a35368edc2326a9c7a47838063226eb698c0baf9e80ea8917aa0dc786141411dfcbe09829e9370d5a3cc9e05631474e23bf036ca2921a578a6e8fbc7baa1fe
@@ -36,6 +36,14 @@ module CabbageDoc
36
36
  @type = :basic
37
37
  end
38
38
 
39
+ def uri
40
+ if path && path != '/'
41
+ "#{root_uri}/#{path}"
42
+ else
43
+ root_uri
44
+ end
45
+ end
46
+
39
47
  def valid?
40
48
  case type
41
49
  when :basic
@@ -50,5 +58,15 @@ module CabbageDoc
50
58
  def configurable?
51
59
  @configurable.any?
52
60
  end
61
+
62
+ private
63
+
64
+ def root_uri
65
+ if subdomain
66
+ "#{scheme}://#{subdomain}.#{domain}"
67
+ else
68
+ "#{scheme}://#{domain}"
69
+ end
70
+ end
53
71
  end
54
72
  end
@@ -0,0 +1,23 @@
1
+ module CabbageDoc
2
+ class Cache
3
+ def initialize
4
+ clear
5
+ end
6
+
7
+ def write(key, value, options = {})
8
+ @_data[key] = value
9
+ end
10
+
11
+ def read(key)
12
+ @_data[key]
13
+ end
14
+
15
+ def delete(key)
16
+ @_data.delete(key)
17
+ end
18
+
19
+ def clear
20
+ @_data = {}
21
+ end
22
+ end
23
+ end
@@ -6,12 +6,7 @@ module CabbageDoc
6
6
  def new(auth)
7
7
  Class.new(self) do |klass|
8
8
  klass.headers "User-Agent" => auth.user_agent
9
-
10
- if auth.subdomain
11
- klass.base_uri "#{auth.scheme}://#{auth.subdomain}.#{auth.domain}/#{auth.path}"
12
- else
13
- klass.base_uri "#{auth.scheme}://#{auth.domain}/#{auth.path}"
14
- end
9
+ klass.base_uri auth.uri
15
10
 
16
11
  if auth.type == :basic
17
12
  klass.basic_auth auth.username, auth.password
@@ -3,17 +3,20 @@ module CabbageDoc
3
3
  include Singleton
4
4
 
5
5
  DEFAULTS = {
6
- version: 'v1',
7
6
  path: 'api/v1',
8
7
  title: 'Cabbage Doc',
9
8
  scheme: 'https',
10
- verbose: false
9
+ verbose: false,
10
+ dev: false,
11
+ cache: Cache.new,
12
+ request: proc { |request| request.perform },
13
+ theme: 'github'
11
14
  }.freeze
12
15
 
13
- OPTIONAL_ATTRIBUTES = %i(welcome path scheme version title verbose authentication).freeze
16
+ OPTIONAL_ATTRIBUTES = %i(welcome path scheme title verbose authentication dev request cache theme).freeze
14
17
  REQUIRED_ATTRIBUTES = %i(domain controllers root).freeze
15
18
  ATTRIBUTES = (OPTIONAL_ATTRIBUTES + REQUIRED_ATTRIBUTES).freeze
16
- CALLABLE_ATTRIBUTES = %i(controllers authentication).freeze
19
+ CALLABLE_ATTRIBUTES = %i(controllers authentication request).freeze
17
20
 
18
21
  attr_accessor *ATTRIBUTES
19
22
 
@@ -2,7 +2,7 @@ module CabbageDoc
2
2
  class Path
3
3
  class << self
4
4
  def join(*args)
5
- args.join('/').gsub(/\/+/, '/')
5
+ args.join('/').gsub(/\/+/, '/').gsub(/\/+$/, '')
6
6
  end
7
7
  end
8
8
  end
@@ -1,14 +1,39 @@
1
1
  module CabbageDoc
2
2
  class Processor
3
+ class Error < StandardError; end
4
+ class InvalidType < Error; end
5
+ class InvalidPriority < Error; end
6
+
7
+ PRIORITIES = [:high, :medium, :low].freeze
8
+
3
9
  class << self
4
10
  def inherited(klass)
5
11
  all[klass.to_s.split('::').last.downcase.to_sym] = klass
6
12
  end
7
13
 
14
+ def priority(value = nil)
15
+ if value.is_a?(Symbol)
16
+ raise InvalidPriority, value unless PRIORITIES.include?(value)
17
+ @_priority = value
18
+ else
19
+ @_priority
20
+ end
21
+ end
22
+
8
23
  def all
9
24
  @_all ||= {}
10
25
  end
11
26
 
27
+ def perform(type)
28
+ klass = all[type]
29
+
30
+ if klass
31
+ klass.new.perform
32
+ else
33
+ raise InvalidType, type
34
+ end
35
+ end
36
+
12
37
  def load!
13
38
  Dir.glob(File.join(File.dirname(__FILE__), 'processors', '*.rb')).sort.each do |processor|
14
39
  require(processor)
@@ -22,6 +47,10 @@ module CabbageDoc
22
47
 
23
48
  protected
24
49
 
50
+ def cache
51
+ @_cache ||= Cache.new
52
+ end
53
+
25
54
  def client
26
55
  @_client ||= Client.new(auth)
27
56
  end
@@ -35,6 +64,10 @@ module CabbageDoc
35
64
  collection.load!
36
65
  end
37
66
  end
67
+
68
+ def config
69
+ @_config ||= Configuration.instance
70
+ end
38
71
  end
39
72
 
40
73
  Processor.load!
@@ -1,10 +1,12 @@
1
1
  module CabbageDoc
2
2
  module Processors
3
3
  class Documentation < Processor
4
+ priority :high
5
+
4
6
  def perform
5
7
  collection.clear!
6
8
 
7
- Configuration.instance.controllers.call.each do |filename|
9
+ config.controllers.call.each do |filename|
8
10
  collection.parse!(filename)
9
11
  end
10
12
 
@@ -1,9 +1,24 @@
1
+ require 'yaml'
2
+ require 'digest/sha1'
3
+
1
4
  module CabbageDoc
2
5
  class Request
3
6
  METHODS = %i[get post put delete].freeze
4
7
 
5
8
  attr_reader :raw_request, :collection
6
9
 
10
+ class << self
11
+ def parse(s)
12
+ variables = YAML.load(s)
13
+
14
+ new(nil, Collection.instance).tap do |instance|
15
+ [:@_id, :@_auth, :@_action, :@_method, :@_params].each_with_index do |k, i|
16
+ instance.instance_variable_set(k, variables[i])
17
+ end
18
+ end
19
+ end
20
+ end
21
+
7
22
  def initialize(raw_request, collection)
8
23
  @raw_request = raw_request
9
24
  @collection = collection
@@ -17,8 +32,27 @@ module CabbageDoc
17
32
  action && method && METHODS.include?(method)
18
33
  end
19
34
 
35
+ def to_yaml
36
+ YAML.dump([
37
+ id,
38
+ auth,
39
+ action,
40
+ method,
41
+ params
42
+ ])
43
+ end
44
+
45
+ def id
46
+ @_id ||= new_id
47
+ end
48
+
20
49
  private
21
50
 
51
+ def new_id
52
+ components = [MARKER, Time.now.utc, Process.pid, Thread.current.object_id, rand(99999)]
53
+ Digest::SHA1.hexdigest(components.join('_'))
54
+ end
55
+
22
56
  def perform_request
23
57
  key = (method == :get) ? :query : :body
24
58
  client.send(method, action, key => params.to_hash)
@@ -56,13 +90,17 @@ module CabbageDoc
56
90
  end
57
91
 
58
92
  def params
59
- @_params ||= Params.new(raw_request.params, collection)
93
+ @_params ||= Params.new(raw_params, collection)
60
94
  end
61
95
 
62
96
  def auth
63
97
  @_auth ||= Authentication.new(raw_request)
64
98
  end
65
99
 
100
+ def raw_params
101
+ @_raw_params ||= raw_request.params
102
+ end
103
+
66
104
  def client
67
105
  @_client ||= Client.new(auth)
68
106
  end
@@ -1,7 +1,15 @@
1
+ require 'yaml'
2
+
1
3
  module CabbageDoc
2
4
  class Response
3
5
  attr_reader :url, :headers, :params, :code, :body
4
6
 
7
+ class << self
8
+ def parse(s)
9
+ YAML.load(s)
10
+ end
11
+ end
12
+
5
13
  def initialize(url, params, response)
6
14
  @url = url
7
15
  @params = params
@@ -10,6 +18,10 @@ module CabbageDoc
10
18
  @body = response.parsed_response
11
19
  end
12
20
 
21
+ def to_yaml
22
+ YAML.dump(self)
23
+ end
24
+
13
25
  def to_json
14
26
  {
15
27
  url: url,
@@ -9,6 +9,7 @@ module CabbageDoc
9
9
  new.tap do |instance|
10
10
  yield instance if block_given?
11
11
  instance.validate!
12
+ instance.sort!
12
13
  instance.define!
13
14
  end
14
15
  end
@@ -18,35 +19,22 @@ module CabbageDoc
18
19
  @name = :cabbagedoc
19
20
  end
20
21
 
21
- def contracts=(value)
22
- if value
23
- @processors.delete(:rspec) if @processors.include?(:rspec)
24
- @processors << :contracts
25
- @processors << :rspec
26
- else
27
- @processors.delete(:contracts)
28
- end
29
- end
30
-
31
- def rspec=(value)
32
- if value
33
- @processors << :contracts unless @processors.include?(:contracts)
34
- @processors << :rspec
35
- else
36
- @processors.delete(:rspec)
37
- end
22
+ def sort!
23
+ processors.sort! { |processor| Processor::PRIORITIES.index(Processor.all[processor].priority) }
38
24
  end
39
25
 
40
26
  def define!
41
27
  namespace name do
42
28
  processors.each do |processor|
43
29
  desc "Process #{processor}"
44
- task processor.to_s => :environment do
45
- Processor.all[processor].new.perform
30
+ namespace :process do
31
+ task processor.to_s => :environment do
32
+ Processor.all[processor].new.perform
33
+ end
46
34
  end
47
35
  end
48
36
 
49
- desc "Customize Web"
37
+ desc "Customize Web UI"
50
38
  task :customize => :environment do
51
39
  Customizer.new.perform
52
40
  end
@@ -1,3 +1,3 @@
1
1
  module CabbageDoc
2
- VERSION = "0.0.2".freeze
2
+ VERSION = "0.0.3".freeze
3
3
  end
@@ -25,12 +25,18 @@ module CabbageDoc
25
25
  haml :index
26
26
  end
27
27
 
28
+ get '/:id' do
29
+ response_by_id(params[:id])
30
+ end
31
+
28
32
  post '/' do
29
- response = Request.new(request, collection).perform
33
+ response = Configuration.instance.request.call(post_request)
30
34
 
31
- if response
32
- content_type :json
35
+ if response.is_a?(Response)
36
+ content_type :json
33
37
  response.to_json
38
+ elsif post_request.valid?
39
+ response_by_id(post_request.id)
34
40
  else
35
41
  halt 500
36
42
  end
@@ -1,17 +1,35 @@
1
1
  module CabbageDoc
2
2
  module WebHelper
3
+ def asset_path(path)
4
+ [request.path, path].join('/').gsub(/\/\/+/, '/')
5
+ end
6
+
7
+ def theme_path
8
+ asset_path("css/highlight/#{config.theme}.css")
9
+ end
10
+
3
11
  def config
4
12
  Configuration.instance
5
13
  end
6
14
 
7
15
  def collection
16
+ if config.dev
17
+ Processor.perform(:documentation)
18
+ @_collection = nil
19
+ end
20
+
8
21
  @_collection ||= Collection.instance.tap do |collection|
9
22
  collection.load!
10
23
  end
11
24
  end
12
25
 
13
26
  def markdown
14
- @_markdown ||= Redcarpet::Markdown.new(Redcarpet::Render::HTML.new)
27
+ @_markdown ||= Redcarpet::Markdown.new(
28
+ Redcarpet::Render::HTML.new,
29
+ tables: true,
30
+ fenced_code_blocks: true,
31
+ autolink: true
32
+ )
15
33
  end
16
34
 
17
35
  def title
@@ -21,5 +39,22 @@ module CabbageDoc
21
39
  def auth
22
40
  @_auth ||= Authentication.new(request)
23
41
  end
42
+
43
+ def post_request
44
+ @_post_request ||= Request.new(request, collection)
45
+ end
46
+
47
+ def response_by_id(id)
48
+ response = Worker.get(id)
49
+
50
+ if response.is_a?(Response)
51
+ content_type :json
52
+ response.to_json
53
+ else
54
+ status 503
55
+ content_type :json
56
+ { id: id }.to_json
57
+ end
58
+ end
24
59
  end
25
60
  end
@@ -0,0 +1,28 @@
1
+ module CabbageDoc
2
+ module Worker
3
+ EXPIRES_IN = 30.freeze # 30 seconds
4
+
5
+ class << self
6
+ def get(id)
7
+ response = CabbageDoc::Configuration.instance.cache.read([CabbageDoc::MARKER, id].join('_'))
8
+ Response.parse(response) if response
9
+ end
10
+ end
11
+
12
+ def perform(serialized_request)
13
+ request = Request.parse(serialized_request)
14
+ response = request.perform
15
+ write(request.id, response) if response
16
+ end
17
+
18
+ private
19
+
20
+ def write(id, response)
21
+ CabbageDoc::Configuration.instance.cache.write(
22
+ [CabbageDoc::MARKER, id].join('_'),
23
+ response.to_yaml,
24
+ expires_in: EXPIRES_IN
25
+ )
26
+ end
27
+ end
28
+ end
data/lib/cabbage_doc.rb CHANGED
@@ -4,7 +4,6 @@ module CabbageDoc
4
4
  autoload :Path, 'cabbage_doc/path'
5
5
  autoload :Singleton, 'cabbage_doc/singleton'
6
6
  autoload :Cloneable, 'cabbage_doc/cloneable'
7
- autoload :PactoHelper, 'cabbage_doc/pacto_helper'
8
7
  autoload :Parser, 'cabbage_doc/parser'
9
8
  autoload :Client, 'cabbage_doc/client'
10
9
  autoload :Request, 'cabbage_doc/request'
@@ -22,6 +21,8 @@ module CabbageDoc
22
21
  autoload :Processor, 'cabbage_doc/processor'
23
22
  autoload :Customizer, 'cabbage_doc/customizer'
24
23
  autoload :Task, 'cabbage_doc/task'
24
+ autoload :Worker, 'cabbage_doc/worker'
25
+ autoload :Cache, 'cabbage_doc/cache'
25
26
 
26
27
  class << self
27
28
  def configure
@@ -7,6 +7,11 @@ body
7
7
  pre, code, .authentication form
8
8
  {
9
9
  font-family: monospace;
10
+ border: 1px solid #e5e0c6;
11
+ }
12
+
13
+ .authentication form
14
+ {
10
15
  background-color: #fcf6db;
11
16
  border: 1px solid #e5e0c6;
12
17
  padding: 10px;
@@ -178,6 +183,11 @@ a:hover
178
183
  margin-top: 10px;
179
184
  }
180
185
 
186
+ .action .response pre
187
+ {
188
+ overflow: hidden;
189
+ }
190
+
181
191
  .action .description
182
192
  {
183
193
  margin-bottom: 20px;
@@ -0,0 +1,108 @@
1
+ /*!
2
+ * Agate by Taufik Nurrohman <https://github.com/tovic>
3
+ * ----------------------------------------------------
4
+ *
5
+ * #ade5fc
6
+ * #a2fca2
7
+ * #c6b4f0
8
+ * #d36363
9
+ * #fcc28c
10
+ * #fc9b9b
11
+ * #ffa
12
+ * #fff
13
+ * #333
14
+ * #62c8f3
15
+ * #888
16
+ *
17
+ */
18
+
19
+ .hljs {
20
+ display: block;
21
+ overflow-x: auto;
22
+ padding: 0.5em;
23
+ background: #333;
24
+ color: white;
25
+ }
26
+
27
+ .hljs-name,
28
+ .hljs-strong {
29
+ font-weight: bold;
30
+ }
31
+
32
+ .hljs-code,
33
+ .hljs-emphasis {
34
+ font-style: italic;
35
+ }
36
+
37
+ .hljs-tag {
38
+ color: #62c8f3;
39
+ }
40
+
41
+ .hljs-variable,
42
+ .hljs-template-variable,
43
+ .hljs-selector-id,
44
+ .hljs-selector-class {
45
+ color: #ade5fc;
46
+ }
47
+
48
+ .hljs-string,
49
+ .hljs-bullet {
50
+ color: #a2fca2;
51
+ }
52
+
53
+ .hljs-type,
54
+ .hljs-title,
55
+ .hljs-section,
56
+ .hljs-attribute,
57
+ .hljs-quote,
58
+ .hljs-built_in,
59
+ .hljs-builtin-name {
60
+ color: #ffa;
61
+ }
62
+
63
+ .hljs-number,
64
+ .hljs-symbol,
65
+ .hljs-bullet {
66
+ color: #d36363;
67
+ }
68
+
69
+ .hljs-keyword,
70
+ .hljs-selector-tag,
71
+ .hljs-literal {
72
+ color: #fcc28c;
73
+ }
74
+
75
+ .hljs-comment,
76
+ .hljs-deletion,
77
+ .hljs-code {
78
+ color: #888;
79
+ }
80
+
81
+ .hljs-regexp,
82
+ .hljs-link {
83
+ color: #c6b4f0;
84
+ }
85
+
86
+ .hljs-meta {
87
+ color: #fc9b9b;
88
+ }
89
+
90
+ .hljs-deletion {
91
+ background-color: #fc9b9b;
92
+ color: #333;
93
+ }
94
+
95
+ .hljs-addition {
96
+ background-color: #a2fca2;
97
+ color: #333;
98
+ }
99
+
100
+ .hljs a {
101
+ color: inherit;
102
+ }
103
+
104
+ .hljs a:focus,
105
+ .hljs a:hover {
106
+ color: inherit;
107
+ text-decoration: underline;
108
+ }
@@ -0,0 +1,66 @@
1
+ /*
2
+ Date: 24 Fev 2015
3
+ Author: Pedro Oliveira <kanytu@gmail . com>
4
+ */
5
+
6
+ .hljs {
7
+ color: #a9b7c6;
8
+ background: #282b2e;
9
+ display: block;
10
+ overflow-x: auto;
11
+ padding: 0.5em;
12
+ }
13
+
14
+ .hljs-number,
15
+ .hljs-literal,
16
+ .hljs-symbol,
17
+ .hljs-bullet {
18
+ color: #6897BB;
19
+ }
20
+
21
+ .hljs-keyword,
22
+ .hljs-selector-tag,
23
+ .hljs-deletion {
24
+ color: #cc7832;
25
+ }
26
+
27
+ .hljs-variable,
28
+ .hljs-template-variable,
29
+ .hljs-link {
30
+ color: #629755;
31
+ }
32
+
33
+ .hljs-comment,
34
+ .hljs-quote {
35
+ color: #808080;
36
+ }
37
+
38
+ .hljs-meta {
39
+ color: #bbb529;
40
+ }
41
+
42
+ .hljs-string,
43
+ .hljs-attribute,
44
+ .hljs-addition {
45
+ color: #6A8759;
46
+ }
47
+
48
+ .hljs-section,
49
+ .hljs-title,
50
+ .hljs-type {
51
+ color: #ffc66d;
52
+ }
53
+
54
+ .hljs-name,
55
+ .hljs-selector-id,
56
+ .hljs-selector-class {
57
+ color: #e8bf6a;
58
+ }
59
+
60
+ .hljs-emphasis {
61
+ font-style: italic;
62
+ }
63
+
64
+ .hljs-strong {
65
+ font-weight: bold;
66
+ }