|
254 | 254 | $obj.duplicateEditInput.show().trigger('focus'); |
255 | 255 | }); |
256 | 256 |
|
257 | | - $obj.duplicateEditInput.on('keydown', function(e) { |
258 | | - if (e.keyCode === keymap.ENTER) { |
259 | | - e.preventDefault(); |
260 | | - e.stopPropagation(); |
| 257 | + /** |
| 258 | + * This callback handles live idea title searches for duplicate ideas. |
| 259 | + */ |
| 260 | + phpbb.addAjaxCallback('idea_search', function(res) { |
| 261 | + phpbb.search.handleResponse(res, $(this), false, phpbb.getFunctionByName('phpbb.search.setDuplicateOnEvent')); |
| 262 | + }); |
261 | 263 |
|
262 | | - var $this = $(this), |
263 | | - url = $obj.duplicateEdit.attr('href'), |
264 | | - value = $this.val(); |
| 264 | + /** |
| 265 | + * This performs actions on each result from the live idea title search for duplicate ideas. |
| 266 | + * |
| 267 | + * @param {jQuery|JQuery} $input Search input|textarea. |
| 268 | + * @param {object} value Result object. |
| 269 | + * @param {jQuery|JQuery} $row Result element. |
| 270 | + * @param {jQuery|JQuery} $container jQuery object for the search container. |
| 271 | + */ |
| 272 | + phpbb.search.setDuplicateOnEvent = function($input, value, $row, $container) { |
| 273 | + $row.on('click', function() { |
| 274 | + setDuplicate($input, value); |
| 275 | + phpbb.search.closeResults($input, $container); |
| 276 | + }); |
| 277 | + }; |
265 | 278 |
|
266 | | - if (value && isNaN(Number(value))) { |
267 | | - phpbb.alert($this.attr('data-l-err'), $this.attr('data-l-msg')); |
268 | | - return; |
| 279 | + /** |
| 280 | + * Assign a duplicate idea identifier to a given idea. |
| 281 | + * |
| 282 | + * @param {jQuery|JQuery} $input Search input|textarea. |
| 283 | + * @param {object} value Result object. |
| 284 | + */ |
| 285 | + function setDuplicate($input, value) { |
| 286 | + if (value.result && isNaN(Number(value.result))) { |
| 287 | + phpbb.alert($input.attr('data-l-err'), $input.attr('data-l-msg')); |
| 288 | + return; |
| 289 | + } |
| 290 | + $input.val(value.clean_title); |
| 291 | + showLoadingIndicator(); |
| 292 | + $.get($obj.duplicateEdit.attr('href'), {duplicate: Number(value.result)}, function(res) { |
| 293 | + if (res) { |
| 294 | + if (value.result) { |
| 295 | + $obj.duplicateLink |
| 296 | + .text(value.clean_title) |
| 297 | + .attr('href', $obj.duplicateLink.attr('data-link').replace(/^(.*\/)(\d+)$/, '$1') + value.result) |
| 298 | + .show(); |
| 299 | + } else { |
| 300 | + $obj.duplicateLink |
| 301 | + .empty() |
| 302 | + .removeAttr('href'); |
| 303 | + } |
| 304 | + $input.hide(); |
| 305 | + $obj.duplicateEdit.toggleAddEdit(value.result); |
269 | 306 | } |
| 307 | + }).always(hideLoadingIndicator); |
| 308 | + } |
270 | 309 |
|
271 | | - showLoadingIndicator(); |
272 | | - $.get(url, {duplicate: Number(value)}, function(res) { |
273 | | - if (res) { |
274 | | - if (value) { |
275 | | - var msg = $obj.duplicateLink.attr('data-l-msg'); |
276 | | - var link = $obj.duplicateLink.attr('data-link').replace(/^(.*\/)(\d+)$/, '$1'); |
277 | | - |
278 | | - $obj.duplicateLink |
279 | | - .text(msg + value) |
280 | | - .attr('href', link + value) |
281 | | - .show(); |
282 | | - } else { |
283 | | - $obj.duplicateLink |
284 | | - .text(value) |
285 | | - .attr('href', value); |
286 | | - } |
287 | | - |
288 | | - $this.hide(); |
289 | | - |
290 | | - $obj.duplicateEdit.toggleAddEdit(value); |
| 310 | + /** |
| 311 | + * Handling of the duplicate idea input field. |
| 312 | + * ENTER: When the input field is empty clear any existing duplicate entry. Otherwise just show an alert message. |
| 313 | + * ESC: Will clear and close the input field (if it isn't cleared, live search may unexpectedly run). |
| 314 | + */ |
| 315 | + $obj.duplicateEditInput.on('keydown.duplicate', function(e) { |
| 316 | + var $this = $(this), |
| 317 | + key = e.keyCode || e.which; |
| 318 | + switch (key) { |
| 319 | + case keymap.ESC: |
| 320 | + $this.val('').hide(); |
| 321 | + $obj.duplicateEdit.show(); |
| 322 | + $obj.duplicateLink.toggle($obj.duplicateLink.html().length !== 0); |
| 323 | + break; |
| 324 | + case keymap.ENTER: |
| 325 | + if ($this.val().length === 0) { |
| 326 | + setDuplicate($this, {'result': '', 'clean_title': ''}); |
| 327 | + } else { |
| 328 | + e.stopPropagation(); |
| 329 | + phpbb.alert($this.attr('data-l-err'), $this.attr('data-l-msg')); |
291 | 330 | } |
292 | | - }).always(hideLoadingIndicator); |
293 | | - } else if (e.keyCode === keymap.ESC) { |
294 | | - e.preventDefault(); |
295 | | - |
296 | | - var $link = $obj.duplicateLink; |
297 | | - |
298 | | - $(this).hide(); |
299 | | - $obj.duplicateEdit.show(); |
300 | | - |
301 | | - if ($link.html()) { |
302 | | - $link.show(); |
303 | | - } |
| 331 | + break; |
304 | 332 | } |
305 | 333 | }); |
306 | 334 |
|
|
0 commit comments