promethee 1.6.10 → 1.6.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/app/views/promethee/_edit.html.erb +37 -27
  3. data/app/views/promethee/components/aside/_edit.define.html.erb +3 -3
  4. data/app/views/promethee/components/collection/_edit.define.html.erb +3 -3
  5. data/app/views/promethee/components/collection/_edit.inspect.html.erb +2 -2
  6. data/app/views/promethee/components/column/_edit.define.html.erb +4 -4
  7. data/app/views/promethee/components/column/_edit.move.html.erb +1 -1
  8. data/app/views/promethee/components/cover/_edit.define.html.erb +4 -4
  9. data/app/views/promethee/components/cover/_edit.inspect.html.erb +1 -9
  10. data/app/views/promethee/components/cover/_edit.move.html.erb +1 -3
  11. data/app/views/promethee/components/cover/_localize.html.erb +1 -1
  12. data/app/views/promethee/components/cover/_show.html.erb +3 -3
  13. data/app/views/promethee/components/image/_edit.define.html.erb +4 -4
  14. data/app/views/promethee/components/image/_edit.inspect.html.erb +2 -9
  15. data/app/views/promethee/components/image/_edit.move.html.erb +4 -8
  16. data/app/views/promethee/components/image/_localize.html.erb +1 -1
  17. data/app/views/promethee/components/image/_show.html.erb +3 -3
  18. data/app/views/promethee/components/page/_edit.define.html.erb +21 -0
  19. data/app/views/promethee/components/page/_icon.svg +2 -0
  20. data/app/views/promethee/components/row/_edit.define.html.erb +12 -4
  21. data/app/views/promethee/components/row/_edit.inspect.html.erb +7 -1
  22. data/app/views/promethee/components/row/_edit.move.html.erb +1 -1
  23. data/app/views/promethee/components/slider/_edit.define.html.erb +3 -3
  24. data/app/views/promethee/components/slider/_edit.inspect.html.erb +2 -2
  25. data/app/views/promethee/components/text/_edit.define.html.erb +3 -3
  26. data/app/views/promethee/components/video/_edit.define.html.erb +3 -3
  27. data/app/views/promethee/edit/_move.html.erb +4 -5
  28. data/app/views/promethee/templates/_uploader.html.erb +51 -0
  29. data/lib/promethee/rails/helper.rb +4 -0
  30. data/lib/promethee/rails/version.rb +1 -1
  31. metadata +6 -4
  32. data/app/views/promethee/utils/_identifier.html.erb +0 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 91830eaaee60dc9cdb4af383cbf4d178b8e5bdab
4
- data.tar.gz: 215c5abb1339a1cfcb6f50ffd191c520f3721885
3
+ metadata.gz: 1ccb914975b52c26fdab25010930c298bde59c98
4
+ data.tar.gz: facb91d0c73e987d34392813ff2a6e38e166e001
5
5
  SHA512:
6
- metadata.gz: e527de89a924b717fd053a5eb88ff8a8472d38442e780bc8b1ffb644a835daafa2cb9dc9d7aeb65eb3f46907969608b72d616ea95c945509024a410f54c40d67
7
- data.tar.gz: b3f65abe05e00af06d25d2573578bfdf28bd2e26e30f57226a4e4bda111a0c0d87a08c43e68983ca2d324ff25fcda15e150b46c2f9f1a2482868901814a99675
6
+ metadata.gz: 8239f1b92dc3aab19341ec7c119201465c5c710453c570fe0921498a159fcb95e796b1ec2005eece167b8ccf7d72898e59474fe6cd255ccb99488872baf1e17b
7
+ data.tar.gz: 7d3c31e91b58d159bbda3d20f32cf1b80cf5ef953a6203198f93fd197e3eaef8880f9a3fac0ea48daa6558a11f7dafc52f11f683252b82bd4cae2f0f71599dc1
@@ -22,15 +22,25 @@ var promethee = angular
22
22
  <% end %>
23
23
 
24
24
  <script type="text/javascript">
25
- promethee.controller('PrometheeController', ['$scope', 'summernoteConfig', 'presets', 'identifier', 'Upload', function($scope, summernoteConfig, presets, identifier, Upload) {
25
+ promethee.controller('PrometheeController', ['$scope', 'summernoteConfig', 'presets', '$filter', function($scope, summernoteConfig, presets, $filter) {
26
+
27
+ $scope.generateIdentifier = function() {
28
+ // https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
29
+ function s4() {
30
+ return Math.floor((1 + Math.random()) * 0x10000)
31
+ .toString(16)
32
+ .substring(1);
33
+ }
34
+ return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
35
+ }
36
+
26
37
  $scope.data = <%= promethee_data.to_json.html_safe %>;
27
38
 
28
- // Data (TODO use Adder and probably page definition to init)
39
+ // Data (TODO use standard method createComponentFromDefinition)
29
40
  if (typeof $scope.data !== 'object' || $scope.data === null || $scope.data.type !== 'page') {
30
41
  $scope.data = {
31
- id: '',
42
+ id: $scope.generateIdentifier(),
32
43
  type: 'page',
33
- version: 1,
34
44
  attributes: {
35
45
  title: 'New page',
36
46
  description: '',
@@ -41,8 +51,6 @@ promethee.controller('PrometheeController', ['$scope', 'summernoteConfig', 'pres
41
51
  };
42
52
  }
43
53
 
44
- $scope.identifier = identifier;
45
-
46
54
  $scope.promethee = {
47
55
  data: $scope.data,
48
56
  definitions: [],
@@ -53,30 +61,29 @@ promethee.controller('PrometheeController', ['$scope', 'summernoteConfig', 'pres
53
61
  fullscreen: true
54
62
  };
55
63
 
56
- $scope.upload = function (file, component, store) {
57
- if (file == undefined) {
58
- return;
59
- }
64
+ $scope.findDefinitionByType = function(type) {
65
+ return $filter('filter')($scope.promethee.definitions, {'data':{'type':type}})[0];
66
+ }
67
+
68
+ $scope.addComponentByType = function(type, target, index = -1) {
69
+ var definition = $scope.findDefinitionByType(type);
70
+ $scope.addComponent(definition, target, index);
71
+ }
60
72
 
61
- if (store === undefined) {
62
- store = component.attributes;
73
+ $scope.addComponent = function(definition, target, index = -1) {
74
+ var component = $scope.createComponentFromDefinition(definition);
75
+ if (index === -1) {
76
+ target.push(component);
77
+ } else {
78
+ target.splice(index, 0, component);
63
79
  }
80
+ }
64
81
 
65
- $scope.promethee.inspected = component;
66
- Upload.upload({
67
- url: '<%= promethee_active_storage_create_path %>',
68
- data: { file: file },
69
- headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }
70
- }).then(function (resp) {
71
- store.blob = resp.data;
72
- $scope.upload_error = undefined;
73
- }, function (resp) {
74
- $scope.upload_error = "An error occured (error " + resp.status + ": " + resp.statusText + ")";
75
- }, function (evt) {
76
- var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
77
- $scope.upload_progress = progressPercentage;
78
- });
79
- };
82
+ $scope.createComponentFromDefinition = function(definition) {
83
+ var component = angular.copy(definition.data);
84
+ component.id = $scope.generateIdentifier();
85
+ return component;
86
+ }
80
87
 
81
88
  $scope.inspect = function(component, event) {
82
89
  if(event.target.closest('.promethee-edit__component') === event.currentTarget) {
@@ -162,6 +169,9 @@ promethee.controller('PrometheeController', ['$scope', 'summernoteConfig', 'pres
162
169
 
163
170
  <div class="promethee-edit" ng-show="promethee.fullscreen">
164
171
  <input type="hidden" name="page[data]" id="page_data" value="{{promethee.data}}" />
172
+ <div class="upload__modal" ng-show="upload.running">
173
+
174
+ </div>
165
175
  <nav class="navbar navbar-default promethee-edit__navbar" ng-class="{'navbar-fixed-top': promethee.fullscreen }">
166
176
  <div class="container-fluid">
167
177
  <div class="navbar-header promethee-edit__icon">
@@ -2,8 +2,9 @@
2
2
  init = <<~JAVASCRIPT
3
3
  promethee.definitions.push({
4
4
  name: 'Aside',
5
- icon: #{render('promethee/components/aside/icon').to_json.html_safe},
5
+ icon: #{ promethee_component_render_icon 'aside' },
6
6
  position: 30,
7
+ library: true,
7
8
  data: {
8
9
  type: 'aside',
9
10
  attributes: {
@@ -16,5 +17,4 @@
16
17
  })
17
18
  JAVASCRIPT
18
19
  %>
19
-
20
- <%= content_tag :div, nil, 'ng-init': init %>
20
+ <div ng-init="<%= init %>"></div>
@@ -2,8 +2,9 @@
2
2
  init = <<~JAVASCRIPT
3
3
  promethee.definitions.push({
4
4
  name: 'Collection',
5
- icon: #{render('promethee/components/collection/icon').to_json.html_safe},
5
+ icon: #{ promethee_component_render_icon 'collection' },
6
6
  position: 20,
7
+ library: true,
7
8
  data: {
8
9
  type: 'collection',
9
10
  attributes: {
@@ -14,5 +15,4 @@
14
15
  })
15
16
  JAVASCRIPT
16
17
  %>
17
-
18
- <%= content_tag :div, nil, 'ng-init': init %>
18
+ <div ng-init="<%= init %>"></div>
@@ -30,7 +30,7 @@
30
30
  </script>
31
31
 
32
32
  <script>
33
- promethee.controller('CollectionInspectorController', ['$scope', 'identifier', function($scope, identifier) {
33
+ promethee.controller('CollectionInspectorController', ['$scope', function($scope) {
34
34
  var availableComponents = ['image', 'video'];
35
35
 
36
36
  $scope.itemDefinitions = $scope.promethee.definitions.filter(function(definition) {
@@ -43,7 +43,7 @@
43
43
 
44
44
  $scope.addItem = function(definition) {
45
45
  var item = JSON.parse(JSON.stringify(definition.data));
46
- item.id = identifier.generate();
46
+ item.id = $scope.generateIdentifier();
47
47
 
48
48
  $scope.promethee.inspected.children.push(item);
49
49
  }
@@ -2,8 +2,9 @@
2
2
  init = <<~JAVASCRIPT
3
3
  promethee.definitions.push({
4
4
  name: 'Column',
5
- icon: #{render('promethee/components/column/icon').to_json.html_safe},
6
- position: -1,
5
+ icon: #{ promethee_component_render_icon 'column' },
6
+ position: 0,
7
+ library: false,
7
8
  data: {
8
9
  type: 'column',
9
10
  attributes: {
@@ -15,5 +16,4 @@
15
16
  })
16
17
  JAVASCRIPT
17
18
  %>
18
-
19
- <%= content_tag :div, nil, 'ng-init': init %>
19
+ <div ng-init="<%= init %>"></div>
@@ -7,7 +7,7 @@
7
7
  col-md-offset-{{component.attributes.offset}}">
8
8
  <div class="promethee-edit__component__inner">
9
9
  <%= render 'promethee/edit/move.remove' %>
10
- <div class="header">Column</div>
10
+ <div class="header">Column {{$index + 1}}</div>
11
11
  <ng-include src="'promethee/move/components'"></ng-include>
12
12
  <pre class="hidden">{{component.attributes.search = concatenateChildrenSearch(component)}}</pre>
13
13
  <div
@@ -2,12 +2,13 @@
2
2
  init = <<~JAVASCRIPT
3
3
  promethee.definitions.push({
4
4
  name: 'Cover',
5
- icon: #{render('promethee/components/cover/icon').to_json.html_safe},
5
+ icon: #{ promethee_component_render_icon 'cover' },
6
6
  position: 10,
7
+ library: true,
7
8
  data: {
8
9
  type: 'cover',
9
10
  attributes: {
10
- blob: {
11
+ image: {
11
12
  id: undefined,
12
13
  name: ''
13
14
  },
@@ -19,5 +20,4 @@
19
20
  })
20
21
  JAVASCRIPT
21
22
  %>
22
-
23
- <%= content_tag :div, nil, 'ng-init': init %>
23
+ <div ng-init="<%= init %>"></div>
@@ -1,13 +1,5 @@
1
1
  <script type="text/ng-template" id="promethee/components/cover/edit/inspect">
2
- <div class="form-group" ngf-drop="upload($file, promethee.inspected)" ngf-pattern="'.jpg,.jpeg,.png,.gif'">
3
- <label class="label-control">Image</label>
4
- <p>{{promethee.inspected.attributes.blob.name}}</p>
5
- <div class="button btn btn-default" ngf-select="upload($file, promethee.inspected)" ngf-accept="'.jpg,.jpeg,.png,.gif'" class="drop-box">Select an image</div>
6
- <div class="progress" ng-show="upload_progress != undefined && upload_progress != 0 && upload_progress != 100">
7
- <div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: {{upload_progress}}%"></div>
8
- </div>
9
- <div class="alert alert-danger" ng-show="upload_error">{{upload_error}}</div>
10
- </div>
2
+ <promethee-uploader ng-model="promethee.inspected.attributes.image" label="Image" limits="'.jpg,.jpeg,.png,.gif'"></promethee-uploader>
11
3
 
12
4
  <div class="form-group">
13
5
  <label class="label-control">Surtitle</label>
@@ -2,9 +2,7 @@
2
2
  <%= render 'promethee/edit/move.header', type: 'cover' %>
3
3
  <div class=" promethee-edit__wrapper
4
4
  promethee-edit__cover-content"
5
- ngf-drop="upload($file, component)"
6
- ngf-pattern="'.jpg,.jpeg,.png,.gif'"
7
- style="background-image:url('{{ component.attributes.blob.id ? '/promethee/blob/' + component.attributes.blob.id : '' }}')">
5
+ style="background-image:url('{{ component.attributes.image.id ? '/promethee/blob/' + component.attributes.image.id : '' }}')">
8
6
  <hgroup>
9
7
  <h2 class="surtitle">{{component.attributes.surtitle}}</h2>
10
8
  <h1>{{component.attributes.title}}</h1>
@@ -4,7 +4,7 @@
4
4
 
5
5
  <div class="row">
6
6
  <div class="col-md-6">
7
- <img ng-src="/promethee/blob/{{component.attributes.blob.id}}" class="img-responsive">
7
+ <img ng-src="/promethee/blob/{{component.attributes.image.id}}" class="img-responsive">
8
8
  </div>
9
9
  </div>
10
10
 
@@ -1,7 +1,7 @@
1
1
  <%
2
- blob_data = component[:attributes][:blob]
3
- if blob_data && blob_data[:id]
4
- blob = ActiveStorage::Blob.find blob_data[:id]
2
+ image_data = component[:attributes][:image]
3
+ if image_data && image_data[:id]
4
+ blob = ActiveStorage::Blob.find image_data[:id]
5
5
  end
6
6
 
7
7
  surtitle = component[:attributes][:surtitle].to_s
@@ -2,12 +2,13 @@
2
2
  init = <<~JAVASCRIPT
3
3
  promethee.definitions.push({
4
4
  name: 'Image',
5
- icon: #{render('promethee/components/image/icon').to_json.html_safe},
5
+ icon: #{ promethee_component_render_icon 'image' },
6
6
  position: 2,
7
+ library: true,
7
8
  data: {
8
9
  type: 'image',
9
10
  attributes: {
10
- blob: {
11
+ image: {
11
12
  id: undefined,
12
13
  name: ''
13
14
  },
@@ -18,5 +19,4 @@
18
19
  })
19
20
  JAVASCRIPT
20
21
  %>
21
-
22
- <%= content_tag :div, nil, 'ng-init': init %>
22
+ <div ng-init="<%= init %>"></div>
@@ -1,13 +1,6 @@
1
1
  <script type="text/ng-template" id="promethee/components/image/edit/inspect">
2
- <div class="form-group" ngf-drop="upload($file, promethee.inspected)" ngf-pattern="'.jpg,.jpeg,.png,.gif'">
3
- <label class="label-control">Image</label>
4
- <p>{{promethee.inspected.attributes.blob.name}}</p>
5
- <div class="button btn btn-default" ngf-select="upload($file, promethee.inspected)" ngf-accept="'.jpg,.jpeg,.png,.gif'" class="drop-box">Select an image</div>
6
- <div class="progress" ng-show="upload_progress != undefined && upload_progress != 0 && upload_progress != 100">
7
- <div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: {{upload_progress}}%"></div>
8
- </div>
9
- <div class="alert alert-danger" ng-show="upload_error">{{upload_error}}</div>
10
- </div>
2
+
3
+ <promethee-uploader ng-model="promethee.inspected.attributes.image" label="Image" limits="'.jpg,.jpeg,.png,.gif'"></promethee-uploader>
11
4
 
12
5
  <div class="form-group">
13
6
  <label class="label-control">Caption</label>
@@ -1,17 +1,13 @@
1
1
  <script type="text/ng-template" id="promethee/components/image/edit/move">
2
2
  <%= render 'promethee/edit/move.header', type: 'image' %>
3
- <figure ng-show="component.attributes.blob.id">
4
- <img ng-src="/promethee/blob/{{component.attributes.blob.id}}"
5
- ngf-drop="upload($file, component)"
6
- ngf-pattern="'.jpg,.jpeg,.png,.gif'"
3
+ <figure ng-show="component.attributes.image.id">
4
+ <img ng-src="/promethee/blob/{{component.attributes.image.id}}"
7
5
  class="img-responsive">
8
6
  <figcaption ng-show="component.attributes.caption">{{component.attributes.caption}}</figcaption>
9
7
  </figure>
10
- <div ng-hide="component.attributes.blob.id">
8
+ <div ng-hide="component.attributes.image.id">
11
9
  <p ng-hide="editing"
12
- ngf-drop="upload($file, component)"
13
- ngf-pattern="'.jpg,.jpeg,.png,.gif'"
14
- class="text-center text-empty">Click or drop file to set the image</p>
10
+ class="text-center text-empty">Click to set the image</p>
15
11
  </div>
16
12
  <pre class="hidden">{{component.attributes.search = (component.attributes.caption + ' ' + component.attributes.alt)}}</pre>
17
13
  </div>
@@ -4,7 +4,7 @@
4
4
 
5
5
  <div class="row">
6
6
  <div class="col-md-6">
7
- <img ng-src="/promethee/blob/{{component.attributes.blob.id}}" class="img-responsive">
7
+ <img ng-src="/promethee/blob/{{component.attributes.image.id}}" class="img-responsive">
8
8
  </div>
9
9
  </div>
10
10
 
@@ -1,7 +1,7 @@
1
1
  <%
2
- blob_data = component[:attributes][:blob]
3
- if blob_data && blob_data[:id]
4
- blob = ActiveStorage::Blob.find blob_data[:id]
2
+ image_data = component[:attributes][:image]
3
+ if image_data && image_data[:id]
4
+ blob = ActiveStorage::Blob.find image_data[:id]
5
5
  end
6
6
 
7
7
  alt = component[:attributes][:alt]
@@ -0,0 +1,21 @@
1
+ <%
2
+ init = <<~JAVASCRIPT
3
+ promethee.definitions.push({
4
+ name: 'Page',
5
+ icon: #{ promethee_component_render_icon 'page' },
6
+ position: 0,
7
+ library: false,
8
+ data: {
9
+ type: 'page',
10
+ attributes: {
11
+ title: 'New page',
12
+ description: '',
13
+ stylesheets: '',
14
+ javascripts: ''
15
+ },
16
+ children: []
17
+ }
18
+ })
19
+ JAVASCRIPT
20
+ %>
21
+ <div ng-init="<%= init %>"></div>
@@ -0,0 +1,2 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100">
2
+ </svg>
@@ -2,17 +2,25 @@
2
2
  init = <<~JAVASCRIPT
3
3
  promethee.definitions.push({
4
4
  name: 'Row',
5
- icon: #{render('promethee/components/row/icon').to_json.html_safe},
5
+ icon: #{ promethee_component_render_icon 'row' },
6
6
  position: -2,
7
+ library: true,
7
8
  data: {
8
9
  type: 'row',
9
10
  attributes: {
10
- bgcolor: "transparent"
11
+ bgcolor: "transparent",
12
+ bgimage1: {
13
+ id: undefined,
14
+ name: ''
15
+ },
16
+ bgimage2: {
17
+ id: undefined,
18
+ name: ''
19
+ },
11
20
  },
12
21
  children: []
13
22
  }
14
23
  })
15
24
  JAVASCRIPT
16
25
  %>
17
-
18
- <%= content_tag :div, nil, 'ng-init': init %>
26
+ <div ng-init="<%= init %>"></div>
@@ -1,6 +1,9 @@
1
1
  <script type="text/ng-template" id="promethee/components/row/edit/inspect">
2
2
  <div class="form-group">
3
- No basic option for row.
3
+ <div class="btn btn-default" ng-click="addComponentByType('column', promethee.inspected.children)">Add column</div>
4
+ <ul class="list-unstyled">
5
+ <li ng-repeat="column in promethee.inspected.children">Column {{$index + 1}}</li>
6
+ </ul>
4
7
  </div>
5
8
 
6
9
  <div class="panel panel-default" ng-init="advancedConfigurationOpen = false">
@@ -14,5 +17,8 @@
14
17
  <input ng-model="promethee.inspected.attributes.bgcolor" colorpicker="rgba" class="form-control" type="text" />
15
18
  </div>
16
19
 
20
+ <promethee-uploader ng-model="promethee.inspected.attributes.bgimage1" label="Background Image 1" limits="'.jpg,.jpeg,.png,.gif'"></promethee-uploader>
21
+ <promethee-uploader ng-model="promethee.inspected.attributes.bgimage2" label="Background Image 2"></promethee-uploader>
22
+
17
23
  </div>
18
24
  </script>
@@ -1,7 +1,7 @@
1
1
  <script type="text/ng-template" id="promethee/components/row/edit/move">
2
2
  <%= render 'promethee/edit/move.header', type: 'row' %>
3
3
  <div class="header">Row</div>
4
- <div class="row">
4
+ <div class="row" style="background-image:url('{{ component.attributes.blob.id ? '/promethee/blob/' + component.attributes.blob.id : '' }}')">
5
5
  <ng-include src="'promethee/move/components'"></ng-include>
6
6
  <pre class="hidden">{{component.attributes.search = concatenateChildrenSearch(component)}}</pre>
7
7
  </div>
@@ -2,8 +2,9 @@
2
2
  init = <<~JAVASCRIPT
3
3
  promethee.definitions.push({
4
4
  name: 'Slider',
5
- icon: #{render('promethee/components/slider/icon').to_json.html_safe},
5
+ icon: #{ promethee_component_render_icon 'slider' },
6
6
  position: 15,
7
+ library: true,
7
8
  data: {
8
9
  type: 'slider',
9
10
  attributes: {
@@ -14,5 +15,4 @@
14
15
  })
15
16
  JAVASCRIPT
16
17
  %>
17
-
18
- <%= content_tag :div, nil, 'ng-init': init %>
18
+ <div ng-init="<%= init %>"></div>
@@ -33,7 +33,7 @@
33
33
  </script>
34
34
 
35
35
  <script>
36
- promethee.controller('SliderInspectorController', ['$scope', 'identifier', function($scope, identifier) {
36
+ promethee.controller('SliderInspectorController', ['$scope', function($scope) {
37
37
  var availableComponents = ['image', 'video'];
38
38
 
39
39
  $scope.itemDefinitions = $scope.promethee.definitions.filter(function(definition) {
@@ -46,7 +46,7 @@
46
46
 
47
47
  $scope.addItem = function(definition) {
48
48
  var item = JSON.parse(JSON.stringify(definition.data));
49
- item.id = identifier.generate();
49
+ item.id = $scope.generateIdentifier();
50
50
 
51
51
  $scope.promethee.inspected.children.push(item);
52
52
  }
@@ -2,8 +2,9 @@
2
2
  init = <<~JAVASCRIPT
3
3
  promethee.definitions.push({
4
4
  name: 'Text',
5
- icon: #{render('promethee/components/text/icon').to_json.html_safe},
5
+ icon: #{ promethee_component_render_icon 'text' },
6
6
  position: 1,
7
+ library: true,
7
8
  data: {
8
9
  type: 'text',
9
10
  attributes: {
@@ -13,5 +14,4 @@
13
14
  })
14
15
  JAVASCRIPT
15
16
  %>
16
-
17
- <%= content_tag :div, nil, 'ng-init': init %>
17
+ <div ng-init="<%= init %>"></div>
@@ -2,8 +2,9 @@
2
2
  init = <<~JAVASCRIPT
3
3
  promethee.definitions.push({
4
4
  name: 'Video',
5
- icon: #{render('promethee/components/video/icon').to_json.html_safe},
5
+ icon: #{ promethee_component_render_icon 'video' },
6
6
  position: 3,
7
+ library: true,
7
8
  data: {
8
9
  type: 'video',
9
10
  attributes: {
@@ -13,5 +14,4 @@
13
14
  })
14
15
  JAVASCRIPT
15
16
  %>
16
-
17
- <%= content_tag :div, nil, 'ng-init': init %>
17
+ <div ng-init="<%= init %>"></div>
@@ -57,7 +57,7 @@ promethee
57
57
  }
58
58
  }
59
59
  })
60
- .directive('droppable', ['$compile', 'presets', 'identifier', function($compile, presets, identifier) {
60
+ .directive('droppable', ['$compile', 'presets', function($compile, presets) {
61
61
  return {
62
62
  restrict: 'A',
63
63
  link: function(scope, element, attrs) {
@@ -79,7 +79,7 @@ promethee
79
79
  var component;
80
80
  for(var i = 0; i < components.length; i++) {
81
81
  component = components[i];
82
- component.id = identifier.generate();
82
+ component.id = scope.generateIdentifier();
83
83
  if(Array.isArray(component.children)) provideIdentifiers(component.children);
84
84
  }
85
85
 
@@ -100,7 +100,7 @@ promethee
100
100
  if (draggedFromLibrary) {
101
101
  var definition = angular.element(ui.draggable).scope().definition;
102
102
  var component = angular.copy(definition.data);
103
- component.id = identifier.generate();
103
+ component.id = scope.generateIdentifier();
104
104
  } else {
105
105
  var draggedFromIndex = parseInt(ui.draggable[0].getAttribute('data-list-index'));
106
106
  // console.log('dragged', draggedFromList, draggedFromIndex);
@@ -134,7 +134,7 @@ promethee
134
134
  <div class="promethee-edit__library-header">Library</div>
135
135
  <div class="promethee-edit__library-content">
136
136
  <div class="row">
137
- <div ng-repeat="definition in promethee.definitions | orderBy:'position'"
137
+ <div ng-repeat="definition in promethee.definitions | filter:{library:true} | orderBy:'position'"
138
138
  class="col-md-12 col-lg-6">
139
139
  <div addable
140
140
  class="promethee-edit__library__item"
@@ -167,7 +167,6 @@ promethee
167
167
  {{promethee.inspected.type}}
168
168
  </div>
169
169
  <div class="promethee-edit__inspect-content">
170
- <ng-include src="'promethee/components/page/edit/inspect'" ng-show="promethee.inspected.type == 'page'"></ng-include>
171
170
  <div ng-repeat="definition in promethee.definitions | orderBy:'position'">
172
171
  <ng-include src="'promethee/components/' + definition.data.type + '/edit/inspect'"
173
172
  ng-show="promethee.inspected.type == definition.data.type"></ng-include>
@@ -0,0 +1,51 @@
1
+ <script type="text/ng-template" id="promethee_uploader">
2
+ <div class="form-group" ngf-drop="prometheeUploader.upload($file)" ngf-pattern="{{limits || ''}}">
3
+ <label class="label-control">{{label}}</label>
4
+ <p>{{ngModel.name}}</p>
5
+ <div class="button btn btn-default" ngf-select="prometheeUploader.upload($file, ngModel)" ngf-accept="{{limits || ''}}" class="drop-box">Select an image</div>
6
+ <div class="progress" ng-show="prometheeUploader.upload_progress != undefined && prometheeUploader.upload_progress != 0 && prometheeUploader.upload_progress != 100">
7
+ <div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: {{prometheeUploader.upload_progress}}%"></div>
8
+ </div>
9
+ <div class="alert alert-danger" ng-show="upload_error">{{upload_error}}</div>
10
+ </div>
11
+ </script>
12
+
13
+ <script>
14
+ promethee.directive('prometheeUploader', ['Upload', function(Upload) {
15
+ return {
16
+ restrict: 'E',
17
+ scope: {
18
+ ngModel: '=',
19
+ label: '@',
20
+ limits: '@',
21
+ },
22
+ templateUrl: 'promethee_uploader',
23
+ controller: function($scope) {
24
+ var self = this;
25
+ this.upload_error = '';
26
+ this.upload_progress = 0;
27
+
28
+ this.upload = function (file) {
29
+ if (file == undefined) return;
30
+ Upload.upload({
31
+ url: '<%= promethee_active_storage_create_path %>',
32
+ data: { file: file },
33
+ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }
34
+ }).then(function (resp) {
35
+ $scope.ngModel = resp.data;
36
+ self.upload_error = undefined;
37
+ self.upload_error = "une erreur grave !";
38
+ }, function (resp) {
39
+ self.upload_error = "An error occured (error " + resp.status + ": " + resp.statusText + ")";
40
+ }, function (evt) {
41
+ var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
42
+ self.upload_progress = progressPercentage;
43
+ });
44
+ };
45
+
46
+ },
47
+ controllerAs: 'prometheeUploader'
48
+ }
49
+ }]);
50
+
51
+ </script>
@@ -18,6 +18,10 @@ module Promethee::Rails::Helper
18
18
  promethee_partials_for 'components/*/_edit.*.html.erb'
19
19
  end
20
20
 
21
+ def promethee_component_render_icon(icon)
22
+ render("promethee/components/#{icon}/icon.svg").to_json.html_safe
23
+ end
24
+
21
25
  def promethee_util_partials
22
26
  promethee_partials_for 'utils/_*.html.erb'
23
27
  end
@@ -1,5 +1,5 @@
1
1
  module Promethee
2
2
  module Rails
3
- VERSION = '1.6.10'
3
+ VERSION = '1.6.11'
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: 1.6.10
4
+ version: 1.6.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julien Dargelos
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2018-06-08 00:00:00.000000000 Z
16
+ date: 2018-06-12 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: rails
@@ -214,8 +214,10 @@ files:
214
214
  - app/views/promethee/components/image/_icon.svg
215
215
  - app/views/promethee/components/image/_localize.html.erb
216
216
  - app/views/promethee/components/image/_show.html.erb
217
+ - app/views/promethee/components/page/_edit.define.html.erb
217
218
  - app/views/promethee/components/page/_edit.inspect.html.erb
218
219
  - app/views/promethee/components/page/_edit.move.html.erb
220
+ - app/views/promethee/components/page/_icon.svg
219
221
  - app/views/promethee/components/page/_localize.html.erb
220
222
  - app/views/promethee/components/page/_show.html.erb
221
223
  - app/views/promethee/components/row/_edit.define.html.erb
@@ -251,9 +253,9 @@ files:
251
253
  - app/views/promethee/preview.html.erb
252
254
  - app/views/promethee/show/_component.html.erb
253
255
  - app/views/promethee/show/_components.html.erb
256
+ - app/views/promethee/templates/_uploader.html.erb
254
257
  - app/views/promethee/utils/_html-safe.html.erb
255
258
  - app/views/promethee/utils/_humanize.html.erb
256
- - app/views/promethee/utils/_identifier.html.erb
257
259
  - app/views/promethee/utils/_number-of-characters.html.erb
258
260
  - app/views/promethee/utils/_number-of-words.html.erb
259
261
  - app/views/promethee/utils/_summernote-config.html.erb
@@ -378,7 +380,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
378
380
  version: '0'
379
381
  requirements: []
380
382
  rubyforge_project:
381
- rubygems_version: 2.6.11
383
+ rubygems_version: 2.6.13
382
384
  signing_key:
383
385
  specification_version: 4
384
386
  summary: Bring fire to your page
@@ -1,19 +0,0 @@
1
- <script>
2
- // Why doesn't this method just live in the adder controller ?
3
- // Because the row component also need a special access to it in order to create cols with an id. So we make it global to the application.
4
- promethee.provider('identifier', function() {
5
- this.$get = function() {
6
- return {
7
- generate: function() {
8
- // https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
9
- function s4() {
10
- return Math.floor((1 + Math.random()) * 0x10000)
11
- .toString(16)
12
- .substring(1);
13
- }
14
- return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
15
- }
16
- };
17
- };
18
- });
19
- </script>