PageSourceSearch

https://aussiefloyd.com/ScriptResource.axd?d=xITZJChzBzMbeajX9MIJG…R_WhYyYVhmpWAaN6BvToZ1nn8Kt-GoE1&t=51e37521

js aussiefloyd.com collected 2026-10-02 06:16:22 UTC 21,791 bytes, 609 lines download raw bytes

1// Name:        AjaxFileUpload.AjaxFileUpload.Control.debug.js
2// Assembly:    AjaxControlToolkit
3// Version:     4.1.7.1213
4// FileVersion: 4.1.7.1213
5Type.registerNamespace("Sys.Extended.UI.AjaxFileUpload");
6Type.registerNamespace("AjaxFileUpload");
7
8Sys.Extended.UI.AjaxFileUpload.Control = function (element) {
9
10    Sys.Extended.UI.AjaxFileUpload.Control.initializeBase(this, [element]);
11
12    this._allowedFileTypes = null;
13    this._contextKey = null;
14    this._postBackUrl = null;
15    this._mode = 0;
16    this._serverPollingSupport = false;
17    this._throbber = null;
18    this._maximumNumberOfFiles = 10;
19    this._allowedFileTypes = '';
20    this._chunkSize = 4096;
21    this._storeToAzure = false;
22    this._azureContainerName = '';
23    
24    this._uploadUrl = 'AjaxFileUploadHandler.axd';
25    this._useHtml5Support = false;
26    this._elements = null;
27    this._processor = null;
28    this._filesInQueue = [];
29    this._isUploading = false;
30    this._currentFileId = null;
31    this._currentQueueIndex = 0;
32    this._canceled = false;
33};
34
35Sys.Extended.UI.AjaxFileUpload.Control.prototype = {
36
37    initialize: function () {
38        
39        var utils = new Sys.Extended.UI.AjaxFileUpload.Utils(),
40            
41            id = this.get_id(),
42            
43            getElement = function (name) {
44                return document.getElementById(id + name);
45            },
46            
47            elements = {
48                queueContainer: getElement('_QueueContainer'),
49                selectFileButton: getElement('_SelectFileButton'),
50                uploadOrCancelButton: getElement('_UploadOrCancelButton'),
51                fileStatusContainer: getElement('_FileStatusContainer'),
52                footer: getElement('_Footer')
53            };
54        
55        this._useHtml5Support = utils.checkHtml5BrowserSupport() && this._mode != 2;
56
57        elements.progressBar = getElement('_ProgressBar');
58        elements.progressBarContainer = getElement('_ProgressBarContainer');
59        
60        if (this._useHtml5Support) {
61
62            elements.inputFile = getElement('_Html5InputFile');
63            elements.dropZone = getElement('_Html5DropZone');
64        } else {
65            
66            elements.inputFile = getElement('_InputFileElement');
67        }
68        this._elements = elements;
69
70        var processor = this._useHtml5Support 
71            ? new Sys.Extended.UI.AjaxFileUpload.ProcessorHtml5(this, elements)
72            : new Sys.Extended.UI.AjaxFileUpload.Processor(this, elements);
73
74        this.setDefaultElementsLayout(elements);
75        
76        this.attachEvents(elements);
77        
78        processor.initialize();
79
80        this._processor = processor;
81        Sys.Extended.UI.AjaxFileUpload.Control.callBaseMethod(this, "initialize");
82    },
83
84    dispose: function () {
85        Sys.Extended.UI.AjaxFileUpload.Control.callBaseMethod(this, "dispose");
86    },
87    
88    setDefaultElementsLayout: function (elements) {
89        
90        $common.setVisible(elements.inputFile, true);
91        $common.setVisible(elements.uploadOrCancelButton, false);
92        $common.setVisible(elements.fileStatusContainer, true);
93        
94        elements.selectFileButton.innerHTML = Sys.Extended.UI.Resources.AjaxFileUpload_SelectFile;
95        elements.uploadOrCancelButton.innerHTML = Sys.Extended.UI.Resources.AjaxFileUpload_Upload;
96
97        this.setStatusMessage(Sys.Extended.UI.Resources.AjaxFileUpload_SelectFileToUpload);
98    },
99    
100    attachEvents: function (elements) {
101        this.onUploadOrCancelButtonClicked$delegate = Function.createDelegate(this, this.onUploadOrCancelButtonClickedHandler);
102        $addHandlers(elements.uploadOrCancelButton, { 'click': this.onUploadOrCancelButtonClicked$delegate });
103    },
104    
105    onUploadOrCancelButtonClickedHandler: function (e) {
106        /// <summary>
107        /// Event handler for click event on upload button. Upload button will act as a toggle driven by _isUploading field, for Upload and Cancel action.
108        /// if _isUploading set to true, it indicates that this button will act as Cancel, otherwise is Upload.
109        /// </summary>
110        /// <param name="e"></param>
111        
112        var files = this._filesInQueue;
113        if (!files.length) {
114            alert(Sys.Extended.UI.Resources.AjaxFileUpload_SelectFileToUpload);
115            return;
116        }
117
118        var uploaded = 0;
119        for (var i = 0; i < files.length; i++) {
120            if (files[i]._isUploaded)
121                uploaded++;
122        }
123        
124        if (uploaded == files.length) {
125            alert(Sys.Extended.UI.Resources.AjaxFileUpload_AllFilesUploaded);
126            return;
127        }
128            
129        this.enableControls(this._isUploading);
130        
131        this._isUploading = !this._isUploading;
132        if (this._isUploading) {
133            this._canceled = false;
134            
135            var xhr = new XMLHttpRequest(),
136                self = this;
137            
138            xhr.open("POST", '?contextKey=' + this._contextKey
139                + "&start=1&queue=" + this._filesInQueue.length);
140            xhr.onreadystatechange = function () {
141                if (xhr.readyState == 4) {
142                    if (xhr.status == 200) {
143                        self._processor.startUpload();
144                        self.raiseUploadStart(Sys.Serialization.JavaScriptSerializer.deserialize(xhr.responseText));
145                    } else {
146                        self.raiseUploadError(xhr);
147                        throw "Failed to starting upload.";
148                    }
149                }
150            };
151            xhr.send(null);
152
153        } else {
154            this._canceled = true;
155            this._processor.cancelUpload();
156            
157            for (var i = 0; i < files.length; i++) {
158                if (!files[i]._isUploaded) {
159                    files[i]._isUploading = false;
160                }
161            }
162        }
163    },
164    
165    enableControls: function (enable) {
166        /// <summary>
167        /// If set to true, it will set control state to be enable (ready to upload), 
168        /// otherwise control will disable and button state turns to Cancel button.
169        /// </summary>
170        /// <param name="enable"></param>
171        
172        var btn = this._elements.uploadOrCancelButton;
173        $common.setText(btn, enable ? Sys.Extended.UI.Resources.AjaxFileUpload_Upload : Sys.Extended.UI.Resources.AjaxFileUpload_Cancel);
174        btn.setAttribute('class', enable ? 'ajax__fileupload_uploadbutton' : 'ajax_fileupload_cancelbutton');
175
176        $common.setVisible(this._elements.inputFile, enable);
177        
178        if (this._useHtml5Support) {
179            this._elements.dropZone.disable = !enable;
180            this._elements.inputFile.disable = !enable;
181        }
182    },
183    
184    done: function () {
185        /// <summary>
186        /// Call this method when all files has been uploaded.
187        /// This method will reset states of control.
188        /// </summary>
189        
190        this._isUploading = false;
191        this.enableControls(true);
192        this.setStatusMessage(Sys.Extended.UI.Resources.AjaxFileUpload_AllFilesUploaded + " " + Sys.Extended.UI.Resources.AjaxFileUpload_SelectFileToUpload);
193        $common.setVisible(this._elements.uploadOrCancelButton, false);
194        
195        var xhr = new XMLHttpRequest(),
196            self = this,
197            currentFile = this._filesInQueue[this._currentQueueIndex - 1];
198
199        xhr.open("POST", '?contextKey=' + this._contextKey
200            + "&complete=1&queue=" + this._filesInQueue.length
201            + "&uploaded=" + (this._currentQueueIndex - (currentFile._isUploaded ? 0 : 1))
202            + "&reason=" + (this._canceled ? "cancel" : "done"));
203        
204        xhr.onreadystatechange = function () {
205            if (xhr.readyState == 4) {
206                if (xhr.status == 200) {
207                    self.raiseUploadCompleteAll(Sys.Serialization.JavaScriptSerializer.deserialize(xhr.responseText));
208                } else {
209                    self.raiseUploadError(xhr);
210                    throw "Failed to completing upload.";
211                }
212            }
213        };
214        xhr.send(null);
215       
216        this._filesInQueue = [];
217        this._currentQueueIndex = 0;
218    },
219    
220    removeFileFromQueueHandler: function (e) {
221        /// <summary>
222        /// Event handler of file item when user clicks remove button.
223        /// </summary>
224        /// <param name="e">FileItem to be removed.</param>
225        
226        if (!e || e._isUploading)
227            return;
228        
229        Array.remove(this._filesInQueue, e);
230        
231        e.removeNodeFrom(this._elements.queueContainer);
232        
233        if (!this._elements.queueContainer.hasChildNodes()) {
234            $common.setVisible(this._elements.queueContainer, false);
235            $common.setVisible(this._elements.uploadOrCancelButton, false);
236        }
237
238        this._showFilesCount();
239    },
240    
241    addFileToQueue: function (item) {
242        /// <summary>
243        /// Processor will call this method to add selected file to queue.
244        /// Will return true if file item successfully added, otherwise are false.
245        /// </summary>
246        /// <param name="inputElementValue">Value from input file element</param>
247
248        var max = this.get_maximumNumberOfFiles();
249        if (max > 0 && this._filesInQueue.length >= max) {
250            alert(Sys.Extended.UI.Resources.AjaxFileUpload_MaxNumberOfFilesExceeded);
251            return false;
252        }
253
254        var fileItem = new Sys.Extended.UI.AjaxFileUpload.Item(this.get_id(), item,
255            Function.createDelegate(this, this.removeFileFromQueueHandler));
256        
257        fileItem.appendNodeTo(this._elements.queueContainer);
258
259        fileItem.setStatus('pending', Sys.Extended.UI.Resources.AjaxFileUpload_Pending);
260
261        $common.setVisible(this._elements.queueContainer, true);
262        $common.setVisible(this._elements.uploadOrCancelButton, true);
263
264        this._filesInQueue.push(fileItem);
265        
266        this._showFilesCount();
267
268        return true;
269    },
270    
271    _showFilesCount: function () {
272        /// <summary>
273        /// This will show number of files in queue or message to select file(s) when there is no file in queue.
274        /// </summary>
275        
276        var empty = (this._filesInQueue.length == 0);
277        
278        this.setStatusMessage(empty 
279            ? Sys.Extended.UI.Resources.AjaxFileUpload_SelectFileToUpload
280            : String.format(Sys.Extended.UI.Resources.AjaxFileUpload_FileInQueue, this._filesInQueue.length.toString()));
281    },
282    
283        
284    fileTypeIsValid: function (fileType) {
285        /// <summary>
286        /// Check whether file type is allowed to be uploaded by checking it against <code>AllowedFileTypes</code> property
287        /// </summary>
288        /// <param name="fileType"></param>
289        /// <returns type=""></returns>
290        
291        if (!this._allowedFileTypes)
292            return true;
293        
294        var allowedFileTypes = this._allowedFileTypes.split(',');
295
296        for (var i = 0; i < allowedFileTypes.length; i++) {
297            var ftype = allowedFileTypes[i];
298            if (fileType.toLocaleLowerCase() == ftype.toLocaleLowerCase())
299                return true;
300        }
301
302        return false;
303    },
304    
305    confirmFileIsInvalid: function (fileItem) {
306        /// <summary>
307        /// Send alert to user that file type is not acceptable. Processor uses this method after validation.
308        /// </summary>
309        /// <param name="fileItem"></param>
310        
311        var utils = new Sys.Extended.UI.AjaxFileUpload.Utils();
312        alert(String.format(Sys.Extended.UI.Resources.AjaxFileUpload_WrongFileType, utils.getFileName(fileItem.value), fileItem.type));
313    },
314    
315    doneAndUploadNextFile: function (fileItem) {
316        /// <summary>
317        /// Mark fileItem as uploaded, and upload next file in queue.
318        /// </summary>
319        /// <param name="fileItem">Uploaded File</param>
320        
321        var xhr = new XMLHttpRequest(),
322            self = this;
323        
324        xhr.open("POST", "?contextKey="+ this._contextKey +"&done=1&guid=" + fileItem._id, true);
325        xhr.onreadystatechange = function (e) {
326            if (xhr.readyState == 4) {
327                if (xhr.status == 200) {
328
329                    self.raiseUploadComplete(Sys.Serialization.JavaScriptSerializer.deserialize(xhr.responseText));
330
331                    self._processor.startUpload();
332
333                } else {
334                    self.setFileStatus(fileItem, 'error', Sys.Extended.UI.Resources.AjaxFileUpload_error);
335                    self.raiseUploadError(xhr);
336                    throw "error raising upload complete event and start new upload";
337                }
338            }
339        };
340        xhr.send(null);
341    },
342    
343    cancelUpload: function () {
344        
345        var fileItem = this.getCurrentFileItem();
346        
347        fileItem._isUploaded = false;
348        fileItem._isUploading = false;
349        
350        this.setStatusMessage(Sys.Extended.UI.Resources.AjaxFileUpload_UploadCanceled);
351        
352        for (var i = 0; i < this._filesInQueue.length; i++) {
353            var file = this._filesInQueue[i];
354            if (!file._isUploaded) {
355                this.setFileStatus(file, 'cancelled', Sys.Extended.UI.Resources.AjaxFileUpload_Canceled);
356            }
357        }
358    },
359    
360    setAsUploading: function (fileItem) {
361        /// <summary>
362        /// Set file item status is uploading.
363        /// </summary>
364        /// <param name="fileItem"></param>
365        
366        fileItem._isUploading = true;
367        fileItem._isUploaded = false;
368
369        this._currentQueueIndex = Array.indexOf(this._filesInQueue, fileItem) + 1;
370
371        this.setFileStatus(fileItem, 'uploading', Sys.Extended.UI.Resources.AjaxFileUpload_Uploading);
372        this.setStatusMessage('Uploading ' + this._currentQueueIndex + ' of ' + this._filesInQueue.length + ' file(s)');
373    },
374    
375    setFileStatus: function (fileItem, fileStatusText, text) {
376        /// <summary>
377        /// Set file item status
378        /// </summary>
379        /// <param name="fileItem">file item or id</param>
380        /// <param name="fileStatusText">status text</param>
381        /// <param name="text">status resource</param>
382
383        if (typeof (fileItem) === "string")
384            fileItem = this.getFileItem(fileItem);
385        if (fileItem)
386            fileItem.setStatus(fileStatusText, text);
387    },
388    
389    setStatusMessage: function (msg) {
390        /// <summary>
391        /// Set status message.
392        /// </summary>
393        /// <param name="msg"></param>
394        this._elements.fileStatusContainer.innerHTML = msg;
395    },
396    
397    setPercent: function (percent) {
398        /// <summary>
399        /// Set percentage of progress bar.
400        /// </summary>
401        /// <param name="percent">percentage</param>
402        var progressBar = this._elements.progressBar;
403        if (percent <= 0)
404            percent = "0";
405        else if (percent >= 100)
406            percent = "100";
407
408        progressBar.style.width = percent + '%';
409        $common.setText(progressBar, String.format(Sys.Extended.UI.Resources.AjaxFileUpload_UploadedPercentage, percent));
410    },
411
412    get_allowedFileTypes: function () {
413        return this._allowedFileTypes;
414    },
415    set_allowedFileTypes: function (value) {
416        this._allowedFileTypes = value;
417    },
418
419    get_contextKey: function () {
420        return this._contextKey;
421    },
422    set_contextKey: function (value) {
423        this._contextKey = value;
424    },
425
426    get_postBackUrl: function () {
427        return this._postBackUrl;
428    },
429    set_postBackUrl: function (value) {
430        this._postBackUrl = value;
431    },
432    
433    get_mode: function () {
434        return this._mode;
435    },
436    set_mode: function (value) {
437        this._mode = value;
438    },
439    
440    get_serverPollingSupport: function () {
441        return this._serverPollingSupport;
442    },
443    set_serverPollingSupport: function (value) {
444        this._serverPollingSupport = value;
445    },
446
447    get_throbber: function () {
448        return this._throbber;
449    },
450    set_throbber: function (value) {
451        this._throbber = value;
452    },
453
454    get_maximumNumberOfFiles: function () {
455        return this._maximumNumberOfFiles;
456    },
457    set_maximumNumberOfFiles: function (value) {
458        this._maximumNumberOfFiles = value;
459    },
460    
461    get_chunkSize: function () {
462        return this._chunkSize;
463    },
464    set_chunkSize: function (value) {
465        this._chunkSize = value;
466    },
467    
468    get_storeToAzure: function () {
469        return this._storeToAzure;
470    },
471    set_storeToAzure: function (value) {
472        this._storeToAzure = value;
473    },
474    
475    get_azureContainerName: function () {
476        return this._azureContainerName;
477    },
478    set_azureContainerName: function (value) {
479        this._azureContainerName = value;
480    },
481    
482    add_uploadStart: function (handler) {
483        this.get_events().addHandler("uploadStart", handler);
484    },
485    remove_uploadStart: function (handler) {
486        this.get_events().removeHandler("uploadStart", handler);
487    },
488
489    add_uploadComplete: function (handler) {
490        this.get_events().addHandler("uploadComplete", handler);
491    },
492    remove_uploadComplete: function (handler) {
493        this.get_events().removeHandler("uploadComplete", handler);
494    },
495    
496    add_uploadCompleteAll: function (handler) {
497        this.get_events().addHandler("uploadCompleteAll", handler);
498    },
499    remove_uploadCompleteAll: function (handler) {
500        this.get_events().removeHandler("uploadCompleteAll", handler);
501    },
502
503    raiseUploadStart: function(e) {
504        var eh = this.get_events().getHandler("uploadStart");
505        if (eh) {
506            var eventArgs = new Sys.Extended.UI.AjaxFileUploadStartEventArgs(e.FilesInQueue, e.ServerArguments);
507            eh(this, eventArgs);
508        }
509    },
510
511    raiseUploadComplete: function (e) {
512        /// <summary>
513        /// This method called once file is succesfully uploaded.
514        /// </summary>
515        /// <param name="e">Uploaded file information</param>
516
517        var fileItem = this.getCurrentFileItem();
518        
519        if (!fileItem || !e || e.FileId !== fileItem._id)
520            throw "Invalid finalizing upload server response.";
521
522        this.setFileStatus(fileItem, 'uploaded', Sys.Extended.UI.Resources.AjaxFileUpload_Uploaded);
523        this.setStatusMessage('Uploaded ' + this._currentQueueIndex + ' of ' + this._filesInQueue.length + ' file(s)');
524        
525        fileItem._isUploaded = true;
526        fileItem._isUploading = false;
527        fileItem.hide();
528
529        var eh = this.get_events().getHandler("uploadComplete");
530        if (eh) {
531            var fileIndex = Array.indexOf(this._filesInQueue, fileItem),
532                eventArgs = new Sys.Extended.UI.AjaxFileUploadEventArgs(e.FileId, "Success", e.FileName,
533                e.FileSize, e.ContentType,
534                e.PostedUrl, fileIndex,
535                this._filesInQueue.length);
536            eh(this, eventArgs);
537        }
538    },
539    
540    raiseUploadCompleteAll: function(e) {
541        var eh = this.get_events().getHandler("uploadCompleteAll");
542        if (eh) {
543            var eventArgs = new Sys.Extended.UI.AjaxFileUploadCompleteAllEventArgs(e.FilesInQueue, e.FilesUploaded, e.Reason, e.ServerArguments);
544            eh(this, eventArgs);
545        }
546    },
547    
548    add_uploadError: function (handler) {
549        this.get_events().addHandler("uploadError", handler);
550    },
551    remove_uploadError: function (handler) {
552        this.get_events().removeHandler("uploadError", handler);
553    },
554    raiseUploadError: function (e) {
555
556        var eh = this.get_events().getHandler("uploadError");
557        if (eh) {
558            eh(this, e);
559        }
560
561        this._canceled = false;
562        this._isUploading = false;
563        this.enableControls(true);
564    },
565    
566    getCurrentFileItem: function () {
567        /// <summary>
568        /// Get file item based on current file id.
569        /// </summary>
570        /// <returns type=""></returns>
571        return this.getFileItem(this._currentFileId);
572    },
573    
574    getNextFile: function () {
575        /// <summary>
576        /// Get next file in queue for upload.
577        /// </summary>
578        /// <returns type="">Will returns null if all files has been uploaded.</returns>
579        if (!this._isUploading)
580            return null;
581
582        for (var i = 0; i < this._filesInQueue.length; i++) {
583            var file = this._filesInQueue[i];
584            if (!file._isUploaded) {
585                return file;
586            }
587        }
588
589        return null;
590    },
591
592    getFileItem: function (id) {
593        /// <summary>
594        /// Get file item based on id.
595        /// </summary>
596        /// <param name="id">id of file item to find.</param>
597        /// <returns type="">File Item</returns>
598        for (var i = 0; i < this._filesInQueue.length; i++) {
599            var file = this._filesInQueue[i];
600            if (file._id === id) {
601                return file;
602            }
603        }
604
605        return null;
606    }
607};
608
609Sys.Extended.UI.AjaxFileUpload.Control.registerClass("Sys.Extended.UI.AjaxFileUpload.Control", Sys.Extended.UI.ControlBase);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.