wikisys 0.3.0 → 0.4.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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/wikisys.rb +156 -29
- data/stylesheet/pg.css +75 -0
- data/stylesheet/pg.xsl +52 -0
- metadata +26 -4
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: efc308c07d4ba81540d515d9e0ea02f7c60c74aedeea31e771a228af9c29b436
|
4
|
+
data.tar.gz: fccd8271b207195f628a8f0bd7aea544545b02aead003bfd401cb51b1b589ac2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 25bfc39f238a76d18e37d62b104abb495adb83739a1cb2122c03078b92d1b6b353b5331f7bd483aeb6760ac580fa7823b82c9f1d9bfe2ae59f68b5b7718bd46a
|
7
|
+
data.tar.gz: 0b0e0335c7e15496b52b8f09bd14442f1bf9877671de04e46f47d7e73f610711052896c967f0fe05569322ed2b3d11377449731cbbafca593fcb957e47fa3c13
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/wikisys.rb
CHANGED
@@ -6,10 +6,33 @@ require 'dxlite'
|
|
6
6
|
require 'dir-to-xml'
|
7
7
|
require 'mindwords'
|
8
8
|
require 'martile'
|
9
|
+
require 'hashcache'
|
10
|
+
|
11
|
+
module FileFetch
|
12
|
+
|
13
|
+
def fetch_filepath(filename)
|
14
|
+
|
15
|
+
lib = File.dirname(__FILE__)
|
16
|
+
File.join(lib,'..','stylesheet',filename)
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
def fetch_file(filename)
|
21
|
+
|
22
|
+
filepath = fetch_filepath filename
|
23
|
+
read filepath
|
24
|
+
end
|
25
|
+
|
26
|
+
def read(s)
|
27
|
+
RXFHelper.read(s).first
|
28
|
+
end
|
29
|
+
end
|
9
30
|
|
10
31
|
module Wikisys
|
11
32
|
|
12
|
-
class Wiki
|
33
|
+
class Wiki
|
34
|
+
include FileFetch
|
35
|
+
using ColouredText
|
13
36
|
|
14
37
|
attr_accessor :title, :content, :tags
|
15
38
|
attr_reader :to_xml
|
@@ -19,6 +42,8 @@ module Wikisys
|
|
19
42
|
@filepath = filepath
|
20
43
|
@page = ''
|
21
44
|
@debug = debug
|
45
|
+
|
46
|
+
@hc = HashCache.new(size:30)
|
22
47
|
|
23
48
|
@entries = if entries.is_a? DxLite then
|
24
49
|
|
@@ -36,6 +61,17 @@ module Wikisys
|
|
36
61
|
|
37
62
|
end
|
38
63
|
|
64
|
+
def create_breadcrumb(filepath, links)
|
65
|
+
|
66
|
+
doc = Rexle.new(read_file(filepath))
|
67
|
+
heading = doc.root.element('heading')
|
68
|
+
|
69
|
+
menu = Rexle.new(HtmlCom::Menu.new(:breadcrumb, links).to_html)
|
70
|
+
|
71
|
+
heading.insert_before menu.root
|
72
|
+
write_file filepath, doc.root.xml
|
73
|
+
|
74
|
+
end
|
39
75
|
|
40
76
|
def page(title)
|
41
77
|
|
@@ -68,16 +104,24 @@ module Wikisys
|
|
68
104
|
|
69
105
|
def modify_build(filename)
|
70
106
|
|
107
|
+
puts 'inside modify_buld' if @debug
|
108
|
+
|
71
109
|
@title, @content, @tags = read_md(filename)
|
72
110
|
|
73
111
|
# find the entry
|
74
112
|
# modify the tags if necessary
|
113
|
+
puts '@title: ' + @title.inspect if @debug
|
114
|
+
puts '_ @content: ' + @content.inspect if @debug
|
75
115
|
|
76
116
|
r = @entries.find_by_title @title
|
77
117
|
puts 'r: ' + r.inspect if @debug
|
78
|
-
return unless r
|
79
118
|
|
80
|
-
|
119
|
+
if r.nil? then
|
120
|
+
r = @entries.create title: @title, tags: @tags.join(' ')
|
121
|
+
end
|
122
|
+
|
123
|
+
xmlfile = filename.sub(/\.md$/,'.xml')
|
124
|
+
write_xml(xmlfile, build_xml(@title, @content, @tags))
|
81
125
|
|
82
126
|
r.tags = @tags.join(' ') if r.tags != @tags
|
83
127
|
|
@@ -93,20 +137,45 @@ module Wikisys
|
|
93
137
|
|
94
138
|
end
|
95
139
|
|
140
|
+
def read_file(file='index.html')
|
141
|
+
@hc.read(file) { File.read(file) }
|
142
|
+
end
|
143
|
+
|
144
|
+
def to_css()
|
145
|
+
fetch_file 'pg.css'
|
146
|
+
end
|
147
|
+
|
148
|
+
def write_html(filename)
|
149
|
+
|
150
|
+
FileUtils.mkdir_p File.join(@filepath, 'html')
|
151
|
+
|
152
|
+
xml = read_file File.join(@filepath, 'xml', filename)
|
153
|
+
puts 'about to fetch_file' if @debug
|
154
|
+
xsl = fetch_file 'pg.xsl'
|
155
|
+
puts 'xsl: ' + xsl.inspect if @debug
|
156
|
+
|
157
|
+
html_file = File.join(@filepath, 'html', filename.sub(/\.xml$/,'.html'))
|
158
|
+
write_file(html_file, transform(xsl, xml))
|
159
|
+
|
160
|
+
end
|
161
|
+
|
96
162
|
private
|
97
163
|
|
98
164
|
def read_md(filename)
|
99
165
|
|
100
166
|
filepath = File.join(@filepath, 'md', filename)
|
167
|
+
puts 'filepath : ' + filepath.inspect if @debug
|
101
168
|
return unless File.exists? filepath
|
102
169
|
|
103
|
-
s =
|
170
|
+
s = read_file(filepath).strip.gsub(/\r/,'')
|
171
|
+
puts 's: ' + s.inspect if @debug
|
104
172
|
|
105
173
|
# read the title
|
106
174
|
title = s.lines.first.chomp.sub(/^# +/,'')
|
107
175
|
|
108
176
|
# read the hashtags if there is any
|
109
177
|
tagsline = s.lines.last[/^ *\+ +(.*)/,1]
|
178
|
+
puts 'tagsline: ' + tagsline.inspect if @debug
|
110
179
|
|
111
180
|
if tagsline then
|
112
181
|
|
@@ -114,14 +183,13 @@ module Wikisys
|
|
114
183
|
|
115
184
|
else
|
116
185
|
|
117
|
-
[title, s.lines[1
|
186
|
+
[title, s.lines[1..-1].join, []]
|
118
187
|
|
119
188
|
end
|
120
189
|
|
121
|
-
end
|
122
|
-
|
190
|
+
end
|
123
191
|
|
124
|
-
def build_xml(title, content,
|
192
|
+
def build_xml(title, content, rawtags)
|
125
193
|
|
126
194
|
puts 'content: ' + content.inspect if @debug
|
127
195
|
s = content.gsub(/\[\[[^\]]+\]\]/) do |raw_link|
|
@@ -150,7 +218,7 @@ module Wikisys
|
|
150
218
|
|
151
219
|
heading = "<heading>%s</heading>" % title
|
152
220
|
|
153
|
-
if
|
221
|
+
if rawtags.any? then
|
154
222
|
|
155
223
|
list = tags.map {|tag| " <tag>%s</tag>" % tag}
|
156
224
|
tags = "<tags>\n%s\n </tags>" % list.join("\n")
|
@@ -161,23 +229,43 @@ module Wikisys
|
|
161
229
|
else
|
162
230
|
|
163
231
|
body = "<body>%s</body>" % Martile.new(s.lines[1..-1].join.strip).to_html
|
232
|
+
tags = ''
|
164
233
|
|
165
234
|
end
|
166
235
|
|
167
|
-
"<article>\n %s\n %s\n %s\n</article>" %
|
236
|
+
"<article id='%s'>\n %s\n %s\n %s\n</article>" % \
|
237
|
+
[title.gsub(/ +/,'-'), heading, body, tags]
|
168
238
|
|
169
239
|
|
170
240
|
end
|
171
241
|
|
172
|
-
|
242
|
+
|
243
|
+
def transform(xsl, xml)
|
244
|
+
|
245
|
+
doc = Nokogiri::XML(xml)
|
246
|
+
xslt = Nokogiri::XSLT(xsl)
|
247
|
+
|
248
|
+
xslt.transform(doc)
|
249
|
+
|
250
|
+
end
|
251
|
+
|
252
|
+
def write_xml(s, content)
|
173
253
|
|
174
|
-
|
175
|
-
|
254
|
+
filename = s =~ /\.xml$/ ? s : s.gsub(/ +/,'_') + '.xml'
|
255
|
+
filepath = File.join(File.absolute_path(@filepath), 'xml', filename)
|
176
256
|
FileUtils.mkdir_p File.dirname(filepath)
|
177
|
-
File.write filepath, content
|
257
|
+
#File.write filepath, content
|
258
|
+
write_file filepath, content
|
178
259
|
|
179
260
|
end
|
180
261
|
|
262
|
+
def write_file(filepath, content)
|
263
|
+
|
264
|
+
puts 'writing file: ' + filepath.inspect if @debug
|
265
|
+
File.write filepath, content
|
266
|
+
@hc.write(filepath) { content }
|
267
|
+
end
|
268
|
+
|
181
269
|
def make_page(title, raw_tags=title.downcase.gsub(/['\.\(\)]/,''))
|
182
270
|
|
183
271
|
tags = raw_tags.split.join(' ')
|
@@ -200,8 +288,9 @@ module Wikisys
|
|
200
288
|
|
201
289
|
def write_md(title, content)
|
202
290
|
|
203
|
-
|
204
|
-
|
291
|
+
puts 'inside write_md' if @debug
|
292
|
+
filename = s =~ /\.md$/ ? s : s.gsub(/ +/,'_') + '.md'
|
293
|
+
filepath = File.join(File.absolute_path(@filepath), 'md', filename)
|
205
294
|
FileUtils.mkdir_p File.dirname(filepath)
|
206
295
|
File.write filepath, content
|
207
296
|
|
@@ -236,10 +325,26 @@ module Wikisys
|
|
236
325
|
@mw.filepath = mindwords_file
|
237
326
|
end
|
238
327
|
|
239
|
-
|
328
|
+
@pg = Wiki.new @filepath, entries: @entries, debug: @debug
|
329
|
+
|
330
|
+
#scan_md_files()
|
240
331
|
|
241
332
|
end
|
242
333
|
|
334
|
+
def new_pg(filename)
|
335
|
+
|
336
|
+
@pg.new_build(filename)
|
337
|
+
update_mw(@pg.title, @pg.tags)
|
338
|
+
|
339
|
+
end
|
340
|
+
|
341
|
+
def update_pg(filename)
|
342
|
+
|
343
|
+
@pg.modify_build(filename)
|
344
|
+
update_mw(@pg.title, @pg.tags)
|
345
|
+
|
346
|
+
end
|
347
|
+
|
243
348
|
private
|
244
349
|
|
245
350
|
|
@@ -253,25 +358,41 @@ module Wikisys
|
|
253
358
|
h = dir.activity
|
254
359
|
puts 'h: ' + h.inspect if @debug
|
255
360
|
|
256
|
-
|
257
|
-
|
361
|
+
return if (h[:new] + h[:modified]).empty?
|
258
362
|
|
259
|
-
h[:new].each
|
363
|
+
h[:new].each {|filename| new_pg(filename) }
|
364
|
+
h[:modified].each {|filename| update_pg(filename) }
|
260
365
|
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
end
|
366
|
+
@mw.save if @mw.lines.any?
|
367
|
+
outline_filepath = File.join(@filepath, 'myoutline.txt')
|
265
368
|
|
266
|
-
|
369
|
+
File.write outline_filepath, @mw.to_outline
|
370
|
+
|
371
|
+
(h[:new] + h[:modified]).each do |filename|
|
372
|
+
|
373
|
+
xml_file = filename.sub(/\.md$/,'.xml')
|
374
|
+
filepath = File.join(@filepath, 'xml', xml_file)
|
375
|
+
s = pg.read_file filepath
|
376
|
+
title = Rexle.new(s).root.text('heading')
|
377
|
+
puts 'about to search title: ' + title.inspect if @debug
|
378
|
+
found = @mw.search(title)
|
379
|
+
|
380
|
+
if found then
|
381
|
+
|
382
|
+
links = found.breadcrumb.map do |x|
|
383
|
+
[x, x.gsub(/ +/,'-') + '.html']
|
384
|
+
end
|
385
|
+
|
386
|
+
pg.create_breadcrumb(filepath, links)
|
387
|
+
|
388
|
+
end
|
389
|
+
|
390
|
+
pg.write_html xml_file
|
267
391
|
|
268
|
-
pg.modify_build(filename)
|
269
|
-
update_mw(pg.title, pg.tags)
|
270
|
-
|
271
392
|
end
|
272
393
|
|
273
394
|
@entries.save
|
274
|
-
|
395
|
+
|
275
396
|
|
276
397
|
end # /scan_md_files
|
277
398
|
|
@@ -324,5 +445,11 @@ module Wikisys
|
|
324
445
|
end
|
325
446
|
|
326
447
|
end
|
448
|
+
|
449
|
+
|
450
|
+
def view_file(file='index.html')
|
451
|
+
@hc.read(file) { File.read(file) }
|
452
|
+
end
|
453
|
+
|
327
454
|
end
|
328
455
|
end
|
data/stylesheet/pg.css
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
/* begin breadcrumb.css */
|
4
|
+
|
5
|
+
body {font-family: Arial;}
|
6
|
+
|
7
|
+
/* Style the list */
|
8
|
+
ul.breadcrumb {
|
9
|
+
padding: 10px 16px;
|
10
|
+
list-style: none;
|
11
|
+
background-color: #eee;
|
12
|
+
}
|
13
|
+
|
14
|
+
/* Display list items side by side */
|
15
|
+
ul.breadcrumb li {
|
16
|
+
display: inline;
|
17
|
+
font-size: 18px;
|
18
|
+
}
|
19
|
+
|
20
|
+
/* Add a slash symbol (/) before/behind each list item */
|
21
|
+
ul.breadcrumb li+li:before {
|
22
|
+
padding: 8px;
|
23
|
+
color: black;
|
24
|
+
content: "/\00a0";
|
25
|
+
}
|
26
|
+
|
27
|
+
/* Add a color to all links inside the list */
|
28
|
+
ul.breadcrumb li a {
|
29
|
+
color: #0275d8;
|
30
|
+
text-decoration: none;
|
31
|
+
}
|
32
|
+
|
33
|
+
/* Add a color on mouse-over */
|
34
|
+
ul.breadcrumb li a:hover {
|
35
|
+
color: #01447e;
|
36
|
+
text-decoration: underline;
|
37
|
+
}
|
38
|
+
|
39
|
+
/* end breadcrumb */
|
40
|
+
|
41
|
+
article {
|
42
|
+
background-color: rgba(255,255,255,0.5);
|
43
|
+
padding: 1.1em;
|
44
|
+
margin: 0.4em;
|
45
|
+
}
|
46
|
+
|
47
|
+
header div {text-align: right}
|
48
|
+
#tags {
|
49
|
+
background-color: transparent;
|
50
|
+
padding: 2.5em 1.0em;
|
51
|
+
margin: 1.0em 0em;
|
52
|
+
list-style-type: none
|
53
|
+
}
|
54
|
+
#tags li {
|
55
|
+
background-color: transparent;
|
56
|
+
display: inline;
|
57
|
+
padding: 0.1em;
|
58
|
+
margin: 1.3em 0.1em;
|
59
|
+
color: #fff;
|
60
|
+
}
|
61
|
+
|
62
|
+
#tags li a {
|
63
|
+
background-color: #eee;
|
64
|
+
color: #a95;
|
65
|
+
text-decoration: none;
|
66
|
+
font-family: "Courier";
|
67
|
+
font-weight: 600;
|
68
|
+
font-size: 0.9em;
|
69
|
+
padding: 0.4em 0.6em;
|
70
|
+
margin: 0.3em;
|
71
|
+
|
72
|
+
}
|
73
|
+
|
74
|
+
#tags li:hover {background-color: transparent; }
|
75
|
+
#tags li a:hover { background-color: #ededed; color: #66e; }
|
data/stylesheet/pg.xsl
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
|
2
|
+
|
3
|
+
<xsl:template match='article'>
|
4
|
+
|
5
|
+
<html>
|
6
|
+
<head>
|
7
|
+
<link rel="stylesheet" type="text/css" href=pg.css"/>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<xsl:variable name='id' select='@id'/>
|
11
|
+
<header><div><a href='../edit?id={$id}'>edit</a></div></header>
|
12
|
+
<div>
|
13
|
+
<xsl:copy-of select='ul[@class="breadcrumb"]' />
|
14
|
+
</div>
|
15
|
+
<article>
|
16
|
+
<xsl:apply-templates select='heading' />
|
17
|
+
<xsl:copy-of select='body/*' />
|
18
|
+
</article>
|
19
|
+
<xsl:apply-templates select='tags' />
|
20
|
+
</body>
|
21
|
+
</html>
|
22
|
+
|
23
|
+
</xsl:template>
|
24
|
+
|
25
|
+
<xsl:template match='heading'>
|
26
|
+
|
27
|
+
<h1><xsl:value-of select='.' /></h1>
|
28
|
+
|
29
|
+
</xsl:template>
|
30
|
+
|
31
|
+
<xsl:template match='tags'>
|
32
|
+
|
33
|
+
<ul id='tags'>
|
34
|
+
<xsl:apply-templates select='tag' />
|
35
|
+
</ul>
|
36
|
+
|
37
|
+
</xsl:template>
|
38
|
+
|
39
|
+
<xsl:template match='tag'>
|
40
|
+
|
41
|
+
<li>
|
42
|
+
<xsl:element name='a'>
|
43
|
+
<xsl:attribute name='href'>
|
44
|
+
../hashtags.html#<xsl:value-of select='.' />
|
45
|
+
</xsl:attribute>
|
46
|
+
<xsl:value-of select='.' />
|
47
|
+
</xsl:element>
|
48
|
+
</li>
|
49
|
+
|
50
|
+
</xsl:template>
|
51
|
+
|
52
|
+
</xsl:stylesheet>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wikisys
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
O3SRDzvvWXrwDFGyRDmGqdEw51FKHPw/6pk4ci0QPIvQEgOyPKfdSesPWmNmtxpf
|
36
36
|
KX/89ohIpftt89vtcCI21R5u
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2021-01-
|
38
|
+
date: 2021-01-31 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: dir-to-xml
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
version: '0.5'
|
67
67
|
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 0.5.
|
69
|
+
version: 0.5.4
|
70
70
|
type: :runtime
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '0.5'
|
77
77
|
- - ">="
|
78
78
|
- !ruby/object:Gem::Version
|
79
|
-
version: 0.5.
|
79
|
+
version: 0.5.4
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: martile
|
82
82
|
requirement: !ruby/object:Gem::Requirement
|
@@ -97,6 +97,26 @@ dependencies:
|
|
97
97
|
- - ">="
|
98
98
|
- !ruby/object:Gem::Version
|
99
99
|
version: 1.4.6
|
100
|
+
- !ruby/object:Gem::Dependency
|
101
|
+
name: hashcache
|
102
|
+
requirement: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - "~>"
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0.2'
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.2.10
|
110
|
+
type: :runtime
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0.2'
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: 0.2.10
|
100
120
|
description:
|
101
121
|
email: james@jamesrobertson.eu
|
102
122
|
executables: []
|
@@ -104,6 +124,8 @@ extensions: []
|
|
104
124
|
extra_rdoc_files: []
|
105
125
|
files:
|
106
126
|
- lib/wikisys.rb
|
127
|
+
- stylesheet/pg.css
|
128
|
+
- stylesheet/pg.xsl
|
107
129
|
homepage: https://github.com/jrobertson/wikisys
|
108
130
|
licenses:
|
109
131
|
- MIT
|
metadata.gz.sig
CHANGED
Binary file
|