mamemose 0.1.2 → 0.1.3
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.
- data/lib/mamemose/version.rb +1 -1
- data/lib/mamemose.rb +36 -17
- metadata +2 -2
data/lib/mamemose/version.rb
CHANGED
data/lib/mamemose.rb
CHANGED
@@ -42,7 +42,7 @@ class Mamemose::Server
|
|
42
42
|
res['Expires'] = '0'
|
43
43
|
if req.path =~ /^\/search/
|
44
44
|
query = req.query
|
45
|
-
path =
|
45
|
+
path = fullpath(query["path"])
|
46
46
|
q = URI.decode(query["q"])
|
47
47
|
q = q.force_encoding('utf-8') if q.respond_to?(:force_encoding)
|
48
48
|
|
@@ -61,11 +61,11 @@ class Mamemose::Server
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
title = "Search #{q} in #{
|
64
|
+
title = "Search #{q} in #{showpath(query['path'])}"
|
65
65
|
title = title.force_encoding('utf-8') if title.respond_to?(:force_encoding)
|
66
66
|
body = title + "\n====\n"
|
67
67
|
found.reject{|key, value| value == []}.sort.each do |key, value|
|
68
|
-
body += "\n### in <a href='#{uri(key)}'>#{uri(key)}
|
68
|
+
body += "\n### in <a href='#{uri(key)}'>#{escape(uri(key))}</a>\n"
|
69
69
|
value.each do |v|
|
70
70
|
body += link_list(v[0], v[1])
|
71
71
|
end
|
@@ -76,10 +76,10 @@ class Mamemose::Server
|
|
76
76
|
|
77
77
|
else
|
78
78
|
|
79
|
-
filename =
|
79
|
+
filename = fullpath(req.path)
|
80
80
|
|
81
81
|
if File.directory?(filename) then
|
82
|
-
title = "Index of #{
|
82
|
+
title = "Index of #{showpath(req.path)}"
|
83
83
|
body = title + "\n====\n"
|
84
84
|
|
85
85
|
recent = []
|
@@ -96,7 +96,8 @@ class Mamemose::Server
|
|
96
96
|
recent = recent.map{|file|
|
97
97
|
if markdown?(file) then
|
98
98
|
[get_title(file, open(file).read), uri(file)]
|
99
|
-
else
|
99
|
+
else
|
100
|
+
[escaped_basename(file), uri(file)]
|
100
101
|
end
|
101
102
|
}
|
102
103
|
else
|
@@ -106,14 +107,14 @@ class Mamemose::Server
|
|
106
107
|
Dir.entries(filename).each do |i|
|
107
108
|
next if ignore?(i)
|
108
109
|
link = uri(File.join(filename, i))
|
109
|
-
if File.directory?(
|
110
|
-
dirs << [
|
110
|
+
if File.directory?(fullpath(link)) then
|
111
|
+
dirs << [escaped_basename(link) + File::SEPARATOR, link]
|
111
112
|
elsif markdown?(link)
|
112
|
-
File.open(
|
113
|
+
File.open(fullpath(link)) do |f|
|
113
114
|
markdowns << [get_title(link, f.read), link]
|
114
115
|
end
|
115
116
|
else
|
116
|
-
files << [
|
117
|
+
files << [escaped_basename(link), link]
|
117
118
|
end
|
118
119
|
end
|
119
120
|
|
@@ -137,7 +138,7 @@ class Mamemose::Server
|
|
137
138
|
if markdown?(req.path)
|
138
139
|
str = file.read
|
139
140
|
title = get_title(filename, str)
|
140
|
-
res.body = header_html(title, req.path) + markdown(str) + footer_html(
|
141
|
+
res.body = header_html(title, req.path) + markdown(str) + footer_html(fullpath(req.path))
|
141
142
|
res.content_type = CONTENT_TYPE
|
142
143
|
else
|
143
144
|
res.body = file.read
|
@@ -277,7 +278,7 @@ HTML
|
|
277
278
|
link_str += File::SEPARATOR + "<a href='#{uri}'>#{s}</a>"
|
278
279
|
end
|
279
280
|
link_str += " <a class='filename' href=\"javascript:copy('#{docpath(uri)}');\">[copy]</a>"
|
280
|
-
uri.gsub!('/'+File::basename(uri), "") if File.file?(
|
281
|
+
uri.gsub!('/'+File::basename(uri), "") if File.file?(fullpath(uri))
|
281
282
|
link_str = "<a href='/'>#{DOCUMENT_ROOT}</a>" + link_str
|
282
283
|
search_form = <<HTML
|
283
284
|
<form action="/search" method="get">
|
@@ -303,23 +304,41 @@ HTML
|
|
303
304
|
return html
|
304
305
|
end
|
305
306
|
|
307
|
+
# returns escaped characters so that the markdown parser doesn't interpret it has special meaning.
|
308
|
+
def escape(text)
|
309
|
+
return text.gsub(/[\`*_{}\[\]()#+\-.!]/, "\\\\\\0")
|
310
|
+
end
|
311
|
+
|
312
|
+
# returns /-rooted path. eg. /path/to/my_document.md
|
306
313
|
def uri(path)
|
307
314
|
s = File::expand_path(path).gsub(DIR, "").gsub(File::SEPARATOR, '/')
|
308
315
|
return s == '' ? '/' : s
|
309
316
|
end
|
310
317
|
|
311
|
-
|
318
|
+
# returns fullpath. eg. /home/daimatz/Dropbox/memo/path/to/my_document.md
|
319
|
+
def fullpath(uri)
|
312
320
|
return File.join(DIR, uri.gsub('/', File::SEPARATOR))
|
313
321
|
end
|
314
322
|
|
323
|
+
# returns DOCUMENT_ROOT-rooted path. eg. ~/Dropbox/memo/path/to/my_document.md
|
315
324
|
def docpath(uri)
|
316
325
|
return File.join(DOCUMENT_ROOT, uri.gsub('/', File::SEPARATOR)).gsub(/#{File::SEPARATOR}$/, "")
|
317
326
|
end
|
318
327
|
|
328
|
+
# returns DOCUMENT_ROOT-rooted path, but escaped. eg. ~/Dropbox/memo/path/to/my\_document.md
|
329
|
+
# used in user-viewable (HTML) context.
|
330
|
+
def showpath(uri)
|
331
|
+
return escape(docpath(uri))
|
332
|
+
end
|
333
|
+
|
334
|
+
def escaped_basename(filename)
|
335
|
+
return escape(File::basename(filename))
|
336
|
+
end
|
337
|
+
|
319
338
|
def link_list(title, link)
|
320
|
-
file =
|
339
|
+
file = fullpath(link)
|
321
340
|
str = File.file?(file) ? sprintf("%.1fKB", File.size(file) / 1024.0) : "dir"
|
322
|
-
return "- [#{title}](#{link}) <a class='filename' href=\"javascript:copy('#{docpath(link)}');\">[#{
|
341
|
+
return "- [#{title}](#{link}) <a class='filename' href=\"javascript:copy('#{docpath(link)}');\">[#{escaped_basename(link)}, #{str}]</a>\n"
|
323
342
|
end
|
324
343
|
|
325
344
|
def markdown?(file)
|
@@ -336,9 +355,9 @@ HTML
|
|
336
355
|
end
|
337
356
|
|
338
357
|
def get_title(filename, str="")
|
339
|
-
return
|
358
|
+
return escaped_basename(filename) if !markdown?(filename)
|
340
359
|
title = str.split(/$/)[0]
|
341
|
-
return title =~ /^\s*$/ ?
|
360
|
+
return title =~ /^\s*$/ ? escaped_basename(filename) : title
|
342
361
|
end
|
343
362
|
|
344
363
|
def markdown(text)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mamemose
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: redcarpet
|