imagine_cms 4.1.4 → 4.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/README.rdoc +2 -1
  3. data/app/assets/images/interface/form_loading.gif +0 -0
  4. data/app/assets/images/management/btn-top-delete.png +0 -0
  5. data/app/assets/images/management/btn-top-edit.png +0 -0
  6. data/app/assets/images/management/btn-top-exterminate.png +0 -0
  7. data/app/assets/images/management/btn-top-new.png +0 -0
  8. data/app/assets/images/management/btn-top-preview.png +0 -0
  9. data/app/assets/images/management/btn-top-properties.png +0 -0
  10. data/app/assets/javascripts/codemirror/modes-custom/imagine_cms.js +87 -0
  11. data/app/assets/javascripts/imagine_cms/core.js +510 -0
  12. data/app/assets/javascripts/imagine_cms/legacy/misc.js +537 -0
  13. data/app/assets/javascripts/imagine_cms/legacy/rollovers.js +193 -0
  14. data/app/assets/javascripts/imagine_cms/legacy/slideshow.js +116 -0
  15. data/app/assets/javascripts/imagine_cms/legacy/textfieldhints.js +55 -0
  16. data/app/assets/javascripts/imagine_cms.js +14 -1
  17. data/app/assets/javascripts/imagine_cms_compat.js +26 -0
  18. data/app/assets/javascripts/jquery-ui.js +16608 -0
  19. data/app/assets/javascripts/tag-it.js +591 -0
  20. data/app/assets/stylesheets/imagine_cms.css.scss +26 -10
  21. data/app/assets/stylesheets/imagine_controls.css.scss +8 -0
  22. data/app/assets/stylesheets/jquery-ui.css +1225 -0
  23. data/app/assets/stylesheets/jquery-ui.structure.css +833 -0
  24. data/app/assets/stylesheets/jquery-ui.theme.css +410 -0
  25. data/app/assets/stylesheets/jquery.tagit.css +69 -0
  26. data/app/assets/stylesheets/management.css.scss +7 -0
  27. data/app/assets/stylesheets/tagit.ui-imagine.css +100 -0
  28. data/app/controllers/cms/content_controller.rb +28 -45
  29. data/app/controllers/management/cms_controller.rb +116 -94
  30. data/app/helpers/cms_application_helper.rb +76 -39
  31. data/app/models/cms_page.rb +32 -14
  32. data/app/models/cms_page_object.rb +1 -1
  33. data/app/models/cms_page_tag.rb +2 -2
  34. data/app/models/cms_template.rb +1 -1
  35. data/app/models/user.rb +6 -6
  36. data/app/models/user_group.rb +1 -1
  37. data/app/views/cms/content/_photo_gallery.html.erb +12 -12
  38. data/app/views/cms/content/_search.html.erb +2 -2
  39. data/app/views/cms/content/_search_result.html.erb +16 -10
  40. data/app/views/layouts/management.html.erb +18 -17
  41. data/app/views/management/cms/_edit_page.html.erb +47 -33
  42. data/app/views/management/cms/_gallery_index.html.erb +4 -4
  43. data/app/views/management/cms/_image.html.erb +3 -3
  44. data/app/views/management/cms/_image_details.html.erb +9 -8
  45. data/app/views/management/cms/_list_page.html.erb +2 -2
  46. data/app/views/management/cms/_list_page_select.html.erb +1 -1
  47. data/app/views/management/cms/_page_list.html.erb +69 -48
  48. data/app/views/management/cms/_page_list_source_folder.html.erb +2 -2
  49. data/app/views/management/cms/_template_options.html.erb +4 -4
  50. data/app/views/management/cms/_template_reference.html.erb +13 -15
  51. data/app/views/management/cms/edit_page_content.html.erb +3 -3
  52. data/app/views/management/cms/edit_snippet.html.erb +19 -41
  53. data/app/views/management/cms/edit_template.html.erb +15 -38
  54. data/app/views/management/cms/pages.html.erb +17 -29
  55. data/app/views/management/cms/snippets.html.erb +2 -2
  56. data/app/views/management/cms/templates.html.erb +2 -2
  57. data/app/views/management/cms/toolbar_edit.html.erb +2 -0
  58. data/app/views/management/cms/toolbar_preview.html.erb +2 -2
  59. data/config/initializers/config_file.rb +1 -1
  60. data/imagine_cms.gemspec +7 -4
  61. data/lib/extensions/action_controller_extensions.rb +50 -19
  62. data/lib/imagine_cms/engine.rb +12 -8
  63. data/lib/imagine_cms/version.rb +1 -1
  64. data/lib/prototype_legacy_helper/lib/prototype_legacy_helper.rb +2 -2
  65. data/lib/tasks/imagine_cms_tasks.rake +8 -0
  66. metadata +69 -91
  67. data/app/assets/images/management/btn_archive.gif +0 -0
  68. data/app/assets/images/management/btn_delete.gif +0 -0
  69. data/app/assets/images/management/btn_duplicate.gif +0 -0
  70. data/app/assets/images/management/btn_edit.gif +0 -0
  71. data/app/assets/images/management/btn_new_page.gif +0 -0
  72. data/app/assets/images/management/btn_preview.gif +0 -0
  73. data/app/assets/images/management/btn_properties.gif +0 -0
  74. data/app/assets/images/management/btn_restore.gif +0 -0
  75. data/app/assets/images/management/btn_top_delete.gif +0 -0
  76. data/app/assets/images/management/btn_top_duplicate.gif +0 -0
  77. data/app/assets/images/management/btn_top_edit.gif +0 -0
  78. data/app/assets/images/management/btn_top_new.gif +0 -0
  79. data/app/assets/images/management/btn_top_preview.gif +0 -0
  80. data/app/assets/images/management/btn_top_properties.gif +0 -0
  81. data/app/assets/javascripts/codepress/codepress.html +0 -36
  82. data/app/assets/javascripts/codepress/codepress.js +0 -130
  83. data/app/assets/javascripts/codepress/engines/gecko.js +0 -240
  84. data/app/assets/javascripts/codepress/engines/khtml.js +0 -0
  85. data/app/assets/javascripts/codepress/engines/msie.js +0 -263
  86. data/app/assets/javascripts/codepress/engines/older.js +0 -0
  87. data/app/assets/javascripts/codepress/engines/opera.js +0 -259
  88. data/app/assets/javascripts/codepress/languages/css.js +0 -23
  89. data/app/assets/javascripts/codepress/languages/generic.js +0 -25
  90. data/app/assets/javascripts/codepress/languages/html.js +0 -63
  91. data/app/assets/javascripts/codepress/languages/java.js +0 -24
  92. data/app/assets/javascripts/codepress/languages/javascript.js +0 -30
  93. data/app/assets/javascripts/codepress/languages/perl.js +0 -27
  94. data/app/assets/javascripts/codepress/languages/php.js +0 -60
  95. data/app/assets/javascripts/codepress/languages/ruby.js +0 -26
  96. data/app/assets/javascripts/codepress/languages/sql.js +0 -30
  97. data/app/assets/javascripts/codepress/languages/text.js +0 -9
  98. data/app/assets/javascripts/imagine.js +0 -1393
  99. data/app/assets/stylesheets/codepress/codepress.css +0 -7
  100. data/app/assets/stylesheets/codepress/languages/css.css +0 -10
  101. data/app/assets/stylesheets/codepress/languages/generic.css +0 -9
  102. data/app/assets/stylesheets/codepress/languages/html.css +0 -18
  103. data/app/assets/stylesheets/codepress/languages/java.css +0 -7
  104. data/app/assets/stylesheets/codepress/languages/javascript.css +0 -8
  105. data/app/assets/stylesheets/codepress/languages/perl.css +0 -11
  106. data/app/assets/stylesheets/codepress/languages/php.css +0 -12
  107. data/app/assets/stylesheets/codepress/languages/ruby.css +0 -10
  108. data/app/assets/stylesheets/codepress/languages/sql.css +0 -10
  109. data/app/assets/stylesheets/codepress/languages/text.css +0 -5
@@ -0,0 +1,193 @@
1
+ /* deprecated image rollover code */
2
+
3
+ var defaultXMenuOffset = 0;
4
+ var defaultYMenuOffset = 0;
5
+ var defaultXOffset = 0;
6
+ var defaultYOffset = 0;
7
+ var showRolloverEffect = Effect.Appear;
8
+ var showRolloverEffectOptions = { duration: 0.2 };
9
+ var showRolloverMenuEffect = Effect.BlindDown;
10
+ var showRolloverMenuEffectOptions = { duration: 0.2 };
11
+ var hideRolloverDelay = 120;
12
+ var hideRolloverEffect = Effect.Fade;
13
+ var hideRolloverEffectOptions = { duration: 0.3 };
14
+ var hideRolloverMenuEffect = Effect.BlindUp;
15
+ var hideRolloverMenuEffectOptions = { duration: 0.2 };
16
+
17
+ var currentEffect = [];
18
+
19
+ var hideRolloverTimeouts = [];
20
+ var hoveredButtons = [];
21
+
22
+
23
+ /********************************
24
+ * rollover/menu functions *
25
+ ********************************/
26
+
27
+ function showRollover(target, xMenuOffset, yMenuOffset, xOffset, yOffset) {
28
+ try {
29
+ if (hideRolloverTimeouts[target]) {
30
+ clearTimeout(hideRolloverTimeouts[target]);
31
+ hideRolloverTimeouts[target] = null;
32
+ return;
33
+ }
34
+
35
+ if (hoveredButtons[target]) {
36
+ return;
37
+ }
38
+
39
+ var el = $(target + '_hover');
40
+ var sourceObj = $(target + '_std');
41
+
42
+ var coords = getElementPosition(sourceObj);
43
+ if (typeof(xMenuOffset) == 'undefined') xMenuOffset = defaultXMenuOffset;
44
+ if (typeof(yMenuOffset) == 'undefined') yMenuOffset = defaultYMenuOffset;
45
+ if (typeof(xOffset) == 'undefined') xOffset = defaultXOffset;
46
+ if (typeof(yOffset) == 'undefined') yOffset = defaultYOffset;
47
+
48
+ el.style.position = 'absolute';
49
+ el.style.left = coords[0] + xOffset + 'px';
50
+ el.style.top = coords[1] + yOffset + 'px';
51
+ el.style.margin = '0';
52
+ el.style.zIndex = '100';
53
+
54
+ if (currentEffect[el.id]) currentEffect[el.id].cancel();
55
+ currentEffect[el.id] = showRolloverEffect(el.id, showRolloverEffectOptions);
56
+
57
+ if (el = $(target + '_menu')) {
58
+ el.style.display = 'none';
59
+ el.style.position = 'absolute';
60
+ el.style.left = (coords[0] + xMenuOffset) + 'px';
61
+ el.style.top = (coords[1] + yMenuOffset) + 'px';
62
+ el.style.margin = '0';
63
+ el.style.zIndex = '100';
64
+
65
+ for (var i = 0; i < el.childNodes.length; i++) {
66
+ if (el.childNodes[i].tagName == 'DIV') {
67
+ el.style.width = el.childNodes[i].style.width;
68
+ el.style.height = el.childNodes[i].style.height;
69
+ break;
70
+ }
71
+ }
72
+ if (currentEffect[el.id]) currentEffect[el.id].cancel();
73
+ currentEffect[el.id] = showRolloverMenuEffect(el.id, showRolloverMenuEffectOptions);
74
+ }
75
+
76
+ hoveredButtons[target] = true;
77
+ } catch (e) { }
78
+ }
79
+
80
+ function hideRollover(target) {
81
+ try {
82
+ hideRolloverTimeouts[target] = setTimeout('hideRolloverComplete("' + target + '");', hideRolloverDelay);
83
+ } catch (e) {}
84
+ }
85
+
86
+ function hideRolloverComplete(target) {
87
+ try {
88
+ hideRolloverTimeouts[target] = null;
89
+
90
+ if (el = $(target + '_hover')) {
91
+ if (currentEffect[el.id]) currentEffect[el.id].cancel();
92
+ currentEffect[el.id] = hideRolloverEffect(el.id, hideRolloverEffectOptions);
93
+ }
94
+
95
+ if (el = $(target + '_menu')) {
96
+ if (currentEffect[el.id]) currentEffect[el.id].cancel();
97
+ currentEffect[el.id] = hideRolloverMenuEffect(el.id, hideRolloverMenuEffectOptions);
98
+ }
99
+
100
+ hoveredButtons[target] = false;
101
+ } catch (e) {}
102
+ }
103
+
104
+
105
+ var hideSimpleRolloverTimeouts = [];
106
+ function showSimpleRollover(target, xOffset, yOffset) {
107
+ try {
108
+ // if we were planning to hide this element in the future, no need for that now
109
+ if (hideSimpleRolloverTimeouts[target]) {
110
+ clearTimeout(hideSimpleRolloverTimeouts[target]);
111
+ hideSimpleRolloverTimeouts[target] = null;
112
+ return;
113
+ }
114
+
115
+ // if other elements are waiting to be hidden, get it over with now
116
+ $H(hideSimpleRolloverTimeouts)._each(function (pair) {
117
+ clearTimeout(pair[1]);
118
+ hideSimpleRolloverComplete(pair[0]);
119
+ });
120
+ } catch (e) {}
121
+
122
+ try {
123
+ var el = document.getElementById(target + '_std');
124
+ el.oldsrc = el.src;
125
+ el.src = el.src.replace(/(_hover)?.gif$/, '_hover.gif');
126
+ if (!(is.ie && is.mac)) showSimpleRolloverMenu(target, xOffset, yOffset);
127
+ } catch (e) {}
128
+ }
129
+
130
+ function showSimpleRolloverMenu(target, xOffset, yOffset, useRelative) {
131
+ try {
132
+ if (hideSimpleRolloverTimeouts[target]) {
133
+ clearTimeout(hideSimpleRolloverTimeouts[target]);
134
+ hideSimpleRolloverTimeouts[target] = null;
135
+ return;
136
+ }
137
+
138
+ var el = document.getElementById(target + '_std');
139
+ if (el) {
140
+ var coords = getElementPosition(el);
141
+
142
+ if (typeof(xOffset) == 'undefined') xOffset = 0;
143
+ if (typeof(yOffset) == 'undefined') yOffset = 30;
144
+ if (typeof(useRelative) == 'undefined') useRelative = false;
145
+
146
+ if (el = document.getElementById(target + '_menu')) {
147
+ el.style.zIndex = 100;
148
+ el.style.position = 'absolute';
149
+ if (useRelative) {
150
+ el.style.left = xOffset + 'px';
151
+ el.style.top = yOffset + 'px';
152
+ } else {
153
+ el.style.left = (coords[0] + xOffset) + 'px';
154
+ el.style.top = (coords[1] + yOffset) + 'px';
155
+ }
156
+ el.style.display = '';
157
+ }
158
+ }
159
+ } catch (e) {}
160
+ }
161
+
162
+ function hideSimpleRollover(target) {
163
+ try {
164
+ hideSimpleRolloverTimeouts[target] = setTimeout('hideSimpleRolloverComplete("' + target + '")', 200);
165
+ } catch (e) {}
166
+ }
167
+
168
+ function hideSimpleRolloverComplete(target) {
169
+ try {
170
+ var el = document.getElementById(target + '_std');
171
+ if (el.oldsrc) el.src = el.oldsrc;
172
+ hideSimpleRolloverMenuComplete(target);
173
+ } catch (e) {}
174
+ }
175
+
176
+ function hideSimpleRolloverMenu(target) {
177
+ try {
178
+ hideSimpleRolloverTimeouts[target] = setTimeout('hideSimpleRolloverMenuComplete("' + target + '")', 200);
179
+ } catch (e) {}
180
+ }
181
+
182
+ function hideSimpleRolloverMenuComplete(target) {
183
+ try {
184
+ hideSimpleRolloverTimeouts[target] = null;
185
+
186
+ var el = document.getElementById(target + '_std');
187
+ var coords = getElementPosition(el);
188
+
189
+ if (el = document.getElementById(target + '_menu')) {
190
+ el.style.display = 'none';
191
+ }
192
+ } catch (e) {}
193
+ }
@@ -0,0 +1,116 @@
1
+ /********************************
2
+ * custom effects *
3
+ ********************************/
4
+
5
+ Effect.BlindRight = function(element) {
6
+ element = $(element);
7
+ var oldWidth = Element.getStyle(element, 'width');
8
+ var elementDimensions = Element.getDimensions(element);
9
+ return new Effect.Scale(element, 100,
10
+ Object.extend({
11
+ scaleContent: false,
12
+ scaleY: false,
13
+ scaleFrom: 0,
14
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
15
+ restoreAfterFinish: true,
16
+ afterSetup: function(effect) { with(Element) {
17
+ makeClipping(effect.element);
18
+ setStyle(effect.element, {width: '0px'});
19
+ show(effect.element);
20
+ }}
21
+ }, arguments[1] || {})
22
+ );
23
+ }
24
+
25
+ Effect.SlideAppear = function(element) {
26
+ element = $(element);
27
+ new Effect.Appear(element, arguments[2] || arguments[1] || {});
28
+ new Effect.BlindRight(element, arguments[1] || {});
29
+ }
30
+
31
+ /********************************
32
+ * slideshow functions *
33
+ ********************************/
34
+
35
+ var currentSlideIndex = 0;
36
+ var maxSlideIndex = -1;
37
+
38
+ function getNumSlides() {
39
+ if (maxSlideIndex > -1) return maxSlideIndex;
40
+ maxSlideIndex = 0;
41
+
42
+ while ($('img_slideshow' + maxSlideIndex)) maxSlideIndex++;
43
+ return maxSlideIndex;
44
+ }
45
+
46
+ function nextSlide(delay, transition) {
47
+ if (typeof(transition) == 'undefined') transition = 'SlideAppear';
48
+ changeSlide(delay, transition, 1);
49
+ }
50
+
51
+ function prevSlide(delay, transition) {
52
+ if (typeof(transition) == 'undefined') transition = 'SlideAppear';
53
+ changeSlide(delay, transition, -1);
54
+ }
55
+
56
+ // controls elements named img_slideshowX
57
+ // uses a global named currentSlideIndex to keep track of its state
58
+ // uses a global named maxSlideIndex to cache the discovered maximum slide index
59
+ function changeSlide(delay, transition, increment) {
60
+ try {
61
+ if (typeof(delay) == 'undefined') delay = -1;
62
+ if (typeof(transition) == 'undefined') transition = 'SlideAppear';
63
+
64
+ // this element is used for positioning
65
+ origimg = $('img_slideshow');
66
+
67
+ nextSlideIndex = currentSlideIndex + increment;
68
+ if (!$('img_slideshow' + nextSlideIndex)) {
69
+ if (increment > 0) {
70
+ nextSlideIndex = 0;
71
+ } else {
72
+ nextSlideIndex = getNumSlides() - 1;
73
+ }
74
+ }
75
+
76
+ if ((curimg = $('img_slideshow' + currentSlideIndex)) &&
77
+ (nextimg = $('img_slideshow' + nextSlideIndex))) {
78
+ // push old images back
79
+ for (var i = 0; i < getNumSlides(); i++) {
80
+ $('img_slideshow' + i).style.zIndex = ((increment > 0) ? i : (getNumSlides() - i));
81
+ }
82
+ nextimg.style.zIndex = '90';
83
+ nextimg.style.margin = '0';
84
+
85
+ // really shouldn't have to do this, but I just can't figure it out...
86
+ curimg.style.zIndex = '89';
87
+
88
+ // drag the new image over the main image
89
+ var coords = getElementPosition(origimg);
90
+ nextimg.style.position = 'absolute';
91
+ nextimg.style.left = coords[0] + 'px';
92
+ nextimg.style.top = coords[1] + 'px';
93
+
94
+ eval('Effect.' + transition + '(nextimg.id, { duration: 1.8 });');
95
+ setTimeout('$("' + curimg.id + '").style.display = "none"', 1900);
96
+ if (delay > 0) setTimeout('changeSlide(' + delay + ', "' + transition + '", ' + increment + ');', delay);
97
+
98
+ currentSlideIndex = nextSlideIndex;
99
+ }
100
+ } catch (e) {}
101
+ }
102
+
103
+ // positions slide navigation elements (named btn_slidenext and btn_slideprev)
104
+ // relative to img_slideshow (x and y are the relative offsets)
105
+ function positionSlideNav(x, y) {
106
+ try {
107
+ img = $('img_slideshow');
108
+ nav = $('div_slidenav');
109
+
110
+ // move the buttons to their proper places
111
+ nav.style.zIndex = '95';
112
+ nav.style.position = 'relative';
113
+ nav.style.left = x + 'px';
114
+ nav.style.top = y + 'px';
115
+ } catch (e) {}
116
+ }
@@ -0,0 +1,55 @@
1
+ /* deprecated text field hints (use html placeholder attribute instead) */
2
+
3
+ /********************************
4
+ * text field hints *
5
+ ********************************/
6
+
7
+ var textFieldHints = new Array();
8
+ function setupTextFieldHints() {
9
+ textFieldHints.each(function (a) {
10
+ $A(document.getElementsByName(a.name)).each(function (el) {
11
+ var clearHint = function () {
12
+ el.value = '';
13
+ el.style.color = el.style.origColor ? el.style.origColor : 'black';
14
+ el.onfocus = el.oldOnFocus;
15
+ el.oldOnBlur = el.onblur;
16
+ el.onblur = function () {
17
+ if (typeof(el.oldOnBlur) == 'function') el.oldOnBlur();
18
+ setHint();
19
+ }
20
+ };
21
+ var setHint = function () {
22
+ if (!el.value || el.value == a.hint) {
23
+ el.value = a.hint;
24
+ el.style.origColor = el.style.color;
25
+ el.style.color = 'gray';
26
+ if (typeof(el.oldOnBlur) != 'undefined') el.onblur = el.oldOnBlur;
27
+ el.oldOnFocus = el.onfocus;
28
+ el.onfocus = function () {
29
+ if (typeof(el.oldOnFocus) == 'function') el.oldOnFocus();
30
+ clearHint();
31
+ }
32
+ }
33
+ }
34
+ setHint();
35
+ })
36
+ });
37
+ }
38
+ addLoadEvent(setupTextFieldHints);
39
+
40
+ function teardownTextFieldHints() {
41
+ textFieldHints.each(function (a) {
42
+ var el = document.getElementsByName(a.name)[0];
43
+ if (el.value == a.hint) {
44
+ el.value = '';
45
+ el.style.color = el.origColor ? el.origColor : 'black';
46
+ el.onfocus = null;
47
+ }
48
+ });
49
+ }
50
+
51
+ function addTextFieldHint(name, hint) {
52
+ if (textFieldHints.select(function (a) { return a.name == name }).length == 0) {
53
+ textFieldHints.push({ name: name, hint: hint });
54
+ }
55
+ }
@@ -4,6 +4,19 @@
4
4
  //= require dragdrop
5
5
  //= require controls
6
6
  //= require jquery_no_conflict
7
+ //= require jquery-ui
7
8
  //= require builder
8
9
  //= require cropper
9
- //= require imagine
10
+ //
11
+ //= require codemirror
12
+ //= require codemirror/modes/xml
13
+ //= require codemirror/modes/javascript
14
+ //= require codemirror/modes/css
15
+ //= require codemirror/modes/ruby
16
+ //= require codemirror/modes/htmlmixed
17
+ // require codemirror/modes/htmlembedded
18
+ //= require codemirror/modes-custom/imagine_cms
19
+ //
20
+ //= require tag-it
21
+ //
22
+ //= require imagine_cms/core
@@ -0,0 +1,26 @@
1
+ //= require prototype
2
+ //= require prototype_ujs
3
+ //= require effects
4
+ //= require dragdrop
5
+ //= require controls
6
+ //= require jquery_no_conflict
7
+ //= require jquery-ui
8
+ //= require builder
9
+ //= require cropper
10
+ //
11
+ //= require codemirror
12
+ //= require codemirror/modes/xml
13
+ //= require codemirror/modes/javascript
14
+ //= require codemirror/modes/css
15
+ //= require codemirror/modes/ruby
16
+ //= require codemirror/modes/htmlmixed
17
+ // require codemirror/modes/htmlembedded
18
+ //= require codemirror/modes-custom/imagine_cms
19
+ //
20
+ //= require tag-it
21
+ //
22
+ //= require imagine_cms/core
23
+ //= require imagine_cms/legacy/rollovers
24
+ //= require imagine_cms/legacy/slideshow
25
+ //= require imagine_cms/legacy/misc
26
+ //= require imagine_cms/legacy/textfieldhints