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.
- 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
|
+
}
|