Gem Version Build Status

ScriptRelocator

Rack middleware to relocate JavaScript tags to the end of an HTML response body.

Only handles non-streaming text/html reponses. All other responses will be left alone. The result should be a response that more quickly can be used to render the initial page before all scripts have been loaded.

Given an example response

<html>
  <head>
    <script ... src="script1"></script>
  </head>
  <body>
    ...
    <script ... >
      script2
    </script>
    ...
    <script ... >
      script3
    </script>
    ...
  </body>
</html>

The response will be transformed to have the scripts at the end of the body tag:

<html>
  <head>
  </head>
  <body>
    ...
    ...
    ...
    <script ... src="script1" data-turbolinks-eval="false" ></script>
    <script ... >
      script2
    </script>
    <script ... >
      script3
    </script>
  </body>
</html>

White space around the tags are not moved, so formatting may look a bit differently. The ordering of the script tags is preserved.

Installation

Add this line to your application's Gemfile:

gem 'script_relocator'

And then execute:

$ bundle

Or install it yourself as:

$ gem install script_relocator

Usage

The gem will hook into Rails automatically.

For other Rack application use it as middleware:

  use ScriptRelocator::Rack

script tags inside the head tag are marked with the data-turbolinks-eval="false" attribute so they are not re-evaluated when navigating using TurboLinks.

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake false to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/script_relocator.