nacelle 0.2.3 → 0.3.1
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 +125 -0
- data/app/assets/javascripts/ckeditor/plugins/cells/plugin.js +19 -0
- 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
- data/lib/nacelle.rb +5 -3
- metadata +4 -4
- data/app/assets/javascripts/ckeditor/plugins/cells/dialogs/cells.js.coffee +0 -25
- data/app/assets/javascripts/ckeditor/plugins/cells/plugin.js.coffee +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 784d69fcdeff8b7a19072b4f99978b3bee4b5096518f3c474fa338f4d7fbac7d
|
4
|
+
data.tar.gz: 6148e8111bbab1763d11958bc67c3cbb8dc0c161dd62f0ac0ba0f42ba1332a56
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 62a6df913320f0c950af27d9e34a8f225960e96ee23b54694e9bc8c94ad67e2fc69e44b379cc7db866754ec1af3e3b7b09f47f0a3f6ed58bf0ffc7c6d60c8147
|
7
|
+
data.tar.gz: 7670e3d386f4970aa25b0811ebd4cb9c2f6488e121c302838c54be3b45dbabd2c2a01ac548f65e8d2b10135ee29ad55d3de49a84f613ac583b5856921d8da361
|
@@ -0,0 +1,125 @@
|
|
1
|
+
CKEDITOR.dialog.add("cellDialog", function(editor) {
|
2
|
+
return {
|
3
|
+
title: "Insert Cell",
|
4
|
+
minWidth: 400,
|
5
|
+
minHeight: 200,
|
6
|
+
contents: [{
|
7
|
+
id: "main",
|
8
|
+
elements: [{
|
9
|
+
type: "select",
|
10
|
+
id: "cellName",
|
11
|
+
label: "Select Cell",
|
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: "",
|
32
|
+
}],
|
33
|
+
}],
|
34
|
+
|
35
|
+
onShow: function() {
|
36
|
+
fetch("/nacelle/cells.json").then(r => r.json()).then(data => {
|
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"))
|
46
|
+
}
|
47
|
+
});
|
48
|
+
},
|
49
|
+
|
50
|
+
onOk: function() {
|
51
|
+
let cell = editor.document.createElement("cell")
|
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
|
+
|
59
|
+
editor.insertElement(cell)
|
60
|
+
},
|
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
|
+
};
|
124
|
+
});
|
125
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
CKEDITOR.plugins.add("cells", {
|
2
|
+
icons: "insertcell",
|
3
|
+
init: function(editor) {
|
4
|
+
editor.addCommand("insertCellDialog", new CKEDITOR.dialogCommand("cellDialog"));
|
5
|
+
|
6
|
+
CKEDITOR.dialog.add("cellDialog", "/assets/ckeditor/plugins/cells/dialogs/cells.js");
|
7
|
+
|
8
|
+
editor.ui.addButton("InsertCell", {
|
9
|
+
label: "Insert Cell",
|
10
|
+
command: "insertCellDialog",
|
11
|
+
icon: "/assets/ckeditor/plugins/cells/icons/insertcell.png",
|
12
|
+
});
|
13
|
+
},
|
14
|
+
});
|
15
|
+
|
16
|
+
CKEDITOR.dtd.$empty.cell = 1;
|
17
|
+
CKEDITOR.dtd.$nonEditable.cell = 1;
|
18
|
+
CKEDITOR.dtd.$object.cell = 1;
|
19
|
+
|
@@ -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
data/lib/nacelle.rb
CHANGED
@@ -10,8 +10,10 @@ module Nacelle
|
|
10
10
|
app.config.middleware.use Nacelle::Middleware
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
initializer "nacelle.assets.precompile" do |app|
|
14
|
+
app.config.assets.precompile += %w(
|
15
|
+
ckeditor/plugins/cells/icons/insertcell.png
|
16
|
+
)
|
17
|
+
end
|
16
18
|
end
|
17
19
|
end
|
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.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Micah Geisel
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -152,9 +152,9 @@ files:
|
|
152
152
|
- README.md
|
153
153
|
- Rakefile
|
154
154
|
- app/assets/javascripts/ckeditor/plugins/cells.js
|
155
|
-
- app/assets/javascripts/ckeditor/plugins/cells/dialogs/cells.js
|
155
|
+
- app/assets/javascripts/ckeditor/plugins/cells/dialogs/cells.js
|
156
156
|
- app/assets/javascripts/ckeditor/plugins/cells/icons/insertcell.png
|
157
|
-
- app/assets/javascripts/ckeditor/plugins/cells/plugin.js
|
157
|
+
- app/assets/javascripts/ckeditor/plugins/cells/plugin.js
|
158
158
|
- app/assets/javascripts/nacelle/ckeditor.js
|
159
159
|
- app/controllers/nacelle/cells_controller.rb
|
160
160
|
- bin/console
|
@@ -1,25 +0,0 @@
|
|
1
|
-
CKEDITOR.dialog.add "cellDialog", (editor) ->
|
2
|
-
title: "Insert Cell"
|
3
|
-
minWidth: 400
|
4
|
-
minHeight: 200
|
5
|
-
contents: [
|
6
|
-
id: "main"
|
7
|
-
elements: [
|
8
|
-
type: "select"
|
9
|
-
id: "cellName"
|
10
|
-
label: "Select Cell"
|
11
|
-
items: []
|
12
|
-
]
|
13
|
-
]
|
14
|
-
|
15
|
-
onShow: ->
|
16
|
-
$.getJSON "/nacelle/cells.json", (data) =>
|
17
|
-
select = @getContentElement("main", "cellName")
|
18
|
-
for item in data.cells
|
19
|
-
select.add item.name, item.id
|
20
|
-
|
21
|
-
onOk: ->
|
22
|
-
cell = editor.document.createElement("cell")
|
23
|
-
cell.setAttribute "name", @getValueOf("main", "cellName")
|
24
|
-
editor.insertElement cell
|
25
|
-
|
@@ -1,16 +0,0 @@
|
|
1
|
-
CKEDITOR.plugins.add "cells",
|
2
|
-
icons: "insertcell"
|
3
|
-
init: (editor) ->
|
4
|
-
editor.addCommand "insertCellDialog", new CKEDITOR.dialogCommand("cellDialog")
|
5
|
-
|
6
|
-
CKEDITOR.dialog.add "cellDialog", "/assets/ckeditor/plugins/cells/dialogs/cells.js"
|
7
|
-
|
8
|
-
editor.ui.addButton "InsertCell",
|
9
|
-
label: "Insert Cell"
|
10
|
-
command: "insertCellDialog"
|
11
|
-
icon: "/assets/ckeditor/plugins/cells/icons/insertcell.png"
|
12
|
-
|
13
|
-
CKEDITOR.dtd.$empty.cell = 1
|
14
|
-
CKEDITOR.dtd.$nonEditable.cell = 1
|
15
|
-
CKEDITOR.dtd.$object.cell = 1
|
16
|
-
|