deckar01-task_list 2.2.1 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 */
|