Description
This gem provides simple functionality of loading page specific javascript and allows to pass data from a controller. It requires only Rails >= 3.1 with asset pipeline enabled. Keep desired js code in controller related files as action based functions. They will be triggered only when matching controller and action parameters and when DOM is ready.
PluggableJs alternatives and similar gems
Based on the "Misc" category.
Alternatively, view PluggableJs alternatives based on common mentions on social networks and blogs.
-
Gollum
A simple, Git-powered wiki with a sweet API and local frontend. -
Guard
Guard is a command line tool to easily handle events on file system modifications. -
Betty
Friendly English-like interface for your command line. Don't remember a command? Ask Betty. -
auto_html
Collection of filters that transform plain text into HTML code. -
Clipboard
Ruby access to the clipboard on Windows, Linux, macOS, Java, Cygwin, and WSL 📋︎ -
DeepPluck
Allow you to pluck attributes from nested associations without loading a bunch of records. -
Ruby Operators
Webpage to show interesting names of different Ruby operators. -
SmartTruncate
smart_truncate is a simple Rails gem that truncates text like a human.
Access the most powerful time series database as a service
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of PluggableJs or a related project?
README
PluggableJs
This gem provides simple functionality of loading page specific javascript and allows to pass data from a controller. It requires only Rails >= 3.1 with asset pipeline enabled. Keep desired js code in controller related files as action based functions. They will be triggered only when matching controller and action parameters and when DOM is ready.
Installation
- Add
gem 'pluggable_js', '~> 2.2.0'
to Gemfile and runbundle
command to install it - Add
<%= javascript_pluggable_tag %>
helper to application layout file above the closing</body>
tag
The place for the helper is important. Primarily it serves the DOM ready purpose and completely necessary if you decided to use turbolinks.
Usage
Simply define functions in your controller related file (e.g. posts.coffee) like so:
@['posts#index'] = (data) ->
# your code goes here
@['posts#new'] = (data) ->
# and here
You may pass data to javascript function using pluggable_js
helper in rails controller (pjs
is an alias method). See example below:
class PostsController < ApplicationController
def index
pluggable_js(
string: 'string',
integer: 1,
boolean: true,
array: [1, 2, 3],
hash: { a: 1, b: 2, c: 3 },
array_of_hashes: [{a: 1}, {b: 2}, {c: 3}]
)
end
end
If you feel like this logic doesn't belong to a controller, safely move it to a view. Then you can access data in posts.coffee:
@['posts#index'] = (data) ->
console.log data.string
console.log data.integer
console.log data.boolean
console.log data.array
console.log data.hash
console.log data.array_of_hashes
CoffeeScript used here just for the sake of simplicity. You may implement the same with plain JavaScript.
Config
Let's say you've created action search
that renders index
template. Most likely we still need to trigger @['posts#index'](data)
function. In such situation you may create config/initializers/pluggable_js.rb
and use pair actions config:
PluggableJs.config do |config|
config.pair_actions = { 'search' => 'index' }
end
{ 'create' => 'new', 'update' => 'edit' }
is a default REST configuration.
Upgrade
Development notes
To run the test suite:
bundle exec cucumber
Sublime Text Snippet
Go to Sublime Text > Preferences > Browse Packages...
and save under User
directory pjs.sublime-snippet
with the following content:
<snippet>
<content><![CDATA[
@['$1#$2'] = (data) ->
$0
]]></content>
<tabTrigger>pjs</tabTrigger>
<scope>source.coffee</scope>
</snippet>
Thereafter pjs
snippet will be available in coffeescript files.