##// END OF EJS Templates
Don't use <p> tags in parsing because the tag cannot be closed inside a tag to...
neko259 -
r750:fa59c3d1 default
parent child Browse files
Show More
@@ -1,152 +1,152 b''
1 # coding=utf-8
1 # coding=utf-8
2
2
3 import re
3 import re
4 import bbcode
4 import bbcode
5
5
6 import boards
6 import boards
7
7
8
8
9 __author__ = 'neko259'
9 __author__ = 'neko259'
10
10
11
11
12 REFLINK_PATTERN = re.compile(r'\d+')
12 REFLINK_PATTERN = re.compile(r'\d+')
13
13
14
14
15 class TextFormatter():
15 class TextFormatter():
16 """
16 """
17 An interface for formatter that can be used in the text format panel
17 An interface for formatter that can be used in the text format panel
18 """
18 """
19
19
20 def __init__(self):
20 def __init__(self):
21 pass
21 pass
22
22
23 name = ''
23 name = ''
24
24
25 # Left and right tags for the button preview
25 # Left and right tags for the button preview
26 preview_left = ''
26 preview_left = ''
27 preview_right = ''
27 preview_right = ''
28
28
29 # Left and right characters for the textarea input
29 # Left and right characters for the textarea input
30 format_left = ''
30 format_left = ''
31 format_right = ''
31 format_right = ''
32
32
33
33
34 class AutolinkPattern():
34 class AutolinkPattern():
35 def handleMatch(self, m):
35 def handleMatch(self, m):
36 link_element = etree.Element('a')
36 link_element = etree.Element('a')
37 href = m.group(2)
37 href = m.group(2)
38 link_element.set('href', href)
38 link_element.set('href', href)
39 link_element.text = href
39 link_element.text = href
40
40
41 return link_element
41 return link_element
42
42
43
43
44 class QuotePattern(TextFormatter):
44 class QuotePattern(TextFormatter):
45 name = 'q'
45 name = 'q'
46 preview_left = '<span class="multiquote">'
46 preview_left = '<span class="multiquote">'
47 preview_right = '</span>'
47 preview_right = '</span>'
48
48
49 format_left = '[quote]'
49 format_left = '[quote]'
50 format_right = '[/quote]'
50 format_right = '[/quote]'
51
51
52
52
53 class SpoilerPattern(TextFormatter):
53 class SpoilerPattern(TextFormatter):
54 name = 'spoiler'
54 name = 'spoiler'
55 preview_left = '<span class="spoiler">'
55 preview_left = '<span class="spoiler">'
56 preview_right = '</span>'
56 preview_right = '</span>'
57
57
58 format_left = '[spoiler]'
58 format_left = '[spoiler]'
59 format_right = '[/spoiler]'
59 format_right = '[/spoiler]'
60
60
61 def handleMatch(self, m):
61 def handleMatch(self, m):
62 quote_element = etree.Element('span')
62 quote_element = etree.Element('span')
63 quote_element.set('class', 'spoiler')
63 quote_element.set('class', 'spoiler')
64 quote_element.text = m.group(2)
64 quote_element.text = m.group(2)
65
65
66 return quote_element
66 return quote_element
67
67
68
68
69 class CommentPattern(TextFormatter):
69 class CommentPattern(TextFormatter):
70 name = ''
70 name = ''
71 preview_left = '<span class="comment">// '
71 preview_left = '<span class="comment">// '
72 preview_right = '</span>'
72 preview_right = '</span>'
73
73
74 format_left = '[comment]'
74 format_left = '[comment]'
75 format_right = '[/comment]'
75 format_right = '[/comment]'
76
76
77
77
78 class StrikeThroughPattern(TextFormatter):
78 class StrikeThroughPattern(TextFormatter):
79 name = 's'
79 name = 's'
80 preview_left = '<span class="strikethrough">'
80 preview_left = '<span class="strikethrough">'
81 preview_right = '</span>'
81 preview_right = '</span>'
82
82
83 format_left = '[s]'
83 format_left = '[s]'
84 format_right = '[/s]'
84 format_right = '[/s]'
85
85
86
86
87 class ItalicPattern(TextFormatter):
87 class ItalicPattern(TextFormatter):
88 name = 'i'
88 name = 'i'
89 preview_left = '<i>'
89 preview_left = '<i>'
90 preview_right = '</i>'
90 preview_right = '</i>'
91
91
92 format_left = '[i]'
92 format_left = '[i]'
93 format_right = '[/i]'
93 format_right = '[/i]'
94
94
95
95
96 class BoldPattern(TextFormatter):
96 class BoldPattern(TextFormatter):
97 name = 'b'
97 name = 'b'
98 preview_left = '<b>'
98 preview_left = '<b>'
99 preview_right = '</b>'
99 preview_right = '</b>'
100
100
101 format_left = '[b]'
101 format_left = '[b]'
102 format_right = '[/b]'
102 format_right = '[/b]'
103
103
104
104
105 class CodePattern(TextFormatter):
105 class CodePattern(TextFormatter):
106 name = 'code'
106 name = 'code'
107 preview_left = '<code>'
107 preview_left = '<code>'
108 preview_right = '</code>'
108 preview_right = '</code>'
109
109
110 format_left = '[code]'
110 format_left = '[code]'
111 format_right = '[/code]'
111 format_right = '[/code]'
112
112
113
113
114 def render_reflink(tag_name, value, options, parent, context):
114 def render_reflink(tag_name, value, options, parent, context):
115 if not REFLINK_PATTERN.match(value):
115 if not REFLINK_PATTERN.match(value):
116 return u'>>%s' % value
116 return u'>>%s' % value
117
117
118 post_id = int(value)
118 post_id = int(value)
119
119
120 posts = boards.models.Post.objects.filter(id=post_id)
120 posts = boards.models.Post.objects.filter(id=post_id)
121 if posts.exists():
121 if posts.exists():
122 post = posts[0]
122 post = posts[0]
123
123
124 return u'<a href=%s>&gt;&gt;%s</a>' % (post.get_url(), post_id)
124 return u'<a href=%s>&gt;&gt;%s</a>' % (post.get_url(), post_id)
125 else:
125 else:
126 return u'>>%s' % value
126 return u'>>%s' % value
127
127
128
128
129 def bbcode_extended(markup):
129 def bbcode_extended(markup):
130 parser = bbcode.Parser(newline='</p><p>')
130 parser = bbcode.Parser()
131 parser.add_formatter('post', render_reflink, strip=True)
131 parser.add_formatter('post', render_reflink, strip=True)
132 parser.add_simple_formatter('quote',
132 parser.add_simple_formatter('quote',
133 u'<span class="multiquote">%(value)s</span>')
133 u'<span class="multiquote">%(value)s</span>')
134 parser.add_simple_formatter('comment',
134 parser.add_simple_formatter('comment',
135 u'<span class="comment">//%(value)s</span>')
135 u'<span class="comment">//%(value)s</span>')
136 parser.add_simple_formatter('spoiler',
136 parser.add_simple_formatter('spoiler',
137 u'<span class="spoiler">%(value)s</span>')
137 u'<span class="spoiler">%(value)s</span>')
138 parser.add_simple_formatter('s',
138 parser.add_simple_formatter('s',
139 u'<span class="strikethrough">%(value)s</span>')
139 u'<span class="strikethrough">%(value)s</span>')
140 parser.add_simple_formatter('code',
140 parser.add_simple_formatter('code',
141 u'<pre><code>%(value)s</pre></code>')
141 u'<pre><code>%(value)s</pre></code>')
142 return '<p>%s</p>' % parser.format(markup)
142 return parser.format(markup)
143
143
144 formatters = [
144 formatters = [
145 QuotePattern,
145 QuotePattern,
146 SpoilerPattern,
146 SpoilerPattern,
147 ItalicPattern,
147 ItalicPattern,
148 BoldPattern,
148 BoldPattern,
149 CommentPattern,
149 CommentPattern,
150 StrikeThroughPattern,
150 StrikeThroughPattern,
151 CodePattern,
151 CodePattern,
152 ]
152 ]
@@ -1,440 +1,440 b''
1 html {
1 html {
2 background: #555;
2 background: #555;
3 color: #ffffff;
3 color: #ffffff;
4 }
4 }
5
5
6 body {
6 body {
7 margin: 0;
7 margin: 0;
8 }
8 }
9
9
10 #admin_panel {
10 #admin_panel {
11 background: #FF0000;
11 background: #FF0000;
12 color: #00FF00
12 color: #00FF00
13 }
13 }
14
14
15 .input_field_error {
15 .input_field_error {
16 color: #FF0000;
16 color: #FF0000;
17 }
17 }
18
18
19 .title {
19 .title {
20 font-weight: bold;
20 font-weight: bold;
21 color: #ffcc00;
21 color: #ffcc00;
22 }
22 }
23
23
24 .link, a {
24 .link, a {
25 color: #afdcec;
25 color: #afdcec;
26 }
26 }
27
27
28 .block {
28 .block {
29 display: inline-block;
29 display: inline-block;
30 vertical-align: top;
30 vertical-align: top;
31 }
31 }
32
32
33 .tag {
33 .tag {
34 color: #FFD37D;
34 color: #FFD37D;
35 }
35 }
36
36
37 .post_id {
37 .post_id {
38 color: #fff380;
38 color: #fff380;
39 }
39 }
40
40
41 .post, .dead_post, .archive_post, #posts-table {
41 .post, .dead_post, .archive_post, #posts-table {
42 background: #333;
42 background: #333;
43 padding: 10px;
43 padding: 10px;
44 clear: left;
44 clear: left;
45 word-wrap: break-word;
45 word-wrap: break-word;
46 border-top: 1px solid #777;
46 border-top: 1px solid #777;
47 border-bottom: 1px solid #777;
47 border-bottom: 1px solid #777;
48 }
48 }
49
49
50 .post + .post {
50 .post + .post {
51 border-top: none;
51 border-top: none;
52 }
52 }
53
53
54 .dead_post + .dead_post {
54 .dead_post + .dead_post {
55 border-top: none;
55 border-top: none;
56 }
56 }
57
57
58 .archive_post + .archive_post {
58 .archive_post + .archive_post {
59 border-top: none;
59 border-top: none;
60 }
60 }
61
61
62 .metadata {
62 .metadata {
63 padding-top: 5px;
63 padding-top: 5px;
64 margin-top: 10px;
64 margin-top: 10px;
65 border-top: solid 1px #666;
65 border-top: solid 1px #666;
66 color: #ddd;
66 color: #ddd;
67 }
67 }
68
68
69 .navigation_panel, .tag_info {
69 .navigation_panel, .tag_info {
70 background: #444;
70 background: #444;
71 margin-bottom: 5px;
71 margin-bottom: 5px;
72 margin-top: 5px;
72 margin-top: 5px;
73 padding: 10px;
73 padding: 10px;
74 border-bottom: solid 1px #888;
74 border-bottom: solid 1px #888;
75 border-top: solid 1px #888;
75 border-top: solid 1px #888;
76 color: #eee;
76 color: #eee;
77 }
77 }
78
78
79 .navigation_panel .link {
79 .navigation_panel .link {
80 border-right: 1px solid #fff;
80 border-right: 1px solid #fff;
81 font-weight: bold;
81 font-weight: bold;
82 margin-right: 1ex;
82 margin-right: 1ex;
83 padding-right: 1ex;
83 padding-right: 1ex;
84 }
84 }
85 .navigation_panel .link:last-child {
85 .navigation_panel .link:last-child {
86 border-left: 1px solid #fff;
86 border-left: 1px solid #fff;
87 border-right: none;
87 border-right: none;
88 float: right;
88 float: right;
89 margin-left: 1ex;
89 margin-left: 1ex;
90 margin-right: 0;
90 margin-right: 0;
91 padding-left: 1ex;
91 padding-left: 1ex;
92 padding-right: 0;
92 padding-right: 0;
93 }
93 }
94
94
95 .navigation_panel::after, .post::after {
95 .navigation_panel::after, .post::after {
96 clear: both;
96 clear: both;
97 content: ".";
97 content: ".";
98 display: block;
98 display: block;
99 height: 0;
99 height: 0;
100 line-height: 0;
100 line-height: 0;
101 visibility: hidden;
101 visibility: hidden;
102 }
102 }
103
103
104 p {
104 p, br {
105 margin-top: .5em;
105 margin-top: .5em;
106 margin-bottom: .5em;
106 margin-bottom: .5em;
107 }
107 }
108
108
109 .post-form-w {
109 .post-form-w {
110 background: #333344;
110 background: #333344;
111 border-top: solid 1px #888;
111 border-top: solid 1px #888;
112 border-bottom: solid 1px #888;
112 border-bottom: solid 1px #888;
113 color: #fff;
113 color: #fff;
114 padding: 10px;
114 padding: 10px;
115 margin-bottom: 5px;
115 margin-bottom: 5px;
116 margin-top: 5px;
116 margin-top: 5px;
117 }
117 }
118
118
119 .form-row {
119 .form-row {
120 width: 100%;
120 width: 100%;
121 }
121 }
122
122
123 .form-label {
123 .form-label {
124 padding: .25em 1ex .25em 0;
124 padding: .25em 1ex .25em 0;
125 vertical-align: top;
125 vertical-align: top;
126 }
126 }
127
127
128 .form-input {
128 .form-input {
129 padding: .25em 0;
129 padding: .25em 0;
130 }
130 }
131
131
132 .form-errors {
132 .form-errors {
133 font-weight: bolder;
133 font-weight: bolder;
134 vertical-align: middle;
134 vertical-align: middle;
135 }
135 }
136
136
137 .post-form input:not([name="image"]), .post-form textarea {
137 .post-form input:not([name="image"]), .post-form textarea {
138 background: #333;
138 background: #333;
139 color: #fff;
139 color: #fff;
140 border: solid 1px;
140 border: solid 1px;
141 padding: 0;
141 padding: 0;
142 font: medium sans-serif;
142 font: medium sans-serif;
143 width: 100%;
143 width: 100%;
144 }
144 }
145
145
146 .form-submit {
146 .form-submit {
147 display: table;
147 display: table;
148 margin-bottom: 1ex;
148 margin-bottom: 1ex;
149 margin-top: 1ex;
149 margin-top: 1ex;
150 }
150 }
151
151
152 .form-title {
152 .form-title {
153 font-weight: bold;
153 font-weight: bold;
154 font-size: 2ex;
154 font-size: 2ex;
155 margin-bottom: 0.5ex;
155 margin-bottom: 0.5ex;
156 }
156 }
157
157
158 .post-form input[type="submit"], input[type="submit"] {
158 .post-form input[type="submit"], input[type="submit"] {
159 background: #222;
159 background: #222;
160 border: solid 2px #fff;
160 border: solid 2px #fff;
161 color: #fff;
161 color: #fff;
162 padding: 0.5ex;
162 padding: 0.5ex;
163 }
163 }
164
164
165 input[type="submit"]:hover {
165 input[type="submit"]:hover {
166 background: #060;
166 background: #060;
167 }
167 }
168
168
169 blockquote {
169 blockquote {
170 border-left: solid 2px;
170 border-left: solid 2px;
171 padding-left: 5px;
171 padding-left: 5px;
172 color: #B1FB17;
172 color: #B1FB17;
173 margin: 0;
173 margin: 0;
174 }
174 }
175
175
176 .post > .image {
176 .post > .image {
177 float: left;
177 float: left;
178 margin: 0 1ex .5ex 0;
178 margin: 0 1ex .5ex 0;
179 min-width: 1px;
179 min-width: 1px;
180 text-align: center;
180 text-align: center;
181 display: table-row;
181 display: table-row;
182 }
182 }
183
183
184 .post > .metadata {
184 .post > .metadata {
185 clear: left;
185 clear: left;
186 }
186 }
187
187
188 .get {
188 .get {
189 font-weight: bold;
189 font-weight: bold;
190 color: #d55;
190 color: #d55;
191 }
191 }
192
192
193 * {
193 * {
194 text-decoration: none;
194 text-decoration: none;
195 }
195 }
196
196
197 .dead_post {
197 .dead_post {
198 background-color: #442222;
198 background-color: #442222;
199 }
199 }
200
200
201 .archive_post {
201 .archive_post {
202 background-color: #000;
202 background-color: #000;
203 }
203 }
204
204
205 .mark_btn {
205 .mark_btn {
206 border: 1px solid;
206 border: 1px solid;
207 min-width: 2ex;
207 min-width: 2ex;
208 padding: 2px 2ex;
208 padding: 2px 2ex;
209 }
209 }
210
210
211 .mark_btn:hover {
211 .mark_btn:hover {
212 background: #555;
212 background: #555;
213 }
213 }
214
214
215 .quote {
215 .quote {
216 color: #92cf38;
216 color: #92cf38;
217 font-style: italic;
217 font-style: italic;
218 }
218 }
219
219
220 .multiquote {
220 .multiquote {
221 border-left: solid 4px #ccc;
221 border-left: solid 4px #ccc;
222 padding: 3px;
222 padding: 3px;
223 display: inline-block;
223 display: inline-block;
224 background: #222;
224 background: #222;
225 border-right: solid 1px #ccc;
225 border-right: solid 1px #ccc;
226 border-top: solid 1px #ccc;
226 border-top: solid 1px #ccc;
227 border-bottom: solid 1px #ccc;
227 border-bottom: solid 1px #ccc;
228 }
228 }
229
229
230 .spoiler {
230 .spoiler {
231 background: white;
231 background: white;
232 color: white;
232 color: white;
233 }
233 }
234
234
235 .spoiler:hover {
235 .spoiler:hover {
236 color: black;
236 color: black;
237 }
237 }
238
238
239 .comment {
239 .comment {
240 color: #eb2;
240 color: #eb2;
241 }
241 }
242
242
243 a:hover {
243 a:hover {
244 text-decoration: underline;
244 text-decoration: underline;
245 }
245 }
246
246
247 .last-replies {
247 .last-replies {
248 margin-left: 3ex;
248 margin-left: 3ex;
249 margin-right: 3ex;
249 margin-right: 3ex;
250 }
250 }
251
251
252 .thread {
252 .thread {
253 margin-bottom: 3ex;
253 margin-bottom: 3ex;
254 margin-top: 1ex;
254 margin-top: 1ex;
255 }
255 }
256
256
257 .post:target {
257 .post:target {
258 border: solid 2px white;
258 border: solid 2px white;
259 }
259 }
260
260
261 pre{
261 pre{
262 white-space:pre-wrap
262 white-space:pre-wrap
263 }
263 }
264
264
265 li {
265 li {
266 list-style-position: inside;
266 list-style-position: inside;
267 }
267 }
268
268
269 .fancybox-skin {
269 .fancybox-skin {
270 position: relative;
270 position: relative;
271 background-color: #fff;
271 background-color: #fff;
272 color: #ddd;
272 color: #ddd;
273 text-shadow: none;
273 text-shadow: none;
274 }
274 }
275
275
276 .fancybox-image {
276 .fancybox-image {
277 border: 1px solid black;
277 border: 1px solid black;
278 }
278 }
279
279
280 .image-mode-tab {
280 .image-mode-tab {
281 background: #444;
281 background: #444;
282 color: #eee;
282 color: #eee;
283 margin-top: 5px;
283 margin-top: 5px;
284 padding: 5px;
284 padding: 5px;
285 border-top: 1px solid #888;
285 border-top: 1px solid #888;
286 border-bottom: 1px solid #888;
286 border-bottom: 1px solid #888;
287 }
287 }
288
288
289 .image-mode-tab > label {
289 .image-mode-tab > label {
290 margin: 0 1ex;
290 margin: 0 1ex;
291 }
291 }
292
292
293 .image-mode-tab > label > input {
293 .image-mode-tab > label > input {
294 margin-right: .5ex;
294 margin-right: .5ex;
295 }
295 }
296
296
297 #posts-table {
297 #posts-table {
298 margin-top: 5px;
298 margin-top: 5px;
299 margin-bottom: 5px;
299 margin-bottom: 5px;
300 }
300 }
301
301
302 .tag_info > h2 {
302 .tag_info > h2 {
303 margin: 0;
303 margin: 0;
304 }
304 }
305
305
306 .post-info {
306 .post-info {
307 color: #ddd;
307 color: #ddd;
308 margin-bottom: 1ex;
308 margin-bottom: 1ex;
309 }
309 }
310
310
311 .moderator_info {
311 .moderator_info {
312 color: #e99d41;
312 color: #e99d41;
313 float: right;
313 float: right;
314 font-weight: bold;
314 font-weight: bold;
315 }
315 }
316
316
317 .refmap {
317 .refmap {
318 font-size: 0.9em;
318 font-size: 0.9em;
319 color: #ccc;
319 color: #ccc;
320 margin-top: 1em;
320 margin-top: 1em;
321 }
321 }
322
322
323 .fav {
323 .fav {
324 color: yellow;
324 color: yellow;
325 }
325 }
326
326
327 .not_fav {
327 .not_fav {
328 color: #ccc;
328 color: #ccc;
329 }
329 }
330
330
331 .role {
331 .role {
332 text-decoration: underline;
332 text-decoration: underline;
333 }
333 }
334
334
335 .form-email {
335 .form-email {
336 display: none;
336 display: none;
337 }
337 }
338
338
339 .footer {
339 .footer {
340 margin: 5px;
340 margin: 5px;
341 }
341 }
342
342
343 .bar-value {
343 .bar-value {
344 background: rgba(50, 55, 164, 0.45);
344 background: rgba(50, 55, 164, 0.45);
345 font-size: 0.9em;
345 font-size: 0.9em;
346 height: 1.5em;
346 height: 1.5em;
347 }
347 }
348
348
349 .bar-bg {
349 .bar-bg {
350 position: relative;
350 position: relative;
351 border-top: solid 1px #888;
351 border-top: solid 1px #888;
352 border-bottom: solid 1px #888;
352 border-bottom: solid 1px #888;
353 margin-top: 5px;
353 margin-top: 5px;
354 overflow: hidden;
354 overflow: hidden;
355 }
355 }
356
356
357 .bar-text {
357 .bar-text {
358 padding: 2px;
358 padding: 2px;
359 position: absolute;
359 position: absolute;
360 left: 0;
360 left: 0;
361 top: 0;
361 top: 0;
362 }
362 }
363
363
364 .page_link {
364 .page_link {
365 background: #444;
365 background: #444;
366 border-top: solid 1px #888;
366 border-top: solid 1px #888;
367 border-bottom: solid 1px #888;
367 border-bottom: solid 1px #888;
368 padding: 5px;
368 padding: 5px;
369 color: #eee;
369 color: #eee;
370 font-size: 2ex;
370 font-size: 2ex;
371 }
371 }
372
372
373 .skipped_replies {
373 .skipped_replies {
374 margin: 5px;
374 margin: 5px;
375 }
375 }
376
376
377 .current_page {
377 .current_page {
378 border: solid 1px #afdcec;
378 border: solid 1px #afdcec;
379 padding: 2px;
379 padding: 2px;
380 }
380 }
381
381
382 .current_mode {
382 .current_mode {
383 font-weight: bold;
383 font-weight: bold;
384 }
384 }
385
385
386 .gallery_image {
386 .gallery_image {
387 border: solid 1px;
387 border: solid 1px;
388 padding: 0.5ex;
388 padding: 0.5ex;
389 margin: 0.5ex;
389 margin: 0.5ex;
390 text-align: center;
390 text-align: center;
391 }
391 }
392
392
393 code {
393 code {
394 border: dashed 1px #ccc;
394 border: dashed 1px #ccc;
395 background: #111;
395 background: #111;
396 padding: 2px;
396 padding: 2px;
397 font-size: 1.2em;
397 font-size: 1.2em;
398 display: inline-block;
398 display: inline-block;
399 }
399 }
400
400
401 pre {
401 pre {
402 overflow: auto;
402 overflow: auto;
403 }
403 }
404
404
405 .img-full {
405 .img-full {
406 background: #222;
406 background: #222;
407 border: solid 1px white;
407 border: solid 1px white;
408 }
408 }
409
409
410 .tag_item {
410 .tag_item {
411 display: inline-block;
411 display: inline-block;
412 border: 1px dashed #666;
412 border: 1px dashed #666;
413 margin: 0.2ex;
413 margin: 0.2ex;
414 padding: 0.1ex;
414 padding: 0.1ex;
415 }
415 }
416
416
417 #id_models li {
417 #id_models li {
418 list-style: none;
418 list-style: none;
419 }
419 }
420
420
421 #id_q {
421 #id_q {
422 margin-left: 1ex;
422 margin-left: 1ex;
423 }
423 }
424
424
425 ul {
425 ul {
426 padding-left: 0px;
426 padding-left: 0px;
427 }
427 }
428
428
429 /* Reflink preview */
429 /* Reflink preview */
430 .post_preview {
430 .post_preview {
431 border-left: 1px solid #777;
431 border-left: 1px solid #777;
432 border-right: 1px solid #777;
432 border-right: 1px solid #777;
433 }
433 }
434
434
435 /* Code highlighter */
435 /* Code highlighter */
436 .hljs {
436 .hljs {
437 color: #fff;
437 color: #fff;
438 background: #000;
438 background: #000;
439 display: inline-block;
439 display: inline-block;
440 }
440 }
General Comments 0
You need to be logged in to leave comments. Login now