promethee 1.2.2 → 1.2.3

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