angular-rails-templates 0.0.7 → 0.1.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 +4 -4
- data/README.md +161 -12
- data/lib/angular-rails-templates.rb +4 -10
- data/lib/angular-rails-templates/compact_javascript_escape.rb +29 -0
- data/lib/angular-rails-templates/engine.rb +41 -7
- data/lib/angular-rails-templates/javascript_template.js.erb +7 -0
- data/lib/angular-rails-templates/template.rb +25 -28
- data/lib/angular-rails-templates/version.rb +1 -1
- metadata +33 -6
- data/lib/angular-rails-templates/base_template.rb +0 -29
- data/lib/angular-rails-templates/haml_template.rb +0 -14
- data/lib/angular-rails-templates/slim_template.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a0382ea27ff3c7b1cfb6ea0e66196406cea4f93
|
4
|
+
data.tar.gz: bd48df6bc60a92033beb772507409bf70e4f2af2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2111bf9c7c7cfa83ca6fdcdd5a7c05821509f04b85f922ba73f8fb03c9f2ba2f06cc33a580408053ae4bf800b5e6722f4ba0c16b6f45c5977d1e77258a1ffe5a
|
7
|
+
data.tar.gz: 15b917f2a93c0cef94fb7a2fb040b4026110b78168072398b814d931333e4b3542be4d8e19085dd467dae5a530afd1624f541634846a76721d36f7888aa57d61
|
data/README.md
CHANGED
@@ -6,7 +6,7 @@ It removes the need for AJAX calls to retrieve the templates (or for you to manu
|
|
6
6
|
|
7
7
|
## Usage
|
8
8
|
|
9
|
-
### 1. Add the
|
9
|
+
### 1. Add the Gem
|
10
10
|
|
11
11
|
In Gemfile
|
12
12
|
|
@@ -14,39 +14,188 @@ In Gemfile
|
|
14
14
|
gem 'angular-rails-templates'
|
15
15
|
```
|
16
16
|
|
17
|
-
### 2. Include
|
17
|
+
### 2. Include Templates in Rails Asset Pipeline
|
18
18
|
|
19
|
-
Then, in your `application.js` file, require
|
19
|
+
Then, in your `application.js` file, require `angular-rails-templates` and your templates:
|
20
20
|
|
21
21
|
```javascript
|
22
22
|
//= require angularjs
|
23
|
-
|
23
|
+
// ...
|
24
|
+
//= require angular-rails-templates
|
25
|
+
//
|
26
|
+
// Templates in app/assets/javascript/templates
|
27
|
+
//= require_tree ./templates
|
28
|
+
// OR
|
29
|
+
// Templates in app/assets/templates
|
30
|
+
//= require_tree ../templates
|
24
31
|
```
|
25
32
|
|
26
|
-
|
33
|
+
Make sure to `require angular-rails-templates` **before** you require your templates.
|
27
34
|
|
28
|
-
|
35
|
+
Name your templates like you would name any other Rails view. **The `.html` part is required.** If it is not present your views will not be added to angular's template cache.
|
29
36
|
|
30
|
-
|
37
|
+
```
|
38
|
+
foo.html
|
39
|
+
foo.html.erb
|
40
|
+
foo.html.haml
|
41
|
+
foo.html.slim
|
42
|
+
```
|
43
|
+
|
44
|
+
Caution: *`.ngslim` and `.nghaml` are no longer supported!*
|
45
|
+
|
46
|
+
Angular Rails Templates will try to load support for the following markups if their gems are present:
|
47
|
+
|
48
|
+
| Extension | Required gem |
|
49
|
+
|---------- |----------------------------------------------------------|
|
50
|
+
| .erb | - |
|
51
|
+
| .str | - |
|
52
|
+
| .haml | haml |
|
53
|
+
| .slim | slim |
|
54
|
+
| .md | liquid, rdiscount, redcrpet, bluecloth, kramdown, maruku |
|
31
55
|
|
32
|
-
|
56
|
+
See [Advanced](#advanced-configuration) if you would like to use other markup languages.
|
57
|
+
|
58
|
+
### 3. Add a Dependency in your Angular Application Module
|
59
|
+
|
60
|
+
Your Angular module needs to depend on the `templates` module. (configurable, see [Advanced Configuration](#configuration-option-module_name))
|
33
61
|
|
34
62
|
```javascript
|
35
|
-
|
63
|
+
angular.module('myApplication', ['templates']);
|
36
64
|
```
|
37
65
|
|
38
|
-
|
39
|
-
|
66
|
+
### 4. Use your Templates
|
67
|
+
|
68
|
+
No matter what the source file extension is, your template's url will be `#{base_name}.html`
|
69
|
+
|
70
|
+
For example:
|
71
|
+
```ruby
|
72
|
+
main.html => main.html
|
73
|
+
widget.html.haml => widget.html
|
74
|
+
modals/confirm.html.slim => modals/confirm.html
|
75
|
+
modals/dialog.html.slim.erb.str => modals/dialog.html # don't do this
|
76
|
+
```
|
40
77
|
|
41
78
|
The templates can then be accessed via `templateUrl` as expected:
|
42
79
|
|
43
80
|
``` javascript
|
81
|
+
// Template: app/assets/templates/yourTemplate.html.haml
|
82
|
+
{
|
83
|
+
templateUrl: 'yourTemplate.html'
|
84
|
+
}
|
85
|
+
```
|
86
|
+
|
87
|
+
## Advanced Configuration
|
88
|
+
|
89
|
+
Angular Rails Templates has some configuration options that can be set inside `config/application.rb`
|
90
|
+
|
91
|
+
Here are their default values:
|
92
|
+
```ruby
|
93
|
+
# config/application.rb
|
94
|
+
config.angular_templates.module_name = 'templates'
|
95
|
+
config.angular_templates.ignore_prefix = 'templates/'
|
96
|
+
config.angular_templates.markups = %w(erb str haml slim md)
|
97
|
+
config.angular_templates.htmlcompressor = false
|
98
|
+
```
|
99
|
+
|
100
|
+
### Configuration Option: `module_name`
|
101
|
+
|
102
|
+
This configures the module name that your templates will be placed into.
|
103
|
+
It is used to generate javascript like:
|
104
|
+
|
105
|
+
```javascipt
|
106
|
+
angular.module("<%= module_name %>")...
|
107
|
+
```
|
108
|
+
|
109
|
+
Although it is not recommended, you can set `module_name` to the name of your main application module and remove `require angular-rails-templates` from your javascript manifest to have your templates directly injected into your app.
|
110
|
+
|
111
|
+
### Configuration Option: `ignore_prefix`
|
112
|
+
|
113
|
+
*If you place your templates in `app/assets/templates` this option is mostly useless.*
|
114
|
+
|
115
|
+
`ignore_prefix` will be stripped from the beginning of the `templateUrl` it reports to angularjs.
|
116
|
+
|
117
|
+
Since the default ignore_prefix is `templates/`, any templates placed under `app/assets/javascripts/templates` will automatically have short names. If your templates are not in this location, you will need to use the full path to the template.
|
118
|
+
|
119
|
+
You can set `config.angular_templates.ignore_prefix` to change the default ignore prefix. Default is `templates/`.
|
120
|
+
|
121
|
+
|
122
|
+
``` javascript
|
123
|
+
// Templates in: app/assets/javascripts/templates (default)
|
124
|
+
// ignore_prefix: templates/ (default)
|
125
|
+
{
|
126
|
+
templateUrl: 'yourTemplate.html'
|
127
|
+
}
|
128
|
+
// This won't work:
|
129
|
+
{
|
130
|
+
templateUrl: 'templates/yourTemplate.html'
|
131
|
+
}
|
132
|
+
```
|
133
|
+
|
134
|
+
``` javascript
|
135
|
+
// Templates in: app/assets/javascripts/my_app/templates (custom)
|
136
|
+
// ignore_prefix: templates/ (default)
|
44
137
|
{
|
45
138
|
templateUrl: 'my_app/templates/yourTemplate.html'
|
46
139
|
}
|
140
|
+
|
141
|
+
// ignore_prefix: my_app/templates/ (custom)
|
142
|
+
{
|
143
|
+
templateUrl: 'yourTemplate.html'
|
144
|
+
}
|
145
|
+
```
|
146
|
+
|
147
|
+
|
148
|
+
### Configuration Option: `markups`
|
149
|
+
|
150
|
+
Any markup that Tilt supports can be used, but you may need to add a gem to your Gemfile. See [Tilt](https://github.com/rtomayko/tilt) for a list of the supported markups and required libraries.
|
151
|
+
|
152
|
+
```ruby
|
153
|
+
# Gemfile
|
154
|
+
gem "asciidoctor"
|
155
|
+
gem "radius"
|
156
|
+
gem "creole"
|
157
|
+
gem "tilt-handlebars"
|
158
|
+
|
159
|
+
# config/application.rb
|
160
|
+
config.angular_templates.markups.push 'asciidoc', 'radius', 'wiki', 'hbs'
|
161
|
+
```
|
162
|
+
If you would like to use a non-standard extension or you would like to use a custom template, you just need to tell Tilt about it.
|
163
|
+
|
164
|
+
```ruby
|
165
|
+
# config/initializers/angular_rails_templates.rb
|
166
|
+
Tilt.register Tilt::HamlTemplate, 'nghaml'
|
167
|
+
|
168
|
+
# config/application.rb
|
169
|
+
config.angular_templates.markups.push 'nghaml'
|
170
|
+
```
|
171
|
+
Note: You would still need to use `foo`**`.html`**`.nghaml`
|
172
|
+
|
173
|
+
|
174
|
+
### Configuration Option: `htmlcompressor`
|
175
|
+
|
176
|
+
The [htmlcompressor gem](https://github.com/paolochiodi/htmlcompressor) is in alpha, not activly maintained, and has several known bugs. Beware if you are using windows. The `simple_boolean_attributes` option is known to mangle angular templates. It depends on a three-year-old version of yui-compressor. However, it does a good job of compressing html!
|
177
|
+
|
178
|
+
If you would like to use htmlcompressor add it to your Gemfile and Enable the configuration option.
|
179
|
+
|
180
|
+
```ruby
|
181
|
+
# Gemfile
|
182
|
+
gem 'htmlcompressor'
|
183
|
+
```
|
184
|
+
|
185
|
+
```ruby
|
186
|
+
# config/application.rb
|
187
|
+
config.angular_templates.htmlcompressor = true
|
188
|
+
```
|
189
|
+
|
190
|
+
You can also pass an options hash to `htmlcompressor` that will be directly passed to ```HtmlCompressor::Compressor.new```. See the [ruby project](https://github.com/paolochiodi/htmlcompressor#usage) or the [java project](https://code.google.com/p/htmlcompressor/#Compressing_HTML_and_XML_files_from_a_command_line) for descriptions of the options.
|
191
|
+
|
192
|
+
```ruby
|
193
|
+
# config/application.rb
|
194
|
+
config.angular_templates.htmlcompressor = {
|
195
|
+
:remove_quotes => true
|
196
|
+
}
|
47
197
|
```
|
48
198
|
|
49
|
-
You can set `config.angular_templates.ignore_prefix` to remove part of the path to your templates. For example, set it to `my_app/templates/` so you can refer to your templates by simply `yourTemplate.html`. Default is `templates/`.
|
50
199
|
|
51
200
|
## License
|
52
201
|
|
@@ -1,12 +1,6 @@
|
|
1
|
-
|
2
|
-
HAML_EXT = '.nghaml'
|
3
|
-
SLIM_EXT = '.ngslim'
|
1
|
+
require 'angular-rails-templates/engine'
|
4
2
|
|
5
|
-
|
6
|
-
autoload :
|
7
|
-
autoload :
|
8
|
-
autoload :HamlTemplate , 'angular-rails-templates/haml_template'
|
9
|
-
autoload :Version , 'angular-rails-templates/version'
|
3
|
+
module AngularRailsTemplates
|
4
|
+
autoload :Template, 'angular-rails-templates/template'
|
5
|
+
autoload :VERSION, 'angular-rails-templates/version'
|
10
6
|
end
|
11
|
-
|
12
|
-
require 'angular-rails-templates/engine'
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module AngularRailsTemplates
|
2
|
+
module CompactJavaScriptEscape
|
3
|
+
# inspired by Rails' action_view/helpers/javascript_helper.rb
|
4
|
+
JS_ESCAPE_MAP = {
|
5
|
+
'\\' => '\\\\',
|
6
|
+
"\r\n" => '\n',
|
7
|
+
"\n" => '\n',
|
8
|
+
"\r" => '\n',
|
9
|
+
'"' => '\\"',
|
10
|
+
"'" => "\\'"
|
11
|
+
}
|
12
|
+
|
13
|
+
# We want to deliver the shortist valid javascript escaped string
|
14
|
+
# Count the number of " vs '
|
15
|
+
# If more ', escape "
|
16
|
+
# If more ", escape '
|
17
|
+
# If equal, prefer to escape "
|
18
|
+
|
19
|
+
def escape_javascript(raw)
|
20
|
+
if raw
|
21
|
+
quote = raw.count(%{'}) >= raw.count(%{"}) ? %{"} : %{'}
|
22
|
+
escaped = raw.gsub(/(\\|\r\n|[\n\r#{quote}])/u) {|match| JS_ESCAPE_MAP[match] }
|
23
|
+
"#{quote}#{escaped}#{quote}"
|
24
|
+
else
|
25
|
+
'""'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -1,18 +1,52 @@
|
|
1
1
|
module AngularRailsTemplates
|
2
2
|
class Engine < ::Rails::Engine
|
3
3
|
config.angular_templates = ActiveSupport::OrderedOptions.new
|
4
|
-
config.angular_templates.module_name
|
5
|
-
config.angular_templates.ignore_prefix
|
4
|
+
config.angular_templates.module_name = 'templates'
|
5
|
+
config.angular_templates.ignore_prefix = 'templates/'
|
6
|
+
config.angular_templates.markups = []
|
7
|
+
config.angular_templates.htmlcompressor = false
|
8
|
+
|
9
|
+
# try loading common markups
|
10
|
+
%w(erb haml liquid md radius slim str textile wiki).
|
11
|
+
each do |ext|
|
12
|
+
begin
|
13
|
+
config.angular_templates.markups << ext if Tilt[ext]
|
14
|
+
rescue LoadError
|
15
|
+
# They don't have the required libray required. Oh well.
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
6
19
|
|
7
20
|
config.before_initialize do |app|
|
8
21
|
if app.config.assets
|
9
22
|
require 'sprockets'
|
10
|
-
|
23
|
+
require 'sprockets/engines' # load sprockets for Rails 3
|
24
|
+
|
25
|
+
if app.config.angular_templates.htmlcompressor
|
26
|
+
require 'htmlcompressor/compressor'
|
27
|
+
unless app.config.angular_templates.htmlcompressor.is_a? Hash
|
28
|
+
app.config.angular_templates.htmlcompressor = {remove_intertag_spaces: true}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# These engines render markup as HTML
|
33
|
+
app.config.angular_templates.markups.each do |ext|
|
34
|
+
# Processed haml/slim templates have a mime-type of text/html.
|
35
|
+
# If sprockets sees a `foo.html.haml` it will process the haml
|
36
|
+
# and stop, because the haml output is html. Our html engine won't get run.
|
37
|
+
mimeless_engine = Class.new(Tilt[ext]) do
|
38
|
+
def self.default_mime_type
|
39
|
+
nil
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
Sprockets.register_engine ".#{ext}", mimeless_engine
|
44
|
+
end
|
45
|
+
|
46
|
+
# This engine wraps the HTML into JS
|
47
|
+
Sprockets.register_engine '.html', AngularRailsTemplates::Template
|
11
48
|
|
12
|
-
|
13
|
-
Sprockets.register_engine HAML_EXT , AngularRailsTemplates::Template
|
14
|
-
Sprockets.register_engine '.ajs' , AngularRailsTemplates::Template
|
15
|
-
Sprockets.register_engine '.html' , AngularRailsTemplates::Template
|
49
|
+
app.config.assets.precompile << %r(angular-rails-templates.js)
|
16
50
|
end
|
17
51
|
end
|
18
52
|
end
|
@@ -1,51 +1,48 @@
|
|
1
|
-
require '
|
2
|
-
require 'sprockets/engines'
|
1
|
+
require 'angular-rails-templates/compact_javascript_escape'
|
3
2
|
|
4
3
|
module AngularRailsTemplates
|
5
|
-
class Template < Tilt::Template
|
4
|
+
class Template < ::Tilt::Template
|
5
|
+
include CompactJavaScriptEscape
|
6
|
+
AngularJsTemplateWrapper = Tilt::ERBTemplate.new "#{File.dirname __FILE__}/javascript_template.js.erb"
|
7
|
+
@@compressor = nil
|
8
|
+
|
6
9
|
def self.default_mime_type
|
7
10
|
'application/javascript'
|
8
11
|
end
|
9
12
|
|
10
|
-
|
13
|
+
# this method is mandatory on Tilt::Template subclasses
|
14
|
+
def prepare
|
15
|
+
if configuration.htmlcompressor
|
16
|
+
@data = compress data
|
17
|
+
end
|
18
|
+
end
|
11
19
|
|
12
20
|
def evaluate(scope, locals, &block)
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
render_script_template(logical_template_path(scope), template.render)
|
21
|
+
locals[:html] = escape_javascript data.chomp
|
22
|
+
locals[:angular_template_name] = logical_template_path(scope)
|
23
|
+
locals[:source_file] = "#{scope.pathname}".sub(/^#{Rails.root}\//,'')
|
24
|
+
locals[:angular_module] = configuration.module_name
|
25
|
+
|
26
|
+
AngularJsTemplateWrapper.render(scope, locals)
|
21
27
|
end
|
22
28
|
|
23
|
-
|
29
|
+
private
|
24
30
|
|
25
31
|
def logical_template_path(scope)
|
26
|
-
path = scope.logical_path
|
27
|
-
path.gsub!(Regexp.new("^#{configuration.ignore_prefix}"), "")
|
32
|
+
path = scope.logical_path.sub /^#{configuration.ignore_prefix}/, ''
|
28
33
|
"#{path}.html"
|
29
34
|
end
|
30
35
|
|
31
|
-
def module_name
|
32
|
-
configuration.module_name.inspect
|
33
|
-
end
|
34
|
-
|
35
36
|
def configuration
|
36
37
|
::Rails.configuration.angular_templates
|
37
38
|
end
|
38
39
|
|
39
|
-
def
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
$templateCache.put(#{path.inspect}, #{data.to_json});
|
45
|
-
}]);
|
46
|
-
}
|
40
|
+
def compress html
|
41
|
+
unless @@compressor
|
42
|
+
@@compressor = HtmlCompressor::Compressor.new configuration.htmlcompressor
|
43
|
+
end
|
44
|
+
@@compressor.compress(html)
|
47
45
|
end
|
48
|
-
|
49
46
|
end
|
50
47
|
end
|
51
48
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: angular-rails-templates
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Damien Mathieu
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-04-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|
@@ -39,6 +39,34 @@ dependencies:
|
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: minitest
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: capybara
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
42
70
|
- !ruby/object:Gem::Dependency
|
43
71
|
name: uglifier
|
44
72
|
requirement: !ruby/object:Gem::Requirement
|
@@ -55,7 +83,7 @@ dependencies:
|
|
55
83
|
version: '0'
|
56
84
|
description:
|
57
85
|
email:
|
58
|
-
-
|
86
|
+
- pitr.vern@gmail.com
|
59
87
|
executables: []
|
60
88
|
extensions: []
|
61
89
|
extra_rdoc_files: []
|
@@ -63,10 +91,9 @@ files:
|
|
63
91
|
- LICENSE
|
64
92
|
- README.md
|
65
93
|
- lib/angular-rails-templates.rb
|
66
|
-
- lib/angular-rails-templates/
|
94
|
+
- lib/angular-rails-templates/compact_javascript_escape.rb
|
67
95
|
- lib/angular-rails-templates/engine.rb
|
68
|
-
- lib/angular-rails-templates/
|
69
|
-
- lib/angular-rails-templates/slim_template.rb
|
96
|
+
- lib/angular-rails-templates/javascript_template.js.erb
|
70
97
|
- lib/angular-rails-templates/template.rb
|
71
98
|
- lib/angular-rails-templates/version.rb
|
72
99
|
homepage: https://github.com/pitr/angular-rails-templates
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'forwardable'
|
2
|
-
|
3
|
-
module AngularRailsTemplates
|
4
|
-
BaseTemplate = Struct.new(:context) do
|
5
|
-
extend Forwardable
|
6
|
-
|
7
|
-
def_delegators :context, :file, :data, :require_template_library
|
8
|
-
|
9
|
-
def initialize_engine ; end
|
10
|
-
|
11
|
-
def render
|
12
|
-
initialize_engine
|
13
|
-
engine.render
|
14
|
-
end
|
15
|
-
|
16
|
-
protected
|
17
|
-
|
18
|
-
NoEngine = Struct.new(:data) do
|
19
|
-
def render
|
20
|
-
data
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def engine
|
25
|
-
@engine ||= NoEngine.new(data)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|