PageSourceSearch

https://www.drought.gov/modules/custom/feedback_form/js/feedback-form.js?tlrx84

js drought.gov collected 2026-09-24 08:35:43 UTC 4,202 bytes, 126 lines download raw bytes

1(function (Drupal, $) {
2  "use strict";
3
4  let feedbackPrepared = false;
5
6  // Fire after BigPipe
7  Drupal.behaviors.feedbackBehavior = {
8    attach(context, settings) {
9      if (
10        (context === document || context === document?.querySelector("#block-feedbackformblock")) &&
11        !feedbackPrepared
12      ) {
13        _prepareFeedbackForm();
14      }
15    },
16  };
17
18  $.fn.storageCommand = function (type, label, data) {
19    const storage = type === "session" ? sessionStorage : localStorage;
20    setTimeout(storage.setItem(label, JSON.stringify(data)), 100);
21  };
22
23  /**
24   * Sets up interaction for the feedback form.
25   */
26  function _prepareFeedbackForm() {
27    const form = document.querySelector(".c--feedback-form");
28    if (form === null) {
29      return;
30    }
31    const formOptions = {
32      modalButtonText: "Help improve this site",
33      formId: "4bf6443e",
34      elementSelector: "touchpoints-survey",
35    };
36    const touchpointForm4bf6443e = new window.FBAform(document, window).init(formOptions);
37    const formLink = form.querySelector(".c--feedback-link");
38    const formButton = form.querySelector(".c--feedback-heading button");
39    const closeButton = form.querySelector(".c--feedback-closer");
40    if (_feedbackNullOrExpired()) {
41      feedbackPrepared = true;
42      // const touchpointForm4bf6443e = new window.FBAform(document, window).init(formOptions);
43      formButton.addEventListener("click", (e) => {
44        e.stopPropagation();
45        if (formButton.getAttribute("aria-expanded") === "true") {
46          _hideFeedback();
47        } else {
48          formButton.setAttribute("aria-expanded", "true");
49          window.addEventListener("click", _hideFeedback);
50          const submitBtn = form.querySelector("button[type='submit']");
51          submitBtn?.addEventListener("click", _dateFeedback);
52        }
53      });
54      closeButton.addEventListener("click", (e) => {
55        _eliminateFeedback();
56        _dateFeedback();
57      });
58      formLink.addEventListener("click", (e) => {
59        e.preventDefault();
60        formButton.setAttribute("aria-expanded", "true");
61      });
62    } else {
63      _eliminateFeedback();
64    }
65  }
66
67  function _feedbackNullOrExpired() {
68    if (!localStorage.getItem("feedbackClosed") || localStorage.getItem("feedbackClosed") === "true") {
69      return true;
70    }
71    const current = parseInt(_prepareTimeString(), 10);
72    const past = parseInt(localStorage.getItem("feedbackClosed"), 10);
73    if (current - past > 60000) {
74      localStorage.removeItem("feedbackClosed");
75      return true;
76    }
77    return false;
78  }
79
80  function _dateFeedback() {
81    localStorage.setItem("feedbackClosed", _prepareTimeString());
82  }
83
84  function _prepareTimeString() {
85    const string = Math.floor(Date.now() / 86400).toString(10);
86    return string;
87  }
88
89  /**
90   * Sets the display of the feeback form to none.
91   */
92  function _eliminateFeedback() {
93    const form = document.querySelector(".c--feedback-form");
94    form.style.display = "none";
95  }
96
97  /**
98   * Minimizes the feedback form.
99   * @param {Event} e - The triggering event
100   */
101  function _hideFeedback(e) {
102    const form = document.querySelector(".c--feedback-form");
103    if (!e || !form.contains(e.target)) {
104      form.querySelector(".c--feedback-heading button").setAttribute("aria-expanded", "false");
105      window.removeEventListener("click", _hideFeedback);
106    }
107  }
108
109  /**
110   * Checks if the user is approaching the character limit
111   * @param {Event} e - The associated input event
112   */
113  function _characterCount(e) {
114    const description = document.querySelector("#edit-text--description");
115    if (this.value.length >= 1000) {
116      const message = document.querySelector("#feedback-message");
117      description.textContent = `(${1200 - this.value.length} characters remaining)`;
118      if (!message.textContent) {
119        message.innerHTML =
120          'You can also send an email at <a href="mailto:[email protected]">[email protected]</a>.';
121      }
122    } else if (this.value.length < 1000 && description.textContent !== "(1200 characters max)") {
123      description.textContent = "(1200 characters max)";
124    }
125  }
126})(window.Drupal, window.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.