imagine_cms 5.2.1 → 5.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Dockerfile +4 -3
- data/README.md +11 -0
- data/app/assets/javascripts/dojo/dojo.js +1 -1
- data/app/assets/javascripts/imagine_cms/core.js +30 -39
- data/app/assets/stylesheets/imagine_controls.css.scss +45 -2
- data/app/controllers/cms/content_controller.rb +2 -2
- data/app/controllers/manage/cms_pages_controller.rb +35 -24
- data/app/helpers/cms_application_helper.rb +16 -12
- data/app/mailers/imagine_cms_mailer.rb +1 -1
- data/app/views/imagine_cms/_header.html.erb +9 -9
- data/app/views/imagine_cms_mailer/request_review.text.erb +0 -2
- data/app/views/layouts/management.html.erb +5 -4
- data/app/views/manage/cms_pages/_edit_page.html.erb +8 -3
- data/app/views/manage/cms_pages/_list_page.html.erb +28 -7
- data/app/views/manage/cms_pages/_list_pages.html.erb +1 -1
- data/app/views/manage/cms_pages/_page_list.html.erb +5 -5
- data/app/views/manage/cms_pages/_page_list_source_tag.html.erb +6 -2
- data/app/views/manage/cms_pages/index.html.erb +36 -35
- data/app/views/manage/cms_pages/select_page.html.erb +7 -12
- data/docker-compose.yml +4 -4
- data/docker/conf/nginx-vhost.conf.template +1 -1
- data/lib/extensions/action_controller_extensions.rb +1 -1
- data/lib/imagine_cms/version.rb +1 -1
- data/lib/upload_progress/lib/multipart_progress.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 463afd9f9daba1b0c0a16f0df7fd8e70a0c990d9bfad455cd65fccfc2c06d71c
|
4
|
+
data.tar.gz: 515cb433392199c789c3557ab622c5819df8d851f4f165433bfd0e0bd6ca289c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dbffc87ab7a4088661650784ba2114cf09d0533866f23b05be424ef3bd6fb39e0e646becae7e96026f4b3323a81b1a18d9768a5ba0e0ff2501d47cbbfc77415e
|
7
|
+
data.tar.gz: 6812f71fcff897f94907b4f101fdecdc3569f2f42a117cef95cd7c81bedd4e65b386c9ac478db788919953abc300504d06ddb8325fc6d14e5e76a29b2a6ffd66
|
data/Dockerfile
CHANGED
@@ -10,10 +10,10 @@ RUN apt-get upgrade -y -o Dpkg::Options::="--force-confnew"
|
|
10
10
|
|
11
11
|
# Install other packages we depend on
|
12
12
|
RUN apt-get install -y mysql-client
|
13
|
+
RUN apt-get install -y memcached
|
13
14
|
RUN apt-get install -y libmagickcore-dev libmagickwand-dev # for rmagick2 gem
|
14
15
|
RUN apt-get install -y imagemagick # for mini-magick gem
|
15
|
-
RUN apt-get install -y openjdk-8-jre-headless
|
16
|
-
RUN apt-get install -y cmake pkg-config # for rugged (git)
|
16
|
+
# RUN apt-get install -y openjdk-8-jre-headless # java for fop (rarely used; add to your own Dockerfile if you need it)
|
17
17
|
RUN apt-get autoremove -y
|
18
18
|
|
19
19
|
# apt clean up
|
@@ -27,7 +27,8 @@ COPY /docker/conf/nginx-vhost.conf.template /etc/nginx/
|
|
27
27
|
RUN rm -f /etc/nginx/sites-enabled/default
|
28
28
|
|
29
29
|
# Add custom services
|
30
|
-
RUN mkdir /etc/service/memcached
|
30
|
+
RUN mkdir -p /etc/service/memcached
|
31
|
+
RUN rm -f /etc/service/memcached/down
|
31
32
|
COPY docker/services/memcached /etc/service/memcached/run
|
32
33
|
|
33
34
|
# For convenience
|
data/README.md
CHANGED
@@ -48,3 +48,14 @@ Get paid support and hosting for Imagine CMS straight from the people who made i
|
|
48
48
|
## Contributing
|
49
49
|
|
50
50
|
Imagine 7 (Crystal) will be a true open source project, but this project (Ruby-based Imagine) will remain more or less closed for the foreseeable future. If companies or individuals are willing to sponsor or co-develop new features, we can work something out.
|
51
|
+
|
52
|
+
## Building Docker Image
|
53
|
+
|
54
|
+
(notes for myself)
|
55
|
+
|
56
|
+
```bash
|
57
|
+
docker build -t anamba/imagine5-dev:latest .
|
58
|
+
docker tag anamba/imagine5-dev:latest anamba/imagine5-dev:5.2.1
|
59
|
+
docker tag anamba/imagine5-dev:latest anamba/imagine5-dev:5.2
|
60
|
+
docker push anamba/imagine5-dev
|
61
|
+
```
|
@@ -9599,7 +9599,7 @@ var _8d9=dojo.html.getUnitValue(this.domNode,"line-height");
|
|
9599
9599
|
if(_8d9.value&&_8d9.units==""){
|
9600
9600
|
_8d8=_8d9.value;
|
9601
9601
|
}
|
9602
|
-
dojo.html.insertCssText("body,html{background:transparent;padding:0;margin:
|
9602
|
+
dojo.html.insertCssText("body,html{background:transparent;padding:0;margin:5px;}"+"body{top:0;left:0;right:0;"+(((this.height)||(dojo.render.html.opera))?"":"position:fixed;")+"font:"+font+";"+"min-height:"+this.minHeight+";"+"line-height:"+_8d8+"}"+"p{margin: 1em 0 !important;}"+"body > *:first-child{padding-top:0 !important;margin-top:"+this._firstChildContributingMargin+"px !important;}"+"body > *:last-child{padding-bottom:0 !important;margin-bottom:"+this._lastChildContributingMargin+"px !important;}"+"li > ul:-moz-first-node, li > ol:-moz-first-node{padding-top:1.2em;}\n"+"li{min-height:1.2em;}"+"",this.document);
|
9603
9603
|
dojo.html.removeNode(_8cd);
|
9604
9604
|
this.document.body.innerHTML=html;
|
9605
9605
|
if(_8ca||dojo.render.html.safari){
|
@@ -83,19 +83,14 @@ function dpNextMonth(object, method_prefix, max_year) {
|
|
83
83
|
********************************/
|
84
84
|
|
85
85
|
var cbNumColumns = 0;
|
86
|
-
var cbColWidth =
|
87
|
-
var cbColHeight =
|
88
|
-
var cbBorderWidth = '1px';
|
89
|
-
var cbColWidthFull = 202;
|
86
|
+
var cbColWidth = 200;
|
87
|
+
var cbColHeight = 240;
|
90
88
|
|
91
89
|
function cbAddColumn() {
|
92
|
-
|
93
|
-
|
94
|
-
$('columnBrowser').style.width = '' + ((cbNumColumns+1) * cbColWidthFull) + 'px';
|
95
|
-
$('columnBrowserContainer').scrollLeft = $('columnBrowserContainer').scrollWidth;
|
96
|
-
// }
|
97
|
-
$('columnBrowser').innerHTML += "<div id=\"columnBrowserLevel" + cbNumColumns + "\" style=\"width: " + cbColWidth + "; height: " + cbColHeight + "; overflow: auto; float: left; border-width: " + cbBorderWidth + " " + cbBorderWidth + " " + cbBorderWidth + " " + (cbNumColumns == 0 ? cbBorderWidth : '0') + "; border-style: solid; border-color: gray;\">Loading...</div>";
|
90
|
+
jQuery('#columnBrowser').append('<div id="columnBrowserLevel' + cbNumColumns + '" class="cb_column">Loading...</div>');
|
91
|
+
jQuery('#columnBrowserContainer').scrollLeft(jQuery('#columnBrowserContainer')[0].scrollWidth);
|
98
92
|
cbNumColumns++;
|
93
|
+
jQuery('#columnBrowser').css({ width: '' + ((cbColWidth+1) * cbNumColumns) + 'px' });
|
99
94
|
}
|
100
95
|
|
101
96
|
function getScrollbarPosition(el) {
|
@@ -110,31 +105,25 @@ function setScrollbarPosition(el, coords) {
|
|
110
105
|
}
|
111
106
|
|
112
107
|
function cbSelectItem(el, currentLevel, urlForNextLevel) {
|
113
|
-
var el =
|
114
|
-
coords = getScrollbarPosition(el.parentNode);
|
108
|
+
var el = jQuery(el);
|
109
|
+
// coords = getScrollbarPosition(el.parentNode);
|
115
110
|
|
116
|
-
// remove all higher levels
|
111
|
+
// remove all higher levels
|
117
112
|
for (var i = currentLevel + 1; i <= cbNumColumns; i++) {
|
118
|
-
|
119
|
-
if (d) d.parentNode.removeChild(d);
|
113
|
+
jQuery('#columnBrowserLevel' + i).remove();
|
120
114
|
}
|
121
115
|
cbNumColumns = currentLevel + 1;
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
// select and expand current dept div
|
131
|
-
el.className = 'cb_item cb_item_selected';
|
132
|
-
|
116
|
+
|
117
|
+
// unselect all other same-level divs and select target
|
118
|
+
// prefix = 'cb_item_';
|
119
|
+
el.siblings().removeClass('cb_item_selected');
|
120
|
+
el.addClass('cb_item_selected');
|
121
|
+
|
122
|
+
// display children
|
133
123
|
cbAddColumn();
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
setScrollbarPosition(el.parentNode, coords);
|
124
|
+
new Ajax.Updater('columnBrowserLevel' + (currentLevel+1), urlForNextLevel, {method: 'GET', asynchronous: true, evalScripts: true});
|
125
|
+
|
126
|
+
// setScrollbarPosition(el.parentNode, coords);
|
138
127
|
}
|
139
128
|
|
140
129
|
|
@@ -346,13 +335,15 @@ function closePageBrowser() {
|
|
346
335
|
$(pageBrowserFieldID).value = $('page_browser_selection').value;
|
347
336
|
}
|
348
337
|
|
349
|
-
|
338
|
+
// first level of this hash is parent_key below
|
350
339
|
var cmsPageObjects = {};
|
340
|
+
|
351
341
|
function scanForPageObjects(page_id, parent_key, version) {
|
352
342
|
if (jQuery('#page_objects_' + parent_key).val().length == 0) return;
|
353
|
-
|
343
|
+
|
354
344
|
var found = {};
|
355
|
-
|
345
|
+
if (!cmsPageObjects[parent_key]) cmsPageObjects[parent_key] = {};
|
346
|
+
|
356
347
|
var regex = /<%=\s*insert_object\(?\s*['"]([-\w\s\d]+)['"],\s*:(\w+)\s*(.*?)\)?\s*%>/gm;
|
357
348
|
var matches = jQuery('#page_objects_' + parent_key).val().match(regex);
|
358
349
|
if (matches) {
|
@@ -367,7 +358,7 @@ function scanForPageObjects(page_id, parent_key, version) {
|
|
367
358
|
}
|
368
359
|
});
|
369
360
|
}
|
370
|
-
|
361
|
+
|
371
362
|
var regex = /<%=\s*(?:page_list|pagelist)\(?\s*['"]([-\w\s\d]+)['"](.*?)\)?\s*%>/gm;
|
372
363
|
var matches = jQuery('#page_objects_' + parent_key).val().match(regex);
|
373
364
|
if (matches) {
|
@@ -382,22 +373,22 @@ function scanForPageObjects(page_id, parent_key, version) {
|
|
382
373
|
}
|
383
374
|
});
|
384
375
|
}
|
385
|
-
|
376
|
+
|
386
377
|
// remove the cruft
|
387
378
|
jQuery.each(cmsPageObjects, function(key, val) {
|
388
|
-
if (cmsPageObjects[key] != found[key]) {
|
379
|
+
if (cmsPageObjects[parent_key][key] != found[key]) {
|
389
380
|
obj_key = val + '_container_obj-' + val + '-' + key.replace(/[^\w]/g, '_');
|
390
381
|
while (jQuery('#' + obj_key).length > 0) {
|
391
382
|
jQuery('#' + obj_key).remove();
|
392
383
|
}
|
393
|
-
cmsPageObjects[key] = null;
|
384
|
+
cmsPageObjects[parent_key][key] = null;
|
394
385
|
}
|
395
386
|
});
|
396
387
|
|
397
388
|
// bring in the new
|
398
389
|
jQuery.each(found, function (key, val) {
|
399
|
-
if (!cmsPageObjects[key]) {
|
400
|
-
cmsPageObjects[key] = val;
|
390
|
+
if (!cmsPageObjects[parent_key][key]) {
|
391
|
+
cmsPageObjects[parent_key][key] = val;
|
401
392
|
jQuery.get('/manage/cms_pages/' + page_id + '/insert_page_object_config?version= ' + version +
|
402
393
|
'&name=' + key + '&type=' + val + '&parent_key=' + parent_key);
|
403
394
|
}
|
@@ -34,13 +34,56 @@ div.auto_complete ul strong.highlight {
|
|
34
34
|
|
35
35
|
|
36
36
|
/** column browser **/
|
37
|
+
#columnBrowserContainer {
|
38
|
+
width: 100%; max-height: 90vh;
|
39
|
+
overflow: auto;
|
40
|
+
border: 1px solid gray;
|
41
|
+
border-width: 0 0 0 1px;
|
42
|
+
}
|
43
|
+
#columnBrowserToolbar {
|
44
|
+
background-color: #ddd;
|
45
|
+
padding: 5px 4px 0;
|
46
|
+
margin: 0 0 5px;
|
37
47
|
|
48
|
+
a {
|
49
|
+
margin-left: 2px;
|
50
|
+
}
|
51
|
+
a:first-child { margin-left: 0; }
|
52
|
+
}
|
53
|
+
.cb_column {
|
54
|
+
overflow: auto;
|
55
|
+
float: left;
|
56
|
+
border: 1px solid gray;
|
57
|
+
border-width: 1px 1px 1px 0;
|
58
|
+
}
|
38
59
|
.cb_item {
|
60
|
+
position: relative;
|
39
61
|
color: black;
|
40
|
-
padding
|
41
|
-
|
62
|
+
padding: 2px;
|
63
|
+
width: calc(100% - 22px);
|
64
|
+
overflow: hidden;
|
65
|
+
float: left;
|
66
|
+
cursor: pointer;
|
67
|
+
|
68
|
+
img { position: absolute; left: 5px; top: 5px; }
|
69
|
+
span {
|
70
|
+
display: block;
|
71
|
+
padding: 2px 0px 2px 20px;
|
72
|
+
-webkit-user-select: none;
|
73
|
+
-moz-user-select: none;
|
74
|
+
-ms-user-select: none;
|
75
|
+
user-select: none;
|
76
|
+
}
|
77
|
+
}
|
42
78
|
|
43
79
|
.cb_item.cb_item_selected {
|
44
80
|
color: white;
|
45
81
|
background-color: #506D91;
|
46
82
|
}
|
83
|
+
|
84
|
+
.cb_item.cb_item_offline {
|
85
|
+
color: gray;
|
86
|
+
}
|
87
|
+
.cb_item.cb_item_offline.cb_item_selected {
|
88
|
+
color: lightgray;
|
89
|
+
}
|
@@ -268,7 +268,7 @@ module Cms # :nodoc:
|
|
268
268
|
def rss_feed
|
269
269
|
min_time = Time.rfc2822(request.env["HTTP_IF_MODIFIED_SINCE"]) rescue nil
|
270
270
|
if min_time && (Time.now - min_time) < 5.minutes
|
271
|
-
render
|
271
|
+
render plain: '', status: '304 Not Modified' and return
|
272
272
|
end
|
273
273
|
|
274
274
|
@@cms_page_table_exists ||= CmsPage.table_exists?
|
@@ -292,7 +292,7 @@ module Cms # :nodoc:
|
|
292
292
|
|
293
293
|
if min_time && @most_recent_pub_date.published_date && @most_recent_pub_date.published_date <= min_time
|
294
294
|
# use cached version
|
295
|
-
render
|
295
|
+
render plain: '', status: '304 Not Modified' and return
|
296
296
|
end
|
297
297
|
|
298
298
|
@pages.each_with_index do |page, index|
|
@@ -448,10 +448,10 @@ class Manage::CmsPagesController < Manage::ApplicationController
|
|
448
448
|
logger.error(e)
|
449
449
|
end
|
450
450
|
end
|
451
|
-
|
452
|
-
render
|
451
|
+
|
452
|
+
render plain: 'success'
|
453
453
|
end
|
454
|
-
|
454
|
+
|
455
455
|
#
|
456
456
|
# helpers
|
457
457
|
#
|
@@ -475,12 +475,23 @@ class Manage::CmsPagesController < Manage::ApplicationController
|
|
475
475
|
focusOnLoad = !defined?(@cms_text_editor_placed)
|
476
476
|
@cms_text_editor_placed = true
|
477
477
|
content = ''.html_safe
|
478
|
-
content << text_area(:page_objects, key,
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
content <<
|
483
|
-
|
478
|
+
content << text_area(:page_objects, key,
|
479
|
+
{ dojoType: 'Editor2', toolbarGroup: 'main', isToolbarGroupLeader: 'false',
|
480
|
+
focusOnLoad: focusOnLoad.to_s, style: 'border: 2px dashed gray; padding: 5px',
|
481
|
+
minHeight: '100px' }.update(html_options))
|
482
|
+
content << content_tag(:div, '', id: "page_object_config_#{key}")
|
483
|
+
script_tag = <<-EOT
|
484
|
+
<script type="text/javascript">
|
485
|
+
window.addEventListener('load', (event) => {
|
486
|
+
scanForPageObjects(#{@pg.id}, '#{key}', #{@pg.version});
|
487
|
+
setInterval(function() {
|
488
|
+
scanForPageObjects(#{@pg.id}, '#{key}', #{@pg.version});
|
489
|
+
}, 1000);
|
490
|
+
});
|
491
|
+
</script>
|
492
|
+
EOT
|
493
|
+
content << script_tag.html_safe
|
494
|
+
# content << observe_field("page_objects_#{key}", function: "scanForPageObjects(#{@pg.id}, '#{key}', #{@pg.version});", frequency: 2)
|
484
495
|
content
|
485
496
|
when :page_list
|
486
497
|
# set defaults unless values are present in template
|
@@ -1275,35 +1286,35 @@ class Manage::CmsPagesController < Manage::ApplicationController
|
|
1275
1286
|
protected
|
1276
1287
|
|
1277
1288
|
def check_permissions
|
1278
|
-
|
1279
|
-
render '/imagine_cms/errors/permission_denied', :
|
1289
|
+
unless user_has_permission?(:manage_cms)
|
1290
|
+
render '/imagine_cms/errors/permission_denied', layout: false
|
1280
1291
|
return false
|
1281
1292
|
end
|
1282
1293
|
end
|
1283
1294
|
|
1284
1295
|
def validate_user_access
|
1285
|
-
unless @user.cms_allowed_sections.to_s.strip.blank?
|
1286
|
-
|
1296
|
+
unless (allowed_sections_str = @user.cms_allowed_sections.to_s.strip).blank?
|
1297
|
+
allowed = false
|
1298
|
+
allowed_sections = allowed_sections_str.split(',').map(&:strip).reject(&:blank?)
|
1287
1299
|
if @pg
|
1288
1300
|
path = '/' + @pg.path
|
1301
|
+
allowed_sections.each { |s| allowed ||= (path =~ /^#{s}/) }
|
1289
1302
|
else
|
1290
|
-
parent = CmsPage.find_by_id(params[:parent_id] || params[:pg][:parent_id]) rescue nil
|
1291
|
-
|
1292
|
-
|
1303
|
+
if (parent = CmsPage.find_by_id(params[:parent_id] || params[:pg][:parent_id]) rescue nil)
|
1304
|
+
path = '/' + parent.path
|
1305
|
+
allowed_sections.each { |s| allowed ||= (path =~ /^#{s}/) }
|
1306
|
+
end
|
1293
1307
|
end
|
1294
|
-
|
1295
|
-
allowed
|
1296
|
-
allowed_sections.each { |s| allowed ||= (path =~ /^#{s}/) }
|
1297
|
-
|
1298
|
-
if !allowed
|
1308
|
+
|
1309
|
+
unless allowed
|
1299
1310
|
respond_to do |wants|
|
1300
|
-
wants.js { render :
|
1301
|
-
wants.html { redirect_to "/#{@pg.path}#{@pg.path == '' ? '' : '/'}version/#{@pg.version}"
|
1311
|
+
wants.js { render plain: 'Sorry, you don\'t have permission to edit this page.' }
|
1312
|
+
wants.html { redirect_to "/#{@pg.path}#{@pg.path == '' ? '' : '/'}version/#{@pg.version}" }
|
1302
1313
|
end
|
1303
1314
|
return false
|
1304
1315
|
end
|
1305
1316
|
end
|
1306
|
-
|
1317
|
+
|
1307
1318
|
true
|
1308
1319
|
end
|
1309
1320
|
|
@@ -813,17 +813,21 @@ module CmsApplicationHelper
|
|
813
813
|
default_value = Time.parse(default_value) if default_value.is_a?(String)
|
814
814
|
default_value ||= start_date
|
815
815
|
|
816
|
-
draw_calendar =
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
|
816
|
+
draw_calendar = <<-EOT
|
817
|
+
window.addEventListener('DOMContentLoaded', (event) => {
|
818
|
+
new Ajax.Updater('date_picker_#{object}_#{method_prefix}_days',
|
819
|
+
'#{date_picker_url}?month=' + $('#{object}_#{method_prefix}_month_sel').value +
|
820
|
+
'&year=' + $('#{object}_#{method_prefix}_year_sel').value +
|
821
|
+
'&min_time=' + #{start_date.to_i} +
|
822
|
+
'&max_time=' + #{end_date.to_i} +
|
823
|
+
'&exclude_days=#{exclude_days.join(',')}' +
|
824
|
+
'&onchange=#{escape_javascript(options[:onchange])}' +
|
825
|
+
'&object=#{object}' +
|
826
|
+
'&method_prefix=#{method_prefix}', {method:'get', asynchronous:true, evalScripts:true})
|
827
|
+
});
|
828
|
+
EOT
|
829
|
+
|
830
|
+
ret = <<-EOT
|
827
831
|
<span><a href="#" onclick="showDatePicker('#{object}', '#{method_prefix}'); return false;"><span id="date_picker_#{object}_#{method_prefix}_value" style="font-weight: normal;">#{default_value.strftime('%a %m/%d/%y')}</span></a></span>
|
828
832
|
<span id="date_picker_#{object}_#{method_prefix}icon"><a href="#" onclick="showDatePicker('#{object}', '#{method_prefix}'); return false;"><img src="/assets/management/icon_time.gif" style="float: none" alt="date picker" /></a></span>
|
829
833
|
<div id="date_picker_#{object}_#{method_prefix}main" style="display: none; background-color: white; border: 1px solid gray; padding: 3px; z-index: 101;" class="date-picker-main">
|
@@ -847,7 +851,7 @@ module CmsApplicationHelper
|
|
847
851
|
<a href="#" onclick="hideDatePicker('#{object}', '#{method_prefix}'); return false;">Close</a>
|
848
852
|
</div>
|
849
853
|
</div>
|
850
|
-
|
854
|
+
EOT
|
851
855
|
ret += javascript_tag(draw_calendar)
|
852
856
|
ret.html_safe
|
853
857
|
end
|
@@ -6,7 +6,7 @@ class ImagineCmsMailer < ActionMailer::Base
|
|
6
6
|
@page_version = page_version
|
7
7
|
@recipient = recipient
|
8
8
|
@sender = sender
|
9
|
-
@change_description = change_description
|
9
|
+
@change_description = change_description # not currently used
|
10
10
|
|
11
11
|
mail(to: recipient.email_address, reply_to: (sender.email_address.blank? ? nil : sender.email_address),
|
12
12
|
from: "#{sender.first_name} #{sender.last_name} <#{CmsRequestReviewEmailSender}>",
|
@@ -1,11 +1,6 @@
|
|
1
1
|
<%#= javascript_tag 'var djConfig = { isDebug: true };' %>
|
2
2
|
|
3
|
-
<script
|
4
|
-
var load_dojo = false;
|
5
|
-
if (<%= @load_dojo || 'false' %>) {
|
6
|
-
load_dojo = true;
|
7
|
-
}
|
8
|
-
|
3
|
+
<script>
|
9
4
|
function readCookie(name) {
|
10
5
|
var ca = document.cookie.split(';');
|
11
6
|
for (var i=0; i < ca.length; i++) {
|
@@ -19,14 +14,19 @@
|
|
19
14
|
function loggedIn() {
|
20
15
|
return readCookie('user_auth_status') == 'authenticated';
|
21
16
|
}
|
22
|
-
|
17
|
+
</script>
|
18
|
+
<script type="text/javascript" async>
|
19
|
+
var load_dojo = false;
|
20
|
+
if (<%= @load_dojo || 'false' %>) {
|
21
|
+
load_dojo = true;
|
22
|
+
}
|
23
|
+
|
23
24
|
if (loggedIn() || load_dojo) {
|
24
25
|
document.writeln('<scr' + 'ipt src="/assets/dojo/dojo.js" type="text/javascript"></scr' + 'ipt>');
|
25
26
|
document.writeln('<link href="/assets/imagine_controls.css" media="screen" rel="stylesheet" type="text/css" />')
|
26
27
|
}
|
27
28
|
</script>
|
28
|
-
|
29
|
-
<script type="text/javascript">
|
29
|
+
<script type="text/javascript" async>
|
30
30
|
if (loggedIn()) {
|
31
31
|
dojo.require("dojo.widget.Editor2");
|
32
32
|
dojo.require("dojo.widget.Editor2Plugin.TableOperation");
|
@@ -47,13 +47,14 @@
|
|
47
47
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
48
48
|
|
49
49
|
<title><%= controller.controller_path.split('/').concat([ params[:action] ]).map { |s| s.titlecase }.join(' > ') %></title>
|
50
|
-
<%- if is_logged_in_user? -%>
|
51
|
-
<script src="/assets/dojo/dojo.js" type="text/javascript"></script>
|
52
|
-
<%- end -%>
|
53
50
|
<%= stylesheet_link_tag "application", media: "all" %>
|
54
51
|
<%= stylesheet_link_tag "management", media: "all" %>
|
55
52
|
<%= javascript_include_tag "application" %>
|
56
|
-
|
53
|
+
|
54
|
+
<%- if is_logged_in_user? -%>
|
55
|
+
<script src="/assets/dojo/dojo.js" type="text/javascript"></script>
|
56
|
+
<%- end -%>
|
57
|
+
|
57
58
|
<%= csrf_meta_tag %>
|
58
59
|
</head>
|
59
60
|
|
@@ -172,8 +172,13 @@
|
|
172
172
|
<div style="position: relative;">
|
173
173
|
<%= text_field_tag :custom_attribute_name, '', class: 'form', style: 'margin-bottom: 4px;', placeholder: '[ attribute name ]' %>
|
174
174
|
<div id="custom_attribute_name_auto_complete" class="auto_complete" style="display: none;"></div>
|
175
|
-
|
176
|
-
|
175
|
+
<script type="text/javascript">
|
176
|
+
window.addEventListener('DOMContentLoaded', (event) => {
|
177
|
+
$('custom_attribute_name').onkeydown = disableEnterKey;
|
178
|
+
new Autocompleter.Local('custom_attribute_name', 'custom_attribute_name_auto_complete', attrlist, { frequency: 0.1, minChars: 1 });
|
179
|
+
});
|
180
|
+
</script>
|
181
|
+
|
177
182
|
<%= button_to_function 'Add', "new Ajax.Updater('custom_attributes', '#{url_for(controller: '/manage/cms_pages', action: 'page_attribute')}?name=' + $('custom_attribute_name').value, {asynchronous:true, method:'get', evalScripts:true, insertion:Insertion.Bottom}); $('custom_attribute_name').value = ''; return false;", class: 'form_button', style: 'margin-bottom: 5px;' %>
|
178
183
|
</div>
|
179
184
|
</td>
|
@@ -196,7 +201,7 @@
|
|
196
201
|
</tr>
|
197
202
|
</table>
|
198
203
|
<% end -%>
|
199
|
-
|
204
|
+
<script type="text/javascript">
|
200
205
|
jQuery('#pg_cms_template_id').change(function () {
|
201
206
|
jQuery.get('<%= url_for(action: 'show_template_options', id: @pg) %>?template_id=' + jQuery(this).val(), null, function (data) {
|
202
207
|
jQuery('#edit_page_template_options').html(data);
|
@@ -1,8 +1,29 @@
|
|
1
|
-
<div id="<%=
|
2
|
-
|
3
|
-
|
4
|
-
<td valign="top"><%= image_tag 'management/icon_page.gif', style: 'margin: 2px 5px 0 0;' %></td>
|
5
|
-
<td<%= list_page.published_version >= 0 ? '' : ' style="color: gray"'.html_safe %>><%= list_page.name %></td>
|
6
|
-
</tr>
|
7
|
-
</table>
|
1
|
+
<div id="cb_item_<%= list_page.id %>" class="cb_item<%= ' cb_item_offline' unless list_page.published_version >= 0 %>">
|
2
|
+
<%= image_tag 'management/icon_page.gif' %></td>
|
3
|
+
<span><%= list_page.name %></span>
|
8
4
|
</div>
|
5
|
+
|
6
|
+
<script type="text/javascript">
|
7
|
+
jQuery('#cb_item_<%= list_page.id %>').on('click', () => {
|
8
|
+
jQuery('#view_link').prop('href', '<%= list_page.path.blank? ? '' : '/' + list_page.path %>/version/<%= list_page.published_version > 0 ? list_page.published_version : list_page.version %>');
|
9
|
+
jQuery('#new_link').off('click');
|
10
|
+
jQuery('#new_link').on('click', () => {
|
11
|
+
editProperties('<%=raw url_for action: 'new', mode: 'ajax_new', parent_id: list_page %>', 'Create New Page under /<%= list_page.path %>');
|
12
|
+
return false;
|
13
|
+
});
|
14
|
+
jQuery('#edit_link').off('click');
|
15
|
+
jQuery('#edit_link').on('click', () => {
|
16
|
+
editProperties('<%=raw url_for action: 'edit_page', id: list_page, mode: 'ajax_edit' %>', 'Page Properties: <%= list_page.name %>');
|
17
|
+
return false;
|
18
|
+
});
|
19
|
+
jQuery('#edit_content_link').prop('href', '<%=raw url_for action: 'edit_page_content', id: list_page %>');
|
20
|
+
jQuery('#delete_link').prop('href', '<%=raw url_for action: 'delete_page', id: list_page.id %>');
|
21
|
+
setTimeout(() => {
|
22
|
+
cbSelectItem('#cb_item_<%= list_page.id %>', <%= @page_level %>, '<%=raw url_for action: 'list_pages', level: @page_level + 1, parent_id: list_page.id %>');
|
23
|
+
}, 200);
|
24
|
+
});
|
25
|
+
jQuery('#cb_item_<%= list_page.id %>').on('dblclick', (event) => {
|
26
|
+
location.href = jQuery('#edit_content_link')[0].href;
|
27
|
+
return false;
|
28
|
+
});
|
29
|
+
</script>
|
@@ -1 +1 @@
|
|
1
|
-
<%= render :
|
1
|
+
<%= render partial: 'list_page', collection: @pages %>
|
@@ -177,12 +177,12 @@
|
|
177
177
|
</div>
|
178
178
|
|
179
179
|
<script type="text/javascript">
|
180
|
-
var displayAsList = jQuery('#page_objects_<%= key %>-style-display-as_list').checked;
|
181
|
-
jQuery('.page_list_<%= key %>_list_option').toggle(displayAsList);
|
182
|
-
jQuery('.page_list_<%= key %>_calendar_option').toggle(!displayAsList);
|
183
|
-
|
184
180
|
// reattach to a safe place in the DOM (away from styled regions)
|
185
|
-
|
181
|
+
window.addEventListener('DOMContentLoaded', (event) => {
|
182
|
+
var displayAsList = jQuery('#page_objects_<%= key %>-style-display-as_list').checked;
|
183
|
+
jQuery('.page_list_<%= key %>_list_option').toggle(displayAsList);
|
184
|
+
jQuery('.page_list_<%= key %>_calendar_option').toggle(!displayAsList);
|
185
|
+
|
186
186
|
jQuery('#page_list_<%= key %>').appendTo(jQuery('#page_content_form')[0]);
|
187
187
|
jQuery('#page_objects_<%= key %>-style-display-as_list').click(function () {
|
188
188
|
jQuery('.page_list_<%= key %>_list_option').show();
|
@@ -8,11 +8,15 @@
|
|
8
8
|
<%= text_field(:page_objects, "#{key}-sources-tag#{i}", :class => 'form', :style => 'margin: 0; padding: 2px; border: 1px solid gray; width: 98%;') %>
|
9
9
|
|
10
10
|
<div id="page_objects_<%= key %>-sources-tag<%= i %>_auto_complete" class="auto_complete" style="display: none;"></div>
|
11
|
-
|
11
|
+
<script type="text/javascript">
|
12
|
+
window.addEventListener('DOMContentLoaded', (event) => {
|
13
|
+
new Autocompleter.Local('page_objects_<%= key %>-sources-tag<%= i %>', 'page_objects_<%= key %>-sources-tag<%= i %>_auto_complete', taglist, { frequency: 0.1, minChars: 1 });
|
14
|
+
});
|
15
|
+
</script>
|
12
16
|
</td>
|
13
17
|
<td>
|
14
18
|
<%= select(:page_objects, "#{key}-sources-tag#{i}-behavior", [ 'include', 'exclude', 'require' ], {}, :class => 'form', :style => 'margin: 0; padding: 1px; border: 1px solid gray; width: 100%;') %>
|
15
19
|
</td>
|
16
20
|
</tr>
|
17
21
|
</table>
|
18
|
-
</div>
|
22
|
+
</div>
|
@@ -1,36 +1,33 @@
|
|
1
|
-
|
1
|
+
<%-
|
2
2
|
cbNumColumns = 0;
|
3
|
-
cbColWidth =
|
4
|
-
cbColHeight =
|
5
|
-
cbBorderWidth = 1;
|
6
|
-
cbColWidthFull = 172;
|
3
|
+
cbColWidth = 200;
|
4
|
+
cbColHeight = 400;
|
7
5
|
-%>
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
6
|
+
<script type="text/javascript">
|
7
|
+
window.cbColWidth = <%= cbColWidth %>;
|
8
|
+
window.cbColHeight = <%= cbColHeight %>;
|
9
|
+
</script>
|
10
|
+
<style type="text/css">
|
11
|
+
.cb_column {
|
12
|
+
width: <%= cbColWidth %>px;
|
13
|
+
height: <%= cbColHeight %>px;
|
14
|
+
}
|
15
|
+
</style>
|
18
16
|
|
19
17
|
<h2>CMS » Pages</h2>
|
20
18
|
|
21
19
|
<%= flash_message %>
|
22
20
|
|
23
|
-
<div id="columnBrowserToolbar"
|
24
|
-
<%= link_to image_tag('management/btn-top-new.png'
|
25
|
-
<%= link_to image_tag('management/btn-top-edit.png'
|
26
|
-
<%= link_to image_tag('management/btn-top-properties.png'
|
27
|
-
<%= link_to image_tag('management/btn-top-preview.png'
|
28
|
-
<%= link_to image_tag('management/btn-top-delete.png'
|
29
|
-
<div class="clearer"></div>
|
21
|
+
<div id="columnBrowserToolbar">
|
22
|
+
<%= link_to image_tag('management/btn-top-new.png'), '#', id: 'new_link' %>
|
23
|
+
<%= link_to image_tag('management/btn-top-edit.png'), '#', id: 'edit_content_link' %>
|
24
|
+
<%= link_to image_tag('management/btn-top-properties.png'), '#', id: 'edit_link' %>
|
25
|
+
<%= link_to image_tag('management/btn-top-preview.png'), '#', id: 'view_link', target: '_blank' %>
|
26
|
+
<%= link_to image_tag('management/btn-top-delete.png'), '#', id: 'delete_link', method: :post, data: { confirm: 'Are you sure you want to delete the selected page?' } %>
|
30
27
|
</div>
|
31
28
|
|
32
|
-
<div id="columnBrowserContainer" style="
|
33
|
-
<div id="columnBrowser" style="width: <%=
|
29
|
+
<div id="columnBrowserContainer" style="height: <%= cbColHeight + 2 %>px;">
|
30
|
+
<div id="columnBrowser" style="width: <%= (cbColWidth+1) * @page_levels.size %>px;">
|
34
31
|
<%- @page_levels.each_with_index do |name, i| -%>
|
35
32
|
<%-
|
36
33
|
if name.present?
|
@@ -41,21 +38,21 @@ EOF
|
|
41
38
|
@page = CmsPage.find_by_path @path
|
42
39
|
@page_level = i
|
43
40
|
@pages = @parent.children if @parent
|
44
|
-
|
41
|
+
|
45
42
|
break_flag = false
|
46
|
-
|
43
|
+
|
47
44
|
if !@page
|
48
45
|
@page = @parent.children.first || @parent || CmsPage.first
|
49
46
|
break_flag = true
|
50
47
|
end
|
51
48
|
-%>
|
52
|
-
<div id="columnBrowserLevel<%= i %>"
|
49
|
+
<div id="columnBrowserLevel<%= i %>" class="cb_column">
|
53
50
|
<%- if i == 0 -%>
|
54
51
|
<%= render partial: 'list_page', locals: { list_page: CmsPage.first } %>
|
55
52
|
<%- else -%>
|
56
53
|
<%= render partial: 'list_pages' %>
|
57
54
|
<%- end -%>
|
58
|
-
<%= javascript_tag "jQuery('#cb_item_#{@parent.id}').addClass('cb_item_selected');" if @parent %>
|
55
|
+
<%= javascript_tag "jQuery('#cb_item_#{@parent.id}').addClass('cb_item_selected')[0].scrollIntoView();" if @parent %>
|
59
56
|
</div>
|
60
57
|
<%- break if break_flag -%>
|
61
58
|
<%- end -%>
|
@@ -65,13 +62,17 @@ EOF
|
|
65
62
|
<%- list_page = @page -%>
|
66
63
|
|
67
64
|
<script type="text/javascript">
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
65
|
+
cbNumColumns = <%= @page_levels.size - 1 %>;
|
66
|
+
jQuery('#columnBrowserLevel' + cbNumColumns)[0].scrollIntoView();
|
67
|
+
jQuery('#view_link').prop('href', '<%= list_page.path.blank? ? '' : '/' + list_page.path %>/version/<%= list_page.published_version > 0 ? list_page.published_version : list_page.version %>');
|
68
|
+
jQuery('#new_link').on('click', () => { editProperties('<%=raw url_for(action: 'new', mode: 'ajax_new', parent_id: list_page, authenticity_token: form_authenticity_token.to_s) %>', 'Create New Page under /<%= list_page.path %>'); return false; });
|
69
|
+
jQuery('#edit_link').on('click', () => { editProperties('<%=raw url_for action: 'edit_page', id: list_page, mode: 'ajax_edit', authenticity_token: form_authenticity_token.to_s %>', 'Page Properties: <%= list_page.name %>'); return false; });
|
70
|
+
jQuery('#edit_content_link').prop('href', '<%=raw url_for action: 'edit_page_content', id: list_page, authenticity_token: form_authenticity_token.to_s %>');
|
71
|
+
jQuery('#delete_link').prop('href', '<%=raw url_for action: 'delete_page', id: list_page.id %>');
|
72
|
+
</script>
|
73
|
+
<script type="text/javascript" async>
|
74
|
+
dojo.require("dojo.widget.*");
|
75
|
+
dojo.require("dojo.widget.Dialog");
|
75
76
|
</script>
|
76
77
|
|
77
78
|
<%= render '/imagine_cms/dialogs' %>
|
@@ -1,23 +1,18 @@
|
|
1
1
|
<%
|
2
2
|
cbNumColumns = 0;
|
3
|
-
cbColWidth =
|
3
|
+
cbColWidth = 200;
|
4
4
|
cbColHeight = 200;
|
5
|
-
cbBorderWidth = 1;
|
6
|
-
cbColWidthFull = 172;
|
7
5
|
-%>
|
8
|
-
|
6
|
+
<script type="text/javascript">
|
9
7
|
dojo.require("dojo.widget.*");
|
10
8
|
dojo.require("dojo.widget.Dialog");
|
11
9
|
|
12
|
-
cbColWidth =
|
13
|
-
cbColHeight =
|
14
|
-
|
15
|
-
cbColWidthFull = '#{cbColWidthFull}';
|
16
|
-
EOF
|
17
|
-
%>
|
10
|
+
window.cbColWidth = <%= cbColWidth %>;
|
11
|
+
window.cbColHeight = <%= cbColHeight %>;
|
12
|
+
</script>
|
18
13
|
|
19
14
|
<div id="columnBrowserContainer" style="width: 100%; height: <%= cbColHeight + 20 %>px; overflow: auto;">
|
20
|
-
<div id="columnBrowser" style="width: <%=
|
15
|
+
<div id="columnBrowser" style="width: <%= (cbColWidth+1) * @page_levels.size %>px;">
|
21
16
|
<% @page_levels.each_with_index do |name, i| %>
|
22
17
|
<%
|
23
18
|
if !name.blank?
|
@@ -42,7 +37,7 @@ EOF
|
|
42
37
|
break_flag = true
|
43
38
|
end
|
44
39
|
-%>
|
45
|
-
<div id="columnBrowserLevel<%= i %>"
|
40
|
+
<div id="columnBrowserLevel<%= i %>" class="cb_column">
|
46
41
|
<% if i == 0 -%>
|
47
42
|
<%= render :partial => 'list_page_select', :locals => { :list_page_select => CmsPage.find(1) } %>
|
48
43
|
<% else -%>
|
data/docker-compose.yml
CHANGED
@@ -5,11 +5,11 @@ services:
|
|
5
5
|
build: .
|
6
6
|
environment:
|
7
7
|
PASSENGER_APP_ENV: development
|
8
|
-
MYSQL_HOST: db
|
9
|
-
REDIS_URL: redis://redis:6379/1
|
10
|
-
|
8
|
+
MYSQL_HOST: db
|
9
|
+
REDIS_URL: redis://redis:6379/1
|
10
|
+
|
11
11
|
db:
|
12
|
-
image: mariadb:10.
|
12
|
+
image: mariadb:10.4
|
13
13
|
volumes:
|
14
14
|
- ./docker/conf/my.local.cnf:/etc/mysql/conf.d/my.local.cnf
|
15
15
|
environment:
|
@@ -144,7 +144,7 @@ module ActionControllerExtensions
|
|
144
144
|
|
145
145
|
pages = page_list_items(@pg, key, options).compact.uniq
|
146
146
|
|
147
|
-
options[:wrapper_div] = true
|
147
|
+
options[:wrapper_div] = true unless options.has_key?(:wrapper_div)
|
148
148
|
|
149
149
|
render_page_list_segment(name, pages, options, html_options)
|
150
150
|
end
|
data/lib/imagine_cms/version.rb
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
#
|
21
21
|
# class UploadController < ApplicationController
|
22
22
|
# def upload_status
|
23
|
-
# render :
|
23
|
+
# render :plain => "Percent complete: " + @session[:uploads]['SOMEIDYOUSET'].completed_percent"
|
24
24
|
# end
|
25
25
|
# end
|
26
26
|
#
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: imagine_cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.2.
|
4
|
+
version: 5.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Namba
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|