nacelle 0.2.4 → 0.3.2

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: 4d7035f40e729ef5fa97ced962dc7ac7639f819bba417d3ae2975fc833fb421c
4
- data.tar.gz: 7ec87e13a44a1e4fd04d5b5416de4326526f7f2cf78beb403aab196a19b3455f
3
+ metadata.gz: fddb49454b875b128c22c7a91263b9ef907d91d795dfba093dd21148d8db5ff7
4
+ data.tar.gz: 6eb1b433fb3486b60b2a8f8064eb73fa8f6b5d8572363e46a0c6574232c84804
5
5
  SHA512:
6
- metadata.gz: ae74269f5fb6d91f1b48d3ac20ed962fa125ebd10f19e1189f231d332a9f0ade5c177af92d37f972fae4e201070bcab273b1dc88ed1a407ae96eda8bf2f94aa9
7
- data.tar.gz: fa4516095ab9bce90c3b43da95f4f291872558382c33829e571e4ff17e9ee79555d708f4b11f0a4dcac0182c737e283f92992b51d0e3df2dd62d33d866532cde
6
+ metadata.gz: ebb593f685e118e2862f2b15d0c8094d4d6bc5458e9d0be8566a67cc2302950a155146d8e317d586f27b24ced5d23d1b0345bc9750738c5753695c5d12fae9b6
7
+ data.tar.gz: e641fe10a84be8d951d78cda66b18ce9859d9c976a18d9f1f82c83eaa47888fe8287c316b2b153bda1e53b68ce8cfa76295c21988b6987441c9153208bc33394
@@ -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
- var select = this.getContentElement("main", "cellName");
19
- for(var i=0; i < data.cells.length; i++) {
20
- var item = data.cells[i];
21
- select.add(item.name, item.id);
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
- var cell = editor.document.createElement("cell");
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
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- nacelle (0.2.4)
4
+ nacelle (0.3.2)
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.4)
4
+ nacelle (0.3.2)
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.4)
4
+ nacelle (0.3.2)
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.4)
4
+ nacelle (0.3.2)
5
5
  cells (~> 3.0)
6
6
  rails
7
7
  sprockets-rails
@@ -104,9 +104,11 @@ GEM
104
104
  marcel (1.0.2)
105
105
  method_source (1.0.0)
106
106
  mini_mime (1.1.2)
107
+ mini_portile2 (2.6.1)
107
108
  minitest (5.15.0)
108
109
  nio4r (2.5.8)
109
- nokogiri (1.12.5-x86_64-linux)
110
+ nokogiri (1.12.5)
111
+ mini_portile2 (~> 2.6.1)
110
112
  racc (~> 1.4)
111
113
  public_suffix (4.0.6)
112
114
  racc (1.6.0)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- nacelle (0.2.4)
4
+ nacelle (0.3.2)
5
5
  cells (~> 3.0)
6
6
  rails
7
7
  sprockets-rails
data/lib/nacelle/cell.rb CHANGED
@@ -2,6 +2,7 @@ require "cells"
2
2
 
3
3
  module Nacelle
4
4
  class Cell < Cell::Base
5
+ self.view_paths += %w[app/cells app/views]
5
6
  end
6
7
  end
7
8
 
@@ -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.4"
2
+ VERSION = "0.3.2"
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.4
4
+ version: 0.3.2
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-01-02 00:00:00.000000000 Z
11
+ date: 2022-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler