nacelle 0.2.4 → 0.3.2

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