PageSourceSearch

https://bmtinfonet.org/modules/contrib/webform/js/webform.element.counter.js?tlx8nq

js bmtinfonet.org collected 2026-10-02 10:07:42 UTC 2,703 bytes, 75 lines download raw bytes

1/**
2 * @file
3 * JavaScript behaviors for jQuery Text Counter integration.
4 */
5
6(function ($, Drupal, once) {
7  // @see https://github.com/ractoon/jQuery-Text-Counter#options
8  Drupal.webform = Drupal.webform || {};
9  Drupal.webform.counter = Drupal.webform.counter || {};
10  Drupal.webform.counter.options = Drupal.webform.counter.options || {};
11
12  /**
13   * Initialize text field and textarea word and character counter.
14   *
15   * @type {Drupal~behavior}
16   */
17  Drupal.behaviors.webformCounter = {
18    attach(context) {
19      if (!$.fn.textcounter) {
20        return;
21      }
22
23      $(once('webform-counter', '.js-webform-counter', context)).each(function () {
24        var options = {
25          type: $(this).data('counter-type'),
26          max: $(this).data('counter-maximum'),
27          min: $(this).data('counter-minimum') || 0,
28          counterText: $(this).data('counter-minimum-message'),
29          countDownText: $(this).data('counter-maximum-message'),
30          inputErrorClass: 'webform-counter-warning',
31          counterErrorClass: 'webform-counter-warning',
32          countSpaces: true,
33          twoCharCarriageReturn: true,
34          stopInputAtMaximum: false,
35          // Don't display min/max message since server-side validation will
36          // display these messages.
37          minimumErrorText: '',
38          maximumErrorText: ''
39        };
40
41        options.countDown = (options.max) ? true : false;
42        if (!options.counterText) {
43          options.counterText = (options.type === 'word') ? Drupal.t('%d word(s) entered') : Drupal.t('%d character(s) entered');
44        }
45        if (!options.countDownText) {
46          options.countDownText = (options.type === 'word') ? Drupal.t('%d word(s) remaining') : Drupal.t('%d character(s) remaining');
47        }
48
49        options = $.extend(options, Drupal.webform.counter.options);
50
51        // Allow custom options.
52        if ($(this).attr('data-options')) {
53          options = $.extend(true, options, JSON.parse($(this).attr('data-options')));
54        }
55
56        // The text counter plugin builds counter HTML from string options.
57        // @see https://github.com/ractoon/jQuery-Text-Counter#options
58        // Prevent custom options from changing element names used to build HTML.
59        delete options.countContainerElement;
60        delete options.errorTextElement;
61
62        // Escape remaining text and class options before they are used in HTML.
63        Object.keys(options).forEach(function (key) {
64          if (typeof options[key] === 'string') {
65            options[key] = Drupal.checkPlain(options[key]);
66          }
67        });
68
69        $(this).textcounter(options);
70      });
71
72    }
73  };
74
75})(jQuery, Drupal, once);

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.