• Stars
    star
    26
  • Rank 899,470 (Top 19 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created about 2 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Extend Turbo Streams with Custom Turbo Stream Actions and CableReady operations

Cable Streams

Extend Turbo Streams with Custom Turbo Stream Actions and CableReady operations.

Getting Started

yarn add cable-streams
import * as Turbo from '@hotwired/turbo'
import CableReady from 'cable_ready'
import CableStreams from 'cable-streams'

Adding Custom Turbo Stream Actions (Deprecated)

Note: Custom Turbo Stream Actions via CableStreams are deprecated. Instead register your Custom Turbo Stream Actions directly on Turbo.StreamActions.

You can define your own Turbo Stream actions on the CableStreams.customActions object.

Within the scope of your custom action function this always points to the <turbo-stream> element.

If your action is targeting specific elements in the DOM you can access them via this.targetElements. The <turbo-stream> element lookups the right elements using the provided content of the [target] attribute on the <turbo-stream> element.

You can also access the content of the <template> element within the <turbo-stream> via this.templateContent.

Example using the <template> element

// IMPORTANT: make sure you are explicitly using the `function` keyword
// for defining your custom action in order to keep the right scope!

CableStreams.customActions.log = function() {
  console.log(this.templateContent)
}

Now if you insert a <turbo-stream> element into the DOM it will be picked up and processed by your custom action.

<turbo-stream action="log" target="body">
  <template>
    This will be logged
  </template>
</turbo-stream>

Example using the regular Web API for HTMLElement

If you don't want to rely on the <template> element you can also define regular attributes on the <turbo-stream> element. The payload from the example above can be represented as:

<turbo-stream action="log" message="This will be logged"></turbo-stream>

Since the <turbo-stream> element is a regular HTMLElement you can also use every available function and property on it. With that, the custom action can be rewritten as:

CableStreams.customActions.log = function() {
  console.log(this.getAttribute("message"))
}

This leaves a lot of room for creativity.

Register CableReady operations as Turbo Stream Actions

You can register all available CableReady operations as Turbo Stream Actions.

CableStreams.registerCableReadyOperations()

Now you can use any CableReady operations serialized as JSON in the <template> tag.

For example:

<turbo-stream action="consoleLog">
  <template>
    { "message": "Hello from CableReady", "operation": "consoleLog" }
  </template>
</turbo-stream>

You can also leave out the operation option in the CableReady operation object, since it's already present on the <turbo-stream> element.

<turbo-stream action="consoleLog">
  <template>
    { "message": "Hello from CableReady without the operation key" }
  </template>
</turbo-stream>

It also works with multiple operations, passed in as an array.

<turbo-stream action="consoleLog">
  <template>
    [
      { "message": "Message 1" },
      { "message": "Message 2" }
    ]
  </template>
</turbo-stream>

Usage with Rails

There is a Rails companion gem which ships view helpers for all CableReady operations. All options are identical to the regular CableReady operations.

Installation

bundle add cable_streams

Example

Here's the same example from above using the console_log operation:

<%= turbo_stream.console_log(message: "hello world") %>

Which renders to:

<turbo-stream action="consoleLog" target="body">
  <template>
    [
      { "message": "hello world", "operation": "consoleLog" }
    ]
  </template>
</turbo-stream>

More Repositories

1

turbo_power

Power-pack for Turbo Streams
TypeScript
323
star
2

turbo_power-rails

Power-pack for Turbo Streams
Ruby
219
star
3

current.js

A tiny ๐Ÿค library (only 410 B) that allows you to access current `<meta>` elements
TypeScript
159
star
4

stimulus-lsp

Intelligent Stimulus tooling for Visual Studio Code and Neovim
TypeScript
127
star
5

gem.sh

Beautiful documentation for any Ruby gem.
Ruby
95
star
6

hotwire.io

Community-driven documentation and resource Hub for Hotwire.
HTML
94
star
7

turbo-morph

Morph action for Turbo Streams
JavaScript
90
star
8

boxdrop

Dropbox Clone built with StimulusReflex
Ruby
76
star
9

formulus

Client-side HTML form validations based on the browser HTML Form Validation API
TypeScript
72
star
10

phlexing

Simple ERB to Phlex converter
Ruby
71
star
11

turbo-ruby

Turbo helpers without the requirement for Rails
Ruby
41
star
12

stimulus-parser

Statically analyze Stimulus controllers in your project.
TypeScript
25
star
13

rails7-stimulus-reflex-esbuild

Example StimulusReflex installation using Rails 7 and esbuild
Ruby
24
star
14

stimulus-render

[PoC] HTML rendering mechanism for Stimulus Controllers
TypeScript
18
star
15

type_fusion

Collaborative Ruby type sampling
Ruby
16
star
16

local-time

Modern fork of Basecamp's `local-time`
TypeScript
12
star
17

easy_enum

Turn any Ruby class in an easy to use enum.
Ruby
12
star
18

cable_ready.cr

[WIP] CableReady Crystal port
Crystal
10
star
19

dependabot-bump-together-action

GitHub Action to bump multiple dependencies with dependabot in a single pull request
Ruby
8
star
20

rubocop-stimulus_reflex

Code style checking for StimulusReflex
Ruby
8
star
21

netatmo-ruby

Ruby gem to interact with the Netatmo REST API
Ruby
7
star
22

railsbytes-cli

CLI to apply Railsbytes.com templates to your Rails application
Ruby
7
star
23

cable-streams-rails

Rails companion gem for the `cable-streams` NPM package
Ruby
6
star
24

ShortLook-WhatsApp

Show WhatsApp users' profile pictures in ShortLook when you receive a WhatsApp notification
Objective-C
5
star
25

rubocop-cable_ready

Code style checking for CableReady
Ruby
4
star
26

ShortLook-Bandsintown

Show Bandsintown artists' profile pictures in ShortLook when you receive a Bandsintown notification
Objective-C
4
star
27

shortlook-cli

ShortLook CLI for scaffoling a ShortLook Provider
Ruby
3
star
28

stimulus-blurhash

Stimulus Controller for BlurHash
JavaScript
2
star
29

ShortLook-RocketChat

Show RocketChat users' profile pictures in ShortLook when you receive a RocketChat notification
Objective-C
2
star
30

ShortLook-VK

Show VK users' profile pictures in ShortLook when you receive a VK notification
Objective-C
2
star
31

ShortLook-GitHub

Show GitHub users' profile pictures in ShortLook when you receive a GitHub notification
Objective-C
2
star
32

ShortLook-Line

Show Line users' profile pictures in ShortLook when you receive a Line notification
Objective-C
2
star
33

ShortLook-KakaoTalk

Show KakaoTalk Contact Photos in ShortLook when you receive a KakaoTalk notification
Objective-C
2
star
34

usersnap-stimulus-repro

HTML
1
star
35

rcrdshp-market-extension

Small extension for the RCRDSHP Marketplace
JavaScript
1
star
36

POC2u

Ruby
1
star
37

cable_ready-dsl

[PoC] An opinionated DSL for CableReady.
Ruby
1
star
38

spritpreisrechner-ruby

Ruby Wrapper for the e-control.at Spritpreisrechner HTTP API
Ruby
1
star
39

tankerkoenig-ruby

Ruby Wrapper for the Tankerkoenig API
Ruby
1
star
40

async-websocket-with-inactive-tab

HTML
1
star
41

ShortLook-Mixcloud

Show Mixcloud covers in ShortLook when you receive a Mixcloud notification
Objective-C
1
star
42

stimulus_reflex-form-serialize-app

Ruby
1
star
43

mirrOS_spotify

Modul zum Anzeigen des zurzeit spielenden Track auf Spotify.
PHP
1
star
44

openmensa-parsers

OpenMensa.org parsers
Ruby
1
star
45

ShortLook-LinkedIn

Show LinkedIn users' profile pictures in ShortLook when you receive a LinkedIn notification
Objective-C
1
star
46

ShortLook-Slack

Show Slack users' profile pictures in ShortLook when you receive a Slack notification
Objective-C
1
star
47

ShortLook-SteamChat

Show SteamChat Profile Pictures in ShortLook when you receive a SteamChat notification!
Objective-C
1
star
48

ShortLook-Xing

Show Xing users' profile pictures in ShortLook when you receive a Xing notification
Objective-C
1
star
49

ShortLook-Viber

Show Viber users' profile pictures in ShortLook when you receive a Viber notification
Objective-C
1
star
50

mirrOS_todoist

Dieses mirrOS Modul zeigt deine Aufgaben aus einer Todoist-Liste an.
PHP
1
star