deckar01-task_list 2.2.1 → 2.3.0
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/.travis.yml +3 -1
- data/README.md +8 -0
- data/app/assets/javascripts/task_list.coffee +36 -5
- data/lib/task_list/version.rb +1 -1
- data/package.json +14 -6
- data/script/cibuild +1 -1
- data/test/functional/test_task_lists_behavior.html +36 -0
- data/test/unit/config.js +87 -0
- data/test/unit/test_events.coffee +38 -37
- data/test/unit/test_updates.coffee +183 -122
- data/webpack.config.js +1 -1
- metadata +4 -11
- data/script/testsuite +0 -17
- data/test/index.html +0 -12
- data/test/run-qunit.coffee +0 -49
- data/test/units.coffee +0 -2
- data/test/units.css +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34a7ec4b58a3243088a56807c0768fad5b43b74e
|
4
|
+
data.tar.gz: ca0e0a25dd71df16347cb2454ee979d0f77060cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f48d4b5e01192b512b838d62d5bf2812b473fd5cb2b2d95317351e808ad13caf0cf92493fc76d1f9f02ff255d407a4336a13601f4bf6b4a2290249cb0ce8e87
|
7
|
+
data.tar.gz: 8821d7ec5c29e6629db2b8263ffde6919efe08727e9e6739c0eae84ec1f3ed575da5c9079b62471a41e655dd25620307f102ff40d42e7c77133e89f893a0a2c0
|
data/.travis.yml
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
language: ruby
|
2
2
|
sudo: false
|
3
|
+
addons:
|
4
|
+
chrome: stable
|
3
5
|
install:
|
4
6
|
- rm -rf ~/.nvm && git clone https://github.com/creationix/nvm.git ~/.nvm && (cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`) && source ~/.nvm/nvm.sh && nvm install $TRAVIS_NODE_VERSION
|
5
7
|
- ./script/bootstrap
|
@@ -9,6 +11,6 @@ rvm:
|
|
9
11
|
- 2.1
|
10
12
|
- 2.2
|
11
13
|
env:
|
12
|
-
- TRAVIS_NODE_VERSION="
|
14
|
+
- TRAVIS_NODE_VERSION="11"
|
13
15
|
notifications:
|
14
16
|
email: false
|
data/README.md
CHANGED
@@ -144,6 +144,14 @@ At a high level, the Ruby components integrate with the [`html-pipeline`](https:
|
|
144
144
|
|
145
145
|
[A polyfill for custom events](https://github.com/krambuhl/custom-event-polyfill) must be included to support IE10 and below.
|
146
146
|
|
147
|
+
### Known issues
|
148
|
+
|
149
|
+
The markdown parser used on the front end produces false positives when looking for checkboxes
|
150
|
+
in some complex nesting situations. To combat this issue, you can enable the `sourcepos` option
|
151
|
+
in your markdown parser. This will avoid parsing the markdown on the front end, because the line
|
152
|
+
numbers will be provided as attributes on the HTML elements. `task_list` checks for the source
|
153
|
+
position attribute and falls back to manually parsing the markown when needed.
|
154
|
+
|
147
155
|
### Upgrading
|
148
156
|
|
149
157
|
#### 1.x to 2.x
|
@@ -150,7 +150,7 @@ class TaskList
|
|
150
150
|
|
151
151
|
unless changeEvent.defaultPrevented
|
152
152
|
{ result, lineNumber, lineSource } =
|
153
|
-
TaskList.updateSource(@field.value, index, item.checked)
|
153
|
+
TaskList.updateSource(@field.value, index, item.checked, item)
|
154
154
|
|
155
155
|
@field.value = result
|
156
156
|
changeEvent = createEvent 'change'
|
@@ -220,16 +220,46 @@ class TaskList
|
|
220
220
|
# given checked value.
|
221
221
|
#
|
222
222
|
# Returns the updated String text.
|
223
|
-
@updateSource: (source, itemIndex, checked) ->
|
223
|
+
@updateSource: (source, itemIndex, checked, item) ->
|
224
|
+
if item.parentElement.hasAttribute('data-sourcepos')
|
225
|
+
@_updateSourcePosition(source, item, checked)
|
226
|
+
else
|
227
|
+
@_updateSourceRegex(source, itemIndex, checked)
|
228
|
+
|
229
|
+
# If we have sourcepos information, that tells us which line the task
|
230
|
+
# is on without the need for parsing
|
231
|
+
@_updateSourcePosition: (source, item, checked) ->
|
232
|
+
result = source.split("\n")
|
233
|
+
sourcepos = item.parentElement.getAttribute('data-sourcepos')
|
234
|
+
lineNumber = parseInt(sourcepos.split(":")[0])
|
235
|
+
lineSource = result[lineNumber - 1]
|
236
|
+
|
237
|
+
line =
|
238
|
+
if checked
|
239
|
+
lineSource.replace(@incompletePattern, @complete)
|
240
|
+
else
|
241
|
+
lineSource.replace(@completePattern, @incomplete)
|
242
|
+
|
243
|
+
result[lineNumber - 1] = line
|
244
|
+
|
245
|
+
return {
|
246
|
+
result: result.join("\n")
|
247
|
+
lineNumber: lineNumber
|
248
|
+
lineSource: lineSource
|
249
|
+
}
|
250
|
+
|
251
|
+
@_updateSourceRegex: (source, itemIndex, checked) ->
|
252
|
+
split_source = source.split("\n")
|
253
|
+
lineNumber
|
254
|
+
lineSource
|
255
|
+
|
224
256
|
clean = source.replace(/\r/g, '').
|
225
257
|
replace(@itemsInParasPattern, '').
|
226
258
|
split("\n")
|
227
259
|
index = 0
|
228
260
|
inCodeBlock = false
|
229
|
-
lineNumber
|
230
|
-
lineSource
|
231
261
|
|
232
|
-
result = for line, i in
|
262
|
+
result = for line, i in split_source
|
233
263
|
if inCodeBlock
|
234
264
|
# Lines inside of a code block are ignored.
|
235
265
|
if line.match(@endFencesPattern)
|
@@ -249,6 +279,7 @@ class TaskList
|
|
249
279
|
else
|
250
280
|
line.replace(@completePattern, @incomplete)
|
251
281
|
line
|
282
|
+
|
252
283
|
return {
|
253
284
|
result: result.join("\n")
|
254
285
|
lineNumber: lineNumber
|
data/lib/task_list/version.rb
CHANGED
data/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "deckar01-task_list",
|
3
|
-
"version": "2.
|
3
|
+
"version": "2.3.0",
|
4
4
|
"description": "Markdown TaskList components",
|
5
5
|
"main": "dist/task_list.js",
|
6
6
|
"directories": {
|
@@ -11,7 +11,7 @@
|
|
11
11
|
],
|
12
12
|
"scripts": {
|
13
13
|
"test": "script/cibuild",
|
14
|
-
"qunit": "
|
14
|
+
"qunit": "karma start test/unit/config.js",
|
15
15
|
"lint": "coffeelint app/assets/javascripts/task_list.coffee",
|
16
16
|
"build:css": "node-sass -o dist/ app/assets/stylesheets/task_list.scss",
|
17
17
|
"build:js": "webpack",
|
@@ -37,11 +37,19 @@
|
|
37
37
|
"homepage": "https://github.com/deckar01/task_list#readme",
|
38
38
|
"devDependencies": {
|
39
39
|
"bower": "^1.8.0",
|
40
|
-
"coffee-loader": "^0.
|
41
|
-
"coffee-script": "^1.12.5",
|
40
|
+
"coffee-loader": "^0.9.0",
|
42
41
|
"coffeelint": "^1.16.0",
|
42
|
+
"coffeescript": "^2.4.1",
|
43
|
+
"jquery": "^2.2.4",
|
44
|
+
"karma": "^4.4.1",
|
45
|
+
"karma-chrome-launcher": "^3.1.0",
|
46
|
+
"karma-qunit": "^4.0.0",
|
47
|
+
"karma-webpack": "^4.0.2",
|
43
48
|
"node-sass": "^4.5.2",
|
44
49
|
"phantomjs": "^1.9.19",
|
45
|
-
"
|
46
|
-
|
50
|
+
"qunit": "^2.9.3",
|
51
|
+
"webpack": "^4.41.2",
|
52
|
+
"webpack-cli": "^3.3.10"
|
53
|
+
},
|
54
|
+
"dependencies": {}
|
47
55
|
}
|
data/script/cibuild
CHANGED
@@ -71,6 +71,7 @@
|
|
71
71
|
</head>
|
72
72
|
<body>
|
73
73
|
<div class="js-task-list-container js-task-list-enable">
|
74
|
+
<h2>Using Regex Parsing</h2>
|
74
75
|
<div class="markdown">
|
75
76
|
<ul class="task-list">
|
76
77
|
<li>
|
@@ -104,6 +105,41 @@
|
|
104
105
|
</form>
|
105
106
|
</div>
|
106
107
|
|
108
|
+
<div class="js-task-list-container js-task-list-enable">
|
109
|
+
<h2>Using CommonMark Source Positioning</h2>
|
110
|
+
<div class="markdown">
|
111
|
+
<ul class="task-list" data-sourcepos="1:1-5:27">
|
112
|
+
<li data-sourcepos="1:1-1:8">
|
113
|
+
[ ]
|
114
|
+
</li>
|
115
|
+
<li class="task-list-item" data-sourcepos="2:1-2:26">
|
116
|
+
<input type="checkbox" class="task-list-item-checkbox" disabled />
|
117
|
+
I'm a task list item
|
118
|
+
</li>
|
119
|
+
<li class="task-list-item" data-sourcepos="3:1-3:30">
|
120
|
+
<input type="checkbox" class="task-list-item-checkbox" disabled />
|
121
|
+
with non-breaking space
|
122
|
+
</li>
|
123
|
+
<li class="task-list-item" data-sourcepos="4:1-4:22">
|
124
|
+
<input type="checkbox" class="task-list-item-checkbox" disabled checked />
|
125
|
+
completed, lower
|
126
|
+
</li>
|
127
|
+
<li class="task-list-item" data-sourcepos="5:1-5:27">
|
128
|
+
<input type="checkbox" class="task-list-item-checkbox" disabled checked />
|
129
|
+
completed capitalized
|
130
|
+
</li>
|
131
|
+
</ul>
|
132
|
+
</div>
|
133
|
+
<form action="/update" method="POST" data-remote data-type="json">
|
134
|
+
<textarea name="comment[body]" class="js-task-list-field" cols="40" rows="10">
|
135
|
+
- [ ]
|
136
|
+
- [ ] I'm a task list item
|
137
|
+
- [ ] with non-breaking space
|
138
|
+
- [x] completed, lower
|
139
|
+
- [X] completed capitalized</textarea>
|
140
|
+
</form>
|
141
|
+
</div>
|
142
|
+
|
107
143
|
<ul class="log">
|
108
144
|
</ul>
|
109
145
|
</body>
|
data/test/unit/config.js
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
// Karma configuration
|
2
|
+
// Generated on Tue Nov 12 2019 10:22:49 GMT-0600 (Central Standard Time)
|
3
|
+
|
4
|
+
module.exports = function(config) {
|
5
|
+
config.set({
|
6
|
+
|
7
|
+
// base path that will be used to resolve all patterns (eg. files, exclude)
|
8
|
+
basePath: '../..',
|
9
|
+
|
10
|
+
|
11
|
+
// frameworks to use
|
12
|
+
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
|
13
|
+
frameworks: ['qunit'],
|
14
|
+
|
15
|
+
|
16
|
+
plugins: [
|
17
|
+
'karma-qunit',
|
18
|
+
'karma-webpack',
|
19
|
+
'karma-chrome-launcher',
|
20
|
+
],
|
21
|
+
|
22
|
+
|
23
|
+
// list of files / patterns to load in the browser
|
24
|
+
files: [
|
25
|
+
'app/assets/javascripts/*.coffee',
|
26
|
+
'test/unit/*.coffee'
|
27
|
+
],
|
28
|
+
|
29
|
+
|
30
|
+
// list of files / patterns to exclude
|
31
|
+
exclude: [
|
32
|
+
],
|
33
|
+
|
34
|
+
|
35
|
+
// preprocess matching files before serving them to the browser
|
36
|
+
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
|
37
|
+
preprocessors: {
|
38
|
+
'**/*.coffee': ['webpack']
|
39
|
+
},
|
40
|
+
|
41
|
+
webpack: {
|
42
|
+
...require('../../webpack.config.js'),
|
43
|
+
mode: 'development',
|
44
|
+
},
|
45
|
+
|
46
|
+
webpackMiddleware: {
|
47
|
+
stats: 'errors-only',
|
48
|
+
},
|
49
|
+
|
50
|
+
|
51
|
+
// test results reporter to use
|
52
|
+
// possible values: 'dots', 'progress'
|
53
|
+
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
|
54
|
+
reporters: ['progress'],
|
55
|
+
|
56
|
+
|
57
|
+
// web server port
|
58
|
+
port: 9876,
|
59
|
+
|
60
|
+
|
61
|
+
// enable / disable colors in the output (reporters and logs)
|
62
|
+
colors: true,
|
63
|
+
|
64
|
+
|
65
|
+
// level of logging
|
66
|
+
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
|
67
|
+
logLevel: config.LOG_INFO,
|
68
|
+
|
69
|
+
|
70
|
+
// enable / disable watching file and executing tests whenever any file changes
|
71
|
+
autoWatch: true,
|
72
|
+
|
73
|
+
|
74
|
+
// start these browsers
|
75
|
+
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
|
76
|
+
browsers: ['ChromeHeadless'],
|
77
|
+
|
78
|
+
|
79
|
+
// Continuous Integration mode
|
80
|
+
// if true, Karma captures browsers, runs the tests and exits
|
81
|
+
singleRun: true,
|
82
|
+
|
83
|
+
// Concurrency level
|
84
|
+
// how many browser should be started simultaneous
|
85
|
+
concurrency: Infinity
|
86
|
+
})
|
87
|
+
}
|
@@ -1,8 +1,8 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
window.$ = window.jQuery = require('jquery')
|
2
|
+
window.TaskList = require('../../app/assets/javascripts/task_list')
|
3
3
|
|
4
|
-
module "TaskList events",
|
5
|
-
|
4
|
+
QUnit.module "TaskList events",
|
5
|
+
beforeEach: ->
|
6
6
|
@container = $ '<div>', class: 'js-task-list-container'
|
7
7
|
|
8
8
|
@list = $ '<ul>', class: 'task-list'
|
@@ -24,74 +24,75 @@ module "TaskList events",
|
|
24
24
|
$('#qunit-fixture').append(@container)
|
25
25
|
@container.taskList()
|
26
26
|
|
27
|
-
|
27
|
+
afterEach: ->
|
28
28
|
$(document).off 'tasklist:enabled'
|
29
29
|
$(document).off 'tasklist:disabled'
|
30
30
|
$(document).off 'tasklist:change'
|
31
31
|
$(document).off 'tasklist:changed'
|
32
32
|
|
33
|
-
|
34
|
-
|
33
|
+
QUnit.test "triggers a tasklist:change event before making task list item changes", (assert) ->
|
34
|
+
done = assert.async()
|
35
|
+
assert.expect 1
|
35
36
|
|
36
37
|
@field.on 'tasklist:change', (event, index, checked) ->
|
37
|
-
ok true
|
38
|
-
|
39
|
-
setTimeout ->
|
40
|
-
start()
|
41
|
-
, 20
|
38
|
+
assert.ok true
|
39
|
+
done()
|
42
40
|
|
43
41
|
@checkbox.click()
|
44
42
|
|
45
|
-
|
46
|
-
|
43
|
+
QUnit.test "triggers a tasklist:changed event once a task list item changes", (assert) ->
|
44
|
+
done = assert.async()
|
45
|
+
assert.expect 1
|
47
46
|
|
48
47
|
@field.on 'tasklist:changed', (event, index, checked) ->
|
49
|
-
ok true
|
50
|
-
|
51
|
-
setTimeout ->
|
52
|
-
start()
|
53
|
-
, 20
|
48
|
+
assert.ok true
|
49
|
+
done()
|
54
50
|
|
55
51
|
@checkbox.click()
|
56
52
|
|
57
|
-
|
58
|
-
|
53
|
+
QUnit.test "can cancel a tasklist:changed event", (assert) ->
|
54
|
+
done = assert.async()
|
55
|
+
done2 = assert.async()
|
56
|
+
assert.expect 2
|
59
57
|
|
60
58
|
@field.on 'tasklist:change', (event, index, checked) ->
|
61
|
-
ok true
|
59
|
+
assert.ok true
|
62
60
|
event.preventDefault()
|
61
|
+
done2()
|
63
62
|
|
64
63
|
@field.on 'tasklist:changed', (event, index, checked) ->
|
65
|
-
ok false
|
64
|
+
assert.ok false
|
66
65
|
|
67
66
|
before = @checkbox.val()
|
68
67
|
setTimeout =>
|
69
|
-
|
70
|
-
|
68
|
+
assert.ok true
|
69
|
+
done()
|
71
70
|
, 20
|
72
71
|
|
73
72
|
@checkbox.click()
|
74
73
|
|
75
|
-
|
76
|
-
|
74
|
+
QUnit.test "enables task list items when a .js-task-list-field is present", (assert) ->
|
75
|
+
done = assert.async()
|
76
|
+
assert.expect 1
|
77
77
|
|
78
78
|
$(document).on 'tasklist:enabled', (event) ->
|
79
|
-
ok true
|
80
|
-
|
79
|
+
assert.ok true
|
80
|
+
done()
|
81
|
+
|
81
82
|
@container.taskList()
|
82
|
-
setTimeout ->
|
83
|
-
start()
|
84
|
-
, 20
|
85
83
|
|
86
|
-
|
87
|
-
|
84
|
+
QUnit.test "doesn't enable task list items when a .js-task-list-field is absent", (assert) ->
|
85
|
+
done = assert.async()
|
86
|
+
assert.expect 1
|
88
87
|
|
89
88
|
$(document).on 'tasklist:enabled', (event) ->
|
90
|
-
ok
|
89
|
+
assert.ok false
|
91
90
|
|
92
91
|
@field.remove()
|
93
92
|
|
94
93
|
@container.taskList()
|
95
|
-
|
96
|
-
|
94
|
+
|
95
|
+
setTimeout =>
|
96
|
+
assert.ok true
|
97
|
+
done()
|
97
98
|
, 20
|
@@ -1,8 +1,8 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
window.$ = window.jQuery = require('jquery')
|
2
|
+
window.TaskList = require('../../app/assets/javascripts/task_list')
|
3
3
|
|
4
|
-
module "TaskList updates",
|
5
|
-
|
4
|
+
QUnit.module "TaskList updates",
|
5
|
+
beforeEach: ->
|
6
6
|
@container = $ '<div>', class: 'js-task-list-container'
|
7
7
|
|
8
8
|
@list = $ '<ul>', class: 'task-list'
|
@@ -247,141 +247,185 @@ module "TaskList updates",
|
|
247
247
|
|
248
248
|
@blockquote.append @field
|
249
249
|
|
250
|
+
@completeItemSourcePos = '1:1-1:14'
|
251
|
+
@incompleteItemSourcePos = '2:1-2:16'
|
252
|
+
@incompleteNBSPItemSourcePos = '3:1-3:27'
|
253
|
+
@quotedCompleteItemSourcePos = '4:3-4:23'
|
254
|
+
@quotedIncompleteItemSourcePos = '5:3-5:25'
|
255
|
+
@innerCompleteItemSourcePos = '6:4-6:23'
|
256
|
+
@innerIncompleteItemSourcePos = '7:5-7:26'
|
257
|
+
@orderedCompleteItemSourcePos = '8:3-8:25'
|
258
|
+
@orderedIncompleteItemSourcePos = '9:3-9:27'
|
259
|
+
|
250
260
|
$('#qunit-fixture').append(@container)
|
251
261
|
@container.taskList()
|
252
262
|
|
253
|
-
|
263
|
+
@setSourcePosition = (item, pos) =>
|
264
|
+
item.attr('data-sourcepos', pos)
|
265
|
+
|
266
|
+
@onChanged = (assert) =>
|
267
|
+
utils =
|
268
|
+
test: (fn) =>
|
269
|
+
done = assert.async()
|
270
|
+
@field.on 'tasklist:changed', (event) =>
|
271
|
+
fn event
|
272
|
+
done()
|
273
|
+
eventHas: (name, value) =>
|
274
|
+
utils.test (event) =>
|
275
|
+
assert.equal event.detail[name], value
|
276
|
+
fieldIs: (value) =>
|
277
|
+
utils.test () =>
|
278
|
+
assert.equal @field.val(), value
|
279
|
+
|
280
|
+
afterEach: ->
|
254
281
|
$(document).off 'tasklist:changed'
|
255
282
|
|
256
|
-
|
257
|
-
|
283
|
+
QUnit.test "updates the source, marking the incomplete item as complete", (assert) ->
|
284
|
+
@onChanged(assert).eventHas('checked', true)
|
285
|
+
@onChanged(assert).eventHas('index', @incompleteItem.expectedIndex)
|
286
|
+
@onChanged(assert).fieldIs(@changes.toIncomplete)
|
258
287
|
|
259
|
-
@
|
260
|
-
ok event.detail.checked
|
261
|
-
equal event.detail.index, @incompleteItem.expectedIndex
|
262
|
-
equal @field.val(), @changes.toIncomplete
|
288
|
+
@incompleteCheckbox.click()
|
263
289
|
|
264
|
-
|
265
|
-
|
266
|
-
,
|
290
|
+
QUnit.test "updates the source, marking the incomplete item as complete (sourcepos)", (assert) ->
|
291
|
+
@setSourcePosition(@incompleteItem, @incompleteItemSourcePos)
|
292
|
+
@onChanged(assert).eventHas('checked', true)
|
293
|
+
@onChanged(assert).eventHas('index', @incompleteItem.expectedIndex)
|
294
|
+
@onChanged(assert).fieldIs(@changes.toIncomplete)
|
267
295
|
|
268
296
|
@incompleteCheckbox.click()
|
269
297
|
|
270
|
-
|
271
|
-
|
298
|
+
QUnit.test "updates the source, marking the complete item as incomplete", (assert) ->
|
299
|
+
@onChanged(assert).eventHas('checked', false)
|
300
|
+
@onChanged(assert).eventHas('index', @completeItem.expectedIndex)
|
301
|
+
@onChanged(assert).fieldIs(@changes.toComplete)
|
272
302
|
|
273
|
-
@
|
274
|
-
ok !event.detail.checked
|
275
|
-
equal event.detail.index, @completeItem.expectedIndex
|
276
|
-
equal @field.val(), @changes.toComplete
|
303
|
+
@completeCheckbox.click()
|
277
304
|
|
278
|
-
|
279
|
-
|
280
|
-
,
|
305
|
+
QUnit.test "updates the source, marking the complete item as incomplete (sourcepos)", (assert) ->
|
306
|
+
@setSourcePosition(@completeItem, @completeItemSourcePos)
|
307
|
+
@onChanged(assert).eventHas('checked', false)
|
308
|
+
@onChanged(assert).eventHas('index', @completeItem.expectedIndex)
|
309
|
+
@onChanged(assert).fieldIs(@changes.toComplete)
|
281
310
|
|
282
311
|
@completeCheckbox.click()
|
283
312
|
|
284
313
|
# See: https://github.com/github/task-lists/pull/14
|
285
|
-
|
286
|
-
|
314
|
+
QUnit.test "updates the source for items with non-breaking spaces", (assert) ->
|
315
|
+
@onChanged(assert).eventHas('checked', true)
|
316
|
+
@onChanged(assert).eventHas('index', @incompleteNBSPItem.expectedIndex)
|
317
|
+
@onChanged(assert).fieldIs(@changes.toIncompleteNBSP)
|
287
318
|
|
288
|
-
@
|
289
|
-
ok event.detail.checked
|
290
|
-
equal event.detail.index, @incompleteNBSPItem.expectedIndex
|
291
|
-
equal @field.val(), @changes.toIncompleteNBSP
|
319
|
+
@incompleteNBSPCheckbox.click()
|
292
320
|
|
293
|
-
|
294
|
-
|
295
|
-
,
|
321
|
+
# See: https://github.com/github/task-lists/pull/14
|
322
|
+
QUnit.test "updates the source for items with non-breaking spaces (sourcepos)", (assert) ->
|
323
|
+
@setSourcePosition(@incompleteNBSPItem, @incompleteNBSPItemSourcePos)
|
324
|
+
@onChanged(assert).eventHas('checked', true)
|
325
|
+
@onChanged(assert).eventHas('index', @incompleteNBSPItem.expectedIndex)
|
326
|
+
@onChanged(assert).fieldIs(@changes.toIncompleteNBSP)
|
296
327
|
|
297
328
|
@incompleteNBSPCheckbox.click()
|
298
329
|
|
299
|
-
|
300
|
-
|
330
|
+
QUnit.test "updates the source of a quoted item, marking the incomplete item as complete", (assert) ->
|
331
|
+
@onChanged(assert).eventHas('checked', true)
|
332
|
+
@onChanged(assert).eventHas('index', @quotedIncompleteItem.expectedIndex)
|
333
|
+
@onChanged(assert).fieldIs(@changes.toQuotedIncomplete)
|
301
334
|
|
302
|
-
@
|
303
|
-
ok event.detail.checked
|
304
|
-
equal event.detail.index, @quotedIncompleteItem.expectedIndex
|
305
|
-
equal @field.val(), @changes.toQuotedIncomplete
|
335
|
+
@quotedIncompleteCheckbox.click()
|
306
336
|
|
307
|
-
|
308
|
-
|
309
|
-
,
|
337
|
+
QUnit.test "updates the source of a quoted item, marking the incomplete item as complete (sourcepos)", (assert) ->
|
338
|
+
@setSourcePosition(@quotedIncompleteItem, @quotedIncompleteItemSourcePos)
|
339
|
+
@onChanged(assert).eventHas('checked', true)
|
340
|
+
@onChanged(assert).eventHas('index', @quotedIncompleteItem.expectedIndex)
|
341
|
+
@onChanged(assert).fieldIs(@changes.toQuotedIncomplete)
|
310
342
|
|
311
343
|
@quotedIncompleteCheckbox.click()
|
312
344
|
|
313
|
-
|
314
|
-
|
345
|
+
QUnit.test "updates the source of a quoted item, marking the complete item as incomplete", (assert) ->
|
346
|
+
@onChanged(assert).eventHas('checked', false)
|
347
|
+
@onChanged(assert).eventHas('index', @quotedCompleteItem.expectedIndex)
|
348
|
+
@onChanged(assert).fieldIs(@changes.toQuotedComplete)
|
315
349
|
|
316
|
-
@
|
317
|
-
ok !event.detail.checked
|
318
|
-
equal event.detail.index, @quotedCompleteItem.expectedIndex
|
319
|
-
equal @field.val(), @changes.toQuotedComplete
|
350
|
+
@quotedCompleteCheckbox.click()
|
320
351
|
|
321
|
-
|
322
|
-
|
323
|
-
,
|
352
|
+
QUnit.test "updates the source of a quoted item, marking the complete item as incomplete (sourcepos)", (assert) ->
|
353
|
+
@setSourcePosition(@quotedCompleteItem, @quotedCompleteItemSourcePos)
|
354
|
+
@onChanged(assert).eventHas('checked', false)
|
355
|
+
@onChanged(assert).eventHas('index', @quotedCompleteItem.expectedIndex)
|
356
|
+
@onChanged(assert).fieldIs(@changes.toQuotedComplete)
|
324
357
|
|
325
358
|
@quotedCompleteCheckbox.click()
|
326
359
|
|
327
|
-
|
328
|
-
|
360
|
+
QUnit.test "updates the source of a quoted quoted item, marking the incomplete item as complete", (assert) ->
|
361
|
+
@onChanged(assert).eventHas('checked', true)
|
362
|
+
@onChanged(assert).eventHas('index', @innerIncompleteItem.expectedIndex)
|
363
|
+
@onChanged(assert).fieldIs(@changes.toInnerIncomplete)
|
329
364
|
|
330
|
-
@
|
331
|
-
ok event.detail.checked
|
332
|
-
equal event.detail.index, @innerIncompleteItem.expectedIndex
|
333
|
-
equal @field.val(), @changes.toInnerIncomplete
|
365
|
+
@innerIncompleteCheckbox.click()
|
334
366
|
|
335
|
-
|
336
|
-
|
337
|
-
,
|
367
|
+
QUnit.test "updates the source of a quoted quoted item, marking the incomplete item as complete (sourcepos)", (assert) ->
|
368
|
+
@setSourcePosition(@innerIncompleteItem, @innerIncompleteItemSourcePos)
|
369
|
+
@onChanged(assert).eventHas('checked', true)
|
370
|
+
@onChanged(assert).eventHas('index', @innerIncompleteItem.expectedIndex)
|
371
|
+
@onChanged(assert).fieldIs(@changes.toInnerIncomplete)
|
338
372
|
|
339
373
|
@innerIncompleteCheckbox.click()
|
340
374
|
|
341
|
-
|
342
|
-
|
375
|
+
QUnit.test "updates the source of a quoted quoted item, marking the complete item as incomplete", (assert) ->
|
376
|
+
@onChanged(assert).eventHas('checked', false)
|
377
|
+
@onChanged(assert).eventHas('index', @innerCompleteItem.expectedIndex)
|
378
|
+
@onChanged(assert).fieldIs(@changes.toInnerComplete)
|
343
379
|
|
344
|
-
@
|
345
|
-
ok !event.detail.checked
|
346
|
-
equal event.detail.index, @innerCompleteItem.expectedIndex
|
347
|
-
equal @field.val(), @changes.toInnerComplete
|
380
|
+
@innerCompleteCheckbox.click()
|
348
381
|
|
349
|
-
|
350
|
-
|
351
|
-
,
|
382
|
+
QUnit.test "updates the source of a quoted quoted item, marking the complete item as incomplete (sourcepos)", (assert) ->
|
383
|
+
@setSourcePosition(@innerCompleteItem, @innerCompleteItemSourcePos)
|
384
|
+
@onChanged(assert).eventHas('checked', false)
|
385
|
+
@onChanged(assert).eventHas('index', @innerCompleteItem.expectedIndex)
|
386
|
+
@onChanged(assert).fieldIs(@changes.toInnerComplete)
|
352
387
|
|
353
388
|
@innerCompleteCheckbox.click()
|
354
389
|
|
355
|
-
|
356
|
-
|
390
|
+
QUnit.test "updates the source of an ordered list item, marking the incomplete item as complete", (assert) ->
|
391
|
+
@onChanged(assert).eventHas('checked', true)
|
392
|
+
@onChanged(assert).eventHas('index', @orderedIncompleteItem.expectedIndex)
|
393
|
+
@onChanged(assert).fieldIs(@changes.toOrderedIncomplete)
|
357
394
|
|
358
|
-
@
|
359
|
-
ok event.detail.checked
|
360
|
-
equal event.detail.index, @orderedIncompleteItem.expectedIndex
|
361
|
-
equal @field.val(), @changes.toOrderedIncomplete
|
395
|
+
@orderedIncompleteCheckbox.click()
|
362
396
|
|
363
|
-
|
364
|
-
|
365
|
-
,
|
397
|
+
QUnit.test "updates the source of an ordered list item, marking the incomplete item as complete (sourcepos)", (assert) ->
|
398
|
+
@setSourcePosition(@orderedIncompleteItem, @orderedIncompleteItemSourcePos)
|
399
|
+
@onChanged(assert).eventHas('checked', true)
|
400
|
+
@onChanged(assert).eventHas('index', @orderedIncompleteItem.expectedIndex)
|
401
|
+
@onChanged(assert).fieldIs(@changes.toOrderedIncomplete)
|
366
402
|
|
367
403
|
@orderedIncompleteCheckbox.click()
|
368
404
|
|
369
|
-
|
370
|
-
|
405
|
+
QUnit.test "updates the source of an ordered list item, marking the complete item as incomplete", (assert) ->
|
406
|
+
@onChanged(assert).eventHas('checked', false)
|
407
|
+
@onChanged(assert).eventHas('index', @orderedCompleteItem.expectedIndex)
|
408
|
+
@onChanged(assert).fieldIs(@changes.toOrderedComplete)
|
371
409
|
|
372
|
-
@
|
373
|
-
ok !event.detail.checked
|
374
|
-
equal event.detail.index, @orderedCompleteItem.expectedIndex
|
375
|
-
equal @field.val(), @changes.toOrderedComplete
|
410
|
+
@orderedCompleteCheckbox.click()
|
376
411
|
|
377
|
-
|
378
|
-
|
379
|
-
,
|
412
|
+
QUnit.test "updates the source of an ordered list item, marking the complete item as incomplete (sourcepos)", (assert) ->
|
413
|
+
@setSourcePosition(@orderedCompleteItem, @orderedCompleteItemSourcePos)
|
414
|
+
@onChanged(assert).eventHas('checked', false)
|
415
|
+
@onChanged(assert).eventHas('index', @orderedCompleteItem.expectedIndex)
|
416
|
+
@onChanged(assert).fieldIs(@changes.toOrderedComplete)
|
380
417
|
|
381
418
|
@orderedCompleteCheckbox.click()
|
382
419
|
|
383
|
-
|
384
|
-
|
420
|
+
QUnit.test "update ignores items that look like Task List items but lack list prefix", (assert) ->
|
421
|
+
assertItemsLackListPrefix(assert, null, null)
|
422
|
+
|
423
|
+
QUnit.test "update ignores items that look like Task List items but lack list prefix (sourcepos)", (assert) ->
|
424
|
+
assertItemsLackListPrefix(assert, '3:1-3:11', '4:1-4:10')
|
425
|
+
|
426
|
+
assertItemsLackListPrefix =(assert, sourcepos1, sourcepos2) ->
|
427
|
+
done = assert.async()
|
428
|
+
assert.expect 3
|
385
429
|
|
386
430
|
$('#qunit-fixture').empty()
|
387
431
|
|
@@ -390,6 +434,7 @@ asyncTest "update ignores items that look like Task List items but lack list pre
|
|
390
434
|
list = $ '<ul>', class: 'task-list'
|
391
435
|
|
392
436
|
item1 = $ '<li>', class: 'task-list-item'
|
437
|
+
item1.attr('data-sourcepos', sourcepos1) if sourcepos1
|
393
438
|
item1Checkbox = $ '<input>',
|
394
439
|
type: 'checkbox'
|
395
440
|
class: 'task-list-item-checkbox'
|
@@ -397,6 +442,7 @@ asyncTest "update ignores items that look like Task List items but lack list pre
|
|
397
442
|
checked: false
|
398
443
|
|
399
444
|
item2 = $ '<li>', class: 'task-list-item'
|
445
|
+
item2.attr('data-sourcepos', sourcepos2) if sourcepos2
|
400
446
|
item2Checkbox = $ '<input>',
|
401
447
|
type: 'checkbox'
|
402
448
|
class: 'task-list-item-checkbox'
|
@@ -432,18 +478,22 @@ asyncTest "update ignores items that look like Task List items but lack list pre
|
|
432
478
|
container.taskList()
|
433
479
|
|
434
480
|
field.on 'tasklist:changed', (event) =>
|
435
|
-
ok event.detail.checked
|
436
|
-
equal event.detail.index, item2.expectedIndex
|
437
|
-
equal field.val(), changes
|
438
|
-
|
439
|
-
setTimeout ->
|
440
|
-
start()
|
441
|
-
, 20
|
481
|
+
assert.ok event.detail.checked
|
482
|
+
assert.equal event.detail.index, item2.expectedIndex
|
483
|
+
assert.equal field.val(), changes
|
484
|
+
done()
|
442
485
|
|
443
486
|
item2Checkbox.click()
|
444
487
|
|
445
|
-
|
446
|
-
|
488
|
+
QUnit.test "update ignores items that look like Task List items but are links", (assert) ->
|
489
|
+
assertItemsButAreLinks(assert, null, null)
|
490
|
+
|
491
|
+
QUnit.test "update ignores items that look like Task List items but are links (sourcepos)", (assert) ->
|
492
|
+
assertItemsButAreLinks(assert, '5:1-5:24', '6:1-6:10')
|
493
|
+
|
494
|
+
assertItemsButAreLinks =(assert, sourcepos1, sourcepos2) ->
|
495
|
+
done = assert.async()
|
496
|
+
assert.expect 3
|
447
497
|
|
448
498
|
$('#qunit-fixture').empty()
|
449
499
|
|
@@ -452,6 +502,7 @@ asyncTest "update ignores items that look like Task List items but are links", -
|
|
452
502
|
list = $ '<ul>', class: 'task-list'
|
453
503
|
|
454
504
|
item1 = $ '<li>', class: 'task-list-item'
|
505
|
+
item1.attr('data-sourcepos', sourcepos1) if sourcepos1
|
455
506
|
item1Checkbox = $ '<input>',
|
456
507
|
type: 'checkbox'
|
457
508
|
class: 'task-list-item-checkbox'
|
@@ -459,6 +510,7 @@ asyncTest "update ignores items that look like Task List items but are links", -
|
|
459
510
|
checked: false
|
460
511
|
|
461
512
|
item2 = $ '<li>', class: 'task-list-item'
|
513
|
+
item2.attr('data-sourcepos', sourcepos2) if sourcepos2
|
462
514
|
item2Checkbox = $ '<input>',
|
463
515
|
type: 'checkbox'
|
464
516
|
class: 'task-list-item-checkbox'
|
@@ -498,18 +550,22 @@ asyncTest "update ignores items that look like Task List items but are links", -
|
|
498
550
|
container.taskList()
|
499
551
|
|
500
552
|
field.on 'tasklist:changed', (event) =>
|
501
|
-
ok event.detail.checked
|
502
|
-
equal event.detail.index, item2.expectedIndex
|
503
|
-
equal field.val(), changes
|
504
|
-
|
505
|
-
setTimeout ->
|
506
|
-
start()
|
507
|
-
, 20
|
553
|
+
assert.ok event.detail.checked
|
554
|
+
assert.equal event.detail.index, item2.expectedIndex
|
555
|
+
assert.equal field.val(), changes
|
556
|
+
done()
|
508
557
|
|
509
558
|
item2Checkbox.click()
|
510
559
|
|
511
|
-
|
512
|
-
|
560
|
+
QUnit.test "updates items followed by links", (assert) ->
|
561
|
+
assertItemsFollowedByLinks(assert, null, null)
|
562
|
+
|
563
|
+
QUnit.test "updates items followed by links (sourcepos)", (assert) ->
|
564
|
+
assertItemsFollowedByLinks(assert, '1:1-1:24', '2:1-3:0')
|
565
|
+
|
566
|
+
assertItemsFollowedByLinks =(assert, sourcepos1, sourcepos2) ->
|
567
|
+
done = assert.async()
|
568
|
+
assert.expect 3
|
513
569
|
|
514
570
|
$('#qunit-fixture').empty()
|
515
571
|
|
@@ -518,6 +574,7 @@ asyncTest "updates items followed by links", ->
|
|
518
574
|
list = $ '<ul>', class: 'task-list'
|
519
575
|
|
520
576
|
item1 = $ '<li>', class: 'task-list-item'
|
577
|
+
item1.attr('data-sourcepos', sourcepos1) if sourcepos1
|
521
578
|
item1Checkbox = $ '<input>',
|
522
579
|
type: 'checkbox'
|
523
580
|
class: 'task-list-item-checkbox'
|
@@ -525,6 +582,7 @@ asyncTest "updates items followed by links", ->
|
|
525
582
|
checked: false
|
526
583
|
|
527
584
|
item2 = $ '<li>', class: 'task-list-item'
|
585
|
+
item2.attr('data-sourcepos', sourcepos2) if sourcepos2
|
528
586
|
item2Checkbox = $ '<input>',
|
529
587
|
type: 'checkbox'
|
530
588
|
class: 'task-list-item-checkbox'
|
@@ -556,25 +614,30 @@ asyncTest "updates items followed by links", ->
|
|
556
614
|
container.taskList()
|
557
615
|
|
558
616
|
field.on 'tasklist:changed', (event) =>
|
559
|
-
ok event.detail.checked
|
560
|
-
equal event.detail.index, item2.expectedIndex
|
561
|
-
equal field.val(), changes
|
562
|
-
|
563
|
-
setTimeout ->
|
564
|
-
start()
|
565
|
-
, 20
|
617
|
+
assert.ok event.detail.checked
|
618
|
+
assert.equal event.detail.index, item2.expectedIndex
|
619
|
+
assert.equal field.val(), changes
|
620
|
+
done()
|
566
621
|
|
567
622
|
item2Checkbox.click()
|
568
623
|
|
569
624
|
# See https://github.com/deckar01/task_list/issues/3
|
570
|
-
|
571
|
-
|
625
|
+
QUnit.test "doesn't update items inside code blocks", (assert) ->
|
626
|
+
assertItemsInsideCodeBlocks(assert, null, null)
|
627
|
+
|
628
|
+
QUnit.test "doesn't update items inside code blocks (sourcepos)", (assert) ->
|
629
|
+
assertItemsInsideCodeBlocks(assert, '6:1-6:11', '7:1-7:11')
|
630
|
+
|
631
|
+
assertItemsInsideCodeBlocks =(assert, sourcepos1, sourcepos2) ->
|
632
|
+
done = assert.async()
|
633
|
+
assert.expect 3
|
572
634
|
|
573
635
|
container = $ '<div>', class: 'js-task-list-container'
|
574
636
|
|
575
637
|
list = $ '<ul>', class: 'task-list'
|
576
638
|
|
577
639
|
item1 = $ '<li>', class: 'task-list-item'
|
640
|
+
item1.attr('data-sourcepos', sourcepos1) if sourcepos1
|
578
641
|
item1Checkbox = $ '<input>',
|
579
642
|
type: 'checkbox'
|
580
643
|
class: 'task-list-item-checkbox'
|
@@ -582,6 +645,7 @@ asyncTest "doesn't update items inside code blocks", ->
|
|
582
645
|
checked: false
|
583
646
|
|
584
647
|
item2 = $ '<li>', class: 'task-list-item'
|
648
|
+
item2.attr('data-sourcepos', sourcepos2) if sourcepos2
|
585
649
|
item2Checkbox = $ '<input>',
|
586
650
|
type: 'checkbox'
|
587
651
|
class: 'task-list-item-checkbox'
|
@@ -623,12 +687,9 @@ asyncTest "doesn't update items inside code blocks", ->
|
|
623
687
|
container.taskList()
|
624
688
|
|
625
689
|
field.on 'tasklist:changed', (event) =>
|
626
|
-
ok event.detail.checked
|
627
|
-
equal event.detail.index, item2.expectedIndex
|
628
|
-
equal field.val(), changes
|
629
|
-
|
630
|
-
setTimeout ->
|
631
|
-
start()
|
632
|
-
, 20
|
690
|
+
assert.ok event.detail.checked
|
691
|
+
assert.equal event.detail.index, item2.expectedIndex
|
692
|
+
assert.equal field.val(), changes
|
693
|
+
done()
|
633
694
|
|
634
695
|
item2Checkbox.click()
|
data/webpack.config.js
CHANGED
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: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jared Deckard
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-11
|
12
|
+
date: 2019-12-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: html-pipeline
|
@@ -150,20 +150,16 @@ files:
|
|
150
150
|
- package.json
|
151
151
|
- script/bootstrap
|
152
152
|
- script/cibuild
|
153
|
-
- script/testsuite
|
154
153
|
- task_list.gemspec
|
155
154
|
- test/functional/helpers/remote.coffee
|
156
155
|
- test/functional/test_task_lists_behavior.html
|
157
|
-
- test/index.html
|
158
|
-
- test/run-qunit.coffee
|
159
156
|
- test/task_list/filter_test.rb
|
160
157
|
- test/task_list/summary_test.rb
|
161
158
|
- test/task_list_test.rb
|
162
159
|
- test/test_helper.rb
|
160
|
+
- test/unit/config.js
|
163
161
|
- test/unit/test_events.coffee
|
164
162
|
- test/unit/test_updates.coffee
|
165
|
-
- test/units.coffee
|
166
|
-
- test/units.css
|
167
163
|
- webpack.config.js
|
168
164
|
homepage:
|
169
165
|
licenses: []
|
@@ -191,13 +187,10 @@ summary: Markdown TaskList components
|
|
191
187
|
test_files:
|
192
188
|
- test/functional/helpers/remote.coffee
|
193
189
|
- test/functional/test_task_lists_behavior.html
|
194
|
-
- test/index.html
|
195
|
-
- test/run-qunit.coffee
|
196
190
|
- test/task_list/filter_test.rb
|
197
191
|
- test/task_list/summary_test.rb
|
198
192
|
- test/task_list_test.rb
|
199
193
|
- test/test_helper.rb
|
194
|
+
- test/unit/config.js
|
200
195
|
- test/unit/test_events.coffee
|
201
196
|
- test/unit/test_updates.coffee
|
202
|
-
- test/units.coffee
|
203
|
-
- test/units.css
|
data/script/testsuite
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
root = File.expand_path("../..", __FILE__)
|
4
|
-
Dir.chdir root
|
5
|
-
|
6
|
-
pid = fork do
|
7
|
-
$stderr.reopen "/dev/null" # silence WEBrick output
|
8
|
-
exec 'bundle', 'exec', 'rackup', '-p', '4018'
|
9
|
-
end
|
10
|
-
sleep 1
|
11
|
-
|
12
|
-
status = system('npm', 'run', 'qunit')
|
13
|
-
|
14
|
-
Process.kill 'SIGINT', pid
|
15
|
-
Process.wait pid
|
16
|
-
|
17
|
-
exit status
|
data/test/index.html
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html lang="en">
|
3
|
-
<head>
|
4
|
-
<meta charset="utf-8">
|
5
|
-
<link rel="stylesheet" href="/assets/units.css">
|
6
|
-
<script type="text/javascript" src="/assets/units.js"></script>
|
7
|
-
</head>
|
8
|
-
<body>
|
9
|
-
<div id="qunit"></div>
|
10
|
-
<div id="qunit-fixture"></div>
|
11
|
-
</body>
|
12
|
-
</html>
|
data/test/run-qunit.coffee
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
fs = require 'fs'
|
2
|
-
|
3
|
-
page = new WebPage()
|
4
|
-
page.onConsoleMessage = (msg) -> console.error msg
|
5
|
-
|
6
|
-
timeoutId = null
|
7
|
-
deferTimeout = ->
|
8
|
-
clearTimeout timeoutId if timeoutId
|
9
|
-
timeoutId = setTimeout ->
|
10
|
-
console.error "Timeout"
|
11
|
-
phantom.exit 1
|
12
|
-
, 3000
|
13
|
-
|
14
|
-
page.open phantom.args[0], ->
|
15
|
-
deferTimeout()
|
16
|
-
|
17
|
-
setInterval ->
|
18
|
-
tests = page.evaluate ->
|
19
|
-
tests = document.getElementById('qunit-tests')?.children
|
20
|
-
return unless tests
|
21
|
-
for test in tests when test.className isnt 'running' and not test.recorded
|
22
|
-
test.recorded = true
|
23
|
-
if test.className is 'pass'
|
24
|
-
'.'
|
25
|
-
else if test.className is 'fail'
|
26
|
-
'F'
|
27
|
-
|
28
|
-
return unless tests
|
29
|
-
for test in tests when test
|
30
|
-
deferTimeout()
|
31
|
-
console.error test
|
32
|
-
|
33
|
-
result = page.evaluate ->
|
34
|
-
result = document.getElementById('qunit-testresult')
|
35
|
-
tests = document.getElementById('qunit-tests').children
|
36
|
-
|
37
|
-
if result.innerText.match /completed/
|
38
|
-
console.error ""
|
39
|
-
|
40
|
-
for test in tests when test.className is 'fail'
|
41
|
-
console.error test.innerText
|
42
|
-
|
43
|
-
console.error result.innerText
|
44
|
-
return parseInt result.getElementsByClassName('failed')[0].innerText
|
45
|
-
|
46
|
-
return
|
47
|
-
|
48
|
-
phantom.exit result if result?
|
49
|
-
, 100
|
data/test/units.coffee
DELETED
data/test/units.css
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
/*= require qunit/qunit/qunit */
|