Figdam


​

​

πŸ‘‹,

You probably know that the team at Edgar Allan is behind Slater. But did you know that we work on other products in between our client work? You use Slater. You may have heard about Wes. And you probably don't know about our latest product, Figdam.

Do you know what a DAM is? a Digital Asset Manager? We are building one. Figdam helps users manage all of their images in one place, in Figma. If an image needs to be updated, swap it out in Figma, and it will be updated across the web. Figdam also supports image manipulation and analytics. It can even generate a PDF from a series of images or Figma frames.

Demo coming next week!

Javascript 101: JS & the File API

Let's continue our focus on images and discuss the File API. We can write code to preview the image before the user uploads it.
​
Ok, The File API is a set of APIs that allows web applications to work with file objects in the browser. It provides a way to handle file upload operations and access the contents of selected files. The File API consists of the following main interfaces and methods:

  1. File object: Represents a file that has been selected by the user or obtained from other sources like drag and drop operations or the <input type="file"> element.
  2. FileList object: A list of File objects, usually obtained from a file input element or a drag and drop event.
  3. FileReader object: Allows you to read the contents of a File object asynchronously. It provides methods like readAsText(), readAsDataURL(), readAsArrayBuffer(), and readAsBinaryString() to access the file content in various formats.
  4. Blob object: A raw data type that represents a binary large object (BLOB). It can be used to create File objects or handle binary data.

Here's an example of how you can work with the File API to display an image before file upload:

<!-- HTML -->
<input type="file" id="fileInput" accept="image/*">
<div id="imageContainer"></div>

// JavaScript​
const fileInput = document.getElementById('fileInput');
const imageContainer = document.getElementById('imageContainer');
​
fileInput.addEventListener('change', (event) => {
const file = event.target.files[0];
​
if (file && file.type.startsWith('image/')) {
const reader = new FileReader();
​
reader.onload = () => {
const img = new Image();
img.src = reader.result;
img.onload = () => {
imageContainer.innerHTML = '';
imageContainer.appendChild(img);
};
};
​
reader.readAsDataURL(file);
}
});

​

In this example:

  1. We add an accept="image/*" attribute to the file input element to allow only image files to be selected.
  2. We create a <div> element with an id imageContainer where we'll display the image.
  3. Inside the change event listener, we first check if a file has been selected and if it's an image file.
  4. We create a new FileReader instance and set up an onload event listener.
  5. Inside the onload event listener, we create a new Image object and set its src to the result of the FileReader (which is a data URL representing the image data).
  6. We set up another onload event listener for the Image object.
  7. Inside this second onload event listener, we clear the contents of the imageContainer div and append the Image element to it, displaying the image.

This code will display the image on the webpage without any manipulation. If you want to perform any image manipulation, you can add that logic inside the second onload event listener before appending the Image element to the imageContainer.

Note that the readAsDataURL() method is used here because it converts the image file into a data URL, which can be directly set as the src of an Image object. This approach works well for displaying images.

​

Your projects, supported by Slater

​Dennis Snellenberg created this GSAP digital experience. Amazing! Go check it out at str8fire.io.

​

Are you working on something worth sharing? Please share!

​

Happy coding!

πŸ€™ the Slater Team

​

If Slater helps you create better websites, please support the team behind it.

Welcome To Slater!

Slater resources, updates and community activity

Read more from Welcome To Slater!
video

You may recall that the original Slater had access controls for projects and files. We didn't want just anyone going in there and rewriting our Javascript. However, managing access for teammates became cumbersome (I even added a "god mode" to give myself access to any project or file). Since we generally trusted each other and never had issues, we decided to leave it out of the latest version of Slater. That said, we understand that some teams work differently, and maintaining control can be...

video

We're going to take a brief break from the regular newsletter format to celebrate the release of ask.edgarallan.com. Today, let's hear from Mason Poe, the Founder of Edgar Allan and Slater. I'm thrilled to announce the launch of ask.edgarallan.com and the start of a new conversation. We can all feel it: the web is changing in ways that seem both dramatic and, in a weird way, imperceptible. At times, it’s hard to know where to start exploring what could be next. Sometimes, when you think...

Our new Edgar Allan website, which we're launching next week 🀫, uses over 3,000 lines of code. It’s a bit unwieldy! To better support the new EA website and similar JavaScript-heavy projects, we’ve added slater_import. This feature allows you to write a function once and then reuse it across all the files in your project. You can see how to use it here. ⬇️ Not ready to watch the video? No problem. To import a file, simply start typing the name of the file you want to import and click on the...