myems-admin/js/jquery/jquery.carousel.min.js

Summary

Maintainability
F
6 days
Test Coverage
(function(c) {
  function ga(z, s) {
    function m() {
      u = j.length;
      p = v * 2 / u;
      for (var b = 0; b < u; b++) ha(b);
      o(g);
      N(0);
      c(document).bind("mousemove", function(d) {
        k = d.pageX;
        q = d.pageY
      });
      z.onselectstart = function() {
        return false
      };
      a.settings.autoScroll && A();
      a.settings.mouseScroll && O();
      a.settings.mouseDrag && X();
      a.settings.mouseWheel && Y();
      a.settings.scrollbar && ia();
      a.settings.tooltip && c('<div class="tooltip"><p></p></div>').css("opacity", 0).appendTo(i)
    }

    function ha(b) {
      var d = c('<img class="carousel-item"/>').appendTo(i);
      Z.push(d);
      d.css({
        width: a.settings.itemWidth,
        h: a.settings.itemHeight
      }).data({
        w: a.settings.itemWidth,
        h: a.settings.itemHeight,
        index: b
      }).addClass("out").bind({
        mouseover: function() {
          c(this).hasClass("out") && c(this).removeClass("out").addClass("over");
          a.settings.tooltip && ja(b);
          if (a.settings.mouseScroll) B = a.settings.mouseScrollSpeedHover;
          var e = {
            type: "itemMouseOver",
            index: b,
            data: j[b]
          };
          c.isFunction(a.settings.itemMouseOver) && a.settings.itemMouseOver.call(this, e)
        },
        mouseout: function() {
          c(this).hasClass("over") &&
            c(this).removeClass("over").addClass("out");
          a.settings.tooltip && ka();
          if (a.settings.mouseScroll) B = a.settings.mouseScrollSpeed;
          var e = {
            type: "itemMouseOut",
            index: b,
            data: j[b]
          };
          c.isFunction(a.settings.itemMouseOut) && a.settings.itemMouseOut.call(this, e)
        },
        click: function() {
          i.find(".click").removeClass("click").addClass("out");
          c(this).removeClass("over").addClass("click");
          a.settings.scrollOnClick && C(b);
          if (j[b].link) window.open(j[b].link, j[b].linkTarget || a.settings.linkTarget);
          var e = {
            type: "itemClick",
            index: b,
            data: j[b]
          };
          c.isFunction(a.settings.itemClick) && a.settings.itemClick.call(this, e)
        }
      });
      j[b].link && d.css("cursor", "pointer");
      N(b)
    }

    function N(b) {
      var d = j[b].path,
        e = Z[b];
      c("<img/>").load(function() {
        var h = parseInt(c(this).attr("width") || c(this).prop("width")),
          f = parseInt(c(this).attr("height") || c(this).prop("height"));
        if (a.settings.crop) e.css("background-image", "url(" + d + ")");
        else {
          e.attr("src", d);
          e.css("background-image", "none")
        }
        if (a.settings.resize)
          if (a.settings.maintainAspectRatio) {
            scaleX =
              a.settings.itemWidth / h;
            scaleY = a.settings.itemHeight / f;
            if (scaleX < scaleY) {
              h *= scaleX;
              f *= scaleX
            } else {
              h *= scaleY;
              f *= scaleY
            }
          } else {
            h = a.settings.itemWidth;
            f = a.settings.itemHeigh
          }
        e.css({
          width: h,
          height: f
        });
        e.data({
          w: h,
          h: f
        });
        o(g);
        b < u - 1 && N(++b)
      }).attr("src", d)
    }

    function o(b) {
      i.find(".carousel-item").each(function(d) {
        var e = c(this),
          h = e.data("w"),
          f = e.data("h"),
          D = Math.sin(-(p * d) + v * 0.5 + b * w) * a.settings.verticalRadius + P - f * 0.5,
          r = (D - ($ - f * 0.5)) / (aa - $) * (1 - a.settings.scaleRatio) + a.settings.scaleRatio;
        e.css({
          width: h * r,
          height: f * r,
          left: Math.cos(-(p * d) + v * 0.5 + b * w) * a.settings.horizontalRadius + Q - h * 0.5 + h * (1 - r) / 2,
          top: D + f * (1 - r) / 2,
          "z-index": Math.floor(r * 10 * u)
        })
      });
      a.settings.scrollbar && !x && la(R())
    }

    function C(b) {
      l = b;
      var d = p * (180 / v) * b % 360;
      g %= 360;
      if (Math.abs(d - g) > 180) d += d > g ? -360 : 360;
      if (d - g > 180 && d > g) d -= 360;
      E();
      S = setInterval(function() {
        if (Math.abs(d - g) > 0.5) {
          g += (d - g) * (a.settings.scrollSpeed / 100);
          o(g)
        } else F()
      }, 30);
      b = {
        type: "itemSelect",
        index: l,
        data: j[l]
      };
      c.isFunction(a.settings.itemSelect) && a.settings.itemSelect.call(this, b)
    }

    function ba() {
      C(l == j.length - 1 ? 0 : l + 1)
    }

    function ca() {
      C(l == 0 ? j.length - 1 : l - 1)
    }

    function A() {
      if (!(G && a.settings.pauseAutoScrollIfTooltip)) {
        a.settings.autoScroll = true;
        t = setTimeout(function() {
          if (a.settings.autoScrollDirection == "next") ba();
          else a.settings.autoScrollDirection == "previous" && ca()
        }, a.settings.autoScrollDelay)
      }
    }

    function O() {
      a.settings.mouseScroll = true;
      B = a.settings.mouseScrollSpeed;
      var b = 0,
        d = a.settings.mouseScrollReverse ? -1 : 1;
      H = setInterval(function() {
        if (k > i.offset().left && k < i.offset().left + a.settings.width &&
          q > i.offset().top && q < i.offset().top + a.settings.height) {
          b = d * (k - (i.offset().left + Q)) * (B / 1E3);
          g += b;
          o(g)
        } else if (Math.abs(b) > 0.1) {
          b *= a.settings.mouseScrollEase / 100;
          g += b;
          o(g)
        } else b = 0
      }, 30)
    }

    function X() {
      function b(f) {
        T = f.pageX;
        if (!I) {
          E();
          d()
        }
      }

      function d() {
        I = true;
        J = setInterval(function() {
          var f = (360 * (h * (T - da) / (100 * a.settings.mouseDragSpeed)) + e - g) * (a.settings.mouseDragEase / 100);
          if ((f >= 0 ? f : -f) > 0.1) {
            g += f;
            l = Math.round(g * w / p);
            o(g)
          } else F()
        }, 30)
      }
      a.settings.mouseDrag = true;
      var e = 0,
        h = a.settings.mouseDragReverse ? 1 :
        -1;
      c(document).bind("mousedown", function(f) {
        if (k > i.offset().left && k < i.offset().left + a.settings.width && q > i.offset().top && q < i.offset().top + a.settings.height) {
          T = da = f.pageX;
          e = g;
          c(document).bind("mousemove", b)
        }
      });
      c(document).bind("mouseup", function() {
        c(document).unbind("mousemove", b)
      })
    }

    function Y() {
      a.settings.mouseWheel = true;
      var b = 0,
        d = a.settings.mouseWheelReverse ? -1 : 1;
      i.bind("mousewheel", function(e, h) {
        e.preventDefault();
        if (!K) {
          E();
          K = true;
          b = g;
          L = setInterval(function() {
            if (Math.abs(b - g) > 0.5) {
              g += (b - g) * (a.settings.mouseWheelSpeed /
                100);
              l = Math.round(g * w / p);
              o(g)
            } else F()
          }, 30)
        }
        b += d * h * 10
      })
    }

    function ia() {
      function b() {
        n = k - h.offset().left - ea;
        d()
      }

      function d() {
        if (n < 0) n = 0;
        else if (n > parseInt(h.css("width")) - parseInt(f.css("width"))) n = parseInt(h.css("width")) - parseInt(f.css("width"));
        x && f.css("left", n);
        U = n / (parseInt(h.css("width")) - parseInt(f.css("width")));
        if (!M) {
          E();
          M = true;
          g %= 360;
          V = setInterval(function() {
            if (Math.abs(R() - U) > 0.0010) {
              var W = (U - R()) * (a.settings.scrollbarEase / 100);
              g += W * 360;
              l = Math.round(g * w / p);
              o(g)
            } else M && F()
          }, 30)
        }
      }
      var e =
        c('<div class="scrollbar"></div>').appendTo(i),
        h = c('<div class="track"></div>').appendTo(e),
        f = c('<div class="thumb"></div>').appendTo(h),
        D = c('<div class="left"></div>').appendTo(e),
        r = c('<div class="right"></div>').appendTo(e),
        n = 0,
        ea;
      e.css({
        top: aa,
        left: Q - parseInt(e.css("width")) / 2
      });
      f.bind("mousedown", function(W) {
        W.preventDefault();
        ea = k - f.offset().left;
        x = true;
        c(document).bind("mousemove", b)
      });
      c(document).bind("mouseup", function() {
        if (x) {
          x = false;
          c(document).unbind("mousemove", b)
        }
      });
      D.bind("click", function() {
        n =
          parseInt(f.css("left")) - a.settings.arrowScrollAmount;
        d()
      });
      r.bind("click", function() {
        n = parseInt(f.css("left")) + a.settings.arrowScrollAmount;
        d()
      })
    }

    function la(b) {
      var d = i.find(".scrollbar").find(".track"),
        e = d.find(".thumb");
      e.css("left", b * (parseInt(d.css("width")) - parseInt(e.css("width"))))
    }

    function R() {
      var b = g % 360 / 360;
      if (b < 0) b += 1;
      return b
    }

    function E() {
      fa();
      if (!y) {
        y = true;
        c.isFunction(a.settings.scrollStart) && a.settings.scrollStart.call(this)
      }
    }

    function F() {
      fa();
      if (y) {
        y = false;
        c.isFunction(a.settings.scrollComplete) &&
          a.settings.scrollComplete.call(this)
      }
      a.settings.mouseScroll && O();
      a.settings.autoScroll && A()
    }

    function fa() {
      H && clearInterval(H);
      if (J) {
        I = false;
        clearInterval(J)
      }
      if (L) {
        K = false;
        clearInterval(L)
      }
      if (V) {
        M = false;
        clearInterval(V)
      }
      S && clearInterval(S);
      t && clearTimeout(t)
    }

    function ja(b) {
      if (b = j[b].tooltip) {
        G = true;
        var d = i.find(".tooltip");
        d.find("p").html(b);
        d.stop().animate({
          opacity: 1
        }, 300);
        var e = -d.outerWidth() / 2,
          h = 0 - d.outerHeight() - parseInt(d.css("marginBottom"));
        d.css({
          left: k - i.offset().left + e,
          top: q - i.offset().top +
            h
        });
        c(document).bind("mousemove.tooltip", function() {
          d.css({
            left: k - i.offset().left + e,
            top: q - i.offset().top + h
          })
        });
        t && a.settings.pauseAutoScrollIfTooltip && clearTimeout(t)
      }
    }

    function ka() {
      if (G) {
        G = false;
        var b = i.find(".tooltip");
        b.stop().animate({
          opacity: 0
        }, 200, function() {
          c(document).unbind("mousemove.tooltip");
          b.css("left", -9999)
        });
        a.settings.autoScroll && a.settings.pauseAutoScrollIfTooltip && A()
      }
    }
    this.settings = c.extend({}, c.fn.carousel.defaults, s);
    var i = c(z),
      a = this,
      l = 0,
      j = [],
      Z = [],
      v = Math.PI,
      w = v / 180,
      S, t, H, J,
      L, V, B = a.settings.mouseScrollSpeed,
      k, q, T = 0,
      da = 0,
      I = false,
      K = false,
      x = false,
      M = false,
      U = 0,
      g = 0,
      Q = a.settings.width / 2,
      P = a.settings.height / 2,
      $ = P - a.settings.verticalRadius,
      aa = P + a.settings.verticalRadius,
      p, u, y = false,
      G = false;
    (function() {
      i.addClass("carousel").css({
        width: a.settings.width,
        height: a.settings.height
      });
      if (a.settings.xmlSource) {
        i.empty();
        c.ajax({
          type: "GET",
          url: a.settings.xmlSource,
          dataType: "xml",
          success: function(b) {
            var d;
            d = b;
            c(d).find("item").each(function() {
              for (var e = {}, h = 0; h < c(this).children().length; h++) {
                var f = c(this).children()[h];
                e[f.nodeName] = c(this).find(f.nodeName).text()
              }
              j.push(e)
            });
            m()
          }
        })
      } else {
        i.children().each(function() {
          for (var b = {}, d = 0; d < c(this).children().length; d++) {
            var e = c(this).children()[d];
            if (c(e).is("a")) {
              b.path = c(e).find("img").attr("src");
              b.link = c(e).attr("href");
              if (c(e).attr("target")) b.linkTarget = c(e).attr("target")
            } else if (c(e).is("img")) b.path = c(e).attr("src");
            else b[c(e).attr("class")] = c(e).html()
          }
          j.push(b)
        });
        i.empty();
        m()
      }
    })();
    this.startAutoScroll = A;
    this.stopAutoScroll = function() {
      a.settings.autoScroll = false;
      clearTimeout(t)
    };
    this.startMouseScroll = O;
    this.stopMouseScroll = function() {
      a.settings.mouseScroll = false;
      clearInterval(H)
    };
    this.startMouseDrag = X;
    this.stopMouseDrag = function() {
      I = a.settings.mouseDrag = false;
      clearInterval(J)
    };
    this.startMouseWheel = Y;
    this.stopMouseWheel = function() {
      K = a.settings.mouseWheel = false;
      clearInterval(L)
    };
    this.scrollToItem = C;
    this.scrollToNext =
      ba;
    this.scrollToPrevious = ca;
    this.isScrolling = function() {
      return y
    }
  }
  c.fn.carousel = function(z) {
    for (var s = [], m = 0; m < this.length; m++)
      if (!this[m].carousel) {
        this[m].carousel = new ga(this[m], z);
        s.push(this[m].carousel)
      }
    return s.length > 1 ? s : s[0]
  };
  c.fn.carousel.defaults = {
    xmlSource: null,
    width: 500,
    height: 300,
    itemWidth: 100,
    itemHeight: 100,
    horizontalRadius: 250,
    verticalRadius: 100,
    resize: true,
    maintainAspectRatio: true,
    crop: false,
    scaleRatio: 0.5,
    mouseScroll: false,
    scrollOnClick: true,
    mouseDrag: false,
    scrollbar: false,
    arrowScrollAmount: 50,
    tooltip: true,
    mouseScrollEase: 90,
    mouseDragEase: 10,
    scrollbarEase: 10,
    scrollSpeed: 10,
    mouseDragSpeed: 20,
    mouseScrollSpeed: 10,
    mouseScrollSpeedHover: 3,
    mouseWheel: false,
    mouseWheelSpeed: 10,
    mouseScrollReverse: false,
    mouseDragReverse: false,
    mouseWheelReverse: false,
    autoScroll: false,
    autoScrollDirection: "next",
    autoScrollDelay: 3E3,
    pauseAutoScrollIfTooltip: true,
    linkTarget: "_blank",
    itemSelect: null,
    itemClick: null,
    itemMouseOver: null,
    itemMouseOut: null,
    scrollStart: null,
    scrollComplete: null
  }
})(jQuery);