Ticket #13547: plugin.js

File plugin.js, 7.1 KB (added by datalink, 9 years ago)

pastedupload plugin

Line 
1/*****************************************************************************************
2
3        This plugin opens a little popup after pasting an image.
4        You can set several options that will be set to your upload URL.
5       
6        The upload URL
7                config.imageUploadUrl = 'browser/upload.php?pasted=newfile';
8        is extended to
9                browser/upload.php?pasted=newfile&filepath=' + YourPath + '&imgwidth=' + YourWidth + '&imgheight=' + YourHeight;
10       
11        The filepath, imgwidth and imgheight variables are only examples. Create inputs by your needs.
12       
13        Example upload.php
14        <?PHP
15                if($_GET['pasted'] == 'newfile') {
16                        $filename = rawurldecode($_GET['filename']);
17                        $filepath = rawurldecode($_GET['filepath']);
18                        $imgwidth = $_GET['imgwidth'];
19                        $imgheight = $_GET['imgheight'];
20                        // Your file upload progress
21                        echo json_encode(
22                                array(
23                                        'uploaded' => 1,
24                                        'fileName' => $filename,
25                                        'url' => 'images/'.$filepath.'/'.$filename,
26                                        'attributes' => array(
27                                                'width' => $imgwidth,
28                                                'height' => $imgheight
29                                        )
30                                )
31                        );
32                }
33        ?>
34       
35*****************************************************************************************/
36
37'use strict';
38
39(function()
40{
41        CKEDITOR.plugins.add( 'pastedupload',
42        {
43                requires: 'uploadwidget',
44
45                onLoad : function()
46                {
47                        CKEDITOR.addCss(
48                                '.cke_upload_loaded, .cke_upload_uploading {' +
49                                        'position: static;' +
50                                        'max-width: 100%;' +
51                                '}' +
52                                '.cke_upload_loaded img, .cke_upload_uploading img {' +
53                                        'max-width: 100%;' +
54                                        'opacity: 0.3;' +
55                                '}' +
56                                '.cke_upload_background_cover {' +
57                                        'position: fixed;' +
58                                        'z-index: 9000;' +
59                                        'top: 0px;' +
60                                        'left: 0px;' +
61                                        'background-color: white;' +
62                                        'opacity: 0.5;' +
63                                        'width: 100%;' +
64                                        'height: 100%;' +
65                                '}' +
66                                '.cke_pastedupload_options {' +
67                                        'position: fixed;' +
68                                        'z-index: 9010;' +
69                                        'top: 50%;' +
70                                        'left: 50%;' +
71                                        'transform: translate(-50%, -50%);' +
72                                        'border: 1px solid #bebebe;' +
73                                        'background: #f4f4f4;' +
74                                        'padding: 20px;' +
75                                '}' +
76                                '.cke_pastedupload_options input {' +
77                                        'border: 1px solid #bebebe;' +
78                                        'background: #fff;' +
79                                '}' +
80                                '.cke_pastedupload_options div {' +
81                                        'margin: 4px;' +
82                                '}' +
83                                '#cke_pastedupload_button {' +
84                                        'width: 100%;' +
85                                        'background: #bebebe;' +
86                                        'text-align: center;' +
87                                '}'
88                        );
89                },
90               
91                init: function( editor )
92                {
93                        if ( !CKEDITOR.plugins.clipboard.isFileApiSupported ) {
94                                return;
95                        }
96                       
97                        var popupSource = '<div class="cke_upload_background_cover"></div>' +
98                                '<div class="cke_pastedupload_options">' +
99                                        '<div>Path: <input type="text" id="cke_pastedupload_path" /> px</div>' +
100                                        '<div>Width: <input type="text" id="cke_pastedupload_width" /> px</div>' +
101                                        '<div>Height: <input type="text" id="cke_pastedupload_height" /> px</div>' +
102                                        '<div><input type="button" id="cke_pastedupload_button" value="upload" /></div>' +
103                                '</div>';
104                       
105                        var loadingImage = 'data:image/gif;base64,R0lGODlhDgAOAIAAAAAAAP///yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=';
106                        var optionsPopup;
107                        var imageAttributes = {};
108                        var fileUrl;
109                        var fileTools = CKEDITOR.fileTools;
110                        var uploadUrl = fileTools.getUploadUrl( editor.config, 'image' );
111                        var loaders = {};
112
113                        if ( !uploadUrl ) {
114                                window.console && window.console.log(
115                                        'Error: Upload URL for the Upload Image feature was not defined. ' +
116                                        'For more information see: http://docs.ckeditor.com/#!/guide/dev_file_upload'
117                                );
118                                return;
119                        }
120                       
121                        fileTools.addUploadWidget( editor, 'imagepasted', {
122                                loadMethod: 'load',
123                                parts: {
124                                        img: 'img'
125                                },
126                                onLoaded: function( upload ) {
127                                        this.parts.img.setAttribute( 'src', upload.data );
128                                },
129                                onUploaded: function( upload ) {
130                                        var imgSource = '<img src="' + upload.url + '" ';
131                                        for(var key in imageAttributes) {
132                                                if(key == 'width' || key == 'height') {
133                                                        if(editor.config.image_prefillDimensions) {
134                                                                imgSource += key + '="' + imageAttributes[key] + '" ';
135                                                        }
136                                                }
137                                                else {
138                                                        imgSource += key + '="' + imageAttributes[key] + '" ';
139                                                }
140                                        }
141                                        imgSource += '/>';
142                                       
143                                        this.replaceWith( imgSource );
144                                }
145                        });
146                       
147                        editor.on( 'paste', function( evt ) {
148                                var data = evt.data,
149                                        dataTransfer = data.dataTransfer,
150                                        filesCount = dataTransfer.getFilesCount();
151                               
152                                if ( data.dataValue || !filesCount ) {
153                                        return;
154                                }
155                               
156                                for ( var i = 0; i < filesCount; i++ ) {
157                                        var file = dataTransfer.getFile( i );
158                                       
159                                        if ( fileTools.isTypeSupported( file, /image\/(jpeg|png|gif)/ ) ) {
160                                                var el = new CKEDITOR.dom.element( 'img' );
161                                                el.setAttribute( 'src', loadingImage );
162                                                loaders[i] = editor.uploadRepository.create( file );
163                                               
164                                                if ( el ) {
165                                                        loaders[i].load();
166                                                        fileTools.markElement( el, 'imagepasted', loaders[i].id );
167                                                       
168                                                        data.dataValue += el.getOuterHtml();
169                                                }
170                                        }
171                                }
172                               
173                                if ( !data.dataValue.match( /<img[\s\S]+data:/i ) ) {
174                                        return;
175                                }
176                               
177                                optionsPopup = new CKEDITOR.dom.element( 'div' );
178                                optionsPopup.setAttributes({ 'class': 'cke_reset_all cke_upload_options' });
179                                optionsPopup.setHtml( popupSource );
180                               
181                                CKEDITOR.document.getBody().append( optionsPopup );
182                               
183                                document.getElementById('cke_pastedupload_button').onclick = function() {
184                                        editor.widgets.registered.imagepasted.loadMethod = 'upload';
185                                       
186                                        var filepath = document.getElementById('cke_pastedupload_path').value;
187                                        var imgwidth = document.getElementById('cke_pastedupload_width').value;
188                                        var imgheight = document.getElementById('cke_pastedupload_height').value;
189                                       
190                                        fileUrl = '&filepath=' + encodeURIComponent(filepath);
191                                        fileUrl += '&imgwidth=' + parseInt(imgwidth);
192                                        fileUrl += '&imgheight=' + parseInt(imgheight);
193                                       
194                                        optionsPopup.remove();
195                                       
196                                        for ( var key in loaders ) {
197                                                var filename = loaders[key].fileName;
198                                                fileUrl += '&filename=' + encodeURIComponent(filename);
199                                               
200                                                loaders[key].upload( uploadUrl + fileUrl );
201                                               
202                                                fileTools.bindNotifications( editor, loaders[key] );
203                                        }
204                                }
205                        }, null, null, 11 );
206                       
207                        editor.on( 'fileUploadRequest', function( evt ) {
208                                var fileLoader = evt.data.fileLoader;
209                                var xhr = fileLoader.xhr;
210                               
211                                xhr.open( 'POST', fileLoader.uploadUrl, true );
212                                xhr.setRequestHeader( 'Cache-Control', 'no-cache' );
213                                xhr.setRequestHeader( 'X-File-Name', fileLoader.fileName );
214                                xhr.setRequestHeader( 'X-File-Size', fileLoader.total );
215                               
216                                xhr.send( fileLoader.file );
217                               
218                                evt.stop();
219                        }, null, null, 1 );
220                       
221                        editor.on( 'fileUploadResponse', function( evt ) {
222                                evt.stop();
223                               
224                                var data = evt.data,
225                                        xhr = data.fileLoader.xhr;
226                               
227                                try {
228                                        var response = JSON.parse(xhr.responseText);
229                               
230                                        if ( response.uploaded == 1 ) {
231                                                imageAttributes = response.attributes;
232                                                data.url = response.url;
233                                                if(response.error)
234                                                        alert(response.error.message);
235                                        }
236                                        else {
237                                                if(response.error)
238                                                        data.message = response.error.message;
239                                                evt.cancel();
240                                        }
241                                } catch ( err ) {
242                                        data.message = fileLoader.lang.filetools.responseError;
243                                        window.console && window.console.log( xhr.responseText );
244
245                                        evt.cancel();
246                                }
247                        }, null, null, 1 );
248                }
249        });
250})();
251
© 2003 – 2022, CKSource sp. z o.o. sp.k. All rights reserved. | Terms of use | Privacy policy