nacelle 0.2.3 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e1f1085de0621c2e719504861113bc39da5d848ff607ab198d2964715df09e6b
4
- data.tar.gz: aac00e17a51ba515161aabea95ea870526e7b655f71ea595f457a11547f218b5
3
+ metadata.gz: 784d69fcdeff8b7a19072b4f99978b3bee4b5096518f3c474fa338f4d7fbac7d
4
+ data.tar.gz: 6148e8111bbab1763d11958bc67c3cbb8dc0c161dd62f0ac0ba0f42ba1332a56
5
5
  SHA512:
6
- metadata.gz: 8f4eaffbb71f804e2920910f2af323586d8fb401c973559c41f951da05ebf6705ac7779fad183e95ccf034543bcc55128612c7c9016f3849ce263f7e85f1637b
7
- data.tar.gz: 37139948b268cd49d8484d72bad33cc9dfe870cd2eb9a6b259cfdc9b44ef1fd343c1a3d313dea94dcd13f88113c06b84e56ab36b7b025c8619622502281d8eb6
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
+
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- nacelle (0.2.3)
4
+ nacelle (0.3.0)
5
5
  cells (~> 3.0)
6
6
  rails
7
7
  sprockets-rails
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- nacelle (0.2.3)
4
+ nacelle (0.3.0)
5
5
  cells (~> 3.0)
6
6
  rails
7
7
  sprockets-rails
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- nacelle (0.2.3)
4
+ nacelle (0.3.0)
5
5
  cells (~> 3.0)
6
6
  rails
7
7
  sprockets-rails
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- nacelle (0.2.3)
4
+ nacelle (0.3.0)
5
5
  cells (~> 3.0)
6
6
  rails
7
7
  sprockets-rails
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- nacelle (0.2.3)
4
+ nacelle (0.3.0)
5
5
  cells (~> 3.0)
6
6
  rails
7
7
  sprockets-rails
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Nacelle
2
- VERSION = "0.2.3"
2
+ VERSION = "0.3.1"
3
3
  end
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
- config.assets.precompile += %w(
14
- ckeditor/plugins/cells/icons/*
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.2.3
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: 2021-12-29 00:00:00.000000000 Z
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.coffee
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.coffee
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
-