card-mod-tinymce_editor 0.14.1 → 0.15.0

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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/assets/script/image_editor.js.coffee +59 -0
  3. data/assets/script/link_editor.js.coffee +61 -0
  4. data/assets/script/nest_editor.js.coffee +171 -0
  5. data/assets/script/nest_editor_name.js.coffee +115 -0
  6. data/assets/script/nest_editor_options.js.coffee +197 -0
  7. data/assets/script/nest_editor_rules.js.coffee +3 -0
  8. data/assets/script/{script_tinymce_config.js.coffee → tinymce_config.js.coffee} +3 -6
  9. data/assets/style/nest_editor.scss +55 -0
  10. data/data/files/mod_tinymce_editor_script_asset_output/file.js +37 -0
  11. data/data/files/mod_tinymce_editor_script_local_machine_output/file.js +82 -0
  12. data/{db/migrate_core_cards/20171113233151_update_tinymce_config.rb → data/real.yml} +8 -15
  13. data/lib/card/reference/nest_parser.rb +27 -11
  14. data/locales/en.yml +9 -0
  15. data/set/all/reference_editor/_image_nest_editor.haml +2 -0
  16. data/set/all/reference_editor/_link_editor.haml +8 -6
  17. data/set/all/reference_editor/_nest_editor.haml +13 -15
  18. data/set/all/reference_editor/link_editor.rb +4 -2
  19. data/set/all/reference_editor/nest_editor/_basics.haml +5 -0
  20. data/set/all/reference_editor/nest_editor/_image_find.haml +7 -0
  21. data/set/all/reference_editor/nest_editor/_image_options.haml +8 -0
  22. data/set/all/reference_editor/nest_editor/_options.haml +18 -10
  23. data/set/all/reference_editor/nest_editor/_options_select.haml +6 -5
  24. data/set/all/reference_editor/nest_editor/_options_select_row.haml +7 -8
  25. data/set/all/reference_editor/nest_editor/nest_editor_options.rb +95 -0
  26. data/set/all/reference_editor/nest_editor/nest_editor_tabs.rb +59 -0
  27. data/set/all/reference_editor/nest_editor.rb +16 -80
  28. data/set/all/reference_editor/nest_image.rb +9 -8
  29. data/set/all/reference_editor/reference_editor.haml +11 -9
  30. data/set/all/reference_editor.rb +1 -1
  31. data/set/all/tinymce_editor.rb +5 -1
  32. metadata +26 -13
  33. data/db/migrate_core_cards/20160804112560_add_tinymce_cards.rb +0 -42
  34. data/db/migrate_core_cards/20190306172623_update_tinymce_config_to_v5.rb +0 -23
  35. data/db/migrate_core_cards/20190306172890_tinymce_add_nest_to_toolbar.rb +0 -11
  36. data/set/all/reference_editor/nest_editor/_help.haml +0 -7
@@ -1,22 +1,15 @@
1
- # -*- encoding : utf-8 -*-
2
-
3
- class UpdateTinymceConfig < Cardio::Migration::Core
4
- TINYMCE_CONF = <<-JSON.strip_heredoc
1
+ - :name: "*tinyMCE"
2
+ :type: :json
3
+ :codename: tiny_mce
4
+ :content: |
5
5
  {
6
- "theme": "modern",
6
+ "theme": "silver",
7
7
  "menubar": "edit view insert format table",
8
- "plugins": "autoresize code lists hr link autolink table contextmenu textcolor colorpicker",
9
- "toolbar1": "formatselect | bold italic strikethrough forecolor backcolor | link | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat",
8
+ "plugins": "autoresize code lists hr link autolink table",
9
+ "toolbar1": "formatselect | bold italic strikethrough forecolor backcolor | deckolink nest | | numlist bullist outdent indent | removeformat",
10
10
  "width":"100%",
11
11
  "auto_resize":true,
12
12
  "autoresize_max_height": 500,
13
13
  "relative_urls":false,
14
14
  "extended_valid_elements":"a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]"
15
- }
16
- JSON
17
-
18
- def up
19
- ensure_card :tiny_mce,
20
- content: TINYMCE_CONF
21
- end
22
- end
15
+ }
@@ -5,30 +5,44 @@ class Card
5
5
  class NestParser
6
6
  NEST_OPTIONS = %i[view title show hide wrap help variant size params].freeze
7
7
 
8
- attr_reader :name, :options, :item_options, :raw
8
+ attr_reader :name, :view, :options, :item_options, :raw
9
9
 
10
- def self.new nest_string, default_view, default_item_view
10
+ def self.new nest_string
11
11
  return super if nest_string.is_a? String
12
12
 
13
13
  OpenStruct.new(name: "", field?: true,
14
- options: [[:view, default_view]], item_options: [],
15
- raw: "{{+|view: #{default_view}}}")
14
+ options: [], item_options: [],
15
+ raw: "{{+ }}")
16
16
  end
17
17
 
18
18
  def self.new_image name
19
- OpenStruct.new(name: name, field?: true,
20
- options: [%i[view content], %i[size medium]],
19
+ OpenStruct.new(name: name, field?: false,
20
+ view: "content",
21
+ options: [%i[size medium]],
21
22
  item_options: [],
22
- raw: "{{+#{name}|view: content; size: medium}}")
23
+ raw: "{{#{name}|view: content; size: medium}}")
24
+ end
25
+
26
+ def empty?
27
+ @raw.empty? || @raw =~ /\{\{+?\s*\|?\s*\}\}/
23
28
  end
24
29
 
25
30
  def field?
26
31
  @field
27
32
  end
28
33
 
29
- def initialize nest_string, _default_view, default_item_view
34
+ def field!
35
+ @raw.sub!(/\{\{\s*\+?/, "{{+")
36
+ @field = true
37
+ end
38
+
39
+ def option_value name
40
+ options.find { |(key, _value)| key == name }&.second
41
+ end
42
+
43
+ def initialize nest_string
30
44
  @raw = nest_string
31
- @default_item_view = default_item_view
45
+ # @default_item_view = default_item_view
32
46
  nest = Card::Content::Chunk::Nest.new nest_string, nil
33
47
  init_name nest.name
34
48
  extract_item_options nest.options
@@ -42,10 +56,12 @@ class Card
42
56
  @name = @field ? name.to_s[1..-1] : name
43
57
  end
44
58
 
45
- def extract_options options
59
+ def extract_options options, item_options=false
46
60
  applicable_options(options).each_with_object([]) do |key, res|
47
61
  if key.in? %i[show hide]
48
62
  res.concat viz_values(key, options)
63
+ elsif key == :view && !item_options
64
+ @view = options[key]
49
65
  else
50
66
  res << [key, options[key]]
51
67
  end
@@ -65,7 +81,7 @@ class Card
65
81
  item_options = options[:items]
66
82
  while item_options
67
83
  next_item_options = item_options[:items]
68
- @item_options << extract_options(item_options)
84
+ @item_options << extract_options(item_options, true)
69
85
  item_options = next_item_options
70
86
  end
71
87
  # @item_options << default_item_options
data/locales/en.yml ADDED
@@ -0,0 +1,9 @@
1
+ en:
2
+ tinymce_editor_nest_editor_card_help_text: Hello
3
+ tinymce_editor_nest_editor_card_help_title: Title
4
+ tinymce_editor_nest_editor_view_help_title: Hello
5
+ tinymce_editor_nest_editor_view_help_text: World
6
+ tinymce_editor_image_nest_editor_name_help_text: Hello
7
+ tinymce_editor_image_nest_editor_name_help_title: World
8
+ tinymce_editor_image_nest_editor_view_help_text: World
9
+ tinymce_editor_image_nest_editor_view_help_title: Hello
@@ -0,0 +1,2 @@
1
+
2
+ = image_nest_editor_tabs snippet
@@ -1,17 +1,19 @@
1
- .form-row.align-items-center.mb-4.ml-1
1
+ .row.align-items-center.mb-4.ms-1
2
2
  .col-9
3
3
  .input-group{class: [snippet.field? ? "show-prefix" : "hide-prefix"]}
4
- .input-group-prepend._field-indicator
5
- .input-group-text.text-muted
6
- +
7
- = text_field_tag "link_name", snippet.name, class: "form-control _link-target", placeholder: "URL or Card name"
4
+ .input-group-text.text-muted._field-indicator
5
+ +
6
+ = text_field_tag "link_name", snippet.name,
7
+ class: "form-control _link-target _autocomplete",
8
+ placeholder: "URL or Card name",
9
+ "data-options-card": [:all, :by_name].to_name
8
10
 
9
11
  .col-3
10
12
  = check_box_tag :field, "field", snippet.field?,
11
13
  class: "_link-field-toggle", id: "link-editor-field"
12
14
  %label.form-check-label{for: "link-editor-field"} field
13
15
 
14
- .form-row.align-items-center.mb-4.ml-1.mr-1
16
+ .row.align-items-center.mb-4.ms-1.me-1
15
17
  .col-12
16
18
  %label.form-check-label{for: "link_title"} Text to display
17
19
  = text_field_tag "link_title", snippet.title, class: "form-control _link-title"
@@ -1,17 +1,15 @@
1
- .form
2
- .form-row.align-items-center.mb-4.ml-1
3
- .col-9
4
- .input-group{class: [snippet.field? ? "show-prefix" : "hide-prefix"]}
5
- .input-group-prepend._field-indicator
6
- .input-group-text.text-muted
7
- +
8
- = text_field_tag "nest_name", snippet.name, class: "form-control _nest-name",
9
- "data-left-name" => card.name,
10
- "data-left-type" => card.left_type_for_nest_editor_set_selection,
11
- placeholder: "Card name"
12
- .col-3
13
- = check_box_tag :field, "field", snippet.field?,
14
- class: "_nest-field-toggle", id: "nest-editor-field"
15
- %label.form-check-label{for: "nest-editor-field"} field
1
+ .form-group
2
+ %label{:for => "nest_name"} Card
3
+ = help_link t(:tinymce_editor_nest_editor_card_help_text), t(:tinymce_editor_nest_editor_card_help_title)
4
+ .input-group{class: [snippet.field? ? "show-prefix" : "hide-prefix"]}
5
+ .input-group-text.text-muted._field-indicator
6
+ +
7
+ = text_field_tag "nest_name", snippet.name, class: "form-control _nest-name _autocomplete ",
8
+ "data-left-name" => card.name,
9
+ "data-left-type" => card.left_type_for_nest_editor_set_selection,
10
+ "data-options-card": [:all, :by_name].to_name
11
+ .input-group-text.btn.btn-secondary._nest-field-toggle
12
+ +
16
13
 
14
+ .mt-4
17
15
  = nest_editor_tabs
@@ -11,9 +11,11 @@ format :html do
11
11
  modal_link_editor
12
12
  end
13
13
 
14
- def link_editor editor_mode
14
+ def link_editor editor_mode
15
15
  @tm_snippet_editor_mode = editor_mode
16
- haml :reference_editor, ref_type: :link, editor_mode: @tm_snippet_editor_mode,
16
+ haml :reference_editor, title: "Link",
17
+ editor: :link,
18
+ ref_type: :link, editor_mode: @tm_snippet_editor_mode,
17
19
  apply_opts: link_apply_opts, snippet: link_snippet
18
20
  end
19
21
 
@@ -0,0 +1,5 @@
1
+ .form-group
2
+ %label View
3
+ = help_link t(:tinymce_editor_nest_editor_view_help_text), t(:tinymce_editor_nest_editor_view_help_title)
4
+ = nest_view_select snippet.view
5
+
@@ -0,0 +1,7 @@
1
+ .form-group
2
+ %label{:for => "nest_name"} Name
3
+ = help_link t(:tinymce_editor_image_nest_editor_name_help_text), t(:tinymce_editor_image_nest_editor_name_help_title)
4
+ = # autocomplete_field snippet.name, "image+*type+by name", "form-control _autocomplete _nest-name _image-name"
5
+ = select_tag "image-name-select", "",
6
+ class: "_image-card-select _image-name _no-select2-init",
7
+ "data-dropdown-parent": "true"
@@ -0,0 +1,8 @@
1
+ .form-group
2
+ %label View
3
+ = help_link t(:tinymce_editor_image_nest_editor_view_help_text), t(:tinymce_editor_image_nest_editor_view_help_title)
4
+ = image_view_select snippet.view
5
+
6
+ .form-group
7
+ %label Size
8
+ = image_size_select
@@ -1,12 +1,20 @@
1
- .options-container.p-2.border-bottom
2
- = haml_partial :options_select, template: false, level: 0, data: snippet.options
3
- - snippet.item_options.each_with_index do |options, i|
4
- .options-container.p-2.border-bottom._configure-items
5
- %h6
6
- = "#{'sub' * i} items"
7
- = haml_partial :options_select, template: false, level: i + 1, data: options
8
- .options-container.p-2.border-bottom._configure-items
9
- = button_tag "Configure #{'sub' * snippet.item_options.size}items", situation: "secondary", class: "_configure-items-button btn-sm"
10
- = haml_partial :options_select, template: true, level: snippet.item_options.size + 1, data: default_nest_editor_item_options
1
+ ._nest-options
2
+ .options-container
3
+ %label Options
4
+ = haml_partial :options_select, template: false, level: 0, data: snippet.options, view_selectable: false
5
+ - snippet.item_options.each_with_index do |options, i|
6
+ .options-container._configure-items
7
+ %label
8
+ = "#{'sub' * i} item options".strip.capitalize
9
+ = haml_partial :options_select, template: false, level: i + 1, data: options, view_selectable: true
10
+ .options-container._configure-items
11
+ = button_tag "Add #{'sub' * snippet.item_options.size}item options", situation: "secondary", class: "_configure-items-button btn-sm"
12
+ = haml_partial :options_select, template: true, level: snippet.item_options.size + 1, data: default_nest_editor_item_options, view_selectable: true
11
13
 
14
+ ._templates.d-none
15
+
16
+ = nest_option_value_default_template
17
+ = nest_size_select_template
18
+ = nest_view_select_template
19
+ = nest_show_and_hide_select_template
12
20
 
@@ -2,8 +2,9 @@
2
2
  - if data
3
3
  - data.each do |name, value|
4
4
  = haml_partial :options_select_row, template: false, name: name,
5
- level: level, value: value
6
- = haml_partial :options_select_row, template: false, name: nil, level: level,
7
- value: nil
8
- = haml_partial :options_select_row, template: true, name: nil, level: level,
9
- value: nil
5
+ level: level, value: value, view_selectable: view_selectable
6
+ = haml_partial :options_select_row, template: template, name: nil, level: level,
7
+ value: nil, view_selectable: view_selectable
8
+ - if !template
9
+ = haml_partial :options_select_row, template: true, name: nil, level: level,
10
+ value: nil, view_selectable: view_selectable
@@ -1,10 +1,9 @@
1
- .form-row._nest-option-row{class: [template && "_template"]}
2
- .col-6
3
- .input-group.input-group-sm.mb-2.mr-2.d-flex.flex-nowrap
4
- .input-group-prepend{class: [!name && "d-none"]}
5
- %button.btn.btn-secondary.input-group-text.p-1._nest-delete-option{:type => "button"}
6
- %small.text-muted
7
- = fa_icon :times
8
- = nest_option_name_select name, level
1
+ .row._nest-option-row{class: [template && "_template"]}
9
2
  .col-6
3
+ .input-group.mb-2.me-2.d-flex.flex-nowrap
4
+ %button.btn.btn-secondary.input-group-text.p-1._nest-delete-option{:type => "button", class: [!name && "d-none"]}
5
+ %small.text-muted
6
+ = fa_icon :times
7
+ = nest_option_name_select name, level, view_selectable, template
8
+ .col-6._nest-option-value-col
10
9
  = nest_option_value_select value
@@ -0,0 +1,95 @@
1
+ format :html do
2
+ def nest_option_classes
3
+ "form-control"
4
+ end
5
+
6
+ def nest_option_name_select selected=nil, level=0,
7
+ include_view_option=true, template=false
8
+ classes = "#{nest_option_classes} _nest-option-name"
9
+ classes += " _new-row" unless selected
10
+ classes += " _no-select2" if template
11
+ select_tag "nest_option_name_#{unique_id}",
12
+ nest_option_name_select_options(selected, level, include_view_option),
13
+ class: classes, id: nil, "data-placeholder": "Select option"
14
+ # id: nil ensures that select2 generates its own unique identifier
15
+ # that ensures that we can clone this tag without breaking select2
16
+ end
17
+
18
+ def nest_option_name_select_options selected, level, include_view_option=true
19
+ options = [""] + Card::Reference::NestParser::NEST_OPTIONS.dup
20
+ options.delete :view unless include_view_option
21
+ options_for_select(
22
+ options, disabled: nest_option_name_disabled(selected, level),
23
+ selected: selected
24
+ )
25
+ end
26
+
27
+ def nest_option_name_disabled selected, level
28
+ disabled = nest_option_name_disabled_options level
29
+ disabled = disabled&.map(&:first)
30
+ disabled&.delete selected if selected
31
+ disabled
32
+ end
33
+
34
+ def nest_option_name_disabled_options level
35
+ if level.zero?
36
+ nest_snippet.options
37
+ else
38
+ nest_snippet.item_options[level - 1] || default_nest_editor_item_options
39
+ end
40
+ end
41
+
42
+ def nest_view_select selected
43
+ select_tag :view, options_for_select(view_list.unshift(nil), selected: selected),
44
+ class: "tags _view-select _nest-option-value",
45
+ "data-placeholder": "Select view"
46
+ end
47
+
48
+ def image_view_select selected
49
+ select_tag :view, options_for_select(view_list.unshift(nil), selected: selected),
50
+ class: "tags _image-view-select",
51
+ "data-placeholder": "Select view"
52
+ end
53
+
54
+ def image_size_select
55
+ select_tag :size, size_select_options(:medium), class: "_image-size-select"
56
+ end
57
+
58
+ def nest_option_value_select value=nil
59
+ text_field_tag "value", value,
60
+ class: "_nest-option-value #{nest_option_classes}",
61
+ disabled: !value, id: nil
62
+ end
63
+
64
+ def nest_option_value_default_template
65
+ text_field_tag "value", nil,
66
+ class: "_nest-option-template-default _nest-option-value "\
67
+ "#{nest_option_classes}",
68
+ id: nil
69
+ end
70
+
71
+ def size_select_options selected=:medium
72
+ options_for_select(%w[icon small medium large original], selected: selected)
73
+ end
74
+
75
+ def nest_size_select_template
76
+ nest_option_value_select_tag :size, size_select_options
77
+ end
78
+
79
+ def nest_view_select_template
80
+ nest_option_value_select_tag :view, options_for_select(view_list)
81
+ end
82
+
83
+ def nest_show_and_hide_select_template
84
+ nest_option_value_select_tag %i[show hide], options_for_select(all_views)
85
+ end
86
+
87
+ def nest_option_value_select_tag option_names, options
88
+ wrap_classes =
89
+ Array.wrap(option_names).map { |name| "_nest-option-template-#{name}" }.join " "
90
+ wrap_with :div, class: wrap_classes do
91
+ select_tag :size, options,
92
+ class: "_no-select2 _nest-option-value #{nest_option_classes}"
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,59 @@
1
+ format :html do
2
+ def nest_editor_tabs
3
+ tab_hash = {}
4
+ # tab_hash[:content] = nest_content_tab if voo.show? :content_tab
5
+ tab_hash.merge! view: haml(:_basics, snippet: nest_snippet),
6
+ options: haml(:_options, snippet: nest_snippet),
7
+ rules: nest_rules_tab
8
+
9
+ tabs tab_hash, default_active_tab, panel_attr: { class: "nest-options" }
10
+ end
11
+
12
+ def image_nest_editor_tabs snippet
13
+ # tab_hash[:content] = nest_content_tab if voo.show? :content_tab
14
+ tab_hash = { upload: image_content_tab(snippet),
15
+ select: haml(:_image_find, snippet: snippet),
16
+ options: haml(:_image_options, snippet: snippet),
17
+ preview: image_preview_tab(snippet) }
18
+
19
+ class_up "nav", "nav-fill"
20
+ tabs tab_hash, :content, panel_attr: { class: "nest-options" }
21
+ end
22
+
23
+ def image_content_tab snippet
24
+ nest(snippet.name, view: :new_image, type: :image, hide: :guide)
25
+ end
26
+
27
+ def image_find_tab snippet
28
+ wrap true do
29
+ nest(snippet.name, view: :new_image, type: :image, hide: :guide)
30
+ end
31
+ end
32
+
33
+ def image_preview_tab snippet
34
+ wrap true do
35
+ nest(snippet.name, view: :core, type: :image, hide: :guide)
36
+ end
37
+ end
38
+
39
+ def show_content_tab?
40
+ !card.is_structure?
41
+ end
42
+
43
+ def default_active_tab
44
+ voo.show?(:content_tab) ? :content : :basics
45
+ end
46
+
47
+ def nest_content_tab
48
+ name_dependent_slot do
49
+ @nest_content_tab || nest(card.name.field(nest_snippet.name),
50
+ view: :nest_content, hide: :guide)
51
+ end
52
+ end
53
+
54
+ def nest_rules_tab
55
+ name_dependent_slot do
56
+ nest(set_name_for_nest_rules, view: :nest_rules)
57
+ end
58
+ end
59
+ end
@@ -27,44 +27,17 @@ format :html do
27
27
  end
28
28
  end
29
29
 
30
- def nest_editor editor_mode
30
+ def nest_editor editor_mode, ref_type=:nest, title="Nest", editor=nil
31
31
  @tm_snippet_editor_mode = editor_mode
32
32
  voo.hide :content_tab unless show_content_tab?
33
- haml :reference_editor, ref_type: :nest, editor_mode: @tm_snippet_editor_mode,
33
+ haml :reference_editor, title: title,
34
+ editor: editor || ref_type,
35
+ ref_type: ref_type,
36
+ editor_mode: @tm_snippet_editor_mode,
34
37
  apply_opts: nest_apply_opts,
35
38
  snippet: nest_snippet
36
39
  end
37
40
 
38
- def nest_editor_tabs
39
- tab_hash = {}
40
- tab_hash[:content] = nest_content_tab if voo.show? :content_tab
41
- tab_hash.merge! options: haml(:_options, snippet: nest_snippet),
42
- rules: nest_rules_tab,
43
- help: haml(:_help)
44
- tabs tab_hash, default_active_tab
45
- end
46
-
47
- def show_content_tab?
48
- !card.is_structure?
49
- end
50
-
51
- def default_active_tab
52
- voo.show?(:content_tab) ? :content : :options
53
- end
54
-
55
- def nest_content_tab
56
- name_dependent_slot do
57
- @nest_content_tab || nest(card.name.field(nest_snippet.name),
58
- view: :nest_content, hide: :guide)
59
- end
60
- end
61
-
62
- def nest_rules_tab
63
- name_dependent_slot do
64
- nest(set_name_for_nest_rules, view: :nest_rules)
65
- end
66
- end
67
-
68
41
  def name_dependent_slot
69
42
  result = [empty_nest_name_alert(nest_snippet.name.blank?)]
70
43
  result <<
@@ -91,8 +64,7 @@ format :html do
91
64
 
92
65
  def nest_snippet
93
66
  @nest_snippet ||=
94
- Card::Reference::NestParser.new params[:tm_snippet_raw],
95
- default_nest_view, default_item_view
67
+ Card::Reference::NestParser.new params[:tm_snippet_raw]
96
68
  end
97
69
 
98
70
  def set_name_for_nest_rules
@@ -105,63 +77,24 @@ format :html do
105
77
  end
106
78
 
107
79
  def default_nest_editor_item_options
108
- [[:view, default_item_view]]
80
+ []
81
+ # [[:view, default_item_view]]
109
82
  end
110
83
 
111
- def nest_option_name_select selected=nil, level=0
112
- classes = "form-control form-control-sm _nest-option-name"
113
- classes += " _new-row" unless selected
114
- select_tag "nest_option_name_#{unique_id}",
115
- nest_option_name_select_options(selected, level),
116
- class: classes, id: nil
117
- # id: nil ensures that select2 generates its own unique identifier
118
- # that ensures that we can clone this tag without breaking select2
119
- end
120
-
121
- def nest_option_name_select_options selected, level
122
- options = selected ? [] : ["--"]
123
- options += Card::Reference::NestParser::NEST_OPTIONS
124
- options_for_select(
125
- options, disabled: nest_option_name_disabled(selected, level),
126
- selected: selected
127
- )
128
- end
129
-
130
- def nest_option_name_disabled selected, level
131
- disabled = nest_option_name_disabled_options level
132
- disabled = disabled&.map(&:first)
133
- disabled&.delete selected if selected
134
- disabled
135
- end
136
-
137
- def nest_option_name_disabled_options level
138
- if level.zero?
139
- nest_snippet.options
140
- else
141
- nest_snippet.item_options[level - 1] || default_nest_editor_item_options
142
- end
84
+ def demo
85
+ _render_demo
143
86
  end
144
87
 
145
88
  def nest_apply_opts
146
89
  apply_tm_snippet_data nest_snippet
147
90
  end
148
91
 
149
- def nest_option_value_select value=nil
150
- # select_tag "nest_option_value_#{unique_id}"
151
- text_field_tag "value", value,
152
- class: "_nest-option-value form-control form-control-sm",
153
- disabled: !value,
154
- id: nil
155
- end
156
-
157
92
  def known_nest_content
158
93
  voo.hide! :cancel_button
159
94
  add_name_context
160
95
  with_nest_mode :edit do
161
- frame do
162
- [
163
- render_edit_inline
164
- ]
96
+ wrap true do
97
+ render_edit_inline
165
98
  end
166
99
  end
167
100
  end
@@ -170,6 +103,9 @@ format :html do
170
103
  voo.hide! :guide
171
104
  voo.show! :new_type_formgroup
172
105
  voo.buttons_view = :new_image_buttons
173
- framed_create_form success: { tinymce_id: Env.params[:tinymce_id] }
106
+ wrap true do
107
+ create_form success: { tinymce_id: Env.params[:tinymce_id] }
108
+ end
109
+ # framed_create_form
174
110
  end
175
111
  end
@@ -10,29 +10,30 @@ format :html do
10
10
  nest_image_editor :modal
11
11
  end
12
12
 
13
- view :new_image, perms: :create, unknown: true, cache: :never do
13
+ view :new_image, perms: :create, unknown: true, cache: :never, wrap: :slot do
14
14
  voo.buttons_view = :new_image_buttons
15
- framed_create_form success: { tinymce_id: Env.params[:tinymce_id], view: :open }
15
+ create_form success: { tinymce_id: Env.params[:tinymce_id],
16
+ view: :new_image, type: :image,
17
+ slot: { hide: :guide, type: :image, show: :preview_redirect },
18
+ id: card.autoname(card.name.next) }
16
19
  end
17
20
 
18
21
  view :new_image_buttons do
19
22
  button_formgroup do
20
- [standard_save_button(no_origin_update: true, class: "_change-create-to-update")]
23
+ [standard_save_button(no_origin_update: true)]
21
24
  end
22
25
  end
23
26
 
24
27
  def nest_image_editor editor_mode
25
28
  adapt_reference_editor_for_images
26
- nest_editor editor_mode
29
+ nest_editor editor_mode, :nest, "Image", "image_nest"
27
30
  end
28
31
 
29
32
  def adapt_reference_editor_for_images
30
- nest_name = card.autoname(card.name.field("image01"))
33
+ nest_name = card.autoname("image01")
31
34
  voo.show! :content_tab
32
35
  @nest_content_tab = nest(nest_name, view: :new_image, type: :image, hide: :guide)
33
-
34
- image_name = nest_name.to_name.right
35
- @nest_snippet = Card::Reference::NestParser.new_image image_name
36
+ @nest_snippet = Card::Reference::NestParser.new_image nest_name
36
37
  end
37
38
  end
38
39
 
@@ -1,18 +1,20 @@
1
1
  %div._nest-editor
2
- .nest-header.d-flex.ml-2
2
+ .card-header.d-flex
3
3
  %h5.mt-1
4
- = ref_type.capitalize
5
- .ml-auto
6
- = link_to fa_icon(:close), path: "#", "data-dismiss": editor_mode, class: "text-dark p-1 ml-1"
4
+ = title
5
+ .ms-auto
6
+ = link_to fa_icon(:close), path: "#", "data-bs-dismiss": editor_mode, class: "text-dark p-1 ms-1"
7
7
 
8
- .form
9
- = haml_partial "#{ref_type}_editor", snippet: snippet
8
+ .card-body
9
+ .form
10
+ = haml_partial "#{editor}_editor", snippet: snippet
10
11
 
11
12
  .card-footer.p-0
12
13
  .preview.mx-1.my-1.form-control-feedback
14
+ Syntax preview
13
15
  = text_field_tag "preview", snippet.raw, class: "_#{ref_type}-preview w-100 text-muted", readonly: true
14
16
  %hr.mt-1.mb-1
15
- .form-group-inline.d-flex.justify-content-center.py-2
16
- = button_tag (modal_tm_snippet_editor? ? "Apply and Close" : "Apply"), apply_opts.merge(class: "_#{ref_type}-apply btn-sm mr-3")
17
- %a.border-light.text-dark.btn.btn-sm.btn-outline-secondary{"data-dismiss": editor_mode, href: "#"}
17
+ .form-group-inline.d-flex.justify-content-center.py-3
18
+ = button_tag (modal_tm_snippet_editor? ? "Apply and Close" : "Apply"), apply_opts.merge(class: "_#{ref_type}-apply btn-sm me-3")
19
+ %a.border-light.text-dark.btn.btn-sm.btn-secondary{"data-bs-dismiss": editor_mode, href: "#"}
18
20
  = modal_tm_snippet_editor? ? "Cancel" : "Close"
@@ -24,7 +24,7 @@ format :html do
24
24
  end
25
25
 
26
26
  def apply_tm_data_dismiss data
27
- data["data-dismiss"] = "modal" if modal_tm_snippet_editor?
27
+ data["data-bs-dismiss"] = "modal" if modal_tm_snippet_editor?
28
28
  end
29
29
 
30
30
  def apply_tm_data_index data