markita 4.1.230116 → 5.0.241001

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: e00a9566251da73346583e54ae03f74b7251a5d4a43ca5c5b553b0b3179fb4e2
4
- data.tar.gz: 9e5e0d48d1aee16600af6033a58008c9cb24ff49cf85b12f37d47737f49194eb
3
+ metadata.gz: cd3ec2273b3a06985b04dbcaa4e4cc190ad724b78a95614715bc940d762f0603
4
+ data.tar.gz: 45313726512a832f997d4ea3ac16e7be4839a448de674eeabfe62817ddd7128f
5
5
  SHA512:
6
- metadata.gz: 16b8d905d43fd810dc2f68aa0640be8be6ab7a2ebe51da42492c567cfdf01296ea5f4aeb676a36367274b1402b97428d848dea7db0c8a097e09b4afa1a4eaad9
7
- data.tar.gz: ef8c0b4a38c07feada1e16b47280b4ab49e24eb3a95cdbbfdfa2578bdae11ed0618aafa426aa76a884b4e897fb7ddc5441ac060fd0b0b37f6d408fbd9b6f1c8d
6
+ metadata.gz: 75a93470a33b67d868ed1fabac90b0d6a111f1f2c3e028534ffdc5ce434d8361103e8fa27249c4f34e347c3de57dc8806bd221351bc8abf75396ad9a1500f8bb
7
+ data.tar.gz: d1180313131e3487558c863cdd6817c401e37ddd36bc64ad1821eb082a11c432bed0f0eb055dc34a9bb75c68129a0a109e721bd4132efc072a6ca4583c2d655f
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Markita
2
2
 
3
- * [VERSION 4.1.230116](https://github.com/carlosjhr64/markita/releases)
3
+ * [VERSION 5.0.241001](https://github.com/carlosjhr64/markita/releases)
4
4
  * [github](https://www.github.com/carlosjhr64/markita)
5
5
  * [rubygems](https://rubygems.org/gems/markita)
6
6
 
@@ -49,197 +49,51 @@ Types:
49
49
  ```
50
50
  ## FEATURES
51
51
 
52
- ### Ballot boxes
53
-
54
- - [ ] Empty ballot
55
- - [x] Marked ballot
56
-
57
- Markdown:
58
-
59
- - [ ] Empty ballot
60
- - [x] Marked ballot
61
-
62
- ### Image placement
63
-
64
- Markdown:
65
-
66
- ![:Centered Image:](/img/image.png)
67
- ![Left Floating:](/img/image.png)
68
- ![:Right Floating](/img/image.png)
69
- Image centered above.
70
- Image to the left.
71
- Image to the right.
72
- And set a HR bar below.
73
- ---
74
-
75
- ### Image size
76
-
77
- Markdown:
78
-
79
- ![In alt text say 100x100](/img/image.png)
80
-
81
- ### Image link
82
-
83
- Markdown:
84
-
85
- ![Alt text](/img/image.png /href_to/page)
86
-
87
- ### Forms
88
-
89
- Markdown:
90
-
91
- A get method form without submit button on single field:
92
- ! Google:[q] (https://www.google.com/search)
93
-
94
- A post method form with a password field
95
- and a submit button due to multiple fields.
96
- Note the `*` in front of `pwd` marking it as a password field,
97
- and the ending `!` marking the route as a post:
98
- ! Username:[user] Password:[*pwd] (/login.html)!
99
-
100
- A multi-line form with default entry and hidden field:
101
- ! Name:[user] [status="active"] (/register.html)
102
- ! Address:[address]
103
- ! Code:[code="1234"]
104
-
105
- A selection list:
106
- ! Color:[color="Red","White","Blue"]
107
-
108
- ### Template substitutions
109
-
110
- Markdown:
111
-
112
- ! template = "* [&query;](https://www.google.com/search?q=&QUERY;)"
113
- ! regx = /^\* (?<query>.*)$/
114
- * Grumpy Cat
115
- * It's over 9000!
116
-
117
- Template clears after first non-match.
118
- Note: on upcased keys, value is CGI escaped.
119
-
120
- ### Split table
121
-
122
- <table><tr><td>
123
- <p>
124
- Top left
125
- </p>
126
- </td><td>
127
- <p>
128
- Top center
129
- </p>
130
- </td><td>
131
- <p>
132
- Top right
133
- </p>
134
- </td></tr><tr><td>
135
- <p>
136
- Middle left
137
- </p>
138
- </td><td>
139
- <p>
140
- Middle center
141
- </p>
142
- </td><td>
143
- <p>
144
- Middle left
145
- </p>
146
- </td></tr><tr><td>
147
- <p>
148
- Bottom left
149
- </p>
150
- </td><td>
151
- <p>
152
- Bottom center
153
- </p>
154
- </td><td>
155
- <p>
156
- Bottom right
157
- </p>
158
- </td></tr></table>
159
-
160
- Markdown:
161
-
162
- |:
163
- Top left
164
- |
165
- Top center
166
- |
167
- Top right
168
- :|:
169
- Middle left
170
- |
171
- Middle center
172
- |
173
- Middle left
174
- :|:
175
- Bottom left
176
- |
177
- Bottom center
178
- |
179
- Bottom right
180
- :|
181
-
182
- ### Inline links, code, bold, italic, strikes, and underline
183
-
184
- <p>
185
- The <b>bold</b> and <i>italics</i> <s>strikes</s> at <u>underlined</u>, while a
186
- <a href="#Markita">link to #Markita</a>
187
- sees the <code>~ code ~ "a*b*c"</code> to
188
- <a href="https://github.com">https://github.com</a>.
189
- </p>
190
-
191
- Markdown:
192
-
193
- The *bold* and "italics" ~strikes~ at _underlined_,
194
- while a [link to #Markita](#Markita)
195
- sees the `~ code ~ "a*b*c"` to [https://github.com].
196
-
197
- ### Lists: ordered, un-ordered, definitions
52
+ * `#` Headers with link anchors
53
+ * `>` Block-quotes nests up to level three
54
+ * &#96;&#96;&#96; Code section highlighted by [Rouge](https://github.com/rouge-ruby/rouge)
55
+ * PRE-forms on text starting with four spaces
56
+ * Tables
57
+ * Script section pass through starts with `^<script` and ends with `^</script>`
58
+ * HTML pass through on `/^<.*>$/` lines
59
+ * And more...
60
+
61
+ ### Horizontal rule with meta-data
62
+
63
+ * If `Title` is set via meta-data, the server will set the page's title to that
64
+ * One can use numbers to reference long URLs
65
+ ```markdown
66
+ ---
67
+ Title: Markita
68
+ 1: https://github.com/carlosjhr64/markita
69
+ ---
70
+ [Markita](1)
71
+ ```
72
+ ### Attributes
73
+ ```markdown
74
+ {: style="color: blue;"}
75
+ You can set the attributes for most blocks.
76
+ ```
77
+ ### Lists
198
78
 
79
+ One can nest lists up to 3 levels:
80
+ ```markdown
81
+ {: style="color: red;"}{: style="color: green;"}{: style="color: blue;"}
199
82
  1. One
200
83
  2. Two
201
-
202
- * Point A
203
- * Point B
204
-
205
- <dl>
206
- <dt>Word</dt>
207
- <dd>Definition of the word</dd>
208
- <dt>Symbol</dt>
209
- <dd>Usage for the symbol</dd>
210
- </dl>
211
-
212
- Markdown:
213
-
214
- 1. One
215
- 2. Two
216
-
217
- * Point A
218
- * Point B
219
-
220
- + Word: Definition of the word
221
- + Symbol:
222
- + Usage for the symbol
223
-
224
- ### Block-quote
225
-
226
- Like Hamlet says...
227
- > To be or not to be...
228
- > That is the question!
229
-
230
- Markdown:
231
-
232
- Like Hamlet says...
233
- > To be or not to be...
234
- > That is the question!
235
-
236
- ### Code
237
- ```ruby
238
- def wut
239
- puts "Wut?"
240
- end
84
+ * ABC
85
+ - [ ] Empty ballot
86
+ - [x] Marked ballot
87
+ * XYZ
88
+ 3. Three
241
89
  ```
242
- Markdown:
90
+ ### Definitions
91
+ ```markdown
92
+ + Word: Definition
93
+ + Slang:
94
+ + Define slang
95
+ ```
96
+ ### Code
243
97
 
244
98
  ```ruby
245
99
  def wut
@@ -253,62 +107,152 @@ Markdown:
253
107
  | ------: | ----: | :----: | :------------ |
254
108
  | 1 | 1.0 | $ | The word |
255
109
  | 1234 | 12.3 | & | On the street |
110
+ ```markdown
111
+ | Integer | Float | Symbol | Word |
112
+ | ------: | ----: | :----: | :------------ |
113
+ | 1 | 1.0 | $ | The word |
114
+ | 1234 | 12.3 | & | On the street |
115
+ ```
116
+ ### Splits table
256
117
 
257
- Markdown:
258
-
259
- | Integer | Float | Symbol | Word |
260
- | ------: | ----: | :----: | :------------ |
261
- | 1 | 1.0 | $ | The word |
262
- | 1234 | 12.3 | & | On the street |
263
-
264
- ### Attributes
265
-
266
- Markdown:
267
-
268
- {: style="color: blue;"}
269
- You can set the attributes for most blocks.
118
+ <table><tr><td>
119
+ <p> Top left </p>
120
+ </td><td>
121
+ <p> Top center </p>
122
+ </td><td>
123
+ <p> Top right </p>
124
+ </td></tr><tr><td>
125
+ <p> Middle left </p>
126
+ </td><td>
127
+ <p> Middle center </p>
128
+ </td><td>
129
+ <p> Middle left </p>
130
+ </td></tr><tr><td>
131
+ <p> Bottom left </p>
132
+ </td><td>
133
+ <p> Bottom center </p>
134
+ </td><td>
135
+ <p> Bottom right </p>
136
+ </td></tr></table>
270
137
 
138
+ ```markdown
139
+ |:
140
+ Top left
141
+ |
142
+ Top center
143
+ |
144
+ Top right
145
+ :|:
146
+ Middle left
147
+ |
148
+ Middle center
149
+ |
150
+ Middle left
151
+ :|:
152
+ Bottom left
153
+ |
154
+ Bottom center
155
+ |
156
+ Bottom right
157
+ :|
158
+ ```
159
+ ### Image placement
160
+ ```markdown
161
+ ![:Centered Image:](/img/image.png)
162
+ ![Left Floating:](/img/image.png)
163
+ ![:Right Floating](/img/image.png)
164
+ Image centered above.
165
+ Image to the left.
166
+ Image to the right.
167
+ ```
168
+ ### Image size
169
+ ```markdown
170
+ ![In alt text say 100x100](/img/image.png)
171
+ ```
172
+ ### Image link
173
+ ```markdown
174
+ ![Alt text](/img/image.png /href_to/page)
175
+ ```
271
176
  ### Embed text
272
-
273
- Markdown:
274
-
275
- !> /path-to/ascii_art.txt
276
-
177
+ ```markdown
178
+ !> /path-to/ascii_art.txt
179
+ ```
277
180
  Useful for ASCII art.
278
181
  Unless an `*.html` file, the text is embedded in `pre` tags.
279
182
  Further more unless a `*.txt` file, the text is embedded in `code` tags.
280
183
 
281
- ### Emojis
282
-
283
- I :heart: to :laughing:!
284
-
285
- Markdown:
184
+ ### Footnotes
185
+ ```markdown
186
+ There once was a man from Nantucket[^1]
187
+ Who kept all his cash[^2] in a bucket.
188
+ But his daughter, named Nan,
189
+ Ran away with a man
190
+ And as for the bucket, Natucket.[^3]
191
+
192
+ [^1]: Nantucket is an island in the U.S. state of Massachusetts.
193
+ [^2]: Cash is money in currency.
194
+ [^3]: Read as "Nan took it."
195
+ ```
196
+ ### Forms
197
+ ```markdown
198
+ A get method form without submit button on single field:
199
+ ! Google:[q] (https://www.google.com/search)
200
+
201
+ A post method form with a password field
202
+ and a submit button due to multiple fields.
203
+ Note the `*` in front of `pwd` marking it as a password field,
204
+ and the ending `!` marking the route as a post:
205
+ ! Username:[user] Password:[*pwd] (/login.html)!
206
+
207
+ A multi-line form with default entry and hidden field:
208
+ ! Name:[user] [status="active"] (/register.html)
209
+ ! Address:[address]
210
+ ! Code:[code="1234"]
211
+
212
+ A selection list:
213
+ ! Color:[color="Red","White","Blue"]
214
+ ```
215
+ ### Template substitutions
216
+ ```markdown
217
+ ! template = "* [&query;](https://www.google.com/search?q=&QUERY;)"
218
+ ! regx = /^\* (?<query>.*)$/
219
+ * Grumpy Cat
220
+ * It's over 9000!
221
+ ```
222
+ Template clears after first non-match.
223
+ Note: on upcased keys, value is CGI escaped.
286
224
 
287
- I :heart: to :laughing:!
225
+ ### Inline links, code, bold, italic, strikes, and underline
288
226
 
289
- ### Footnotes
227
+ The <b>bold</b> and <i>italics</i> <s>strikes</s> at <u>underlined</u>,
228
+ while a [link to #Markita](#Markita)
229
+ sees the `~ code ~ "a*b*c"` to https://github.com.
230
+ ```markdown
231
+ The *bold* and "italics" ~strikes~ at _underlined_,
232
+ while a [link to #Markita](#Markita)
233
+ sees the `~ code ~ "a*b*c"` to https://github.com.
234
+ ```
235
+ ### Entity escapes
290
236
 
291
- Markdown:
237
+ When you want to escape the inline substitutions or HTML tags, use backslash:
292
238
 
293
- There once was a man from Nantucket[^1]
294
- Who kept all his cash[^2] in a bucket.
295
- But his daughter, named Nan,
296
- Ran away with a man
297
- And as for the bucket, Natucket.[^3]
239
+ * &#92;&#60; &#92;&#62; &#92;&#42; &#92;&#34; &#92;&#126; &#92;&#96; &#92;&#38; &#92;&#59; &#92;&#92;
298
240
 
299
- [^1]: Nantucket is an island in the U.S. state of Massachusetts.
300
- [^2]: Cash is money in currency.
301
- [^3]: Read as "Nan took it."
241
+ ### Emojis
302
242
 
303
- ### Meta-data
243
+ I :heart: to :laughing:!
244
+ ```markdown
245
+ I :heart: to :laughing:!
246
+ ```
247
+ ### Superscript and subscript
304
248
 
305
- Markdown:
249
+ This is <sup>superscript</sup> and this is <sub>subscript</sub>.
250
+ ```markdown
251
+ This is \^(superscript) and this is \(subscript).
252
+ ```
253
+ ### It's all Ruby!
306
254
 
307
- ---
308
- Title: The Title You Want For Your Page
309
- 1: https://way.to/create/ref/links
310
- ---
311
- You can now [link](1) with a reference number.
255
+ Add your own custom features.
312
256
 
313
257
  ## HOW-TOs
314
258
 
@@ -351,7 +295,7 @@ $ GET https://raw.githubusercontent.com/carlosjhr64/markita/main/plug/todotxt.rb
351
295
  ```
352
296
  ## LICENSE
353
297
 
354
- Copyright 2023 CarlosJHR64
298
+ Copyright (c) 2024 CarlosJHR64
355
299
 
356
300
  Permission is hereby granted, free of charge,
357
301
  to any person obtaining a copy of this software and
data/bin/markita CHANGED
@@ -2,36 +2,36 @@
2
2
  require 'help_parser'
3
3
  require 'markita'
4
4
 
5
- OPTIONS = HelpParser[Markita::VERSION, <<HELP]
6
- Usage:
7
- markita [:options+]
8
- Options:
9
- --root=DIRECTORY \t ~/vimwiki
10
- --bind=BIND \t 0.0.0.0
11
- --port=PORT \t 8080
12
- --theme=THEME \t base16.light
13
- --allowed=IPS
14
- --no_about
15
- --no_favicon
16
- --no_highlight
17
- --no_login
18
- --no_navigation
19
- --no_plugs
20
- --no_readme
21
- Exclusive:
22
- no_login allowed
23
- Types:
24
- DIRECTORY /^~?[\\/\\w\\.]+$/
25
- BIND /^[\\w\\.]+$/
26
- PORT /^\\d+$/
27
- IPS /^[\\d\\.\\,]+$/
28
- THEME /^[\\w\\.]+$/
29
- # NOTE:
30
- # Assuming site is in ~/vimwiki,
31
- # when ~/vimwiki/.valid-id is set with a sha256sum of a password,
32
- # that password will restrict the site.
33
- # Allowed IPs bypass the need for site password
34
- # when the site is accessed from those locations.
5
+ OPTIONS = HelpParser[Markita::VERSION, <<~HELP]
6
+ Usage:
7
+ markita [:options+]
8
+ Options:
9
+ --root=DIRECTORY \t ~/vimwiki
10
+ --bind=BIND \t 0.0.0.0
11
+ --port=PORT \t 8080
12
+ --theme=THEME \t base16.light
13
+ --allowed=IPS
14
+ --no_about
15
+ --no_favicon
16
+ --no_highlight
17
+ --no_login
18
+ --no_navigation
19
+ --no_plugs
20
+ --no_readme
21
+ Exclusive:
22
+ no_login allowed
23
+ Types:
24
+ DIRECTORY /^~?[\\/\\w\\.]+$/
25
+ BIND /^[\\w\\.]+$/
26
+ PORT /^\\d+$/
27
+ IPS /^[\\d\\.\\,]+$/
28
+ THEME /^[\\w\\.]+$/
29
+ # NOTE:
30
+ # Assuming site is in ~/vimwiki,
31
+ # when ~/vimwiki/.valid-id is set with a sha256sum of a password,
32
+ # that password will restrict the site.
33
+ # Allowed IPs bypass the need for site password
34
+ # when the site is accessed from those locations.
35
35
  HELP
36
36
  begin
37
37
  Markita.run!
@@ -41,8 +41,8 @@ rescue LoadError
41
41
  rescue RuntimeError
42
42
  HelpParser::REDTTY["#{$!.class}: #{$!.message}"]
43
43
  exit 65
44
- rescue Exception
45
- $stderr.puts $!.backtrace
44
+ rescue
45
+ warn $!.backtrace
46
46
  HelpParser::REDTTY["#{$!.class}: #{$!.message}"]
47
47
  exit 70
48
48
  end
data/lib/markita/base.rb CHANGED
@@ -1,42 +1,34 @@
1
1
  module Markita
2
2
  class Base < Sinatra::Base
3
- set bind: OPTIONS&.bind || '0.0.0.0'
4
- set port: OPTIONS&.port || '8080'
5
3
  set sessions: true
4
+ set bind: OPTIONS.bind || BIND
5
+ set port: OPTIONS.port || PORT
6
+ set server: SERVER
7
+ set server_settings: SERVER_SETTINGS if SERVER_SETTINGS
6
8
 
7
- def Base.run!
8
- puts "#{$0}-#{VERSION}"
9
- super do |server|
10
- if ['.cert.crt', '.pkey.pem'].all?{ File.exist? File.join(ROOT, _1)}
11
- server.ssl = true
12
- server.ssl_options = {
13
- :cert_chain_file => File.join(ROOT, '.cert.crt'),
14
- :private_key_file => File.join(ROOT, '.pkey.pem'),
15
- :verify_peer => false,
16
- }
17
- end
18
- end
9
+ def self.run!
10
+ super {SERVER_CONFIG[_1]}
19
11
  end
20
12
 
21
13
  get PAGE_KEY do |key|
22
- filepath = File.join ROOT, key+'.md'
23
- raise Sinatra::NotFound unless File.exist? filepath
14
+ filepath = File.join ROOT, key+MDX
15
+ raise Sinatra::NotFound unless File.exist? filepath
24
16
  Markdown.new(key).filepath filepath
25
17
  end
26
18
 
27
19
  get SEND_FILE do |path|
28
- pass unless params.length==1 and
29
- filepath = File.join(ROOT, path) and
20
+ pass unless params.length==1 &&
21
+ (filepath=File.join ROOT, path) &&
30
22
  File.exist?(filepath)
31
23
  send_file filepath
32
24
  end
33
25
 
34
26
  get '/' do
35
- filepath = File.join ROOT, 'index.md'
27
+ filepath = File.join ROOT, INDEX+MDX
36
28
  if File.exist? filepath
37
- Markdown.new('index').filepath filepath
29
+ Markdown.new(INDEX).filepath filepath
38
30
  else
39
- redirect '/about.html' unless OPTIONS&.no_about
31
+ redirect '/about.html' unless OPTIONS.no_about
40
32
  raise Sinatra::NotFound
41
33
  end
42
34
  end
@@ -1,22 +1,44 @@
1
1
  module Markita
2
- OPTIONS ||= nil
3
-
4
2
  HEADER_LINKS = ''
5
- NAVIGATION = ''
3
+ NAVIGATION = ''
4
+
5
+ BIND = '0.0.0.0'
6
+ PORT = '8080'
7
+ SERVER = 'webrick'
8
+
9
+ MDX = '.md'
10
+ INDEX = 'index'
11
+
12
+ ROOT = File.expand_path OPTIONS.root || '~/vimwiki'
13
+ raise 'Missing site root directory: '+ROOT unless File.directory? ROOT
14
+
15
+ SSL_CERTIFICATE = File.join(ROOT, '.cert.crt')
16
+ SSL_PRIVATE_KEY = File.join(ROOT, '.pkey.pem')
6
17
 
7
- ROOT = File.expand_path OPTIONS&.root || '~/vimwiki'
8
- raise "Missing site root directory: "+ROOT unless File.directory? ROOT
9
- APPDIR = File.dirname File.dirname __dir__
18
+ SERVER_SETTINGS = [SSL_CERTIFICATE, SSL_PRIVATE_KEY].all?{File.exist?_1} ?
19
+ { SSLEnable: true,
20
+ SSLVerifyClient: OpenSSL::SSL::VERIFY_NONE,
21
+ SSLCertificate: OpenSSL::X509::Certificate.new(File.read SSL_CERTIFICATE),
22
+ SSLPrivateKey: OpenSSL::PKey::RSA.new(File.read SSL_PRIVATE_KEY) } : nil
23
+
24
+ SERVER_CONFIG = lambda do |server|
25
+ puts "#{$0}-#{VERSION}"
26
+ puts "Sinatra-#{Sinatra::VERSION} using #{server.class}"
27
+ end
28
+
29
+ APPDIR = File.dirname __dir__, 2
10
30
  APPDATA = File.join APPDIR, 'data'
31
+
11
32
  PATH = lambda do |basename|
12
33
  [ROOT, APPDATA].map{ File.join _1, basename}.detect{ File.exist? _1}
13
34
  end
35
+
14
36
  NOT_FOUND = File.read PATH['not_found.html']
15
37
 
16
38
  EMOJIS = Hash[*File.read(PATH['emojis.tsv']).split(/\s+/)]
17
39
 
18
- PAGE_KEY = %r{/(\w[\w\/\-]*\w)}
19
- SEND_FILE = %r{/(\w[\w\/\-]*\w\.\w+)}
40
+ PAGE_KEY = %r{/(\w[\w/-]*\w)}
41
+ SEND_FILE = %r{/(\w[\w/-]*\w\.\w+)}
20
42
 
21
43
  START_TIME = Time.now
22
44
  end
data/lib/markita/html.rb CHANGED
@@ -1,21 +1,21 @@
1
1
  module Markita
2
2
  module HTML
3
- def HTML.header(key)
3
+ def self.header(title)
4
4
  <<~HEADER
5
5
  <!DOCTYPE html>
6
6
  <html>
7
7
  <head>
8
- <title>#{key}</title>
9
- #{HEADER_LINKS}</head>
8
+ <title>#{title}</title>#{HEADER_LINKS}
9
+ </head>
10
10
  <body>
11
11
  HEADER
12
12
  end
13
13
 
14
- def HTML.navigation
14
+ def self.navigation
15
15
  NAVIGATION
16
16
  end
17
17
 
18
- def HTML.footer
18
+ def self.footer
19
19
  <<~FOOTER
20
20
  </body>
21
21
  </html>