@@ -131,10 +131,26 @@ $(() => {
131131 $postField . val ( $postField . val ( ) ?. toString ( ) . replace ( placeholder , '' ) ) ;
132132 } ) ;
133133
134+ /**
135+ * Temporarily displays the draft's status with a given message
136+ * @param {JQuery<Element> } $field draftable field
137+ * @param {string } message draft status message
138+ */
139+ const flashDraftStatus = ( $field , message ) => {
140+ const $statusEl = $field . parents ( '.widget' ) . find ( '.js-post-draft-status' ) ;
141+
142+ $statusEl . text ( message ) ;
143+ $statusEl . removeClass ( 'transparent' ) ;
144+
145+ setTimeout ( ( ) => {
146+ $statusEl . addClass ( 'transparent' ) ;
147+ } , 1500 ) ;
148+ } ;
149+
134150 /**
135151 * Attempts to save a post draft
136152 * @param {QPixelDraft } draft post draft
137- * @param {JQuery<Element> } $field body input element
153+ * @param {JQuery<Element> } $field draftable field
138154 * @param {boolean } [manual] whether manual draft saving is enabled
139155 * @returns {Promise<void> }
140156 */
@@ -148,45 +164,46 @@ $(() => {
148164 const data = await QPixel . saveDraft ( draft ) ;
149165
150166 QPixel . handleJSONResponse ( data , ( ) => {
151- const $statusEl = $field . parents ( '.widget' ) . find ( '.js-post-draft-status' ) ;
152-
153- $statusEl . removeClass ( 'transparent' ) ;
154-
155- setTimeout ( ( ) => {
156- $statusEl . addClass ( 'transparent' ) ;
157- } , 1500 ) ;
167+ flashDraftStatus ( $field , 'draft saved' ) ;
158168 } ) ;
159169 } ;
160170
161171 /**
162- * @typedef {{
163- * removeNotice?: boolean
164- * }} DeleteDraftOptions
165- *
166172 * Attempts to remove a post draft
167- * @param {DeleteDraftOptions } [options]
173+ * @param {JQuery<Element> } $field draftable field
168174 * @returns {Promise<boolean> }
169175 */
170- const deleteDraft = async ( options = { } ) => {
176+ const deleteDraft = async ( $field ) => {
171177 const data = await QPixel . deleteDraft ( ) ;
172178
173179 return QPixel . handleJSONResponse ( data , ( ) => {
174- if ( options . removeNotice ) {
175- $ ( '.js-draft-notice' ) . remove ( ) ;
176- }
180+ flashDraftStatus ( $field , 'draft deleted' ) ;
177181 } ) ;
178182 }
179183
184+ /**
185+ *
186+ * @param {EventTarget } target post field or one of the draft buttons
187+ * @returns {{
188+ * $form: JQuery<HTMLFormElement>,
189+ * $field: JQuery<HTMLElement>
190+ * }}
191+ */
192+ const getDraftElements = ( target ) => {
193+ const $tgt = $ ( target ) ;
194+ const $form = $tgt . parents ( 'form' ) ;
195+ const $field = $form . find ( '.js-post-field' ) ;
196+ return { $form, $field } ;
197+ } ;
198+
180199 /**
181200 * Extracts draft info from a given target
182- * @param {EventTarget } target post input field or "save draft" button
201+ * @param {EventTarget } target post field or one of the draft buttons
183202 * @returns {{ draft: QPixelDraft, field: any } }
184203 */
185204 const parseDraft = ( target ) => {
186- const $tgt = $ ( target ) ;
187- const $form = $tgt . parents ( 'form' ) ;
205+ const { $field : $bodyField , $form } = getDraftElements ( target ) ;
188206
189- const $bodyField = $form . find ( '.js-post-field' ) ;
190207 const $licenseField = $form . find ( '.js-license-select' ) ;
191208 const $excerptField = $form . find ( '.js-tag-excerpt' ) ;
192209
@@ -217,10 +234,9 @@ $(() => {
217234 return { draft, field : $bodyField } ;
218235 } ;
219236
220- $ ( '.js-delete-draft' ) . on ( 'click' , async ( ) => {
221- await deleteDraft ( {
222- removeNotice : true
223- } ) ;
237+ $ ( '.js-delete-draft' ) . on ( 'click' , async ( ev ) => {
238+ const { $field } = getDraftElements ( ev . target ) ;
239+ await deleteDraft ( $field ) ;
224240 } ) ;
225241
226242 $ ( '.js-save-draft' ) . on ( 'click' , async ( ev ) => {
@@ -330,19 +346,20 @@ $(() => {
330346
331347 $postFields . parents ( 'form' ) . on ( 'submit' , async ( ev ) => {
332348 const $tgt = $ ( ev . target ) ;
333- const field = $tgt . find ( '.post-field' ) ;
349+ const $ field = $tgt . find ( '.js- post-field' ) ;
334350
335351 const draftDeleted = $tgt . attr ( 'data-draft-deleted' ) === 'true' ;
336352 const isValidated = $tgt . attr ( 'data-validated' ) === 'true' ;
337353
338354 if ( draftDeleted && isValidated ) {
339355 return ;
340356 }
357+
341358 ev . preventDefault ( ) ;
342359
343360 // Draft handling
344361 if ( ! draftDeleted ) {
345- const status = await deleteDraft ( ) ;
362+ const status = await deleteDraft ( $field ) ;
346363
347364 if ( status ) {
348365 $tgt . attr ( 'data-draft-deleted' , 'true' ) ;
@@ -359,7 +376,7 @@ $(() => {
359376
360377 // Validation
361378 if ( ! isValidated ) {
362- const text = $ ( field ) . val ( ) ?. toString ( ) ;
379+ const text = $field . val ( ) ?. toString ( ) ;
363380 const validated = QPixel . validatePost ( text ) ;
364381 if ( validated [ 0 ] === true ) {
365382 $tgt . attr ( 'data-validated' , 'true' ) ;
@@ -488,7 +505,9 @@ $(() => {
488505 return ;
489506 }
490507
491- await deleteDraft ( ) ;
508+ const { $field } = getDraftElements ( ev . target ) ;
509+
510+ await deleteDraft ( $field ) ;
492511
493512 location . href = $btn . attr ( 'href' ) ;
494513 } ) ;
0 commit comments