embeddable_content 0.1.19
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/.rubocop.yml +62 -0
- data/.ruby-version +1 -0
- data/Gemfile +15 -0
- data/MIT-LICENSE +20 -0
- data/README.md +49 -0
- data/Rakefile +22 -0
- data/app/assets/config/embeddable_content_manifest.js +0 -0
- data/app/assets/images/embeddable_content/.keep +0 -0
- data/app/assets/javascripts/desmos/support.js +12 -0
- data/app/assets/javascripts/geogebra/support.js +14 -0
- data/app/assets/stylesheets/embeddable_content/.keep +0 -0
- data/app/controllers/.keep +0 -0
- data/app/controllers/concerns/cms/embeddable_content_controller.rb +14 -0
- data/app/controllers/concerns/embeddable_content_controller.rb +85 -0
- data/app/helpers/.keep +0 -0
- data/app/mailers/.keep +0 -0
- data/app/models/.keep +0 -0
- data/app/models/concerns/provides_embeddable_content.rb +59 -0
- data/app/models/embeddable_model_config.rb +55 -0
- data/app/models/embedder_config.rb +45 -0
- data/app/models/embedding.rb +25 -0
- data/app/services/embeddable_content/desmos_files/doc_processor.rb +5 -0
- data/app/services/embeddable_content/desmos_files/node_processor.rb +7 -0
- data/app/services/embeddable_content/doc_processor.rb +63 -0
- data/app/services/embeddable_content/embedded_tag_info.rb +50 -0
- data/app/services/embeddable_content/embedded_tags.rb +30 -0
- data/app/services/embeddable_content/embedder.rb +89 -0
- data/app/services/embeddable_content/embedder_base.rb +68 -0
- data/app/services/embeddable_content/fragment_embedder.rb +30 -0
- data/app/services/embeddable_content/geogebra_files/doc_processor.rb +5 -0
- data/app/services/embeddable_content/geogebra_files/node_processor.rb +11 -0
- data/app/services/embeddable_content/html_tags/doc_processor.rb +11 -0
- data/app/services/embeddable_content/html_tags/node_processor.rb +26 -0
- data/app/services/embeddable_content/images/attributions_processor.rb +60 -0
- data/app/services/embeddable_content/images/doc_processor.rb +54 -0
- data/app/services/embeddable_content/images/image_downloader.rb +60 -0
- data/app/services/embeddable_content/images/img_tag_attributes.rb +125 -0
- data/app/services/embeddable_content/images/modal_dialog.rb +74 -0
- data/app/services/embeddable_content/images/node_processor.rb +91 -0
- data/app/services/embeddable_content/images/shared.rb +11 -0
- data/app/services/embeddable_content/node_processor.rb +75 -0
- data/app/services/embeddable_content/presentation_tags/doc_processor.rb +5 -0
- data/app/services/embeddable_content/presentation_tags/node_processor.rb +35 -0
- data/app/services/embeddable_content/record_node_processor.rb +90 -0
- data/app/services/embeddable_content/replacement_template_manager.rb +21 -0
- data/app/services/embeddable_content/sad_embedded_tags.rb +29 -0
- data/app/services/embeddable_content/scrubber.rb +32 -0
- data/app/services/embeddable_content/template_based.rb +19 -0
- data/app/services/embeddable_content/template_manager.rb +100 -0
- data/app/services/embeddable_content/tex/base_renderer.rb +33 -0
- data/app/services/embeddable_content/tex/canvas_renderer.rb +15 -0
- data/app/services/embeddable_content/tex/doc_processor.rb +55 -0
- data/app/services/embeddable_content/tex/mathjax_renderer.rb +11 -0
- data/app/services/embeddable_content/tex/mml_renderer.rb +11 -0
- data/app/services/embeddable_content/tex/schoology_string_renderer.rb +15 -0
- data/app/services/embeddable_content/tex/svg_renderer.rb +11 -0
- data/app/services/embeddable_content/token_replacement_map.rb +32 -0
- data/app/services/embeddable_content/tree_based_node_processor.rb +23 -0
- data/app/services/embeddable_content/video_links/doc_processor.rb +5 -0
- data/app/services/embeddable_content/video_links/node_processor.rb +46 -0
- data/app/services/embeddable_content/video_links/vimeo_player_settings.rb +19 -0
- data/app/services/embeddable_content/visual_element_node_processor.rb +13 -0
- data/app/services/embeddable_content/widget_files/doc_processor.rb +5 -0
- data/app/services/embeddable_content/widget_files/node_processor.rb +7 -0
- data/app/views/.keep +0 -0
- data/app/views/embeddable_content/replacements/desmos_files/_applet.html.slim +8 -0
- data/app/views/embeddable_content/replacements/desmos_files/_description.html.slim +6 -0
- data/app/views/embeddable_content/replacements/desmos_files/cc.html.slim +1 -0
- data/app/views/embeddable_content/replacements/desmos_files/cms.html.slim +1 -0
- data/app/views/embeddable_content/replacements/desmos_files/editable.html.slim +1 -0
- data/app/views/embeddable_content/replacements/desmos_files/exported.html.slim +1 -0
- data/app/views/embeddable_content/replacements/desmos_files/kiddom.html.slim +1 -0
- data/app/views/embeddable_content/replacements/desmos_files/print.html.slim +1 -0
- data/app/views/embeddable_content/replacements/desmos_files/qti.html.slim +1 -0
- data/app/views/embeddable_content/replacements/desmos_files/schoology.html.slim +1 -0
- data/app/views/embeddable_content/replacements/desmos_files/web.html.slim +1 -0
- data/app/views/embeddable_content/replacements/geogebra_files/_applet.html.slim +11 -0
- data/app/views/embeddable_content/replacements/geogebra_files/_description.html.slim +9 -0
- data/app/views/embeddable_content/replacements/geogebra_files/cc.html.slim +1 -0
- data/app/views/embeddable_content/replacements/geogebra_files/cms.html.slim +1 -0
- data/app/views/embeddable_content/replacements/geogebra_files/editable.html.slim +1 -0
- data/app/views/embeddable_content/replacements/geogebra_files/exported.html.slim +1 -0
- data/app/views/embeddable_content/replacements/geogebra_files/kiddom.html.slim +1 -0
- data/app/views/embeddable_content/replacements/geogebra_files/print.html.slim +1 -0
- data/app/views/embeddable_content/replacements/geogebra_files/qti.html.slim +1 -0
- data/app/views/embeddable_content/replacements/geogebra_files/schoology.html.slim +1 -0
- data/app/views/embeddable_content/replacements/geogebra_files/web.html.slim +1 -0
- data/app/views/embeddable_content/replacements/html_tags/editable.html.slim +16 -0
- data/app/views/embeddable_content/replacements/images/_button_close.html.slim +9 -0
- data/app/views/embeddable_content/replacements/images/_button_open.html.slim +9 -0
- data/app/views/embeddable_content/replacements/images/_image_embed.html.slim +14 -0
- data/app/views/embeddable_content/replacements/images/_modal_content.html.slim +30 -0
- data/app/views/embeddable_content/replacements/images/_modal_dialog.html.slim +17 -0
- data/app/views/embeddable_content/replacements/images/cc.html.slim +12 -0
- data/app/views/embeddable_content/replacements/images/cms.html.slim +1 -0
- data/app/views/embeddable_content/replacements/images/editable.html.slim +1 -0
- data/app/views/embeddable_content/replacements/images/exported.html.slim +1 -0
- data/app/views/embeddable_content/replacements/images/kiddom.html.slim +12 -0
- data/app/views/embeddable_content/replacements/images/print.html.slim +1 -0
- data/app/views/embeddable_content/replacements/images/qti.html.slim +6 -0
- data/app/views/embeddable_content/replacements/images/schoology.html.slim +12 -0
- data/app/views/embeddable_content/replacements/images/web.html.slim +1 -0
- data/app/views/embeddable_content/replacements/presentation_tags/_default.html.slim +6 -0
- data/app/views/embeddable_content/replacements/presentation_tags/print.html.slim +1 -0
- data/app/views/embeddable_content/replacements/status/warning.html.slim +12 -0
- data/app/views/embeddable_content/replacements/video_links/_caption.html.slim +13 -0
- data/app/views/embeddable_content/replacements/video_links/_description.html.slim +12 -0
- data/app/views/embeddable_content/replacements/video_links/_video_embed.html.slim +13 -0
- data/app/views/embeddable_content/replacements/video_links/_video_player.html.slim +6 -0
- data/app/views/embeddable_content/replacements/video_links/_vimeo_player.html.slim +6 -0
- data/app/views/embeddable_content/replacements/video_links/cc.html.slim +1 -0
- data/app/views/embeddable_content/replacements/video_links/cms.html.slim +1 -0
- data/app/views/embeddable_content/replacements/video_links/editable.html.slim +1 -0
- data/app/views/embeddable_content/replacements/video_links/exported.html.slim +1 -0
- data/app/views/embeddable_content/replacements/video_links/kiddom.html.slim +1 -0
- data/app/views/embeddable_content/replacements/video_links/print.html.slim +1 -0
- data/app/views/embeddable_content/replacements/video_links/qti.html.slim +1 -0
- data/app/views/embeddable_content/replacements/video_links/schoology.html.slim +1 -0
- data/app/views/embeddable_content/replacements/video_links/web.html.slim +1 -0
- data/app/views/embeddable_content/replacements/widget_files/_widget_omitted.html.slim +8 -0
- data/app/views/embeddable_content/replacements/widget_files/_widget_script.html.slim +13 -0
- data/app/views/embeddable_content/replacements/widget_files/cc.html.slim +1 -0
- data/app/views/embeddable_content/replacements/widget_files/cms.html.slim +1 -0
- data/app/views/embeddable_content/replacements/widget_files/editable.html.slim +1 -0
- data/app/views/embeddable_content/replacements/widget_files/exported.html.slim +1 -0
- data/app/views/embeddable_content/replacements/widget_files/kiddom.html.slim +1 -0
- data/app/views/embeddable_content/replacements/widget_files/print.html.slim +1 -0
- data/app/views/embeddable_content/replacements/widget_files/qti.html.slim +1 -0
- data/app/views/embeddable_content/replacements/widget_files/schoology.html.slim +1 -0
- data/app/views/embeddable_content/replacements/widget_files/web.html.slim +1 -0
- data/bin/rails +25 -0
- data/config/initializers/embeddable_content.rb +3 -0
- data/config/routes.rb +2 -0
- data/embeddable_content.gemspec +48 -0
- data/lib/embeddable_content/engine.rb +8 -0
- data/lib/embeddable_content/version.rb +3 -0
- data/lib/embeddable_content.rb +3 -0
- data/lib/tasks/embeddable_content_tasks.rake +4 -0
- metadata +309 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
module EmbeddableContent
|
2
|
+
class TokenReplacementMap
|
3
|
+
attr_reader :target_pattern_map
|
4
|
+
|
5
|
+
def initialize(target_pattern_map)
|
6
|
+
@target_pattern_map = target_pattern_map
|
7
|
+
end
|
8
|
+
|
9
|
+
def target_regexp_map
|
10
|
+
@target_regexp_map ||= build_target_regexp_map
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def build_target_regexp_map
|
16
|
+
{}.tap do |regexp_map|
|
17
|
+
target_pattern_map.each do |target, pattern_replacement_map|
|
18
|
+
regexp_map[target] =
|
19
|
+
convert_patterns_to_regexps pattern_replacement_map
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def convert_patterns_to_regexps(pattern_replacement_map)
|
25
|
+
{}.tap do |regexp_replacement_map|
|
26
|
+
pattern_replacement_map.each do |pattern, replacement|
|
27
|
+
regexp_replacement_map[Regexp.new(pattern)] = replacement
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module EmbeddableContent
|
2
|
+
class TreeBasedNodeProcessor < EmbeddableContent::RecordNodeProcessor
|
3
|
+
EMBBEDER_TAG_TREE_ID_ATTRIBUTE = 'data-tree-ref-id'.freeze
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
def node_should_be_replaced?
|
8
|
+
super && tag_references_current_tree?
|
9
|
+
end
|
10
|
+
|
11
|
+
def tag_references_current_tree?
|
12
|
+
embedded_tag_tree_id == tree_embedder_tag_id
|
13
|
+
end
|
14
|
+
|
15
|
+
def embedded_tag_tree_id
|
16
|
+
node[EMBBEDER_TAG_TREE_ID_ATTRIBUTE]
|
17
|
+
end
|
18
|
+
|
19
|
+
def tree_embedder_tag_id
|
20
|
+
tree_node&.embedder_tag_id
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module EmbeddableContent
|
2
|
+
module VideoLinks
|
3
|
+
class NodeProcessor < EmbeddableContent::VisualElementNodeProcessor
|
4
|
+
include VimeoPlayerSettings
|
5
|
+
|
6
|
+
delegate :url, to: :record
|
7
|
+
|
8
|
+
def video_player
|
9
|
+
case url
|
10
|
+
when VIMEO_URL_REGEX then :vimeo_player
|
11
|
+
else raise "Unrecognized video player for URL: #{url}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# TODO: make this a field on the embed
|
16
|
+
PLAYER_PRESENTATION_TARGETS =
|
17
|
+
%i[cc kiddom schoology cms exported qti web].freeze
|
18
|
+
DESCRIPTION_PRESENTATION_TARGETS = %i[editable print].freeze
|
19
|
+
|
20
|
+
def presentation
|
21
|
+
case target
|
22
|
+
when *PLAYER_PRESENTATION_TARGETS then :video_player
|
23
|
+
when *DESCRIPTION_PRESENTATION_TARGETS then :description
|
24
|
+
else raise "Undefined video presentation for target: #{target}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# TODO: make this a field on the embed
|
29
|
+
CAPTIONED_TARGETS =
|
30
|
+
%i[cc kiddom schoology cms qti web].freeze
|
31
|
+
UNCAPTIONED_TARGETS = %i[editable exported print].freeze
|
32
|
+
|
33
|
+
def display_caption?
|
34
|
+
case target
|
35
|
+
when *CAPTIONED_TARGETS then true
|
36
|
+
when *UNCAPTIONED_TARGETS then false
|
37
|
+
else raise "Undefined caption status for target: #{target}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def video_availability_text
|
42
|
+
"Video '#{title}' available here: #{url}."
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module EmbeddableContent
|
2
|
+
module VideoLinks
|
3
|
+
module VimeoPlayerSettings
|
4
|
+
VIMEO_URL_REGEX = %r{\Ahttps:\/\/player\.vimeo\.com\/video\/\d+\z}.freeze
|
5
|
+
DEFAULT_VIMEO_ATTRIBUTES = {
|
6
|
+
width: '640',
|
7
|
+
height: '360',
|
8
|
+
frameborder: '0',
|
9
|
+
allowfullscreen: 'true',
|
10
|
+
mozillaallowfullscreen: 'true',
|
11
|
+
safariallowfullscreen: 'true'
|
12
|
+
}.freeze
|
13
|
+
|
14
|
+
def vimeo_attributes
|
15
|
+
DEFAULT_VIMEO_ATTRIBUTES.merge src: url
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module EmbeddableContent
|
2
|
+
class VisualElementNodeProcessor < RecordNodeProcessor
|
3
|
+
include TemplateBased
|
4
|
+
|
5
|
+
delegate :attribution, :description, :long_description, :title, :caption,
|
6
|
+
to: :record
|
7
|
+
|
8
|
+
MISSING_LABEL_TEXT = ''.freeze
|
9
|
+
def label_text
|
10
|
+
caption.presence || MISSING_LABEL_TEXT
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/app/views/.keep
ADDED
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/desmos_files/applet'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/desmos_files/applet'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/desmos_files/description'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/desmos_files/applet'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/desmos_files/applet'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/desmos_files/description'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/desmos_files/applet'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/desmos_files/applet'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/desmos_files/applet'
|
@@ -0,0 +1,11 @@
|
|
1
|
+
ruby:
|
2
|
+
manager = @template_manager
|
3
|
+
node_processor = manager.node_processor
|
4
|
+
node_attrs = manager.node_attrs
|
5
|
+
target_attrs = manager.target_attrs
|
6
|
+
record = manager.record
|
7
|
+
data_attrs = { 'data-parameters': node_processor.data_parameters }
|
8
|
+
|
9
|
+
div *node_attrs
|
10
|
+
div.ggb-base-64-data *data_attrs
|
11
|
+
div.ggb-applet-container *target_attrs
|
@@ -0,0 +1,9 @@
|
|
1
|
+
ruby:
|
2
|
+
manager = @template_manager
|
3
|
+
node_attrs = manager.node_attrs
|
4
|
+
record = manager.record
|
5
|
+
title = record.title
|
6
|
+
applet_url = record.applet_url
|
7
|
+
|
8
|
+
span.embedded-content-described *node_attrs
|
9
|
+
| The Geogebra applet '#{title}' is available here: #{applet_url}.
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/geogebra_files/applet'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/geogebra_files/applet'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/geogebra_files/description'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/geogebra_files/applet'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/geogebra_files/applet'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/geogebra_files/description'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/geogebra_files/applet'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/geogebra_files/applet'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/geogebra_files/applet'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
ruby:
|
2
|
+
manager = @template_manager
|
3
|
+
node_attrs = manager.node_attrs
|
4
|
+
node_processor = manager.node_processor
|
5
|
+
data_rows = node_processor.data_rows
|
6
|
+
|
7
|
+
div *node_attrs
|
8
|
+
table
|
9
|
+
tbody
|
10
|
+
- data_rows.each do |data_row|
|
11
|
+
tr
|
12
|
+
- data_row.each do |data_val|
|
13
|
+
td = data_val
|
14
|
+
p
|
15
|
+
p
|
16
|
+
br
|
@@ -0,0 +1,9 @@
|
|
1
|
+
ruby:
|
2
|
+
manager = @template_manager
|
3
|
+
node_processor = manager.node_processor
|
4
|
+
modal_dialog = node_processor.modal_dialog
|
5
|
+
close_button_attrs = modal_dialog.close_button_attrs
|
6
|
+
|
7
|
+
button.js-modal-close.im-c-modal__close
|
8
|
+
svg.im-c-icon.im-c-icon--close *close_button_attrs
|
9
|
+
path d = 'M1162.5,198.75,1001.25,37.5,600,438.75,198.75,37.5,37.5,198.75,438.75,600,37.5,1001.25,198.75,1162.5,600,761.25l401.25,401.25,161.25-161.25L761.25,600Z'
|
@@ -0,0 +1,9 @@
|
|
1
|
+
ruby:
|
2
|
+
manager = @template_manager
|
3
|
+
node_processor = manager.node_processor
|
4
|
+
modal_dialog = node_processor.modal_dialog
|
5
|
+
target_div_id = modal_dialog.target_div_id
|
6
|
+
|
7
|
+
button.im-c-button.im-c-modal-trigger data-modal-target = target_div_id
|
8
|
+
p
|
9
|
+
img src = asset_path('expand.png') alt='Expand image' title='Expand image'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
ruby:
|
2
|
+
manager = @template_manager
|
3
|
+
node_attrs = manager.node_attrs
|
4
|
+
node_processor = manager.node_processor
|
5
|
+
img_tag_attrs = node_processor.img_tag_attrs
|
6
|
+
figure_tag = node_processor.figure_tag
|
7
|
+
label_text = node_processor.label_text
|
8
|
+
|
9
|
+
*{ tag: figure_tag } *node_attrs
|
10
|
+
span.c-figure__label
|
11
|
+
== label_text
|
12
|
+
img *img_tag_attrs
|
13
|
+
= render 'embeddable_content/replacements/images/modal_dialog'
|
14
|
+
figcaption.c-figcaption
|
@@ -0,0 +1,30 @@
|
|
1
|
+
ruby:
|
2
|
+
manager = @template_manager
|
3
|
+
node_processor = manager.node_processor
|
4
|
+
modal_dialog = node_processor.modal_dialog
|
5
|
+
img_tag_attrs = modal_dialog.img_tag_attrs
|
6
|
+
description = modal_dialog.description
|
7
|
+
described_by_id = modal_dialog.described_by_id
|
8
|
+
caption = modal_dialog.caption
|
9
|
+
caption_id = modal_dialog.caption_id
|
10
|
+
attribution = modal_dialog.attribution
|
11
|
+
attribution_id = modal_dialog.attribution_id
|
12
|
+
|
13
|
+
div.im-c-modal__content.im-c-content
|
14
|
+
div id = described_by_id
|
15
|
+
- if description.present?
|
16
|
+
p
|
17
|
+
strong> Description:
|
18
|
+
= description
|
19
|
+
img *img_tag_attrs
|
20
|
+
- if caption.present?
|
21
|
+
p id = caption_id
|
22
|
+
strong> Caption:
|
23
|
+
== caption
|
24
|
+
- if attribution.present?
|
25
|
+
p id = attribution_id
|
26
|
+
strong> Attribution:
|
27
|
+
=> modal_dialog.attribution_display_text
|
28
|
+
a href = attribution.original_url
|
29
|
+
| Source
|
30
|
+
| .
|
@@ -0,0 +1,17 @@
|
|
1
|
+
ruby:
|
2
|
+
manager = @template_manager
|
3
|
+
node_processor = manager.node_processor
|
4
|
+
|
5
|
+
return unless node_processor.display_modal_dialog?
|
6
|
+
|
7
|
+
modal_dialog = node_processor.modal_dialog
|
8
|
+
container_attrs = modal_dialog.container_attrs
|
9
|
+
target_attrs = modal_dialog.target_attrs
|
10
|
+
|
11
|
+
span.embedded-modal-dialog
|
12
|
+
= render 'embeddable_content/replacements/images/button_open'
|
13
|
+
div.im-c-modal *target_attrs
|
14
|
+
div.js-modal-close.im-c-modal__overlay
|
15
|
+
div.im-c-modal__container *container_attrs
|
16
|
+
= render 'embeddable_content/replacements/images/button_close'
|
17
|
+
= render 'embeddable_content/replacements/images/modal_content'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
ruby:
|
2
|
+
manager = @template_manager
|
3
|
+
node_processor = manager.node_processor
|
4
|
+
record = manager.record
|
5
|
+
caption = record.caption
|
6
|
+
img_tag_attrs = node_processor.img_tag_attrs
|
7
|
+
|
8
|
+
div
|
9
|
+
- if caption.present?
|
10
|
+
span.embedded-image-caption
|
11
|
+
== caption
|
12
|
+
img *img_tag_attrs
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/images/image_embed'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/images/image_embed'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/images/image_embed'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
ruby:
|
2
|
+
manager = @template_manager
|
3
|
+
node_processor = manager.node_processor
|
4
|
+
record = manager.record
|
5
|
+
caption = record.caption
|
6
|
+
img_tag_attrs = node_processor.img_tag_attrs
|
7
|
+
|
8
|
+
div
|
9
|
+
- if caption.present?
|
10
|
+
span.embedded-image-caption
|
11
|
+
== caption
|
12
|
+
img *img_tag_attrs
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/images/image_embed'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
ruby:
|
2
|
+
manager = @template_manager
|
3
|
+
node_processor = manager.node_processor
|
4
|
+
record = manager.record
|
5
|
+
caption = record.caption
|
6
|
+
img_tag_attrs = node_processor.img_tag_attrs
|
7
|
+
|
8
|
+
div
|
9
|
+
img *img_tag_attrs
|
10
|
+
- if caption.present?
|
11
|
+
span.embedded-image-caption
|
12
|
+
== caption
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/images/image_embed'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/presentation_tags/default'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
ruby:
|
2
|
+
manager = @template_manager
|
3
|
+
error = manager.error
|
4
|
+
node = manager.node
|
5
|
+
backtrace_lines = manager.selected_backtrace_lines
|
6
|
+
|
7
|
+
div.embedded-content-warning
|
8
|
+
= "Unable to process #{node}"
|
9
|
+
span.embedded-content-error-backtrace
|
10
|
+
= error.message
|
11
|
+
= "\nBacktrace:\n"
|
12
|
+
= backtrace_lines
|
@@ -0,0 +1,13 @@
|
|
1
|
+
ruby:
|
2
|
+
manager = @template_manager
|
3
|
+
node_processor = manager.node_processor
|
4
|
+
node_attrs = manager.node_attrs
|
5
|
+
presentation = node_processor.presentation
|
6
|
+
|
7
|
+
figure *node_attrs
|
8
|
+
span.c-figure__label
|
9
|
+
= node_processor.label_text
|
10
|
+
= render "embeddable_content/replacements/video_links/#{presentation}"
|
11
|
+
figcaption.c-figcaption
|
12
|
+
- if node_processor.display_caption?
|
13
|
+
= render 'embeddable_content/replacements/video_links/caption'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/video_links/video_embed'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/video_links/video_embed'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/video_links/video_embed'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/video_links/video_embed'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/video_links/video_embed'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/video_links/video_embed'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/video_links/video_embed'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/video_links/video_embed'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/video_links/video_embed'
|
@@ -0,0 +1,13 @@
|
|
1
|
+
ruby:
|
2
|
+
manager = @template_manager
|
3
|
+
node_attrs = manager.node_attrs
|
4
|
+
record = manager.record
|
5
|
+
target_attrs = manager.target_attrs
|
6
|
+
node_id = manager.node_id
|
7
|
+
widget_attrs = node_attrs.merge 'data-record-title': record.title
|
8
|
+
script_body = record.interpolated_script_body node_id
|
9
|
+
|
10
|
+
div *widget_attrs
|
11
|
+
div.widget-target-node *target_attrs
|
12
|
+
script
|
13
|
+
== script_body
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/widget_files/widget_script'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/widget_files/widget_script'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/widget_files/widget_omitted'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/widget_files/widget_script'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/widget_files/widget_script'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/widget_files/widget_omitted'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/widget_files/widget_script'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/widget_files/widget_script'
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'embeddable_content/replacements/widget_files/widget_script'
|
data/bin/rails
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This command will automatically be run when you run "rails" with Rails gems
|
3
|
+
# installed from the root of your application.
|
4
|
+
|
5
|
+
ENGINE_ROOT = File.expand_path('..', __dir__)
|
6
|
+
ENGINE_PATH = File.expand_path('../lib/embeddable_content/engine', __dir__)
|
7
|
+
APP_PATH = File.expand_path('../spec/dummy/config/application', __dir__)
|
8
|
+
|
9
|
+
# Set up gems listed in the Gemfile.
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
|
11
|
+
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
|
12
|
+
|
13
|
+
require "rails"
|
14
|
+
# Pick the frameworks you want:
|
15
|
+
require "active_model/railtie"
|
16
|
+
require "active_job/railtie"
|
17
|
+
require "active_record/railtie"
|
18
|
+
require "active_storage/engine"
|
19
|
+
require "action_controller/railtie"
|
20
|
+
require "action_mailer/railtie"
|
21
|
+
require "action_view/railtie"
|
22
|
+
require "action_cable/engine"
|
23
|
+
require "sprockets/railtie"
|
24
|
+
# require "rails/test_unit/railtie"
|
25
|
+
require 'rails/engine/commands'
|