33# = provides tasklist:enabled
44# = provides tasklist:disabled
55# = provides tasklist:change
6- # = provides tasklist:updateSend
7- # = provides tasklist:updateComplete
86#
9- # = require jquery
107# = require crema/events/pageupdate
11- # = require rails/remote
128#
139# Enables Task List update behavior.
1410#
2319# </label>
2420# </li>
2521# </ul>
26- # <form class="js-task-list-form" >
22+ # <form>
2723# <textarea class="js-task-list-field">- [ ] text</textarea>
2824# </form>
2925# </div>
3430#
3531# TaskList Items SHOULD be an a list (`UL`/`OL`) element.
3632#
37- # Task list items MUST match `input.task-list-item-checkbox[type=checkbox]`,
38- # MUST be `disabled`, and MUST define `data-item-index`. The Item's contents
39- # SHOULD be wrapped in a `LABEL` element.
33+ # Task list items MUST match `( input) .task-list-item-checkbox`, MUST be
34+ # `disabled` by default and MUST define `data-item-index`. The Item's
35+ # contents SHOULD be wrapped in a `LABEL` element.
4036#
41- # TaskLists MUST have a `(form ).js-task-list-form` containing a
42- # `(textarea).js-task-list-field` form element whose ` value` attribute is the
43- # source (Markdown) to be udpated. The source MUST follow the syntax guidelines.
37+ # TaskLists MUST have a `(textarea ).js-task-list-field` form element whose
38+ # `value` attribute is the source (Markdown) to be udpated. The source MUST
39+ # follow the syntax guidelines.
4440#
45- # TaskList updates SHOULD be handled asynchronosly with `data-remote`.
46- # See: https://github.com/josh/rails-behaviors
41+ # TaskList updates trigger `tasklist:change` events.
4742#
4843# jQuery is required and the `$.pageUpdate` behavior MUST be available.
4944#
5045# ### Events
5146#
5247# When the TaskList field has been changed, a `tasklist:change` event is fired.
5348#
54- # Updating a task list item by clicking on the check box will send an
55- # `tasklist:updateSend` event. Following the `ajaxComplete` event,
56- # `tasklist:updateComplete` is triggered.
57- #
5849# ### NOTE
5950#
6051# Task list checkboxes are rendered as disabled by default because rendered
6152# user content is cached without regard for the viewer. We enable checkboxes
62- # on `pageUpdate` if the container has a `form .js-task-list-form `.
53+ # on `pageUpdate` if the container has a `(textarea) .js-task-list-field `.
6354
6455incomplete = " [ ]"
6556complete = " [x]"
@@ -121,12 +112,9 @@ updateTaskListItem = (source, itemIndex, checked) ->
121112 line
122113 result .join (" \n " )
123114
124- # Task list checkboxes are rendered as disabled by default
125- # because rendered user content is cached without regard
126- # for the viewer. Enables the checkboxes and applies the
127- # correct list style, if the viewer is able to edit the comment.
115+ # Enables task list items to trigger updates.
128116enableTaskList = ($container ) ->
129- if $container .find (' .js-task-list-form ' ).length > 0
117+ if $container .find (' .js-task-list-field ' ).length > 0
130118 $container.
131119 find (' .task-list-item' ).addClass (' enabled' ).
132120 find (' .task-list-item-checkbox' ).attr (' disabled' , null )
@@ -138,12 +126,11 @@ disableTaskList = ($container) ->
138126 find (' .task-list-item-checkbox' ).attr (' disabled' , ' disabled' )
139127 $container .trigger ' tasklist:disabled'
140128
141- # Submit updates to task list items asynchronously .
142- # Successful updates won't require re-rendering to represent reality .
129+ # Updates the $field value to reflect the state of $item .
130+ # Triggers the `tasklist:change` event when the value has changed .
143131updateTaskList = ($item ) ->
144132 $container = $item .closest ' .js-task-list-container'
145- $form = $container .find ' .js-task-list-form'
146- $field = $form .find ' .js-task-list-field'
133+ $field = $container .find ' .js-task-list-field'
147134 index = parseInt $item .attr (' data-item-index' )
148135 checked = $item .prop ' checked'
149136
@@ -152,16 +139,17 @@ updateTaskList = ($item) ->
152139 $field .val updateTaskListItem ($field .val (), index, checked)
153140 $field .trigger ' change'
154141 $field .trigger ' tasklist:change' , [index, checked]
155- $form .trigger ' tasklist:updateSend' , [index, checked]
156- $form .one ' ajaxComplete' , ->
157- enableTaskList $container
158- $form .trigger ' tasklist:updateComplete'
159- $form .submit ()
160142
161143# When the task list item checkbox is updated, submit the change
162144$ (document ).on ' change' , ' .task-list-item-checkbox' , ->
163145 updateTaskList $ (this )
164146
147+ $ (document ).on ' tasklist:disable' , ' .js-task-list-container' , (event ) ->
148+ disableTaskList $ (this )
149+
150+ $ (document ).on ' tasklist:enable' , ' .js-task-list-container' , (event ) ->
151+ enableTaskList $ (this )
152+
165153$ .pageUpdate ->
166154 $ (' .js-task-list-container' ).each ->
167155 enableTaskList $ (this )
0 commit comments