vtigerossez/include/js/vtlib.js

217 lines
7.2 KiB
JavaScript

/*+*******************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
******************************************************************************/
/**
* Generic uitype popup selection handler
*/
function vtlib_setvalue_from_popup(recordid,value,target_fieldname) {
if(window.opener.document.EditView) {
var domnode_id = window.opener.document.EditView[target_fieldname];
var domnode_display = window.opener.document.EditView[target_fieldname+'_display'];
if(domnode_id) domnode_id.value = recordid;
if(domnode_display) domnode_display.value = value;
return true;
} else if(window.opener.document.QcEditView) {
var domnode_id = window.opener.document.QcEditView[target_fieldname];
var domnode_display = window.opener.document.QcEditView[target_fieldname+'_display'];
if(domnode_id) domnode_id.value = recordid;
if(domnode_display) domnode_display.value = value;
return true;
} else {
return false;
}
}
/**
* Show the vtiger field help if available.
*/
function vtlib_field_help_show(basenode, fldname) {
var domnode = $('vtlib_fieldhelp_div');
if(typeof(fieldhelpinfo) == 'undefined') return;
var helpcontent = fieldhelpinfo[fldname];
if(typeof(helpcontent) == 'undefined') return;
if(!domnode) {
domnode = document.createElement('div');
domnode.id = 'vtlib_fieldhelp_div';
domnode.className = 'dvtSelectedCell';
domnode.style.position = 'absolute';
domnode.style.width = '150px';
domnode.style.padding = '4px';
domnode.style.fontWeight = 'normal';
document.body.appendChild(domnode);
domnode = $('vtlib_fieldhelp_div');
Event.observe(domnode, 'mouseover', function() {
$('vtlib_fieldhelp_div').show();
});
Event.observe(domnode, 'mouseout', vtlib_field_help_hide);
}
else {
domnode.show();
}
domnode.innerHTML = helpcontent;
fnvshobj(basenode,'vtlib_fieldhelp_div');
}
/**
* Hide the vtiger field help
*/
function vtlib_field_help_hide(evt) {
var domnode = $('vtlib_fieldhelp_div');
if(domnode) domnode.hide();
}
/**
* Listview Javascript Event handlers API
*
* Example:
* vtlib_listview.register('cell.onmouseover', function(evtparams, moreparams) { console.log(evtparams); }, [10,20]);
* vtlib_listview.register('cell.onmouseout', function(evtparams) {console.log(evtparams); });
*/
var vtlib_listview = {
/**
* Callback function handlers that needs to be triggered for an event
*
* _handlers = {
* 'event1' : [ [handlerfn11, handlerfn11_moreparams], [handlerfn2, handlerfn12_moreparams] ],
* 'event2' : [ [handlerfn21, handlerfn21_moreparams], [handlerfn2, handlerfn22_moreparams] ]
* }
*/
_handlers : {},
/**
* Register handler function for the event
*/
register : function(evttype, handler, callback_params) {
if(typeof(callback_params) == 'undefined') callback_params = false;
if(typeof(vtlib_listview._handlers[evttype]) == 'undefined') {
vtlib_listview._handlers[evttype] = [];
}
// Event handlerinfo is an array having (function, optional_more_parameters)
vtlib_listview._handlers[evttype].push([handler, callback_params]);
},
/**
* Invoke handler function based on event type
*/
invoke_handler : function(evttype, event_params) {
var evthandlers = vtlib_listview._handlers[evttype];
if(typeof(evthandlers) == 'undefined') return;
for(var index = 0; index < evthandlers.length; ++index) {
var evthandlerinfo = evthandlers[index];
// Event handlerinfo is an array having (function, optional_more_parameters)
var evthandlerfn = evthandlerinfo[0];
if(typeof(evthandlerfn) == 'function') {
evthandlerfn(event_params, evthandlerinfo[1]);
}
}
},
/**
* Trigger handler function for the event
*/
trigger : function(evttype, node) {
if(evttype == 'cell.onmouseover' || evttype == 'cell.onmouseout') {
// Catch hold of DOM element which has meta inforamtion.
var innerNodes = node.getElementsByTagName('span');
if(typeof(innerNodes) != 'undefined') {
var cellhandler = false;
for(var index = 0; index < innerNodes.length; ++index) {
var innerNodeAttrs = innerNodes[index].attributes;
if(typeof(innerNodeAttrs) != 'undefined' && typeof(innerNodeAttrs.type) != 'undefined' && innerNodeAttrs['type'].nodeValue == 'vtlib_metainfo') {
cellhandler = innerNodes[index];
break;
}
}
if(cellhandler == false) return;
var event_params = {
'event' : evttype,
'domnode': node,
'module' : cellhandler.attributes['vtmodule'].nodeValue,
'fieldname': cellhandler.attributes['vtfieldname'].nodeValue,
'recordid': cellhandler.attributes['vtrecordid'].nodeValue
}
vtlib_listview.invoke_handler(evttype, event_params);
}
}
}
}
/** END **/
/**
* DetailView widget loader API
*/
function vtlib_loadDetailViewWidget(urldata, target, indicator) {
if(typeof(target) == 'undefined') {
target = false;
} else {
target = $(target);
}
if(typeof(indicator) == 'undefined') {
indicator = false;
} else {
indicator = $(indicator);
}
if(indicator) {
indicator.show();
}
new Ajax.Request('index.php',
{
queue: {
position: 'end',
scope: 'command'
},
method: 'post',
postBody:urldata,
onComplete: function(response) {
if(target) {
target.innerHTML = response.responseText;
if(indicator) {
indicator.hide();
}
}
}
});
return false; // To stop event propogation
}
/**
* return themeurl
*
*/
function vtlib_vtiger_imageurl(theme){
return "themes/"+theme+"/images";
}
/*
* getElementsByClassName fix for I.E 8
*/
function vtlib_getElementsByClassName(obj,className,tagName){
//Use getElementsByClassName if it is supported
if ( typeof(obj.getElementsByClassName) != 'undefined' ) {
return obj.getElementsByClassName(className);
}
// Otherwise search for all tags of type tagname with class "className"
var returnList = new Array();
var nodes = obj.getElementsByTagName(tagName);
var max = nodes.length;
for ( var i = 0; i < max; i++ ) {
if ( nodes[i].className == className ) {
returnList[returnList.length] = nodes[i];
}
}
return returnList;
}