editmode 1.2.7 → 1.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/Rakefile +9 -1
- data/lib/editmode/action_view_extensions/editmode_helper.rb +16 -6
- data/lib/editmode/chunk_value.rb +20 -9
- data/lib/editmode/engine.rb +2 -1
- data/lib/editmode/helper.rb +8 -25
- data/lib/editmode/railtie.rb +1 -0
- data/lib/editmode/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe9965c96f8c7fb66afae65725f82fbb536fae3981924b090643e9899735627c
|
4
|
+
data.tar.gz: 75bc30d9f5bb9575780e43a3f2f8776fc35ad55f328c7fd5c7134c9685487727
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ffb62bd7347c80679acdcc57fa50d3ce1c266557f3f88f27d08d0cc646b5297e8a4dceb36f6f36cb229a58888230cc9be8220f80832346607c49dfda5475c39
|
7
|
+
data.tar.gz: 0375dc9c6098596aead8445fc4d57b8f53ee57d820ccd1db2c61cf3c214171472cbee29e2f7b39b019e212c0968077702b50d99e261ef82e4722080f46d0d82b
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -1,15 +1,25 @@
|
|
1
1
|
require 'editmode/helper'
|
2
|
+
require 'action_view'
|
3
|
+
require 'httparty'
|
2
4
|
|
3
5
|
module Editmode
|
4
6
|
module ActionViewExtensions
|
5
7
|
module EditmodeHelper
|
6
|
-
|
8
|
+
include ::ActionView::Helpers::TagHelper
|
9
|
+
include ::ActionView::Helpers::TextHelper
|
10
|
+
include ::ActionView::Helpers::AssetTagHelper
|
11
|
+
include ::ActionView::Context
|
7
12
|
include Editmode::Helper
|
8
13
|
|
14
|
+
|
9
15
|
def api_version
|
10
16
|
# Todo Add Header Version
|
11
17
|
end
|
12
18
|
|
19
|
+
def allowed_tag_attributes
|
20
|
+
[:style, :href, :title, :src, :alt, :width, :height]
|
21
|
+
end
|
22
|
+
|
13
23
|
def api_root_url
|
14
24
|
ENV["EDITMODE_OVERRIDE_API_URL"] || "https://api.editmode.com"
|
15
25
|
end
|
@@ -104,7 +114,7 @@ module Editmode
|
|
104
114
|
end
|
105
115
|
end
|
106
116
|
|
107
|
-
def render_chunk_content(chunk_identifier, chunk_content, chunk_type,options = {})
|
117
|
+
def render_chunk_content(chunk_identifier, chunk_content, chunk_type, options = {})
|
108
118
|
begin
|
109
119
|
css_class = options[:class]
|
110
120
|
cache_id = options[:cache_identifier]
|
@@ -126,17 +136,17 @@ module Editmode
|
|
126
136
|
case display_type
|
127
137
|
when "span"
|
128
138
|
if chunk_type == "rich_text"
|
129
|
-
content = content_tag("em-span", :class => "editmode-richtext-editor #{css_class}", :data => chunk_data.merge!({:chunk_editable => true}) ) do
|
139
|
+
content = content_tag("em-span", :class => "editmode-richtext-editor #{css_class}", :data => chunk_data.merge!({:chunk_editable => true}), **options.slice(*allowed_tag_attributes) ) do
|
130
140
|
chunk_content.html_safe
|
131
141
|
end
|
132
142
|
else
|
133
|
-
content_tag("em-span", :class => css_class, :data => chunk_data.merge!({:chunk_editable => true}) ) do
|
143
|
+
content_tag("em-span", :class => css_class, :data => chunk_data.merge!({:chunk_editable => true}), **options.slice(*allowed_tag_attributes) ) do
|
134
144
|
chunk_content.html_safe
|
135
145
|
end
|
136
146
|
end
|
137
147
|
when "image"
|
138
148
|
chunk_content = chunk_content.blank? || chunk_content == "/images/original/missing.png" ? 'https://www.editmode.com/upload.png' : chunk_content
|
139
|
-
image_tag(chunk_content, :data => chunk_data, :class => css_class)
|
149
|
+
image_tag(chunk_content, :data => chunk_data, :class => css_class, **options.slice(*allowed_tag_attributes))
|
140
150
|
end
|
141
151
|
rescue => errors
|
142
152
|
puts errors
|
@@ -153,7 +163,7 @@ module Editmode
|
|
153
163
|
# prevent the page from loading.
|
154
164
|
begin
|
155
165
|
field = options[:field].presence || ""
|
156
|
-
|
166
|
+
options[:referrer] = request.url
|
157
167
|
chunk_value = Editmode::ChunkValue.new(identifier, options)
|
158
168
|
|
159
169
|
if field.present? && chunk_value.chunk_type == 'collection_item'
|
data/lib/editmode/chunk_value.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'action_view'
|
2
|
+
require 'active_support'
|
3
|
+
|
1
4
|
module Editmode
|
2
5
|
class ChunkValue
|
3
6
|
include ActionView::Helpers::TagHelper
|
@@ -14,6 +17,7 @@ module Editmode
|
|
14
17
|
@identifier = identifier
|
15
18
|
@branch_id = options[:branch_id].presence
|
16
19
|
@project_id = project_id
|
20
|
+
@referrer = options[:referrer].presence || ""
|
17
21
|
@variable_values = options[:variables].presence || {}
|
18
22
|
@raw = options[:raw].present?
|
19
23
|
@skip_sanitize = options[:dangerously_skip_sanitization]
|
@@ -63,7 +67,15 @@ module Editmode
|
|
63
67
|
result.try(:html_safe)
|
64
68
|
end
|
65
69
|
|
70
|
+
def cached?
|
71
|
+
return false if @skip_cache
|
72
|
+
Rails.cache.exist?(cache_identifier)
|
73
|
+
end
|
74
|
+
|
66
75
|
private
|
76
|
+
def allowed_tag_attributes
|
77
|
+
%w(style href title src alt width height class target)
|
78
|
+
end
|
67
79
|
|
68
80
|
# Todo: Transfer to helper utils
|
69
81
|
def api_root_url
|
@@ -99,15 +111,10 @@ module Editmode
|
|
99
111
|
end
|
100
112
|
end
|
101
113
|
|
102
|
-
content = ActionController::Base.helpers.sanitize(content) unless skip_sanitize
|
114
|
+
content = ActionController::Base.helpers.sanitize(content, attributes: allowed_tag_attributes) unless skip_sanitize
|
103
115
|
return content
|
104
116
|
end
|
105
117
|
|
106
|
-
def cached?
|
107
|
-
return false if @skip_cache
|
108
|
-
Rails.cache.exist?(cache_identifier)
|
109
|
-
end
|
110
|
-
|
111
118
|
def query_params
|
112
119
|
the_params = { 'project_id' => project_id }
|
113
120
|
the_params['branch_id'] = branch_id if branch_id.present?
|
@@ -116,14 +123,15 @@ module Editmode
|
|
116
123
|
end
|
117
124
|
|
118
125
|
def get_content
|
119
|
-
|
120
126
|
if !cached?
|
121
|
-
http_response = HTTParty.get(url, query: query_params)
|
127
|
+
http_response = HTTParty.get(url, query: query_params, headers: {referrer: @referrer})
|
122
128
|
response_received = true if http_response.code == 200
|
123
129
|
end
|
124
130
|
|
125
131
|
if !cached? && !response_received
|
126
|
-
|
132
|
+
message = http_response.try(:[], 'message') || no_response_received(identifier)
|
133
|
+
|
134
|
+
raise message
|
127
135
|
else
|
128
136
|
Rails.cache.write(cache_identifier, http_response.to_json) if http_response.present?
|
129
137
|
cached_response = Rails.cache.fetch(cache_identifier)
|
@@ -141,5 +149,8 @@ module Editmode
|
|
141
149
|
@branch_id = response['branch_id']
|
142
150
|
end
|
143
151
|
|
152
|
+
def no_response_received(id = "")
|
153
|
+
"Sorry, we can't find a chunk using this identifier: \"#{id}\". This can happen if you've deleted a chunk on editmode.com or if your local cache is out of date. If it persists, try running Rails.cache clear."
|
154
|
+
end
|
144
155
|
end
|
145
156
|
end
|
data/lib/editmode/engine.rb
CHANGED
data/lib/editmode/helper.rb
CHANGED
@@ -5,34 +5,17 @@ module Editmode
|
|
5
5
|
field, options = parse_arguments(args)
|
6
6
|
begin
|
7
7
|
chunk = Editmode::ChunkValue.new(identifier, options.merge({raw: true}))
|
8
|
-
|
8
|
+
|
9
|
+
if chunk.chunk_type == 'collection_item'
|
10
|
+
chunk.field(field)
|
11
|
+
else
|
12
|
+
chunk.content
|
13
|
+
end
|
9
14
|
rescue => er
|
10
|
-
|
15
|
+
Rails.logger.info "#{er}: We can't render content for #{identifier}"
|
11
16
|
end
|
12
17
|
end
|
13
18
|
|
14
|
-
def render_noneditable_chunk(chunk, field=nil, options=nil)
|
15
|
-
return render_collection_item(chunk, field, options) if chunk.chunk_type == 'collection_item'
|
16
|
-
|
17
|
-
render_content(chunk, options)
|
18
|
-
end
|
19
|
-
|
20
|
-
def render_collection_item(chunk, field=nil, options=nil)
|
21
|
-
return render_image(chunk.field(field), options[:class]) if chunk.field_chunk(field)['chunk_type'] == 'image'
|
22
|
-
|
23
|
-
chunk.field(field)
|
24
|
-
end
|
25
|
-
|
26
|
-
def render_content(chunk, options=nil)
|
27
|
-
return render_image(chunk.content, options[:class]) if chunk.chunk_type == 'image'
|
28
|
-
|
29
|
-
chunk.content
|
30
|
-
end
|
31
|
-
|
32
|
-
def render_image(content, css_class=nil)
|
33
|
-
image_tag(content, class: css_class)
|
34
|
-
end
|
35
|
-
|
36
19
|
def render_custom_field_raw(label, options={})
|
37
20
|
e(@custom_field_chunk["identifier"], label, options.merge({response: @custom_field_chunk}))
|
38
21
|
end
|
@@ -50,4 +33,4 @@ module Editmode
|
|
50
33
|
return field, options
|
51
34
|
end
|
52
35
|
end
|
53
|
-
end
|
36
|
+
end
|
data/lib/editmode/railtie.rb
CHANGED
data/lib/editmode/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: editmode
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2
|
4
|
+
version: 1.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Ennis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -109,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
requirements: []
|
112
|
-
rubygems_version: 3.
|
112
|
+
rubygems_version: 3.2.4
|
113
113
|
signing_key:
|
114
114
|
specification_version: 4
|
115
115
|
summary: Editmode allows you to turn plain text in your rails app into easily inline-editable
|