ack_rocket_cms 0.7.7.1 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +45 -45
- data/README.md +64 -5
- data/app/assets/javascripts/{rocket_cms.js.coffee → rocket_cms.coffee} +0 -3
- data/app/controllers/concerns/rs_errors.rb +8 -4
- data/app/controllers/concerns/rs_localizeable.rb +26 -0
- data/app/controllers/concerns/rs_menu.rb +9 -2
- data/app/controllers/concerns/rs_pages.rb +14 -3
- data/app/helpers/gzip_helper.rb +27 -0
- data/app/models/concerns/seoable.rb +19 -30
- data/app/models/seo.rb +16 -0
- data/app/views/devise/registrations/edit.html.slim +21 -0
- data/app/views/devise/registrations/new.html.slim +21 -0
- data/app/views/devise/sessions/new.html.slim +18 -19
- data/app/views/devise/shared/_links.html.slim +4 -18
- data/app/views/news/show.html.slim +1 -1
- data/config/locales/en.rs.yml +1 -1
- data/config/locales/ru.rs.yml +11 -1
- data/lib/generators/rocket_cms/migration_generator.rb +1 -1
- data/lib/generators/rocket_cms/templates/admin.erb +8 -0
- data/lib/generators/rocket_cms/templates/migration_news.rb +10 -5
- data/lib/generators/rocket_cms/templates/migration_pages.rb +14 -5
- data/lib/generators/rocket_cms/templates/migration_seos.rb +14 -0
- data/lib/rocket_cms.rb +4 -0
- data/lib/rocket_cms/admin.rb +35 -8
- data/lib/rocket_cms/configuration.rb +7 -1
- data/lib/rocket_cms/controllers/contacts.rb +2 -2
- data/lib/rocket_cms/controllers/news.rb +1 -1
- data/lib/rocket_cms/controllers/search.rb +17 -0
- data/lib/rocket_cms/engine.rb +3 -3
- data/lib/rocket_cms/migration.rb +14 -11
- data/lib/rocket_cms/models/active_record/menu.rb +3 -0
- data/lib/rocket_cms/models/active_record/news.rb +6 -3
- data/lib/rocket_cms/models/active_record/page.rb +3 -0
- data/lib/rocket_cms/models/active_record/seo.rb +17 -0
- data/lib/rocket_cms/models/contact_message.rb +1 -1
- data/lib/rocket_cms/models/embedded_gallery_image.rb +4 -0
- data/lib/rocket_cms/models/gallery.rb +2 -0
- data/lib/rocket_cms/models/gallery_image.rb +2 -0
- data/lib/rocket_cms/models/mongoid/contact_message.rb +5 -5
- data/lib/rocket_cms/models/mongoid/embedded_gallery_image.rb +0 -1
- data/lib/rocket_cms/models/mongoid/gallery.rb +0 -1
- data/lib/rocket_cms/models/mongoid/gallery_image.rb +0 -1
- data/lib/rocket_cms/models/mongoid/news.rb +3 -4
- data/lib/rocket_cms/models/mongoid/page.rb +3 -2
- data/lib/rocket_cms/models/mongoid/seo.rb +23 -0
- data/lib/rocket_cms/models/news.rb +13 -5
- data/lib/rocket_cms/models/page.rb +7 -3
- data/lib/rocket_cms/models/seo.rb +17 -0
- data/lib/rocket_cms/seo_helpers.rb +13 -0
- data/lib/rocket_cms/version.rb +1 -1
- data/template.rb +4 -7
- metadata +13 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2b4be58e811a9fe7a30b6ae6c5dc4afcf8fb4224
|
4
|
+
data.tar.gz: 539440be1663279ea0e98d7698b1212fef5066e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5698b19ec72e2357d9d4a1eea81bc1c2e90fcb694e93495c3b866a37e9948d1537286fe934183e497882066e40dbed58ac1bc1f58855559d40d81d90595a845d
|
7
|
+
data.tar.gz: 0c8816d2f174cc7453a2401c132da4f8cd81c396d245c1d9ae54741aa260156ec1824bc7db8fe3b23c5da44fae0c5bd1298dd7a98f3576fd02330a00f2f3116d
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ack_rocket_cms (0.
|
4
|
+
ack_rocket_cms (0.8.0)
|
5
5
|
ack_rails_admin_jcrop
|
6
6
|
addressable
|
7
7
|
ckeditor
|
@@ -30,49 +30,49 @@ PATH
|
|
30
30
|
GEM
|
31
31
|
remote: https://rubygems.org/
|
32
32
|
specs:
|
33
|
-
ack_rails_admin_jcrop (0.0.
|
33
|
+
ack_rails_admin_jcrop (0.0.6)
|
34
34
|
mini_magick
|
35
35
|
rails (>= 3.0.0)
|
36
36
|
rails_admin (>= 0.3.0)
|
37
|
-
actionmailer (4.2.
|
38
|
-
actionpack (= 4.2.
|
39
|
-
actionview (= 4.2.
|
40
|
-
activejob (= 4.2.
|
37
|
+
actionmailer (4.2.3)
|
38
|
+
actionpack (= 4.2.3)
|
39
|
+
actionview (= 4.2.3)
|
40
|
+
activejob (= 4.2.3)
|
41
41
|
mail (~> 2.5, >= 2.5.4)
|
42
42
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
43
|
-
actionpack (4.2.
|
44
|
-
actionview (= 4.2.
|
45
|
-
activesupport (= 4.2.
|
43
|
+
actionpack (4.2.3)
|
44
|
+
actionview (= 4.2.3)
|
45
|
+
activesupport (= 4.2.3)
|
46
46
|
rack (~> 1.6)
|
47
47
|
rack-test (~> 0.6.2)
|
48
48
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
49
|
-
rails-html-sanitizer (~> 1.0, >= 1.0.
|
50
|
-
actionview (4.2.
|
51
|
-
activesupport (= 4.2.
|
49
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
50
|
+
actionview (4.2.3)
|
51
|
+
activesupport (= 4.2.3)
|
52
52
|
builder (~> 3.1)
|
53
53
|
erubis (~> 2.7.0)
|
54
54
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
55
|
-
rails-html-sanitizer (~> 1.0, >= 1.0.
|
56
|
-
activejob (4.2.
|
57
|
-
activesupport (= 4.2.
|
55
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
56
|
+
activejob (4.2.3)
|
57
|
+
activesupport (= 4.2.3)
|
58
58
|
globalid (>= 0.3.0)
|
59
|
-
activemodel (4.2.
|
60
|
-
activesupport (= 4.2.
|
59
|
+
activemodel (4.2.3)
|
60
|
+
activesupport (= 4.2.3)
|
61
61
|
builder (~> 3.1)
|
62
|
-
activerecord (4.2.
|
63
|
-
activemodel (= 4.2.
|
64
|
-
activesupport (= 4.2.
|
62
|
+
activerecord (4.2.3)
|
63
|
+
activemodel (= 4.2.3)
|
64
|
+
activesupport (= 4.2.3)
|
65
65
|
arel (~> 6.0)
|
66
|
-
activesupport (4.2.
|
66
|
+
activesupport (4.2.3)
|
67
67
|
i18n (~> 0.7)
|
68
68
|
json (~> 1.7, >= 1.7.7)
|
69
69
|
minitest (~> 5.1)
|
70
70
|
thread_safe (~> 0.3, >= 0.3.4)
|
71
71
|
tzinfo (~> 1.1)
|
72
72
|
addressable (2.3.8)
|
73
|
-
arel (6.0.
|
73
|
+
arel (6.0.2)
|
74
74
|
bcrypt (3.1.10)
|
75
|
-
bson (3.1.
|
75
|
+
bson (3.1.2)
|
76
76
|
builder (3.2.2)
|
77
77
|
ckeditor (4.1.2)
|
78
78
|
cocaine
|
@@ -106,9 +106,9 @@ GEM
|
|
106
106
|
activesupport (>= 4.1.0)
|
107
107
|
haml (4.0.6)
|
108
108
|
tilt
|
109
|
-
htmlentities (4.3.
|
109
|
+
htmlentities (4.3.4)
|
110
110
|
i18n (0.7.0)
|
111
|
-
jquery-rails (4.0.
|
111
|
+
jquery-rails (4.0.4)
|
112
112
|
rails-dom-testing (~> 1.0)
|
113
113
|
railties (>= 4.2.0)
|
114
114
|
thor (>= 0.14, < 2.0)
|
@@ -141,22 +141,22 @@ GEM
|
|
141
141
|
optionable (0.2.0)
|
142
142
|
origin (2.1.1)
|
143
143
|
orm_adapter (0.5.0)
|
144
|
-
rack (1.6.
|
144
|
+
rack (1.6.4)
|
145
145
|
rack-pjax (0.8.0)
|
146
146
|
nokogiri (~> 1.5)
|
147
147
|
rack (~> 1.1)
|
148
148
|
rack-test (0.6.3)
|
149
149
|
rack (>= 1.0)
|
150
|
-
rails (4.2.
|
151
|
-
actionmailer (= 4.2.
|
152
|
-
actionpack (= 4.2.
|
153
|
-
actionview (= 4.2.
|
154
|
-
activejob (= 4.2.
|
155
|
-
activemodel (= 4.2.
|
156
|
-
activerecord (= 4.2.
|
157
|
-
activesupport (= 4.2.
|
150
|
+
rails (4.2.3)
|
151
|
+
actionmailer (= 4.2.3)
|
152
|
+
actionpack (= 4.2.3)
|
153
|
+
actionview (= 4.2.3)
|
154
|
+
activejob (= 4.2.3)
|
155
|
+
activemodel (= 4.2.3)
|
156
|
+
activerecord (= 4.2.3)
|
157
|
+
activesupport (= 4.2.3)
|
158
158
|
bundler (>= 1.3.0, < 2.0)
|
159
|
-
railties (= 4.2.
|
159
|
+
railties (= 4.2.3)
|
160
160
|
sprockets-rails
|
161
161
|
rails-deprecated_sanitizer (1.0.3)
|
162
162
|
activesupport (>= 4.2.0.alpha)
|
@@ -185,14 +185,14 @@ GEM
|
|
185
185
|
mongoid (>= 3.0)
|
186
186
|
rails (>= 3.0)
|
187
187
|
rails_admin (>= 0.5)
|
188
|
-
rails_admin_nested_set (0.4.
|
189
|
-
rails_admin
|
190
|
-
rails_admin_settings (1.0.
|
191
|
-
rails_admin_toggleable (0.5.
|
192
|
-
rails_admin
|
193
|
-
railties (4.2.
|
194
|
-
actionpack (= 4.2.
|
195
|
-
activesupport (= 4.2.
|
188
|
+
rails_admin_nested_set (0.4.4)
|
189
|
+
rails_admin
|
190
|
+
rails_admin_settings (1.0.1)
|
191
|
+
rails_admin_toggleable (0.5.1)
|
192
|
+
rails_admin
|
193
|
+
railties (4.2.3)
|
194
|
+
actionpack (= 4.2.3)
|
195
|
+
activesupport (= 4.2.3)
|
196
196
|
rake (>= 0.8.7)
|
197
197
|
thor (>= 0.18.1, < 2.0)
|
198
198
|
rake (10.4.2)
|
@@ -200,7 +200,7 @@ GEM
|
|
200
200
|
responders (2.1.0)
|
201
201
|
railties (>= 4.2.0, < 5)
|
202
202
|
safe_yaml (1.0.4)
|
203
|
-
sass (3.4.
|
203
|
+
sass (3.4.16)
|
204
204
|
sass-rails (5.0.3)
|
205
205
|
railties (>= 4.0.0, < 5.0)
|
206
206
|
sass (~> 3.1)
|
@@ -219,7 +219,7 @@ GEM
|
|
219
219
|
htmlentities
|
220
220
|
sprockets (3.2.0)
|
221
221
|
rack (~> 1.0)
|
222
|
-
sprockets-rails (2.3.
|
222
|
+
sprockets-rails (2.3.2)
|
223
223
|
actionpack (>= 3.0)
|
224
224
|
activesupport (>= 3.0)
|
225
225
|
sprockets (>= 2.8, < 4.0)
|
data/README.md
CHANGED
@@ -1,13 +1,10 @@
|
|
1
1
|
# RocketCMS
|
2
2
|
|
3
|
-
|
3
|
+
Rails + RailsAdmin + Mongoid/PostgreSQL + Elasticsearch CMS
|
4
4
|
|
5
5
|
Very opinionated and tuned for my needs.
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
**Before 1.0 API and class names should be considered unstable and can change at
|
10
|
-
any time!**
|
7
|
+
**Before 1.0 API and class names should be considered unstable and can change at any time!**
|
11
8
|
|
12
9
|
## Installation
|
13
10
|
|
@@ -58,6 +55,68 @@ for ActiveRecord:
|
|
58
55
|
|
59
56
|
generator creates a new RVM gemset, so after cd'ing to app dir, you should run `bundle install` again if you use rvm.
|
60
57
|
|
58
|
+
### Localization
|
59
|
+
|
60
|
+
All models included in the gem support localization via either [hstore_translate](https://github.com/Leadformance/hstore_translate) or built-in Mongoid localize: true option.
|
61
|
+
|
62
|
+
You can get a nice admin UI for editing locales by adding [rails_admin_hstore_translate](https://github.com/glebtv/rails_admin_hstore_translate) or [rails_admin_mongoid_localize_field](https://github.com/sudosu/rails_admin_mongoid_localize_field)
|
63
|
+
|
64
|
+
Add to: ```app/models/page.rb```
|
65
|
+
|
66
|
+
```ruby
|
67
|
+
class Page < ActiveRecord::Base
|
68
|
+
include RocketCMS::Models::Page
|
69
|
+
RocketCMS.apply_patches self
|
70
|
+
rails_admin &RocketCMS.page_config
|
71
|
+
|
72
|
+
def regexp_prefix
|
73
|
+
"(?:\/ru|\/en)?"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
```
|
77
|
+
|
78
|
+
Wrap your routes with locale scope:
|
79
|
+
|
80
|
+
```ruby
|
81
|
+
scope "(:locale)", locale: /en|ru/ do
|
82
|
+
get 'contacts' => 'contacts#new', as: :contacts
|
83
|
+
post 'contacts' => 'contacts#create', as: :create_contacts
|
84
|
+
end
|
85
|
+
```
|
86
|
+
|
87
|
+
Add to application_controller.rb:
|
88
|
+
|
89
|
+
```ruby
|
90
|
+
class ApplicationController < ActionController::Base
|
91
|
+
include RocketCMS::Controller
|
92
|
+
include RsLocalizeable
|
93
|
+
end
|
94
|
+
```
|
95
|
+
|
96
|
+
Enable localization in RocketCMS:
|
97
|
+
|
98
|
+
```ruby
|
99
|
+
RocketCMS.configure do |rc|
|
100
|
+
rc.news_image_styles = {small: '107x126#'}
|
101
|
+
rc.contacts_captcha = true
|
102
|
+
rc.contacts_message_required = true
|
103
|
+
...
|
104
|
+
rc.localize = true
|
105
|
+
end
|
106
|
+
```
|
107
|
+
|
108
|
+
Add ```rails_admin_hstore_translate``` or ```hstore_translate``` gem if using PostgreSQL:
|
109
|
+
|
110
|
+
```ruby
|
111
|
+
gem 'rails_admin_hstore_translate'
|
112
|
+
```
|
113
|
+
|
114
|
+
or
|
115
|
+
|
116
|
+
```ruby
|
117
|
+
gem 'hstore_translate'
|
118
|
+
```
|
119
|
+
|
61
120
|
### Documentation
|
62
121
|
|
63
122
|
It's basically Mongoid + Rails Admin + some of my common models and controllers, capistrano config (from root repo), etc.
|
@@ -43,7 +43,7 @@ module RsErrors
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
|
46
|
+
private
|
47
47
|
def render_404(exception = nil)
|
48
48
|
Rails.logger.error "__________________________"
|
49
49
|
Rails.logger.error "Error 404"
|
@@ -71,16 +71,20 @@ module RsErrors
|
|
71
71
|
Rails.logger.error "__________________________"
|
72
72
|
begin
|
73
73
|
if rails_admin?
|
74
|
-
render text: t('rs.errors.internal_error'), status: 500
|
74
|
+
render text: t('rs.errors.internal_error', klass: exception.class.name, message: exception.message), status: 500
|
75
75
|
return
|
76
76
|
end
|
77
|
-
rescue
|
77
|
+
rescue Exception => e
|
78
|
+
puts "error while rendering rails admin exception"
|
79
|
+
puts e.class.name
|
80
|
+
puts e.message
|
81
|
+
puts e.backtrace.join("\n")
|
78
82
|
end
|
79
83
|
render_error(500)
|
80
84
|
end
|
81
85
|
|
82
86
|
def render_error(code = 500)
|
83
|
-
|
87
|
+
render template: "errors/error_#{code}", formats: [:html], handlers: [:haml, :slim], layout: RocketCMS.config.error_layout, status: code
|
84
88
|
end
|
85
89
|
|
86
90
|
def rails_admin?
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module RsLocalizeable
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
included do
|
4
|
+
before_filter do
|
5
|
+
I18n.locale = params[:locale] || I18n.default_locale
|
6
|
+
Settings.ns_default = "main_#{I18n.locale}"
|
7
|
+
Settings.ns_fallback = "main"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
private
|
11
|
+
def default_url_options(options={})
|
12
|
+
{locale: params[:locale]}
|
13
|
+
end
|
14
|
+
def nav_get_menu_items(type)
|
15
|
+
pages = ::Menu.find(type.to_s).pages.enabled
|
16
|
+
pages = pages.where(["EXIST(name_translations, ?) = TRUE AND name_translations -> ? != ''", I18n.locale, I18n.locale])
|
17
|
+
pages.sorted.to_a
|
18
|
+
end
|
19
|
+
def nav_get_url(item)
|
20
|
+
(params[:locale].blank? ? "" : "/#{params[:locale]}") + (item.redirect.blank? ? item.fullpath : item.redirect)
|
21
|
+
end
|
22
|
+
def find_seo_extra(path)
|
23
|
+
Page.enabled.where(fullpath: path.gsub(/(\/ru|\/en)/, "")).first
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -4,6 +4,7 @@ module RsMenu
|
|
4
4
|
helper_method :navigation
|
5
5
|
end
|
6
6
|
|
7
|
+
private
|
7
8
|
def render_with_subs(items, primary, item)
|
8
9
|
subs = items.select { |i| i.parent_id == item.id && !i.name.blank? && i.enabled }
|
9
10
|
if subs.empty?
|
@@ -18,7 +19,7 @@ module RsMenu
|
|
18
19
|
end
|
19
20
|
|
20
21
|
def navigation_item(primary, item, block=nil)
|
21
|
-
url = item
|
22
|
+
url = nav_get_url(item)
|
22
23
|
if block.nil?
|
23
24
|
primary.item(item.slug, item.name, url, item.nav_options)
|
24
25
|
else
|
@@ -31,7 +32,7 @@ module RsMenu
|
|
31
32
|
SimpleNavigation.config.autogenerate_item_ids = false
|
32
33
|
begin
|
33
34
|
nav_extra_data_before(type, primary)
|
34
|
-
items =
|
35
|
+
items = nav_get_menu_items(type)
|
35
36
|
items.select { |i| i.parent_id.nil? && !i.name.blank? && i.enabled }.each do |item|
|
36
37
|
render_with_subs(items, primary, item) if primary
|
37
38
|
end
|
@@ -45,6 +46,12 @@ module RsMenu
|
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
49
|
+
def nav_get_url(item)
|
50
|
+
item.redirect.blank? ? item.fullpath : item.redirect
|
51
|
+
end
|
52
|
+
def nav_get_menu_items(type)
|
53
|
+
::Menu.find(type.to_s).pages.enabled.sorted.to_a
|
54
|
+
end
|
48
55
|
def nav_extra_data_before(type, primary)
|
49
56
|
# override for additional config or items
|
50
57
|
end
|
@@ -5,7 +5,6 @@ module RsPages
|
|
5
5
|
end
|
6
6
|
|
7
7
|
private
|
8
|
-
|
9
8
|
def find_page
|
10
9
|
return if rails_admin?
|
11
10
|
@seo_page = find_seo_page request.path
|
@@ -23,8 +22,16 @@ module RsPages
|
|
23
22
|
path = path[0..-2]
|
24
23
|
do_redirect = true
|
25
24
|
end
|
26
|
-
|
27
25
|
page = Page.enabled.where(fullpath: path).first
|
26
|
+
|
27
|
+
if page.nil? && !params[:slug].blank?
|
28
|
+
page = Page.enabled.where(fullpath: "/" + params[:slug]).first
|
29
|
+
end
|
30
|
+
|
31
|
+
if page.nil?
|
32
|
+
page = find_seo_extra(path)
|
33
|
+
end
|
34
|
+
|
28
35
|
if page.nil?
|
29
36
|
do_redirect = true
|
30
37
|
spath = path.chomp(File.extname(path))
|
@@ -32,6 +39,7 @@ module RsPages
|
|
32
39
|
page = Page.enabled.where(fullpath: spath).first
|
33
40
|
end
|
34
41
|
end
|
42
|
+
|
35
43
|
if !page.nil? && do_redirect
|
36
44
|
redirect_to path, status: :moved_permanently
|
37
45
|
end
|
@@ -39,7 +47,6 @@ module RsPages
|
|
39
47
|
page
|
40
48
|
end
|
41
49
|
|
42
|
-
|
43
50
|
def find_seo_page_with_redirect(path)
|
44
51
|
do_redirect = false
|
45
52
|
if path[0] != '/'
|
@@ -65,6 +72,10 @@ module RsPages
|
|
65
72
|
page
|
66
73
|
|
67
74
|
end
|
75
|
+
|
76
|
+
def find_seo_extra(path)
|
77
|
+
nil
|
78
|
+
end
|
68
79
|
|
69
80
|
def rails_admin?
|
70
81
|
self.is_a?(RailsAdmin::ApplicationController) || self.is_a?(RailsAdmin::MainController)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module GzipHelper
|
2
|
+
def gzip_javascript_include_tag(*sources)
|
3
|
+
# Grab the asset html include tag
|
4
|
+
tag = javascript_include_tag *sources
|
5
|
+
|
6
|
+
# If we are in production and the requesting client accepts gzip encoding, swap for the gzip asset
|
7
|
+
if Rails.env.production? && request.accept_encoding =~ /gzip/i
|
8
|
+
tag = tag.gsub(/\.js/i, ".js.gz")
|
9
|
+
end
|
10
|
+
|
11
|
+
# Return the asset whether or not it was modified
|
12
|
+
tag.html_safe
|
13
|
+
end
|
14
|
+
|
15
|
+
def gzip_stylesheet_link_tag(*sources)
|
16
|
+
# Grab the asset html include tag
|
17
|
+
tag = stylesheet_link_tag *sources
|
18
|
+
|
19
|
+
# If we are in production and the requesting client accepts gzip encoding, swap for the gzip asset
|
20
|
+
if Rails.env.production? && request.accept_encoding =~ /gzip/i
|
21
|
+
tag = tag.gsub(/\.css/i, ".css.gz")
|
22
|
+
end
|
23
|
+
|
24
|
+
# Return the asset whether or not it was modified
|
25
|
+
tag.html_safe
|
26
|
+
end
|
27
|
+
end
|