embeddable_content 0.1.19

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.
Files changed (141) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.rubocop.yml +62 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +15 -0
  6. data/MIT-LICENSE +20 -0
  7. data/README.md +49 -0
  8. data/Rakefile +22 -0
  9. data/app/assets/config/embeddable_content_manifest.js +0 -0
  10. data/app/assets/images/embeddable_content/.keep +0 -0
  11. data/app/assets/javascripts/desmos/support.js +12 -0
  12. data/app/assets/javascripts/geogebra/support.js +14 -0
  13. data/app/assets/stylesheets/embeddable_content/.keep +0 -0
  14. data/app/controllers/.keep +0 -0
  15. data/app/controllers/concerns/cms/embeddable_content_controller.rb +14 -0
  16. data/app/controllers/concerns/embeddable_content_controller.rb +85 -0
  17. data/app/helpers/.keep +0 -0
  18. data/app/mailers/.keep +0 -0
  19. data/app/models/.keep +0 -0
  20. data/app/models/concerns/provides_embeddable_content.rb +59 -0
  21. data/app/models/embeddable_model_config.rb +55 -0
  22. data/app/models/embedder_config.rb +45 -0
  23. data/app/models/embedding.rb +25 -0
  24. data/app/services/embeddable_content/desmos_files/doc_processor.rb +5 -0
  25. data/app/services/embeddable_content/desmos_files/node_processor.rb +7 -0
  26. data/app/services/embeddable_content/doc_processor.rb +63 -0
  27. data/app/services/embeddable_content/embedded_tag_info.rb +50 -0
  28. data/app/services/embeddable_content/embedded_tags.rb +30 -0
  29. data/app/services/embeddable_content/embedder.rb +89 -0
  30. data/app/services/embeddable_content/embedder_base.rb +68 -0
  31. data/app/services/embeddable_content/fragment_embedder.rb +30 -0
  32. data/app/services/embeddable_content/geogebra_files/doc_processor.rb +5 -0
  33. data/app/services/embeddable_content/geogebra_files/node_processor.rb +11 -0
  34. data/app/services/embeddable_content/html_tags/doc_processor.rb +11 -0
  35. data/app/services/embeddable_content/html_tags/node_processor.rb +26 -0
  36. data/app/services/embeddable_content/images/attributions_processor.rb +60 -0
  37. data/app/services/embeddable_content/images/doc_processor.rb +54 -0
  38. data/app/services/embeddable_content/images/image_downloader.rb +60 -0
  39. data/app/services/embeddable_content/images/img_tag_attributes.rb +125 -0
  40. data/app/services/embeddable_content/images/modal_dialog.rb +74 -0
  41. data/app/services/embeddable_content/images/node_processor.rb +91 -0
  42. data/app/services/embeddable_content/images/shared.rb +11 -0
  43. data/app/services/embeddable_content/node_processor.rb +75 -0
  44. data/app/services/embeddable_content/presentation_tags/doc_processor.rb +5 -0
  45. data/app/services/embeddable_content/presentation_tags/node_processor.rb +35 -0
  46. data/app/services/embeddable_content/record_node_processor.rb +90 -0
  47. data/app/services/embeddable_content/replacement_template_manager.rb +21 -0
  48. data/app/services/embeddable_content/sad_embedded_tags.rb +29 -0
  49. data/app/services/embeddable_content/scrubber.rb +32 -0
  50. data/app/services/embeddable_content/template_based.rb +19 -0
  51. data/app/services/embeddable_content/template_manager.rb +100 -0
  52. data/app/services/embeddable_content/tex/base_renderer.rb +33 -0
  53. data/app/services/embeddable_content/tex/canvas_renderer.rb +15 -0
  54. data/app/services/embeddable_content/tex/doc_processor.rb +55 -0
  55. data/app/services/embeddable_content/tex/mathjax_renderer.rb +11 -0
  56. data/app/services/embeddable_content/tex/mml_renderer.rb +11 -0
  57. data/app/services/embeddable_content/tex/schoology_string_renderer.rb +15 -0
  58. data/app/services/embeddable_content/tex/svg_renderer.rb +11 -0
  59. data/app/services/embeddable_content/token_replacement_map.rb +32 -0
  60. data/app/services/embeddable_content/tree_based_node_processor.rb +23 -0
  61. data/app/services/embeddable_content/video_links/doc_processor.rb +5 -0
  62. data/app/services/embeddable_content/video_links/node_processor.rb +46 -0
  63. data/app/services/embeddable_content/video_links/vimeo_player_settings.rb +19 -0
  64. data/app/services/embeddable_content/visual_element_node_processor.rb +13 -0
  65. data/app/services/embeddable_content/widget_files/doc_processor.rb +5 -0
  66. data/app/services/embeddable_content/widget_files/node_processor.rb +7 -0
  67. data/app/views/.keep +0 -0
  68. data/app/views/embeddable_content/replacements/desmos_files/_applet.html.slim +8 -0
  69. data/app/views/embeddable_content/replacements/desmos_files/_description.html.slim +6 -0
  70. data/app/views/embeddable_content/replacements/desmos_files/cc.html.slim +1 -0
  71. data/app/views/embeddable_content/replacements/desmos_files/cms.html.slim +1 -0
  72. data/app/views/embeddable_content/replacements/desmos_files/editable.html.slim +1 -0
  73. data/app/views/embeddable_content/replacements/desmos_files/exported.html.slim +1 -0
  74. data/app/views/embeddable_content/replacements/desmos_files/kiddom.html.slim +1 -0
  75. data/app/views/embeddable_content/replacements/desmos_files/print.html.slim +1 -0
  76. data/app/views/embeddable_content/replacements/desmos_files/qti.html.slim +1 -0
  77. data/app/views/embeddable_content/replacements/desmos_files/schoology.html.slim +1 -0
  78. data/app/views/embeddable_content/replacements/desmos_files/web.html.slim +1 -0
  79. data/app/views/embeddable_content/replacements/geogebra_files/_applet.html.slim +11 -0
  80. data/app/views/embeddable_content/replacements/geogebra_files/_description.html.slim +9 -0
  81. data/app/views/embeddable_content/replacements/geogebra_files/cc.html.slim +1 -0
  82. data/app/views/embeddable_content/replacements/geogebra_files/cms.html.slim +1 -0
  83. data/app/views/embeddable_content/replacements/geogebra_files/editable.html.slim +1 -0
  84. data/app/views/embeddable_content/replacements/geogebra_files/exported.html.slim +1 -0
  85. data/app/views/embeddable_content/replacements/geogebra_files/kiddom.html.slim +1 -0
  86. data/app/views/embeddable_content/replacements/geogebra_files/print.html.slim +1 -0
  87. data/app/views/embeddable_content/replacements/geogebra_files/qti.html.slim +1 -0
  88. data/app/views/embeddable_content/replacements/geogebra_files/schoology.html.slim +1 -0
  89. data/app/views/embeddable_content/replacements/geogebra_files/web.html.slim +1 -0
  90. data/app/views/embeddable_content/replacements/html_tags/editable.html.slim +16 -0
  91. data/app/views/embeddable_content/replacements/images/_button_close.html.slim +9 -0
  92. data/app/views/embeddable_content/replacements/images/_button_open.html.slim +9 -0
  93. data/app/views/embeddable_content/replacements/images/_image_embed.html.slim +14 -0
  94. data/app/views/embeddable_content/replacements/images/_modal_content.html.slim +30 -0
  95. data/app/views/embeddable_content/replacements/images/_modal_dialog.html.slim +17 -0
  96. data/app/views/embeddable_content/replacements/images/cc.html.slim +12 -0
  97. data/app/views/embeddable_content/replacements/images/cms.html.slim +1 -0
  98. data/app/views/embeddable_content/replacements/images/editable.html.slim +1 -0
  99. data/app/views/embeddable_content/replacements/images/exported.html.slim +1 -0
  100. data/app/views/embeddable_content/replacements/images/kiddom.html.slim +12 -0
  101. data/app/views/embeddable_content/replacements/images/print.html.slim +1 -0
  102. data/app/views/embeddable_content/replacements/images/qti.html.slim +6 -0
  103. data/app/views/embeddable_content/replacements/images/schoology.html.slim +12 -0
  104. data/app/views/embeddable_content/replacements/images/web.html.slim +1 -0
  105. data/app/views/embeddable_content/replacements/presentation_tags/_default.html.slim +6 -0
  106. data/app/views/embeddable_content/replacements/presentation_tags/print.html.slim +1 -0
  107. data/app/views/embeddable_content/replacements/status/warning.html.slim +12 -0
  108. data/app/views/embeddable_content/replacements/video_links/_caption.html.slim +13 -0
  109. data/app/views/embeddable_content/replacements/video_links/_description.html.slim +12 -0
  110. data/app/views/embeddable_content/replacements/video_links/_video_embed.html.slim +13 -0
  111. data/app/views/embeddable_content/replacements/video_links/_video_player.html.slim +6 -0
  112. data/app/views/embeddable_content/replacements/video_links/_vimeo_player.html.slim +6 -0
  113. data/app/views/embeddable_content/replacements/video_links/cc.html.slim +1 -0
  114. data/app/views/embeddable_content/replacements/video_links/cms.html.slim +1 -0
  115. data/app/views/embeddable_content/replacements/video_links/editable.html.slim +1 -0
  116. data/app/views/embeddable_content/replacements/video_links/exported.html.slim +1 -0
  117. data/app/views/embeddable_content/replacements/video_links/kiddom.html.slim +1 -0
  118. data/app/views/embeddable_content/replacements/video_links/print.html.slim +1 -0
  119. data/app/views/embeddable_content/replacements/video_links/qti.html.slim +1 -0
  120. data/app/views/embeddable_content/replacements/video_links/schoology.html.slim +1 -0
  121. data/app/views/embeddable_content/replacements/video_links/web.html.slim +1 -0
  122. data/app/views/embeddable_content/replacements/widget_files/_widget_omitted.html.slim +8 -0
  123. data/app/views/embeddable_content/replacements/widget_files/_widget_script.html.slim +13 -0
  124. data/app/views/embeddable_content/replacements/widget_files/cc.html.slim +1 -0
  125. data/app/views/embeddable_content/replacements/widget_files/cms.html.slim +1 -0
  126. data/app/views/embeddable_content/replacements/widget_files/editable.html.slim +1 -0
  127. data/app/views/embeddable_content/replacements/widget_files/exported.html.slim +1 -0
  128. data/app/views/embeddable_content/replacements/widget_files/kiddom.html.slim +1 -0
  129. data/app/views/embeddable_content/replacements/widget_files/print.html.slim +1 -0
  130. data/app/views/embeddable_content/replacements/widget_files/qti.html.slim +1 -0
  131. data/app/views/embeddable_content/replacements/widget_files/schoology.html.slim +1 -0
  132. data/app/views/embeddable_content/replacements/widget_files/web.html.slim +1 -0
  133. data/bin/rails +25 -0
  134. data/config/initializers/embeddable_content.rb +3 -0
  135. data/config/routes.rb +2 -0
  136. data/embeddable_content.gemspec +48 -0
  137. data/lib/embeddable_content/engine.rb +8 -0
  138. data/lib/embeddable_content/version.rb +3 -0
  139. data/lib/embeddable_content.rb +3 -0
  140. data/lib/tasks/embeddable_content_tasks.rake +4 -0
  141. 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,5 @@
1
+ module EmbeddableContent
2
+ module VideoLinks
3
+ class DocProcessor < EmbeddableContent::DocProcessor; end
4
+ end
5
+ 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
@@ -0,0 +1,5 @@
1
+ module EmbeddableContent
2
+ module WidgetFiles
3
+ class DocProcessor < EmbeddableContent::DocProcessor; end
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ module EmbeddableContent
2
+ module WidgetFiles
3
+ class NodeProcessor < EmbeddableContent::RecordNodeProcessor
4
+ include TemplateBased
5
+ end
6
+ end
7
+ end
data/app/views/.keep ADDED
File without changes
@@ -0,0 +1,8 @@
1
+ ruby:
2
+ manager = @template_manager
3
+ node_attrs = manager.node_attrs
4
+ record = manager.record
5
+ applet_attrs = node_attrs.merge 'data-state': record.state
6
+
7
+ div *applet_attrs
8
+ div.desmos-calculator
@@ -0,0 +1,6 @@
1
+ ruby:
2
+ manager = @template_manager
3
+ node_attrs = manager.node_attrs
4
+
5
+ span.embedded-content-described *node_attrs
6
+ | Desmos applet is available in the digital version of the materials.
@@ -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,6 @@
1
+ ruby:
2
+ manager = @template_manager
3
+ node_processor = manager.node_processor
4
+ img_tag_attrs = node_processor.img_tag_attrs
5
+
6
+ img *img_tag_attrs
@@ -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,6 @@
1
+ ruby:
2
+ manager = @template_manager
3
+ node_attrs = manager.node_attrs
4
+ node_processor = manager.node_processor
5
+
6
+ div *node_attrs
@@ -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
+ title = node_processor.title
5
+ url = node_processor.url
6
+
7
+ | Video
8
+ em<>
9
+ = title
10
+ | available at
11
+ a< href = url
12
+ = url
13
+ | .
@@ -0,0 +1,12 @@
1
+ ruby:
2
+ manager = @template_manager
3
+ node_processor = manager.node_processor
4
+ title = node_processor.title
5
+ url = node_processor.url
6
+
7
+ span
8
+ | Video
9
+ =<> "'#{title}'"
10
+ | available here:
11
+ =< url
12
+ | .
@@ -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,6 @@
1
+ ruby:
2
+ manager = @template_manager
3
+ node_processor = manager.node_processor
4
+ video_player = node_processor.video_player
5
+
6
+ = render "embeddable_content/replacements/video_links/#{video_player}"
@@ -0,0 +1,6 @@
1
+ ruby:
2
+ manager = @template_manager
3
+ node_processor = manager.node_processor
4
+ iframe_attrs = node_processor.vimeo_attributes
5
+
6
+ iframe *iframe_attrs
@@ -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,8 @@
1
+ ruby:
2
+ manager = @template_manager
3
+ node_attrs = manager.node_attrs
4
+ record = manager.record
5
+ widget_attrs = node_attrs.merge 'data-record-title': record.title
6
+
7
+ span.embedded-content-omitted *widget_attrs
8
+ | Applet appears here.
@@ -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'