promethee 0.1.5 → 0.1.6

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
  SHA1:
3
- metadata.gz: 713537989be982b85b811ad216982e6f8fe8b381
4
- data.tar.gz: 4ce491f4b51ec1e55e66e096061a63648caf4f72
3
+ metadata.gz: 14fcd1ec2bd76b0e5a05757927c5fb38b292638c
4
+ data.tar.gz: 2fb7d856837d11869f7390ef44fc97985fa7da22
5
5
  SHA512:
6
- metadata.gz: 9d3c1a3f84b077d64559f399577b642ab2f792ceddb944ed3963f071d3eb8b18840f98faa6bbc3aa98eaf6d138cb2102b3340593a980aaf56859e3ef5f3bc8af
7
- data.tar.gz: b83effefd44a2d04dde64173b458a01171809747490b4b447b75d5e5861f51927877ed3c6d0ef48e30555b7431e7bd16bb2ced012ad62b0409ecaf421badd11d
6
+ metadata.gz: a2c4c4b361aa1e2e6a938127cfaa83c43a89adbee44969d3452b1e8ec9b110d386454671a35278c2c4910976578d59c4e083c563c141501cdef51334ed3d44fb
7
+ data.tar.gz: '0219cf7aa0bbc9f06c677966db46c4bfcf86c282731ecb9700f8abf02f196aafb281ebf30232271b499131368a3f7641c63cd48be40d8dcf75c5dc9c94b9c1f1'
data/README.md CHANGED
@@ -63,26 +63,36 @@ The data is:
63
63
 
64
64
  ```ruby
65
65
  @page.data = {
66
+ id: 'ero342ezr',
66
67
  type: 'page',
68
+ version: 1,
67
69
  children: [
68
70
  {
71
+ id: '7lebjl4j6',
69
72
  type: 'row',
73
+ version: 1,
70
74
  children: [
71
75
  {
72
- type: 'col',
76
+ id: '8lebjl4j6',
77
+ type: 'column',
78
+ version: 1,
73
79
  attributes: {
74
80
  size: 4,
75
81
  offset: 0
76
82
  },
77
83
  children: [
78
84
  {
85
+ id: '9lebjl4j6',
79
86
  type: 'text',
87
+ version: 1,
80
88
  attributes: {
81
89
  body: '<p><b>This</b> is a text</p>'
82
90
  }
83
91
  },
84
92
  {
93
+ id: '12lebjl4j6',
85
94
  type: 'image',
95
+ version: 1,
86
96
  attributes: {
87
97
  src: 'https://c1.staticflickr.com/5/4089/4975306844_f849232195_b.jpg',
88
98
  alt: 'Prométhée'
@@ -159,7 +169,7 @@ With stylesheets set:
159
169
  #### The editor has components
160
170
 
161
171
  The component is made of a show and and edit.
162
-
172
+ The component has to be registered in order to be addable to the page.
163
173
  In the edit, the component description looks like:
164
174
  ```
165
175
  {
@@ -173,6 +183,21 @@ In the edit, the component description looks like:
173
183
  }
174
184
  }
175
185
  ```
186
+ The name and thumbs are used in the list of components, whereas the data is what will be injected in the page when component is added.
187
+
188
+ To register a component, the code is:
189
+ ```javascript
190
+ angular.injector(['ng', 'Promethee']).get('definitions').push({
191
+ name: 'Image',
192
+ thumb: 'http://via.placeholder.com/300x200',
193
+ data: {
194
+ type: 'image',
195
+ attributes: {
196
+ src: 'https://source.unsplash.com/random/1920x1080'
197
+ }
198
+ }
199
+ });
200
+ ```
176
201
 
177
202
  #### The editor previews in an iframe
178
203
 
@@ -181,6 +206,70 @@ When you send your data, it renders the page in the default layout.
181
206
 
182
207
  This is used to generate a live responsive preview.
183
208
 
209
+ ### Render localized (l10n)
210
+
211
+ The page can be localized.
212
+
213
+ The localization data looks like:
214
+ ```
215
+ @localization.data = {
216
+ locale: 'fr',
217
+ components: [
218
+ {
219
+ id: '9lebjl4j6',
220
+ type: 'text',
221
+ version: 1,
222
+ master_version: 1,
223
+ attributes: {
224
+ body: '<p><b>Ceci</b> est un texte</p>'
225
+ }
226
+ }
227
+ ]
228
+ }
229
+ ```
230
+
231
+ The view is:
232
+
233
+ ```erb
234
+ <%= promethee @page.data, l: @localization.data %>
235
+ ```
236
+
237
+ Which renders to:
238
+
239
+ ```html
240
+ <div class="promethee">
241
+ <div class="row promethee__component promethee__component--row">
242
+ <div class="col-md-4 promethee__component promethee__component--col">
243
+ <div class="promethee__component promethee__component--text">
244
+ <p><b>Ceci</b> est un texte</p>
245
+ </div>
246
+ <div class="promethee__component promethee__component--image">
247
+ <img src="https://c1.staticflickr.com/5/4089/4975306844_f849232195_b.jpg" alt="Prométhée">
248
+ </div>
249
+ </div>
250
+ </div>
251
+ </div>
252
+ ```
253
+
254
+ ### Edit localization
255
+
256
+ ```erb
257
+ <%= form_for @localization do |f| %>
258
+ <%= f.promethee_localizer :data, master: @page.data %>
259
+ <%= f.submit %>
260
+ <% end %>
261
+ ```
262
+
263
+ This would do quite the same thing:
264
+
265
+ ```erb
266
+ <form action="/localization" method="post">
267
+ <%= promethee_localizer :localization, :data, localization_data: @localization.data, master_data: @page.data %>
268
+ <input type="submit">
269
+ </form>
270
+ ```
271
+
272
+
184
273
  ### Roadmap
185
274
  - ~~Gem setup~~
186
275
  - ~~renderer helper~~
@@ -29,14 +29,13 @@ data = data.to_json unless data.is_a? String
29
29
  // Data (TODO use Adder and probably page definition to init)
30
30
  if (data === null || data === '') {
31
31
  data = {
32
+ id: '',
32
33
  type: 'page',
34
+ version: 1,
33
35
  children: []
34
36
  };
35
37
  }
36
38
  $scope.data = data;
37
- // $scope.component = {
38
- // children: data
39
- // };
40
39
 
41
40
  // Preview modes
42
41
  $scope.fullscreen = false;
@@ -1,5 +1,7 @@
1
1
  <%
2
- data = JSON.parse data, symbolize_names: true if data.is_a? String
2
+ master_data = Promethee::Data.prepare data
3
+ l = Promethee::Data.prepare l
4
+ Promethee::Localization.localize! master_data, l unless l.nil?
3
5
  %>
4
6
  <div class="promethee">
5
7
  <%= render 'promethee/components/page', page: data %>
data/lib/promethee.rb CHANGED
@@ -18,4 +18,7 @@ module Promethee
18
18
  require 'promethee/core_ext/tags'
19
19
  require 'promethee/core_ext/form_helper'
20
20
  require 'promethee/core_ext/form_builder'
21
+
22
+ require 'promethee/data'
23
+ require 'promethee/localization'
21
24
  end
@@ -6,7 +6,8 @@ module ActionView
6
6
  # https://github.com/rails/rails/blob/bdc581616b760d1e2be3795c6f0f3ab4b1e125a5/actionview/lib/action_view/helpers/tags/text_field.rb
7
7
  class PrometheeEditor < Base
8
8
  def render
9
- data = @options[:value]
9
+ data = object.send @method_name unless object.nil?
10
+ data = @options[:value] if @options.include? :value
10
11
  ApplicationController.renderer.render partial: 'promethee/edit', locals: { data: data }
11
12
  end
12
13
  end
@@ -0,0 +1,9 @@
1
+ class Promethee::Data
2
+ def self.prepare(data)
3
+ if data.is_a? String
4
+ JSON.parse data, symbolize_names: true
5
+ else
6
+ data
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ class Promethee::Localization
2
+ def self.localize!(master_data, localization_data)
3
+ localized_components = localization_data[:components].select { |component| component[:id] == master_data[:id] }.first
4
+ master_data[:attributes].merge! localized_components[:attributes] unless localized_components.nil?
5
+ master_data[:children].each { |d| localize! d, localization_data } unless master_data[:children].nil?
6
+ end
7
+ end
@@ -1,26 +1,9 @@
1
1
  module Promethee::Rails::Helper
2
- def promethee(data)
3
- ApplicationController.renderer.render partial: 'promethee/show', locals: { data: data }
4
- end
5
-
6
- def promethee_template(type)
7
- render "/promethee/#{'components/' unless [:component, :components].include? type.to_s.to_sym }#{type}_edit"
8
- end
9
-
10
- def promethee_templates
11
- Promethee::Component.types.map{ |type| promethee_template type }.join.html_safe
2
+ def promethee(data, options = {})
3
+ ApplicationController.renderer.render partial: 'promethee/show', locals: { data: data, l: options[:l] }
12
4
  end
13
5
 
14
6
  def promethee_class_for component
15
7
  "promethee__component promethee__component--#{component[:type]}"
16
8
  end
17
-
18
- def promethee_editor_for(type)
19
- component_class = type.to_s.classify
20
- component = type[0].downcase + type[1..-1]
21
-
22
- content_tag :div, 'ng-controller': "#{component_class} as #{component}", 'ng-init': "#{component}.data = data" do
23
- concat yield(Promethee::Component.as(type))
24
- end
25
- end
26
9
  end
@@ -1,5 +1,5 @@
1
1
  module Promethee
2
2
  module Rails
3
- VERSION = "0.1.5"
3
+ VERSION = "0.1.6"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: promethee
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julien Dargelos
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2017-11-22 00:00:00.000000000 Z
14
+ date: 2017-11-27 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rails
@@ -247,6 +247,8 @@ files:
247
247
  - lib/promethee/core_ext/form_builder.rb
248
248
  - lib/promethee/core_ext/form_helper.rb
249
249
  - lib/promethee/core_ext/tags.rb
250
+ - lib/promethee/data.rb
251
+ - lib/promethee/localization.rb
250
252
  - lib/promethee/rails/engine.rb
251
253
  - lib/promethee/rails/helper.rb
252
254
  - lib/promethee/rails/version.rb
@@ -271,7 +273,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
271
273
  version: '0'
272
274
  requirements: []
273
275
  rubyforge_project:
274
- rubygems_version: 2.6.14
276
+ rubygems_version: 2.6.11
275
277
  signing_key:
276
278
  specification_version: 4
277
279
  summary: Bring fire to your page