infod 0.0.2 → 0.0.3.0
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/infod.rb +51 -12
- data/infod/{Th/404.rb → 404.rb} +4 -16
- data/infod/500.rb +53 -0
- data/infod/GET.rb +104 -0
- data/infod/HEAD.rb +23 -0
- data/infod/HTTP.rb +105 -0
- data/infod/{Th/PATCH.rb → PATCH.rb} +0 -0
- data/infod/POST.rb +34 -0
- data/infod/audio.rb +30 -0
- data/infod/blog.rb +34 -0
- data/infod/cal.rb +72 -0
- data/infod/{Es/code.rb → code.rb} +7 -4
- data/infod/constants.rb +55 -0
- data/infod/{Es/css.rb → css.rb} +0 -0
- data/infod/{Es/csv.rb → csv.rb} +0 -0
- data/infod/{Es/du.rb → du.rb} +0 -0
- data/infod/edit.rb +73 -0
- data/infod/{H/facets.rb → facets.rb} +20 -11
- data/infod/{Es/feed.rb → feed.rb} +17 -16
- data/infod/{Es/find.rb → find.rb} +2 -3
- data/infod/forum.rb +13 -0
- data/infod/{Es/fs.rb → fs.rb} +5 -2
- data/infod/glob.rb +26 -0
- data/infod/graph.rb +131 -0
- data/infod/{Es/grep.rb → grep.rb} +3 -3
- data/infod/{Es/groonga.rb → groonga.rb} +35 -26
- data/infod/{H/histogram.rb → histogram.rb} +23 -16
- data/infod/html.rb +231 -0
- data/infod/{Es/image.rb → image.rb} +16 -26
- data/infod/{Es/index.rb → index.rb} +44 -49
- data/infod/infod.rb +51 -12
- data/infod/json.rb +38 -0
- data/infod/{Es/kv.rb → kv.rb} +3 -9
- data/infod/{Y.rb → lambda.rb} +18 -1
- data/infod/ls.rb +49 -0
- data/infod/mail.rb +108 -0
- data/infod/{Es/man.rb → man.rb} +3 -15
- data/infod/{H/microblog.rb → microblog.rb} +22 -31
- data/infod/{K.rb → mime.rb} +68 -52
- data/infod/{N.rb → names.rb} +77 -56
- data/infod/page.rb +13 -0
- data/infod/postscript.rb +26 -0
- data/infod/rdf.rb +51 -0
- data/infod/{Rb.rb → ruby.rb} +18 -33
- data/infod/{Es/schema.rb → schema.rb} +23 -8
- data/infod/{Es/search.rb → search.rb} +5 -11
- data/infod/{Es/sh.rb → sh.rb} +0 -0
- data/infod/{Es/text.rb → text.rb} +33 -29
- data/infod/{H/threads.rb → threads.rb} +20 -27
- data/infod/{H/time.rb → time.rb} +14 -34
- data/infod/{H/wiki.rb → wiki.rb} +0 -0
- metadata +53 -64
- data/config.ru +0 -3
- data/infod/Es.rb +0 -31
- data/infod/Es/filter.rb +0 -75
- data/infod/Es/glob.rb +0 -22
- data/infod/Es/html.rb +0 -271
- data/infod/Es/in.rb +0 -68
- data/infod/Es/json.rb +0 -68
- data/infod/Es/ls.rb +0 -58
- data/infod/Es/mail.rb +0 -87
- data/infod/Es/mime.rb +0 -59
- data/infod/Es/out.rb +0 -52
- data/infod/Es/pager.rb +0 -34
- data/infod/Es/pdf.rb +0 -19
- data/infod/Es/rdf.rb +0 -35
- data/infod/H.rb +0 -15
- data/infod/H/audio.rb +0 -19
- data/infod/H/blog.rb +0 -15
- data/infod/H/cal.rb +0 -81
- data/infod/H/edit.rb +0 -88
- data/infod/H/forum.rb +0 -4
- data/infod/H/hf.rb +0 -114
- data/infod/H/mail.rb +0 -92
- data/infod/H/who.rb +0 -30
- data/infod/Th.rb +0 -36
- data/infod/Th/500.rb +0 -41
- data/infod/Th/GET.rb +0 -62
- data/infod/Th/HEAD.rb +0 -5
- data/infod/Th/POST.rb +0 -39
- data/infod/Th/perf.rb +0 -37
- data/infod/Th/uid.rb +0 -24
- data/infod/Th/util.rb +0 -89
data/infod/Es/in.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
#watch __FILE__
|
2
|
-
class E
|
3
|
-
|
4
|
-
# Graph -> tripleStream -> Graph
|
5
|
-
def fromStream m,*i
|
6
|
-
send(*i) do |s,p,o|
|
7
|
-
m[s] = {'uri' => s} unless m[s].class == Hash
|
8
|
-
m[s][p] ||= []
|
9
|
-
m[s][p].push o unless m[s][p].member? o
|
10
|
-
end; m
|
11
|
-
end
|
12
|
-
|
13
|
-
# default proto-graph
|
14
|
-
# mint graph identifier
|
15
|
-
# any graph setup (:g variable mutation) is preserved
|
16
|
-
fn 'protograph/',->e,q,g{
|
17
|
-
set = (F['set/' + q['set']] || F['set/'])[e,q,g]
|
18
|
-
set.map{|u| g[u.uri] ||= u if u.class == E } if set.class == Array
|
19
|
-
# unique fingerprint for graph
|
20
|
-
[F['docsID'][g],
|
21
|
-
F['triplr'][e,q],
|
22
|
-
q.has_key?('nocache').do{|_|rand}
|
23
|
-
].h}
|
24
|
-
|
25
|
-
# default graph
|
26
|
-
# filesystem storage
|
27
|
-
fn 'graph/',->e,q,m{
|
28
|
-
triplr = F['triplr'][e,q]
|
29
|
-
m.values.map{|r|
|
30
|
-
(r.env e.env).graphFromFile m, triplr if r.class == E }}
|
31
|
-
|
32
|
-
fn 'docsID',->g{
|
33
|
-
g.sort.map{|u,r|
|
34
|
-
[u, r.respond_to?(:m) && r.m]}.h}
|
35
|
-
|
36
|
-
fn 'triplr',->e,q{
|
37
|
-
t = q['triplr']
|
38
|
-
t && e.respond_to?(t) && t || :triplrMIME }
|
39
|
-
|
40
|
-
# document-set
|
41
|
-
fn 'set/',->e,q,_{
|
42
|
-
s = []
|
43
|
-
s.concat e.docs
|
44
|
-
e.pathSegment.do{|p| s.concat p.docs }
|
45
|
-
s }
|
46
|
-
|
47
|
-
def triplrMIME &b
|
48
|
-
mimeP.do{|mime|
|
49
|
-
yield uri,E::Type,(E MIMEtype+mimeP)
|
50
|
-
(MIMEsource[mimeP]||
|
51
|
-
MIMEsource[mimeP.split(/\//)[0]]).do{|s|
|
52
|
-
send *s,&b }}
|
53
|
-
end
|
54
|
-
|
55
|
-
def graphFromFile g={}, triplr=:triplrMIME
|
56
|
-
g.mergeGraph r(true) if ext=='e' # JSON -> graph
|
57
|
-
[:triplrInode, # filesystem data
|
58
|
-
triplr].# format-specific tripleStream emitter
|
59
|
-
each{|i| fromStream g,i } # tripleStream -> Graph
|
60
|
-
g
|
61
|
-
end
|
62
|
-
|
63
|
-
def graph g={}
|
64
|
-
docs.map{|d|d.graphFromFile g} # tripleStream -> graph
|
65
|
-
g
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
data/infod/Es/json.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
class Hash
|
2
|
-
|
3
|
-
def graph g
|
4
|
-
g.merge!({uri=>self})
|
5
|
-
end
|
6
|
-
|
7
|
-
def mergeGraph g
|
8
|
-
g.values.each{|r|
|
9
|
-
r.triples{|s,p,o|
|
10
|
-
self[s] = {'uri' => s} unless self[s].class == Hash
|
11
|
-
self[s][p] ||= []
|
12
|
-
self[s][p].push o unless self[s][p].member? o }} if g
|
13
|
-
self
|
14
|
-
end
|
15
|
-
|
16
|
-
# tripleStream emitter
|
17
|
-
def triples
|
18
|
-
s = uri
|
19
|
-
map{|p,o|
|
20
|
-
o.class == Array ? o.each{|o| yield s,p,o} : yield(s,p,o) unless p=='uri'}
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
class E
|
26
|
-
|
27
|
-
def triplrJSON
|
28
|
-
yield uri, '/application/json', (JSON.parse read) if e
|
29
|
-
end
|
30
|
-
|
31
|
-
|
32
|
-
# tripleStream -> fs
|
33
|
-
def addJSON i,g,p=[]
|
34
|
-
fromStream({},i).map{|u,r| # stream -> graph
|
35
|
-
(E u).do{|e| # resource
|
36
|
-
j = e.ef # inode
|
37
|
-
j.e || # exists?
|
38
|
-
(p.map{|p|r[p].do{|o|e.index p,o[0]}} # index properties
|
39
|
-
j.w({u => r},true) # write doc
|
40
|
-
puts "a #{e}"
|
41
|
-
# link opaque-URI docs as siblings of base-URI for doc-discoverability
|
42
|
-
e.a('.e').do{|u| (j.ln u) unless ((j.uri == u.uri) || u.e) }
|
43
|
-
e.roonga g # index content
|
44
|
-
)}}
|
45
|
-
self
|
46
|
-
rescue Exception => e
|
47
|
-
puts "addJSON #{e}"
|
48
|
-
end
|
49
|
-
|
50
|
-
fn 'view/application/json',->m,e{
|
51
|
-
m.map{|u,j|
|
52
|
-
e.q['sel'].do{|s|
|
53
|
-
c = j['/application/json'][0]
|
54
|
-
s.split(/\./).map{|s|
|
55
|
-
s = s.to_i if s.match(/^\d$/)
|
56
|
-
c = c[s] }
|
57
|
-
[{_: :a,
|
58
|
-
href: u+'?q=json&view=application/json&sel='+s,
|
59
|
-
c: {_: :b, c: u+'#'+s}}, c.html]
|
60
|
-
}||[{_: :h3, c: u},j.html]}}
|
61
|
-
|
62
|
-
def to_json *a
|
63
|
-
to_h.to_json *a
|
64
|
-
end
|
65
|
-
|
66
|
-
fn Render+'application/json',->d,_=nil{[d].to_json}
|
67
|
-
|
68
|
-
end
|
data/infod/Es/ls.rb
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
#watch __FILE__
|
2
|
-
class E
|
3
|
-
|
4
|
-
fn 'view/dir',->i,e{
|
5
|
-
|
6
|
-
# item link + preview
|
7
|
-
a = -> i { i = i.E
|
8
|
-
{_: :a, href: i.localURL(e),
|
9
|
-
c: i.uri.match(/(gif|jpe?g|png)$/i) ? {_: :img, src: i.uri+'?y=scaleImage&px=233'} : i.uri.sub(/.*\//,'')}}
|
10
|
-
|
11
|
-
[(H.once e, 'dir', (H.css '/css/ls')),
|
12
|
-
i.map{|u,r|
|
13
|
-
if r[Posix+'dir#child']
|
14
|
-
url = r.E.localURL e
|
15
|
-
{class: :dir, style: "background-color: #{E.cs}", # dir wrapper
|
16
|
-
c: [{c: [{_: :a, href: url.t+'?view=ls&triplr=id', # link to "ls"
|
17
|
-
c: r.uri.sub( 'http://'+e['SERVER_NAME'],'')},
|
18
|
-
{_: :a, href: url.t, c: '/'}]},
|
19
|
-
r[Posix+'dir#child'].map{|c|a[c]}]}
|
20
|
-
else
|
21
|
-
a[r]
|
22
|
-
end
|
23
|
-
}]}
|
24
|
-
|
25
|
-
F['view/'+MIMEtype+'inode/directory'] = F['view/dir']
|
26
|
-
|
27
|
-
fn 'view/ls',->i,e{
|
28
|
-
dir = e['uri'].E
|
29
|
-
path = dir.pathSegment
|
30
|
-
up = (if !path || path.uri == '/'
|
31
|
-
'/'
|
32
|
-
else
|
33
|
-
dir.parent.url.t+'?view=ls&triplr=id'
|
34
|
-
end)
|
35
|
-
|
36
|
-
[(H.css '/css/ls'),
|
37
|
-
{_: :a, class: :up, href: up, c: '↑'},
|
38
|
-
{class: :ls,
|
39
|
-
c: (Fn 'view/table',i,e)},
|
40
|
-
(Fn 'view/find',i,e),'<br clear=all>',
|
41
|
-
{_: :a, class: :down, href: e['uri'].E.url.t + e.q.except('triplr','view').qs, c: '↓'}]}
|
42
|
-
|
43
|
-
# user-patchable default-handler
|
44
|
-
fn '/GET',->e,r{
|
45
|
-
x = 'index.html'
|
46
|
-
i = [e,e.pathSegment].compact.map{|e|e.as x}.find &:e
|
47
|
-
if i
|
48
|
-
if e.uri[-1] == '/' # inside dir?
|
49
|
-
i.env(r).getFile # show index
|
50
|
-
else # descend to indexed dir
|
51
|
-
[301, {Location: e.uri.t}, []]
|
52
|
-
end
|
53
|
-
else
|
54
|
-
# default handler
|
55
|
-
e.response
|
56
|
-
end}
|
57
|
-
|
58
|
-
end
|
data/infod/Es/mail.rb
DELETED
@@ -1,87 +0,0 @@
|
|
1
|
-
class E
|
2
|
-
|
3
|
-
# TMail version: 1.2.7.1-4 from:
|
4
|
-
# apt-get install ruby-tmail
|
5
|
-
|
6
|
-
def triplrTmail ; require 'tmail'
|
7
|
-
|
8
|
-
# read message
|
9
|
-
i = -> i {E i[1..-2]} # Message-ID -> E
|
10
|
-
(TMail::Mail.load node).do{|m| # parse
|
11
|
-
d = m.message_id; return unless d # parse successful?
|
12
|
-
e = i[d] # Message resource
|
13
|
-
|
14
|
-
# index previously unseen mail
|
15
|
-
e.e || ( # Message-ID locatable?
|
16
|
-
ln e # create message-id path
|
17
|
-
self.index Creator, m.from[0].E # index From
|
18
|
-
m.to.do{|t|self.index To, t[0].E} # index To
|
19
|
-
|
20
|
-
%w{in_reply_to references}.map{|p| m.send(p).do{|os| os.map{|o|
|
21
|
-
e.index SIOC+'reply_of', i[o]}}}) # index references
|
22
|
-
|
23
|
-
# yield triples
|
24
|
-
yield e.uri, Type, E[SIOCt + 'MailMessage']
|
25
|
-
yield e.uri, Type, E[SIOC + 'Post']
|
26
|
-
yield e.uri, Date, m.date.iso8601 if m.date
|
27
|
-
yield e.uri, Content, m.decentBody
|
28
|
-
[[:subject,Title],
|
29
|
-
[:to,To,true],
|
30
|
-
[:cc,To,true],
|
31
|
-
[:bcc,To,true],
|
32
|
-
[:friendly_from,SIOC+'name'],
|
33
|
-
[:from,Creator,true],
|
34
|
-
[:reply_to,'/mail/reply_to',true],
|
35
|
-
[:in_reply_to,'/parent',true,true],
|
36
|
-
[:in_reply_to,SIOC+'reply_of',true,true],
|
37
|
-
[:references,SIOC+'reply_of',true,true],
|
38
|
-
].each{|a| m.send(a[0]).do{|o| [*o].map{|o|
|
39
|
-
yield e.uri,a[1], # skip empty String values
|
40
|
-
(a[2] ? (a[3] ? i[o] : o.E) : o.to_utf8) unless o.match(/\A[, \n]*\Z/)}}}}
|
41
|
-
|
42
|
-
rescue Exception => e
|
43
|
-
puts [:mail,uri,e].join(' ')
|
44
|
-
end
|
45
|
-
|
46
|
-
alias_method :triplrMail, :triplrTmail
|
47
|
-
|
48
|
-
# pure-ruby mail is only 10x (vs 100x) slower than C-ext based TMail w/ new parser
|
49
|
-
# API is mostly identical, URIs strings arent <>-wrapped
|
50
|
-
# TODO replace this msg with triplrMail if anyone wants it
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
module TMail
|
55
|
-
class Mail
|
56
|
-
def unicode_body
|
57
|
-
unquoted_body.to_utf8
|
58
|
-
end
|
59
|
-
def decentBody
|
60
|
-
unHTML=->t{t.split(/<body[^>]*>/)[-1].split(/<\/body>/)[0]}
|
61
|
-
if multipart?
|
62
|
-
parts.collect{ |part|
|
63
|
-
c = part["content-type"]
|
64
|
-
if part.multipart?
|
65
|
-
part.decentBody
|
66
|
-
elsif header.nil?
|
67
|
-
""
|
68
|
-
elsif !attachment?(part) && c.sub_type != 'html'
|
69
|
-
part.unicode_body.hrefs(true)
|
70
|
-
else
|
71
|
-
(c["name"]||'attach').do{|a|
|
72
|
-
message_id ? (message_id[1..-2]+'/'+a).E.do{|i|
|
73
|
-
i.w part.body if !i.e
|
74
|
-
'<a href='+i.url+'>'+(part.main_type=='image' ? '<img src="'+i.url+'">' : a)+"</a><br>\n"
|
75
|
-
} : ""};end
|
76
|
-
}.join
|
77
|
-
|
78
|
-
else
|
79
|
-
unicode_body.do{|b|content_type&&content_type.match(/html/) ? unHTML.(b) : b.hrefs(true)}
|
80
|
-
end
|
81
|
-
rescue
|
82
|
-
''
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
class String; def is_binary_data?; true; end; end
|
data/infod/Es/mime.rb
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
#watch __FILE__
|
2
|
-
class E
|
3
|
-
|
4
|
-
# MIME-type, no link-following
|
5
|
-
def mime
|
6
|
-
@mime ||=
|
7
|
-
(t = ext.downcase.to_sym
|
8
|
-
|
9
|
-
if node.symlink?
|
10
|
-
"inode/symlink"
|
11
|
-
|
12
|
-
elsif d?
|
13
|
-
"inode/directory"
|
14
|
-
|
15
|
-
elsif MIME[t]
|
16
|
-
MIME[t]
|
17
|
-
|
18
|
-
elsif Rack::Mime::MIME_TYPES[t='.'+t.to_s]
|
19
|
-
Rack::Mime::MIME_TYPES[t]
|
20
|
-
|
21
|
-
elsif base.index('msg.')==0
|
22
|
-
"message/rfc822"
|
23
|
-
|
24
|
-
elsif e
|
25
|
-
`file --mime-type -b #{sh}`.chomp
|
26
|
-
|
27
|
-
else
|
28
|
-
"application/octet-stream"
|
29
|
-
end)
|
30
|
-
end
|
31
|
-
|
32
|
-
# MIME-type of recursively-dereferenced path
|
33
|
-
def mimeP
|
34
|
-
@mime ||=
|
35
|
-
(p = realpath
|
36
|
-
|
37
|
-
unless p
|
38
|
-
nil
|
39
|
-
else
|
40
|
-
t = ((File.extname p).tail || '').downcase.to_sym
|
41
|
-
|
42
|
-
if p.directory?
|
43
|
-
"inode/directory"
|
44
|
-
|
45
|
-
elsif MIME[t]
|
46
|
-
MIME[t]
|
47
|
-
|
48
|
-
elsif Rack::Mime::MIME_TYPES[t='.'+t.to_s]
|
49
|
-
Rack::Mime::MIME_TYPES[t]
|
50
|
-
|
51
|
-
elsif (File.basename p).index('msg.')==0
|
52
|
-
"message/rfc822"
|
53
|
-
|
54
|
-
else
|
55
|
-
`file --mime-type -b #{Shellwords.escape p.to_s}`.chomp
|
56
|
-
end
|
57
|
-
end )
|
58
|
-
end
|
59
|
-
end
|
data/infod/Es/out.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
class E
|
2
|
-
|
3
|
-
def render mime, graph, e
|
4
|
-
E[Render+ mime].y graph, e
|
5
|
-
end
|
6
|
-
|
7
|
-
fn '/E/GET',->e,r{[301,{Location: '/'},[]]}
|
8
|
-
|
9
|
-
def response
|
10
|
-
|
11
|
-
q = @r.q # query-string
|
12
|
-
g = q['graph'] # graph-function selector
|
13
|
-
|
14
|
-
# empty response graph
|
15
|
-
m = {}
|
16
|
-
|
17
|
-
# identify graph
|
18
|
-
graphID = (F['protograph/' + g] || F['protograph/'])[self,q,m]
|
19
|
-
|
20
|
-
return F[E404][self,@r] if m.empty?
|
21
|
-
|
22
|
-
# identify response
|
23
|
-
@r['ETag'] ||= [graphID, q, @r.format, Watch].h
|
24
|
-
|
25
|
-
maybeSend @r.format, ->{
|
26
|
-
|
27
|
-
# response
|
28
|
-
r = E'/E/req/' + @r['ETag'].dive
|
29
|
-
if r.e # response exists
|
30
|
-
r # cached response
|
31
|
-
else
|
32
|
-
|
33
|
-
# graph
|
34
|
-
c = E '/E/graph/' + graphID.dive
|
35
|
-
if c.e # graph exists
|
36
|
-
m.merge! c.r true
|
37
|
-
else
|
38
|
-
# construct graph
|
39
|
-
(F['graph/' + g] || F['graph/'])[self,q,m]
|
40
|
-
# cache graph
|
41
|
-
c.w m,true
|
42
|
-
end
|
43
|
-
|
44
|
-
# graph sort/filter
|
45
|
-
E.filter q, m, self
|
46
|
-
|
47
|
-
# cache response
|
48
|
-
r.w render @r.format, m, @r
|
49
|
-
end }
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
data/infod/Es/pager.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
#watch __FILE__
|
2
|
-
class E
|
3
|
-
|
4
|
-
fn 'head/page',->d,e{
|
5
|
-
v = e.q['v']
|
6
|
-
unless v == 'page'
|
7
|
-
h = F['head/'+v] || F['head']
|
8
|
-
h[d,e]
|
9
|
-
end}
|
10
|
-
|
11
|
-
fn 'view/page',->d,e{
|
12
|
-
# try daydirs if no pagination data provided
|
13
|
-
!d.has_any_key(%w{next prev}) &&
|
14
|
-
e['REQUEST_PATH'].match(/(.*?\/)([0-9]{4})\/([0-9]{2})\/([0-9]{2})(.*)/).do{|m|
|
15
|
-
t = ::Date.parse "#{m[2]}-#{m[3]}-#{m[4]}"
|
16
|
-
d['prev'] = {'uri' => 'prev','url' => m[1]+(t-1).strftime('%Y/%m/%d')+m[5]}
|
17
|
-
d['next'] = {'uri' => 'next','url' => m[1]+(t+1).strftime('%Y/%m/%d')+m[5]}}
|
18
|
-
|
19
|
-
# links
|
20
|
-
c=[d['prev'].do{|p| d.delete('prev') # prev
|
21
|
-
{_: :a, rel: :prev, style: 'float:left; font-size:2em',
|
22
|
-
href: [*p['url']][0]+e.q.merge(p).except('uri','url').qs,
|
23
|
-
title: (p['b']||p['url']), c: '←'}},
|
24
|
-
|
25
|
-
d['next'].do{|n| d.delete('next') # next
|
26
|
-
{_: :a, rel: :next, style: 'float:right;font-size:2em',
|
27
|
-
href: [*n['url']][0]+e.q.merge(n).except('uri','url').qs,
|
28
|
-
title: (n['b']||n['url']), c: '→'}}]
|
29
|
-
|
30
|
-
[(H.js '/js/pager'),(H.once e,:mu,(H.js '/js/mu')), # n/p key shortcuts
|
31
|
-
c,(H (F['view/'+e.q['v']]||F['view']).(d,e)), # content
|
32
|
-
'<br clear=all>',{class: :bottom, c: c}]}
|
33
|
-
|
34
|
-
end
|
data/infod/Es/pdf.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
class E
|
2
|
-
|
3
|
-
def triplrPDF &f
|
4
|
-
|
5
|
-
text = docBase.a '.txt'
|
6
|
-
unless text.e && text.m > m
|
7
|
-
puts "PDF #{uri}"
|
8
|
-
`pdftotext #{sh}`
|
9
|
-
end
|
10
|
-
|
11
|
-
# metadata
|
12
|
-
triplrStdOut 'pdfinfo', &f
|
13
|
-
|
14
|
-
# body
|
15
|
-
yield uri, Content, `cat #{text.sh}`
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|