text: import $ from "jquery";
  import tippy from "tippy.js";
  
  import {$t} from "./i18n";
  
  export const status_classes = "alert-error alert-success alert-info alert-warning";
  
  // TODO: Move this to the portico codebase.
  export function autofocus(selector) {
      $(() => {
          $(selector).trigger("focus");
      });
  }
  
  export function phrase_match(query, phrase) {
      // match "tes" to "test" and "stream test" but not "hostess"
      let i;
      query = query.toLowerCase();
  
      phrase = phrase.toLowerCase();
      if (phrase.startsWith(query)) {
          return true;
      }
  
      const parts = phrase.split(" ");
      for (i = 0; i < parts.length; i += 1) {
          if (parts[i].startsWith(query)) {
              return true;
          }
      }
      return false;
  }
  
  export function copy_data_attribute_value(elem, key) {
      // function to copy the value of data-key
      // attribute of the element to clipboard
      const temp = $(document.createElement("input"));
      $("body").append(temp);
      temp.val(elem.data(key)).trigger("select");
      document.execCommand("copy");
      temp.remove();
      elem.fadeOut(250);
      elem.fadeIn(1000);
  }
  
  export function has_mac_keyboard() {
      return /mac/i.test(navigator.platform);
  }
  
  export function adjust_mac_shortcuts(key_elem_class, require_cmd_style) {
      if (!has_mac_keyboard()) {
          return;
      }
  
      const keys_map = new Map([
          ["Backspace", "Delete"],
          ["Enter", "Return"],
          ["Home", "Fn + ←"],
          ["End", "Fn + →"],
          ["PgUp", "Fn + ↑"],
          ["PgDn", "Fn + ↓"],
          ["Ctrl", "⌘"],
      ]);
  
      $(key_elem_class).each(function () {
          let key_text = $(this).text();
          const keys = key_text.match(/[^\s+]+/g) || [];
  
          if (key_text.includes("Ctrl") && require_cmd_style) {
              $(this).addClass("mac-cmd-key");
          }
  
          for (const key of keys) {
              if (keys_map.get(key)) {
                  key_text = key_text.replace(key, keys_map.get(key));
              }
          }
  
          $(this).text(key_text);
      });
  }
  
  // See https://zulip.readthedocs.io/en/latest/development/authentication.html#password-form-implementation
  // for design details on this feature.
  function set_password_toggle_label(password_selector, label, tippy_tooltips) {
      $(password_selector).attr("aria-label", label);
      if (tippy_tooltips) {
          if (!$(password_selector)[0]._tippy) {
              tippy(password_selector);
          }
          $(password_selector)[0]._tippy.setContent(label);
      } else {
          $(password_selector).attr("title", label);
      }
  }
  
  function toggle_password_visibility(password_field_id, password_selector, tippy_tooltips) {
      let label;
      const password_field = $(password_field_id);
  
      if (password_field.attr("type") === "password") {
          password_field.attr("type", "text");
          $(password_selector).removeClass("fa-eye-slash").addClass("fa-eye");
          label = $t({defaultMessage: "Hide password"});
      } else {
          password_field.attr("type", "password");
          $(password_selector).removeClass("fa-eye").addClass("fa-eye-slash");
          label = $t({defaultMessage: "Show password"});
      }
      set_password_toggle_label(password_selector, label, tippy_tooltips);
  }
  
  export function reset_password_toggle_icons(password_field, password_selector) {
      $(password_field).attr("type", "password");
      $(password_selector).removeClass("fa-eye").addClass("fa-eye-slash");
      const label = $t({defaultMessage: "Show password"});
      set_password_toggle_label(password_selector, label, true);
  }
  
  export function setup_password_visibility_toggle(password_field_id, password_selector, opts = {}) {
      opts = {tippy_tooltips: false, ...opts};
      const label = $t({defaultMessage: "Show password"});
      set_password_toggle_label(password_selector, label, opts.tippy_tooltips);
      $(password_selector).on("click", (e) => {
          e.preventDefault();
          e.stopPropagation();
          toggle_password_visibility(password_field_id, password_selector, opts.tippy_tooltips);
      });
  }
  