lecter 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1cc803aeeee0fe6bd8ddb7254bbc856233434a770da0499cfb1b0c9069d54bbf
4
- data.tar.gz: 684ee560cb8e8a646f5991df8ff5778a23de0bc726b9ee10a5a187d2431aff64
3
+ metadata.gz: af36eb3acc445fcb8eb1c1ba1a2c31f98d526b983ef28976b0c2586917f11323
4
+ data.tar.gz: 52919c26f7ad0a7319b2f87927f22ac0b6cea9c18a078e3f77cca65641f3d205
5
5
  SHA512:
6
- metadata.gz: e918dee645cc5ed173943e08d8fee387f3e7c63136363952971dbbeaf048136950251051bfcbdee826e339eac950c00c2b0fe37e86eb22be4b9cf539d53124f0
7
- data.tar.gz: 709f50fe81a96ed0d26233c2f62dee180b6974b2d1ad92d185a96aefaf82d69cc04d53a8cdba02c67e30f0433bc133cf7f4e4a21b261499f1210dd5fd97703e0
6
+ metadata.gz: dd5d5eee2054aa159869bc852b9a0abf70c87ae58f2ef363e9183b41d46fd2784249becd823aa9258ac45af2280c8e24e26c2d11d89877a70bdeb2f8b4af0bf4
7
+ data.tar.gz: de412a50f6da7a1e7d5c502a40dcc7ce2b9ffe9c7b0913af55f4d54a81193a8ec5f390bf71b0b1b3e323727672b5dc4aa61f9c5b309eef2c5a493cc52c667601
data/.gitignore CHANGED
@@ -10,3 +10,4 @@
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
12
  .idea/
13
+ *.gem
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Lecter
1
+ # Lecter. Online debugger
2
2
 
3
3
  There are a lot of people around developing web apps also as new developers on projects. Sometimes they don't know how app works and which exactly processes work.
4
4
  That gem will help them to understand which code executes per request.
@@ -9,22 +9,20 @@ That gem will help them to understand which code executes per request.
9
9
  Add this line to your application's Gemfile:
10
10
 
11
11
  ```ruby
12
- gem 'lecter'
12
+ group :development do
13
+ gem 'lecter', git: 'https://github.com/neodelf/lecter'
14
+ end
13
15
  ```
14
16
 
15
17
  And then execute:
16
18
 
17
19
  $ bundle
18
20
 
19
- Or install it yourself as:
20
-
21
- $ gem install lecter
22
-
23
21
  ## Usage
24
22
 
25
23
 
26
24
  1. Use multithreading server such like a `puma` with workers more than `1`.
27
- 2. Precompile `railscasts.css` and `highlight.pack.js` assets.
25
+ 2. Precompile `lecter.css lecter.js` assets.
28
26
  3. Add routes in your `routes.rb`
29
27
 
30
28
  ```ruby
@@ -37,7 +35,28 @@ Or install it yourself as:
37
35
 
38
36
  `params` - parameters which will be handled on request
39
37
 
40
- `method` - choose one variant `GET` or `POST`
38
+ `method` - choose one variant
39
+
40
+ Examples to use
41
+ 1. `POST` method:
42
+
43
+ `endpoint` - `localhost:3000/posts`
44
+
45
+ `params` - `"post"=>{"title"=>"New title", "description"=>"Desciption"}`
46
+
47
+ `method` - `POST`
48
+
49
+ ![alt text](https://raw.githubusercontent.com/neodelf/staff/master/lecter_post_web.gif)
50
+
51
+ 2. `GET` method:
52
+
53
+ `endpoint` - `localhost:3000/posts`
54
+
55
+ `params` - empty field
56
+
57
+ `method` - `GET`
58
+
59
+ ![alt text](https://raw.githubusercontent.com/neodelf/staff/master/lecter_get_web.gif)
41
60
 
42
61
  ## Contributing
43
62
 
@@ -0,0 +1,261 @@
1
+ /*
2
+
3
+ Railscasts-like style (c) Visoft, Inc. (Damien White)
4
+
5
+ */
6
+
7
+ .hljs {
8
+ display: block;
9
+ overflow-x: auto;
10
+ padding: 0.5em;
11
+ background: #232323;
12
+ color: #e6e1dc;
13
+ }
14
+
15
+ .hljs-comment,
16
+ .hljs-quote {
17
+ color: #bc9458;
18
+ font-style: italic;
19
+ }
20
+
21
+ .hljs-keyword,
22
+ .hljs-selector-tag {
23
+ color: #c26230;
24
+ }
25
+
26
+ .hljs-string,
27
+ .hljs-number,
28
+ .hljs-regexp,
29
+ .hljs-variable,
30
+ .hljs-template-variable {
31
+ color: #a5c261;
32
+ }
33
+
34
+ .hljs-subst {
35
+ color: #519f50;
36
+ }
37
+
38
+ .hljs-tag,
39
+ .hljs-name {
40
+ color: #e8bf6a;
41
+ }
42
+
43
+ .hljs-type {
44
+ color: #da4939;
45
+ }
46
+
47
+
48
+ .hljs-symbol,
49
+ .hljs-bullet,
50
+ .hljs-built_in,
51
+ .hljs-builtin-name,
52
+ .hljs-attr,
53
+ .hljs-link {
54
+ color: #6d9cbe;
55
+ }
56
+
57
+ .hljs-params {
58
+ color: #d0d0ff;
59
+ }
60
+
61
+ .hljs-attribute {
62
+ color: #cda869;
63
+ }
64
+
65
+ .hljs-meta {
66
+ color: #9b859d;
67
+ }
68
+
69
+ .hljs-title,
70
+ .hljs-section {
71
+ color: #ffc66d;
72
+ }
73
+
74
+ .hljs-addition {
75
+ background-color: #144212;
76
+ color: #e6e1dc;
77
+ display: inline-block;
78
+ width: 100%;
79
+ }
80
+
81
+ .hljs-deletion {
82
+ background-color: #600;
83
+ color: #e6e1dc;
84
+ display: inline-block;
85
+ width: 100%;
86
+ }
87
+
88
+ .hljs-selector-class {
89
+ color: #9b703f;
90
+ }
91
+
92
+ .hljs-selector-id {
93
+ color: #8b98ab;
94
+ }
95
+
96
+ .hljs-emphasis {
97
+ font-style: italic;
98
+ }
99
+
100
+ .hljs-strong {
101
+ font-weight: bold;
102
+ }
103
+
104
+ .hljs-link {
105
+ text-decoration: underline;
106
+ }
107
+
108
+ /* diagnosis/show.slim */
109
+
110
+
111
+ .arrow-right {
112
+ width: 0;
113
+ height: 0;
114
+ border-top: 5px solid transparent;
115
+ border-bottom: 5px solid transparent;
116
+ border-left: 5px solid black;
117
+ float: left;
118
+ margin: 7px;
119
+ }
120
+
121
+ .down {
122
+ border-left: 5px solid transparent;
123
+ border-right: 5px solid transparent;
124
+ border-top: 5px solid black;
125
+ margin: 10px 7px 0 5px;
126
+ }
127
+
128
+ .ui-accordion .ui-accordion-header {
129
+ font-size: 78%;
130
+ }
131
+
132
+ .sidebar {
133
+ float: left;
134
+ }
135
+
136
+ .sidebar > .sidebar-wrapper {
137
+ width: 235px;
138
+ position: fixed;
139
+ margin: 49px 33px 0 0;
140
+ overflow-y: scroll;
141
+ top: 82px;
142
+ bottom: 40px;
143
+ }
144
+
145
+ .sidebar-wrapper > ul {
146
+ list-style-type: none;
147
+ height: calc(100% - 40px);
148
+ }
149
+
150
+ .sidebar-wrapper > ul > li {
151
+ margin-bottom: 3px;
152
+ }
153
+
154
+ .sidebar-wrapper > ul > li > a {
155
+ text-decoration: none;
156
+ color: inherit;
157
+ display: block;
158
+ font-size: 13px;
159
+ text-inline: 1.5;
160
+ }
161
+
162
+ .sidebar-wrapper > ul > li > a:hover {
163
+ color: #7d7d7d;
164
+ }
165
+
166
+ .right {
167
+ float: left;
168
+ padding-left: 10px;
169
+ width: 70%;
170
+ margin-left: 297px;
171
+ }
172
+
173
+ .listing {
174
+ display: none;
175
+ padding: 1em 2.2em;
176
+ overflow: auto;
177
+ border-bottom-right-radius: 4px;
178
+ border: 0.5px solid;
179
+ border-top-width: 0;
180
+ border-bottom-left-radius: 4px;
181
+ background: #efefef;
182
+ }
183
+
184
+ .filename {
185
+ cursor: pointer;
186
+ position: relative;
187
+ margin: 2px 0 0 0;
188
+ padding: .5em .5em .5em .7em;
189
+ border: solid 0.1px;
190
+ background: #efefef;
191
+ }
192
+
193
+ /* layouts/lecter.slim */
194
+
195
+ body {
196
+ font-family: "Helvetica Neue", "Helvetica", Arial, "Open Sans", sans-serif;
197
+ font-size: 15px;
198
+ line-height: 1.6;
199
+ -webkit-font-smoothing: antialiased;
200
+ }
201
+
202
+ .body-wrapper {
203
+ overflow: hidden;
204
+ *zoom: 1;
205
+ margin-top: 50px;
206
+ margin-bottom: 50px;
207
+ display: block;
208
+ max-width: 955px;
209
+ margin: 0 auto;
210
+ padding: 0 20px;
211
+ }
212
+
213
+ .nav {
214
+ font-weight: 500;
215
+ background: #0b4e22;
216
+ border-bottom: 1px solid #cccccc;
217
+ }
218
+
219
+ .nav-inner {
220
+ display: block;
221
+ max-width: 955px;
222
+ margin: 0 auto;
223
+ padding: 1px 20px;
224
+ }
225
+
226
+ .nav-inner > ul {
227
+ list-style-type: none;
228
+ }
229
+
230
+ .nav-inner > ul > li > a {
231
+ text-decoration: none;
232
+ font-weight: 600;
233
+ color: white;
234
+ letter-spacing: 0.4px;
235
+ }
236
+
237
+ .ul {
238
+ -webkit-justify-content: space-between;
239
+ justify-content: space-between;
240
+ list-style-type: none;
241
+ margin: 0;
242
+ padding: 8px 2px 8px;
243
+ display: -webkit-flex;
244
+ display: flex;
245
+ }
246
+
247
+ .li {
248
+ -webkit-flex: 0 1 auto;
249
+ flex: 0 1 auto;
250
+ display: list-item;
251
+ text-align: -webkit-match-parent;
252
+ list-style-type: none;
253
+ }
254
+
255
+ .nav-inner > li > a {
256
+ text-decoration: none;
257
+ font-weight: 400;
258
+ color: white;
259
+ letter-spacing: 0.4px;
260
+ }
261
+
@@ -3,23 +3,22 @@ require 'slim-rails'
3
3
 
4
4
  module Lecter
5
5
  class DiagnosisController < ActionController::Base
6
+ layout 'lecter'
6
7
  before_action :format_params, only: :create
7
8
 
8
9
  def new
9
10
  end
10
11
 
11
12
  def show
13
+ redirect_to new_diagnosis_path
12
14
  end
13
15
 
14
16
  def create
15
- response =
16
- case diagnosis_params[:method]
17
- when 'get'
18
- ::RestClient.get(diagnosis_params[:endpoint], params: format_params)
19
- when 'post'
20
- ::RestClient.post(diagnosis_params[:endpoint], format_params)
21
- end
22
-
17
+ response = RestClient::Request.execute(
18
+ method: diagnosis_method.downcase.to_sym,
19
+ url: diagnosis_params[:endpoint],
20
+ payload: format_params
21
+ )
23
22
  return render :new unless response
24
23
 
25
24
  prepare_data(response.body)
@@ -27,6 +26,9 @@ module Lecter
27
26
  rescue URI::InvalidURIError
28
27
  flash[:error] = 'Wrong url'
29
28
  return render :new
29
+ rescue RestClient::ExceptionWithResponse => e
30
+ flash[:error] = e.message
31
+ return render :new
30
32
  end
31
33
 
32
34
  private
@@ -35,9 +37,10 @@ module Lecter
35
37
  params.permit(:endpoint, :params, :method)
36
38
  end
37
39
 
38
- def prepare_data(items)
40
+ def prepare_data(response_body)
39
41
  @lines = []
40
- @items = items.split(';')
42
+ @response_status = response_body[0..2]
43
+ @items = response_body[3..-1].split(';')
41
44
  @items.each do |item|
42
45
  file = item.split(' ')[0]
43
46
  if @lines.last.is_a?(Hash) && @lines.last.keys.first.to_s == file
@@ -50,11 +53,7 @@ module Lecter
50
53
 
51
54
  def format_params
52
55
  @format_params ||= begin
53
- if diagnosis_params[:method] == 'get'
54
- {}
55
- else
56
- json_parse(diagnosis_params[:params])
57
- end.merge(lecter_analysis_parameter)
56
+ json_parse(diagnosis_params[:params]).merge(lecter_analysis_parameter)
58
57
  rescue JSON::ParserError
59
58
  flash[:error] = 'Wrong parameters'
60
59
  return render :new
@@ -67,8 +66,12 @@ module Lecter
67
66
 
68
67
  def json_parse(string)
69
68
  string = '{' + string + '}' unless string.match(/\A{.*}\z/)
70
- string.gsub!('=>', ':').gsub!(/(“|”)/, '"')
69
+ string.gsub!('=>', ':')&.gsub!(/(“|”)/, '"')
71
70
  JSON.parse(string)
72
71
  end
72
+
73
+ def diagnosis_method
74
+ diagnosis_params[:method].downcase
75
+ end
73
76
  end
74
77
  end
@@ -0,0 +1,14 @@
1
+ html
2
+ head
3
+ title
4
+ = yield(:title)
5
+ = stylesheet_link_tag 'lecter'
6
+ = javascript_include_tag 'lecter'
7
+ body
8
+ .nav
9
+ .nav-inner
10
+ ul
11
+ li
12
+ = link_to t('.new_diagnosis'), new_diagnosis_path
13
+ .body-wrapper
14
+ = yield
@@ -1,4 +1,6 @@
1
- <h1>New Lecter diagnosis</h1>
1
+ <%= content_for :title, t('.title') %>
2
+
3
+ <h1><%= t('.title') %></h1>
2
4
 
3
5
  <%= form_tag diagnosis_path do %>
4
6
  <% flash.each do |key, value| %>
@@ -6,13 +8,13 @@
6
8
  <% end %>
7
9
  <% %i[endpoint params].each do |attr| %>
8
10
  <p>
9
- <%= label_tag attr %>
11
+ <%= label_tag t(".#{attr}") %>
10
12
  <%= text_field_tag attr %>
11
13
  </p>
12
14
  <% end %>
13
15
  <p>
14
- <%= label_tag :method %>
15
- <%= select_tag :method, options_for_select(%w[GET POST], 'GET') %>
16
+ <%= label_tag t('.method') %>
17
+ <%= select_tag :method, options_for_select(%w[GET POST PUT PATCH DELETE], 'GET') %>
16
18
  </p>
17
- <%= submit_tag :send %>
19
+ <%= submit_tag t('.create') %>
18
20
  <% end %>
@@ -1,56 +1,52 @@
1
1
  = javascript_include_tag 'highlight.pack.js', '//code.jquery.com/jquery-1.12.4.js', '//code.jquery.com/ui/1.12.1/jquery-ui.js'
2
- = stylesheet_link_tag 'railscasts', '//code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css'
2
+ = stylesheet_link_tag 'railscasts'
3
3
 
4
+ = content_for :title, t('.title')
4
5
 
5
- h1 Lecter diagnosis
6
-
7
- .left
8
- div id='accordion'
9
- - @lines.each_with_index do |item, item_index|
10
- div
11
- h5 id="anchor#{item_index}"
12
- - file = item.keys.first
13
- = file.remove(Rails.root.to_s)
14
- - lines = item.values.split(' ').flatten.map(&:to_i)
15
- - previous_row_is_empty = false
16
- div
17
- pre
18
- - file_context = File.open(Rails.root.join(file), 'r').read.split("\n")
19
- - file_context.each_with_index do |row, index_row|
20
- - include = lines.include?(index_row + 1)
21
- - if include || lines.reduce(false) { |memo, line| memo || index_row.in?(line - 5..line + 4) }
22
- - previous_row_is_empty = false
23
- code class='ruby' style=('background-color: #4a4a4a;' if include)
24
- = "#{index_row + 1} #{row} #{lines.index(index_row + 1) + 1 if include}"
25
- - elsif !previous_row_is_empty
26
- code
27
- - previous_row_is_empty = true
28
- '...
6
+ .sidebar
7
+ .sidebar-wrapper
8
+ ul
9
+ - @lines.each_with_index do |item, item_index|
10
+ li = link_to item.keys.first.split('/').last, "#anchor#{item_index}"
29
11
  .right
12
+ h4
13
+ = t('.response_status', status: @response_status)
30
14
  - @lines.each_with_index do |item, item_index|
31
- p
32
- = link_to item.keys.first.split('/').last, "#anchor#{item_index}"
33
-
34
- css:
35
- .ui-accordion .ui-accordion-header {
36
- font-size: 78%;
37
- }
15
+ .filename id="anchor#{item_index}"
16
+ - file = item.keys.first
17
+ .arrow-right
18
+ .filename-title
19
+ = file.remove(Rails.root.to_s)
20
+ - lines = item.values.split(' ').flatten.map(&:to_i)
21
+ - previous_row_is_empty = false
22
+ .listing
23
+ - file_context = File.open(Rails.root.join(file), 'r').read.split("\n")
24
+ - html_rows = []
25
+ - file_context.each_with_index do |row, index_row|
26
+ - include = lines.include?(index_row + 1)
27
+ - if include || lines.reduce(false) { |memo, line| memo || index_row.in?(line - 5..line + 4) }
28
+ - previous_row_is_empty = false
29
+ - html_row = "#{index_row + 1} #{'-> ' + lines.each_with_index.select { |_, index| lines[index] == index_row + 1 }.map { |_, index| index + 1 }.join(', ') if include} #{row}\n"
30
+ - html_rows << content_tag(:code, html_row, style: "#{include ? 'background-color: #4a4a4a;' : nil}")
31
+ - elsif !previous_row_is_empty
32
+ - previous_row_is_empty = true
33
+ - html_rows << "...\n"
34
+ pre
35
+ code
36
+ - html_rows.each do |html_row|
37
+ = html_row
38
38
 
39
- .left {
40
- float: left;
41
- width: 70%;
42
- }
39
+ javascript:
40
+ $(document).ready(function(){
41
+ hljs.initHighlighting();
43
42
 
44
- .right {
45
- float: left;
46
- padding-left: 10px;
47
- }
43
+ $('.filename').on('click', function(){
44
+ $(this).find('.arrow-right').toggleClass('down')
45
+ $(this).next().slideToggle();
46
+ });
48
47
 
49
- javascript:
50
- hljs.initHighlightingOnLoad();
51
- $('#accordion > div').accordion({
52
- header: 'h5',
53
- heightStyle: 'content',
54
- collapsible: true,
55
- active: 1
56
- });
48
+ $('.sidebar-wrapper > ul > li > a').on('click', function(){
49
+ var anchor = $(this).first().attr('href').split('#').pop();
50
+ $('.filename#'+anchor).click();
51
+ });
52
+ })
@@ -0,0 +1,15 @@
1
+ en:
2
+ layouts:
3
+ lecter:
4
+ new_diagnosis: 'New diagnosis'
5
+ lecter:
6
+ diagnosis:
7
+ show:
8
+ title: 'Diagnosis results'
9
+ response_status: 'Response status: %{status}'
10
+ new:
11
+ title: 'New diagnosis'
12
+ endpoint: 'Endpoint'
13
+ params: 'Parameters'
14
+ method: 'HTTP method'
15
+ create: 'Create'
@@ -0,0 +1,15 @@
1
+ ru:
2
+ layouts:
3
+ lecter:
4
+ new_diagnosis: 'Новый диагноз'
5
+ lecter:
6
+ diagnosis:
7
+ show:
8
+ title: 'Диагноз'
9
+ response_status: 'Статус ответа: %{status}'
10
+ new:
11
+ title: 'Новый диагноз'
12
+ endpoint: 'Абсолютный путь'
13
+ params: 'Параметры'
14
+ method: 'HTTP метод'
15
+ create: 'Создать'
@@ -24,15 +24,22 @@ class Lecter::Rack
24
24
  end
25
25
  end
26
26
  tp.enable
27
+ ActionController::Base.allow_forgery_protection = false
27
28
  end
29
+
28
30
  status, headers, response = @app.call(env)
31
+
29
32
  if tp
33
+ response = [status.to_s + thread[:items]]
30
34
  status = 200
31
- response = [thread[:items]]
35
+ headers = {}
32
36
  end
33
37
 
34
38
  [status, headers, response]
35
39
  ensure
36
- tp.disable if tp
40
+ if tp
41
+ tp.disable
42
+ ActionController::Base.allow_forgery_protection = true
43
+ end
37
44
  end
38
45
  end
@@ -1,3 +1,3 @@
1
1
  module Lecter
2
- VERSION = '0.1.5'
2
+ VERSION = '0.1.6'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lecter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neodelf
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-15 00:00:00.000000000 Z
11
+ date: 2019-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -88,11 +88,6 @@ extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
90
  - ".gitignore"
91
- - ".idea/encodings.xml"
92
- - ".idea/lecter.iml"
93
- - ".idea/misc.xml"
94
- - ".idea/modules.xml"
95
- - ".idea/workspace.xml"
96
91
  - ".rspec"
97
92
  - ".travis.yml"
98
93
  - CODE_OF_CONDUCT.md
@@ -101,14 +96,17 @@ files:
101
96
  - LICENSE.txt
102
97
  - README.md
103
98
  - Rakefile
104
- - app/assets/javascripts/highlight.pack.js
105
- - app/assets/stylesheets/railscasts.css
99
+ - app/assets/javascripts/lecter.js
100
+ - app/assets/stylesheets/lecter.css
106
101
  - app/controllers/lecter/diagnosis_controller.rb
102
+ - app/views/layouts/lecter.slim
107
103
  - app/views/lecter/diagnosis/new.erb
108
104
  - app/views/lecter/diagnosis/show.slim
109
105
  - bin/console
110
106
  - bin/rails
111
107
  - bin/setup
108
+ - config/locales/en.yml
109
+ - config/locales/ru.yml
112
110
  - config/routes.rb
113
111
  - lecter.gemspec
114
112
  - lib/lecter.rb
@@ -1,106 +0,0 @@
1
- /*
2
-
3
- Railscasts-like style (c) Visoft, Inc. (Damien White)
4
-
5
- */
6
-
7
- .hljs {
8
- display: block;
9
- overflow-x: auto;
10
- padding: 0.5em;
11
- background: #232323;
12
- color: #e6e1dc;
13
- }
14
-
15
- .hljs-comment,
16
- .hljs-quote {
17
- color: #bc9458;
18
- font-style: italic;
19
- }
20
-
21
- .hljs-keyword,
22
- .hljs-selector-tag {
23
- color: #c26230;
24
- }
25
-
26
- .hljs-string,
27
- .hljs-number,
28
- .hljs-regexp,
29
- .hljs-variable,
30
- .hljs-template-variable {
31
- color: #a5c261;
32
- }
33
-
34
- .hljs-subst {
35
- color: #519f50;
36
- }
37
-
38
- .hljs-tag,
39
- .hljs-name {
40
- color: #e8bf6a;
41
- }
42
-
43
- .hljs-type {
44
- color: #da4939;
45
- }
46
-
47
-
48
- .hljs-symbol,
49
- .hljs-bullet,
50
- .hljs-built_in,
51
- .hljs-builtin-name,
52
- .hljs-attr,
53
- .hljs-link {
54
- color: #6d9cbe;
55
- }
56
-
57
- .hljs-params {
58
- color: #d0d0ff;
59
- }
60
-
61
- .hljs-attribute {
62
- color: #cda869;
63
- }
64
-
65
- .hljs-meta {
66
- color: #9b859d;
67
- }
68
-
69
- .hljs-title,
70
- .hljs-section {
71
- color: #ffc66d;
72
- }
73
-
74
- .hljs-addition {
75
- background-color: #144212;
76
- color: #e6e1dc;
77
- display: inline-block;
78
- width: 100%;
79
- }
80
-
81
- .hljs-deletion {
82
- background-color: #600;
83
- color: #e6e1dc;
84
- display: inline-block;
85
- width: 100%;
86
- }
87
-
88
- .hljs-selector-class {
89
- color: #9b703f;
90
- }
91
-
92
- .hljs-selector-id {
93
- color: #8b98ab;
94
- }
95
-
96
- .hljs-emphasis {
97
- font-style: italic;
98
- }
99
-
100
- .hljs-strong {
101
- font-weight: bold;
102
- }
103
-
104
- .hljs-link {
105
- text-decoration: underline;
106
- }