Sha256: eb4c0c2a53c87fa0450ce99e61fb6837dded22d746d9fec6e9ac03042aaf3743

Contents?: true

Size: 1.53 KB

Versions: 27

Compression:

Stored size: 1.53 KB

Contents

import { Controller } from "@hotwired/stimulus"
import getIconByMime from "../support/mime_icon"
import DomElement from "../support/dom_element"

// Connects to data-controller="attachment-preview"
export default class extends Controller {
  static targets = ["thumbnail", "thumbnailLink"]
  static values = {
    mimeType: String,
    thumbnailUrl: String,
  }

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

    if (this.thumbnailUrlValue) {
      this.useThumbnailPreview()
    } else {
      this.useMimeIconPreview()
    }
  }

  remove() {
    this.element.remove()
  }

  useThumbnailPreview() {
    const thumbnail = DomElement.fromTemplate(`
      <img src="${this.thumbnailUrlValue}" class="w-full h-full object-cover" />
    `)

    this.thumbnailLinkTarget.innerHTML = null
    this.thumbnailLinkTarget.appendChild(thumbnail)
  }

  useMimeIconPreview() {
    const mime = getIconByMime(this.mimeTypeValue)

    // Configure the icon
    mime.icon.classList.add(
      'w-3/5',      // 60% width
      'h-4/5',      // 80% height
      'rounded-lg',
      'shadow-lg',
      'bg-white',
      'p-2'         // Add some padding inside the icon container
    )

    // Center the icon in the container
    this.thumbnailLinkTarget.classList.add(
      'flex',
      'items-center',
      'justify-center'
    )

    // Set the background color
    this.thumbnailLinkTarget.style.backgroundColor = mime.color

    // Clear and append the icon
    this.thumbnailLinkTarget.innerHTML = null
    this.thumbnailLinkTarget.appendChild(mime.icon)
  }
}

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
plutonium-0.20.4 src/js/controllers/attachment_preview_controller.js
plutonium-0.20.3 src/js/controllers/attachment_preview_controller.js
plutonium-0.20.1 src/js/controllers/attachment_preview_controller.js
plutonium-0.20.0 src/js/controllers/attachment_preview_controller.js
plutonium-0.19.13 src/js/controllers/attachment_preview_controller.js
plutonium-0.19.12 src/js/controllers/attachment_preview_controller.js
plutonium-0.19.11 src/js/controllers/attachment_preview_controller.js
plutonium-0.19.10 src/js/controllers/attachment_preview_controller.js
plutonium-0.19.9 src/js/controllers/attachment_preview_controller.js
plutonium-0.19.8 src/js/controllers/attachment_preview_controller.js
plutonium-0.19.7 src/js/controllers/attachment_preview_controller.js
plutonium-0.19.6 src/js/controllers/attachment_preview_controller.js
plutonium-0.19.5 src/js/controllers/attachment_preview_controller.js
plutonium-0.19.4 src/js/controllers/attachment_preview_controller.js
plutonium-0.19.3 src/js/controllers/attachment_preview_controller.js
plutonium-0.19.2 src/js/controllers/attachment_preview_controller.js
plutonium-0.19.1 src/js/controllers/attachment_preview_controller.js
plutonium-0.19.0 src/js/controllers/attachment_preview_controller.js
plutonium-0.18.8 src/js/controllers/attachment_preview_controller.js
plutonium-0.18.7 src/js/controllers/attachment_preview_controller.js