nextcloud-printer/js/printer.tabview.js

147 lines
3.1 KiB
JavaScript

(function() {
var PrinterTabView = OCA.Files.DetailTabView.extend({
id: 'printerTabView',
className: 'tab printerTabView',
/**
* get label of tab
*/
getLabel: function() {
return t('printer', 'Printer');
},
/**
* get icon of tab
*/
getIcon: function() {
return 'icon-info';
},
/**
* Renders this details view
*
* @abstract
*/
render: function() {
this._renderSelectList(this.$el);
this.delegateEvents({
'change #choose-orientation': '_onChangeEvent'
});
},
_renderSelectList: function($el) {
$el.html('<div class="get-print">'
+ '<select id="choose-orientation">'
+ '<option value="">' + t('printer', 'Choose orientation') + '</option>'
+ '<option value="landscape">Landscape</option>'
+ '<option value="portrait">Portrait</option>'
+ '</select></div>'
);
},
/**
* show tab only on files
*/
canDisplay: function(fileInfo) {
if(fileInfo != null) {
if(!fileInfo.isDirectory()) {
return true;
}
}
return false;
},
/**
* ajax callback for printing file
*/
check: function(fileInfo, orientation) {
// skip call if fileInfo is null
if(null == fileInfo) {
_self.updateDisplay({
response: 'error',
msg: t('printer', 'No fileinfo provided.')
});
return;
}
var url = OC.generateUrl('/apps/printer/printfile'),
data = {source: fileInfo.getFullPath(), orientation: orientation},
_self = this;
$.ajax({
type: 'GET',
url: url,
dataType: 'json',
data: data,
async: true,
success: function(data) {
_self.updateDisplay(data, orientation);
}
});
},
/**
* display message from ajax callback
*/
updateDisplay: function(data, orientation) {
var msg = '';
if('success' == data.response) {
msg = orientation + ': ' + data.msg;
}
if('error' == data.response) {
msg = data.msg;
}
msg += '<br><br><a id="reload-print" class="icon icon-history" style="display:block" href=""></a>';
this.delegateEvents({
'click #reload-print': '_onReloadEvent'
});
this.$el.find('.get-print').html(msg);
},
/**
* changeHandler
*/
_onChangeEvent: function(ev) {
var orientation = $(ev.currentTarget).val();
if(orientation != '') {
this.$el.html('<div style="text-align:center; word-wrap:break-word;" class="get-print"><p><img src="'
+ OC.imagePath('core','loading.gif')
+ '"><br><br></p><p>'
+ t('printer', 'Printing document ...')
+ '</p></div>');
this.check(this.getFileInfo(), orientation);
}
},
_onReloadEvent: function(ev) {
ev.preventDefault();
this._renderSelectList(this.$el);
this.delegateEvents({
'change #choose-orientation': '_onChangeEvent'
});
}
});
OCA.Printer = OCA.Printer || {};
OCA.Printer.PrinterTabView = PrinterTabView;
})();