javascript

ruby
class Api::BaseController < ActionController::API
  rescue_from Devise::MissingWarden do
    head :unauthorized
  end
end

Handle 401 responses in Turbo by forcing a full redirect

rails hotwire turbo
by Henry Kim 2 tabs
javascript
// math.js - Named exports
export const PI = 3.14159;
export const E = 2.71828;

export function add(a, b) {
  return a + b;

JavaScript ES6 modules: import, export, and module patterns

javascript modules es6
by Alex Chang 1 tab
javascript
import { Controller } from "@hotwired/stimulus"

export default class extends Controller {
  static targets = ["input", "results"]
  static outlets = ["results-list"]
  static values = {

Stimulus outlets for inter-controller communication

stimulus javascript architecture
by Jordan Lee 3 tabs
php
<?php

namespace App\Events;

use App\Models\Message;
use App\Models\User;

Laravel broadcasting with Pusher for real-time events

laravel broadcasting websockets
by Carlos Mendez 3 tabs
javascript
module.exports = {
  root: true,
  parser: '@typescript-eslint/parser',
  plugins: ['@typescript-eslint'],
  extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:react-hooks/recommended', 'prettier']
};

ESLint config that avoids bikeshedding

tooling typescript
by Mateo Rodriguez 1 tab
javascript
const CACHE = 'static-v1';

self.addEventListener('install', (event) => {
  event.waitUntil(caches.open(CACHE));
  self.skipWaiting();
});

Service worker: cache static assets safely

web performance pwa
by Mateo Rodriguez 1 tab
erb
<div id="draft_status" class="text-sm text-gray-500"></div>

<%= form_with model: @draft,
              url: draft_path(@draft),
              method: :patch,
              data: { controller: 'autosave', turbo_stream: true } do |f| %>

Autosave drafts with Stimulus + Turbo (lightweight)

rails hotwire stimulus
by Henry Kim 2 tabs
erb
<div data-controller="nested-fields">
  <template data-nested-fields-target="template">
    <%= form.fields_for :links, Link.new, child_index: 'NEW_RECORD' do |lf| %>
      <div class="flex gap-2">
        <%= lf.text_field :url, class: 'flex-1 rounded border p-2' %>
        <%= lf.hidden_field :_destroy, value: '0', data: { nested_fields_target: 'destroy' } %>

Add/remove nested fields with Stimulus (no cocoon)

rails hotwire stimulus
by Henry Kim 2 tabs
yaml
web: bin/rails server
css: bin/rails tailwindcss:watch

Tailwind CSS with Rails asset pipeline

tailwind css rails
by Jordan Lee 3 tabs
javascript
// service-worker.js

const CACHE_NAME = 'my-pwa-cache-v1';
const urlsToCache = [
  '/',
  '/index.html',

Progressive Web Apps - service workers and offline support

pwa service-workers offline-first
by Alex Chang 3 tabs
erb
<%= turbo_stream.append 'messages' do %>
  <%= render @message %>
<% end %>

<turbo-stream action="scroll_into_view" target="<%= dom_id(@message) %>"></turbo-stream>

Scroll into view after append using a custom Turbo Stream action

rails hotwire turbo
by Henry Kim 2 tabs
javascript
// Creating elements
const div = document.createElement('div');
div.id = 'container';
div.className = 'box rounded';
div.textContent = 'Hello World';

DOM manipulation best practices and performance optimization

javascript dom manipulation
by Alex Chang 1 tab