editmode 1.2.6 → 1.3.1
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/Gemfile +2 -0
- data/Rakefile +9 -1
- data/lib/editmode/action_view_extensions/editmode_helper.rb +16 -6
- data/lib/editmode/chunk_value.rb +21 -11
- 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: 392f282609e410c8656791b6120245b8b4c790ed8ba102d6dfe1c5d2062acd6f
|
4
|
+
data.tar.gz: 94246ddabf9aadcdf65ceab231e83a6704a7d89f39ce5039685b7f44ea4e18c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a1f7f6442b1109fedbd94be59a08c0658d3aa6d9570a5e21f36a32da45c6befacdab23da75670618034c95ceace95262e440807ccafc0c847544b96600497be
|
7
|
+
data.tar.gz: b89dc6f25b53ef930ed66c752947a539157cd4cda959a8288366431cb2ea0987ac7d5af6e3b5ab0a5ee49e341046fc47877133ade9c1fa05a8ba0a833add5368
|
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,9 +17,11 @@ 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]
|
24
|
+
@skip_cache = options[:skip_cache]
|
20
25
|
|
21
26
|
@url = "#{api_root_url}/chunks/#{identifier}"
|
22
27
|
@cache_identifier = set_cache_identifier(identifier)
|
@@ -62,6 +67,11 @@ module Editmode
|
|
62
67
|
result.try(:html_safe)
|
63
68
|
end
|
64
69
|
|
70
|
+
def cached?
|
71
|
+
return false if @skip_cache
|
72
|
+
Rails.cache.exist?(cache_identifier)
|
73
|
+
end
|
74
|
+
|
65
75
|
private
|
66
76
|
|
67
77
|
# Todo: Transfer to helper utils
|
@@ -81,7 +91,6 @@ module Editmode
|
|
81
91
|
end
|
82
92
|
|
83
93
|
def variable_parse!(content, variables = {}, values = {}, raw = true, skip_sanitize=false)
|
84
|
-
content = ActionController::Base.helpers.sanitize(content) unless skip_sanitize
|
85
94
|
tokens = content.scan(/\{{(.*?)\}}/)
|
86
95
|
if tokens.any?
|
87
96
|
tokens.flatten!
|
@@ -99,11 +108,8 @@ module Editmode
|
|
99
108
|
end
|
100
109
|
end
|
101
110
|
|
102
|
-
content
|
103
|
-
|
104
|
-
|
105
|
-
def cached?
|
106
|
-
Rails.cache.exist?(cache_identifier)
|
111
|
+
content = ActionController::Base.helpers.sanitize(content) unless skip_sanitize
|
112
|
+
return content
|
107
113
|
end
|
108
114
|
|
109
115
|
def query_params
|
@@ -115,16 +121,17 @@ module Editmode
|
|
115
121
|
|
116
122
|
def get_content
|
117
123
|
if !cached?
|
118
|
-
http_response = HTTParty.get(url, query: query_params)
|
124
|
+
http_response = HTTParty.get(url, query: query_params, headers: {referrer: @referrer})
|
119
125
|
response_received = true if http_response.code == 200
|
120
126
|
end
|
121
127
|
|
122
128
|
if !cached? && !response_received
|
123
|
-
|
129
|
+
message = http_response.try(:[], 'message') || no_response_received(identifier)
|
130
|
+
|
131
|
+
raise message
|
124
132
|
else
|
125
|
-
|
126
|
-
|
127
|
-
end
|
133
|
+
Rails.cache.write(cache_identifier, http_response.to_json) if http_response.present?
|
134
|
+
cached_response = Rails.cache.fetch(cache_identifier)
|
128
135
|
|
129
136
|
@response = json?(cached_response) ? JSON.parse(cached_response) : cached_response
|
130
137
|
set_response_attributes!
|
@@ -139,5 +146,8 @@ module Editmode
|
|
139
146
|
@branch_id = response['branch_id']
|
140
147
|
end
|
141
148
|
|
149
|
+
def no_response_received(id = "")
|
150
|
+
"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."
|
151
|
+
end
|
142
152
|
end
|
143
153
|
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.
|
4
|
+
version: 1.3.1
|
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-26 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
|