0
0
mirror of https://github.com/salesagility/SuiteCRM.git synced 2024-11-24 08:36:48 +00:00
salesagility_SuiteCRM/jssource/src_files/include/javascript/quickCompose.js
2017-04-12 16:47:55 -07:00

297 lines
10 KiB
JavaScript
Executable File

(function(){
var JSON = YAHOO.lang.JSON;
SUGAR.quickCompose = {};
SUGAR.quickCompose = function() {
return {
parentPanel : null,
dceMenuPanel : null,
options: null,
loadingMessgPanl : null,
frameLoaded : false,
resourcesLoaded: false,
tinyLoaded : false,
/**
* Get the required compose package in an ajax call required for
* the quick compose.
* @method initComposePackage
* @param {Array} c Options containing compose package and full return url.
* @return {} none
**/
initComposePackage: function(c)
{
//Init fix for YUI 2.7.0 datatable sort.
SUGAR.email2.addressBook.initFixForDatatableSort();
//JS resources must have been loaded if we reach this step.
SUGAR.quickCompose.resourcesLoaded = true;
var callback =
{
success: function(o)
{
var responseData = JSON.parse(o.responseText);
//Create and insert the necessary script tag
var scriptTag = document.createElement('script');
scriptTag.id = 'quickComposeScript';
scriptTag.setAttribute('type','text/javascript');
if(YAHOO.env.ua.ie > 0) //IE hack
scriptTag.text = responseData.jsData;
else //Everybody else
scriptTag.appendChild(document.createTextNode(responseData.jsData));
document.getElementsByTagName("head")[0].appendChild(scriptTag);
//Create and insert the necessary div elements and html markup
var divTag = document.createElement("div");
divTag.innerHTML = responseData.divData;
divTag.id = 'quickCompose';
YAHOO.util.Dom.insertBefore(divTag, document.getElementsByTagName('footer')[0]);
//Set the flag that we loaded the compose package.
SUGAR.quickCompose.frameLoaded = true;
//Init the UI
SUGAR.quickCompose.initUI(c.data);
}
}
if(!SUGAR.quickCompose.frameLoaded)
YAHOO.util.Connect.asyncRequest('GET', 'index.php?entryPoint=GenerateQuickComposeFrame', callback, null);
else
SUGAR.quickCompose.initUI(c.data);
},
/**
* Initalize the UI for the quick compose
* the quick compose.
* @method initComposePackage
* @param {Array} options Options containing compose package and full return url.
* @return {} none
**/
initUI: function(options)
{
var SQ = SUGAR.quickCompose;
this.options = options;
//Hide the loading div
loadingMessgPanl.hide();
var dce_mode = (typeof this.dceMenuPanel != 'undefined' && this.dceMenuPanel != null) ? true : false;
//Destroy the previous quick compose panel to get a clean slate
if (SQ.parentPanel != null)
{
//First clean up the tinyMCE instance
tinyMCE.execCommand('mceRemoveControl', false, SUGAR.email2.tinyInstances.currentHtmleditor);
SUGAR.email2.tinyInstances[SUGAR.email2.tinyInstances.currentHtmleditor] = null;
SUGAR.email2.tinyInstances.currentHtmleditor = "";
SQ.parentPanel.destroy();
SQ.parentPanel = null;
}
var theme = SUGAR.themes.theme_name;
//The quick compose utalizes the EmailUI compose functionality which allows for multiple compose
//tabs. Quick compose always has only one compose screen with an index of 0.
var idx = 0;
//Get template engine with template
if (!SE.composeLayout.composeTemplate)
SE.composeLayout.composeTemplate = new YAHOO.SUGAR.Template(SE.templates['compose']);
var panel_modal = dce_mode ? false : true,
panel_width = '880px',
panel_constrain = dce_mode ? false : true,
panel_height = dce_mode ? 'auto' : '600px',
panel_shadow = dce_mode ? false : true,
panel_draggable = dce_mode ? false : true,
panel_resize = dce_mode ? false : true,
panel_close = dce_mode ? false : true;
SQ.parentPanel = new YAHOO.widget.Panel("container1", {
modal: panel_modal,
visible: true,
constraintoviewport: panel_constrain,
width : panel_width,
height : panel_height,
shadow : panel_shadow,
draggable : panel_draggable,
resize: panel_resize,
close: panel_close
});
if(!dce_mode) {
SQ.parentPanel.setHeader( SUGAR.language.get('app_strings','LBL_EMAIL_QUICK_COMPOSE')) ;
}
SQ.parentPanel.setBody("<div class='email'><div id='htmleditordiv" + idx + "'></div></div>");
var composePanel = SE.composeLayout.getQuickComposeLayout(SQ.parentPanel,this.options);
if(!dce_mode) {
var resize = new YAHOO.util.Resize('container1', {
handles: ['br'],
autoRatio: false,
minWidth: 400,
minHeight: 550,
status: false
});
resize.on('resize', function(args) {
var panelHeight = args.height;
this.cfg.setProperty("height", panelHeight + "px");
var layout = SE.composeLayout[SE.composeLayout.currentInstanceId];
layout.set("height", panelHeight - 50);
layout.resize(true);
SE.composeLayout.resizeEditor(SE.composeLayout.currentInstanceId);
}, SQ.parentPanel, true);
} else {
SUGAR.util.doWhen("typeof SE.composeLayout[SE.composeLayout.currentInstanceId] != 'undefined'", function(){
var panelHeight = 600;
SQ.parentPanel.cfg.setProperty("height", panelHeight + "px");
var layout = SE.composeLayout[SE.composeLayout.currentInstanceId];
layout.set("height", panelHeight);
layout.resize(true);
SE.composeLayout.resizeEditor(SE.composeLayout.currentInstanceId);
});
}
YAHOO.util.Dom.setStyle("container1", "z-index", 1);
if (!SQ.tinyLoaded)
{
//TinyMCE bug, since we are loading the js file dynamically we need to let tiny know that the
//dom event has fired.
tinymce.dom.Event.domLoaded = true;
tinyMCE.init({
convert_urls : false,
theme_advanced_toolbar_align : tinyConfig.theme_advanced_toolbar_align,
valid_children : tinyConfig.valid_children,
width: tinyConfig.width,
theme: tinyConfig.theme,
theme_advanced_toolbar_location : tinyConfig.theme_advanced_toolbar_location,
theme_advanced_buttons1 : tinyConfig.theme_advanced_buttons1,
theme_advanced_buttons2 : tinyConfig.theme_advanced_buttons2,
theme_advanced_buttons3 : tinyConfig.theme_advanced_buttons3,
plugins : tinyConfig.plugins,
elements : tinyConfig.elements,
language : tinyConfig.language,
extended_valid_elements : tinyConfig.extended_valid_elements,
mode: tinyConfig.mode,
strict_loading_mode : true,
gecko_spellcheck : tinyConfig.gecko_spellcheck
});
SQ.tinyLoaded = true;
}
SQ.parentPanel.show();
//Re-declare the close function to handle appropriattely.
SUGAR.email2.composeLayout.forceCloseCompose = function(o){SUGAR.quickCompose.parentPanel.hide(); }
if(!dce_mode) {
SQ.parentPanel.center();
}
},
/**
* Display a loading pannel and start retrieving the quick compose requirements.
* @method init
* @param {Array} o Options containing compose package and full return url.
* @return {} none
**/
init: function(o) {
if(typeof o.menu_id != 'undefined') {
this.dceMenuPanel = o.menu_id;
} else {
this.dceMenuPanel = null;
}
loadingMessgPanl = new YAHOO.widget.SimpleDialog('loading', {
width: '200px',
close: true,
modal: true,
visible: true,
fixedcenter: true,
constraintoviewport: true,
draggable: false
});
loadingMessgPanl.setHeader(SUGAR.language.get('app_strings','LBL_EMAIL_PERFORMING_TASK'));
loadingMessgPanl.setBody(SUGAR.language.get('app_strings','LBL_EMAIL_ONE_MOMENT'));
loadingMessgPanl.render(document.body);
loadingMessgPanl.show();
//If JS files havn't been loaded, perform the load.
if(! SUGAR.quickCompose.resourcesLoaded )
this.loadResources(o);
else
this.initUI(o);
},
/**
* Pull in all the required js files.
* @method loadResources
* @param {Array} o Options containing compose package and full return url.
* @return {} none
**/
loadResources: function(o)
{
//IE Bug fix for TinyMCE when pulling in the js file dynamically.
window.skipTinyMCEInitPhase = true;
var require = ["layout", "element", "tabview", "menu","cookie","tinymce","sugarwidgets","sugarquickcompose","sugarquickcomposecss"];
var loader = new YAHOO.util.YUILoader({
require : require,
loadOptional: true,
skin: { base: 'blank', defaultSkin: '' },
data: o,
onSuccess: this.initComposePackage,
allowRollup: true,
base: "include/javascript/yui/build/"
});
//TiinyMCE cannot be added into the sugar_grp_quickcomp file as it breaks the build, needs to be loaded
//separately.
loader.addModule({
name :"tinymce",
type : "js",
varName: "TinyMCE",
fullpath: "include/javascript/tiny_mce/tiny_mce.js"
});
//Load the Sugar widgets with dependancies on the yui library.
loader.addModule({
name :"sugarwidgets",
type : "js",
fullpath: "include/javascript/sugarwidgets/SugarYUIWidgets.js",
varName: "YAHOO.SUGAR",
requires: ["datatable", "dragdrop", "treeview", "tabview"]
});
//Load the main components for the quick create compose screen.
loader.addModule({
name :"sugarquickcompose",
type : "js",
varName: "SUGAR.email2.complexLayout",
requires: ["layout", "sugarwidgets", "tinymce"],
fullpath: "cache/include/javascript/sugar_grp_quickcomp.js"
});
//Load the css needed for the quickCompose.
loader.addModule({
name :"sugarquickcomposecss",
type : "css",
fullpath: "modules/Emails/EmailUI.css"
});
loader.insert();
}
};
}();
})();