deckar01-task_list 2.3.4 → 3.0.alpha1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bower.json +1 -1
- data/lib/task_list/filter.rb +20 -50
- data/lib/task_list/version.rb +1 -1
- data/package.json +1 -1
- data/task_list.gemspec +2 -2
- data/test/task_list/filter_test.rb +0 -9
- metadata +12 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '058afd74f87d80538ead4fff4993788d7f71b1152112edd07115e0554029050c'
|
4
|
+
data.tar.gz: 12daa5aca83f2a05ca08f6937b5f7c438ac7a93e6acce53346189fcf25c6814e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7578ca24199c41c957baab771a76f2f7d605bf9d128ff461fffa618700aca615d29c5128b4ffb2b40b251fc7bbf5ed19ec49dd9b44a87b654dd6a15fc78f433d
|
7
|
+
data.tar.gz: bc47cc0071775b370fc3a26e232d6121c4aff312579c9879c428437d1af8b46d14dfdb4bd9e22378d9cbcb363bd513e72c21590bb545e0f5c12af588de1131e6
|
data/bower.json
CHANGED
data/lib/task_list/filter.rb
CHANGED
@@ -37,35 +37,20 @@ class TaskList
|
|
37
37
|
IncompletePattern = /\[[[:space:]]\]/.freeze # matches all whitespace
|
38
38
|
CompletePattern = /\[[xX]\]/.freeze # matches any capitalization
|
39
39
|
|
40
|
+
# All valid checkbox patterns.
|
41
|
+
# Useful for overriding ItemPattern wih custom formats.
|
42
|
+
CheckboxPatterns = /#{CompletePattern}|#{IncompletePattern}/
|
43
|
+
|
40
44
|
# Pattern used to identify all task list items.
|
41
45
|
# Useful when you need iterate over all items.
|
42
46
|
ItemPattern = /
|
43
|
-
|
47
|
+
^
|
44
48
|
(?:\s*[-+*]|(?:\d+\.))? # optional list prefix
|
45
49
|
\s* # optional whitespace prefix
|
46
|
-
(
|
47
|
-
#{CompletePattern}|
|
48
|
-
#{IncompletePattern}
|
49
|
-
)
|
50
|
+
(#{CheckboxPatterns}) # checkbox
|
50
51
|
(?=\s) # followed by whitespace
|
51
52
|
/x
|
52
53
|
|
53
|
-
ListItemSelector = ".//li[nokogiri:task_list_item(.)]".freeze
|
54
|
-
|
55
|
-
class XPathSelectorFunction
|
56
|
-
def self.task_list_item(nodes)
|
57
|
-
nodes.select { |li| Filter::item_container(li).inner_html =~ ItemPattern }
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
# Selects first P tag of an LI, if present
|
62
|
-
ItemParaSelector = "./p[1]".freeze
|
63
|
-
|
64
|
-
# The the node directly containing the checkbox text
|
65
|
-
def self.item_container(li)
|
66
|
-
li.xpath(ItemParaSelector)[0] || li
|
67
|
-
end
|
68
|
-
|
69
54
|
# List of `TaskList::Item` objects that were recognized in the document.
|
70
55
|
# This is available in the result hash as `:task_list_items`.
|
71
56
|
#
|
@@ -74,18 +59,24 @@ class TaskList
|
|
74
59
|
result[:task_list_items] ||= []
|
75
60
|
end
|
76
61
|
|
62
|
+
# Computes attributes for the item input.
|
63
|
+
#
|
64
|
+
# Returns an String of HTML attributes.
|
65
|
+
def checkbox_attributes(item)
|
66
|
+
'checked="checked"' if item.complete?
|
67
|
+
end
|
68
|
+
|
77
69
|
# Renders the item checkbox in a span including the item state.
|
78
70
|
#
|
79
71
|
# Returns an HTML-safe String.
|
80
72
|
def render_item_checkbox(item)
|
81
73
|
%(<input type="checkbox"
|
82
74
|
class="task-list-item-checkbox"
|
83
|
-
#{
|
75
|
+
#{checkbox_attributes(item)}
|
84
76
|
disabled="disabled"
|
85
77
|
/>)
|
86
78
|
end
|
87
79
|
|
88
|
-
# Deprecated: Removed in v3
|
89
80
|
# Public: Marks up the task list item checkbox with metadata and behavior.
|
90
81
|
#
|
91
82
|
# NOTE: produces a string that, when assigned to a Node's `inner_html`,
|
@@ -101,16 +92,6 @@ class TaskList
|
|
101
92
|
item.source.sub(ItemPattern, render_item_checkbox(item)), 'utf-8'
|
102
93
|
end
|
103
94
|
|
104
|
-
# Deprecated: Removed in v3
|
105
|
-
# Public: Select all task list items within `container`.
|
106
|
-
#
|
107
|
-
# Returns an Array of Nokogiri::XML::Element objects for ordered and
|
108
|
-
# unordered lists. The container can either be the entire document (as
|
109
|
-
# returned by `#doc`) or an Element object.
|
110
|
-
def list_items(container)
|
111
|
-
container.xpath(ListItemSelector, XPathSelectorFunction)
|
112
|
-
end
|
113
|
-
|
114
95
|
# Filters the source for task list items.
|
115
96
|
#
|
116
97
|
# Each item is wrapped in HTML to identify, style, and layer
|
@@ -120,16 +101,15 @@ class TaskList
|
|
120
101
|
#
|
121
102
|
# Returns nothing.
|
122
103
|
def filter!
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
item = TaskList::Item.new(
|
128
|
-
# prepend because we're iterating in reverse
|
104
|
+
doc.xpath(".//li").reverse.each do |li|
|
105
|
+
container = li.xpath("./p[1]")[0] || li
|
106
|
+
next if not container.inner_html =~ ItemPattern
|
107
|
+
|
108
|
+
item = TaskList::Item.new($1, container.inner_html)
|
129
109
|
task_list_items.unshift item
|
110
|
+
container.inner_html = render_task_list_item(item)
|
130
111
|
li.parent.add_class('task-list')
|
131
112
|
li.add_class('task-list-item')
|
132
|
-
outer.inner_html = render_task_list_item(item)
|
133
113
|
end
|
134
114
|
end
|
135
115
|
|
@@ -137,15 +117,5 @@ class TaskList
|
|
137
117
|
filter!
|
138
118
|
doc
|
139
119
|
end
|
140
|
-
|
141
|
-
# Deprecated: Removed in v3
|
142
|
-
# Private: adds a CSS class name to a node, respecting existing class
|
143
|
-
# names.
|
144
|
-
def add_css_class(node, *new_class_names)
|
145
|
-
class_names = (node['class'] || '').split(' ')
|
146
|
-
return if new_class_names.all? { |klass| class_names.include?(klass) }
|
147
|
-
class_names.concat(new_class_names)
|
148
|
-
node['class'] = class_names.uniq.join(' ')
|
149
|
-
end
|
150
120
|
end
|
151
121
|
end
|
data/lib/task_list/version.rb
CHANGED
data/package.json
CHANGED
data/task_list.gemspec
CHANGED
@@ -27,9 +27,9 @@ Gem::Specification.new do |gem|
|
|
27
27
|
|
28
28
|
gem.add_dependency "activesupport", "~> 4.0" if RUBY_VERSION < '2.2.2'
|
29
29
|
gem.add_dependency "nokogiri", "~> 1.6.0" if RUBY_VERSION < '2.1.0'
|
30
|
-
gem.add_dependency "html-pipeline"
|
30
|
+
gem.add_dependency "html-pipeline"
|
31
31
|
|
32
|
-
gem.add_development_dependency "commonmarker"
|
32
|
+
gem.add_development_dependency "commonmarker"
|
33
33
|
gem.add_development_dependency "rake"
|
34
34
|
gem.add_development_dependency "coffee-script"
|
35
35
|
gem.add_development_dependency "json"
|
@@ -159,15 +159,6 @@ class TaskList::FilterTest < Minitest::Test
|
|
159
159
|
assert_equal 2, filter(text)[:output].css("[checked]").size
|
160
160
|
end
|
161
161
|
|
162
|
-
def test_dangling_checkbox
|
163
|
-
text = <<-md
|
164
|
-
- one
|
165
|
-
- foo
|
166
|
-
[ ] bar
|
167
|
-
md
|
168
|
-
assert_equal 0, filter(text)[:output].css(@item_selector).size
|
169
|
-
end
|
170
|
-
|
171
162
|
protected
|
172
163
|
|
173
164
|
def filter(input, context = @context, result = nil)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deckar01-task_list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.alpha1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jared Deckard
|
@@ -9,36 +9,36 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2023-09-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: html-pipeline
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
20
|
+
version: '0'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - "
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
27
|
+
version: '0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: commonmarker
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - "
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '0
|
34
|
+
version: '0'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - "
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '0
|
41
|
+
version: '0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: rake
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -180,9 +180,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
180
180
|
version: 2.0.0
|
181
181
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
182
182
|
requirements:
|
183
|
-
- - "
|
183
|
+
- - ">"
|
184
184
|
- !ruby/object:Gem::Version
|
185
|
-
version:
|
185
|
+
version: 1.3.1
|
186
186
|
requirements: []
|
187
187
|
rubygems_version: 3.4.18
|
188
188
|
signing_key:
|