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.
- checksums.yaml +7 -0
- data/db/migrate_core_cards/20160804112560_add_tinymce_cards.rb +42 -0
- data/db/migrate_core_cards/20171113233151_update_tinymce_config.rb +22 -0
- data/db/migrate_core_cards/20190306172623_update_tinymce_config_to_v5.rb +23 -0
- data/db/migrate_core_cards/20190306172890_tinymce_add_nest_to_toolbar.rb +11 -0
- data/lib/javascript/script_tinymce.js +9 -0
- data/lib/javascript/script_tinymce_config.js.coffee +59 -0
- data/set/all/reference_editor.rb +23 -0
- data/set/all/reference_editor/_link_editor.haml +18 -0
- data/set/all/reference_editor/_nest_editor.haml +17 -0
- data/set/all/reference_editor/link_editor.rb +33 -0
- data/set/all/reference_editor/link_editor/link_parser.rb +35 -0
- data/set/all/reference_editor/nest_editor.rb +172 -0
- data/set/all/reference_editor/nest_editor/_help.haml +7 -0
- data/set/all/reference_editor/nest_editor/_options.haml +12 -0
- data/set/all/reference_editor/nest_editor/_options_select.haml +9 -0
- data/set/all/reference_editor/nest_editor/_options_select_row.haml +10 -0
- data/set/all/reference_editor/nest_editor/nest_parser.rb +71 -0
- data/set/all/reference_editor/nest_image.rb +70 -0
- data/set/all/reference_editor/reference_editor.haml +18 -0
- data/set/all/tinymce_editor.rb +7 -0
- data/set/self/script_tinymce.rb +4 -0
- data/set/self/script_tinymce_config.rb +4 -0
- data/set/self/tiny_mce.rb +7 -0
- metadata +83 -0
@@ -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"
|
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: []
|