refinerycms-core 2.0.4 → 2.0.5

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.
@@ -70,9 +70,9 @@ init_modal_dialogs = function(){
70
70
  height = parseInt($(href.match("height=([0-9]*)")).last().get(0), 10)||473,
71
71
  title = $anchor.attr('title') || $anchor.attr('name') || $anchor.html() || null;
72
72
 
73
- href = href.replace(/(\&(amp\;)?)?dialog\=true/, '')
74
- .replace(/(\&(amp\;)?)?width\=\d+/, '')
75
- .replace(/(\&(amp\;)?)?height\=\d+/, '')
73
+ href = href.replace(/((\&(amp\;)?)|\?)dialog\=true/, '')
74
+ .replace(/((\&(amp\;)?)|\?)width\=\d+/, '')
75
+ .replace(/((\&(amp\;)?)|\?)height\=\d+/, '')
76
76
  .replace(/(\?&(amp\;)?)/, '?')
77
77
  .replace(/\?$/, '');
78
78
 
@@ -4,7 +4,7 @@
4
4
  * http://mjsarfatti.com/sandbox/nestedSortable
5
5
  *
6
6
  * Depends:
7
- * jquery.ui.sortable.js 1.8+
7
+ * jquery.ui.sortable.js 1.8+
8
8
  *
9
9
  * License CC BY-SA 3.0
10
10
  * Copyright 2010-2011, Manuele J Sarfatti
@@ -12,345 +12,345 @@
12
12
 
13
13
  (function($) {
14
14
 
15
- $.widget("ui.nestedSortable", $.extend({}, $.ui.sortable.prototype, {
15
+ $.widget("ui.nestedSortable", $.extend({}, $.ui.sortable.prototype, {
16
16
 
17
- options: {
18
- tabSize: 20,
19
- disableNesting: 'ui-nestedSortable-no-nesting',
20
- errorClass: 'ui-nestedSortable-error',
21
- listType: 'ol',
22
- maxLevels: 0,
23
- noJumpFix: 0
24
- },
25
-
26
- _create: function(){
27
- if (this.noJumpFix == false)
28
- this.element.height(this.element.height());
29
- this.element.data('sortable', this.element.data('nestedSortable'));
30
- return $.ui.sortable.prototype._create.apply(this, arguments);
31
- },
32
-
33
-
34
-
35
- _mouseDrag: function(event) {
36
-
37
- //Compute the helpers position
38
- this.position = this._generatePosition(event);
39
- this.positionAbs = this._convertPositionTo("absolute");
40
-
41
- if (!this.lastPositionAbs) {
42
- this.lastPositionAbs = this.positionAbs;
43
- }
44
-
45
- //Do scrolling
46
- if(this.options.scroll) {
47
- var o = this.options, scrolled = false;
48
- if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') {
49
-
50
- if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
51
- this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
52
- else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity)
53
- this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
54
-
55
- if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
56
- this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
57
- else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity)
58
- this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
59
-
60
- } else {
61
-
62
- if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
63
- scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
64
- else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
65
- scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
66
-
67
- if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
68
- scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
69
- else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
70
- scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
71
-
72
- }
73
-
74
- if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
75
- $.ui.ddmanager.prepareOffsets(this, event);
76
- }
77
-
78
- //Regenerate the absolute position used for position checks
79
- this.positionAbs = this._convertPositionTo("absolute");
80
-
81
- //Set the helper position
82
- if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
83
- if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
84
-
85
- //Rearrange
86
- for (var i = this.items.length - 1; i >= 0; i--) {
87
-
88
- //Cache variables and intersection, continue if no intersection
89
- var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item);
90
- if (!intersection) continue;
91
-
92
- if(itemElement != this.currentItem[0] //cannot intersect with itself
93
- && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before
94
- && !$.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked
95
- && (this.options.type == 'semi-dynamic' ? !$.contains(this.element[0], itemElement) : true)
96
- //&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container
97
- ) {
98
-
99
- this.direction = intersection == 1 ? "down" : "up";
100
-
101
- if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) {
102
- this._rearrange(event, item);
103
- } else {
104
- break;
105
- }
106
-
107
- // Clear emtpy ul's/ol's
108
- this._clearEmpty(itemElement);
109
-
110
- this._trigger("change", event, this._uiHash());
111
- break;
112
- }
113
- }
114
-
115
- var parentItem = (this.placeholder[0].parentNode.parentNode && $(this.placeholder[0].parentNode.parentNode).closest('.ui-sortable').length) ? $(this.placeholder[0].parentNode.parentNode) : null;
116
- var level = this._getLevel(this.placeholder);
117
- var childLevels = this._getChildLevels(this.helper);
118
- var previousItem = this.placeholder[0].previousSibling ? $(this.placeholder[0].previousSibling) : null;
119
- if (previousItem != null) {
120
- while (previousItem[0].nodeName.toLowerCase() != 'li' || previousItem[0] == this.currentItem[0]) {
121
- if (previousItem[0].previousSibling) {
122
- previousItem = $(previousItem[0].previousSibling);
123
- } else {
124
- previousItem = null;
125
- break;
126
- }
127
- }
128
- }
129
-
130
- newList = document.createElement(o.listType);
131
-
132
- this.beyondMaxLevels = 0;
133
-
134
- // If the item is moved to the left, send it to its parent level
135
- if (parentItem != null && this.positionAbs.left < parentItem.offset().left) {
136
- parentItem.after(this.placeholder[0]);
137
- this._clearEmpty(parentItem[0]);
138
- this._trigger("change", event, this._uiHash());
139
- }
140
- // If the item is below another one and is moved to the right, make it a children of it
141
- else if (previousItem != null && this.positionAbs.left > previousItem.offset().left + o.tabSize) {
142
- this._isAllowed(previousItem, level+childLevels+1);
143
- if (!previousItem.children(o.listType).length) {
144
- previousItem[0].appendChild(newList);
145
- }
146
- previousItem.children(o.listType)[0].appendChild(this.placeholder[0]);
147
- this._trigger("change", event, this._uiHash());
148
- }
149
- else {
150
- this._isAllowed(parentItem, level+childLevels);
151
- }
152
-
153
- //Post events to containers
154
- this._contactContainers(event);
155
-
156
- //Interconnect with droppables
157
- if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
158
-
159
- //Call callbacks
160
- this._trigger('sort', event, this._uiHash());
161
-
162
- this.lastPositionAbs = this.positionAbs;
163
- return false;
164
-
165
- },
166
-
167
- _mouseStop: function(event, noPropagation) {
168
-
169
- // If the item is in a position not allowed, send it back
170
- if (this.beyondMaxLevels) {
171
- var parent = this.placeholder.parent().closest(this.options.items);
172
-
173
- for (var i = this.beyondMaxLevels - 1; i > 0; i--) {
174
- parent = parent.parent().closest(this.options.items);
175
- }
176
-
177
- this.placeholder.removeClass(this.options.errorClass);
178
- parent.after(this.placeholder);
179
- this._trigger("change", event, this._uiHash());
180
- }
181
-
182
- $.ui.sortable.prototype._mouseStop.apply(this, arguments);
183
-
184
- },
185
-
186
- serialize: function(o) {
187
-
188
- var items = this._getItemsAsjQuery(o && o.connected);
189
- var str = []; o = o || {};
190
-
191
- $(items).each(function() {
192
- var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
193
- var pid = ($(o.item || this).parent(o.listType).parent('li').attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
194
- if(res) str.push((o.key || res[1]+'['+(o.key && o.expression ? res[1] : res[2])+']')+'='+(pid ? (o.key && o.expression ? pid[1] : pid[2]) : 'root'));
195
- });
196
-
197
- if(!str.length && o.key) {
198
- str.push(o.key + '=');
199
- }
200
-
201
- return str.join('&');
202
-
203
- },
204
-
205
- toHierarchy: function(o) {
206
-
207
- o = o || {};
208
- var sDepth = o.startDepthCount || 0;
209
- var ret = [];
210
-
211
- $(this.element).children('li').each(function() {
212
- var level = _recursiveItems($(this));
213
- ret.push(level);
214
- });
215
-
216
- return ret;
217
-
218
- function _recursiveItems(li) {
219
- var id = ($(li).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
220
- if (id != null) {
221
- var item = {"id" : id[2]};
222
- if ($(li).children(o.listType).children('li').length > 0) {
223
- item.children = [];
224
- $(li).children(o.listType).children('li').each(function () {
225
- var level = _recursiveItems($(this));
226
- item.children.push(level);
227
- });
228
- }
229
- return item;
230
- }
231
- }
17
+ options: {
18
+ tabSize: 20,
19
+ disableNesting: 'ui-nestedSortable-no-nesting',
20
+ errorClass: 'ui-nestedSortable-error',
21
+ listType: 'ol',
22
+ maxLevels: 0,
23
+ noJumpFix: 0
24
+ },
25
+
26
+ _create: function(){
27
+ if (this.noJumpFix == false)
28
+ this.element.height(this.element.height());
29
+ this.element.data('sortable', this.element.data('nestedSortable'));
30
+ return $.ui.sortable.prototype._create.apply(this, arguments);
31
+ },
32
+
33
+
34
+
35
+ _mouseDrag: function(event) {
36
+
37
+ //Compute the helpers position
38
+ this.position = this._generatePosition(event);
39
+ this.positionAbs = this._convertPositionTo("absolute");
40
+
41
+ if (!this.lastPositionAbs) {
42
+ this.lastPositionAbs = this.positionAbs;
43
+ }
44
+
45
+ //Do scrolling
46
+ if(this.options.scroll) {
47
+ var o = this.options, scrolled = false;
48
+ if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') {
49
+
50
+ if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
51
+ this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
52
+ else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity)
53
+ this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
54
+
55
+ if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
56
+ this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
57
+ else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity)
58
+ this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
59
+
60
+ } else {
61
+
62
+ if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
63
+ scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
64
+ else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
65
+ scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
66
+
67
+ if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
68
+ scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
69
+ else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
70
+ scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
71
+
72
+ }
73
+
74
+ if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
75
+ $.ui.ddmanager.prepareOffsets(this, event);
76
+ }
77
+
78
+ //Regenerate the absolute position used for position checks
79
+ this.positionAbs = this._convertPositionTo("absolute");
80
+
81
+ //Set the helper position
82
+ if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
83
+ if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
84
+
85
+ //Rearrange
86
+ for (var i = this.items.length - 1; i >= 0; i--) {
87
+
88
+ //Cache variables and intersection, continue if no intersection
89
+ var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item);
90
+ if (!intersection) continue;
91
+
92
+ if(itemElement != this.currentItem[0] //cannot intersect with itself
93
+ && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before
94
+ && !$.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked
95
+ && (this.options.type == 'semi-dynamic' ? !$.contains(this.element[0], itemElement) : true)
96
+ //&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container
97
+ ) {
98
+
99
+ this.direction = intersection == 1 ? "down" : "up";
100
+
101
+ if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) {
102
+ this._rearrange(event, item);
103
+ } else {
104
+ break;
105
+ }
106
+
107
+ // Clear emtpy ul's/ol's
108
+ this._clearEmpty(itemElement);
109
+
110
+ this._trigger("change", event, this._uiHash());
111
+ break;
112
+ }
113
+ }
114
+
115
+ var parentItem = (this.placeholder[0].parentNode.parentNode && $(this.placeholder[0].parentNode.parentNode).closest('.ui-sortable').length) ? $(this.placeholder[0].parentNode.parentNode) : null;
116
+ var level = this._getLevel(this.placeholder);
117
+ var childLevels = this._getChildLevels(this.helper);
118
+ var previousItem = this.placeholder[0].previousSibling ? $(this.placeholder[0].previousSibling) : null;
119
+ if (previousItem != null) {
120
+ while (previousItem[0].nodeName.toLowerCase() != 'li' || previousItem[0] == this.currentItem[0]) {
121
+ if (previousItem[0].previousSibling) {
122
+ previousItem = $(previousItem[0].previousSibling);
123
+ } else {
124
+ previousItem = null;
125
+ break;
126
+ }
127
+ }
128
+ }
129
+
130
+ newList = document.createElement(o.listType);
131
+
132
+ this.beyondMaxLevels = 0;
133
+
134
+ // If the item is moved to the left, send it to its parent level
135
+ if (parentItem != null && this.positionAbs.left < parentItem.offset().left) {
136
+ parentItem.after(this.placeholder[0]);
137
+ this._clearEmpty(parentItem[0]);
138
+ this._trigger("change", event, this._uiHash());
139
+ }
140
+ // If the item is below another one and is moved to the right, make it a children of it
141
+ else if (previousItem != null && this.positionAbs.left > previousItem.offset().left + o.tabSize) {
142
+ this._isAllowed(previousItem, level+childLevels+1);
143
+ if (!previousItem.children(o.listType).length) {
144
+ previousItem[0].appendChild(newList);
145
+ }
146
+ previousItem.children(o.listType)[0].appendChild(this.placeholder[0]);
147
+ this._trigger("change", event, this._uiHash());
148
+ }
149
+ else {
150
+ this._isAllowed(parentItem, level+childLevels);
151
+ }
152
+
153
+ //Post events to containers
154
+ this._contactContainers(event);
155
+
156
+ //Interconnect with droppables
157
+ if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
158
+
159
+ //Call callbacks
160
+ this._trigger('sort', event, this._uiHash());
161
+
162
+ this.lastPositionAbs = this.positionAbs;
163
+ return false;
164
+
165
+ },
166
+
167
+ _mouseStop: function(event, noPropagation) {
168
+
169
+ // If the item is in a position not allowed, send it back
170
+ if (this.beyondMaxLevels) {
171
+ var parent = this.placeholder.parent().closest(this.options.items);
172
+
173
+ for (var i = this.beyondMaxLevels - 1; i > 0; i--) {
174
+ parent = parent.parent().closest(this.options.items);
175
+ }
176
+
177
+ this.placeholder.removeClass(this.options.errorClass);
178
+ parent.after(this.placeholder);
179
+ this._trigger("change", event, this._uiHash());
180
+ }
181
+
182
+ $.ui.sortable.prototype._mouseStop.apply(this, arguments);
183
+
184
+ },
185
+
186
+ serialize: function(o) {
187
+
188
+ var items = this._getItemsAsjQuery(o && o.connected);
189
+ var str = []; o = o || {};
190
+
191
+ $(items).each(function() {
192
+ var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
193
+ var pid = ($(o.item || this).parent(o.listType).parent('li').attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
194
+ if(res) str.push((o.key || res[1]+'['+(o.key && o.expression ? res[1] : res[2])+']')+'='+(pid ? (o.key && o.expression ? pid[1] : pid[2]) : 'root'));
195
+ });
196
+
197
+ if(!str.length && o.key) {
198
+ str.push(o.key + '=');
199
+ }
200
+
201
+ return str.join('&');
202
+
203
+ },
204
+
205
+ toHierarchy: function(o) {
206
+
207
+ o = o || {};
208
+ var sDepth = o.startDepthCount || 0;
209
+ var ret = [];
210
+
211
+ $(this.element).children('li').each(function() {
212
+ var level = _recursiveItems($(this));
213
+ ret.push(level);
214
+ });
215
+
216
+ return ret;
217
+
218
+ function _recursiveItems(li) {
219
+ var id = ($(li).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
220
+ if (id != null) {
221
+ var item = {"id" : id[2]};
222
+ if ($(li).children(o.listType).children('li').length > 0) {
223
+ item.children = [];
224
+ $(li).children(o.listType).children('li').each(function () {
225
+ var level = _recursiveItems($(this));
226
+ item.children.push(level);
227
+ });
228
+ }
229
+ return item;
230
+ }
231
+ }
232
232
  },
233
233
 
234
- toArray: function(o) {
234
+ toArray: function(o) {
235
235
 
236
- o = o || {};
237
- var sDepth = o.startDepthCount || 0;
238
- var ret = [];
239
- var left = 2;
236
+ o = o || {};
237
+ var sDepth = o.startDepthCount || 0;
238
+ var ret = [];
239
+ var left = 2;
240
240
 
241
- ret.push({"item_id": 'root', "parent_id": 'none', "depth": sDepth, "left": '1', "right": ($('li', this.element).length + 1) * 2});
241
+ ret.push({"item_id": 'root', "parent_id": 'none', "depth": sDepth, "left": '1', "right": ($('li', this.element).length + 1) * 2});
242
242
 
243
- $(this.element).children('li').each(function () {
244
- left = _recursiveArray(this, sDepth + 1, left);
245
- });
243
+ $(this.element).children('li').each(function () {
244
+ left = _recursiveArray(this, sDepth + 1, left);
245
+ });
246
246
 
247
- function _sortByLeft(a,b) {
248
- return a['left'] - b['left'];
249
- }
250
- ret = ret.sort(_sortByLeft);
247
+ function _sortByLeft(a,b) {
248
+ return a['left'] - b['left'];
249
+ }
250
+ ret = ret.sort(_sortByLeft);
251
251
 
252
- return ret;
252
+ return ret;
253
253
 
254
- function _recursiveArray(item, depth, left) {
254
+ function _recursiveArray(item, depth, left) {
255
255
 
256
- right = left + 1;
256
+ right = left + 1;
257
257
 
258
- if ($(item).children(o.listType).children('li').length > 0) {
259
- depth ++;
260
- $(item).children(o.listType).children('li').each(function () {
261
- right = _recursiveArray($(this), depth, right);
262
- });
263
- depth --;
264
- }
258
+ if ($(item).children(o.listType).children('li').length > 0) {
259
+ depth ++;
260
+ $(item).children(o.listType).children('li').each(function () {
261
+ right = _recursiveArray($(this), depth, right);
262
+ });
263
+ depth --;
264
+ }
265
265
 
266
- id = ($(item).attr(o.attribute || 'id')).match(o.expression || (/(.+)[-=_](.+)/));
266
+ id = ($(item).attr(o.attribute || 'id')).match(o.expression || (/(.+)[-=_](.+)/));
267
267
 
268
- if (depth === sDepth + 1) pid = 'root';
269
- else {
270
- parentItem = ($(item).parent(o.listType).parent('li').attr('id')).match(o.expression || (/(.+)[-=_](.+)/));
271
- pid = parentItem[2];
272
- }
268
+ if (depth === sDepth + 1) pid = 'root';
269
+ else {
270
+ parentItem = ($(item).parent(o.listType).parent('li').attr('id')).match(o.expression || (/(.+)[-=_](.+)/));
271
+ pid = parentItem[2];
272
+ }
273
273
 
274
- if (id != null) {
275
- ret.push({"item_id": id[2], "parent_id": pid, "depth": depth, "left": left, "right": right});
276
- }
274
+ if (id != null) {
275
+ ret.push({"item_id": id[2], "parent_id": pid, "depth": depth, "left": left, "right": right});
276
+ }
277
277
 
278
- return left = right + 1;
279
- }
278
+ return left = right + 1;
279
+ }
280
280
 
281
- },
281
+ },
282
282
 
283
- _clear: function(event, noPropagation) {
283
+ _clear: function(event, noPropagation) {
284
284
 
285
- $.ui.sortable.prototype._clear.apply(this, arguments);
285
+ $.ui.sortable.prototype._clear.apply(this, arguments);
286
286
 
287
- // Clean last empty ul/ol
288
- for (var i = this.items.length - 1; i >= 0; i--) {
289
- var item = this.items[i].item[0];
290
- this._clearEmpty(item);
291
- }
292
- return true;
287
+ // Clean last empty ul/ol
288
+ for (var i = this.items.length - 1; i >= 0; i--) {
289
+ var item = this.items[i].item[0];
290
+ this._clearEmpty(item);
291
+ }
292
+ return true;
293
293
 
294
- },
294
+ },
295
295
 
296
- _clearEmpty: function(item) {
296
+ _clearEmpty: function(item) {
297
297
 
298
- if (item.children[1] && item.children[1].children.length == 0) {
299
- item.removeChild(item.children[1]);
300
- }
298
+ if (item.children[1] && item.children[1].children.length == 0) {
299
+ item.removeChild(item.children[1]);
300
+ }
301
301
 
302
- },
302
+ },
303
303
 
304
- _getLevel: function(item) {
304
+ _getLevel: function(item) {
305
305
 
306
- var level = 1;
306
+ var level = 1;
307
307
 
308
- if (this.options.listType) {
309
- var list = item.closest(this.options.listType);
310
- while (!list.is('.ui-sortable')/* && level < this.options.maxLevels*/) {
311
- level++;
312
- list = list.parent().closest(this.options.listType);
313
- }
314
- }
308
+ if (this.options.listType) {
309
+ var list = item.closest(this.options.listType);
310
+ while (!list.is('.ui-sortable')/* && level < this.options.maxLevels*/) {
311
+ level++;
312
+ list = list.parent().closest(this.options.listType);
313
+ }
314
+ }
315
315
 
316
- return level;
317
- },
316
+ return level;
317
+ },
318
318
 
319
- _getChildLevels: function(parent, depth) {
320
- var self = this,
321
- o = this.options,
322
- result = 0;
323
- depth = depth || 0;
319
+ _getChildLevels: function(parent, depth) {
320
+ var self = this,
321
+ o = this.options,
322
+ result = 0;
323
+ depth = depth || 0;
324
324
 
325
- $(parent).children(o.listType).children(o.items).each(function (index, child) {
326
- result = Math.max(self._getChildLevels(child, depth + 1), result);
327
- });
325
+ $(parent).children(o.listType).children(o.items).each(function (index, child) {
326
+ result = Math.max(self._getChildLevels(child, depth + 1), result);
327
+ });
328
328
 
329
- return depth ? result + 1 : result;
330
- },
329
+ return depth ? result + 1 : result;
330
+ },
331
331
 
332
- _isAllowed: function(parentItem, levels) {
333
- var o = this.options
334
- // Are we trying to nest under a no-nest or are we nesting too deep?
335
- if (parentItem == null || !(parentItem.hasClass(o.disableNesting))) {
336
- if (o.maxLevels < levels && o.maxLevels != 0) {
337
- this.placeholder.addClass(o.errorClass);
338
- this.beyondMaxLevels = levels - o.maxLevels;
339
- } else {
340
- this.placeholder.removeClass(o.errorClass);
341
- this.beyondMaxLevels = 0;
342
- }
343
- } else {
344
- this.placeholder.addClass(o.errorClass);
345
- if (o.maxLevels < levels && o.maxLevels != 0) {
346
- this.beyondMaxLevels = levels - o.maxLevels;
347
- } else {
348
- this.beyondMaxLevels = 1;
349
- }
350
- }
351
- }
352
-
353
- }));
354
-
355
- $.ui.nestedSortable.prototype.options = $.extend({}, $.ui.sortable.prototype.options, $.ui.nestedSortable.prototype.options);
356
- })(jQuery);
332
+ _isAllowed: function(parentItem, levels) {
333
+ var o = this.options
334
+ // Are we trying to nest under a no-nest or are we nesting too deep?
335
+ if (parentItem == null || !(parentItem.hasClass(o.disableNesting))) {
336
+ if (o.maxLevels < levels && o.maxLevels != 0) {
337
+ this.placeholder.addClass(o.errorClass);
338
+ this.beyondMaxLevels = levels - o.maxLevels;
339
+ } else {
340
+ this.placeholder.removeClass(o.errorClass);
341
+ this.beyondMaxLevels = 0;
342
+ }
343
+ } else {
344
+ this.placeholder.addClass(o.errorClass);
345
+ if (o.maxLevels < levels && o.maxLevels != 0) {
346
+ this.beyondMaxLevels = levels - o.maxLevels;
347
+ } else {
348
+ this.beyondMaxLevels = 1;
349
+ }
350
+ }
351
+ }
352
+
353
+ }));
354
+
355
+ $.ui.nestedSortable.prototype.options = $.extend({}, $.ui.sortable.prototype.options, $.ui.nestedSortable.prototype.options);
356
+ })(jQuery);
@@ -31,6 +31,7 @@ WYMeditor.STRINGS['ru'] = {
31
31
  Summary: 'Summary',
32
32
  Number_Of_Rows: 'Кол-во строк',
33
33
  Number_Of_Cols: 'Кол-во столбцов',
34
+ Insert: 'Вставить',
34
35
  Submit: 'Отправить',
35
36
  Cancel: 'Отмена',
36
37
  Choose: 'Выбор',
@@ -230,6 +230,9 @@ a:hover {
230
230
  padding: 0px;
231
231
  a {
232
232
  border-bottom: 1px dotted #727272;
233
+ &.locale {
234
+ border-bottom: 0;
235
+ }
233
236
  }
234
237
  h1 {
235
238
  font-size: 18px;
@@ -1565,4 +1568,4 @@ a.information:hover {
1565
1568
  }
1566
1569
  .ie8 .pagination a, .ie8 #content .pagination a, .ie8 .pagination .current, .ie8 .disabled, .ie8 .pagination em {
1567
1570
  padding-bottom: 6px;
1568
- }
1571
+ }
@@ -1,2 +1,2 @@
1
- <%= render :partial => '/refinery/message' if request.xhr? %>
1
+ <%= render '/refinery/message' if request.xhr? %>
2
2
  <%= yield %>
@@ -2,4 +2,4 @@
2
2
  :hide_sections => local_assigns[:hide_sections],
3
3
  :can_use_fallback => !local_assigns[:show_empty_sections] && !local_assigns[:remove_automatic_sections]
4
4
  }) %>
5
- <%= render :partial => '/refinery/draft_page_message' unless @page.nil? or @page.live? -%>
5
+ <%= render '/refinery/draft_page_message' unless @page.nil? or @page.live? -%>
@@ -2,9 +2,9 @@
2
2
  <meta charset='<%= Rails.application.config.encoding %>' />
3
3
  <!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><![endif]-->
4
4
  <title><%= browser_title(yield(:title)) %></title>
5
- <%= raw(%(<meta name="description" content="#{@meta.meta_description}" />)) if @meta.meta_description.present? -%>
6
- <%= raw(%(<meta name="keywords" content="#{@meta.meta_keywords}">)) if @meta.meta_keywords.present? -%>
7
- <%= raw(%(<link rel="canonical" content="#{@canonical}" />)) if @canonical.present? -%>
5
+ <%= raw %(<meta name="description" content="#{@meta.meta_description}" />) if @meta.meta_description.present? -%>
6
+ <%= raw %(<meta name="keywords" content="#{@meta.meta_keywords}">) if @meta.meta_keywords.present? -%>
7
+ <%= raw %(<link rel="canonical" content="#{@canonical}" />) if @canonical.present? -%>
8
8
  <%= csrf_meta_tags if Refinery::Core.authenticity_token_on_frontend -%>
9
9
  <%= yield :meta %>
10
10
 
@@ -20,6 +20,8 @@ module Refinery
20
20
 
21
21
  merge_locales!
22
22
 
23
+ copy_or_merge_seeds!
24
+
23
25
  append_extension_to_gemfile!
24
26
 
25
27
  finalize_extension!
@@ -14,13 +14,12 @@ module Refinery
14
14
  <% end -%>
15
15
  <% if (string_attributes = attributes.select{ |a| a.type.to_s =~ /string|text/ }.uniq).any? -%>
16
16
 
17
- attr_accessible <%= string_attributes.first.name.to_sym.inspect %>, :position
17
+ attr_accessible <%= attributes.map { |attr| ":#{attr.name}" }.join(', ') %>, :position
18
18
 
19
19
  acts_as_indexed :fields => <%= string_attributes.map{|s| s.name.to_sym}.inspect %>
20
20
 
21
21
  validates <%= string_attributes.first.name.to_sym.inspect %>, :presence => true, :uniqueness => true
22
22
  <% else -%>
23
-
24
23
  # def title was created automatically because you didn't specify a string field
25
24
  # when you ran the refinery:engine generator. <3 <3 Refinery CMS.
26
25
  def title
@@ -34,6 +33,7 @@ module Refinery
34
33
  <% attributes.select{|a| a.type.to_s == 'resource'}.uniq.each do |a| -%>
35
34
 
36
35
  belongs_to :<%= a.name.gsub("_id", "") %>, :class_name => '::Refinery::Resource'
36
+
37
37
  <% end -%>
38
38
  end
39
39
  end
@@ -1,4 +1,4 @@
1
- <%% content_for :body_content_left do %>
1
+ <%% content_for :body do %>
2
2
  <ul id="<%= plural_name %>">
3
3
  <%% @<%= "all_" if plural_name == singular_name%><%= plural_name %>.each do |<%= singular_name %>| %>
4
4
  <li>
@@ -2,7 +2,7 @@
2
2
  <%%= @<%= singular_name %><% if (title = attributes.detect { |a| a.type.to_s == "string" }).present? %>.<%= title.name %><% else %>.title<% end %> %>
3
3
  <%% end %>
4
4
 
5
- <%% content_for :body_content_left do %>
5
+ <%% content_for :body do %>
6
6
  <% attributes.each do |attribute| -%>
7
7
  <section>
8
8
  <h1><%= attribute.name.titleize %></h1>
@@ -23,7 +23,7 @@
23
23
  <% end -%>
24
24
  <%% end %>
25
25
 
26
- <%% content_for :body_content_right do %>
26
+ <%% content_for :side_body do %>
27
27
  <aside>
28
28
  <h2><%%= t('.other') %></h2>
29
29
  <ul id="<%= plural_name %>">
@@ -1,23 +1,27 @@
1
- if defined?(::Refinery::User)
2
- ::Refinery::User.all.each do |user|
3
- if user.plugins.where(:name => 'refinerycms-<%= namespacing.underscore %>').blank?
4
- user.plugins.create(:name => 'refinerycms-<%= namespacing.underscore %>',
5
- :position => (user.plugins.maximum(:position) || -1) +1)
1
+ (Refinery.i18n_enabled? ? Refinery::I18n.frontend_locales : [:en]).each do |lang|
2
+ I18n.locale = lang
3
+
4
+ if defined?(Refinery::User)
5
+ Refinery::User.all.each do |user|
6
+ if user.plugins.where(:name => 'refinerycms-<%= namespacing.underscore %>').blank?
7
+ user.plugins.create(:name => 'refinerycms-<%= namespacing.underscore %>',
8
+ :position => (user.plugins.maximum(:position) || -1) +1)
9
+ end
6
10
  end
7
11
  end
8
- end
9
12
 
10
- <% unless skip_frontend? %>
11
- url = "/<%= [(namespacing.underscore if namespacing.underscore != plural_name), plural_name].compact.join('/') %>"
12
- if defined?(::Refinery::Page) && ::Refinery::Page.where(:link_url => url).empty?
13
- page = ::Refinery::Page.create(
14
- :title => '<%= class_name.pluralize.underscore.titleize %>',
15
- :link_url => url,
16
- :deletable => false,
17
- :menu_match => "^#{url}(\/|\/.+?|)$"
18
- )
19
- Refinery::Pages.default_parts.each_with_index do |default_page_part, index|
20
- page.parts.create(:title => default_page_part, :body => nil, :position => index)
13
+ <% unless skip_frontend? -%>
14
+ url = "/<%= [(namespacing.underscore if namespacing.underscore != plural_name), plural_name].compact.join('/') %>"
15
+ if defined?(Refinery::Page) && Refinery::Page.where(:link_url => url).empty?
16
+ page = Refinery::Page.create(
17
+ :title => '<%= class_name.pluralize.underscore.titleize %>',
18
+ :link_url => url,
19
+ :deletable => false,
20
+ :menu_match => "^#{url}(\/|\/.+?|)$"
21
+ )
22
+ Refinery::Pages.default_parts.each_with_index do |default_page_part, index|
23
+ page.parts.create(:title => default_page_part, :body => nil, :position => index)
24
+ end
21
25
  end
26
+ <% end -%>
22
27
  end
23
- <% end %>
@@ -2,13 +2,13 @@ def setup_environment
2
2
  # Configure Rails Environment
3
3
  ENV["RAILS_ENV"] ||= 'test'
4
4
 
5
- if File.exist?(dummy_path = File.expand_path('../spec/dummy/config/environment.rb', __FILE__))
5
+ if File.exist?(dummy_path = File.expand_path('../dummy/config/environment.rb', __FILE__))
6
6
  require dummy_path
7
7
  elsif File.dirname(__FILE__) =~ %r{vendor/extensions}
8
8
  # Require the path to the refinerycms application this is vendored inside.
9
9
  require File.expand_path('../../../../../config/environment', __FILE__)
10
10
  else
11
- raise "Could not find a config/environment.rb file to require. Please specify this in spec/spec_helper.rb"
11
+ raise "Could not find a config/environment.rb file to require. Please specify this in #{File.expand_path(__FILE__)}"
12
12
  end
13
13
 
14
14
  require 'rspec/rails'
@@ -22,6 +22,8 @@ module Refinery
22
22
 
23
23
  merge_locales!
24
24
 
25
+ copy_or_merge_seeds!
26
+
25
27
  append_extension_to_gemfile!
26
28
 
27
29
  finalize_extension!
@@ -3,11 +3,13 @@ module Refinery
3
3
  class <%= class_name %> < Refinery::Core::BaseModel
4
4
  <% if table_name == namespacing.underscore.pluralize -%>
5
5
  self.table_name = 'refinery_<%= plural_name %>'
6
- <% end -%>
7
- <% if (text_or_string_fields = attributes.map{ |a| a.name if a.type.to_s =~ /string|text/ }.compact.uniq).any? %>
6
+ <% end %>
7
+ attr_accessible <%= attributes.map { |attr| ":#{attr.name}" }.join(', ') %>, :position
8
+
9
+ <% if (text_or_string_fields = attributes.map{ |a| a.name if a.type.to_s =~ /string|text/ }.compact.uniq).any? -%>
8
10
  acts_as_indexed :fields => [:<%= text_or_string_fields.join(", :") %>]
9
11
  <% end -%>
10
- <% if (text_fields = attributes.map {|a| a.name if a.type.to_s == 'text'}.compact.uniq).any? && text_fields.detect{|a| a.to_s == 'message'}.nil? %>
12
+ <% if (text_fields = attributes.map {|a| a.name if a.type.to_s == 'text'}.compact.uniq).any? && text_fields.detect{|a| a.to_s == 'message'}.nil? -%>
11
13
  alias_attribute :message, :<%= text_fields.first %>
12
14
  <% elsif text_fields.empty? %>
13
15
  # def message was created automatically because you didn't specify a text field
@@ -1,4 +1,4 @@
1
- <%% content_for :body_content_left do %>
1
+ <%% content_for :body do %>
2
2
  <div class='<%= plural_name %>'>
3
3
  <%%=raw @page.content_for(Refinery::Pages.default_parts.first.to_sym) %>
4
4
 
@@ -1,27 +1,31 @@
1
- if defined?(::Refinery::User)
2
- ::Refinery::User.all.each do |user|
3
- if user.plugins.find_by_name('<%= plural_name %>').nil?
4
- user.plugins.create(:name => "<%= plural_name %>",
5
- :position => (user.plugins.maximum(:position) || -1) +1)
1
+ (Refinery.i18n_enabled? ? Refinery::I18n.frontend_locales : [:en]).each do |lang|
2
+ I18n.locale = lang
3
+
4
+ if defined?(Refinery::User)
5
+ Refinery::User.all.each do |user|
6
+ if user.plugins.find_by_name('<%= plural_name %>').nil?
7
+ user.plugins.create(:name => "<%= plural_name %>",
8
+ :position => (user.plugins.maximum(:position) || -1) +1)
9
+ end
6
10
  end
7
11
  end
8
- end
9
12
 
10
- if defined?(::Refinery::Page)
11
- page = ::Refinery::Page.create(
12
- :title => "<%= class_name.pluralize.underscore.titleize %>",
13
- :link_url => "/<%= plural_name %>/new",
14
- :deletable => false,
15
- :menu_match => "^/<%= plural_name %>(\/|\/.+?|)$"
16
- )
17
- thank_you_page = page.children.create(
18
- :title => "Thank You",
19
- :link_url => "/<%= plural_name %>/thank_you",
20
- :deletable => false,
21
- :show_in_menu => false
22
- )
23
- Refinery::Pages.default_parts.each do |default_page_part|
24
- page.parts.create(:title => default_page_part, :body => nil)
25
- thank_you_page.parts.create(:title => default_page_part, :body => nil)
13
+ if defined?(Refinery::Page)
14
+ page = Refinery::Page.create(
15
+ :title => "<%= class_name.pluralize.underscore.titleize %>",
16
+ :link_url => "/<%= plural_name %>/new",
17
+ :deletable => false,
18
+ :menu_match => "^/<%= plural_name %>(\/|\/.+?|)$"
19
+ )
20
+ thank_you_page = page.children.create(
21
+ :title => "Thank You",
22
+ :link_url => "/<%= plural_name %>/thank_you",
23
+ :deletable => false,
24
+ :show_in_menu => false
25
+ )
26
+ Refinery::Pages.default_parts.each do |default_page_part|
27
+ page.parts.create(:title => default_page_part, :body => nil)
28
+ thank_you_page.parts.create(:title => default_page_part, :body => nil)
29
+ end
26
30
  end
27
31
  end
@@ -9,6 +9,7 @@ module Refinery
9
9
  # Total number of activies to show for a given class of activity
10
10
  attr_accessor :limit
11
11
 
12
+ # Other objects, like parents, to include in the nesting structure
12
13
  attr_accessor :nested_with
13
14
 
14
15
  # SQL order by string to specify how to order the activities in the activity feed for
@@ -21,6 +22,10 @@ module Refinery
21
22
  # Image asset to use to represent updated instance of the class thisa activity represents
22
23
  attr_accessor :updated_image
23
24
 
25
+ # Boolean; whether or not to use the record itself when constructing the nesting
26
+ # Default true
27
+ attr_accessor :use_record_in_nesting
28
+
24
29
  # Creates a new instance of Activity for a registered Refinery Plugin. An optional
25
30
  # hash of options can be specified to customize the values of each attribute
26
31
  # accessor defined on this class. Each key specified in the options hash should be a
@@ -31,7 +36,8 @@ module Refinery
31
36
  # Activity.new(:limit => 10, :title => "Newest Activity!")
32
37
  #
33
38
  # Warning:
34
- # for the nested_with option, pass in the reverse order of ancestry e.g. [parent.parent_of_parent, parent]
39
+ # for the nested_with option, pass in the reverse order of ancestry
40
+ # e.g. [parent.parent_of_parent, parent]
35
41
  def initialize(options = {})
36
42
  {
37
43
  :class_name => nil,
@@ -43,7 +49,8 @@ module Refinery
43
49
  :title => "title",
44
50
  :updated_image => "edit.png",
45
51
  :url => nil,
46
- :url_prefix => "edit"
52
+ :url_prefix => "edit",
53
+ :use_record_in_nesting => true
47
54
  }.merge(options).each { |key, value| self.send(:"#{key}=", value) }
48
55
  end
49
56
 
@@ -80,11 +87,15 @@ module Refinery
80
87
  end
81
88
 
82
89
  # to use in a URL like edit_refinery_admin_group_individuals_path(record.group, record)
83
- # which will help you if you're using nested routed.
90
+ # which will help you if you're using nested routes.
84
91
  def nesting(record_string = "record")
85
- self.nested_with.inject("") { |nest_chain, nesting|
86
- nest_chain << "#{record_string}.#{nesting},"
87
- }
92
+ @nesting ||= begin
93
+ chain = self.nested_with.inject([]) { |nest_chain, nesting|
94
+ nest_chain << "#{record_string}.#{nesting}"
95
+ }
96
+ chain << record_string if self.use_record_in_nesting
97
+ chain.join(',')
98
+ end
88
99
  end
89
100
 
90
101
  attr_writer :url_prefix
@@ -67,7 +67,7 @@ module Refinery
67
67
  puts "Couldn't match any model files in any extensions like #{model}"
68
68
  end
69
69
  elsif (javascripts = env["javascript"]).present?
70
- pattern = "#{javascripts.split("/").join(File::SEPARATOR)}*.js"
70
+ pattern = "#{javascripts.split("/").join(File::SEPARATOR)}*.js{,.*}"
71
71
  looking_for = ::Refinery::Plugins.registered.pathnames.map{|p| p.join("app", "assets", "javascripts", pattern).to_s}
72
72
 
73
73
  # copy in the matches
@@ -139,6 +139,7 @@ module Refinery
139
139
  reject_template?(f)
140
140
  }.sort.each do |path|
141
141
  if (template_path = extension_path_for(path, extension_name)).present?
142
+ next if path.to_s =~ /seeds.rb/
142
143
  template path, template_path
143
144
  end
144
145
  end
@@ -209,6 +210,27 @@ module Refinery
209
210
  end
210
211
  end
211
212
 
213
+ def copy_or_merge_seeds!
214
+ source_seed_file = source_pathname.join("db/seeds.rb")
215
+ destination_seed_file = destination_pathname.join(extension_path_for(source_seed_file, extension_name))
216
+
217
+ if existing_extension?
218
+ # create temp seeds file
219
+ temp_seed_file = destination_pathname.join(extension_path_for("tmp/seeds.rb", extension_name))
220
+
221
+ # copy/evaluate seeds template to temp file
222
+ template source_seed_file, temp_seed_file, :verbose => false
223
+
224
+ # append temp seeds file content to extension seeds file
225
+ destination_seed_file.open('a+') { |file| file.puts temp_seed_file.read.to_s }
226
+
227
+ # remove temp file
228
+ FileUtils.rm_rf temp_seed_file
229
+ else
230
+ template source_seed_file, destination_seed_file
231
+ end
232
+ end
233
+
212
234
  def puts_instructions!
213
235
  unless Rails.env.test?
214
236
  puts "------------------------"
@@ -2,7 +2,7 @@ module Refinery
2
2
  class Version
3
3
  @major = 2
4
4
  @minor = 0
5
- @tiny = 4
5
+ @tiny = 5
6
6
  @build = nil
7
7
 
8
8
  class << self
@@ -80,5 +80,20 @@ module Refinery
80
80
  end
81
81
  }
82
82
  end
83
+
84
+ context "when generating extension inside existing extensions dir" do
85
+ before do
86
+ Refinery::EngineGenerator.any_instance.stub(:merge_locales!).and_return(true)
87
+ Refinery::EngineGenerator.any_instance.stub(:existing_extension?).and_return(true)
88
+
89
+ run_generator %w{ rspec_item_test title:string --extension rspec_product_tests --skip }
90
+ end
91
+
92
+ it "appends existing seeds file" do
93
+ File.open("#{destination_root}/vendor/extensions/rspec_product_tests/db/seeds.rb") do |file|
94
+ file.grep(%r{/rspec_product_tests|/rspec_item_tests}).count.should eq(2)
95
+ end
96
+ end
97
+ end
83
98
  end
84
99
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: refinerycms-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2012-05-14 00:00:00.000000000 Z
16
+ date: 2012-06-11 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: acts_as_indexed
@@ -698,7 +698,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
698
698
  version: '0'
699
699
  segments:
700
700
  - 0
701
- hash: -1126553336485468710
701
+ hash: 753990109908748551
702
702
  required_rubygems_version: !ruby/object:Gem::Requirement
703
703
  none: false
704
704
  requirements:
@@ -707,7 +707,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
707
707
  version: '0'
708
708
  segments:
709
709
  - 0
710
- hash: -1126553336485468710
710
+ hash: 753990109908748551
711
711
  requirements: []
712
712
  rubyforge_project: refinerycms
713
713
  rubygems_version: 1.8.22