lib/assets/jzip/rich/cms/editor.js in rich_cms-2.0.6 vs lib/assets/jzip/rich/cms/editor.js in rich_cms-2.0.7
- old
+ new
@@ -1,9 +1,11 @@
Rich.Cms.Editor = (function() {
- var content_class = "rich_cms_content", mark_class = "marked", edit_panel = "#rich_cms_panel",
- editable_content = {}, content_items = "";
+ var content_class = "rich_cms_content", mark_class = "marked", edit_panel = "#rich_cms_panel",
+ editable_content = {}, content_items = "",
+ cleditor_images_path = "/images/rich/cms/cleditor",
+ cleditor_css = '<style>.cleditorMain {border:1px solid #999; padding:0 1px 1px; background-color:white} .cleditorMain iframe {border:none; margin:0; padding:0} .cleditorMain textarea {border:none; margin:0; padding:0; overflow-y:scroll; font:10pt Arial,Verdana; resize:none; outline:none /* webkit grip focus */} .cleditorToolbar {background: url("' + cleditor_images_path + '/toolbar.gif") repeat} .cleditorGroup {float:left; height:26px} .cleditorButton {float:left; width:24px; height:24px; margin:1px 0 1px 0; background: url("' + cleditor_images_path + '/buttons.gif")} .cleditorDisabled {opacity:0.3; filter:alpha(opacity=30)} .cleditorDivider {float:left; width:1px; height:23px; margin:1px 0 1px 0; background:#CCC} .cleditorPopup {border:solid 1px #999; background-color:white; position:absolute; font:10pt Arial,Verdana; cursor:default; z-index:10000} .cleditorList div {padding:2px 4px 2px 4px} .cleditorList p, .cleditorList h1, .cleditorList h2, .cleditorList h3, .cleditorList h4, .cleditorList h5, .cleditorList h6, .cleditorList font {padding:0; margin:0; background-color:Transparent} .cleditorColor {width:150px; padding:1px 0 0 1px} .cleditorColor div {float:left; width:14px; height:14px; margin:0 1px 1px 0} .cleditorPrompt {background-color:#F6F7F9; padding:4px; font-size:8.5pt} .cleditorPrompt input, .cleditorPrompt textarea {font:8.5pt Arial,Verdana;} .cleditorMsg {background-color:#FDFCEE; width:150px; padding:4px; font-size:8.5pt}</style>';
var register = function(hash) {
$.extend(editable_content, hash);
content_items = $.keys(editable_content).join(",");
};
@@ -12,22 +14,35 @@
$("#rich_cms_panel .edit a.close").bind("click", function(event) {
event.preventDefault();
RaccoonTip.close();
});
- RaccoonTip.register("." + content_class + "." + mark_class, "#rich_cms_panel", {beforeShow: edit, afterHide : function(content) { content.hide(); }});
+ RaccoonTip.register("." + content_class + "." + mark_class, "#rich_cms_panel", {
+ beforeShow: edit,
+ canHide: function() { return !$("#cleditor_input").length },
+ afterHide: function(content) { content.hide(); }
+ });
+
bindSeatHolders();
+ injectCleditorCss();
$.registerAjaxFormHandler({
"rich_cms_content": afterUpdate
});
};
var bindSeatHolders = function() {
RaccoonTip.register("." + content_class + "." + mark_class + ".sh_hint", "#rich_cms_panel", {event: "focus", beforeShow: edit, afterHide : function(content) { content.hide(); }});
};
+ var injectCleditorCss = function() {
+ if (!$("head").length) {
+ $(document.body).before("<head></head>");
+ }
+ $(cleditor_css).prependTo("head");
+ };
+
var mark = function(event) {
event.preventDefault();
$(content_items).addClass(content_class).toggleClass(mark_class);
@@ -42,54 +57,70 @@
bindSeatHolders();
} else {
$(content_items + ".block").removeClass("block");
$(edit_panel).hide();
}
+
+ if (typeof(SeatHolder) != "undefined") {
+ SeatHolder.react(!markedContentItems.length);
+ }
};
var edit = function() {
var content_item = $(this).closest(".rich_cms_content");
var label = $("#rich_cms_panel .edit form fieldset.inputs label");
var inputs = $("#rich_cms_panel .edit form fieldset.inputs");
- var text = content_item.is("textarea") || content_item.hasClass("block");
var attrs = content_item.get(0).attributes;
-
var selector = $.grep($.keys(editable_content), function(s) {
return content_item.is(s);
})[0];
var specs = editable_content[selector];
- label.html($.map(specs.keys, function(key) { return content_item.attr(key); }).join(", "));
+ label.html("Editing: " + $.map(specs.keys, function(key) { return "<strong>" + content_item.attr(key) + "</strong>"; }).join(", "));
- inputs.find(":input").remove();
+ inputs.find(":input,div.cleditorMain").remove();
inputs.append("<input name='content_item[__selector__]' type='hidden' value='" + selector + "'/>");
$.each(attrs, function(index, attribute) {
var attr = attribute.name;
if (attr.match(/^data-/)) {
var name = "content_item[" + attr.replace(/^data-/, "") + "]";
var value = content_item.attr(attr);
if (attr == specs.value) {
- if (text) {
- inputs.append("<textarea name='" + name + "'>" + value + "</textarea>");
- } else {
- inputs.append("<input name='" + name + "' type='text' value='" + value + "'/>");
+ var editable_input_type = content_item.attr("data-editable_input_type") || (content_item.is("textarea") || content_item.hasClass("block") ? "text" : "string");
+
+ switch (editable_input_type) {
+ case "string":
+ inputs.append("<input name='" + name + "' type='text' value='" + value + "'/>"); break;
+ case "text":
+ inputs.append("<textarea name='" + name + "'>" + value + "</textarea>"); break;
+ case "html":
+ inputs.append("<textarea id='cleditor_input' name='" + name + "' style='width: 500px; height: 300px'>" + value + "</textarea>"); break;
}
} else {
- inputs.append("<input name='" + name + "' type='hidden' value='" + value + "'/>");
+ inputs.append("<input name='" + name + "' type='hidden' value='" + value + "'/>");
}
}
});
if (specs.beforeEdit) {
var identifier = $.map(specs.keys, function(key) { return "[" + key + "=" + content_item.attr(key) + "]"; }).join("");
specs.beforeEdit.apply(null, [inputs, selector, specs, identifier]);
}
$(edit_panel).show();
+
+ setTimeout(function() {
+ if ($("#cleditor_input").length) {
+ $("#cleditor_input").cleditor({
+ width : 500,
+ height: 300
+ })[0].focus();
+ }
+ }, 250);
};
var afterUpdate = function(form, response) {
var selector = response["__selector__"];
var specs = editable_content[selector];