Sha256: 658b00831633ca544d11b7ac30dd1ba1e2865d3edc309279e78da9c9d90f73e3

Contents?: true

Size: 1.35 KB

Versions: 4

Compression:

Stored size: 1.35 KB

Contents

import { Controller } from "@hotwired/stimulus";

export default class extends Controller {
  static targets = ["button", "source"];

  connect() {
    if (!this.hasButtonTarget) return;

    this.originalText = this.buttonTarget.innerText;
    this.successDuration = 2000;
  }

  copy(event) {
    event.preventDefault();

    let text = this.sourceTarget.innerText;
    const filter = this.data.get("filter");
    if (filter) {
      text = new RegExp(filter).exec(text)[0];
    }
    const temporaryInput = document.createElement("textarea");
    temporaryInput.value = text;
    document.body.appendChild(temporaryInput);
    temporaryInput.select();
    document.execCommand("copy");
    document.body.removeChild(temporaryInput);

    this.copied();
  }

  copied() {
    if (!this.hasButtonTarget) return;

    if (this.timeout) {
      clearTimeout(this.timeout);
    }

    const copiedClass = this.data.get("copiedClass");
    if (copiedClass) {
      this.buttonTarget.classList.add(copiedClass);
    }
    const copiedMessage = this.data.get("copiedMessage");
    const content = this.buttonTarget.innerHTML;
    if (copiedMessage) {
      this.buttonTarget.innerHTML = copiedMessage;
    }

    this.timeout = setTimeout(() => {
      this.buttonTarget.classList.remove(copiedClass);
      this.buttonTarget.innerHTML = content;
    }, this.successDuration);
  }
}

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
rails_mini_profiler-0.7.3 app/javascript/js/clipboard_controller.js
rails_mini_profiler-0.7.2 app/javascript/js/clipboard_controller.js
rails_mini_profiler-0.7.1 app/javascript/js/clipboard_controller.js
rails_mini_profiler-0.7.0 app/javascript/js/clipboard_controller.js