card-mod-tinymce_editor 0.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.
@@ -0,0 +1,7 @@
1
+ .m-2
2
+ Nest one card in another.
3
+ %p
4
+ This panel will help you:
5
+ %ul
6
+ %li create/edit the nest syntax.
7
+ %li set rules that apply to nested cards
@@ -0,0 +1,12 @@
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
11
+
12
+
@@ -0,0 +1,9 @@
1
+ ._options-select{class: [template &&'_template']}
2
+ - if data
3
+ - data.each do |name, value|
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
@@ -0,0 +1,10 @@
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
9
+ .col-6
10
+ = nest_option_value_select value
@@ -0,0 +1,71 @@
1
+ #! no set module
2
+
3
+ # Extracts all information needed to generate the nest editor form
4
+ # from a nest syntax string
5
+ class NestParser
6
+ attr_reader :name, :options, :item_options, :raw
7
+
8
+ def self.new nest_string, default_view, default_item_view
9
+ return super if nest_string.is_a? String
10
+
11
+ OpenStruct.new(name: "", field?: true,
12
+ options: [[:view, default_view]], item_options: [],
13
+ raw: "{{+|view: #{default_view}}}")
14
+ end
15
+
16
+ def self.new_image name
17
+ OpenStruct.new(name: name, field?: true,
18
+ options: [%i[view content], %i[size medium]],
19
+ item_options: [],
20
+ raw: "{{+#{name}|view: content; size: medium}}")
21
+ end
22
+
23
+ def field?
24
+ @field
25
+ end
26
+
27
+ def initialize nest_string, _default_view, default_item_view
28
+ @raw = nest_string
29
+ @default_item_view = default_item_view
30
+ nest = Card::Content::Chunk::Nest.new nest_string, nil
31
+ init_name nest.name
32
+ extract_item_options nest.options
33
+ @options = extract_options nest.options
34
+ end
35
+
36
+ private
37
+
38
+ def init_name name
39
+ @field = name.to_name.simple_relative?
40
+ @name = @field ? name.to_s[1..-1] : name
41
+ end
42
+
43
+ def extract_options options
44
+ Card::Set::All::ReferenceEditor::NestEditor::NEST_OPTIONS
45
+ .each_with_object([]) do |key, res|
46
+ next unless options[key]
47
+
48
+ if key.in? %i[show hide]
49
+ values = Card::View.normalize_list(options[key])
50
+ res.concat(values.map { |val| [key, val] })
51
+ else
52
+ res << [key, options[key]]
53
+ end
54
+ end
55
+ end
56
+
57
+ def extract_item_options options
58
+ @item_options = []
59
+ item_options = options[:items]
60
+ while item_options
61
+ next_item_options = item_options[:items]
62
+ @item_options << extract_options(item_options)
63
+ item_options = next_item_options
64
+ end
65
+ # @item_options << default_item_options
66
+ end
67
+
68
+ def default_item_options
69
+ [:view, @default_item_view]
70
+ end
71
+ end
@@ -0,0 +1,70 @@
1
+ format :html do
2
+ view :nest_image, unknown: true, cache: :never,
3
+ wrap: {
4
+ slot: { class: "_overlay d0-card-overlay card nodblclick" }
5
+ } do
6
+ nest_image_editor :overlay
7
+ end
8
+
9
+ view :modal_nest_image, unknown: true, cache: :never,
10
+ wrap: { slot: { class: "nodblclick" } } do
11
+ nest_image_editor :modal
12
+ end
13
+
14
+ view :new_image, perms: :create, unknown: true, cache: :never do
15
+ new_view_frame_and_form new_image_form_opts
16
+ end
17
+
18
+ def nest_image_editor editor_mode
19
+ adapt_reference_editor_for_images
20
+ nest_editor editor_mode
21
+ end
22
+
23
+
24
+ def adapt_reference_editor_for_images
25
+ nest_name = card.autoname(card.name.field("image01"))
26
+ voo.show! :content_tab
27
+ @nest_content_tab = nest(nest_name, view: :new_image, type: :image, hide: :guide)
28
+
29
+ image_name = nest_name.to_name.right
30
+ @nest_snippet = NestEditor::NestParser.new_image image_name
31
+ end
32
+
33
+
34
+ def new_image_form_opts
35
+ { buttons: new_image_buttons,
36
+ success: { tinymce_id: Env.params[:tinymce_id],
37
+ view: :open } }
38
+ end
39
+
40
+ def new_image_buttons
41
+ button_formgroup do
42
+ [standard_save_button(no_origin_update: true, class: "_change-create-to-update")]
43
+ end
44
+ end
45
+ end
46
+
47
+ format :js do
48
+ view :change_create_to_update, unknown: true do
49
+ tm_id = if Env.params[:tinymce_id].present?
50
+ "\"#{Env.params[:tinymce_id]}\""
51
+ else
52
+ '$(".tinymce-textarea").attr("id")'
53
+ end
54
+ <<-JAVASCRIPT.strip_heredoc
55
+ nest.changeCreateToUpdate(#{tm_id});
56
+ JAVASCRIPT
57
+ end
58
+
59
+ view :open_nest_editor, unknown: true do
60
+ tm_id = if Env.params[:tinymce_id].present?
61
+ "\"#{Env.params[:tinymce_id]}\""
62
+ else
63
+ '$(".tinymce-textarea").attr("id")'
64
+ end
65
+ <<-JAVASCRIPT.strip_heredoc
66
+ tm = tinymce.get(#{tm_id});
67
+ nest.insertNest(tm, "{{+#{card.name.tag}|view: content; size: medium}}");
68
+ JAVASCRIPT
69
+ end
70
+ end
@@ -0,0 +1,18 @@
1
+ %div._nest-editor
2
+ .nest-header.d-flex.ml-2
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"
7
+
8
+ .form
9
+ = haml_partial "#{ref_type}_editor", snippet: snippet
10
+
11
+ .card-footer.p-0
12
+ .preview.mx-1.my-1.form-control-feedback
13
+ = text_field_tag "preview", snippet.raw, class: "_#{ref_type}-preview w-100 text-muted", readonly: true
14
+ %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: "#"}
18
+ = modal_tm_snippet_editor? ? "Cancel" : "Close"
@@ -0,0 +1,7 @@
1
+
2
+ format :html do
3
+ def tinymce_editor_input
4
+ text_area :content, rows: 3, class: "tinymce-textarea d0-card-content",
5
+ id: unique_id
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ include_set Abstract::CodeFile
2
+
3
+ Self::ScriptMods.add_item :script_tinymce
4
+ Self::InputOptions.add_to_basket :options, "tinymce editor"
@@ -0,0 +1,4 @@
1
+ include_set Abstract::CodeFile
2
+
3
+ Self::ScriptEditors.add_item :script_tinymce_config
4
+ All::Head::HtmlFormat.add_to_basket :mod_js_config, [:tiny_mce, "setTinyMCEConfig"]
@@ -0,0 +1,7 @@
1
+ def raw_help_text
2
+ <<-TEXT
3
+ Configure [[http://tinymce.com|TinyMCE]], Decko's default
4
+ [[http://en.wikipedia.org/wiki/Wysiwyg|wysiwyg]] editor.
5
+ [[http://decko.org/TinyMCE|more]]
6
+ TEXT
7
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: card-mod-tinymce_editor
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Ethan McCutchen
8
+ - Philipp Kühl
9
+ - Gerry Gleason
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2020-09-19 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: card-mod-edit
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - '='
20
+ - !ruby/object:Gem::Version
21
+ version: '0.1'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - '='
27
+ - !ruby/object:Gem::Version
28
+ version: '0.1'
29
+ description: ''
30
+ email:
31
+ - info@decko.org
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - db/migrate_core_cards/20160804112560_add_tinymce_cards.rb
37
+ - db/migrate_core_cards/20171113233151_update_tinymce_config.rb
38
+ - db/migrate_core_cards/20190306172623_update_tinymce_config_to_v5.rb
39
+ - db/migrate_core_cards/20190306172890_tinymce_add_nest_to_toolbar.rb
40
+ - lib/javascript/script_tinymce.js
41
+ - lib/javascript/script_tinymce_config.js.coffee
42
+ - set/all/reference_editor.rb
43
+ - set/all/reference_editor/_link_editor.haml
44
+ - set/all/reference_editor/_nest_editor.haml
45
+ - set/all/reference_editor/link_editor.rb
46
+ - set/all/reference_editor/link_editor/link_parser.rb
47
+ - set/all/reference_editor/nest_editor.rb
48
+ - set/all/reference_editor/nest_editor/_help.haml
49
+ - set/all/reference_editor/nest_editor/_options.haml
50
+ - set/all/reference_editor/nest_editor/_options_select.haml
51
+ - set/all/reference_editor/nest_editor/_options_select_row.haml
52
+ - set/all/reference_editor/nest_editor/nest_parser.rb
53
+ - set/all/reference_editor/nest_image.rb
54
+ - set/all/reference_editor/reference_editor.haml
55
+ - set/all/tinymce_editor.rb
56
+ - set/self/script_tinymce.rb
57
+ - set/self/script_tinymce_config.rb
58
+ - set/self/tiny_mce.rb
59
+ homepage: http://decko.org
60
+ licenses:
61
+ - GPL-2.0
62
+ - GPL-3.0
63
+ metadata: {}
64
+ post_install_message:
65
+ rdoc_options: []
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 2.3.0
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ requirements: []
79
+ rubygems_version: 3.0.3
80
+ signing_key:
81
+ specification_version: 4
82
+ summary: Calendar editor
83
+ test_files: []