diff --git a/importexport/inc/class.importexport_export_ui.inc.php b/importexport/inc/class.importexport_export_ui.inc.php index 16c7aaf9c7..4f3a382b73 100644 --- a/importexport/inc/class.importexport_export_ui.inc.php +++ b/importexport/inc/class.importexport_export_ui.inc.php @@ -363,7 +363,7 @@ class importexport_export_ui { { $link_query['filename'] = $plugin_filename; } - $response->redirect( $GLOBALS['egw']->link('/index.php',$link_query),true); + $response->apply('app.importexport.download', [$GLOBALS['egw']->link('/index.php',$link_query)]); Framework::window_close(); return; } diff --git a/importexport/js/app.js b/importexport/js/app.js index de956a3a59..76d640944f 100644 --- a/importexport/js/app.js +++ b/importexport/js/app.js @@ -1,3 +1,4 @@ +"use strict"; /** * EGroupware - Import/Export - Javascript UI * @@ -8,165 +9,173 @@ * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @version $Id$ */ - +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +require("jquery"); +require("jqueryui"); +require("../jsapi/egw_global"); +require("../etemplate/et2_types"); +var egw_app_1 = require("../../api/js/jsapi/egw_app"); /** * JS for Import/Export * * @augments AppJS */ -app.classes.importexport = AppJS.extend( -{ - appname: 'importexport', - - /** - * Constructor - * - * @memberOf app.timesheet - */ - init: function() - { - // call parent - this._super.apply(this, arguments); - }, - - /** - * Destructor - */ - destroy: function() - { - // call parent - this._super.apply(this, arguments); - }, - - /** - * This function is called when the etemplate2 object is loaded - * and ready. If you must store a reference to the et2 object, - * make sure to clean it up in destroy(). - * - * @param et2 etemplate2 Newly ready object - */ - et2_ready: function(et2) - { - // call parent - this._super.apply(this, arguments); - - if(this.et2.getWidgetById('export')) - { - if(!this.et2.getArrayMgr("content").getEntry("definition")) - { - // et2 doesn't understand a disabled button in the normal sense - jQuery(this.et2.getWidgetById('export').getDOMNode()).attr('disabled','disabled'); - jQuery(this.et2.getWidgetById('preview').getDOMNode()).attr('disabled','disabled'); - } - if(!this.et2.getArrayMgr("content").getEntry("filter")) - { - jQuery('input[value="filter"]').parent().hide(); - } - - // Disable / hide definition filter if not selected - if(this.et2.getArrayMgr("content").getEntry("selection") != 'filter') - { - jQuery('div.filters').hide(); - } - } - }, - - export_preview: function(event, widget) - { - var preview = jQuery(widget.getRoot().getWidgetById('preview_box').getDOMNode()); - jQuery('.content',preview).empty() - .append('
'); - - preview - .show(100, jQuery.proxy(function() { - widget.clicked = true; - widget.getInstanceManager().submit(false, true); - widget.clicked = false; - },this)); - return false; - }, - - import_preview: function(event, widget) - { - var test = widget.getRoot().getWidgetById('dry-run'); - if(test.getValue() == test.options.unselected_value) return true; - - // Show preview - var preview = jQuery(widget.getRoot().getWidgetById('preview_box').getDOMNode()); - jQuery('.content',preview).empty(); - preview - .addClass('loading') - .show(100, jQuery.proxy(function() { - widget.clicked = true; - widget.getInstanceManager().submit(false, true); - widget.clicked = false; - jQuery(widget.getRoot().getWidgetById('preview_box').getDOMNode()) - .removeClass('loading'); - },this)); - return false; - }, - - /** - * Open a popup to run a given definition - * - * @param {egwAction} action - * @param {egwActionObject[]} selected - */ - run_definition: function(action, selected) - { - if(!selected || selected.length != 1) return; - - var id = selected[0].id||null; - var data = egw.dataGetUIDdata(id).data; - if(!data || !data.type) return; - - egw.open_link(egw.link('/index.php',{ - menuaction: 'importexport.importexport_' + data.type + '_ui.' + data.type + '_dialog', - appname: data.application, - definition: data.definition_id - }), false, '850x440', app); - }, - - /** - * Allowed users widget has been changed, if 'All users' or 'Just me' - * was selected, turn off any other options. - */ - allowed_users_change: function(node, widget) - { - var value = widget.getValue(); - - // Only 1 selected, no checking needed - if(value == null || value.length <= 1) return; - - // Don't jump it to the top, it's weird - widget.selected_first = false; - - var index = null; - var specials = ['','all'] - for(var i = 0; i < specials.length; i++) - { - var special = specials[i]; - if((index = value.indexOf(special)) >= 0) - { - if(window.event.target.value == special) - { - // Just clicked all/private, clear the others - value = [special]; - } - else - { - // Just added another, clear special - value.splice(index,1); - } - - // A little highlight to call attention to the change - jQuery('input[value="'+special+'"]',node).parent().parent().effect('highlight',{},500); - break; - } - } - if(index >= 0) - { - widget.set_value(value); - } - } -}); \ No newline at end of file +var ImportExportApp = /** @class */ (function (_super) { + __extends(ImportExportApp, _super); + /** + * Constructor + * + * @memberOf app.infolog + */ + function ImportExportApp() { + // call parent + return _super.call(this, 'importexport') || this; + } + /** + * Destructor + */ + ImportExportApp.prototype.destroy = function (_app) { + // call parent + _super.prototype.destroy.call(this, _app); + }; + /** + * This function is called when the etemplate2 object is loaded + * and ready. If you must store a reference to the et2 object, + * make sure to clean it up in destroy(). + * + * @param {etemplate2} _et2 newly ready object + * @param {string} _name template name + */ + ImportExportApp.prototype.et2_ready = function (_et2, _name) { + // call parent + _super.prototype.et2_ready.call(this, _et2, _name); + if (this.et2.getWidgetById('export')) { + if (!this.et2.getArrayMgr("content").getEntry("definition")) { + // et2 doesn't understand a disabled button in the normal sense + jQuery(this.et2.getDOMWidgetById('export').getDOMNode()).attr('disabled', 'disabled'); + jQuery(this.et2.getDOMWidgetById('preview').getDOMNode()).attr('disabled', 'disabled'); + } + if (!this.et2.getArrayMgr("content").getEntry("filter")) { + jQuery('input[value="filter"]').parent().hide(); + } + // Disable / hide definition filter if not selected + if (this.et2.getArrayMgr("content").getEntry("selection") != 'filter') { + jQuery('div.filters').hide(); + } + } + }; + /** + * Callback to download the file without destroying the etemplate request + * + * @param data URL to get the export file + */ + ImportExportApp.prototype.download = function (data) { + // Try to get the file to download in the parent window + var app_templates = this.egw.top.etemplate2.getByApplication(framework.activeApp); + if (app_templates.length > 0) { + app_templates[0].download(data); + } + else { + // Couldn't download in opener, download here before popup closes + this.et2.getInstanceManager().download(data); + } + }; + ImportExportApp.prototype.export_preview = function (event, widget) { + var preview = jQuery(widget.getRoot().getWidgetById('preview_box').getDOMNode()); + jQuery('.content', preview).empty() + .append('
'); + preview + .show(100, jQuery.proxy(function () { + widget.clicked = true; + widget.getInstanceManager().submit(false, true); + widget.clicked = false; + }, this)); + return false; + }; + ImportExportApp.prototype.import_preview = function (event, widget) { + var test = widget.getRoot().getWidgetById('dry-run'); + if (test.getValue() == test.options.unselected_value) + return true; + // Show preview + var preview = jQuery(widget.getRoot().getWidgetById('preview_box').getDOMNode()); + jQuery('.content', preview).empty(); + preview + .addClass('loading') + .show(100, jQuery.proxy(function () { + widget.clicked = true; + widget.getInstanceManager().submit(false, true); + widget.clicked = false; + jQuery(widget.getRoot().getWidgetById('preview_box').getDOMNode()) + .removeClass('loading'); + }, this)); + return false; + }; + /** + * Open a popup to run a given definition + * + * @param {egwAction} action + * @param {egwActionObject[]} selected + */ + ImportExportApp.prototype.run_definition = function (action, selected) { + if (!selected || selected.length != 1) + return; + var id = selected[0].id || null; + var data = egw.dataGetUIDdata(id).data; + if (!data || !data.type) + return; + egw.open_link(egw.link('/index.php', { + menuaction: 'importexport.importexport_' + data.type + '_ui.' + data.type + '_dialog', + appname: data.application, + definition: data.definition_id + }), "", '850x440', data.application); + }; + /** + * Allowed users widget has been changed, if 'All users' or 'Just me' + * was selected, turn off any other options. + */ + ImportExportApp.prototype.allowed_users_change = function (node, widget) { + var value = widget.getValue(); + // Only 1 selected, no checking needed + if (value == null || value.length <= 1) + return; + // Don't jump it to the top, it's weird + widget.selected_first = false; + var index = null; + var specials = ['', 'all']; + for (var i = 0; i < specials.length; i++) { + var special = specials[i]; + if ((index = value.indexOf(special)) >= 0) { + if (window.event.target.value == special) { + // Just clicked all/private, clear the others + value = [special]; + } + else { + // Just added another, clear special + value.splice(index, 1); + } + // A little highlight to call attention to the change + jQuery('input[value="' + special + '"]', node).parent().parent().effect('highlight', {}, 500); + break; + } + } + if (index >= 0) { + widget.set_value(value); + } + }; + return ImportExportApp; +}(egw_app_1.EgwApp)); +app.classes.importexport = ImportExportApp; +//# sourceMappingURL=app.js.map \ No newline at end of file diff --git a/importexport/js/app.ts b/importexport/js/app.ts new file mode 100644 index 0000000000..888a79c406 --- /dev/null +++ b/importexport/js/app.ts @@ -0,0 +1,201 @@ +/** + * EGroupware - Import/Export - Javascript UI + * + * @link http://www.egroupware.org + * @package importexport + * @author Nathan Gray + * @copyright (c) 2013 Nathan Gray + * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License + * @version $Id$ + */ + + +import 'jquery'; +import 'jqueryui'; +import '../jsapi/egw_global'; +import '../etemplate/et2_types'; + +import {EgwApp} from '../../api/js/jsapi/egw_app'; + +/** + * JS for Import/Export + * + * @augments AppJS + */ +class ImportExportApp extends EgwApp +{ + /** + * Constructor + * + * @memberOf app.infolog + */ + constructor() + { + // call parent + super('importexport'); + } + + /** + * Destructor + */ + destroy(_app) + { + // call parent + super.destroy(_app); + } + + /** + * This function is called when the etemplate2 object is loaded + * and ready. If you must store a reference to the et2 object, + * make sure to clean it up in destroy(). + * + * @param {etemplate2} _et2 newly ready object + * @param {string} _name template name + */ + et2_ready(_et2, _name) + { + // call parent + super.et2_ready(_et2, _name); + + if(this.et2.getWidgetById('export')) + { + if(!this.et2.getArrayMgr("content").getEntry("definition")) + { + // et2 doesn't understand a disabled button in the normal sense + jQuery(this.et2.getDOMWidgetById('export').getDOMNode()).attr('disabled','disabled'); + jQuery(this.et2.getDOMWidgetById('preview').getDOMNode()).attr('disabled','disabled'); + } + if(!this.et2.getArrayMgr("content").getEntry("filter")) + { + jQuery('input[value="filter"]').parent().hide(); + } + + // Disable / hide definition filter if not selected + if(this.et2.getArrayMgr("content").getEntry("selection") != 'filter') + { + jQuery('div.filters').hide(); + } + } + } + + /** + * Callback to download the file without destroying the etemplate request + * + * @param data URL to get the export file + */ + download(data:string) + { + // Try to get the file to download in the parent window + let app_templates = this.egw.top.etemplate2.getByApplication(framework.activeApp); + if(app_templates.length > 0) + { + app_templates[0].download(data); + } + else + { + // Couldn't download in opener, download here before popup closes + this.et2.getInstanceManager().download(data); + } + } + + export_preview(event, widget) + { + var preview = jQuery(widget.getRoot().getWidgetById('preview_box').getDOMNode()); + jQuery('.content',preview).empty() + .append('
'); + + preview + .show(100, jQuery.proxy(function() { + widget.clicked = true; + widget.getInstanceManager().submit(false, true); + widget.clicked = false; + },this)); + return false; + } + + import_preview(event, widget) + { + var test = widget.getRoot().getWidgetById('dry-run'); + if(test.getValue() == test.options.unselected_value) return true; + + // Show preview + var preview = jQuery(widget.getRoot().getWidgetById('preview_box').getDOMNode()); + jQuery('.content',preview).empty(); + preview + .addClass('loading') + .show(100, jQuery.proxy(function() { + widget.clicked = true; + widget.getInstanceManager().submit(false, true); + widget.clicked = false; + jQuery(widget.getRoot().getWidgetById('preview_box').getDOMNode()) + .removeClass('loading'); + },this)); + return false; + } + + /** + * Open a popup to run a given definition + * + * @param {egwAction} action + * @param {egwActionObject[]} selected + */ + run_definition(action, selected) + { + if(!selected || selected.length != 1) return; + + var id = selected[0].id||null; + var data = egw.dataGetUIDdata(id).data; + if(!data || !data.type) return; + + egw.open_link(egw.link('/index.php',{ + menuaction: 'importexport.importexport_' + data.type + '_ui.' + data.type + '_dialog', + appname: data.application, + definition: data.definition_id + }), "", '850x440', data.application); + } + + /** + * Allowed users widget has been changed, if 'All users' or 'Just me' + * was selected, turn off any other options. + */ + allowed_users_change(node, widget) + { + var value = widget.getValue(); + + // Only 1 selected, no checking needed + if(value == null || value.length <= 1) return; + + // Don't jump it to the top, it's weird + widget.selected_first = false; + + var index = null; + var specials = ['','all'] + for(var i = 0; i < specials.length; i++) + { + var special = specials[i]; + if((index = value.indexOf(special)) >= 0) + { + if(window.event.target.value == special) + { + // Just clicked all/private, clear the others + value = [special]; + } + else + { + // Just added another, clear special + value.splice(index,1); + } + + // A little highlight to call attention to the change + jQuery('input[value="'+special+'"]',node).parent().parent().effect('highlight',{},500); + break; + } + } + if(index >= 0) + { + widget.set_value(value); + } + } +} + +app.classes.importexport = ImportExportApp;