imagine_cms 4.1.4 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.rdoc +2 -1
- data/app/assets/images/interface/form_loading.gif +0 -0
- data/app/assets/images/management/btn-top-delete.png +0 -0
- data/app/assets/images/management/btn-top-edit.png +0 -0
- data/app/assets/images/management/btn-top-exterminate.png +0 -0
- data/app/assets/images/management/btn-top-new.png +0 -0
- data/app/assets/images/management/btn-top-preview.png +0 -0
- data/app/assets/images/management/btn-top-properties.png +0 -0
- data/app/assets/javascripts/codemirror/modes-custom/imagine_cms.js +87 -0
- data/app/assets/javascripts/imagine_cms/core.js +510 -0
- data/app/assets/javascripts/imagine_cms/legacy/misc.js +537 -0
- data/app/assets/javascripts/imagine_cms/legacy/rollovers.js +193 -0
- data/app/assets/javascripts/imagine_cms/legacy/slideshow.js +116 -0
- data/app/assets/javascripts/imagine_cms/legacy/textfieldhints.js +55 -0
- data/app/assets/javascripts/imagine_cms.js +14 -1
- data/app/assets/javascripts/imagine_cms_compat.js +26 -0
- data/app/assets/javascripts/jquery-ui.js +16608 -0
- data/app/assets/javascripts/tag-it.js +591 -0
- data/app/assets/stylesheets/imagine_cms.css.scss +26 -10
- data/app/assets/stylesheets/imagine_controls.css.scss +8 -0
- data/app/assets/stylesheets/jquery-ui.css +1225 -0
- data/app/assets/stylesheets/jquery-ui.structure.css +833 -0
- data/app/assets/stylesheets/jquery-ui.theme.css +410 -0
- data/app/assets/stylesheets/jquery.tagit.css +69 -0
- data/app/assets/stylesheets/management.css.scss +7 -0
- data/app/assets/stylesheets/tagit.ui-imagine.css +100 -0
- data/app/controllers/cms/content_controller.rb +28 -45
- data/app/controllers/management/cms_controller.rb +116 -94
- data/app/helpers/cms_application_helper.rb +76 -39
- data/app/models/cms_page.rb +32 -14
- data/app/models/cms_page_object.rb +1 -1
- data/app/models/cms_page_tag.rb +2 -2
- data/app/models/cms_template.rb +1 -1
- data/app/models/user.rb +6 -6
- data/app/models/user_group.rb +1 -1
- data/app/views/cms/content/_photo_gallery.html.erb +12 -12
- data/app/views/cms/content/_search.html.erb +2 -2
- data/app/views/cms/content/_search_result.html.erb +16 -10
- data/app/views/layouts/management.html.erb +18 -17
- data/app/views/management/cms/_edit_page.html.erb +47 -33
- data/app/views/management/cms/_gallery_index.html.erb +4 -4
- data/app/views/management/cms/_image.html.erb +3 -3
- data/app/views/management/cms/_image_details.html.erb +9 -8
- data/app/views/management/cms/_list_page.html.erb +2 -2
- data/app/views/management/cms/_list_page_select.html.erb +1 -1
- data/app/views/management/cms/_page_list.html.erb +69 -48
- data/app/views/management/cms/_page_list_source_folder.html.erb +2 -2
- data/app/views/management/cms/_template_options.html.erb +4 -4
- data/app/views/management/cms/_template_reference.html.erb +13 -15
- data/app/views/management/cms/edit_page_content.html.erb +3 -3
- data/app/views/management/cms/edit_snippet.html.erb +19 -41
- data/app/views/management/cms/edit_template.html.erb +15 -38
- data/app/views/management/cms/pages.html.erb +17 -29
- data/app/views/management/cms/snippets.html.erb +2 -2
- data/app/views/management/cms/templates.html.erb +2 -2
- data/app/views/management/cms/toolbar_edit.html.erb +2 -0
- data/app/views/management/cms/toolbar_preview.html.erb +2 -2
- data/config/initializers/config_file.rb +1 -1
- data/imagine_cms.gemspec +7 -4
- data/lib/extensions/action_controller_extensions.rb +50 -19
- data/lib/imagine_cms/engine.rb +12 -8
- data/lib/imagine_cms/version.rb +1 -1
- data/lib/prototype_legacy_helper/lib/prototype_legacy_helper.rb +2 -2
- data/lib/tasks/imagine_cms_tasks.rake +8 -0
- metadata +69 -91
- data/app/assets/images/management/btn_archive.gif +0 -0
- data/app/assets/images/management/btn_delete.gif +0 -0
- data/app/assets/images/management/btn_duplicate.gif +0 -0
- data/app/assets/images/management/btn_edit.gif +0 -0
- data/app/assets/images/management/btn_new_page.gif +0 -0
- data/app/assets/images/management/btn_preview.gif +0 -0
- data/app/assets/images/management/btn_properties.gif +0 -0
- data/app/assets/images/management/btn_restore.gif +0 -0
- data/app/assets/images/management/btn_top_delete.gif +0 -0
- data/app/assets/images/management/btn_top_duplicate.gif +0 -0
- data/app/assets/images/management/btn_top_edit.gif +0 -0
- data/app/assets/images/management/btn_top_new.gif +0 -0
- data/app/assets/images/management/btn_top_preview.gif +0 -0
- data/app/assets/images/management/btn_top_properties.gif +0 -0
- data/app/assets/javascripts/codepress/codepress.html +0 -36
- data/app/assets/javascripts/codepress/codepress.js +0 -130
- data/app/assets/javascripts/codepress/engines/gecko.js +0 -240
- data/app/assets/javascripts/codepress/engines/khtml.js +0 -0
- data/app/assets/javascripts/codepress/engines/msie.js +0 -263
- data/app/assets/javascripts/codepress/engines/older.js +0 -0
- data/app/assets/javascripts/codepress/engines/opera.js +0 -259
- data/app/assets/javascripts/codepress/languages/css.js +0 -23
- data/app/assets/javascripts/codepress/languages/generic.js +0 -25
- data/app/assets/javascripts/codepress/languages/html.js +0 -63
- data/app/assets/javascripts/codepress/languages/java.js +0 -24
- data/app/assets/javascripts/codepress/languages/javascript.js +0 -30
- data/app/assets/javascripts/codepress/languages/perl.js +0 -27
- data/app/assets/javascripts/codepress/languages/php.js +0 -60
- data/app/assets/javascripts/codepress/languages/ruby.js +0 -26
- data/app/assets/javascripts/codepress/languages/sql.js +0 -30
- data/app/assets/javascripts/codepress/languages/text.js +0 -9
- data/app/assets/javascripts/imagine.js +0 -1393
- data/app/assets/stylesheets/codepress/codepress.css +0 -7
- data/app/assets/stylesheets/codepress/languages/css.css +0 -10
- data/app/assets/stylesheets/codepress/languages/generic.css +0 -9
- data/app/assets/stylesheets/codepress/languages/html.css +0 -18
- data/app/assets/stylesheets/codepress/languages/java.css +0 -7
- data/app/assets/stylesheets/codepress/languages/javascript.css +0 -8
- data/app/assets/stylesheets/codepress/languages/perl.css +0 -11
- data/app/assets/stylesheets/codepress/languages/php.css +0 -12
- data/app/assets/stylesheets/codepress/languages/ruby.css +0 -10
- data/app/assets/stylesheets/codepress/languages/sql.css +0 -10
- data/app/assets/stylesheets/codepress/languages/text.css +0 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 65e500475b1ddfb528dc258d4f907a31e18d9bd7
|
|
4
|
+
data.tar.gz: 8099e1954f829ec6db3c812f72f30f6de6723a1c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 85375bc7487b034d1efdc17ee520b5ff84a5187c5f7f16048c31f52bb15782d969d5a79d02013fd4b82d95922b7af4ec9fe20838cdd998554205e69e6b4b8359
|
|
7
|
+
data.tar.gz: 2c364e718150c9cfc680e82454aed93fbb3deca7d1761d8ce18e93c96055382a7d98ed3ff93b07b665ba2c89931374424d61420a2271955872fbf241f29be00d
|
data/README.rdoc
CHANGED
|
@@ -15,7 +15,8 @@ All that is now firmly in the past. By extracting Imagine functionality into a g
|
|
|
15
15
|
* Imagine 3.0 (Rails 3.2, Ruby 1.9): [DONE] 90% restored functionality, no database changes.
|
|
16
16
|
* Imagine 3.1 (Rails 3.2, Ruby 1.9/2.0): [DONE, but released as 3.0.x] 100% restored functionality, plus a few extras and fixes.
|
|
17
17
|
* Imagine 4.0 (Rails 4.0, Ruby 2.1): [DONE] Compatibility with Rails 4.0
|
|
18
|
-
* Imagine 4.1 (Rails 4.1, Ruby 2.1): [
|
|
18
|
+
* Imagine 4.1 (Rails 4.1, Ruby 2.1): [DONE]
|
|
19
|
+
* Imagine 4.2 (Rails 4.2, Ruby 2.1): [in progress on master]
|
|
19
20
|
* Imagine 5.0 (Rails 5.0, Ruby 2.2): [PLANNED, Mid 2015] Compatibility with Rails 5.0, switch to a cross-browser editor
|
|
20
21
|
|
|
21
22
|
In the future, there are plans to:
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
|
3
|
+
|
|
4
|
+
(function(mod) {
|
|
5
|
+
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
|
6
|
+
mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"));
|
|
7
|
+
else if (typeof define == "function" && define.amd) // AMD
|
|
8
|
+
define(["../../lib/codemirror", "../htmlmixed/htmlmixed"], mod);
|
|
9
|
+
else // Plain browser env
|
|
10
|
+
mod(CodeMirror);
|
|
11
|
+
})(function(CodeMirror) {
|
|
12
|
+
"use strict";
|
|
13
|
+
|
|
14
|
+
CodeMirror.defineMode("imagine_cms", function(config, parserConfig) {
|
|
15
|
+
|
|
16
|
+
//config settings
|
|
17
|
+
var scriptStartRegex = parserConfig.scriptStartRegex || /^<%/,
|
|
18
|
+
scriptEndRegex = parserConfig.scriptEndRegex || /^%>/;
|
|
19
|
+
var attributeRegex = /^<#.*?#>/;
|
|
20
|
+
|
|
21
|
+
//inner modes
|
|
22
|
+
var scriptingMode, htmlMixedMode;
|
|
23
|
+
|
|
24
|
+
//tokenizer when in html mode
|
|
25
|
+
function htmlDispatch(stream, state) {
|
|
26
|
+
if (stream.match(attributeRegex, true)) {
|
|
27
|
+
return 'comment';
|
|
28
|
+
}
|
|
29
|
+
else if (stream.match(scriptStartRegex, false)) {
|
|
30
|
+
state.token=scriptingDispatch;
|
|
31
|
+
return scriptingMode.token(stream, state.scriptState);
|
|
32
|
+
}
|
|
33
|
+
else
|
|
34
|
+
return htmlMixedMode.token(stream, state.htmlState);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
//tokenizer when in scripting mode
|
|
38
|
+
function scriptingDispatch(stream, state) {
|
|
39
|
+
if (stream.match(scriptEndRegex, false)) {
|
|
40
|
+
state.token=htmlDispatch;
|
|
41
|
+
return htmlMixedMode.token(stream, state.htmlState);
|
|
42
|
+
}
|
|
43
|
+
else
|
|
44
|
+
return scriptingMode.token(stream, state.scriptState);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
startState: function() {
|
|
50
|
+
scriptingMode = scriptingMode || CodeMirror.getMode(config, parserConfig.scriptingModeSpec);
|
|
51
|
+
htmlMixedMode = htmlMixedMode || CodeMirror.getMode(config, "htmlmixed");
|
|
52
|
+
return {
|
|
53
|
+
token : parserConfig.startOpen ? scriptingDispatch : htmlDispatch,
|
|
54
|
+
htmlState : CodeMirror.startState(htmlMixedMode),
|
|
55
|
+
scriptState : CodeMirror.startState(scriptingMode)
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
token: function(stream, state) {
|
|
60
|
+
return state.token(stream, state);
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
indent: function(state, textAfter) {
|
|
64
|
+
if (state.token == htmlDispatch)
|
|
65
|
+
return htmlMixedMode.indent(state.htmlState, textAfter);
|
|
66
|
+
else if (scriptingMode.indent)
|
|
67
|
+
return scriptingMode.indent(state.scriptState, textAfter);
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
copyState: function(state) {
|
|
71
|
+
return {
|
|
72
|
+
token : state.token,
|
|
73
|
+
htmlState : CodeMirror.copyState(htmlMixedMode, state.htmlState),
|
|
74
|
+
scriptState : CodeMirror.copyState(scriptingMode, state.scriptState)
|
|
75
|
+
};
|
|
76
|
+
},
|
|
77
|
+
|
|
78
|
+
innerMode: function(state) {
|
|
79
|
+
if (state.token == scriptingDispatch) return {state: state.scriptState, mode: scriptingMode};
|
|
80
|
+
else return {state: state.htmlState, mode: htmlMixedMode};
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}, "htmlmixed");
|
|
84
|
+
|
|
85
|
+
CodeMirror.defineMIME("application/x-erb-imagine", { name: "imagine_cms", scriptingModeSpec:"ruby"});
|
|
86
|
+
|
|
87
|
+
});
|
|
@@ -0,0 +1,510 @@
|
|
|
1
|
+
jQuery(document).ready(function () {
|
|
2
|
+
jQuery('textarea.codemirror-html').each(function () {
|
|
3
|
+
var cm = CodeMirror.fromTextArea(this, {
|
|
4
|
+
mode: 'application/x-erb-imagine',
|
|
5
|
+
lineNumbers: true
|
|
6
|
+
});
|
|
7
|
+
})
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
/*
|
|
14
|
+
* legacy prototype stuff only beyond this point
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
// Fixes gallery reordering (Scriptaculous Sortable)
|
|
18
|
+
Position.includeScrollOffsets = true;
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
/********************************
|
|
22
|
+
* date picker functions *
|
|
23
|
+
********************************/
|
|
24
|
+
|
|
25
|
+
function getElementPosition(sourceObj) {
|
|
26
|
+
if (sourceObj.style.left && sourceObj.style.top) {
|
|
27
|
+
// for the W3C-compliant crowd
|
|
28
|
+
return [parseInt(sourceObj.style.left), parseInt(sourceObj.style.top)];
|
|
29
|
+
} else {
|
|
30
|
+
// for the other awful browsers...
|
|
31
|
+
x = sourceObj.offsetLeft;
|
|
32
|
+
y = sourceObj.offsetTop;
|
|
33
|
+
temp = sourceObj;
|
|
34
|
+
while (temp = temp.offsetParent) {
|
|
35
|
+
x += temp.offsetLeft;
|
|
36
|
+
y += temp.offsetTop;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return [x, y];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function showDatePicker(object, method_prefix) {
|
|
44
|
+
// anchor picker to the icon
|
|
45
|
+
var coords = getElementPosition($('date_picker_' + object + '_' + method_prefix + 'icon'));
|
|
46
|
+
var el = $('date_picker_' + object + '_' + method_prefix + 'main');
|
|
47
|
+
el.hide();
|
|
48
|
+
el.style.position = 'absolute';
|
|
49
|
+
el.show();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function hideDatePicker(object, method_prefix) {
|
|
53
|
+
$('date_picker_' + object + '_' + method_prefix + 'main').hide();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function dpPrevMonth(object, method_prefix, min_year) {
|
|
57
|
+
try {
|
|
58
|
+
if ($(object + '_' + method_prefix + '_month_sel').value > 1) {
|
|
59
|
+
$(object + '_' + method_prefix + '_month_sel').value--;
|
|
60
|
+
} else if ($(object + '_' + method_prefix + '_year_sel').value > min_year) {
|
|
61
|
+
$(object + '_' + method_prefix + '_month_sel').value = 12;
|
|
62
|
+
$(object + '_' + method_prefix + '_year_sel').value--;
|
|
63
|
+
}
|
|
64
|
+
} catch (e) {}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function dpNextMonth(object, method_prefix, max_year) {
|
|
68
|
+
try {
|
|
69
|
+
if ($(object + '_' + method_prefix + '_month_sel').value < 12) {
|
|
70
|
+
$(object + '_' + method_prefix + '_month_sel').value++;
|
|
71
|
+
} else if ($(object + '_' + method_prefix + '_year_sel').value < max_year) {
|
|
72
|
+
$(object + '_' + method_prefix + '_month_sel').value = 1;
|
|
73
|
+
$(object + '_' + method_prefix + '_year_sel').value++;
|
|
74
|
+
}
|
|
75
|
+
} catch (e) {}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
/********************************
|
|
80
|
+
* column browser interface *
|
|
81
|
+
********************************/
|
|
82
|
+
|
|
83
|
+
var cbNumColumns = 0;
|
|
84
|
+
var cbColWidth = '200px';
|
|
85
|
+
var cbColHeight = '240px';
|
|
86
|
+
var cbBorderWidth = '1px';
|
|
87
|
+
var cbColWidthFull = 202;
|
|
88
|
+
|
|
89
|
+
function cbAddColumn() {
|
|
90
|
+
var currentWidth = parseInt($('columnBrowser').style.width, 10);
|
|
91
|
+
// if (currentWidth < ((cbNumColumns+1) * cbColWidthFull)) {
|
|
92
|
+
$('columnBrowser').style.width = '' + ((cbNumColumns+1) * cbColWidthFull) + 'px';
|
|
93
|
+
$('columnBrowserContainer').scrollLeft = $('columnBrowserContainer').scrollWidth;
|
|
94
|
+
// }
|
|
95
|
+
$('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>";
|
|
96
|
+
cbNumColumns++;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function getScrollbarPosition(el) {
|
|
100
|
+
el = $(el);
|
|
101
|
+
return { x: el.scrollLeft, y: el.scrollTop };
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function setScrollbarPosition(el, coords) {
|
|
105
|
+
el = $(el);
|
|
106
|
+
el.scrollLeft = coords.x;
|
|
107
|
+
el.scrollTop = coords.y;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function cbSelectItem(el, currentLevel, urlForNextLevel) {
|
|
111
|
+
var el = $(el);
|
|
112
|
+
coords = getScrollbarPosition(el.parentNode);
|
|
113
|
+
|
|
114
|
+
// remove all higher levels and unselect all other same-level divs
|
|
115
|
+
for (var i = currentLevel + 1; i <= cbNumColumns; i++) {
|
|
116
|
+
d = $('columnBrowserLevel' + i);
|
|
117
|
+
if (d) d.parentNode.removeChild(d);
|
|
118
|
+
}
|
|
119
|
+
cbNumColumns = currentLevel + 1;
|
|
120
|
+
|
|
121
|
+
prefix = 'cb_item_';
|
|
122
|
+
$A(el.parentNode.childNodes).each(function (d) {
|
|
123
|
+
if (d.id && d.id.substring(0, prefix.length) == prefix) {
|
|
124
|
+
d.className = 'cb_item';
|
|
125
|
+
}
|
|
126
|
+
})
|
|
127
|
+
|
|
128
|
+
// select and expand current dept div
|
|
129
|
+
el.className = 'cb_item cb_item_selected';
|
|
130
|
+
|
|
131
|
+
cbAddColumn();
|
|
132
|
+
el = $(el.id);
|
|
133
|
+
new Ajax.Updater('columnBrowserLevel' + (currentLevel+1), urlForNextLevel, {method: 'GET', asynchronous:true, evalScripts:true});
|
|
134
|
+
|
|
135
|
+
setScrollbarPosition(el.parentNode, coords);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
/********************************
|
|
140
|
+
* cms support *
|
|
141
|
+
********************************/
|
|
142
|
+
|
|
143
|
+
function disableEnterKey(e) {
|
|
144
|
+
// get event if not passed
|
|
145
|
+
if (!e) var e = window.event;
|
|
146
|
+
|
|
147
|
+
var numCharCode;
|
|
148
|
+
|
|
149
|
+
// get character code of key pressed
|
|
150
|
+
if (e.keyCode) {
|
|
151
|
+
numCharCode = e.keyCode;
|
|
152
|
+
} else if (e.which) {
|
|
153
|
+
numCharCode = e.which;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (numCharCode == 13) {
|
|
157
|
+
e.cancelBubble = true;
|
|
158
|
+
if (e.stopPropagation) e.stopPropagation();
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// support for autocompletes
|
|
164
|
+
var attrlist = [];
|
|
165
|
+
var taglist = [];
|
|
166
|
+
|
|
167
|
+
var dialogStack = [];
|
|
168
|
+
function showDojoDialog(id, titleText) {
|
|
169
|
+
// if (!is.ie) changeOverflowAutoToHidden();
|
|
170
|
+
|
|
171
|
+
dlg = dojo.widget.byId(id);
|
|
172
|
+
if (!dlg) dlg = dojo.widget.createWidget(id);
|
|
173
|
+
if (!dlg) return false;
|
|
174
|
+
|
|
175
|
+
dlg.closeWindow = function () { hideDojoDialog(id); };
|
|
176
|
+
dlg.show();
|
|
177
|
+
|
|
178
|
+
if (typeof(titleText) != 'undefined') {
|
|
179
|
+
try {
|
|
180
|
+
document.getElementById('propertiesDialog').getElementsByTagName('div')[0].getElementsByTagName('div')[4].innerHTML = titleText;
|
|
181
|
+
} catch (e) {}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (dialogStack.length > 0) dojo.widget.byId(dialogStack[dialogStack.length-1]).hide();
|
|
185
|
+
dialogStack.push(id);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function hideDojoDialog(id) {
|
|
189
|
+
dialogStack.pop();
|
|
190
|
+
|
|
191
|
+
dojo.widget.byId(id).hide();
|
|
192
|
+
// if (!is.ie) changeOverflowHiddenToAuto();
|
|
193
|
+
|
|
194
|
+
if (dialogStack.length > 0) {
|
|
195
|
+
dojo.widget.byId(dialogStack[dialogStack.length-1]).show();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function editProperties(url, titleText) {
|
|
200
|
+
$('properties_dialog_content').innerHTML = 'Loading...';
|
|
201
|
+
new Ajax.Updater('properties_dialog_content', url, {method:'get', asynchronous:true, evalScripts:true});
|
|
202
|
+
|
|
203
|
+
showDojoDialog('properties_dialog', titleText);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
function cancelEditProperties() {
|
|
207
|
+
hideDojoDialog('properties_dialog');
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
function insertImage(url) {
|
|
211
|
+
var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
|
|
212
|
+
imageNode = dojo.withGlobal(curInst.window, "getSelectedElement", dojo.html.selection);
|
|
213
|
+
if (!imageNode) {
|
|
214
|
+
imageNode = dojo.withGlobal(curInst.window, "getAncestorElement", dojo.html.selection, ['img']);
|
|
215
|
+
}
|
|
216
|
+
if (imageNode) {
|
|
217
|
+
dojo.require("dojo.widget.Editor2Plugin.InsertImageDialog");
|
|
218
|
+
w = dojo.widget.createWidget("Editor2InsertImageDialog");
|
|
219
|
+
w.show();
|
|
220
|
+
} else {
|
|
221
|
+
$('insert_image_dialog_content').innerHTML = 'Loading...';
|
|
222
|
+
new Ajax.Updater('insert_image_dialog_content', url, {method:'get', asynchronous:true, evalScripts:true});
|
|
223
|
+
showDojoDialog('insert_image_dialog');
|
|
224
|
+
}
|
|
225
|
+
try { if (cropper) cropper.remove(); } catch (e) {}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
function cancelInsertImage() {
|
|
229
|
+
hideDojoDialog('insert_image_dialog');
|
|
230
|
+
try { if (cropper) cropper.remove(); } catch (e) {}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
function insertFile(url) {
|
|
234
|
+
var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
|
|
235
|
+
curInst.saveSelection(); //save selection (none-activeX IE)
|
|
236
|
+
var html = dojo.withGlobal(curInst.window, "getSelectedText", dojo.html.selection);
|
|
237
|
+
if (html == null || html.length == 0) {
|
|
238
|
+
alert("Please select some text to create a file link.");
|
|
239
|
+
return false; //do not show the dialog
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
$('insert_file_dialog_content').innerHTML = 'Loading...';
|
|
243
|
+
new Ajax.Updater('insert_file_dialog_content', url, {method:'get', asynchronous:true, evalScripts:true});
|
|
244
|
+
showDojoDialog('insert_file_dialog');
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
function cancelInsertFile() {
|
|
248
|
+
hideDojoDialog('insert_file_dialog');
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
function selectThumbnail(url) {
|
|
252
|
+
$('select_thumbnail_dialog_content').innerHTML = 'Loading...';
|
|
253
|
+
new Ajax.Updater('select_thumbnail_dialog_content', url, {asynchronous:true, evalScripts:true});
|
|
254
|
+
showDojoDialog('select_thumbnail_dialog');
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
function cancelSelectThumbnail() {
|
|
258
|
+
hideDojoDialog('select_thumbnail_dialog');
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
var gallerySize = [];
|
|
262
|
+
function changeGalleryImage(galleryName, index) {
|
|
263
|
+
var target = galleryName + '_image_' + index;
|
|
264
|
+
var caption = galleryName + '_caption_' + index;
|
|
265
|
+
if (!$(target)) return false;
|
|
266
|
+
|
|
267
|
+
var queue = Effect.Queues.get('global');
|
|
268
|
+
queue.each(function(e) { e.cancel() });
|
|
269
|
+
|
|
270
|
+
for (var i = 0; i < gallerySize[galleryName]; i++) {
|
|
271
|
+
el = $(galleryName + '_image_' + i);
|
|
272
|
+
if (el.id != target && el.style.display != 'none') Effect.Fade(el, { duration: 0.6 });
|
|
273
|
+
|
|
274
|
+
el = $(galleryName + '_thumb_' + i);
|
|
275
|
+
if (el) {
|
|
276
|
+
if (i == index) {
|
|
277
|
+
el.oldOnmouseover = el.onmouseover;
|
|
278
|
+
el.oldOnmouseout = el.onmouseout;
|
|
279
|
+
el.onmouseover = null;
|
|
280
|
+
el.onmouseout = null;
|
|
281
|
+
el.addClassName('current');
|
|
282
|
+
} else {
|
|
283
|
+
el.removeClassName('current');
|
|
284
|
+
if (!el.onmouseover) el.onmouseover = el.oldOnmouseover;
|
|
285
|
+
if (!el.onmouseout) el.onmouseout = el.oldOnmouseout;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
Effect.Appear(target, { duration: 0.6 });
|
|
291
|
+
|
|
292
|
+
if($(caption).innerHTML != '') {
|
|
293
|
+
$(galleryName + '_caption').style.display = 'block';
|
|
294
|
+
$(galleryName + '_caption').innerHTML = $(caption).innerHTML;
|
|
295
|
+
} else {
|
|
296
|
+
$(galleryName + '_caption').style.display = 'none';
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
prevIndex = index == 0 ? gallerySize[galleryName] - 1 : index-1;
|
|
300
|
+
nextIndex = index == gallerySize[galleryName] - 1 ? 0 : index+1;
|
|
301
|
+
$(galleryName + '_prev_button').onclick = function () { changeGalleryImage(galleryName, prevIndex) };
|
|
302
|
+
$(galleryName + '_next_button').onclick = function () { changeGalleryImage(galleryName, nextIndex) };
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
var galleryTimeouts = [];
|
|
306
|
+
function advanceGallerySlideshow(galleryName, delay) {
|
|
307
|
+
$(galleryName + '_next_button').onclick();
|
|
308
|
+
galleryTimeouts[galleryName] = setTimeout(function() { advanceGallerySlideshow(galleryName, delay); }, delay);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
var overflowAutoDivs = [];
|
|
313
|
+
function changeOverflowAutoToHidden() {
|
|
314
|
+
var divs = [];
|
|
315
|
+
$$('div').each(function (div) {
|
|
316
|
+
if (div.style.overflow == 'auto') {
|
|
317
|
+
divs.push(div);
|
|
318
|
+
div.style.overflow = 'hidden';
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
overflowAutoDivs.push(divs);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
function changeOverflowHiddenToAuto() {
|
|
325
|
+
$A(overflowAutoDivs.pop).each(function (div) {
|
|
326
|
+
div.style.overflow = 'auto';
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
var pageBrowserFieldID = null;
|
|
332
|
+
function showPageBrowser(field_id) {
|
|
333
|
+
pageBrowserFieldID = field_id;
|
|
334
|
+
path = $(field_id).value;
|
|
335
|
+
|
|
336
|
+
$('page_browser').innerHTML = 'Loading...'
|
|
337
|
+
new Ajax.Updater('page_browser', '/manage/cms/select_page?path=' + path, {asynchronous:true, evalScripts:true});
|
|
338
|
+
$('page_browser_selection').value = path;
|
|
339
|
+
showDojoDialog('page_browser_dialog');
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
function closePageBrowser() {
|
|
343
|
+
hideDojoDialog('page_browser_dialog');
|
|
344
|
+
$(pageBrowserFieldID).value = $('page_browser_selection').value;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
var cmsPageObjects = {};
|
|
349
|
+
function scanForPageObjects(page_id, parent_key, version) {
|
|
350
|
+
if (jQuery('#page_objects_' + parent_key).val().length == 0) return;
|
|
351
|
+
|
|
352
|
+
var found = {};
|
|
353
|
+
|
|
354
|
+
var regex = /<%=\s*insert_object\(?\s*['"]([-\w\s\d]+)['"],\s*:(\w+)\s*(.*?)\)?\s*%>/gm;
|
|
355
|
+
var matches = jQuery('#page_objects_' + parent_key).val().match(regex);
|
|
356
|
+
if (matches) {
|
|
357
|
+
jQuery.each(matches, function (index) {
|
|
358
|
+
var match = this;
|
|
359
|
+
// regex2 should be exactly the same as regex. Global regexes have a lastIndex which is not reset.
|
|
360
|
+
var regex2 = /<%=\s*insert_object\(?\s*['"]([-\w\s\d]+)['"],\s*:(\w+)\s*(.*?)\)?\s*%>/gm;
|
|
361
|
+
if (regex2.test(match)) {
|
|
362
|
+
key = match.replace(regex2, "$1");
|
|
363
|
+
val = match.replace(regex2, "$2");
|
|
364
|
+
if (val == 'page_list') found[key] = val;
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
var regex = /<%=\s*(?:page_list|pagelist)\(?\s*['"]([-\w\s\d]+)['"](.*?)\)?\s*%>/gm;
|
|
370
|
+
var matches = jQuery('#page_objects_' + parent_key).val().match(regex);
|
|
371
|
+
if (matches) {
|
|
372
|
+
jQuery.each(matches, function (index) {
|
|
373
|
+
var match = this;
|
|
374
|
+
// regex2 should be exactly the same as regex. Global regexes have a lastIndex which is not reset.
|
|
375
|
+
var regex2 = /<%=\s*(?:page_list|pagelist)\(?\s*['"]([-\w\s\d]+)['"](.*?)\)?\s*%>/gm;
|
|
376
|
+
if (regex2.test(match)) {
|
|
377
|
+
key = match.replace(regex2, "$1");
|
|
378
|
+
val = 'page_list'
|
|
379
|
+
found[key] = val;
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
// remove the cruft
|
|
385
|
+
jQuery.each(cmsPageObjects, function(key, val) {
|
|
386
|
+
if (cmsPageObjects[key] != found[key]) {
|
|
387
|
+
obj_key = val + '_container_obj-' + val + '-' + key.replace(/[^\w]/g, '_');
|
|
388
|
+
while (jQuery('#' + obj_key).length > 0) {
|
|
389
|
+
jQuery('#' + obj_key).remove();
|
|
390
|
+
}
|
|
391
|
+
cmsPageObjects[key] = null;
|
|
392
|
+
}
|
|
393
|
+
});
|
|
394
|
+
|
|
395
|
+
// bring in the new
|
|
396
|
+
jQuery.each(found, function (key, val) {
|
|
397
|
+
if (!cmsPageObjects[key]) {
|
|
398
|
+
cmsPageObjects[key] = val;
|
|
399
|
+
jQuery.get('/manage/cms/insert_page_object_config/' + page_id + '?version= ' + version +
|
|
400
|
+
'&name=' + key + '&type=' + val + '&parent_key=' + parent_key);
|
|
401
|
+
}
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
|
|
406
|
+
function blockUserInput() {
|
|
407
|
+
var dims = { width: document.body.scrollWidth, height: document.body.scrollHeight };
|
|
408
|
+
$('preview_cover').show();
|
|
409
|
+
$('preview_cover').style.position = 'absolute';
|
|
410
|
+
$('preview_cover').style.left = '0px';
|
|
411
|
+
$('preview_cover').style.top = '0px';
|
|
412
|
+
$('preview_cover').style.width = dims.width + 'px';
|
|
413
|
+
$('preview_cover').style.height = dims.height + 'px';
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
function insertAtCaret(obj, text) {
|
|
418
|
+
if(document.selection) {
|
|
419
|
+
obj.focus();
|
|
420
|
+
var orig = obj.value.replace(/\r\n/g, "\n");
|
|
421
|
+
var range = document.selection.createRange();
|
|
422
|
+
|
|
423
|
+
if(range.parentElement() != obj) {
|
|
424
|
+
return false;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
range.text = text;
|
|
428
|
+
|
|
429
|
+
var actual = tmp = obj.value.replace(/\r\n/g, "\n");
|
|
430
|
+
|
|
431
|
+
for(var diff = 0; diff < orig.length; diff++) {
|
|
432
|
+
if(orig.charAt(diff) != actual.charAt(diff)) break;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
for(var index = 0, start = 0;
|
|
436
|
+
tmp.match(text)
|
|
437
|
+
&& (tmp = tmp.replace(text, ""))
|
|
438
|
+
&& index <= diff;
|
|
439
|
+
index = start + text.length
|
|
440
|
+
) {
|
|
441
|
+
start = actual.indexOf(text, index);
|
|
442
|
+
}
|
|
443
|
+
} else if(obj.selectionStart) {
|
|
444
|
+
var start = obj.selectionStart;
|
|
445
|
+
var end = obj.selectionEnd;
|
|
446
|
+
|
|
447
|
+
obj.value = obj.value.substr(0, start)
|
|
448
|
+
+ text
|
|
449
|
+
+ obj.value.substr(end, obj.value.length);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
if(start != null) {
|
|
453
|
+
setCaretTo(obj, start + text.length);
|
|
454
|
+
} else {
|
|
455
|
+
obj.value += text;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
function setCaretTo(obj, pos) {
|
|
460
|
+
if(obj.createTextRange) {
|
|
461
|
+
var range = obj.createTextRange();
|
|
462
|
+
range.move('character', pos);
|
|
463
|
+
range.select();
|
|
464
|
+
} else if(obj.selectionStart) {
|
|
465
|
+
obj.focus();
|
|
466
|
+
obj.setSelectionRange(pos, pos);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
// utility function to fix # of decimal places
|
|
472
|
+
function setPrecision(val, p, dontPad, addCommas) {
|
|
473
|
+
if (typeof(p) == 'undefined') p = 2;
|
|
474
|
+
if (typeof(dontPad) == 'undefined') dontPad = false;
|
|
475
|
+
if (typeof(addCommas) == 'undefined') addCommas = true;
|
|
476
|
+
|
|
477
|
+
if (val.toString() == 'NaN') return '';
|
|
478
|
+
var m = Math.pow(10, p);
|
|
479
|
+
var ret = parseInt(Math.round(val * m), 10) / m;
|
|
480
|
+
var idx = (''+ret).indexOf('.');
|
|
481
|
+
if (idx < 0) {
|
|
482
|
+
ret += '.';
|
|
483
|
+
idx = (''+ret).indexOf('.');
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
if (!dontPad && (''+ret).substring(idx).length <= p) {
|
|
487
|
+
for (var i = (''+ret).substring(idx).length; i <= p; i++) {
|
|
488
|
+
ret += '0';
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
if (addCommas) {
|
|
493
|
+
var pieces = (''+ret).split('.');
|
|
494
|
+
if (p > 0) {
|
|
495
|
+
ret = '.' + pieces[1];
|
|
496
|
+
} else {
|
|
497
|
+
ret = pieces[1];
|
|
498
|
+
}
|
|
499
|
+
for (var i = 0; i < pieces[0].length; i++) {
|
|
500
|
+
if (i % 3 == 2) {
|
|
501
|
+
ret = ',' + pieces[0].charAt(pieces[0].length - i - 1) + ret;
|
|
502
|
+
} else {
|
|
503
|
+
ret = pieces[0].charAt(pieces[0].length - i - 1) + ret;
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
ret = ret.replace(/^,/, '');
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
return ret;
|
|
510
|
+
}
|