PageSourceSearch

https://openstructures.net/modules/contrib/form_placeholder/js/form_placeholder.js?v=10.6.1

js openstructures.net collected 2026-10-02 06:13:45 UTC 3,597 bytes, 96 lines download raw bytes

1(function ($) {
2  'use strict';
3
4  Drupal.form_placeholder = {};
5
6  Drupal.form_placeholder.elementIsSupported = function ($element) {
7    var supportedElement = $element.is('input[type=number], input[type=text], input[type=email], input[type=url], input[type=tel], input[type=password], textarea, select');
8    var hasId = $element.attr('id');
9    return supportedElement && hasId;
10  };
11
12  Drupal.form_placeholder.placeholderIsSupported = function () {
13    // Opera Mini v7 doesn’t support placeholder although its DOM seems to
14    // indicate so.
15    var isOperaMini = Object.prototype.toString.call(window.operamini) == '[object OperaMini]';
16    return 'placeholder' in document.createElement('input') && !isOperaMini;
17  };
18
19  Drupal.behaviors.form_placeholder = {
20    attach: function (context, settings) {
21      // In some cases settings after ajax form submit could contain only
22      // settings from response but not all Drupal.settings data.
23      if (!settings.hasOwnProperty('form_placeholder')) {
24        settings = Drupal.settings;
25      }
26      var include = settings.form_placeholder.include;
27      if (include) {
28        include += ', ';
29      }
30      include += '.form-placeholder-include-children *';
31      include += ', .form-placeholder-include';
32      var exclude = settings.form_placeholder.exclude;
33      if (exclude) {
34        exclude += ', ';
35      }
36      exclude += '.form-placeholder-exclude-children *';
37      exclude += ', .form-placeholder-exclude';
38      exclude += ', .form-placeholder-processed';
39
40      var required_indicator = settings.form_placeholder.required_indicator;
41
42      $(include).not(exclude).each(function () {
43        var $textfield = $(this);
44        var elementSupported = Drupal.form_placeholder.elementIsSupported($textfield);
45        var placeholderSupported = Drupal.form_placeholder.placeholderIsSupported() || $().placeholder;
46
47        // Placeholder is supported.
48        if (elementSupported && placeholderSupported) {
49          var $form = $textfield.closest('form');
50          var $label = $form.find('label[for=' + this.id + ']');
51          var placeholder = $.trim($label.text());
52
53          // Handle required field marker.
54          if ($label.hasClass('form-required')) {
55            switch (required_indicator) {
56              case 'append':
57                $textfield.after('<span class="form-required"></span>');
58                break;
59              case 'remove':
60                // It's removed anyway, so we don't have to do anything.
61                break;
62              case 'leave':
63                placeholder += ' *';
64                break;
65              case 'text':
66                placeholder += ' (' + Drupal.t('required') + ')';
67                break;
68            }
69          }
70          else if (required_indicator === 'optional') {
71            placeholder += ' (' + Drupal.t('optional') + ')';
72          }
73
74          if (!$textfield.attr('placeholder')) {
75            if ($textfield.is('select')) {
76              var $selected = $textfield.find('[value=""]');
77              $selected.text($label.text());
78              $selected.prop('disabled', true);
79            }
80            else {
81              $textfield.attr('placeholder', placeholder);
82            }
83            $label.addClass('visually-hidden');
84          }
85
86          // Fallback support for older browsers.
87          if (!Drupal.form_placeholder.placeholderIsSupported() && $().placeholder) {
88            $textfield.placeholder();
89          }
90          $textfield.addClass('form-placeholder-processed');
91        }
92      });
93    }
94  };
95
96})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.