nacelle 0.2.4 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/ckeditor/plugins/cells/dialogs/cells.js +97 -5
- data/gemfiles/rails_5.1.gemfile.lock +1 -1
- data/gemfiles/rails_5.2.gemfile.lock +1 -1
- data/gemfiles/rails_6.0.gemfile.lock +1 -1
- data/gemfiles/rails_6.1.gemfile.lock +1 -1
- data/gemfiles/rails_7.0.gemfile.lock +1 -1
- data/lib/nacelle/cells_serializer.rb +7 -0
- data/lib/nacelle/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d981b232a0b7740cbb646ebcfd7f4270a57ad338f11fcfa6e7304a9e4c1244fa
|
4
|
+
data.tar.gz: 4e317a0158fdc150feab19806e75b3dc81cb713377cbc585ac8925400863b092
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90303e656be028965b2e841710a2e2f8ca41d6646ddf31e5009a821c699310f5540bc1534f49958013f45346d40e6af6c2c1898a96fb00fa56041cad97ab3e14
|
7
|
+
data.tar.gz: 219b0e4f3536109c44b7f2bc5cae09b39e6fbc5951237a8326c0a34744285a17b34a8b009ecbc5cd0c7e617f54594146249b121a564ae61a3bd32f33945b28e4
|
@@ -10,24 +10,116 @@ CKEDITOR.dialog.add("cellDialog", function(editor) {
|
|
10
10
|
id: "cellName",
|
11
11
|
label: "Select Cell",
|
12
12
|
items: [],
|
13
|
+
onChange: (event) => {
|
14
|
+
let select = event.sender
|
15
|
+
let dialog = select.getDialog()
|
16
|
+
let form = dialog.getContentElement("main", "form")
|
17
|
+
let cellConfig = dialog.cellConfigs.find(config => config.id === event.data.value)
|
18
|
+
|
19
|
+
form.getElement().setHtml(cellConfig.form)
|
20
|
+
|
21
|
+
if(selectedCell = getSelectedCell()) {
|
22
|
+
form.getElement().$.querySelectorAll("[name]").forEach(element => {
|
23
|
+
setValue(element, selectedCell.getAttribute(element.name))
|
24
|
+
})
|
25
|
+
}
|
26
|
+
},
|
27
|
+
},
|
28
|
+
{
|
29
|
+
type: "html",
|
30
|
+
id: "form",
|
31
|
+
html: "",
|
13
32
|
}],
|
14
33
|
}],
|
15
34
|
|
16
35
|
onShow: function() {
|
17
36
|
fetch("/nacelle/cells.json").then(r => r.json()).then(data => {
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
37
|
+
this.cellConfigs = data.cells
|
38
|
+
let select = this.getContentElement("main", "cellName")
|
39
|
+
select.clear()
|
40
|
+
|
41
|
+
this.cellConfigs.forEach(config => select.add(config.name, config.id))
|
42
|
+
|
43
|
+
let selectedCell = getSelectedCell()
|
44
|
+
if(selectedCell) {
|
45
|
+
select.setValue(selectedCell.getAttribute("name"))
|
22
46
|
}
|
23
47
|
});
|
24
48
|
},
|
25
49
|
|
26
50
|
onOk: function() {
|
27
|
-
|
51
|
+
let cell = editor.document.createElement("cell")
|
28
52
|
cell.setAttribute("name", this.getValueOf("main", "cellName"));
|
53
|
+
|
54
|
+
let form = this.getContentElement("main", "form")
|
55
|
+
form.getElement().$.querySelectorAll("[name]").forEach(element => {
|
56
|
+
cell.setAttribute(element.name, getValue(element))
|
57
|
+
})
|
58
|
+
|
29
59
|
editor.insertElement(cell)
|
30
60
|
},
|
31
61
|
};
|
62
|
+
|
63
|
+
function getSelectedCell() {
|
64
|
+
let node = editor.getSelectedHtml().$.firstElementChild
|
65
|
+
if(node && node.nodeName == "CELL") {
|
66
|
+
return node
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
function getValue(element) {
|
71
|
+
switch(element.type) {
|
72
|
+
case 'radio':
|
73
|
+
case 'checkbox':
|
74
|
+
const elements = document.querySelectorAll(`[name="${element.name}"]:checked`)
|
75
|
+
const values = Array.from(elements).map(e => e.value)
|
76
|
+
if(element.name.endsWith("[]")) {
|
77
|
+
return values
|
78
|
+
} else {
|
79
|
+
return values[0]
|
80
|
+
}
|
81
|
+
default:
|
82
|
+
return element.value
|
83
|
+
}
|
84
|
+
}
|
85
|
+
|
86
|
+
function setValue(element, value) {
|
87
|
+
if ('undefined' === typeof value) {
|
88
|
+
value = '';
|
89
|
+
}
|
90
|
+
|
91
|
+
if (null === value) {
|
92
|
+
value = '';
|
93
|
+
}
|
94
|
+
|
95
|
+
var type = element.type || element[0].type;
|
96
|
+
|
97
|
+
switch(type ) {
|
98
|
+
default:
|
99
|
+
element.value = value;
|
100
|
+
break;
|
101
|
+
|
102
|
+
case 'radio':
|
103
|
+
case 'checkbox':
|
104
|
+
element.checked = element.value === value;
|
105
|
+
break;
|
106
|
+
|
107
|
+
case 'select-multiple':
|
108
|
+
var values = value.constructor === Array ? value : [value];
|
109
|
+
for(var k = 0; k < element.options.length; k++) {
|
110
|
+
element.options[k].selected = (values.indexOf(element.options[k].value) > -1 );
|
111
|
+
}
|
112
|
+
break;
|
113
|
+
|
114
|
+
case 'select':
|
115
|
+
case 'select-one':
|
116
|
+
element.value = value.toString() || value;
|
117
|
+
break;
|
118
|
+
|
119
|
+
case 'date':
|
120
|
+
element.value = new Date(value).toISOString().split('T')[0];
|
121
|
+
break;
|
122
|
+
}
|
123
|
+
};
|
32
124
|
});
|
33
125
|
|
@@ -14,6 +14,7 @@ class Nacelle::CellsSerializer
|
|
14
14
|
{
|
15
15
|
id: "#{cell}/#{action}",
|
16
16
|
name: "#{cell_name} #{action_name}",
|
17
|
+
form: settings_html_for(cell, action),
|
17
18
|
}
|
18
19
|
end
|
19
20
|
end
|
@@ -30,4 +31,10 @@ class Nacelle::CellsSerializer
|
|
30
31
|
cell_files = Dir[::Rails.root.join('app/cells/*.rb')]
|
31
32
|
cell_files.each(&method(:require))
|
32
33
|
end
|
34
|
+
|
35
|
+
def settings_html_for cell, action
|
36
|
+
path = ::Rails.root.join("app/cells/#{cell}/#{action}_form.html.erb")
|
37
|
+
ERB.new(File.read(path)).result
|
38
|
+
rescue Errno::ENOENT
|
39
|
+
end
|
33
40
|
end
|
data/lib/nacelle/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nacelle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Micah Geisel
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|