script_relocator 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 051c162cb3e674dc161d439bd8fa3be9e6382721
4
- data.tar.gz: 3fcec6651abf085ae66095a45d795b90a1e28d4e
3
+ metadata.gz: 39e6c523f8d2cbc54c1f63039ae13f5699ada7a3
4
+ data.tar.gz: 124d5de466318ff768cfd6768889a53b6a70f94d
5
5
  SHA512:
6
- metadata.gz: 613ae05d652d63681fef0f9431ad25aeb5950c5db02800ec44d0bec14e2f089491eea1831b472dd86eb9b5c03cdf4af739c16d0def0bb270bd35a73c9c0b0b21
7
- data.tar.gz: c9e5b9a9ee81fdfcef804117a319542e83460d6a347bb17558da7f76050658b7bf4fab4598acdee2dd88758c1039f9ac02ec5ee08c7686f0e2c36c411894f88d
6
+ metadata.gz: 8715bdd5ffc289e0d96d05fa6909155a67f62973d245e8f92fe23ed1ce3380aba2c4bb04f4ceedb0050cd0f8bf7e9c3211e29ab530d04a29fb5cb8e37bd40398
7
+ data.tar.gz: 2af792b70b40a17ad0d44232fd165dd75b49971cc25c0e46b6ea91cd56fda2ad0615209b5a4082956c68dbbd9b90eccb1d6582d7b249ee21926ff62003f7de6a
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  *~
2
+ /.idea
2
3
  /Gemfile.lock
3
4
  /pkg/
data/.travis.yml CHANGED
@@ -1,4 +1,9 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2.2
4
- before_install: gem install bundler -v 1.10.6
3
+ - jruby-9.1.7.0
4
+ - jruby-1.7.26
5
+ - 2.4.0
6
+ - 2.3.3
7
+ - 2.2.6
8
+ - 2.1.9
9
+ before_install: gem install bundler
data/README.md CHANGED
@@ -1,7 +1,58 @@
1
+ [![Gem Version](https://badge.fury.io/rb/script_relocator.svg)](https://badge.fury.io/rb/script_relocator)
2
+ [![Build Status](https://travis-ci.org/donv/script_relocator.svg?branch=master)](https://travis-ci.org/donv/script_relocator)
3
+
1
4
  # ScriptRelocator
2
5
 
3
6
  Rack middleware to relocate JavaScript tags to the end of an HTML response body.
4
- Only handles non-streaming `text/html` reponses.
7
+
8
+ Only handles non-streaming `text/html` reponses. All other responses will be left alone.
9
+ The result should be a response that more quickly can be used to render the initial page before all
10
+ scripts have been loaded.
11
+
12
+ Given an example response
13
+
14
+ ```html
15
+ <html>
16
+ <head>
17
+ <script ... src="script1"></script>
18
+ </head>
19
+ <body>
20
+ ...
21
+ <script ... >
22
+ script2
23
+ </script>
24
+ ...
25
+ <script ... >
26
+ script3
27
+ </script>
28
+ ...
29
+ </body>
30
+ </html>
31
+ ```
32
+
33
+ The response will be transformed to have the scripts at the end of the `body` tag:
34
+
35
+ ```html
36
+ <html>
37
+ <head>
38
+ </head>
39
+ <body>
40
+ ...
41
+ ...
42
+ ...
43
+ <script ... src="script1" data-turbolinks-eval="false" ></script>
44
+ <script ... >
45
+ script2
46
+ </script>
47
+ <script ... >
48
+ script3
49
+ </script>
50
+ </body>
51
+ </html>
52
+ ```
53
+
54
+ White space around the tags are not moved, so formatting may look a bit differently.
55
+ The ordering of the `script` tags is preserved.
5
56
 
6
57
 
7
58
  ## Installation
@@ -30,6 +81,11 @@ For other Rack application use it as middleware:
30
81
  use ScriptRelocator::Rack
31
82
  ```
32
83
 
84
+ ### TurboLinks
85
+
86
+ `script` tags inside the `head` tag are marked with the `data-turbolinks-eval="false"` attribute so
87
+ they are not re-evaluated when navigating using TurboLinks.
88
+
33
89
 
34
90
  ## Development
35
91
 
data/Rakefile CHANGED
@@ -1 +1,10 @@
1
1
  require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ task default: :test
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs << 'test'
8
+ t.test_files = FileList['test/*.rb']
9
+ t.verbose = true
10
+ end
@@ -0,0 +1,7 @@
1
+ module ScriptRelocator
2
+ class Railtie < Rails::Railtie
3
+ initializer 'script_relocator.configure_rails_initialization' do |app|
4
+ app.middleware.use ScriptRelocator::Rack
5
+ end
6
+ end
7
+ end
@@ -1,3 +1,3 @@
1
1
  module ScriptRelocator
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -1,4 +1,3 @@
1
- require "script_relocator/version"
2
1
  require 'nokogiri'
3
2
 
4
3
  module ScriptRelocator
@@ -22,7 +21,7 @@ module ScriptRelocator
22
21
  s.remove
23
22
  doc.at('body') << s
24
23
  end
25
- transformed_body = doc.to_html
24
+ transformed_body = doc.canonicalize
26
25
  if headers.key?('Content-Length') &&
27
26
  headers['Content-Length'].to_i != transformed_body.length
28
27
  headers['Content-Length'] = transformed_body.length.to_s
@@ -32,6 +31,4 @@ module ScriptRelocator
32
31
  end
33
32
  end
34
33
 
35
- if defined? Rails
36
- Rails.application.config.middleware.use ScriptRelocator::Rack
37
- end
34
+ require 'script_relocator/railtie' if defined?(Rails)
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ['lib']
21
21
 
22
22
  spec.add_development_dependency 'bundler', '~> 1.10'
23
+ spec.add_development_dependency 'minitest-reporters', '~> 1.1'
23
24
  spec.add_development_dependency 'rake', '~> 10.0'
24
25
 
25
26
  spec.add_runtime_dependency 'nokogiri', '~> 1.6'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: script_relocator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Uwe Kubosch
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-23 00:00:00.000000000 Z
11
+ date: 2017-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest-reporters
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.1'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.1'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -70,6 +84,7 @@ files:
70
84
  - bin/console
71
85
  - bin/setup
72
86
  - lib/script_relocator.rb
87
+ - lib/script_relocator/railtie.rb
73
88
  - lib/script_relocator/version.rb
74
89
  - script_relocator.gemspec
75
90
  homepage: https://github.com/donv/script_relocator
@@ -92,10 +107,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
107
  version: '0'
93
108
  requirements: []
94
109
  rubyforge_project:
95
- rubygems_version: 2.4.8
110
+ rubygems_version: 2.6.8
96
111
  signing_key:
97
112
  specification_version: 4
98
113
  summary: Rack middleware to relocate JavaScript tags to the end of an HTML response
99
114
  body.
100
115
  test_files: []
101
- has_rdoc: