晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
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/public_html/crm/layouts/vlayout/modules/Vtiger/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_DashBoard_Js", {
gridster : false,
//static property which will store the instance of dashboard
currentInstance : false,
addWidget : function(element, url) {
var element = jQuery(element);
var linkId = element.data('linkid');
var name = element.data('name');
jQuery(element).parent().hide();
var widgetContainer = jQuery('<li class="new dashboardWidget" id="'+ linkId +'" data-name="'+name+'" data-mode="open"></li>');
widgetContainer.data('url', url);
var width = element.data('width');
var height = element.data('height');
Vtiger_DashBoard_Js.gridster.add_widget(widgetContainer, width, height);
Vtiger_DashBoard_Js.currentInstance.loadWidget(widgetContainer);
},
addMiniListWidget: function(element, url) {
// 1. Show popup window for selection (module, filter, fields)
// 2. Compute the dynamic mini-list widget url
// 3. Add widget with URL to the page.
element = jQuery(element);
app.showModalWindow(null, "index.php?module=Home&view=MiniListWizard&step=step1", function(wizardContainer){
var form = jQuery('form', wizardContainer);
var moduleNameSelectDOM = jQuery('select[name="module"]', wizardContainer);
var filteridSelectDOM = jQuery('select[name="filterid"]', wizardContainer);
var fieldsSelectDOM = jQuery('select[name="fields"]', wizardContainer);
var moduleNameSelect2 = app.showSelect2ElementView(moduleNameSelectDOM, {
placeholder: app.vtranslate('JS_SELECT_MODULE')
});
var filteridSelect2 = app.showSelect2ElementView(filteridSelectDOM,{
placeholder: app.vtranslate('JS_PLEASE_SELECT_ATLEAST_ONE_OPTION')
});
var fieldsSelect2 = app.showSelect2ElementView(fieldsSelectDOM, {
placeholder: app.vtranslate('JS_PLEASE_SELECT_ATLEAST_ONE_OPTION'),
closeOnSelect: true,
maximumSelectionSize: 2
});
var footer = jQuery('.modal-footer', wizardContainer);
filteridSelectDOM.closest('tr').hide();
fieldsSelectDOM.closest('tr').hide();
footer.hide();
moduleNameSelect2.change(function(){
if (!moduleNameSelect2.val()) return;
AppConnector.request({
module: 'Home',
view: 'MiniListWizard',
step: 'step2',
selectedModule: moduleNameSelect2.val()
}).then(function(res) {
filteridSelectDOM.empty().html(res).trigger('change');
filteridSelect2.closest('tr').show();
})
});
filteridSelect2.change(function(){
if (!filteridSelect2.val()) return;
AppConnector.request({
module: 'Home',
view: 'MiniListWizard',
step: 'step3',
selectedModule: moduleNameSelect2.val(),
filterid: filteridSelect2.val()
}).then(function(res){
fieldsSelectDOM.empty().html(res).trigger('change');
fieldsSelect2.closest('tr').show();
});
});
fieldsSelect2.change(function() {
if (!fieldsSelect2.val()) {
footer.hide();
} else {
footer.show();
}
});
form.submit(function(e){
e.preventDefault();
//To disable savebutton after one submit to prevent multiple submits
jQuery("[name='saveButton']").attr('disabled','disabled');
var selectedModule = moduleNameSelect2.val();
var selectedFilterId= filteridSelect2.val();
var selectedFields = fieldsSelect2.val();
if (typeof selectedFields != 'object') selectedFields = [selectedFields];
// TODO mandatory field validation
finializeAdd(selectedModule, selectedFilterId, selectedFields);
});
});
function finializeAdd(moduleName, filterid, fields) {
var data = {
module: moduleName
}
if (typeof fields != 'object') fields = [fields];
data['fields'] = fields;
url += '&filterid='+encodeURIComponent(filterid)+'&data=' + encodeURIComponent(JSON.stringify(data));
var linkId = element.data('linkid');
var name = element.data('name');
var widgetContainer = jQuery('<li class="new dashboardWidget" id="'+ linkId +"-" + filterid +'" data-name="'+name+'" data-mode="open"></li>');
widgetContainer.data('url', url);
var width = element.data('width');
var height = element.data('height');
Vtiger_DashBoard_Js.gridster.add_widget(widgetContainer, width, height);
Vtiger_DashBoard_Js.currentInstance.loadWidget(widgetContainer);
app.hideModalWindow();
}
},
restrictContentDrag : function(container){
container.on('mousedown.draggable', function(e){
var element = jQuery(e.target);
var isHeaderElement = element.closest('.dashboardWidgetHeader').length > 0 ? true : false;
if(isHeaderElement){
return;
}
//Stop the event propagation so that drag will not start for contents
e.stopPropagation();
})
},
addNoteBookWidget : function(element, url) {
// 1. Show popup window for selection (module, filter, fields)
// 2. Compute the dynamic mini-list widget url
// 3. Add widget with URL to the page.
element = jQuery(element);
app.showModalWindow(null, "index.php?module=Home&view=AddNotePad", function(wizardContainer){
var form = jQuery('form', wizardContainer);
var params = app.validationEngineOptions;
params.onValidationComplete = function(form, valid){
if(valid) {
//To prevent multiple click on save
jQuery("[name='saveButton']").attr('disabled','disabled');
var notePadName = form.find('[name="notePadName"]').val();
var notePadContent = form.find('[name="notePadContent"]').val();
var linkId = element.data('linkid');
var noteBookParams = {
'module' : app.getModuleName(),
'action' : 'NoteBook',
'mode' : 'NoteBookCreate',
'notePadName' : notePadName,
'notePadContent' : notePadContent,
'linkId' : linkId
}
AppConnector.request(noteBookParams).then(
function(data){
if(data.result.success){
var widgetId = data.result.widgetId;
app.hideModalWindow();
url += '&widgetid='+widgetId
var name = element.data('name');
var widgetContainer = jQuery('<li class="new dashboardWidget" id="'+ linkId +"-" + widgetId +'" data-name="'+name+'" data-mode="open"></li>');
widgetContainer.data('url', url);
var width = element.data('width');
var height = element.data('height');
Vtiger_DashBoard_Js.gridster.add_widget(widgetContainer, width, height);
Vtiger_DashBoard_Js.currentInstance.loadWidget(widgetContainer);
}
})
}
return false;
}
form.validationEngine(params);
});
}
}, {
container : false,
instancesCache : {},
init : function() {
Vtiger_DashBoard_Js.currentInstance = this;
},
getContainer : function() {
if(this.container == false) {
this.container = jQuery('.gridster ul');
}
return this.container;
},
getWidgetInstance : function(widgetContainer) {
var id = widgetContainer.attr('id');
if(!(id in this.instancesCache)) {
var widgetName = widgetContainer.data('name');
this.instancesCache[id] = Vtiger_Widget_Js.getInstance(widgetContainer, widgetName);
}
return this.instancesCache[id];
},
registerGridster : function() {
var thisInstance = this;
Vtiger_DashBoard_Js.gridster = this.getContainer().gridster({
widget_margins: [7, 7],
widget_base_dimensions: [100, 300],
min_cols: 6,
min_rows: 20,
draggable: {
'stop': function() {
thisInstance.savePositions(jQuery('.dashboardWidget'));
}
}
}).data('gridster');
},
savePositions: function(widgets) {
var widgetRowColPositions = {}
for (var index=0, len = widgets.length; index < len; ++index) {
var widget = jQuery(widgets[index]);
widgetRowColPositions[widget.attr('id')] = JSON.stringify({
row: widget.attr('data-row'), col: widget.attr('data-col')
});
}
AppConnector.request({module: 'Vtiger', action: 'SaveWidgetPositions', 'positionsmap': widgetRowColPositions}).then(function(data){
});
},
loadWidgets : function() {
var thisInstance = this;
var widgetList = jQuery('.dashboardWidget');
widgetList.each(function(index,widgetContainerELement){
thisInstance.loadWidget(jQuery(widgetContainerELement));
});
},
loadWidget : function(widgetContainer) {
var thisInstance = this;
var urlParams = widgetContainer.data('url');
var mode = widgetContainer.data('mode');
widgetContainer.progressIndicator();
if(mode == 'open') {
AppConnector.request(urlParams).then(
function(data){
widgetContainer.html(data);
var adjustedHeight = widgetContainer.height()-50;
app.showScrollBar(widgetContainer.find('.dashboardWidgetContent'),{'height' : adjustedHeight});
var widgetInstance = thisInstance.getWidgetInstance(widgetContainer);
widgetContainer.trigger(Vtiger_Widget_Js.widgetPostLoadEvent);
},
function(){
}
);
} else {
}
},
registerEvents : function() {
this.registerGridster();
this.loadWidgets();
this.registerRefreshWidget();
this.showWidgetIcons();
this.hideWidgetIcons();
this.removeWidget();
this.registerFilterInitiater();
this.gridsterStop();
},
gridsterStop : function() {
// TODO: we need to allow the header of the widget to be draggable
var gridster = Vtiger_DashBoard_Js.gridster;
},
registerRefreshWidget : function() {
var thisInstance = this;
this.getContainer().on('click', 'a[name="drefresh"]', function(e) {
var element = $(e.currentTarget);
var parent = element.closest('li');
var widgetInstnace = thisInstance.getWidgetInstance(parent);
widgetInstnace.refreshWidget();
return;
});
},
showWidgetIcons : function() {
this.getContainer().on('mouseover', 'li', function(e) {
var element = $(e.currentTarget);
var widgetIcons = element.find('.widgeticons');
widgetIcons.fadeIn('slow', function() {
widgetIcons.css('visibility', 'visible');
});
});
},
hideWidgetIcons : function() {
this.getContainer().on('mouseout', 'li', function(e) {
var element = $(e.currentTarget);
var widgetIcons = element.find('.widgeticons');
widgetIcons.css('visibility', 'hidden');
});
},
removeWidget : function() {
this.getContainer().on('click', 'li a[name="dclose"]', function(e) {
var element = $(e.currentTarget);
var listItem = jQuery(element).parents('li');
var width = listItem.attr('data-sizex');
var height = listItem.attr('data-sizey');
var url = element.data('url');
var parent = element.closest('.dashboardWidgetHeader').parent();
var widgetName = parent.data('name');
var widgetTitle = parent.find('.dashboardTitle').attr('title');
var message = app.vtranslate('JS_ARE_YOU_SURE_TO_DELETE_WIDGET')+" "+widgetTitle;
Vtiger_Helper_Js.showConfirmationBox({'message' : message}).then(
function(e) {
AppConnector.request(url).then(
function(response) {
if (response.success) {
var nonReversableWidgets = ['MiniList','Notebook']
parent.fadeOut('slow', function() {
parent.remove();
});
if (jQuery.inArray(widgetName, nonReversableWidgets) == -1) {
var data = '<li><a onclick="Vtiger_DashBoard_Js.addWidget(this, \''+response.result.url+'\')" href="javascript:void(0);"';
data += 'data-width='+width+' data-height='+height+ ' data-linkid='+response.result.linkid+' data-name='+response.result.name+'>'+response.result.title+'</a></li>';
var divider = jQuery('.widgetsList .divider');
if(divider.length) {
jQuery(data).insertBefore(divider);
} else {
jQuery(data).insertAfter(jQuery('.widgetsList li:last'));
}
}
}
}
);
},
function(error, err){
}
);
});
},
registerFilterInitiater : function() {
var container = this.getContainer();
container.on('click', 'a[name="dfilter"]', function(e) {
var widgetContainer = jQuery(e.currentTarget).closest('.dashboardWidget');
var filterContainer = widgetContainer.find('.filterContainer');
var dashboardWidgetHeader = jQuery('.dashboardWidgetHeader', widgetContainer);
filterContainer.slideToggle(500);
var callbackFunction = function() {
filterContainer.slideUp(500);
jQuery('.dateRange').DatePickerHide();
}
//adding clickoutside event on the dashboardWidgetHeader
Vtiger_Helper_Js.addClickOutSideEvent(dashboardWidgetHeader, callbackFunction);
return false;
})
}
});