| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 | <!DOCTYPE html><html><head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <title>The source code</title>  <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />  <script type="text/javascript" src="../resources/prettify/prettify.js"></script>  <style type="text/css">    .highlight { display: block; background-color: #ddd; }  </style>  <script type="text/javascript">    function highlight() {      document.getElementById(location.hash.replace(/#/, "")).className = "highlight";    }  </script></head><body onload="prettyPrint(); highlight();">  <pre class="prettyprint lang-js"><span id='Ext-draw-engine-ImageExporter'>/**</span> * Exports a {@link Ext.draw.Surface Surface} to an image. To do this, * the svg string must be sent to a remote server and processed. * * # Sending the data * * A post request is made to the URL. The following fields are sent: * * + width: The width of the image * + height: The height of the image * + type: The image type to save as, see {@link #supportedTypes} * + svg: The svg string for the surface * * # The response * * It is expected that the user will be prompted with an image download. * As such, the following options should be set on the server: * * + Content-Disposition: 'attachment, filename="chart.png"' * + Content-Type: 'image/png' * * **Important**: By default, chart data is sent to a server operated * by Sencha to do data processing. You may change this default by * setting the {@link #defaultUrl} of this class. */Ext.define('Ext.draw.engine.ImageExporter', {    singleton: true,<span id='Ext-draw-engine-ImageExporter-property-defaultUrl'>    /**</span>     * @property {String} [defaultUrl="http://svg.sencha.io"]     * The default URL to submit the form request.     */    defaultUrl: 'http://svg.sencha.io',<span id='Ext-draw-engine-ImageExporter-property-supportedTypes'>    /**</span>     * @property {Array} [supportedTypes=["image/png", "image/jpeg"]]     * A list of export types supported by the server     */    supportedTypes: ['image/png', 'image/jpeg'],<span id='Ext-draw-engine-ImageExporter-property-widthParam'>    /**</span>     * @property {String} [widthParam="width"]     * The name of the width parameter to be sent to the server.     * The Sencha IO server expects it to be the default value.     */    widthParam: 'width',<span id='Ext-draw-engine-ImageExporter-property-heightParam'>    /**</span>     * @property {String} [heightParam="height"]     * The name of the height parameter to be sent to the server.     * The Sencha IO server expects it to be the default value.     */    heightParam: 'height',<span id='Ext-draw-engine-ImageExporter-property-typeParam'>    /**</span>     * @property {String} [typeParam="type"]     * The name of the type parameter to be sent to the server.     * The Sencha IO server expects it to be the default value.     */    typeParam: 'type',<span id='Ext-draw-engine-ImageExporter-property-svgParam'>    /**</span>     * @property {String} [svgParam="svg"]     * The name of the svg parameter to be sent to the server.     * The Sencha IO server expects it to be the default value.     */    svgParam: 'svg',    formCls: Ext.baseCSSPrefix + 'hide-display',<span id='Ext-draw-engine-ImageExporter-method-generate'>    /**</span>     * Exports the surface to an image     * @param {Ext.draw.Surface} surface The surface to export     * @param {Object} [config] The following config options are supported:     *     * @param {Number} config.width A width to send to the server to for     * configuring the image height     *     * @param {Number} config.height A height to send to the server for     * configuring the image height     *     * @param {String} config.url The url to post the data to. Defaults to     * the {@link #defaultUrl} configuration on the class.     *     * @param {String} config.type The type of image to export. See the     * {@link #supportedTypes}     *     * @param {String} config.widthParam The name of the width parameter to send     * to the server. Defaults to {@link #widthParam}     *     * @param {String} config.heightParam The name of the height parameter to send     * to the server. Defaults to {@link #heightParam}     *     * @param {String} config.typeParam The name of the type parameter to send     * to the server. Defaults to {@link #typeParam}     *     * @param {String} config.svgParam The name of the svg parameter to send     * to the server. Defaults to {@link #svgParam}     *     * @return {Boolean} True if the surface was successfully sent to the server.     */    generate: function(surface, config) {        config = config || {};        var me = this,            type = config.type,            form;        if (Ext.Array.indexOf(me.supportedTypes, type) === -1) {            return false;        }        form = Ext.getBody().createChild({            tag: 'form',            method: 'POST',            action: config.url || me.defaultUrl,            cls: me.formCls,            children: [{                tag: 'input',                type: 'hidden',                name: config.widthParam || me.widthParam,                value: config.width || surface.width            }, {                tag: 'input',                type: 'hidden',                name: config.heightParam || me.heightParam,                value: config.height || surface.height            }, {                tag: 'input',                type: 'hidden',                name: config.typeParam || me.typeParam,                value: type            }, {                tag: 'input',                type: 'hidden',                name: config.svgParam || me.svgParam            }]        });        // Assign the data on the value so it doesn't get messed up in the html insertion        form.last(null, true).value = Ext.draw.engine.SvgExporter.generate(surface);        form.dom.submit();        form.remove();        return true;    }});</pre></body></html>
 |