gollum-lib 4.2.1 → 4.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/gemspec.rb +6 -4
- data/lib/gollum-lib.rb +1 -1
- data/lib/gollum-lib/file_view.rb +10 -4
- data/lib/gollum-lib/filter/emoji.rb +39 -0
- data/lib/gollum-lib/filter/tags.rb +9 -3
- data/lib/gollum-lib/markup.rb +1 -1
- data/lib/gollum-lib/page.rb +22 -8
- data/lib/gollum-lib/version.rb +1 -1
- data/lib/gollum-lib/wiki.rb +42 -2
- metadata +23 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8969c11471157e64fc02195fbcfa8e60d78e8549
|
4
|
+
data.tar.gz: ab6523c0e5f9b67a49715ecf9562c4e172b5681a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 432d11563ff70808bd9c5f4bad5fd5be79743eaab5c5236826bace51dc6063c3aa4d7d4b6aae6c4c02457246856cf05996f7144bac1a6d79c26b083f737528c6
|
7
|
+
data.tar.gz: e81299f51b76bbd66b5ee2ddd0f78aae10f35ad3236f71dd0cca05f883ed7e2f07054770673b160a8ce485f38a6bf951ed7ba124289e6166eb7fd4a09ef61420
|
data/gemspec.rb
CHANGED
@@ -8,7 +8,7 @@ def specification(version, default_adapter, platform = nil)
|
|
8
8
|
s.name = 'gollum-lib'
|
9
9
|
s.version = version
|
10
10
|
s.platform = platform if platform
|
11
|
-
s.date = '2016-
|
11
|
+
s.date = '2016-11-18'
|
12
12
|
s.rubyforge_project = 'gollum-lib'
|
13
13
|
s.license = 'MIT'
|
14
14
|
|
@@ -27,9 +27,10 @@ def specification(version, default_adapter, platform = nil)
|
|
27
27
|
s.add_dependency *default_adapter
|
28
28
|
s.add_dependency 'rouge', '~> 2.0'
|
29
29
|
s.add_dependency 'nokogiri', '~> 1.6.4'
|
30
|
-
s.add_dependency 'stringex', '~> 2.
|
31
|
-
s.add_dependency 'sanitize', '~> 2.1
|
32
|
-
s.add_dependency 'github-markup', '~> 1.4
|
30
|
+
s.add_dependency 'stringex', '~> 2.6'
|
31
|
+
s.add_dependency 'sanitize', '~> 2.1'
|
32
|
+
s.add_dependency 'github-markup', '~> 1.4'
|
33
|
+
s.add_dependency 'gemojione', '~> 2.2'
|
33
34
|
|
34
35
|
s.add_development_dependency 'org-ruby', '~> 0.9.9'
|
35
36
|
s.add_development_dependency 'kramdown', '~> 1.6.0'
|
@@ -70,6 +71,7 @@ def specification(version, default_adapter, platform = nil)
|
|
70
71
|
lib/gollum-lib/file_view.rb
|
71
72
|
lib/gollum-lib/filter.rb
|
72
73
|
lib/gollum-lib/filter/code.rb
|
74
|
+
lib/gollum-lib/filter/emoji.rb
|
73
75
|
lib/gollum-lib/filter/macro.rb
|
74
76
|
lib/gollum-lib/filter/metadata.rb
|
75
77
|
lib/gollum-lib/filter/plain_text.rb
|
data/lib/gollum-lib.rb
CHANGED
@@ -16,6 +16,7 @@ end
|
|
16
16
|
# external
|
17
17
|
require 'github/markup'
|
18
18
|
require 'sanitize'
|
19
|
+
require 'gemojione'
|
19
20
|
|
20
21
|
# internal
|
21
22
|
require File.expand_path('../gollum-lib/git_access', __FILE__)
|
@@ -62,4 +63,3 @@ module Gollum
|
|
62
63
|
class NoSuchPathError < StandardError; end
|
63
64
|
|
64
65
|
end
|
65
|
-
|
data/lib/gollum-lib/file_view.rb
CHANGED
@@ -20,8 +20,12 @@ module Gollum
|
|
20
20
|
|
21
21
|
def new_page(page)
|
22
22
|
name = page.name
|
23
|
-
url = url_for_page page
|
24
|
-
%Q( <li class="file"><a href="#{url}"><span class="icon"></span>#{name}</a
|
23
|
+
url, valid_page = url_for_page page
|
24
|
+
%Q( <li class="file"><a href="#{url}"><span class="icon"></span>#{name}</a>#{valid_page ? "" : delete_file(url, valid_page)}</li>)
|
25
|
+
end
|
26
|
+
|
27
|
+
def delete_file(url, valid_page)
|
28
|
+
%Q(<form method="POST" action="/deleteFile/#{url}" onsubmit="return confirm('Do you really want to delete the file #{url}?');"><button type="submit" name="delete" value="true"></button></form>)
|
25
29
|
end
|
26
30
|
|
27
31
|
def new_folder(folder_path)
|
@@ -42,17 +46,19 @@ module Gollum
|
|
42
46
|
|
43
47
|
def url_for_page(page)
|
44
48
|
url = ''
|
49
|
+
valid_page_name = false
|
45
50
|
if @show_all
|
46
51
|
# Remove ext for valid pages.
|
47
52
|
filename = page.filename
|
48
|
-
|
53
|
+
valid_page_name = Page::valid_page_name?(filename)
|
54
|
+
filename = valid_page_name ? filename.chomp(::File.extname(filename)) : filename
|
49
55
|
|
50
56
|
url = ::File.join(::File.dirname(page.path), filename)
|
51
57
|
else
|
52
58
|
url = ::File.join(::File.dirname(page.path), page.filename_stripped)
|
53
59
|
end
|
54
60
|
url = url[2..-1] if url[0, 2] == './'
|
55
|
-
url
|
61
|
+
return url, valid_page_name
|
56
62
|
end
|
57
63
|
|
58
64
|
def render_files
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# ~*~ encoding: utf-8 ~*~
|
2
|
+
|
3
|
+
# Emoji
|
4
|
+
#
|
5
|
+
# Render emoji such as :smile:
|
6
|
+
class Gollum::Filter::Emoji < Gollum::Filter
|
7
|
+
|
8
|
+
EXTRACT_PATTERN = %r{
|
9
|
+
(?<!\[{2})
|
10
|
+
:(?<name>[\w-]+):
|
11
|
+
(?!\]{^2})
|
12
|
+
}ix
|
13
|
+
|
14
|
+
PROCESS_PATTERN = %r{
|
15
|
+
=EEMMOOJJII=
|
16
|
+
(?<name>[\w-]+)
|
17
|
+
=IIJJOOMMEE=
|
18
|
+
}ix
|
19
|
+
|
20
|
+
def extract(data)
|
21
|
+
data.gsub! EXTRACT_PATTERN do
|
22
|
+
emoji_exists?($~[:name]) ? "=EEMMOOJJII=#{$~[:name]}=IIJJOOMMEE=" : $&
|
23
|
+
end
|
24
|
+
data
|
25
|
+
end
|
26
|
+
|
27
|
+
def process(data)
|
28
|
+
data.gsub! PROCESS_PATTERN, %q(<img src="/emoji/\k<name>" alt="\k<name>" class="emoji">)
|
29
|
+
data
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def emoji_exists?(name)
|
35
|
+
@index ||= Gemojione::Index.new
|
36
|
+
!!@index.find_by_name(name)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -129,6 +129,10 @@ class Gollum::Filter::Tags < Gollum::Filter
|
|
129
129
|
path = ::File.join @markup.wiki.base_path, file.path
|
130
130
|
elsif name =~ /^https?:\/\/.+(jpg|png|gif|svg|bmp)$/i
|
131
131
|
path = name
|
132
|
+
elsif name =~ /.+(jpg|png|gif|svg|bmp)$/i
|
133
|
+
# If is image, file not found and no link, then populate with empty String
|
134
|
+
# We can than add an image not found alt attribute for this later
|
135
|
+
path = ""
|
132
136
|
end
|
133
137
|
|
134
138
|
if path
|
@@ -167,8 +171,10 @@ class Gollum::Filter::Tags < Gollum::Filter
|
|
167
171
|
end
|
168
172
|
end
|
169
173
|
|
170
|
-
if (alt = opts['alt'])
|
174
|
+
if path != "" && (alt = opts['alt'])
|
171
175
|
attrs << %{alt="#{alt}"}
|
176
|
+
elsif path == ""
|
177
|
+
attrs << %{alt="Image not found"}
|
172
178
|
end
|
173
179
|
|
174
180
|
attr_string = attrs.size > 0 ? attrs.join(' ') + ' ' : ''
|
@@ -212,7 +218,7 @@ class Gollum::Filter::Tags < Gollum::Filter
|
|
212
218
|
if parts.size == 1
|
213
219
|
url = parts[0].strip
|
214
220
|
else
|
215
|
-
name, url = *parts.compact.map(&:strip)
|
221
|
+
name, url = *parts.compact.map(&:strip)
|
216
222
|
end
|
217
223
|
accepted_protocols = @markup.wiki.sanitization.protocols['a']['href'].dup
|
218
224
|
if accepted_protocols.include?(:relative)
|
@@ -230,7 +236,7 @@ class Gollum::Filter::Tags < Gollum::Filter
|
|
230
236
|
else
|
231
237
|
nil
|
232
238
|
end
|
233
|
-
|
239
|
+
|
234
240
|
end
|
235
241
|
|
236
242
|
# Attempt to process the tag as a file link tag.
|
data/lib/gollum-lib/markup.rb
CHANGED
@@ -99,7 +99,7 @@ module Gollum
|
|
99
99
|
@format = format
|
100
100
|
@name = name
|
101
101
|
|
102
|
-
chain = [:Metadata, :PlainText, :TOC, :RemoteCode, :Code, :Sanitize, :WSD, :Tags, :Render]
|
102
|
+
chain = [:Metadata, :PlainText, :Emoji, :TOC, :RemoteCode, :Code, :Sanitize, :WSD, :Tags, :Render]
|
103
103
|
|
104
104
|
filter_chain = chain.map do |r|
|
105
105
|
Gollum::Filter.const_get(r).new(self)
|
data/lib/gollum-lib/page.rb
CHANGED
@@ -477,17 +477,31 @@ module Gollum
|
|
477
477
|
|
478
478
|
map ||= @wiki.tree_map_for(@wiki.ref, true)
|
479
479
|
valid_names = subpagenames.map(&:capitalize).join("|")
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
480
|
+
# From Ruby 2.2 onwards map.select! could be used
|
481
|
+
map = map.select{|entry| entry.name =~ /^_(#{valid_names})/ }
|
482
|
+
return if map.empty?
|
483
|
+
|
484
|
+
subpagenames.each do |subpagename|
|
485
|
+
dir = ::Pathname.new(self.path)
|
486
|
+
while dir = dir.parent do
|
487
|
+
subpageblob = map.find do |blob_entry|
|
488
|
+
|
489
|
+
filename = "_#{subpagename.to_s.capitalize}"
|
490
|
+
searchpath = dir == Pathname.new('.') ? Pathname.new(filename) : dir + filename
|
491
|
+
entrypath = ::Pathname.new(blob_entry.path)
|
492
|
+
# Ignore extentions
|
493
|
+
entrypath = entrypath.dirname + entrypath.basename(entrypath.extname)
|
494
|
+
entrypath == searchpath
|
495
|
+
end
|
496
|
+
|
497
|
+
if subpageblob
|
498
|
+
instance_variable_set("@#{subpagename}", subpageblob.page(@wiki, @version) )
|
487
499
|
break
|
488
500
|
end
|
501
|
+
|
502
|
+
break if dir == Pathname.new('.')
|
489
503
|
end
|
490
|
-
end
|
504
|
+
end
|
491
505
|
end
|
492
506
|
|
493
507
|
def inspect
|
data/lib/gollum-lib/version.rb
CHANGED
data/lib/gollum-lib/wiki.rb
CHANGED
@@ -194,6 +194,7 @@ module Gollum
|
|
194
194
|
# Default: false
|
195
195
|
# :collapse_tree - Start with collapsed file view. Default: false
|
196
196
|
# :css - Include the custom.css file from the repo.
|
197
|
+
# :emoji - Parse and interpret emoji tags (e.g. :heart:).
|
197
198
|
# :h1_title - Concatenate all h1's on a page to form the
|
198
199
|
# page title.
|
199
200
|
# :index_page - The default page to retrieve or create if the
|
@@ -240,6 +241,7 @@ module Gollum
|
|
240
241
|
@show_all = options.fetch :show_all, false
|
241
242
|
@collapse_tree = options.fetch :collapse_tree, false
|
242
243
|
@css = options.fetch :css, false
|
244
|
+
@emoji = options.fetch :emoji, false
|
243
245
|
@h1_title = options.fetch :h1_title, false
|
244
246
|
@index_page = options.fetch :index_page, 'Home'
|
245
247
|
@bar_side = options.fetch :sidebar, :right
|
@@ -248,7 +250,8 @@ module Gollum
|
|
248
250
|
@allow_uploads = options.fetch :allow_uploads, false
|
249
251
|
@per_page_uploads = options.fetch :per_page_uploads, false
|
250
252
|
@filter_chain = options.fetch :filter_chain,
|
251
|
-
[:Metadata, :PlainText, :TOC, :RemoteCode, :Code, :Macro, :Sanitize, :WSD, :PlantUML, :Tags, :Render]
|
253
|
+
[:Metadata, :PlainText, :TOC, :RemoteCode, :Code, :Macro, :Emoji, :Sanitize, :WSD, :PlantUML, :Tags, :Render]
|
254
|
+
@filter_chain.delete(:Emoji) unless options.fetch :emoji, false
|
252
255
|
end
|
253
256
|
|
254
257
|
# Public: check whether the wiki's git repo exists on the filesystem.
|
@@ -488,6 +491,43 @@ module Gollum
|
|
488
491
|
multi_commit ? committer : committer.commit
|
489
492
|
end
|
490
493
|
|
494
|
+
# Public: Delete a file.
|
495
|
+
#
|
496
|
+
# path - The path to the file to delete
|
497
|
+
# commit - The commit Hash details:
|
498
|
+
# :message - The String commit message.
|
499
|
+
# :name - The String author full name.
|
500
|
+
# :email - The String email address.
|
501
|
+
# :parent - Optional Gollum::Git::Commit parent to this update.
|
502
|
+
# :tree - Optional String SHA of the tree to create the
|
503
|
+
# index from.
|
504
|
+
# :committer - Optional Gollum::Committer instance. If provided,
|
505
|
+
# assume that this operation is part of batch of
|
506
|
+
# updates and the commit happens later.
|
507
|
+
#
|
508
|
+
# Returns the String SHA1 of the newly written version, or the
|
509
|
+
# Gollum::Committer instance if this is part of a batch update.
|
510
|
+
def delete_file(path, commit)
|
511
|
+
dir = ::File.dirname(path)
|
512
|
+
ext = ::File.extname(path)
|
513
|
+
format = ext.split('.').last || 'txt'
|
514
|
+
filename = ::File.basename(path, ext)
|
515
|
+
|
516
|
+
multi_commit = !!commit[:committer]
|
517
|
+
committer = multi_commit ? commit[:committer] : Committer.new(self, commit)
|
518
|
+
|
519
|
+
committer.delete(path)
|
520
|
+
|
521
|
+
committer.after_commit do |index, _sha|
|
522
|
+
dir = '' if dir == '.'
|
523
|
+
|
524
|
+
@access.refresh
|
525
|
+
index.update_working_dir(dir, filename, format)
|
526
|
+
end
|
527
|
+
|
528
|
+
multi_commit ? committer : committer.commit
|
529
|
+
end
|
530
|
+
|
491
531
|
# Public: Applies a reverse diff for a given page. If only 1 SHA is given,
|
492
532
|
# the reverse diff will be taken from its parent (^SHA...SHA). If two SHAs
|
493
533
|
# are given, the reverse diff is taken from SHA1...SHA2.
|
@@ -647,7 +687,7 @@ module Gollum
|
|
647
687
|
options[:max_count] = 10 unless options[:max_count]
|
648
688
|
@repo.log(@ref, nil, options)
|
649
689
|
end
|
650
|
-
|
690
|
+
|
651
691
|
# Public: Refreshes just the cached Git reference data. This should
|
652
692
|
# be called after every Gollum update.
|
653
693
|
#
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gollum-lib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.2.
|
4
|
+
version: 4.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Preston-Werner
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-11-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: gollum-grit_adapter
|
@@ -59,42 +59,56 @@ dependencies:
|
|
59
59
|
requirements:
|
60
60
|
- - ~>
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: 2.
|
62
|
+
version: '2.6'
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - ~>
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 2.
|
69
|
+
version: '2.6'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: sanitize
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: 2.1
|
76
|
+
version: '2.1'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
81
|
- - ~>
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: 2.1
|
83
|
+
version: '2.1'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: github-markup
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
88
|
- - ~>
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version: 1.4
|
90
|
+
version: '1.4'
|
91
91
|
type: :runtime
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
95
|
- - ~>
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version: 1.4
|
97
|
+
version: '1.4'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: gemojione
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ~>
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '2.2'
|
105
|
+
type: :runtime
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ~>
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '2.2'
|
98
112
|
- !ruby/object:Gem::Dependency
|
99
113
|
name: org-ruby
|
100
114
|
requirement: !ruby/object:Gem::Requirement
|
@@ -371,6 +385,7 @@ files:
|
|
371
385
|
- lib/gollum-lib/file_view.rb
|
372
386
|
- lib/gollum-lib/filter.rb
|
373
387
|
- lib/gollum-lib/filter/code.rb
|
388
|
+
- lib/gollum-lib/filter/emoji.rb
|
374
389
|
- lib/gollum-lib/filter/macro.rb
|
375
390
|
- lib/gollum-lib/filter/metadata.rb
|
376
391
|
- lib/gollum-lib/filter/plain_text.rb
|