晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/akaindir/www/crm/layouts/v7/resources/ |
Upload File : |
/*+***********************************************************************************
* 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.
*************************************************************************************/
jQuery.Class("Vtiger_Helper_Js",{
checkServerConfigResponseCache : '',
/*
* Function to get the instance of Mass edit of Email
*/
getEmailMassEditInstance : function(){
var className = 'Emails_MassEdit_Js';
var emailMassEditInstance = new window[className]();
return emailMassEditInstance;
},
requestToShowComposeEmailForm : function(selectedId,fieldname,fieldmodule){
var selectedFields = new Array();
selectedFields.push(fieldname);
var selectedIds = new Array();
selectedIds.push(selectedId);
var params = {
'module' : 'Emails',
'fieldModule' : fieldmodule,
'selectedFields[]' : selectedFields,
'selected_ids[]' : selectedIds,
'view' : 'ComposeEmail'
}
var emailsMassEditInstance = Vtiger_Helper_Js.getEmailMassEditInstance();
emailsMassEditInstance.showComposeEmailForm(params);
},
/*
* Function to get the compose email popup
*/
getInternalMailer : function(selectedId,fieldname,fieldmodule){
var module = 'Emails';
var cacheResponse = Vtiger_Helper_Js.checkServerConfigResponseCache;
var checkServerConfigPostOperations = function (data) {
if(data == true){
Vtiger_Helper_Js.requestToShowComposeEmailForm(selectedId,fieldname,fieldmodule);
} else {
alert(app.vtranslate('JS_EMAIL_SERVER_CONFIGURATION'));
}
}
if(cacheResponse === ''){
var helperInstance = new Vtiger_Helper_Js;
var checkServerConfig = helperInstance.checkServerConfig(module);
checkServerConfig.then(function(data){
Vtiger_Helper_Js.checkServerConfigResponseCache = data;
checkServerConfigPostOperations(Vtiger_Helper_Js.checkServerConfigResponseCache);
});
} else {
checkServerConfigPostOperations(Vtiger_Helper_Js.checkServerConfigResponseCache);
}
},
},{
init : function() {
this._initNotificationDefaults();
this.registerPostOverLayPageContentHideEvent();
},
registerPostOverLayPageContentHideEvent : function() {
var self = this;
jQuery('#overlayPageContent').on('hidden.bs.modal', function() {
self.hidePageContentOverlay().then(function() {
app.event.trigger('post.overlayPageContent.hide', jQuery('#overlayPageContent'));
});
});
},
/*
* Function to get Date Instance
* @params date---this is the field value
* @params dateFormat---user date format
* @return date object
*/
getDateInstance : function(dateTime,dateFormat, fieldType){
var dateTimeComponents = dateTime.split(" ");
var dateComponent = dateTimeComponents[0];
var timeComponent = dateTimeComponents[1];
var seconds = '00';
var splittedDate = dateComponent.split("-");
/**PVTPATCHER-55B336B7E161EC5091438EDD404EE93F-START-dateformat**/
/** Don't remove the Start and Finish Markup! Modified: 2020-07-14 11:37:04 **/
var dateFormatSeparator = '-';
if (dateFormat.indexOf('.') != -1)
dateFormatSeparator = '.';
else if (dateFormat.indexOf('/') != -1)
dateFormatSeparator = '/';
var splittedDate = dateComponent.split(dateFormatSeparator);
/**PVTPATCHER-55B336B7E161EC5091438EDD404EE93F-FINISH**/
if(splittedDate.length > 3) {
var errorMsg = app.vtranslate("JS_INVALID_DATE");
throw errorMsg;
}
var splittedDateFormat = dateFormat.split("-");
/**PVTPATCHER-91F19A6975B8FC04324D6F3B84E47E6C-START-dateformat**/
/** Don't remove the Start and Finish Markup! Modified: 2020-07-14 11:37:04 **/
var splittedDateFormat = dateFormat.split(dateFormatSeparator);
/**PVTPATCHER-91F19A6975B8FC04324D6F3B84E47E6C-FINISH**/
var year = splittedDate[splittedDateFormat.indexOf("yyyy")];
var month = splittedDate[splittedDateFormat.indexOf("mm")];
var date = splittedDate[splittedDateFormat.indexOf("dd")];
var dateInstance = Date.parse(year+"-"+month+"-"+date);
if(isNaN(dateInstance) || (dateInstance == null) || (year.length != 4) || (month.length > 2) || (date.length > 2)){
var errorMsg = app.vtranslate("JS_INVALID_DATE");
throw errorMsg;
}
if(fieldType == 'date' && typeof timeComponent != 'undefined') {
var errorMsg = app.vtranslate("JS_INVALID_DATE");
throw errorMsg;
}
//Before creating date object time is set to 00
//because as while calculating date object it depends system timezone
if(typeof timeComponent == "undefined"){
timeComponent = '00:00:00';
}
var timeSections = timeComponent.split(':');
if(typeof timeSections[2] != 'undefined'){
seconds = timeSections[2];
}
//Am/Pm component exits
if(typeof dateTimeComponents[2] != 'undefined') {
timeComponent += ' ' + dateTimeComponents[2];
if(dateTimeComponents[2].toLowerCase() == 'pm' && timeSections[0] != '12') {
timeSections[0] = parseInt(timeSections[0], 10) + 12;
}
if(dateTimeComponents[2].toLowerCase() == 'am' && timeSections[0] == '12') {
timeSections[0] = '00';
}
}
month = month-1;
var dateInstance = new Date(year,month,date,timeSections[0],timeSections[1],seconds);
return dateInstance;
},
/*
* function to check server Configuration
* returns boolean true or false
*/
checkServerConfig : function(module){
var aDeferred = jQuery.Deferred();
var actionParams = {
"action": 'CheckServerInfo',
'module' : module
};
app.request.post({data:actionParams}).then(
function(err,data) {
var state = false;
if(err === null){
state = true;
} else {
state = false;
}
aDeferred.resolve(state);
}
);
return aDeferred.promise();
},
showConfirmationBox: function(data) {
var aDeferred = jQuery.Deferred();
var buttonsInfo, title;
if((typeof data.buttons == "object") && (Object.keys(data.buttons).length > 0)){
buttonsInfo = data.buttons;
}else{
buttonsInfo = {
cancel: {
/**PVTPATCHER-B60E5E8B99D2CE911B6B0985E6EDA34A-START-lng711**/
/** Don't remove the Start and Finish Markup! Modified: 2020-07-14 11:35:04 **/
label: app.vtranslate('No'),
/** REPLACED-B60E5E8B99D2CE911B6B0985E6EDA34A// label: 'No',**/
/**PVTPATCHER-B60E5E8B99D2CE911B6B0985E6EDA34A-FINISH**/
className : 'btn-default confirm-box-btn-pad pull-right'
},
confirm: {
/**PVTPATCHER-C51F215090CF0992D6A1F9ED874CAF52-START-lng711**/
/** Don't remove the Start and Finish Markup! Modified: 2020-07-14 11:35:04 **/
label: app.vtranslate('Yes'),
/** REPLACED-C51F215090CF0992D6A1F9ED874CAF52// label: 'Yes',**/
/**PVTPATCHER-C51F215090CF0992D6A1F9ED874CAF52-FINISH**/
className : 'confirm-box-ok confirm-box-btn-pad btn-primary'
}
}
}
if(typeof data.title != "undefined"){
title = data.title;
}else{
title = '';
}
bootbox.confirm({
title : title,
buttons: buttonsInfo,
message: data['message'],
htmlSupportEnable: data.hasOwnProperty('htmlSupportEnable') ? data['htmlSupportEnable'] : true,
callback: function(result) {
if (result) {
aDeferred.resolve();
} else {
aDeferred.reject();
}
}
});
return aDeferred.promise();
},
showAlertBox: function(data, cb) {
var message = data['message'];
if (typeof cb == 'function') {
bootbox.alert(message, cb);
}
else {
var aDeferred = jQuery.Deferred();
bootbox.alert(message, function(result) {
if (result) {
aDeferred.resolve();
} else {
aDeferred.reject();
}
});
return aDeferred.promise();
}
},
defaultScrollParams : function(){
return {
height: '',
railVisible:false,
alwaysVisible:true
};
},
showScroll : function(container, params) {
if(typeof params == "undefined") {
params = {};
}
var params = jQuery.extend(this.defaultScrollParams(), params);
container.slimScroll(params);
},
showHorizontalScroll : function(element, options) {
if(typeof options == 'undefined') {
options = {};
}
var params = {
horizontalScroll: true,
theme: "dark-thick",
advanced: {
autoExpandHorizontalScroll:true
}
}
if(typeof options != 'undefined'){
var params = jQuery.extend(params,options);
}
return element.mCustomScrollbar(params);
},
showVerticalScroll : function(element, options) {
if(typeof options == 'undefined') {
options = {};
}
var params = {
theme: "dark-thick",
advanced: {
autoExpandHorizontalScroll:true,
setTop: 0
}
};
if(typeof options != 'undefined'){
var params = jQuery.extend(params,options);
}
return element.mCustomScrollbar(params);
},
showBothAxisScroll : function(element, options){
if(typeof options == 'undefined') {
options = {};
}
var params = {
scrollbarPosition : 'inside',
alwaysShowScrollbar : 2,
theme: "dark-thick",
axis:"xy",
live : true
};
if(typeof options != 'undefined'){
var params = jQuery.extend(params,options);
}
return element.mCustomScrollbar(params);
},
defaultModalParams : function() {
return {
backdrop:true,
show:true,
keyboard: false
};
},
loadPageOverlay : function(data, params) {
var overlayPage = jQuery('#overlayPage');
var aDeferred = new jQuery.Deferred();
if(typeof params == "undefined") {
params = {};
}
var defaultParams = this.defaultModalParams();
params = jQuery.extend(defaultParams,params);
var max_height = (jQuery(window).height()) - ($('.global-nav').height());
$('#overlayPage').one('shown.bs.modal',function(){
if(!params.hasOwnProperty('ignoreScroll') && params['ignoreScroll'] != true) {
var scrollParams = {
height: '',
railVisible:true,
alwaysVisible:true,
postition:"outside"
};
app.helper.showVerticalScroll(overlayPage.find('.modal-body'), scrollParams);
}
aDeferred.resolve(overlayPage.find('.data'));
});
$('#overlayPage').one('hidden.bs.modal',function(){
// Added to hide custom arrow added for taskmanagement
overlayPage.find('.arrow').removeClass("show");
overlayPage.find('.data').html('');
$('#overlayPage');
});
jQuery(window).one('resize',function(){
var max_height = (jQuery(window).height()) - ($('.global-nav').height()) - 60;
$('#overlayPage').
css('max-height',max_height).find('.data').css('max-height',max_height);
});
overlayPage.find('.data').html(data);
$('#overlayPage').
css('max-height',max_height).find('.modal-body').css('max-height',max_height);
overlayPage.modal(params);
return aDeferred.promise();
},
hidePageOverlay : function() {
$('#overlayPage').modal('hide');
},
loadPageContentOverlay : function(data, params) {
var aDeferred = new jQuery.Deferred();
var defaultParams = this.defaultModalParams();
params = jQuery.extend(defaultParams,params);
var overlayPageContent = $('#overlayPageContent');
if(jQuery(".content-area").length && jQuery(".content-area").hasClass('full-width')|| (jQuery('.settingsgroup').length === 0 && jQuery('#modules-menu').length === 0)){
overlayPageContent.addClass('full-width');
}
var alreadyShown = false;
if(overlayPageContent.hasClass('in')) {
alreadyShown = true;
}
overlayPageContent.one('shown.bs.modal',function(){
aDeferred.resolve($('#overlayPageContent'));
});
overlayPageContent.one('hidden.bs.modal',function(){
overlayPageContent.find('.data').html('');
})
overlayPageContent.find('.data').html(data);
vtUtils.applyFieldElementsView(overlayPageContent);
overlayPageContent.modal(params);
if(alreadyShown) {
aDeferred.resolve(jQuery('#overlayPageContent'));
}
return aDeferred.promise();
},
hidePageContentOverlay : function() {
var aDeferred = new jQuery.Deferred();
var overlayPageContent = $('#overlayPageContent');
overlayPageContent.one('hidden.bs.modal', function() {
overlayPageContent.find('.data').html('');
aDeferred.resolve();
})
$('#overlayPageContent').modal('hide');
return aDeferred.promise();
},
loadHelpPageOverlay : function(data, params) {
var aDeferred = new jQuery.Deferred();
var defaultParams = this.defaultModalParams();
params = jQuery.extend(defaultParams,params);
var helpOverlayPageContent = jQuery('#helpPageOverlay');
//first hide helpoverlay if already shown
if(helpOverlayPageContent.hasClass('in')) {
this.hideHelpPageOverlay();
}
var cb = params.cb;
if(typeof cb != "function") {
cb = function(){};
}
helpOverlayPageContent.one('shown.bs.modal', function () {
aDeferred.resolve(helpOverlayPageContent);
});
$('#helpPageOverlay').html(data).modal(params);
vtUtils.applyFieldElementsView(helpOverlayPageContent);
cb(helpOverlayPageContent);
return aDeferred.promise();
},
hideHelpPageOverlay : function() {
var aDeferred = new jQuery.Deferred();
var overlayPageContent = $('#helpPageOverlay');
overlayPageContent.one('hidden.bs.modal', function(){
overlayPageContent.find('.data').html('');
aDeferred.resolve();
})
$('#helpPageOverlay').modal('hide');
return aDeferred.promise();
},
showModal : function(content,params) {
// we should hide all existing modal's
this.hideModal();
if(typeof params === "undefined") {
params = {};
}
var defaultParams = this.defaultModalParams();
params = jQuery.extend(defaultParams,params);
var cb = params.cb;
var container = jQuery('.myModal');
container.on('hidden.bs.modal',function() {
container.html('');
window.onbeforeunload = null;
});
if(typeof cb === "function") {
container.off('shown.bs.modal');
//This event is fired when the modal has been made visible to the user
container.on('shown.bs.modal', function () {
cb(container);
});
}
container.html(content).modal(params);
vtUtils.applyFieldElementsView(container);
return container;
},
hideModal : function(){
var aDeferred = new jQuery.Deferred();
var container = jQuery('.myModal');
container.one('hidden.bs.modal', function(){
aDeferred.resolve();
})
$('.myModal').modal('hide');
return aDeferred.promise();
},
showInfoMessage : function(message) {
$('#messageBar').html('<div class="alert alert-info">\n\
<a href="#" class="close" data-dismiss="alert">×</a>\n\
<strong>'+message+'</strong>\n\
</div>');
},
showErrorMessage : function(message) {
$('#messageBar').html('<div class="alert alert-danger">\n\
<a href="#" class="close" data-dismiss="alert">×</a>\n\
<strong>'+message+'</strong>\n\
</div>');
},
showProgress : function(message) {
var messageBar = jQuery('#messageBar');
messageBar.removeClass('hide');
var messageHTML='';
if(message !== undefined) {
messageHTML = '<div class="message"><span>'+message+'</span></div>';
}
messageBar.html('<div style="text-align:center;position:fixed;top:50%;left:40%;"><img src="'+app.vimage_path('loading.gif')+'">'+ messageHTML +'</div>');
},
hideProgress : function() {
var messageBar = jQuery('#messageBar');
messageBar.addClass('hide');
},
getSelect2FromSelect : function(selectEle){
if(typeof selectEle == "undefined") {
return jQuery({});
}
var select2 = selectEle.data('select2');
if(typeof select2 == "undefined") {
return jQuery({});
}
return jQuery('#'+select2.containerId);
},
/*
* Function to add clickoutside event on the element - By using outside events plugin
* @params element---On which element you want to apply the click outside event
* @params callbackFunction---This function will contain the actions triggered after clickoutside event
*/
addClickOutSideEvent : function(element, callbackFunction) {
element.one('clickoutside',callbackFunction);
},
_initNotificationDefaults : function() {
if(jQuery('.module-action-bar').length) {
this.ERROR_DELAY = 1000;
var defaultSettings = {
'element' : jQuery('body'),
'offset' : {
'x' : 50,
'y' : 92 + jQuery('.module-action-bar').offset().top
},
'z_index' : 10003,
'template' : '<div data-notify="container" class="col-xs-11 col-sm-3 vt-notification vt-notification-{0}" role="alert">' +
'<div class="notificationHeader">'+
'<button type="button" aria-hidden="true" class="close pull-right" data-notify="dismiss">×</button>' +
'<span data-notify="icon"></span> ' +
'<span data-notify="title">{1}</span> ' +
'</div>'+
'<div data-notify="message">{2}</div>' +
'<div class="progress" data-notify="progressbar">' +
'<div class="progress-bar progress-bar-{0}" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;"></div>' +
'</div>' +
'<a href="{3}" target="{4}" data-notify="url"></a>' +
'</div>',
'delay' : 600,
'animate' : 'null'
}
jQuery.notifyDefaults(defaultSettings);
}
},
showAlertNotification : function(options,settings) {
var defaultOptions = {
'icon' : 'fa fa-exclamation-triangle',
'title' : app.vtranslate('JS_ALERT')
}
options = jQuery.extend(defaultOptions,options);
jQuery.notify(options,settings);
},
showErrorNotification : function (options, settings) {
var defaultOptions = {
'icon' : 'fa fa-exclamation-circle',
'title' : app.vtranslate('JS_ERROR')
}
var defaultSettings = {
'delay' : this.ERROR_DELAY
}
options = jQuery.extend(defaultOptions, options);
settings = jQuery.extend(defaultSettings, settings);
jQuery.notify(options,settings);
},
showSuccessNotification : function(options, settings) {
var defaultOptions = {
'icon' : 'fa fa-check-circle',
'title' : app.vtranslate('JS_SUCCESS')
}
options = jQuery.extend(defaultOptions, options);
jQuery.notify(options,settings);
},
rand : function() {
return Math.floor((Math.random() * 1000) + 1);
},
getColorContrast: function(hexcolor) {
hexcolor = hexcolor.slice(1);
var r = parseInt(hexcolor.substr(0,2),16);
var g = parseInt(hexcolor.substr(2,2),16);
var b = parseInt(hexcolor.substr(4,2),16);
var yiq = ((r*299)+(g*587)+(b*114))/1000;
return (yiq >= 128) ? 'light' : 'dark';
},
/*
* Function to show the custom dialogs
*/
showCustomDialogBox : function(data){
//options are array of objects with label,button class and callback properties
bootbox.dialog(data);
},
/**
* Function to decode the encoded htmlentities values
*/
getDecodedValue : function(value) {
return jQuery('<div></div>').html(value).text();
},
initializeColorPicker : function(element,customParams,onChangeFunc) {
var params = {
flat : true,
onChange : onChangeFunc
};
if(typeof customParams !== 'undefined') {
params = jQuery.extend(params,customParams);
}
element.ColorPicker(params);
},
getRandomColor : function() {
return '#'+(0x1000000+(Math.random())*0xffffff).toString(16).substr(1,6);
},
// https://github.com/kvz/phpjs/blob/master/functions/array/array_diff.js
array_diff : function(arr1) {
// discuss at: http://phpjs.org/functions/array_diff/
// original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// improved by: Sanjoy Roy
// revised by: Brett Zamir (http://brett-zamir.me)
// example 1: array_diff(['Kevin', 'van', 'Zonneveld'], ['van', 'Zonneveld']);
// returns 1: {0:'Kevin'}
var retArr = {},
argl = arguments.length,
k1 = '',
i = 1,
k = '',
arr = {};
arr1keys: for (k1 in arr1) {
for (i = 1; i < argl; i++) {
arr = arguments[i];
for (k in arr) {
if (arr[k] === arr1[k1]) {
// If it reaches here, it was found in at least one array, so try next value
continue arr1keys;
}
}
retArr[k1] = arr1[k1];
}
}
return retArr;
},
array_merge : function() {
// discuss at: http://phpjs.org/functions/array_merge/
// original by: Brett Zamir (http://brett-zamir.me)
// bugfixed by: Nate
// bugfixed by: Brett Zamir (http://brett-zamir.me)
// input by: josh
// example 1: arr1 = {"color": "red", 0: 2, 1: 4}
// example 1: arr2 = {0: "a", 1: "b", "color": "green", "shape": "trapezoid", 2: 4}
// example 1: array_merge(arr1, arr2)
// returns 1: {"color": "green", 0: 2, 1: 4, 2: "a", 3: "b", "shape": "trapezoid", 4: 4}
// example 2: arr1 = []
// example 2: arr2 = {1: "data"}
// example 2: array_merge(arr1, arr2)
// returns 2: {0: "data"}
var args = Array.prototype.slice.call(arguments),
argl = args.length,
arg,
retObj = {},
k = '',
argil = 0,
j = 0,
i = 0,
ct = 0,
toStr = Object.prototype.toString,
retArr = true;
for (i = 0; i < argl; i++) {
if (toStr.call(args[i]) !== '[object Array]') {
retArr = false;
break;
}
}
if (retArr) {
retArr = [];
for (i = 0; i < argl; i++) {
retArr = retArr.concat(args[i]);
}
return retArr;
}
for (i = 0, ct = 0; i < argl; i++) {
arg = args[i];
if (toStr.call(arg) === '[object Array]') {
for (j = 0, argil = arg.length; j < argil; j++) {
retObj[ct++] = arg[j];
}
} else {
for (k in arg) {
if (arg.hasOwnProperty(k)) {
if (parseInt(k, 10) + '' === k) {
retObj[ct++] = arg[k];
} else {
retObj[k] = arg[k];
}
}
}
}
}
return retObj;
},
array_search: function(needle, haystack, argStrict) {
// discuss at: http://phpjs.org/functions/array_search/
// original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// input by: Brett Zamir (http://brett-zamir.me)
// bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// depends on: array
// test: skip
// example 1: array_search('zonneveld', {firstname: 'kevin', middle: 'van', surname: 'zonneveld'});
// returns 1: 'surname'
// example 2: ini_set('phpjs.return_phpjs_arrays', 'on');
// example 2: var ordered_arr = array({3:'value'}, {2:'value'}, {'a':'value'}, {'b':'value'});
// example 2: var key = array_search(/val/g, ordered_arr); // or var key = ordered_arr.search(/val/g);
// returns 2: '3'
var strict = !!argStrict,
key = '';
if (haystack && typeof haystack === 'object' && haystack.change_key_case) { // Duck-type check for our own array()-created PHPJS_Array
return haystack.search(needle, argStrict);
}
if (typeof needle === 'object' && needle.exec) { // Duck-type for RegExp
if (!strict) { // Let's consider case sensitive searches as strict
var flags = 'i' + (needle.global ? 'g' : '') +
(needle.multiline ? 'm' : '') +
(needle.sticky ? 'y' : ''); // sticky is FF only
needle = new RegExp(needle.source, flags);
}
for (key in haystack) {
if (needle.test(haystack[key])) {
return key;
}
}
return false;
}
for (key in haystack) {
if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
return key;
}
}
return false;
},
getCookie : function(c_name) {
var c_value = document.cookie;
var c_start = c_value.indexOf(" " + c_name + "=");
if (c_start == -1) {
c_start = c_value.indexOf(c_name + "=");
}
if (c_start == -1) {
c_value = null;
} else {
c_start = c_value.indexOf("=", c_start) + 1;
var c_end = c_value.indexOf(";", c_start);
if (c_end == -1) {
c_end = c_value.length;
}
c_value = unescape(c_value.substring(c_start, c_end));
}
return c_value;
},
setCookie : function(c_name,value,exdays) {
var exdate = new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
},
getViewHeight: function(){
var winHeight= jQuery(window).height()-50;
return winHeight;
},
showPopup : function(content,params) {
if(typeof params === "undefined") {
params = {};
}
var defaultParams = app.helper.defaultModalParams();
params = jQuery.extend(defaultParams,params);
var cb = params.cb;
if(jQuery('#popupModal').length) return;
var container = jQuery('<div id="popupModal" class="modal"></div>');
container.on('hidden.bs.modal',function() {
container.html('').remove();
});
if(typeof cb === "function") {
container.off('shown.bs.modal');
//This event is fired when the modal has been made visible to the user
container.on('shown.bs.modal', function () {
cb(container);
});
}
container.html(content).modal(params);
vtUtils.applyFieldElementsView(container);
return container;
},
hidePopup : function() {
jQuery('#popupModal').modal("hide");
},
/*
* Function to confirmation modal for recurring events updation and deletion
*/
showConfirmationForRepeatEvents : function(customParams) {
var self = this;
var aDeferred = jQuery.Deferred();
if(typeof customParams === 'undefined') {
customParams = {};
}
var params = {
module : 'Calendar',
view : 'RecurringDeleteCheck'
};
jQuery.extend(params, customParams);
var postData = {};
self.showProgress();
app.request.get({'data' : params}).then(function(e,data) {
self.hideProgress();
var callback = function(modalContainer) {
modalContainer.on('click', '.onlyThisEvent', function() {
postData['recurringEditMode'] = 'current';
self.hidePopup();
aDeferred.resolve(postData);
});
modalContainer.on('click', '.futureEvents', function() {
postData['recurringEditMode'] = 'future';
self.hidePopup();
aDeferred.resolve(postData);
});
modalContainer.on('click', '.allEvents', function() {
postData['recurringEditMode'] = 'all';
self.hidePopup();
aDeferred.resolve(postData);
});
};
self.showPopup(data, {
'cb' : callback
});
});
return aDeferred.promise();
},
equalWidth : function(group){
broadest = 0;
group.each(function () {
var thisWidth = jQuery(this).width();
if (thisWidth > broadest) {
broadest = thisWidth;
}
});
group.width(broadest);
},
fixedBottomListViewScroll : function(scrollwrap){
scrollwrap = jQuery(scrollwrap);
//The element should be relative to calculate offset
scrollwrap.css({position: "relative", top: '-15px'});
var winHeight = jQuery(window).innerHeight();
var viewportOffset = scrollwrap.offset().top - jQuery(window).scrollTop();
var view = jQuery('[name="view"]').val();
if (viewportOffset >= winHeight) {
if(view == "Popup"){
scrollwrap.css({position: "fixed", top: 'auto', bottom: '15px'});
}else if(view == "List"){
scrollwrap.css({position: "fixed", top: 'auto', bottom: 0});
}
} else {
scrollwrap.css({position: "relative", 'top': '-15px', bottom: 'auto'});
}
},
dynamicListViewHorizontalScroll : function(){
var thisInstance = this;
this.equalWidth(jQuery(".sticky-wrap, #scroller_wrapper"));
var stickyWrapWidth = jQuery('.sticky-wrap').width();
jQuery('.sticky-wrap').css("width", stickyWrapWidth-3);
this.equalWidth(jQuery("#listview-table, #scroller"));
var tableHeight = jQuery('.sticky-wrap').height();
var winHeight = jQuery(window).innerHeight();
jQuery("#scroller_wrapper").scroll(function () {
jQuery(".sticky-wrap").scrollLeft(jQuery("#scroller_wrapper").scrollLeft());
});
jQuery(".sticky-wrap").scroll(function () {
jQuery("#scroller_wrapper").scrollLeft(jQuery(".sticky-wrap").scrollLeft());
});
jQuery(window).scroll(function () {
thisInstance.fixedBottomListViewScroll(jQuery("#scroller_wrapper"));
});
if(tableHeight > winHeight-142){
thisInstance.fixedBottomListViewScroll(jQuery("#scroller_wrapper"));
}
},
dynamicPopupViewHorizontalScroll : function(){
var thisInstance = this;
this.equalWidth(jQuery(".popupEntriesDiv, #scroller_wrapper"));
this.equalWidth(jQuery(".listview-table, #scroller"));
var tableHeight = jQuery('.popupEntriesDiv').height();
var winHeight = jQuery('.modal-body').innerHeight();
jQuery("#scroller_wrapper").scroll(function () {
jQuery(".popupEntriesDiv").scrollLeft(jQuery("#scroller_wrapper").scrollLeft());
});
jQuery(".popupEntriesDiv").scroll(function () {
jQuery("#scroller_wrapper").scrollLeft(jQuery(".popupEntriesDiv").scrollLeft());
});
jQuery(window).scroll(function () {
thisInstance.fixedBottomListViewScroll(jQuery("#scroller_wrapper"));
});
if(tableHeight > winHeight-142){
thisInstance.fixedBottomListViewScroll(jQuery("#scroller_wrapper"));
}
},
/**
* Function to check if the browser is ie
*/
isMSIE : function() {
return navigator.userAgent.indexOf("MSIE ") > 0;
},
/**
* Function to check newer version of ie
*/
isTrident : function() {
return (/Trident/).test(navigator.userAgent);
},
/**
* Function to check if the browser in mozilla
*/
isMozilla: function() {
var ua = navigator.userAgent;
ua = ua.toLowerCase();
return (/mozilla/).test(ua) || (/firefox/).test(ua);
},
/**
* Function to check if the browser is webkit
*/
isWebkit: function() {
var ua = navigator.userAgent;
ua = ua.toLowerCase();
return (/webkit/).test(ua) || (/chrom(e|ium)/).test(ua);
},
/*
* Function to check Duplication of Account Name
* returns boolean true or false
*/
checkDuplicateName : function(details) {
var accountName = details.accountName;
var recordId = details.recordId;
var aDeferred = jQuery.Deferred();
var moduleName = details.moduleName;
if(typeof moduleName == "undefined"){
moduleName = app.getModuleName();
}
var params = {
'module' : moduleName,
'action' : "CheckDuplicate",
'accountname' : accountName,
'record' : recordId
}
app.request.post({data: params}).then(
function(err, data) {
var result = data.success;
if(result == true) {
aDeferred.reject(data);
} else {
aDeferred.resolve(data);
}
}
);
return aDeferred.promise();
},
registerLeavePageWithoutSubmit: function(form) {
var initialFormData = form.serialize();
window.onbeforeunload = function(e) {
if (initialFormData != form.serialize() && form.data('submit') != "true") {
return app.vtranslate("JS_CHANGES_WILL_BE_LOST");
}
};
},
registerModalDismissWithoutSubmit: function(form) {
var initialFormData = form.serialize();
jQuery('.modal .close,.modal .cancelLink').click(function(e) {
if (initialFormData != form.serialize() && form.data('submit') != "true") {
app.helper.showConfirmationBox({'message' : app.vtranslate("JS_CHANGES_WILL_BE_LOST") +' '+ app.vtranslate('JS_WISH_TO_PROCEED')}).then(function(){
window.onbeforeunload = null;
if(form.closest('#overlayPageContent').length > 0) {
app.helper.hidePageContentOverlay();
}else {
app.helper.hideModal();
}
});
return false;
}
});
},
getDropDownmenuParent: function ($this) {
var selector = $this.attr('data-target');
if (!selector) {
selector = $this.attr('href');
selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
};
var $parent = selector && $(selector);
return $parent && $parent.length ? $parent : $this.parent();
}
});
function VtError(params) {
this.name = 'VtError';
this.stack = (new Error()).stack;
this.title = params.title || app.vtranslate('JS_ERROR');
this.message= params.message || '';
}
VtError.prototype = Object.create(Error.prototype);
VtError.prototype.constructor = VtError;