script_relocator 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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: