wikisys 0.3.1 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e012e479a9c126dbdb7077f87aede11c5393c1ee777f345941ac44388f8ee0db
4
- data.tar.gz: d8784d168321d261aed29fc2e0f48d534f39945fcd2b9b9b97a974c49d091db9
3
+ metadata.gz: ae7927009247eb0c4ba3820315c78e8a1f822ba201ccd20ed29fc909068a8f95
4
+ data.tar.gz: 5f153c0f68c9c1497fed420e6569d731932d8ea9666a8cd8b76d5324c65775d4
5
5
  SHA512:
6
- metadata.gz: 2ead29b9039b19e62300e33941021265837f8ddcc1be96da4050a9f32991f7826727b4ee5e60b1361faa0cc537f004d4fc193d06cea8d1fd911b413dec6d6627
7
- data.tar.gz: 3ce9e75cee22a1e6d2e8023a7fb2e694f7d27f65c176cd95d9591bdd625baf5b735c15e5967d1b68992f4f183252f331df81efbbecc07396e8b1eda34b5cc022
6
+ metadata.gz: 10f1a4712a081beff1b802960a7930ca6f69be9363671ba2191ea1ac4e2098a6538cfd68f07ae1852d1b7f690febae6de9e2441376bdcb1b17a4bf34e97d2b49
7
+ data.tar.gz: c5c771e88170a318f3972e34314e14d91db806cfe951649bcd2e87db40c8656f18e309975c00025ebb610dea2722e5813efef13aacf3aaaa5d77d152ea2477dc
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/lib/wikisys.rb CHANGED
@@ -6,11 +6,46 @@ 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
30
+
31
+ module StringCase
32
+
33
+ refine String do
34
+
35
+ def capitalize2()
36
+ self.sub(/^[a-z]/) {|x| x.upcase }
37
+ end
38
+
39
+ end
40
+
41
+ end
9
42
 
10
43
  module Wikisys
11
44
 
12
- class Wiki
45
+ class Wiki
46
+ include FileFetch
13
47
  using ColouredText
48
+ using StringCase
14
49
 
15
50
  attr_accessor :title, :content, :tags
16
51
  attr_reader :to_xml
@@ -49,8 +84,7 @@ module Wikisys
49
84
  heading.insert_before menu.root
50
85
  write_file filepath, doc.root.xml
51
86
 
52
- end
53
-
87
+ end
54
88
 
55
89
  def page(title)
56
90
 
@@ -83,16 +117,24 @@ module Wikisys
83
117
 
84
118
  def modify_build(filename)
85
119
 
120
+ puts 'inside modify_buld' if @debug
121
+
86
122
  @title, @content, @tags = read_md(filename)
87
123
 
88
124
  # find the entry
89
125
  # modify the tags if necessary
126
+ puts '@title: ' + @title.inspect if @debug
127
+ puts '_ @content: ' + @content.inspect if @debug
90
128
 
91
129
  r = @entries.find_by_title @title
92
130
  puts 'r: ' + r.inspect if @debug
93
- return unless r
94
131
 
95
- write_xml(@title, build_xml(@title, @content, @tags))
132
+ if r.nil? then
133
+ r = @entries.create title: @title, tags: @tags.join(' ')
134
+ end
135
+
136
+ xmlfile = filename.sub(/\.md$/,'.xml')
137
+ write_xml(xmlfile, build_xml(@title, @content, @tags))
96
138
 
97
139
  r.tags = @tags.join(' ') if r.tags != @tags
98
140
 
@@ -112,20 +154,41 @@ module Wikisys
112
154
  @hc.read(file) { File.read(file) }
113
155
  end
114
156
 
157
+ def to_css()
158
+ fetch_file 'pg.css'
159
+ end
160
+
161
+ def write_html(filename)
162
+
163
+ FileUtils.mkdir_p File.join(@filepath, 'html')
164
+
165
+ xml = read_file File.join(@filepath, 'xml', filename)
166
+ puts 'about to fetch_file' if @debug
167
+ xsl = fetch_file 'pg.xsl'
168
+ puts 'xsl: ' + xsl.inspect if @debug
169
+
170
+ html_file = File.join(@filepath, 'html', filename.sub(/\.xml$/,'.html'))
171
+ write_file(html_file, transform(xsl, xml))
172
+
173
+ end
174
+
115
175
  private
116
176
 
117
177
  def read_md(filename)
118
178
 
119
179
  filepath = File.join(@filepath, 'md', filename)
180
+ puts 'filepath : ' + filepath.inspect if @debug
120
181
  return unless File.exists? filepath
121
182
 
122
- s = read_file(filepath).strip
183
+ s = read_file(filepath).strip.gsub(/\r/,'')
184
+ puts 's: ' + s.inspect if @debug
123
185
 
124
186
  # read the title
125
187
  title = s.lines.first.chomp.sub(/^# +/,'')
126
188
 
127
189
  # read the hashtags if there is any
128
190
  tagsline = s.lines.last[/^ *\+ +(.*)/,1]
191
+ puts 'tagsline: ' + tagsline.inspect if @debug
129
192
 
130
193
  if tagsline then
131
194
 
@@ -133,13 +196,13 @@ module Wikisys
133
196
 
134
197
  else
135
198
 
136
- [title, s.lines[1..--1].join, []]
199
+ [title, s.lines[1..-1].join, []]
137
200
 
138
201
  end
139
202
 
140
203
  end
141
204
 
142
- def build_xml(title, content, tags)
205
+ def build_xml(title, content, rawtags)
143
206
 
144
207
  puts 'content: ' + content.inspect if @debug
145
208
  s = content.gsub(/\[\[[^\]]+\]\]/) do |raw_link|
@@ -151,13 +214,13 @@ module Wikisys
151
214
 
152
215
  if r then
153
216
 
154
- e.attributes[:title] = title.capitalize
217
+ e.attributes[:title] = title.capitalize2
155
218
 
156
219
  else
157
220
 
158
- make_page(title.capitalize)
221
+ make_page(title.capitalize2)
159
222
  e.attributes[:class] = 'new'
160
- e.attributes[:title] = title.capitalize + ' (page does not exist)'
223
+ e.attributes[:title] = title.capitalize2 + ' (page does not exist)'
161
224
 
162
225
  end
163
226
 
@@ -168,7 +231,7 @@ module Wikisys
168
231
 
169
232
  heading = "<heading>%s</heading>" % title
170
233
 
171
- if tags.any? then
234
+ if rawtags.any? then
172
235
 
173
236
  list = tags.map {|tag| " <tag>%s</tag>" % tag}
174
237
  tags = "<tags>\n%s\n </tags>" % list.join("\n")
@@ -179,18 +242,30 @@ module Wikisys
179
242
  else
180
243
 
181
244
  body = "<body>%s</body>" % Martile.new(s.lines[1..-1].join.strip).to_html
245
+ tags = ''
182
246
 
183
247
  end
184
248
 
185
- "<article>\n %s\n %s\n %s\n</article>" % [heading, body, tags]
249
+ "<article id='%s'>\n %s\n %s\n %s\n</article>" % \
250
+ [title.gsub(/ +/,'-'), heading, body, tags]
186
251
 
187
252
 
188
253
  end
189
254
 
190
- def write_xml(title, content)
255
+
256
+ def transform(xsl, xml)
257
+
258
+ doc = Nokogiri::XML(xml)
259
+ xslt = Nokogiri::XSLT(xsl)
260
+
261
+ xslt.transform(doc)
191
262
 
192
- filepath = File.join(File.absolute_path(@filepath), 'xml',
193
- title.downcase.gsub(/ +/,'_') + '.xml')
263
+ end
264
+
265
+ def write_xml(s, content)
266
+
267
+ filename = s =~ /\.xml$/ ? s : s.gsub(/ +/,'_') + '.xml'
268
+ filepath = File.join(File.absolute_path(@filepath), 'xml', filename)
194
269
  FileUtils.mkdir_p File.dirname(filepath)
195
270
  #File.write filepath, content
196
271
  write_file filepath, content
@@ -226,8 +301,9 @@ module Wikisys
226
301
 
227
302
  def write_md(title, content)
228
303
 
229
- filepath = File.join(File.absolute_path(@filepath), 'md',
230
- title.gsub(/ +/,'_') + '.md')
304
+ puts 'inside write_md' if @debug
305
+ filename = s =~ /\.md$/ ? s : s.gsub(/ +/,'_') + '.md'
306
+ filepath = File.join(File.absolute_path(@filepath), 'md', filename)
231
307
  FileUtils.mkdir_p File.dirname(filepath)
232
308
  File.write filepath, content
233
309
 
@@ -262,12 +338,60 @@ module Wikisys
262
338
  @mw.filepath = mindwords_file
263
339
  end
264
340
 
265
- scan_md_files()
341
+ @pg = Wiki.new @filepath, entries: @entries, debug: @debug
342
+
343
+ #scan_md_files()
344
+
345
+ end
346
+
347
+ def new_pg(filename)
348
+
349
+ @pg.new_build(filename)
350
+ @entries.save
351
+
352
+ update_mw(@pg.title, @pg.tags)
353
+ @mw.save if @mw.lines.any?
354
+
355
+ build_html(filename)
266
356
 
267
357
  end
268
358
 
359
+ def update_pg(filename)
360
+
361
+ @pg.modify_build(filename)
362
+ @entries.save
363
+
364
+ update_mw(@pg.title, @pg.tags)
365
+ @mw.save if @mw.lines.any?
366
+
367
+ build_html(filename)
368
+
369
+ end
370
+
269
371
  private
270
372
 
373
+ def build_html(filename)
374
+
375
+ xml_file = filename.sub(/\.md$/,'.xml')
376
+ filepath = File.join(@filepath, 'xml', xml_file)
377
+ s = @pg.read_file filepath
378
+ title = Rexle.new(s).root.text('heading')
379
+ puts 'about to search title: ' + title.inspect if @debug
380
+ found = @mw.search(title)
381
+
382
+ if found then
383
+
384
+ links = found.breadcrumb.map do |x|
385
+ [x, x.gsub(/ +/,'-') + '.html']
386
+ end
387
+
388
+ @pg.create_breadcrumb(filepath, links)
389
+
390
+ end
391
+
392
+ @pg.write_html xml_file
393
+
394
+ end
271
395
 
272
396
  # Check if any of the md files have been modified or newly created
273
397
  #
@@ -279,22 +403,10 @@ module Wikisys
279
403
  h = dir.activity
280
404
  puts 'h: ' + h.inspect if @debug
281
405
 
282
- pg = Wiki.new @filepath, entries: @entries
283
-
406
+ return if (h[:new] + h[:modified]).empty?
284
407
 
285
- h[:new].each do |filename|
286
-
287
- pg.new_build(filename)
288
- update_mw(pg.title, pg.tags)
289
-
290
- end
291
-
292
- h[:modified].each do |filename|
293
-
294
- pg.modify_build(filename)
295
- update_mw(pg.title, pg.tags)
296
-
297
- end
408
+ h[:new].each {|filename| new_pg(filename) }
409
+ h[:modified].each {|filename| update_pg(filename) }
298
410
 
299
411
  @mw.save if @mw.lines.any?
300
412
  outline_filepath = File.join(@filepath, 'myoutline.txt')
@@ -303,16 +415,7 @@ module Wikisys
303
415
 
304
416
  (h[:new] + h[:modified]).each do |filename|
305
417
 
306
- filepath = File.join(@filepath, 'xml',filename.sub(/\.md$/,'.xml'))
307
- s = pg.read_file filepath
308
- title = Rexle.new(s).root.text('heading')
309
- puts 'about to search title: ' + title.inspect if @debug
310
- found = @mw.search(title)
311
-
312
- next unless found
313
-
314
- links = found.breadcrumb.map {|x| [x, x.downcase.gsub(/ +/,'-') + '.html']}
315
- pg.create_breadcrumb(filepath, links)
418
+ build_html filename
316
419
 
317
420
  end
318
421
 
@@ -370,6 +473,7 @@ module Wikisys
370
473
  end
371
474
 
372
475
  end
476
+
373
477
 
374
478
  def view_file(file='index.html')
375
479
  @hc.read(file) { File.read(file) }
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.1
4
+ version: 0.4.4
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-30 00:00:00.000000000 Z
38
+ date: 2021-02-01 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.3
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.3
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