FossilRepo
| afe42d0… | ragelink | 1 | /*global URLify*/ |
| afe42d0… | ragelink | 2 | 'use strict'; |
| afe42d0… | ragelink | 3 | { |
| afe42d0… | ragelink | 4 | const $ = django.jQuery; |
| afe42d0… | ragelink | 5 | $.fn.prepopulate = function(dependencies, maxLength, allowUnicode) { |
| afe42d0… | ragelink | 6 | /* |
| afe42d0… | ragelink | 7 | Depends on urlify.js |
| afe42d0… | ragelink | 8 | Populates a selected field with the values of the dependent fields, |
| afe42d0… | ragelink | 9 | URLifies and shortens the string. |
| afe42d0… | ragelink | 10 | dependencies - array of dependent fields ids |
| afe42d0… | ragelink | 11 | maxLength - maximum length of the URLify'd string |
| afe42d0… | ragelink | 12 | allowUnicode - Unicode support of the URLify'd string |
| afe42d0… | ragelink | 13 | */ |
| afe42d0… | ragelink | 14 | return this.each(function() { |
| afe42d0… | ragelink | 15 | const prepopulatedField = $(this); |
| afe42d0… | ragelink | 16 | |
| afe42d0… | ragelink | 17 | const populate = function() { |
| afe42d0… | ragelink | 18 | // Bail if the field's value has been changed by the user |
| afe42d0… | ragelink | 19 | if (prepopulatedField.data('_changed')) { |
| afe42d0… | ragelink | 20 | return; |
| afe42d0… | ragelink | 21 | } |
| afe42d0… | ragelink | 22 | |
| afe42d0… | ragelink | 23 | const values = []; |
| afe42d0… | ragelink | 24 | $.each(dependencies, function(i, field) { |
| afe42d0… | ragelink | 25 | field = $(field); |
| afe42d0… | ragelink | 26 | if (field.val().length > 0) { |
| afe42d0… | ragelink | 27 | values.push(field.val()); |
| afe42d0… | ragelink | 28 | } |
| afe42d0… | ragelink | 29 | }); |
| afe42d0… | ragelink | 30 | prepopulatedField.val(URLify(values.join(' '), maxLength, allowUnicode)); |
| afe42d0… | ragelink | 31 | }; |
| afe42d0… | ragelink | 32 | |
| afe42d0… | ragelink | 33 | prepopulatedField.data('_changed', false); |
| afe42d0… | ragelink | 34 | prepopulatedField.on('change', function() { |
| afe42d0… | ragelink | 35 | prepopulatedField.data('_changed', true); |
| afe42d0… | ragelink | 36 | }); |
| afe42d0… | ragelink | 37 | |
| afe42d0… | ragelink | 38 | if (!prepopulatedField.val()) { |
| afe42d0… | ragelink | 39 | $(dependencies.join(',')).on('keyup change focus', populate); |
| afe42d0… | ragelink | 40 | } |
| afe42d0… | ragelink | 41 | }); |
| afe42d0… | ragelink | 42 | }; |
| afe42d0… | ragelink | 43 | } |