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 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
-