deckar01-task_list 2.3.2 → 3.0.alpha1
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
- data/.gitignore +1 -0
- data/.gitlab-ci.yml +22 -0
- data/README.md +2 -4
- data/bower.json +2 -3
- data/build.mjs +26 -0
- data/lib/task_list/filter.rb +22 -53
- data/lib/task_list/version.rb +1 -1
- data/package-lock.json +5042 -0
- data/package.json +19 -24
- data/script/bootstrap +8 -1
- data/script/cibuild +1 -1
- data/task_list.gemspec +7 -0
- data/test/task_list/filter_test.rb +18 -0
- data/test/unit/test_events.coffee +38 -60
- data/test/unit/test_updates.coffee +432 -381
- data/web-test-runner.config.mjs +5 -0
- metadata +19 -15
- data/.travis.yml +0 -16
- data/test/unit/config.js +0 -87
- data/webpack.config.js +0 -19
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/.gitignore
CHANGED
data/.gitlab-ci.yml
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
.test: &test
|
2
|
+
stage: test
|
3
|
+
before_script:
|
4
|
+
- ./script/bootstrap
|
5
|
+
script:
|
6
|
+
- ./script/cibuild
|
7
|
+
|
8
|
+
test 3.0:
|
9
|
+
image: "ruby:3.0"
|
10
|
+
<<: *test
|
11
|
+
|
12
|
+
test 3.1:
|
13
|
+
image: "ruby:3.1"
|
14
|
+
<<: *test
|
15
|
+
|
16
|
+
test 3.2:
|
17
|
+
image: "ruby:3.2"
|
18
|
+
<<: *test
|
19
|
+
|
20
|
+
test 3.3:
|
21
|
+
image: "ruby:3.3-rc"
|
22
|
+
<<: *test
|
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# Task Lists
|
2
2
|
|
3
|
-
[![
|
4
|
-
|
5
|
-
[travis]: https://travis-ci.org/deckar01/task_list
|
3
|
+
[](https://gitlab.com/deckar01/task_list/-/commits/master)
|
6
4
|
|
7
5
|
This is a community fork of GitHub's archived [`task_list`][task_list] gem.
|
8
6
|
|
@@ -85,7 +83,7 @@ NOTE: Updates are not persisted to the server automatically. Persistence is the
|
|
85
83
|
|
86
84
|
Read through the documented behaviors and samples [in the source][frontend_behaviors] for more detail, including documented events.
|
87
85
|
|
88
|
-
[frontend_behaviors]: https://
|
86
|
+
[frontend_behaviors]: https://gitlab.com/deckar01/task_list/blob/master/app/assets/javascripts/task_list.coffee
|
89
87
|
|
90
88
|
## Installation
|
91
89
|
|
data/bower.json
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
{
|
2
2
|
"name": "deckar01-task_list",
|
3
|
-
"version": "
|
3
|
+
"version": "3.0.0",
|
4
4
|
"description": "Markdown TaskList components",
|
5
|
-
"homepage": "https://
|
5
|
+
"homepage": "https://gitlab.com/deckar01/task_list",
|
6
6
|
"devDependencies": {
|
7
7
|
"jquery": ">= 1.9.1 <3",
|
8
|
-
"qunit": "^1.0.0",
|
9
8
|
"rails-behaviors": "^0.8.4"
|
10
9
|
},
|
11
10
|
"main": [
|
data/build.mjs
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
import { build } from 'esbuild';
|
2
|
+
import coffeeScriptPlugin from 'esbuild-coffeescript';
|
3
|
+
import { umdWrapper } from 'esbuild-plugin-umd-wrapper';
|
4
|
+
|
5
|
+
await build({
|
6
|
+
entryPoints: ['app/assets/javascripts/task_list.coffee'],
|
7
|
+
bundle: true,
|
8
|
+
minify: true,
|
9
|
+
format: 'umd',
|
10
|
+
outfile: 'dist/task_list.js',
|
11
|
+
plugins: [
|
12
|
+
coffeeScriptPlugin(),
|
13
|
+
umdWrapper({libraryName: 'TaskList'}),
|
14
|
+
],
|
15
|
+
logLevel: 'info',
|
16
|
+
});
|
17
|
+
|
18
|
+
await build({
|
19
|
+
entryPoints: ['test/unit/*.coffee'],
|
20
|
+
bundle: true,
|
21
|
+
outdir: 'bin/test/unit/',
|
22
|
+
plugins: [
|
23
|
+
coffeeScriptPlugin(),
|
24
|
+
],
|
25
|
+
logLevel: 'info',
|
26
|
+
});
|
data/lib/task_list/filter.rb
CHANGED
@@ -37,30 +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[task_list_item(.)]".freeze
|
54
|
-
|
55
|
-
class XPathSelectorFunction
|
56
|
-
def self.task_list_item(nodes)
|
57
|
-
nodes.select { |node| node.text =~ ItemPattern }
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
# Selects first P tag of an LI, if present
|
62
|
-
ItemParaSelector = "./p[1]".freeze
|
63
|
-
|
64
54
|
# List of `TaskList::Item` objects that were recognized in the document.
|
65
55
|
# This is available in the result hash as `:task_list_items`.
|
66
56
|
#
|
@@ -69,13 +59,20 @@ class TaskList
|
|
69
59
|
result[:task_list_items] ||= []
|
70
60
|
end
|
71
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
|
+
|
72
69
|
# Renders the item checkbox in a span including the item state.
|
73
70
|
#
|
74
71
|
# Returns an HTML-safe String.
|
75
72
|
def render_item_checkbox(item)
|
76
73
|
%(<input type="checkbox"
|
77
74
|
class="task-list-item-checkbox"
|
78
|
-
#{
|
75
|
+
#{checkbox_attributes(item)}
|
79
76
|
disabled="disabled"
|
80
77
|
/>)
|
81
78
|
end
|
@@ -95,15 +92,6 @@ class TaskList
|
|
95
92
|
item.source.sub(ItemPattern, render_item_checkbox(item)), 'utf-8'
|
96
93
|
end
|
97
94
|
|
98
|
-
# Public: Select all task list items within `container`.
|
99
|
-
#
|
100
|
-
# Returns an Array of Nokogiri::XML::Element objects for ordered and
|
101
|
-
# unordered lists. The container can either be the entire document (as
|
102
|
-
# returned by `#doc`) or an Element object.
|
103
|
-
def list_items(container)
|
104
|
-
container.xpath(ListItemSelector, XPathSelectorFunction)
|
105
|
-
end
|
106
|
-
|
107
95
|
# Filters the source for task list items.
|
108
96
|
#
|
109
97
|
# Each item is wrapped in HTML to identify, style, and layer
|
@@ -113,25 +101,15 @@ class TaskList
|
|
113
101
|
#
|
114
102
|
# Returns nothing.
|
115
103
|
def filter!
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
[li, li.inner_html]
|
126
|
-
end
|
127
|
-
if match = (inner.chomp =~ ItemPattern && $1)
|
128
|
-
item = TaskList::Item.new(match, inner)
|
129
|
-
# prepend because we're iterating in reverse
|
130
|
-
task_list_items.unshift item
|
131
|
-
|
132
|
-
add_css_class(li, 'task-list-item')
|
133
|
-
outer.inner_html = render_task_list_item(item)
|
134
|
-
end
|
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)
|
109
|
+
task_list_items.unshift item
|
110
|
+
container.inner_html = render_task_list_item(item)
|
111
|
+
li.parent.add_class('task-list')
|
112
|
+
li.add_class('task-list-item')
|
135
113
|
end
|
136
114
|
end
|
137
115
|
|
@@ -139,14 +117,5 @@ class TaskList
|
|
139
117
|
filter!
|
140
118
|
doc
|
141
119
|
end
|
142
|
-
|
143
|
-
# Private: adds a CSS class name to a node, respecting existing class
|
144
|
-
# names.
|
145
|
-
def add_css_class(node, *new_class_names)
|
146
|
-
class_names = (node['class'] || '').split(' ')
|
147
|
-
return if new_class_names.all? { |klass| class_names.include?(klass) }
|
148
|
-
class_names.concat(new_class_names)
|
149
|
-
node['class'] = class_names.uniq.join(' ')
|
150
|
-
end
|
151
120
|
end
|
152
121
|
end
|
data/lib/task_list/version.rb
CHANGED