; Отсутствует ошибка после упаковки прототипа - PullRequest
0 голосов
/ 14 мая 2011

После использования Packer (http://dean.edwards.name/packer/) Я заканчиваю тем, что выбрасываю пропущенное; after (длинная строка упаковщика). Я понятия не имею, что и почему. Возможные исправления и объяснения, пожалуйста?

jQuery.fn.extend({
ImageRotate:function(parameters)
{   
    if (this.Wilq32&&this.Wilq32.PhotoEffect) return;
    return (new Wilq32.PhotoEffect(this.get(0),parameters))._temp;
},
rotate:function(parameters)
{
    if (this.length===0) return;
    if (typeof parameters=="undefined") return;
    if (typeof parameters=="number") parameters={angle:parameters};
    var returned=[];
    for (var i=0,i0=this.length;i<i0;i++)
    {
        var element=this.get(i);    
        if (typeof element.Wilq32 == "undefined") 
            returned.push($($(element).ImageRotate(parameters)));
        else 
        {
            element.Wilq32.PhotoEffect._rotate(parameters.angle);
        }
    }
    return returned;
},

rotateAnimation:function(parameters)
{
    if (this.length===0) return;
    if (typeof parameters=="undefined") return;
    if (typeof parameters=="number") parameters={angle:parameters};
    var returned=[];
    for (var i=0,i0=this.length;i<i0;i++)
    {   
        var element=this.get(i);
        if (typeof element.Wilq32 == "undefined") 
            returned.push($($(element).ImageRotate(parameters)));
        else 
        {
            element.Wilq32.PhotoEffect._parameters.animateAngle = parameters.angle;
            element.Wilq32.PhotoEffect._parameters.callback = parameters.callback ||
            function()
            {
            };
            element.Wilq32.PhotoEffect._animateStart();
        }
    }
    return returned;
}

});

Wilq32={};

Wilq32.PhotoEffect=function(img,parameters)
{
            this._IEfix=img;
            this._parameters=parameters;
            this._parameters.className=img.className;
            this._parameters.id=img.getAttribute('id');

            if (!parameters) this._parameters={};
            this._angle=0;
            if (!parameters.angle) this._parameters.angle=0;
            this._temp=document.createElement('span');
            this._temp.Wilq32 = 
                {
                    PhotoEffect: this
                };          
            var image=img.src;
            img.parentNode.insertBefore(this._temp,img);
            this._img= new Image();
            this._img.src=image;
            this._img._ref=this;
            jQuery(this._img).bind("load", function()
            {
                this._ref._Loader.call(this._ref);
            });
            if (jQuery.browser.msie) if (this._img.complete) this._Loader();
}

Wilq32.PhotoEffect.prototype._Loader=
(function()
{
    if (jQuery.browser.msie)
    return function()
    {
        var src=this._IEfix.src;
        this._IEfix.parentNode.removeChild(this._IEfix);
        this._temp.setAttribute('id',this._parameters.id);
        this._temp.className=this._parameters.className;
        var width=this._img.width;
        var height=this._img.height;

        this._img._widthMax=this._img._heightMax=Math.sqrt((height)*(height) + (width) * (width));
        this._img._heightMax=Math.sqrt((height)*(height) + (width) * (width));

        this._vimage = document.createElement('v:image');
        this._vimage._ref=this;
        this._vimage.style.height=height;
        this._vimage.style.width=width;
        this._vimage.style.position="relative";
        this._temp.style.display="inline-block";
        this._temp.style.width=this._temp.style.height=this._img._heightMax;
        this._vimage.src=src;
        this._vimage.rotate=0;
        this._temp.appendChild(this._vimage);

        var self = this;
        this._parameters.animateAngle=0;
        if (this._parameters.bind) 
        {
            for (var a in this._parameters.bind) if (this._parameters.bind.hasOwnProperty(a)) 
            for (var b in this._parameters.bind[a]) if (this._parameters.bind[a].hasOwnProperty(b)) 
            jQuery(this._temp).bind(b,this._parameters.bind[a][b]);
        }
        this._rotate(this._parameters.angle);       

    }
    else
    return function ()
    {
        this._IEfix.parentNode.removeChild(this._IEfix);
        this._temp.setAttribute('id',this._parameters.id);
        this._temp.className=this._parameters.className;
        var width=this._img.width;
        var height=this._img.height;

        this._img._widthMax=this._img._heightMax=Math.sqrt((height)*(height) + (width) * (width));

        this._canvas=document.createElement('canvas');
        this._canvas._ref=this;
        this._canvas.height=height;
        this._canvas.width=width;

        this._canvas.setAttribute('width',width);

        this._temp.appendChild(this._canvas);

        var self = this;
        this._parameters.animateAngle=0;
        if (this._parameters.bind) 
        {
            for (var a in this._parameters.bind) if (this._parameters.bind.hasOwnProperty(a)) 
            for (var b in this._parameters.bind[a]) if (this._parameters.bind[a].hasOwnProperty(b)) 
            jQuery(this._canvas).bind(b,this._parameters.bind[a][b]);
        }
        this._cnv=this._canvas.getContext('2d');
        this._rotate(this._parameters.angle);
    }

})();

Wilq32.PhotoEffect.prototype._animateStart=function()
{   
    if (this._timer) clearTimeout(this._timer);
    this._animate();
}
Wilq32.PhotoEffect.prototype._animate=function()
{   
    var temp=this._angle;
    if (typeof this._parameters.animateAngle!="undefined") this._angle-=(this._angle-this._parameters.animateAngle)*0.1;
    if (typeof this._parameters.minAngle!="undefined") if (this._angle<this._parameters.minAngle) this._angle=this._parameters.minAngle;
    if (typeof this._parameters.maxAngle!="undefined") if (this._angle>this._parameters.maxAngle) this._angle=this._parameters.maxAngle; 

    if (Math.round(this._angle * 100 - temp * 100) == 0 && this._timer) 
        {
            clearTimeout(this._timer);
            if (this._parameters.callback) 
                this._parameters.callback();
        }
        else 
        {
            this._rotate(this._angle);
            var self = this;
            this._timer = setTimeout(function()
            {
                self._animate.call(self);
            }, 10);
        }
}

Wilq32.PhotoEffect.prototype._rotate = (function()
{
    if (jQuery.browser.msie)
    return function(angle)
    {
        this._vimage.style.rotation=angle;
        var radians=angle*Math.PI/180;
        this._vimage.style.top=  (this._img._heightMax - this._img.height)/2- (this._vimage.offsetHeight-this._img.height)/2 +"px";
        this._vimage.style.left= (this._img._widthMax - this._img.width)/2- (this._vimage.offsetWidth-this._img.width)/2 +"px";
    }
    else
    return function(angle)

    {

        if (!this._img.width) return;
        if (typeof angle!="number") return;
        angle=(angle%360)* Math.PI / 180;
        var width=this._img.width;
        var height=this._img.height;
        var widthAdd = this._img._widthMax - width;
        var heightAdd = this._img._heightMax - height;
        this._canvas.width = width+widthAdd;
        this._canvas.height = height+heightAdd;
        this._cnv.save();
        this._cnv.translate(widthAdd/2,heightAdd/2);
        this._cnv.translate(width/2,height/2); 
        this._cnv.rotate(angle);
        this._cnv.translate(-width/2,-height/2);
        this._cnv.drawImage(this._img, 0, 0);
        this._cnv.restore();
    }


})();

Ответы [ 2 ]

0 голосов
/ 14 мая 2011

Упаковщик сжимает все в одну строку, если я не ошибаюсь, так что любые пропущенные точки с запятой, которые были бы первоначально проанализированы, OK превращаются в серьезные ошибки.

В вашем js есть несколько пропущенных точек с запятой, например

return function(angle)
{
    this._vimage.style.rotation=angle;
    var radians=angle*Math.PI/180;
    this._vimage.style.top=  (this._img._heightMax - this._img.height)/2- (this._vimage.offsetHeight-this._img.height)/2 +"px";
    this._vimage.style.left= (this._img._widthMax - this._img.width)/2- (this._vimage.offsetWidth-this._img.width)/2 +"px";
}

отсутствует точка с запятой.Есть еще.

0 голосов
/ 14 мая 2011

Вот хороший сайт, который расскажет вам, что не так с вашим javascript: http://jslint.com/

Поэтому вставьте туда свой код, нажмите кнопку JSLint и просмотрите ошибки и предупреждения, которые вы получите.После того, как вы их исправите, вы можете быть уверены, что в упакованном виде ваш javascript будет работать.

...