Вход Регистрация
Файл: tyde/www/web/js/components/upload.js
Строк: 278
<?php
/*! UIkit 2.24.3 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
(function(addon) {

    var 
component;

    if (
window.UIkit) {
        
component addon(UIkit);
    }

    if (
typeof define == "function" && define.amd) {
        
define("uikit-upload", ["uikit"], function(){
            return 
component || addon(UIkit);
        });
    }

})(function(
UI){

    
"use strict";

    
UI.component('uploadSelect', {

        
init: function() {

            var 
$this this;

            
this.on("change", function() {
                
xhrupload($this.element[0].files$this.options);
                var 
twin $this.element.clone(true).data('uploadSelect'$this);
                
$this.element.replaceWith(twin);
                
$this.element twin;
            });
        }
    });

    
UI.component('uploadDrop', {

        
defaults: {
            
'dragoverClass''uk-dragover'
        
},

        
init: function() {

            var 
$this thishasdragCls false;

            
this.on("drop", function(e){

                if (
e.dataTransfer && e.dataTransfer.files) {

                    
e.stopPropagation();
                    
e.preventDefault();

                    
$this.element.removeClass($this.options.dragoverClass);
                    
$this.element.trigger('dropped.uk.upload', [e.dataTransfer.files]);

                    
xhrupload(e.dataTransfer.files$this.options);
                }

            }).
on("dragenter", function(e){
                
e.stopPropagation();
                
e.preventDefault();
            }).
on("dragover", function(e){
                
e.stopPropagation();
                
e.preventDefault();

                if (!
hasdragCls) {
                    
$this.element.addClass($this.options.dragoverClass);
                    
hasdragCls true;
                }
            }).
on("dragleave", function(e){
                
e.stopPropagation();
                
e.preventDefault();
                
$this.element.removeClass($this.options.dragoverClass);
                
hasdragCls false;
            });
        }
    });


    
UI.support.ajaxupload = (function() {

        function 
supportFileAPI() {
            var 
fi document.createElement('INPUT'); fi.type 'file'; return 'files' in fi;
        }

        function 
supportAjaxUploadProgressEvents() {
            var 
xhr = new XMLHttpRequest(); return !! (xhr && ('upload' in xhr) && ('onprogress' in xhr.upload));
        }

        function 
supportFormData() {
            return !! 
window.FormData;
        }

        return 
supportFileAPI() && supportAjaxUploadProgressEvents() && supportFormData();
    })();

    if (
UI.support.ajaxupload){
        
UI.$.event.props.push("dataTransfer");
    }

    function 
xhrupload(filessettings) {

        if (!
UI.support.ajaxupload){
            return 
this;
        }

        
settings UI.$.extend({}, xhrupload.defaultssettings);

        if (!
files.length){
            return;
        }

        if (
settings.allow !== '*.*') {

            for(var 
i=0,file;file=files[i];i++) {

                if(!
matchName(settings.allowfile.name)) {

                    if(
typeof(settings.notallowed) == 'string') {
                       
alert(settings.notallowed);
                    } else {
                       
settings.notallowed(filesettings);
                    }
                    return;
                }
            }
        }

        var 
complete settings.complete;

        if (
settings.single){

            var 
count    files.length,
                
uploaded 0,
                
allow    true;

                
settings.beforeAll(files);

                
settings.complete = function(responsexhr){

                    
uploaded uploaded 1;

                    
complete(responsexhr);

                    if (
settings.filelimit && uploaded >= settings.filelimit){
                        
allow false;
                    }

                    if (
allow && uploaded<count){
                        
upload([files[uploaded]], settings);
                    } else {
                        
settings.allcomplete(responsexhr);
                    }
                };

                
upload([files[0]], settings);

        } else {

            
settings.complete = function(responsexhr){
                
complete(responsexhr);
                
settings.allcomplete(responsexhr);
            };

            
upload(filessettings);
        }

        function 
upload(filessettings){

            
// upload all at once
            
var formData = new FormData(), xhr = new XMLHttpRequest();

            if (
settings.before(settingsfiles)===false) return;

            for (var 
0ffiles[i]; i++) { formData.append(settings.paramf); }
            for (var 
p in settings.params) { formData.append(psettings.params[p]); }

            
// Add any event handlers here...
            
xhr.upload.addEventListener("progress", function(e){
                var 
percent = (e.loaded e.total)*100;
                
settings.progress(percente);
            }, 
false);

            
xhr.addEventListener("loadstart", function(e){ settings.loadstart(e); }, false);
            
xhr.addEventListener("load",      function(e){ settings.load(e);      }, false);
            
xhr.addEventListener("loadend",   function(e){ settings.loadend(e);   }, false);
            
xhr.addEventListener("error",     function(e){ settings.error(e);     }, false);
            
xhr.addEventListener("abort",     function(e){ settings.abort(e);     }, false);

            
xhr.open(settings.methodsettings.actiontrue);

            if (
settings.type=="json") {
                
xhr.setRequestHeader("Accept""application/json");
            }

            
xhr.onreadystatechange = function() {

                
settings.readystatechange(xhr);

                if (
xhr.readyState==4){

                    var 
response xhr.responseText;

                    if (
settings.type=="json") {
                        try {
                            
response UI.$.parseJSON(response);
                        } catch(
e) {
                            
response false;
                        }
                    }

                    
settings.complete(responsexhr);
                }
            };
            
settings.beforeSend(xhr);
            
xhr.send(formData);
        }
    }

    
xhrupload.defaults = {
        
'action''',
        
'single'true,
        
'method''POST',
        
'param' 'files[]',
        
'params': {},
        
'allow' '*.*',
        
'type'  'text',
        
'filelimit'false,

        
// events
        
'before'          : function(o){},
        
'beforeSend'      : function(xhr){},
        
'beforeAll'       : function(){},
        
'loadstart'       : function(){},
        
'load'            : function(){},
        
'loadend'         : function(){},
        
'error'           : function(){},
        
'abort'           : function(){},
        
'progress'        : function(){},
        
'complete'        : function(){},
        
'allcomplete'     : function(){},
        
'readystatechange': function(){},
        
'notallowed'      : function(filesettings){ alert('Only the following file types are allowed: '+settings.allow); }
    };

    function 
matchName(patternpath) {

        var 
parsedPattern '^' pattern.replace(///g, '\/').
            
replace(/**/g'(\/[^\/]+)*').
            
replace(/*/g, '[^\/]+').
            replace(/((?!\))?/g, '$1.') + '$';

        parsedPattern = '^' + parsedPattern + '$';

        return (path.match(new RegExp(parsedPattern, 'i')) !== null);
    }

    UI.Utils.xhrupload = xhrupload;

    return xhrupload;
});
?>
Онлайн: 0
Реклама