Форк Rambox
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

105 lines
3.8 KiB

/**
* The Preview Plugin enables toggle of a configurable preview of all visible records.
*
* Note: This plugin does NOT assert itself against an existing RowBody feature and may conflict with
* another instance of the same plugin.
*/
Ext.define('Ext.ux.PreviewPlugin', {
extend: 'Ext.plugin.Abstract',
alias: 'plugin.preview',
requires: ['Ext.grid.feature.RowBody'],
// private, css class to use to hide the body
hideBodyCls: 'x-grid-row-body-hidden',
/**
* @cfg {String} bodyField
* Field to display in the preview. Must be a field within the Model definition
* that the store is using.
*/
bodyField: '',
/**
* @cfg {Boolean} previewExpanded
*/
previewExpanded: true,
/**
* Plugin may be safely declared on either a panel.Grid or a Grid View/viewConfig
* @param {Ext.grid.Panel/Ext.view.View} target
*/
setCmp: function(target) {
this.callParent(arguments);
// Resolve grid from view as necessary
var me = this,
grid = me.cmp = target.isXType('gridview') ? target.grid : target,
bodyField = me.bodyField,
hideBodyCls = me.hideBodyCls,
feature = Ext.create('Ext.grid.feature.RowBody', {
grid : grid,
getAdditionalData: function(data, idx, model, rowValues) {
var getAdditionalData = Ext.grid.feature.RowBody.prototype.getAdditionalData,
additionalData = {
rowBody: data[bodyField],
rowBodyCls: grid.getView().previewExpanded ? '' : hideBodyCls
};
if (Ext.isFunction(getAdditionalData)) {
// "this" is the RowBody object hjere. Do not change to "me"
Ext.apply(additionalData, getAdditionalData.apply(this, arguments));
}
return additionalData;
}
}),
initFeature = function(grid, view) {
view.previewExpanded = me.previewExpanded;
// By this point, existing features are already in place, so this must be initialized and added
view.featuresMC.add(feature);
feature.init(grid);
};
// The grid has already created its view
if (grid.view) {
initFeature(grid, grid.view);
}
// At the time a grid creates its plugins, it has not created all the things
// it needs to create its view correctly.
// Process the view and init the RowBody Feature as soon as the view is created.
else {
grid.on({
viewcreated: initFeature,
single: true
});
}
},
/**
* Toggle between the preview being expanded/hidden on all rows
* @param {Boolean} expanded Pass true to expand the record and false to not show the preview.
*/
toggleExpanded: function(expanded) {
var grid = this.getCmp(),
view = grid && grid.getView(),
bufferedRenderer = view.bufferedRenderer,
scrollManager = view.scrollManager;
if (grid && view && expanded !== view.previewExpanded ) {
this.previewExpanded = view.previewExpanded = !!expanded;
view.refreshView();
// If we are using the touch scroller, ensure that the scroller knows about
// the correct scrollable range
if (scrollManager) {
if (bufferedRenderer) {
bufferedRenderer.stretchView(view, bufferedRenderer.getScrollHeight(true));
} else {
scrollManager.refresh(true);
}
}
}
}
});