You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.7 KiB
JavaScript
111 lines
3.7 KiB
JavaScript
3 years ago
|
/**
|
||
|
* @class Ext.ux.Exporter.Button
|
||
|
* @extends Ext.Component
|
||
|
* @author Nige White, with modifications from Ed Spencer, with modifications from iwiznia.
|
||
|
* Specialised Button class that allows downloading of data via data: urls.
|
||
|
* Internally, this is just a link.
|
||
|
* Pass it either an Ext.Component subclass with a 'store' property, or just a store or nothing and it will try to grab the first parent of this button that is a grid or tree panel:
|
||
|
* new Ext.ux.Exporter.Button({component: someGrid});
|
||
|
* new Ext.ux.Exporter.Button({store: someStore});
|
||
|
* @cfg {Ext.Component} component The component the store is bound to
|
||
|
* @cfg {Ext.data.Store} store The store to export (alternatively, pass a component with a getStore method)
|
||
|
*/
|
||
|
(function(){
|
||
|
var scripts = document.getElementsByTagName('script'),
|
||
|
host = window.location.hostname,
|
||
|
path, i, ln, scriptSrc, match;
|
||
|
|
||
|
for (i = 0, ln = scripts.length; i < ln; i++) {
|
||
|
scriptSrc = scripts[i].src;
|
||
|
|
||
|
match = scriptSrc.match(/export-all\.js$/);
|
||
|
|
||
|
if (match) {
|
||
|
path = scriptSrc.substring(0, scriptSrc.length - match[0].length);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
})()
|
||
|
Ext.define("Ext.ux.exporter.Button", {
|
||
|
extend: "Ext.Component",
|
||
|
//extend:'Ext.button.Button',
|
||
|
alias: "widget.exporterbutton",
|
||
|
text:'导出',
|
||
|
html: '<p></p>',
|
||
|
config: {
|
||
|
swfPath: '/downloadify.swf',
|
||
|
downloadImage: '/download.png',
|
||
|
width: 62,
|
||
|
height: 22,
|
||
|
downloadName: "Excel导出"
|
||
|
},
|
||
|
|
||
|
constructor: function(config) {
|
||
|
config = config || {};
|
||
|
|
||
|
|
||
|
|
||
|
this.initConfig();
|
||
|
Ext.ux.exporter.Button.superclass.constructor.call(this, config);
|
||
|
|
||
|
var self = this;
|
||
|
this.on("afterrender", function() { // We wait for the combo to be rendered, so we can look up to grab the component containing it
|
||
|
self.setComponent(self.store || self.component || self.up("gridpanel") || self.up("treepanel"), config);
|
||
|
});
|
||
|
},
|
||
|
|
||
|
reconfig: function(config) {
|
||
|
this.constructor(config);
|
||
|
},
|
||
|
setComponent: function(component, config) {
|
||
|
|
||
|
this.component = component;
|
||
|
this.store = !component.is ? component : component.getStore(); // only components or stores, if it doesn't respond to is method, it's a store
|
||
|
config.component=this.component;
|
||
|
config.store=this.store;
|
||
|
this.setDownloadify(config);
|
||
|
},
|
||
|
/**
|
||
|
* 获取当前项目路径
|
||
|
*/
|
||
|
getRelPath:function(){
|
||
|
var scripts = document.getElementsByTagName('script'),
|
||
|
host = window.location.hostname,
|
||
|
path, i, ln, scriptSrc, match;
|
||
|
|
||
|
for (i = 0, ln = scripts.length; i < ln; i++) {
|
||
|
scriptSrc = scripts[i].src;
|
||
|
|
||
|
match = scriptSrc.match(/export-all\.js$/);
|
||
|
|
||
|
if (match) {
|
||
|
path = scriptSrc.substring(0, scriptSrc.length - match[0].length);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
return path;
|
||
|
},
|
||
|
|
||
|
setDownloadify: function(config) {
|
||
|
var self = this;
|
||
|
Downloadify.create(this.el.down('p').id,{
|
||
|
filename: function() {
|
||
|
return self.getDownloadName() + "." + Ext.ux.exporter.Exporter.getFormatterByName(self.formatter).extension;
|
||
|
},
|
||
|
data: function() {
|
||
|
return Ext.ux.exporter.Exporter.exportAny(self.component, self.formatter, config);
|
||
|
},
|
||
|
transparent: false,
|
||
|
|
||
|
//lanjs this.getRelPath()
|
||
|
swf: this.getRelPath()+this.getSwfPath(),
|
||
|
downloadImage: this.getRelPath()+this.getDownloadImage(),
|
||
|
|
||
|
width: this.getWidth(),
|
||
|
height: this.getHeight(),
|
||
|
transparent: true,
|
||
|
append: false
|
||
|
});
|
||
|
}
|
||
|
});
|