147 lines
4 KiB
JavaScript
147 lines
4 KiB
JavaScript
// https://civicrm.org/licensing
|
|
(function($, _) {
|
|
|
|
function getInstance(item) {
|
|
var name = $(item).attr("name"),
|
|
id = $(item).attr("id");
|
|
if (name && window.CKEDITOR && CKEDITOR.instances[name]) {
|
|
return CKEDITOR.instances[name];
|
|
}
|
|
if (id && window.CKEDITOR && CKEDITOR.instances[id]) {
|
|
return CKEDITOR.instances[id];
|
|
}
|
|
}
|
|
|
|
CRM.wysiwyg.supportsFileUploads = true;
|
|
|
|
CRM.wysiwyg._create = function(item) {
|
|
var deferred = $.Deferred();
|
|
|
|
function onReady() {
|
|
var debounce,
|
|
editor = this;
|
|
|
|
editor.on('focus', function() {
|
|
$(item).trigger('focus');
|
|
});
|
|
editor.on('blur', function() {
|
|
editor.updateElement();
|
|
$(item).trigger("blur");
|
|
$(item).trigger("change");
|
|
});
|
|
editor.on('insertText', function() {
|
|
$(item).trigger("keypress");
|
|
});
|
|
_.each(['key', 'pasteState'], function(evName) {
|
|
editor.on(evName, function(evt) {
|
|
if (debounce) clearTimeout(debounce);
|
|
debounce = setTimeout(function() {
|
|
editor.updateElement();
|
|
$(item).trigger("change");
|
|
}, 50);
|
|
});
|
|
});
|
|
editor.on('pasteState', function() {
|
|
$(item).trigger("paste");
|
|
});
|
|
// Hide CiviCRM menubar when editor is fullscreen
|
|
editor.on('maximize', function (e) {
|
|
$('#civicrm-menu').toggle(e.data === 2);
|
|
});
|
|
deferred.resolve();
|
|
}
|
|
|
|
function initialize() {
|
|
var
|
|
browseUrl = CRM.config.resourceBase + "packages/kcfinder/browse.php?cms=civicrm",
|
|
uploadUrl = CRM.config.resourceBase + "packages/kcfinder/upload.php?cms=civicrm",
|
|
preset = $(item).data('preset') || 'default',
|
|
// This variable is always an array but a legacy extension could be setting it as a string.
|
|
customConfig = (typeof CRM.config.CKEditorCustomConfig === 'string') ? CRM.config.CKEditorCustomConfig :
|
|
(CRM.config.CKEditorCustomConfig[preset] || CRM.config.CKEditorCustomConfig.default);
|
|
|
|
$(item).addClass('crm-wysiwyg-enabled');
|
|
|
|
CKEDITOR.replace($(item)[0], {
|
|
filebrowserBrowseUrl: browseUrl + '&type=files',
|
|
filebrowserImageBrowseUrl: browseUrl + '&type=images',
|
|
filebrowserFlashBrowseUrl: browseUrl + '&type=flash',
|
|
filebrowserUploadUrl: uploadUrl + '&type=files',
|
|
filebrowserImageUploadUrl: uploadUrl + '&type=images',
|
|
filebrowserFlashUploadUrl: uploadUrl + '&type=flash',
|
|
customConfig: customConfig,
|
|
on: {
|
|
instanceReady: onReady
|
|
}
|
|
});
|
|
}
|
|
|
|
if ($(item).hasClass('crm-wysiwyg-enabled')) {
|
|
deferred.resolve();
|
|
}
|
|
else if ($(item).length) {
|
|
// Lazy-load ckeditor.js
|
|
if (window.CKEDITOR) {
|
|
initialize();
|
|
} else {
|
|
CRM.loadScript(CRM.config.resourceBase + 'bower_components/ckeditor/ckeditor.js').done(initialize);
|
|
}
|
|
} else {
|
|
deferred.reject();
|
|
}
|
|
return deferred;
|
|
};
|
|
|
|
CRM.wysiwyg.destroy = function(item) {
|
|
$(item).removeClass('crm-wysiwyg-enabled');
|
|
var editor = getInstance(item);
|
|
if (editor) {
|
|
editor.destroy();
|
|
}
|
|
};
|
|
|
|
CRM.wysiwyg.updateElement = function(item) {
|
|
var editor = getInstance(item);
|
|
if (editor) {
|
|
editor.updateElement();
|
|
}
|
|
};
|
|
|
|
CRM.wysiwyg.getVal = function(item) {
|
|
var editor = getInstance(item);
|
|
if (editor) {
|
|
return editor.getData();
|
|
} else {
|
|
return $(item).val();
|
|
}
|
|
};
|
|
|
|
CRM.wysiwyg.setVal = function(item, val) {
|
|
var editor = getInstance(item);
|
|
if (editor) {
|
|
return editor.setData(val);
|
|
} else {
|
|
return $(item).val(val);
|
|
}
|
|
};
|
|
|
|
CRM.wysiwyg.insert = function(item, text) {
|
|
var editor = getInstance(item);
|
|
if (editor) {
|
|
editor.insertText(text);
|
|
} else {
|
|
CRM.wysiwyg._insertIntoTextarea(item, text);
|
|
}
|
|
};
|
|
|
|
CRM.wysiwyg.focus = function(item) {
|
|
var editor = getInstance(item);
|
|
if (editor) {
|
|
editor.focus();
|
|
} else {
|
|
$(item).focus();
|
|
}
|
|
};
|
|
|
|
})(CRM.$, CRM._);
|