promethee 1.2.2 → 1.2.3

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
  SHA1:
3
- metadata.gz: 837722cd93470c7d892212e0095fcf9306410778
4
- data.tar.gz: 0aab2bd6e43bb0d21728ba624f4b6e2d03173713
3
+ metadata.gz: a0dc296374c813a4bcc4a553fc5db6b8dfbb0713
4
+ data.tar.gz: f1a82615609bc4c13c08405838b331aaceb455f4
5
5
  SHA512:
6
- metadata.gz: f16550b08f9412db6a241907ade48f78cfe7c48f447e6caa4cd9c65ed718f6f84788a823993f77c5ca50221c9256e279e314ff26422070f8eaec985c78caf94a
7
- data.tar.gz: d7661c8cc03048409b6f2af5c02b8518c5f328371456257b08dcdbf34ec0b63feb3a33ada7e9a2f343c3482954c6ad52c56f27233aa37666b9c9dd1cfba1f232
6
+ metadata.gz: f8044bfca87fef65222f683a39ae6cb843c90c270ac3c9b8532b6b9e47070c3b043b386f107ec33edcc1e4ec754a67b84f11f4344a34543a0300aef6562f32ef
7
+ data.tar.gz: 20a8b093c8f55c820f465be847d73030aa587e4111e0f983ced8eb93a8ba5564a1a20aa403761bffe334190d0844ed15e22e96e9a7111056050f0abd5e7e8358
@@ -1,6 +1,112 @@
1
1
  <%
2
2
  promethee_data = Promethee::Data.new master_data
3
3
  %>
4
+
5
+ <script type="text/javascript">
6
+ var promethee = angular
7
+ .module('Promethee', ['summernote', 'ngAnimate'])
8
+ .value('definitions', [])
9
+ .filter('htmlSafe', ['$sce', function($sce) {
10
+ return function(val) {
11
+ return $sce.trustAsHtml(val);
12
+ };
13
+ }])
14
+ .filter('urlSafe', ['$sce', function($sce) {
15
+ return function(val) {
16
+ return $sce.trustAsResourceUrl(val);
17
+ };
18
+ }])
19
+ .filter('humanize', function() {
20
+ return function(val) {
21
+ val = (val + '').replace(/_/g, ' ').replace(/([A-Z])/g, ' $1').replace(/\s\s+/, ' ').trim();
22
+ return val[0].toUpperCase() + val.substring(1).toLowerCase();
23
+ };
24
+ })
25
+ .filter('textContentFromHTML', function() {
26
+ return function(val, distinctParagraphs) {
27
+ var element = document.createElement('div');
28
+ element.innerHTML = val;
29
+
30
+ if(distinctParagraphs === 'distinctParagraphs') {
31
+ var paragraphs = element.querySelectorAll('p');
32
+ for(var i = 0; i < paragraphs.length; i++) paragraphs[i].textContent += ' ';
33
+ }
34
+
35
+ return element.textContent;
36
+ }
37
+ })
38
+ .filter('numberOfCharacters', function() {
39
+ return function(val) {
40
+ return val.length;
41
+ };
42
+ })
43
+ .filter('numberOfWords', function() {
44
+ return function(val) {
45
+ var words = val
46
+ .replace(/\bhttps?:\/\/[a-z0-9\-\._]+(?:\/[^\s\n\r]+)?/gi, 'a') // A URL is one word
47
+ .replace(/\b[a-z0-9\-\._]+@[a-z0-9\-\._]+\.[a-z0-9\-\._]+\b/gi, 'a') // An email is one word
48
+ .replace(/[^a-z0-9\s\n\r]/gi, ' ')
49
+ .replace(/[\s\n\r]+/g, ' ')
50
+ .trim()
51
+ .split(' ');
52
+
53
+ return words[0] === '' ? 0 : words.length;
54
+ };
55
+ });
56
+
57
+ promethee.controller('PrometheeController', ['$scope', function($scope) {
58
+
59
+ // Data (TODO use Adder and probably page definition to init)
60
+ if ($scope.data === null || $scope.data === '') {
61
+ $scope.data = {
62
+ id: '',
63
+ type: 'page',
64
+ version: 1,
65
+ children: []
66
+ };
67
+ }
68
+
69
+ $scope.promethee = {
70
+ data: $scope.data,
71
+ inspected: null,
72
+ mode: 'write',
73
+ //mode: 'move',
74
+ preview: 'desktop',
75
+ fullscreen: false
76
+ };
77
+
78
+ $scope.inspect = function(component, event) {
79
+ $scope.promethee.inspected = component;
80
+ event.stopPropagation();
81
+ }
82
+
83
+ $scope.enablePreview = function() {
84
+ if (this.promethee.mode === 'preview') return;
85
+ this.promethee.mode = 'preview';
86
+
87
+ var form = document.createElement('form');
88
+ document.body.appendChild(form);
89
+ form.method = 'POST';
90
+ form.action = '/promethee/preview';
91
+ form.target = 'preview';
92
+
93
+ var input = document.createElement('input');
94
+ input.type = 'text';
95
+ input.value = JSON.stringify($scope.promethee.data);
96
+ input.name = 'data';
97
+ form.appendChild(input);
98
+ form.submit();
99
+ document.body.removeChild(form);
100
+ }
101
+
102
+ $scope.remove = function(component, components) {
103
+ var index = components.indexOf(component);
104
+ components.splice(index, 1);
105
+ }
106
+
107
+ }]);
108
+ </script>
109
+
4
110
  <div
5
111
  id="promethee"
6
112
  class="promethee-edit"
@@ -43,4 +149,3 @@ promethee_data = Promethee::Data.new master_data
43
149
  <%= render 'promethee/edit/move' %>
44
150
  <%= render 'promethee/edit/preview' %>
45
151
  </div>
46
-
@@ -1,3 +1,75 @@
1
+
2
+ <script type="text/javascript">
3
+ promethee
4
+ .directive('draggable', function() {
5
+ return {
6
+ restrict:'A',
7
+ link: function(scope, element, attrs) {
8
+ element.draggable({
9
+ revert: true,
10
+ revertDuration: 0,
11
+ scroll: true,
12
+ refreshPositions: true,
13
+ cursor: 'move',
14
+ start: function() {
15
+ var $elementDragged = $(element[0]);
16
+ var type = $elementDragged.data('type');
17
+ $('.promethee-edit__move').addClass('promethee-edit__move--dragging promethee-edit__move--dragging--' + type);
18
+
19
+ // The droppable zone immediately before has no use, it would put the object at the same position
20
+ // FIXME the selector is not correct
21
+ /*
22
+ var $droppableBefore = $elementDragged.prev('.promethee-edit__move__draggable').find('.promethee-edit__move__droppable').last();
23
+ if ($droppableBefore.length === 0) {
24
+ // For the first child, we look for the previous droppable zone
25
+ $droppableBefore = $elementDragged.prev('.promethee-edit__move__droppable');
26
+ }
27
+ $droppableBefore.addClass('promethee-edit__move__droppable--hidden');
28
+ */
29
+ },
30
+ stop: function() {
31
+ var $elementDragged = $(element[0]);
32
+ var type = $elementDragged.data('type');
33
+ $('.promethee-edit__move').removeClass('promethee-edit__move--dragging promethee-edit__move--dragging--' + type);
34
+ // $('.promethee-edit__move__droppable').removeClass('promethee-edit__move__droppable--hidden');
35
+ }
36
+ });
37
+ }
38
+ }
39
+ })
40
+ .directive('droppable', function($compile) {
41
+ return {
42
+ restrict: 'A',
43
+ link: function(scope, element, attrs) {
44
+ element.droppable({
45
+ tolerance: 'pointer',
46
+ drop: function(event, ui) {
47
+ var draggedFromList = angular.element(ui.draggable).parent().scope().components;
48
+ var draggedFromIndex = parseInt(ui.draggable[0].getAttribute('data-index'));
49
+ // console.log('dragged', draggedFromList, draggedFromIndex);
50
+ draggedFromList.splice(draggedFromIndex, 1);
51
+
52
+ var component = angular.element(ui.draggable).scope().component;
53
+ var droppedToList = angular.element(this).scope().components;
54
+ var droppedToIndex = parseInt(this.getAttribute('data-index'));
55
+ if (draggedFromList == droppedToList) {
56
+ // The object we dragged was removed from the list
57
+ if (draggedFromIndex < droppedToIndex) {
58
+ // It was before the dropped index, so removing it changed the index
59
+ droppedToIndex -= 1;
60
+ }
61
+ }
62
+ // console.log('dropped', component, droppedToList, droppedToIndex);
63
+ droppedToList.splice(droppedToIndex, 0, component);
64
+
65
+ scope.$apply();
66
+ }
67
+ });
68
+ }
69
+ }
70
+ });
71
+ </script>
72
+
1
73
  <div class="promethee-edit__move" ng-show="promethee.mode == 'move'">
2
74
  <div class="promethee-edit__move__columns row">
3
75
  <% 12.times do %>
@@ -1,3 +1,38 @@
1
+ <script type="text/javascript">
2
+ promethee.controller('AdderController', ['$scope', '$rootScope', 'definitions', function($scope, $rootScope, definitions) {
3
+
4
+ $scope.adding = false;
5
+ $scope.childrenToAddTo = null;
6
+ $scope.definitions = definitions;
7
+
8
+ $scope.close = function() {
9
+ $scope.adding = false;
10
+ $scope.addingToChildren = null;
11
+ };
12
+
13
+ $scope.pushComponent = function(definition) {
14
+ var definition = angular.copy(definition.data);
15
+ definition.id = $scope.createIdentifier();
16
+ $scope.childrenToAddTo.push(definition);
17
+ $scope.close();
18
+ };
19
+
20
+ $rootScope.addComponentTo = function(components) {
21
+ $scope.adding = true;
22
+ $scope.childrenToAddTo = components;
23
+ };
24
+
25
+ // https://gist.github.com/gordonbrander/2230317
26
+ $scope.createIdentifier = function () {
27
+ // Math.random should be unique because of its seeding algorithm.
28
+ // Convert it to base 36 (numbers + letters), and grab the first 9 characters
29
+ // after the decimal.
30
+ return '' + Math.random().toString(36).substr(2, 9);
31
+ };
32
+
33
+ }])
34
+ </script>
35
+
1
36
  <div class="promethee-edit__write" ng-show="promethee.mode == 'write'">
2
37
  <div ng-class="{ 'container-fluid': promethee.fullscreen }">
3
38
  <div ng-init="component = promethee.data"
@@ -1,5 +1,5 @@
1
1
  module Promethee
2
2
  module Rails
3
- VERSION = '1.2.2'
3
+ VERSION = '1.2.3'
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.2.2
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julien Dargelos
@@ -225,8 +225,6 @@ files:
225
225
  - app/assets/images/icon-promethee.svg
226
226
  - app/assets/images/logo-promethee-horizontal.svg
227
227
  - app/assets/images/logo-promethee-vertical.svg
228
- - app/assets/javascripts/promethee-edit.js
229
- - app/assets/javascripts/promethee.js
230
228
  - app/assets/stylesheets/promethee-edit.sass
231
229
  - app/assets/stylesheets/promethee-edit/_move.sass
232
230
  - app/assets/stylesheets/promethee-edit/_preview.sass
@@ -1,211 +0,0 @@
1
- var promethee = angular
2
- .module('Promethee', ['summernote', 'ngAnimate'])
3
- .value('definitions', [])
4
- // What does the next 3 lines do? Why?
5
- .config(function($rootScopeProvider) {
6
- $rootScopeProvider.digestTtl(20);
7
- })
8
- .filter('htmlSafe', ['$sce', function($sce) {
9
- return function(val) {
10
- return $sce.trustAsHtml(val);
11
- };
12
- }])
13
- .filter('urlSafe', ['$sce', function($sce) {
14
- return function(val) {
15
- return $sce.trustAsResourceUrl(val);
16
- };
17
- }])
18
- .filter('humanize', function() {
19
- return function(val) {
20
- val = (val + '').replace(/_/g, ' ').replace(/([A-Z])/g, ' $1').replace(/\s\s+/, ' ').trim();
21
- return val[0].toUpperCase() + val.substring(1).toLowerCase();
22
- };
23
- })
24
- .filter('textContentFromHTML', function() {
25
- return function(val, distinctParagraphs) {
26
- var element = document.createElement('div');
27
- element.innerHTML = val;
28
-
29
- if(distinctParagraphs === 'distinctParagraphs') {
30
- var paragraphs = element.querySelectorAll('p');
31
- for(var i = 0; i < paragraphs.length; i++) paragraphs[i].textContent += ' ';
32
- }
33
-
34
- return element.textContent;
35
- }
36
- })
37
- .filter('numberOfCharacters', function() {
38
- return function(val) {
39
- return val.length;
40
- };
41
- })
42
- .filter('numberOfWords', function() {
43
- return function(val) {
44
- var words = val
45
- .replace(/\bhttps?:\/\/[a-z0-9\-\._]+(?:\/[^\s\n\r]+)?/gi, 'a') // A URL is one word
46
- .replace(/\b[a-z0-9\-\._]+@[a-z0-9\-\._]+\.[a-z0-9\-\._]+\b/gi, 'a') // An email is one word
47
- .replace(/[^a-z0-9\s\n\r]/gi, ' ')
48
- .replace(/[\s\n\r]+/g, ' ')
49
- .trim()
50
- .split(' ');
51
-
52
- return words[0] === '' ? 0 : words.length;
53
- };
54
- });
55
-
56
- promethee.controller('PrometheeController', ['$scope', 'definitions', '$http', function($scope, definitions, $http) {
57
-
58
- // Data (TODO use Adder and probably page definition to init)
59
- if($scope.data === null || $scope.data === '') {
60
- $scope.data = {
61
- id: '',
62
- type: 'page',
63
- version: 1,
64
- children: []
65
- };
66
- }
67
-
68
- $scope.promethee = {
69
- data: $scope.data,
70
- inspected: null,
71
- mode: 'write',
72
- //mode: 'move',
73
- preview: 'desktop',
74
- fullscreen: false
75
- };
76
-
77
- $scope.inspect = function(component, event) {
78
- $scope.promethee.inspected = component;
79
- event.stopPropagation();
80
- }
81
-
82
- $scope.enablePreview = function() {
83
- if (this.promethee.mode === 'preview') return;
84
- this.promethee.mode = 'preview';
85
-
86
- var form = document.createElement('form');
87
- document.body.appendChild(form);
88
- form.method = 'POST';
89
- form.action = '/promethee/preview';
90
- form.target = 'preview';
91
-
92
- var input = document.createElement('input');
93
- input.type = 'text';
94
- input.value = JSON.stringify($scope.promethee.data);
95
- input.name = 'data';
96
- form.appendChild(input);
97
- form.submit();
98
- document.body.removeChild(form);
99
- }
100
-
101
- $scope.remove = function(component, components) {
102
- var index = components.indexOf(component);
103
- components.splice(index, 1);
104
- }
105
-
106
- }]);
107
-
108
-
109
- promethee.controller('AdderController', ['$scope', '$rootScope', 'definitions', function($scope, $rootScope, definitions) {
110
-
111
- $scope.adding = false;
112
- $scope.childrenToAddTo = null;
113
- $scope.definitions = definitions;
114
-
115
- $scope.close = function() {
116
- $scope.adding = false;
117
- $scope.addingToChildren = null;
118
- };
119
-
120
- $scope.pushComponent = function(definition) {
121
- var definition = angular.copy(definition.data);
122
- definition.id = $scope.createIdentifier();
123
- $scope.childrenToAddTo.push(definition);
124
- $scope.close();
125
- };
126
-
127
- $rootScope.addComponentTo = function(components) {
128
- $scope.adding = true;
129
- $scope.childrenToAddTo = components;
130
- };
131
-
132
- // https://gist.github.com/gordonbrander/2230317
133
- $scope.createIdentifier = function () {
134
- // Math.random should be unique because of its seeding algorithm.
135
- // Convert it to base 36 (numbers + letters), and grab the first 9 characters
136
- // after the decimal.
137
- return '' + Math.random().toString(36).substr(2, 9);
138
- };
139
-
140
- }])
141
-
142
-
143
-
144
- promethee
145
- .directive('draggable', function() {
146
- return {
147
- restrict:'A',
148
- link: function(scope, element, attrs) {
149
- element.draggable({
150
- revert: true,
151
- revertDuration: 0,
152
- scroll: true,
153
- refreshPositions: true,
154
- cursor: 'move',
155
- start: function() {
156
- var $elementDragged = $(element[0]);
157
- var type = $elementDragged.data('type');
158
- $('.promethee-edit__move').addClass('promethee-edit__move--dragging promethee-edit__move--dragging--' + type);
159
-
160
- // The droppable zone immediately before has no use, it would put the object at the same position
161
- // FIXME the selector is not correct
162
- /*
163
- var $droppableBefore = $elementDragged.prev('.promethee-edit__move__draggable').find('.promethee-edit__move__droppable').last();
164
- if ($droppableBefore.length === 0) {
165
- // For the first child, we look for the previous droppable zone
166
- $droppableBefore = $elementDragged.prev('.promethee-edit__move__droppable');
167
- }
168
- $droppableBefore.addClass('promethee-edit__move__droppable--hidden');
169
- */
170
- },
171
- stop: function() {
172
- var $elementDragged = $(element[0]);
173
- var type = $elementDragged.data('type');
174
- $('.promethee-edit__move').removeClass('promethee-edit__move--dragging promethee-edit__move--dragging--' + type);
175
- // $('.promethee-edit__move__droppable').removeClass('promethee-edit__move__droppable--hidden');
176
- }
177
- });
178
- }
179
- }
180
- })
181
- .directive('droppable', function($compile) {
182
- return {
183
- restrict: 'A',
184
- link: function(scope, element, attrs) {
185
- element.droppable({
186
- tolerance: 'pointer',
187
- drop: function(event, ui) {
188
- var draggedFromList = angular.element(ui.draggable).parent().scope().components;
189
- var draggedFromIndex = parseInt(ui.draggable[0].getAttribute('data-index'));
190
- // console.log('dragged', draggedFromList, draggedFromIndex);
191
- draggedFromList.splice(draggedFromIndex, 1);
192
-
193
- var component = angular.element(ui.draggable).scope().component;
194
- var droppedToList = angular.element(this).scope().components;
195
- var droppedToIndex = parseInt(this.getAttribute('data-index'));
196
- if (draggedFromList == droppedToList) {
197
- // The object we dragged was removed from the list
198
- if (draggedFromIndex < droppedToIndex) {
199
- // It was before the dropped index, so removing it changed the index
200
- droppedToIndex -= 1;
201
- }
202
- }
203
- // console.log('dropped', component, droppedToList, droppedToIndex);
204
- droppedToList.splice(droppedToIndex, 0, component);
205
-
206
- scope.$apply();
207
- }
208
- });
209
- }
210
- }
211
- });
File without changes