mamemose 0.4.0.2 → 0.4.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 545fbe99d10fb35061bbfec50f5aefd514599e70
4
+ data.tar.gz: a25605115077b430b9edbad9ed152f054abea889
5
+ SHA512:
6
+ metadata.gz: 5c7416e49f4fe27d1675e227092003fa9af7de3bd3545518de4bb32c747d5fd0634a548ba74d85a998e5e44b481765862690e48395d5c6ddeb71fe6507ed8cd5
7
+ data.tar.gz: 4f41615561ed6da7426a403bbc400e0bad18e4851c18208a0e65e40fa7a3377d84176592b214f66f3d26340d1cee86cae67af37e29b9517ea45a4492673a2b72
data/README.md CHANGED
@@ -182,18 +182,17 @@ RECENT_NUM = 0
182
182
 
183
183
  # すべてのページで MathJax が使えるように
184
184
  CUSTOM_HEADER = <<HEADER
185
- <script type="text/javascript"
186
- src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML">
185
+ <script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML">
187
186
  </script>
188
187
  HEADER
189
188
 
190
189
  # すべてのページで SyntaxHighlighter が使えるように
191
190
  host = "http://alexgorbatchev.com/pub/sh/current" # 変数も使えます
192
191
  CUSTOM_FOOTER = <<FOOTER
193
- <link href="#{host}/styles/shCoreDefault.css" rel="stylesheet" type="text/css" />
194
- <script src="#{host}/scripts/shCore.js" type="text/javascript"></script>
195
- <script src="#{host}/scripts/shAutoloader.js" type="text/javascript"></script>
196
- <script type="text/javascript">
192
+ <link href="#{host}/styles/shCoreDefault.css" rel="stylesheet" />
193
+ <script src="#{host}/scripts/shCore.js"></script>
194
+ <script src="#{host}/scripts/shAutoloader.js"></script>
195
+ <script>
197
196
  SyntaxHighlighter.autoloader(
198
197
  'AS3 as3 #{host}/scripts/shBrushAS3.js',
199
198
  'AppleScript applescript #{host}/scripts/shBrushAppleScript.js',
@@ -0,0 +1,221 @@
1
+ module Mamemose::HTML
2
+ def header_html(title, fullpath)
3
+ html = <<HTML
4
+ <!DOCTYPE HTML>
5
+ <html>
6
+ <head>
7
+ <meta http-equiv="Content-Type" content="#{CONTENT_TYPE}" />
8
+ <title>#{title}</title>
9
+ <style><!--
10
+ body {
11
+ margin: auto;
12
+ padding: 0 2em;
13
+ max-width: 80%;
14
+ border-left: 1px solid black;
15
+ border-right: 1px solid black;
16
+ font-size: 100%;
17
+ line-height: 140%;
18
+ }
19
+ pre {
20
+ border: 1px solid #090909;
21
+ background-color: #f8f8f8;
22
+ padding: 0.5em;
23
+ margin: 0.5em 1em;
24
+ }
25
+ code {
26
+ border: 1px solid #cccccc;
27
+ background-color: #f8f8f8;
28
+ padding: 2px 0.5em;
29
+ margin: 0 0.5em;
30
+ }
31
+ a {
32
+ text-decoration: none;
33
+ }
34
+ a:link, a:visited, a:hover {
35
+ color: #4444cc;
36
+ }
37
+ a:hover {
38
+ text-decoration: underline;
39
+ }
40
+ h1, h2, h3 {
41
+ font-weight: bold;
42
+ color: #2f4f4f;
43
+ }
44
+ h1 {
45
+ font-size: 200%;
46
+ line-height: 100%;
47
+ margin: 1em 0;
48
+ border-bottom: 1px solid #2f4f4f;
49
+ }
50
+ h2 {
51
+ font-size: 175%;
52
+ line-height: 100%;
53
+ margin: 1em 0;
54
+ padding-left: 0.5em;
55
+ border-left: 0.5em solid #2f4f4f;
56
+ }
57
+ h3 {
58
+ font-size: 150%;
59
+ line-height: 100%;
60
+ margin: 1em 0;
61
+ }
62
+ h4, h5 {
63
+ font-weight: bold;
64
+ color: #000000;
65
+ margin: 1em 0 0.5em;
66
+ }
67
+ h4 { font-size: 125% }
68
+ h5 { font-size: 100% }
69
+ p {
70
+ margin: 0.7em 1em;
71
+ text-indent: 1em;
72
+ }
73
+ div.footnotes {
74
+ padding-top: 1em;
75
+ color: #090909;
76
+ }
77
+ div#header {
78
+ margin-top: 1em;
79
+ padding-bottom: 1em;
80
+ border-bottom: 1px dotted black;
81
+ }
82
+ div#header > form {
83
+ display: float;
84
+ float: right;
85
+ text-align: right;
86
+ }
87
+ a.filename {
88
+ color: #666666;
89
+ }
90
+ footer {
91
+ border-top: 1px dotted black;
92
+ padding: 0.5em;
93
+ font-size: 80%;
94
+ text-align: right;
95
+ margin: 5em 0 1em;
96
+ }
97
+ blockquote {
98
+ margin: 1em 3em;
99
+ border: 2px solid #999;
100
+ padding: 0.3em 0;
101
+ background-color: #f3fff3;
102
+ }
103
+ hr {
104
+ height: 1px;
105
+ border: none;
106
+ border-top: 1px solid black;
107
+ }
108
+ table {
109
+ padding: 0;
110
+ margin: 1em 2em;
111
+ border-spacing: 0;
112
+ border-collapse: collapse;
113
+ }
114
+ table tr {
115
+ border-top: 1px solid #cccccc;
116
+ background-color: white;
117
+ margin: 0;
118
+ padding: 0;
119
+ }
120
+ table tr:nth-child(2n) {
121
+ background-color: #f8f8f8;
122
+ }
123
+ table tr th {
124
+ font-weight: bold;
125
+ border: 1px solid #cccccc;
126
+ text-align: left;
127
+ margin: 0;
128
+ padding: 6px 13px;
129
+ }
130
+ table tr td {
131
+ border: 1px solid #cccccc;
132
+ text-align: left;
133
+ margin: 0;
134
+ padding: 6px 13px;
135
+ }
136
+ table tr th :first-child, table tr td :first-child {
137
+ margin-top: 0;
138
+ }
139
+ table tr th :last-child, table tr td :last-child {
140
+ margin-bottom: 0;
141
+ }
142
+ --></style>
143
+ <script>
144
+ function copy(text) {
145
+ prompt("Copy filepath below:", text);
146
+ }
147
+ </script>
148
+ <script>
149
+ (function(){
150
+ var fullpath = "#{fullpath}";
151
+ ws = new WebSocket("ws://#{HOST}:#{WS_PORT}");
152
+ ws.onopen = function() {
153
+ console.log("WebSocket (port=#{WS_PORT}) connected: " + fullpath);
154
+ ws.send(fullpath);
155
+ };
156
+ ws.onmessage = function(evt) {
157
+ console.log("received: " + evt.data);
158
+ if (evt.data == "updated") {
159
+ console.log("update detected. reloading...");
160
+ location.reload();
161
+ }
162
+ };
163
+ })();
164
+ </script>
165
+ #{CUSTOM_HEADER}
166
+ </head>
167
+ <body id="body">
168
+ #{CUSTOM_BODY}
169
+ HTML
170
+ return html
171
+ end
172
+
173
+ def search_form(path, q="")
174
+ link_str = ""
175
+ uri = ""
176
+ path.split('/').each do |s|
177
+ next if s == ''
178
+ uri += "/" + s
179
+ link_str += File::SEPARATOR + "<a href='#{uri}'>#{s}</a>"
180
+ end
181
+ link_str += " <a class='filename' href=\"javascript:copy('#{docpath(uri)}');\">[copy]</a>"
182
+ uri.gsub!('/'+File::basename(uri), "") if File.file?(fullpath(uri))
183
+ link_str = "<a href='/'>#{DOCUMENT_ROOT}</a>" + link_str
184
+ search_form = <<HTML
185
+ <form action="/search" method="get">
186
+ <input name="path" type="hidden" value="#{uri}" />
187
+ <input name="q" type="text" value="#{q}" size="24" />
188
+ <input type="submit" value="search" />
189
+ </form>
190
+ HTML
191
+ return "<div id=\"header\">#{link_str}#{search_form}</div>"
192
+ end
193
+
194
+ def footer_html(filepath=nil)
195
+ if filepath
196
+ updated = File.basename(filepath)\
197
+ + " [#{filesize(filepath)}]"\
198
+ + " / Last Updated: "\
199
+ + File.mtime(filepath).strftime("%Y-%m-%d %H:%M:%S")\
200
+ + " / "
201
+ else
202
+ updated = ""
203
+ end
204
+ html = <<HTML
205
+ #{CUSTOM_FOOTER}
206
+ <footer id="footer">
207
+ #{updated}
208
+ <a href="https://github.com/daimatz/mamemose">mamemose: Markdown memo server</a>
209
+ </footer>
210
+ </body>
211
+ </html>
212
+ HTML
213
+ return html
214
+ end
215
+
216
+ def link_list(title, link)
217
+ file = fullpath(link)
218
+ str = filesize(file)
219
+ return "- [#{title}](#{link}) <a class='filename' href=\"javascript:copy('#{docpath(link)}');\">[#{escaped_basename(link)}, #{str}]</a>\n"
220
+ end
221
+ end
@@ -1,5 +1,5 @@
1
1
  module Mamemose
2
- VERSION = "0.4.0.2"
2
+ VERSION = "0.4.0.3"
3
3
 
4
4
  module WebSocket
5
5
  VERSION = "0.1.0"
data/lib/mamemose.rb CHANGED
@@ -7,6 +7,7 @@ require 'htmlentities'
7
7
 
8
8
  require 'mamemose/version'
9
9
 
10
+ require 'mamemose/html'
10
11
  require 'mamemose/path'
11
12
 
12
13
  require 'mamemose/env'
@@ -21,6 +22,7 @@ end
21
22
 
22
23
  class Mamemose::Server
23
24
  include Mamemose::Path
25
+ include Mamemose::HTML
24
26
 
25
27
  def initialize(port)
26
28
  @mamemose = WEBrick::HTTPServer.new({ :Port => port ? port.to_i : PORT })
@@ -70,220 +72,6 @@ private
70
72
  @mamemose.shutdown
71
73
  end
72
74
 
73
- def header_html(title, fullpath)
74
- html = <<HTML
75
- <!DOCTYPE HTML>
76
- <html>
77
- <head>
78
- <meta http-equiv="Content-Type" content="#{CONTENT_TYPE}" />
79
- <title>#{title}</title>
80
- <style type="text/css"><!--
81
- body {
82
- margin: auto;
83
- padding: 0 2em;
84
- max-width: 80%;
85
- border-left: 1px solid black;
86
- border-right: 1px solid black;
87
- font-size: 100%;
88
- line-height: 140%;
89
- }
90
- pre {
91
- border: 1px solid #090909;
92
- background-color: #f8f8f8;
93
- padding: 0.5em;
94
- margin: 0.5em 1em;
95
- }
96
- code {
97
- border: 1px solid #cccccc;
98
- background-color: #f8f8f8;
99
- padding: 2px 0.5em;
100
- margin: 0 0.5em;
101
- }
102
- a {
103
- text-decoration: none;
104
- }
105
- a:link, a:visited, a:hover {
106
- color: #4444cc;
107
- }
108
- a:hover {
109
- text-decoration: underline;
110
- }
111
- h1, h2, h3 {
112
- font-weight: bold;
113
- color: #2f4f4f;
114
- }
115
- h1 {
116
- font-size: 200%;
117
- line-height: 100%;
118
- margin: 1em 0;
119
- border-bottom: 1px solid #2f4f4f;
120
- }
121
- h2 {
122
- font-size: 175%;
123
- line-height: 100%;
124
- margin: 1em 0;
125
- padding-left: 0.5em;
126
- border-left: 0.5em solid #2f4f4f;
127
- }
128
- h3 {
129
- font-size: 150%;
130
- line-height: 100%;
131
- margin: 1em 0;
132
- }
133
- h4, h5 {
134
- font-weight: bold;
135
- color: #000000;
136
- margin: 1em 0 0.5em;
137
- }
138
- h4 { font-size: 125% }
139
- h5 { font-size: 100% }
140
- p {
141
- margin: 0.7em 1em;
142
- text-indent: 1em;
143
- }
144
- div.footnotes {
145
- padding-top: 1em;
146
- color: #090909;
147
- }
148
- div#header {
149
- margin-top: 1em;
150
- padding-bottom: 1em;
151
- border-bottom: 1px dotted black;
152
- }
153
- div#header > form {
154
- display: float;
155
- float: right;
156
- text-align: right;
157
- }
158
- a.filename {
159
- color: #666666;
160
- }
161
- footer {
162
- border-top: 1px dotted black;
163
- padding: 0.5em;
164
- font-size: 80%;
165
- text-align: right;
166
- margin: 5em 0 1em;
167
- }
168
- blockquote {
169
- margin: 1em 3em;
170
- border: 2px solid #999;
171
- padding: 0.3em 0;
172
- background-color: #f3fff3;
173
- }
174
- hr {
175
- height: 1px;
176
- border: none;
177
- border-top: 1px solid black;
178
- }
179
- table {
180
- padding: 0;
181
- margin: 1em 2em;
182
- border-spacing: 0;
183
- border-collapse: collapse;
184
- }
185
- table tr {
186
- border-top: 1px solid #cccccc;
187
- background-color: white;
188
- margin: 0;
189
- padding: 0;
190
- }
191
- table tr:nth-child(2n) {
192
- background-color: #f8f8f8;
193
- }
194
- table tr th {
195
- font-weight: bold;
196
- border: 1px solid #cccccc;
197
- text-align: left;
198
- margin: 0;
199
- padding: 6px 13px;
200
- }
201
- table tr td {
202
- border: 1px solid #cccccc;
203
- text-align: left;
204
- margin: 0;
205
- padding: 6px 13px;
206
- }
207
- table tr th :first-child, table tr td :first-child {
208
- margin-top: 0;
209
- }
210
- table tr th :last-child, table tr td :last-child {
211
- margin-bottom: 0;
212
- }
213
- --></style>
214
- <script>
215
- function copy(text) {
216
- prompt("Copy filepath below:", text);
217
- }
218
- </script>
219
- <script>
220
- (function(){
221
- var fullpath = "#{fullpath}";
222
- ws = new WebSocket("ws://#{HOST}:#{WS_PORT}");
223
- ws.onopen = function() {
224
- console.log("WebSocket (port=#{WS_PORT}) connected: " + fullpath);
225
- ws.send(fullpath);
226
- };
227
- ws.onmessage = function(evt) {
228
- console.log("received: " + evt.data);
229
- if (evt.data == "updated") {
230
- console.log("update detected. reloading...");
231
- location.reload();
232
- }
233
- };
234
- })();
235
- </script>
236
- #{CUSTOM_HEADER}
237
- </head>
238
- <body>
239
- #{CUSTOM_BODY}
240
- HTML
241
- return html
242
- end
243
-
244
- def search_form(path, q="")
245
- link_str = ""
246
- uri = ""
247
- path.split('/').each do |s|
248
- next if s == ''
249
- uri += "/" + s
250
- link_str += File::SEPARATOR + "<a href='#{uri}'>#{s}</a>"
251
- end
252
- link_str += " <a class='filename' href=\"javascript:copy('#{docpath(uri)}');\">[copy]</a>"
253
- uri.gsub!('/'+File::basename(uri), "") if File.file?(fullpath(uri))
254
- link_str = "<a href='/'>#{DOCUMENT_ROOT}</a>" + link_str
255
- search_form = <<HTML
256
- <form action="/search" method="get">
257
- <input name="path" type="hidden" value="#{uri}" />
258
- <input name="q" type="text" value="#{q}" size="24" />
259
- <input type="submit" value="search" />
260
- </form>
261
- HTML
262
- return "<div id=\"header\">#{link_str}#{search_form}</div>"
263
- end
264
-
265
- def footer_html(filepath=nil)
266
- if filepath
267
- updated = File.basename(filepath)\
268
- + " [#{filesize(filepath)}]"\
269
- + " / Last Updated: "\
270
- + File.mtime(filepath).strftime("%Y-%m-%d %H:%M:%S")\
271
- + " / "
272
- else
273
- updated = ""
274
- end
275
- html = <<HTML
276
- #{CUSTOM_FOOTER}
277
- <footer>
278
- #{updated}
279
- <a href="https://github.com/daimatz/mamemose">mamemose: Markdown memo server</a>
280
- </footer>
281
- </body>
282
- </html>
283
- HTML
284
- return html
285
- end
286
-
287
75
  def req_search(req, res)
288
76
  query = req.query
289
77
  path = fullpath(query["path"])
@@ -419,12 +207,6 @@ HTML
419
207
  return {:dirs=>dirs, :markdowns=>markdowns, :others=>others}
420
208
  end
421
209
 
422
- def link_list(title, link)
423
- file = fullpath(link)
424
- str = filesize(file)
425
- return "- [#{title}](#{link}) <a class='filename' href=\"javascript:copy('#{docpath(link)}');\">[#{escaped_basename(link)}, #{str}]</a>\n"
426
- end
427
-
428
210
  def filesize(file)
429
211
  File.file?(file) ? sprintf("%.1fKB", File.size(file) / 1024.0) : "dir"
430
212
  end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mamemose
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0.2
5
- prerelease:
4
+ version: 0.4.0.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - daimatz
@@ -14,65 +13,57 @@ dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: redcarpet
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: 2.2.0
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: 2.2.0
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: htmlentities
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: 4.3.0
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: 4.3.0
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: thor
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: 0.17.0
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: 0.17.0
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: em-websocket
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: 0.5.0
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: 0.5.0
78
69
  description: Markdown memo server
@@ -94,6 +85,7 @@ files:
94
85
  - index.png
95
86
  - lib/mamemose.rb
96
87
  - lib/mamemose/env.rb
88
+ - lib/mamemose/html.rb
97
89
  - lib/mamemose/path.rb
98
90
  - lib/mamemose/util.rb
99
91
  - lib/mamemose/version.rb
@@ -102,26 +94,25 @@ files:
102
94
  - sample.png
103
95
  homepage: https://github.com/daimatz/mamemose
104
96
  licenses: []
97
+ metadata: {}
105
98
  post_install_message:
106
99
  rdoc_options: []
107
100
  require_paths:
108
101
  - lib
109
102
  required_ruby_version: !ruby/object:Gem::Requirement
110
- none: false
111
103
  requirements:
112
- - - ! '>='
104
+ - - '>='
113
105
  - !ruby/object:Gem::Version
114
106
  version: '0'
115
107
  required_rubygems_version: !ruby/object:Gem::Requirement
116
- none: false
117
108
  requirements:
118
- - - ! '>='
109
+ - - '>='
119
110
  - !ruby/object:Gem::Version
120
111
  version: '0'
121
112
  requirements: []
122
113
  rubyforge_project:
123
- rubygems_version: 1.8.23
114
+ rubygems_version: 2.0.0
124
115
  signing_key:
125
- specification_version: 3
116
+ specification_version: 4
126
117
  summary: Markdown memo server
127
118
  test_files: []