diff --git a/ajax/libs/cutjs/0.2.1/cut.cordova.js b/ajax/libs/cutjs/0.2.1/cut.cordova.js new file mode 100644 index 000000000..2e5e848d0 --- /dev/null +++ b/ajax/libs/cutjs/0.2.1/cut.cordova.js @@ -0,0 +1,2595 @@ +/* + * CutJS 0.2.1 + * Copyright (c) 2013-2014 Ali Shakiba, Piqnt LLC and other contributors + * Available under the MIT license + * @license + */ + +DEBUG = (typeof DEBUG === "undefined" || DEBUG) && console; + +function Cut() { + if (!(this instanceof Cut)) { + if (typeof arguments[0] === "function") { + return Cut.Loader.load.apply(Cut.Loader, arguments); + } else if (typeof arguments[0] === "object") { + return Cut.Texture.add.apply(Cut.Texture, arguments); + } + } + Cut._stats.create++; + this._id = ""; + this._visible = true; + this._parent = null; + this._next = null; + this._prev = null; + this._first = null; + this._last = null; + this._pin = new Cut.Pin(this); + this._cutouts = []; + this._tickBefore = []; + this._tickAfter = []; + this._alpha = 1; +} + +Cut._create = function() { + if (typeof Object.create == "function") { + return function() { + return Object.create.apply(null, arguments); + }; + } else { + var F = function() {}; + return function(proto) { + if (arguments.length > 1) { + throw Error("Second argument is not supported!"); + } + if (proto === null || typeof proto != "object") { + throw Error("Invalid prototype!"); + } + F.prototype = proto; + return new F(); + }; + } +}(); + +Cut._stats = { + create: 0, + tick: 0, + paint: 0, + paste: 0 +}; + +Cut.create = function() { + return new Cut(); +}; + +Cut.prototype.render = function(context) { + Cut._stats.tick = Cut._stats.paint = Cut._stats.paste = 0; + var now = Cut._now(); + var elapsed = this._lastTime ? now - this._lastTime : 0; + this._lastTime = now; + this._tick(elapsed); + this._paint(context); + Cut._stats.fps = 1e3 / (Cut._now() - now); +}; + +Cut.prototype.MAX_ELAPSE = Infinity; + +Cut.prototype._tick = function(elapsed) { + if (!this._visible) { + return; + } + if (elapsed > this.MAX_ELAPSE) { + elapsed = this.MAX_ELAPSE; + } + this._pin.tick(); + var length = this._tickBefore.length; + for (var i = 0; i < length; i++) { + Cut._stats.tick++; + this._tickBefore[i].call(this, elapsed); + } + var child, next = this._first; + while (child = next) { + next = child._next; + child._tick(elapsed); + } + var length = this._tickAfter.length; + for (var i = 0; i < length; i++) { + Cut._stats.tick++; + this._tickAfter[i].call(this, elapsed); + } +}; + +Cut.prototype.tick = function(ticker, before) { + if (before) { + this._tickBefore.push(ticker); + } else { + this._tickAfter.push(ticker); + } +}; + +Cut.prototype.untick = function(ticker) { + var i; + if (!ticker) {} else if ((i = this._tickBefore.indexOf(ticker)) >= 0) { + this._tickBefore.splice(i, 1); + } else if ((i = this._tickAfter.indexOf(ticker)) >= 0) { + this._tickAfter.splice(i, 1); + } +}; + +Cut.prototype._paint = function(context) { + if (!this._visible) { + return; + } + Cut._stats.paint++; + var m = this._pin.absoluteMatrix(); + context.setTransform(m.a, m.b, m.c, m.d, m.e, m.f); + this._alpha = this._pin._alpha * (this._parent ? this._parent._alpha : 1); + var alpha = this._pin._textureAlpha * this._alpha; + if (context.globalAlpha != alpha) { + context.globalAlpha = alpha; + } + var length = this._cutouts.length; + for (var i = 0; i < length; i++) { + this._cutouts[i].paste(context); + } + if (context.globalAlpha != this._alpha) { + context.globalAlpha = this._alpha; + } + var child, next = this._first; + while (child = next) { + next = child._next; + child._paint(context); + } +}; + +Cut.prototype.toString = function() { + return "[" + this._id + "]"; +}; + +Cut.prototype.id = function(id) { + if (!arguments.length) { + return this._id; + } + this._id = id; + return this; +}; + +Cut.prototype.attr = function(name, value) { + if (arguments.length < 2) { + return this._attrs ? this._attrs[name] : undefined; + } + (this._attrs ? this._attrs : this._attrs = {})[name] = value; + return this; +}; + +Cut.prototype.on = Cut.prototype.listen = function(types, listener) { + if (typeof listener !== "function") { + return this; + } + types = (Cut._isArray(types) ? types.join(" ") : types).split(/\s+/); + for (var i = 0; i < types.length; i++) { + var type = types[i]; + if (type) { + this._listeners = this._listeners || {}; + this._listeners[type] = this._listeners[type] || []; + this._listeners[type].push(listener); + this._listenOn(type); + } + } + return this; +}; + +Cut.prototype.listeners = function(type) { + return this._listeners && this._listeners[type]; +}; + +Cut.prototype.publish = function(name, args) { + var listeners = this.listeners(name); + if (!listeners || !listeners.length) { + return 0; + } + for (var l = 0; l < listeners.length; l++) { + listeners[l].apply(this, args); + } + return listeners.length; +}; + +Cut.prototype.trigger = function(name, args) { + this.publish(name, args); + return this; +}; + +Cut.prototype.visit = function(visitor) { + var reverse = visitor.reverse; + var visible = visitor.visible; + if (visitor.start && visitor.start(this)) { + return; + } + var child, next = reverse ? this.last(visible) : this.first(visible); + while (child = next) { + next = reverse ? child.prev(visible) : child.next(visible); + if (child.visit(visitor, reverse)) { + return true; + } + } + return visitor.end && visitor.end(this); +}; + +Cut.prototype.visible = function(visible) { + if (!arguments.length) { + return this._visible; + } + this._visible = visible; + this._parent && (this._parent._ts_children = Cut._TS++); + this._ts_pin = Cut._TS++; + this.touch(); + return this; +}; + +Cut.prototype.hide = function() { + return this.visible(false); +}; + +Cut.prototype.show = function() { + return this.visible(true); +}; + +Cut.prototype.parent = function() { + return this._parent; +}; + +Cut.prototype.next = function(visible) { + var next = this._next; + while (next && visible && !next._visible) { + next = next._next; + } + return next; +}; + +Cut.prototype.prev = function(visible) { + var prev = this._prev; + while (prev && visible && !prev._visible) { + prev = prev._prev; + } + return prev; +}; + +Cut.prototype.first = function(visible) { + var next = this._first; + while (next && visible && !next._visible) { + next = next._next; + } + return next; +}; + +Cut.prototype.last = function(visible) { + var prev = this._last; + while (prev && visible && !prev._visible) { + prev = prev._prev; + } + return prev; +}; + +Cut.prototype.append = function() { + for (var i = 0; i < arguments.length; i++) { + if (!Cut._isCut(arguments[i])) { + throw "It is not a Cut node!"; + } + arguments[i].appendTo(this); + } + return this; +}; + +Cut.prototype.prepend = function() { + for (var i = 0; i < arguments.length; i++) { + if (!Cut._isCut(arguments[i])) { + throw "It is not a Cut node!"; + } + arguments[i].prependTo(this); + } + return this; +}; + +Cut.prototype.appendTo = function(parent) { + if (!parent) { + throw "Parent is null!"; + } + if (!Cut._isCut(parent)) { + throw "It is not a Cut node!"; + } + this.remove(); + if (parent._last) { + parent._last._next = this; + this._prev = parent._last; + } + this._parent = parent; + parent._last = this; + if (!parent._first) { + parent._first = this; + } + this._parent._listenOn(this); + this._ts_parent = Cut._TS++; + parent._ts_children = Cut._TS++; + parent.touch(); + return this; +}; + +Cut.prototype.prependTo = function(parent) { + if (!parent) { + throw "Parent is null!"; + } + if (!Cut._isCut(parent)) { + throw "It is not a Cut node!"; + } + this.remove(); + if (parent._first) { + parent._first._prev = this; + this._next = parent._first; + } + this._parent = parent; + parent._first = this; + if (!parent._last) { + parent._last = this; + } + this._parent._listenOn(this); + this._ts_parent = Cut._TS++; + parent._ts_children = Cut._TS++; + parent.touch(); + return this; +}; + +Cut.prototype.insertNext = function() { + if (arguments.length) { + for (var i = 0; i < arguments.length; i++) { + if (!Cut._isCut(arguments[i])) { + throw "It is not a Cut node!"; + } + arguments[i] && arguments[i].insertAfter(this); + } + } + return this; +}; + +Cut.prototype.insertPrev = function() { + if (arguments.length) { + for (var i = 0; i < arguments.length; i++) { + if (!Cut._isCut(arguments[i])) { + throw "It is not a Cut node!"; + } + arguments[i] && arguments[i].insertBefore(this); + } + } + return this; +}; + +Cut.prototype.insertBefore = function(next) { + if (!next) { + throw "Next is null!"; + } + if (!Cut._isCut(next)) { + throw "It is not a Cut node!"; + } + this.remove(); + var parent = next._parent; + var prev = next._prev; + next._prev = this; + prev && (prev._next = this) || parent && (parent._first = this); + this._parent = parent; + this._prev = prev; + this._next = next; + this._parent._listenOn(this); + this._ts_parent = Cut._TS++; + this.touch(); + return this; +}; + +Cut.prototype.insertAfter = function(prev) { + if (!prev) { + throw "Prev is null!"; + } + if (!Cut._isCut(prev)) { + throw "It is not a Cut node!"; + } + this.remove(); + var parent = prev._parent; + var next = prev._next; + prev._next = this; + next && (next._prev = this) || parent && (parent._last = this); + this._parent = parent; + this._prev = prev; + this._next = next; + this._parent._listenOn(this); + this._ts_parent = Cut._TS++; + this.touch(); + return this; +}; + +Cut.prototype.remove = function() { + if (arguments.length) { + for (var i = 0; i < arguments.length; i++) { + if (!Cut._isCut(arguments[i])) { + throw "It is not a Cut node!"; + } + arguments[i] && arguments[i].remove(); + } + return this; + } + if (this._prev) { + this._prev._next = this._next; + } + if (this._next) { + this._next._prev = this._prev; + } + if (this._parent) { + if (this._parent._first === this) { + this._parent._first = this._next; + } + if (this._parent._last === this) { + this._parent._last = this._prev; + } + this._parent._listenOff(this); + this._parent._ts_children = Cut._TS++; + this._parent.touch(); + } + this._prev = this._next = this._parent = null; + this._ts_parent = Cut._TS++; + // this._parent.touch(); + return this; +}; + +Cut.prototype.empty = function() { + var child, next = this._first; + while (child = next) { + next = child._next; + child._prev = child._next = child._parent = null; + this._listenOff(child); + } + this._first = this._last = null; + this._ts_children = Cut._TS++; + this.touch(); + return this; +}; + +Cut.prototype._listenOn = function(obj) { + if (typeof obj === "string") { + this._listenersCount = this._listenersCount || {}; + if (!this._listenersCount[obj] && this._parent) { + this._parent._listenOn(obj); + } + this._listenersCount[obj] = (this._listenersCount[obj] || 0) + 1; + } else if (typeof obj === "object") { + if (obj._listenersCount) { + for (var type in obj._listenersCount) { + if (obj._listenersCount[type] > 0) { + this._listenOn(type); + } + } + } + } +}; + +Cut.prototype._listenOff = function(obj) { + if (typeof obj === "string") { + this._listenersCount = this._listenersCount || {}; + if (this._listenersCount[obj] == 1 && this._parent) { + this._parent._listenOff(obj); + } + this._listenersCount[obj] = Math.max((this._listenersCount[obj] || 0) - 1, 0); + } else if (typeof obj === "object") { + if (obj._listenersCount) { + for (var type in obj._listenersCount) { + if (obj._listenersCount[type] > 0) { + this._listenOff(type); + } + } + } + } +}; + +Cut.prototype._listens = function(type) { + return this._listenersCount && this._listenersCount[type] || 0; +}; + +Cut.prototype.touch = function() { + this._ts_touch = Cut._TS++; + this._parent && this._parent.touch(); + return this; +}; + +Cut.prototype.pin = function() { + if (!arguments.length) { + return this._pin; + } + var obj = this._pin.update.apply(this._pin, arguments); + return obj === this._pin ? this : obj; +}; + +Cut.prototype.matrix = function() { + return this._pin.absoluteMatrix(this, this._parent ? this._parent._pin : null); +}; + +Cut.prototype.tween = function(duration, delay) { + return (this._tween || (this._tween = new Cut.Tween(this))).tween(duration, delay); +}; + +Cut.Tween = function(cut) { + var tween = this; + this._owner = cut; + this._queue = []; + this._next = null; + cut.tick(function(elapsed) { + if (!tween._queue.length) { + return; + } + this.touch(); + var head = tween._queue[0]; + if (!head.time) { + head.time = 1; + } else { + head.time += elapsed; + } + if (head.time < head.delay) { + return; + } + if (!head.start) { + head.start = {}; + head.keys = {}; + for (var key in head.end) { + if (typeof (start = cut.pin(key)) === "number") { + head.start[key] = start; + head.keys[key] = key; + } else if (typeof (startX = cut.pin(key + "X")) === "number" && typeof (startY = cut.pin(key + "Y")) === "number") { + head.start[key + "X"] = startX; + head.keys[key + "X"] = key; + head.start[key + "Y"] = startY; + head.keys[key + "Y"] = key; + } + } + } + var p = (head.time - head.delay) / head.duration; + var over = p >= 1; + p = p > 1 ? 1 : p; + p = typeof head.easing == "function" ? head.easing(p) : p; + var q = 1 - p; + for (var key in head.keys) { + cut.pin(key, head.start[key] * q + head.end[head.keys[key]] * p); + } + if (over) { + tween._queue.shift(); + head.then && head.then.call(cut); + } + }, true); +}; + +Cut.Tween.prototype.tween = function(duration, delay) { + this._next = { + id: Cut._TS++, + end: {}, + duration: duration || 400, + delay: delay || 0 + }; + return this; +}; + +Cut.Tween.prototype.pin = function(pin) { + if (this._next !== this._queue[this._queue.length - 1]) { + this._owner.touch(); + this._queue.push(this._next); + } + var end = this._next.end; + if (arguments.length === 1) { + Cut._extend(end, arguments[0]); + } else if (arguments.length === 2) { + end[arguments[0]] = arguments[1]; + } + return this; +}; + +Cut.Tween.prototype.clear = function(forward) { + var tween; + while (tween = this._queue.shift()) { + forward && this._owner.pin(tween.end); + } + return this; +}; + +Cut.Tween.prototype.then = function(then) { + this._next.then = then; + return this; +}; + +Cut.Tween.prototype.ease = function(easing) { + this._next.easing = Cut.Easing(easing); + return this; +}; + +Cut.root = function(request, render) { + return new Cut.Root(request, render); +}; + +Cut.Root = function(request, render) { + Cut.String.prototype._super.apply(this, arguments); + this._paused = true; + this._render = render; + this._request = request; + var self = this; + var requestCallback = function() { + if (self._paused === true) { + return; + } + self._mo_touch = self._ts_touch; + self._render(); + self.request(); + self._mo_touch == self._ts_touch && self.pause(); + }; + this.request = function() { + this._request.call(null, requestCallback); + }; + this.on("viewport", function(viewport) { + this._size = { + width: viewport.width, + height: viewport.height + }; + this._updateViewbox(); + return true; + }); +}; + +Cut.Root.prototype = Cut._create(Cut.prototype); + +Cut.Root.prototype._super = Cut; + +Cut.Root.prototype.constructor = Cut.Root; + +Cut.Root.prototype.viewbox = function(width, height, mode) { + this._viewbox = { + width: width, + height: height, + mode: /^(in|out)$/.test(mode) ? mode : "in" + }; + this._updateViewbox(); + return this; +}; + +Cut.Root.prototype._updateViewbox = function() { + var viewbox = this._viewbox; + var size = this._size; + if (!size) {} else if (viewbox) { + this.pin({ + width: viewbox.width, + height: viewbox.height, + resizeMode: viewbox.mode, + resizeWidth: size.width, + resizeHeight: size.height + }); + } else { + this.pin({ + width: size.width, + height: size.height + }); + } +}; + +Cut.Root.prototype.start = function() { + return this.resume(); +}; + +Cut.Root.prototype.resume = function(force) { + if (this._paused || force) { + this._paused = false; + this.request(); + } + return this; +}; + +Cut.Root.prototype.pause = function() { + this._paused = true; + return this; +}; + +Cut.Root.prototype.touch = function() { + this.resume(); + return Cut.prototype.touch.apply(this, arguments); +}; + +Cut.Root.prototype.resize = function(width, height, ratio) { + this._ratio = ratio || 1; + var data = {}; + data.width = width; + data.height = height; + data.ratio = ratio; + this.visit({ + start: function(cut) { + if (!cut._listens("viewport")) { + return true; + } + cut.publish("viewport", [ data ]); + } + }); + return this; +}; + +Cut.image = function(cutout) { + var image = new Cut.Image(); + cutout && image.image(cutout); + return image; +}; + +Cut.Image = function() { + Cut.Image.prototype._super.apply(this, arguments); +}; + +Cut.Image.prototype = Cut._create(Cut.prototype); + +Cut.Image.prototype._super = Cut; + +Cut.Image.prototype.constructor = Cut.Image; + +/** + * @deprecated Use image + */ +Cut.Image.prototype.setImage = function() { + this.image.apply(this, arguments); +}; + +Cut.Image.prototype.image = function(cutout) { + this._cutouts[0] = Cut.Out.select(cutout); + this._cutouts.length = 1; + this.pin({ + width: this._cutouts[0] ? this._cutouts[0].dWidth() : 0, + height: this._cutouts[0] ? this._cutouts[0].dHeight() : 0 + }); + this._cutout = this._cutouts[0].clone(); + return this; +}; + +Cut.Image.prototype.cropX = function(w, x) { + return this.image(this._cutouts[0].cropX(w, x)); +}; + +Cut.Image.prototype.cropY = function(h, y) { + return this.image(this._cutouts[0].cropY(h, y)); +}; + +Cut.Image.prototype._slice = function(i) { + return this._cutouts[i] || (this._cutouts[i] = this._cutout.clone()); +}; + +Cut.Image.prototype.tile = function(inner) { + this.untick(this._repeatTicker); + this._repeatTicker = function() { + if (this._mo_tile == this._ts_touch) { + return; + } + this._mo_tile = this._ts_touch; + var bleft = this._cutout._left, bright = this._cutout._right; + var btop = this._cutout._top, bbottom = this._cutout._bottom; + var bwidth = this._cutout.dWidth() - bleft - bright; + var bheight = this._cutout.dHeight() - btop - bbottom; + var width = this.pin("width"); + width = inner ? width : width - bleft - bright; + var height = this.pin("height"); + height = inner ? height : height - btop - bbottom; + var left = inner ? -bleft : 0; + var top = inner ? -btop : 0; + var c = 0; + // top, left + if (btop && bleft) { + this._slice(c++).cropX(bleft, 0).cropY(btop, 0).offset(left, top); + } + // bottom, left + if (bbottom && bleft) { + this._slice(c++).cropX(bleft, 0).cropY(bbottom, bheight + btop).offset(left, top + height + btop); + } + // top, right + if (btop && bright) { + this._slice(c++).cropX(bright, bwidth + bleft).cropY(btop, 0).offset(left + width + bleft, top); + } + // bottom, right + if (bbottom && bright) { + this._slice(c++).cropX(bright, bwidth + bleft).cropY(bbottom, bheight + btop).offset(left + width + bleft, top + height + btop); + } + var x = left + bleft; + var r = width; + while (r > 0) { + var w = Math.min(bwidth, r); + r -= bwidth; + var y = top + btop; + var b = height; + while (b > 0) { + var h = Math.min(bheight, b); + b -= bheight; + this._slice(c++).cropX(w, bleft).cropY(h, btop).offset(x, y); + if (r <= 0) { + // left + if (bleft) { + this._slice(c++).cropX(bleft, 0).cropY(h, btop).offset(left, y); + } + // right + if (bright) { + this._slice(c++).cropX(bright, bwidth + bleft).cropY(h, btop).offset(x + w, y); + } + } + y += h; + } + // top + if (btop) { + this._slice(c++).cropX(w, bleft).cropY(btop, 0).offset(x, top); + } + // bottom + if (bbottom) { + this._slice(c++).cropX(w, bleft).cropY(bbottom, bheight + btop).offset(x, y); + } + x += w; + } + this._cutouts.length = c; + }; + this.tick(this._repeatTicker); + return this; +}; + +Cut.Image.prototype.stretch = function(inner) { + this.untick(this._repeatTicker); + this._repeatTicker = function() { + if (this._mo_stretch == this._pin._ts_transform) { + return; + } + this._mo_stretch = this._pin._ts_transform; + var oleft = this._cutout._left, oright = this._cutout._right; + var otop = this._cutout._top, obottom = this._cutout._bottom; + var owidth = this._cutout.dWidth(), oheight = this._cutout.dHeight(); + var width = this.pin("width"), height = this.pin("height"); + width = inner ? width + oleft + oright : Math.max(width, oleft + oright); + height = inner ? height + otop + obottom : Math.max(height, otop + obottom); + var c = 0; + // top, left + if (otop && oleft) { + this._slice(c++).cropX(oleft, 0).cropY(otop, 0).offset(0, 0); + } + // bottom, left + if (obottom && oleft) { + this._slice(c++).cropX(oleft, 0).cropY(obottom, oheight - obottom).offset(0, height - obottom); + } + // top, right + if (otop && oright) { + this._slice(c++).cropX(oright, owidth - oright).cropY(otop, 0).offset(width - oright, 0); + } + // bottom, right + if (obottom && oright) { + this._slice(c++).cropX(oright, owidth - oright).cropY(obottom, oheight - obottom).offset(width - oright, height - obottom); + } + // top + if (otop) { + this._slice(c++).cropX(owidth - oleft - oright, oleft).cropY(otop, 0).offset(oleft, 0).dWidth(width - oleft - oright); + } + // bottom + if (obottom) { + this._slice(c++).cropX(owidth - oleft - oright, oleft).cropY(obottom, oheight - obottom).offset(oleft, height - obottom).dWidth(width - oleft - oright); + } + // left + if (oleft) { + this._slice(c++).cropX(oleft, 0).cropY(oheight - otop - obottom, otop).offset(0, otop).dHeight(height - otop - obottom); + } + // right + if (oright) { + this._slice(c++).cropX(oright, owidth - oright).cropY(oheight - otop - obottom, otop).offset(width - oright, otop).dHeight(height - otop - obottom); + } + // center + this._slice(c++).cropX(owidth - oleft - oright, oleft).cropY(oheight - otop - obottom, otop).offset(oleft, otop).dWidth(width - oleft - oright).dHeight(height - otop - obottom); + this._cutouts.length = c; + }; + this.tick(this._repeatTicker); + return this; +}; + +Cut.anim = function(frames, fps) { + var anim = new Cut.Anim().frames(frames).gotoFrame(0); + fps && anim.fps(fps); + return anim; +}; + +Cut.Anim = function() { + Cut.Anim.prototype._super.apply(this, arguments); + this._fps = Cut.Anim.FPS; + this._ft = 1e3 / this._fps; + this._time = 0; + this._frame = 0; + this._frames = []; + this._labels = {}; + this.tick(function() { + if (this._time && this._frames.length > 1) { + var t = Cut._now() - this._time; + if (t >= this._ft) { + var n = t < 2 * this._ft ? 1 : Math.floor(t / this._ft); + this._time += n * this._ft; + this.moveFrame(n); + if (this._repeat && (this._repeat -= n) <= 0) { + this.stop(); + this._callback && this._callback(); + } + } + this.touch(); + } + }, false); +}; + +Cut.Anim.prototype = Cut._create(Cut.prototype); + +Cut.Anim.prototype._super = Cut; + +Cut.Anim.prototype.constructor = Cut.Anim; + +Cut.Anim.FPS = 22; + +Cut.Anim.prototype.fps = function(fps) { + if (!arguments.length) { + return this._fps; + } + this._fps = fps || Cut.Anim.FPS; + this._ft = 1e3 / this._fps; + return this; +}; + +/** + * @deprecated Use frames + */ +Cut.Anim.prototype.setFrames = function() { + this.frames.apply(this, arguments); +}; + +Cut.Anim.prototype.frames = function(frames) { + this._time = this._time || 0; + this._frame = 0; + this._frames = []; + this._labels = {}; + frames = Cut.Out.select(frames, true); + if (frames && frames.length) { + for (var i = 0; i < frames.length; i++) { + var cutout = frames[i]; + this._frames.push(cutout); + this._labels[cutout._name] = i; + } + } + return this; +}; + +Cut.Anim.prototype.length = function() { + return this._frames ? this._frames.length : 0; +}; + +Cut.Anim.prototype.gotoFrame = function(frame, resize) { + frame = Cut.Math.rotate(frame, this._frames.length) | 0; + this._frame = frame; + resize = resize || !this._cutouts[0]; + this._cutouts[0] = this._frames[this._frame]; + if (resize) { + this.pin({ + width: this._cutouts[0].dWidth(), + height: this._cutouts[0].dHeight() + }); + } + this._ts_frame = Cut._TS++; + this.touch(); + return this; +}; + +Cut.Anim.prototype.moveFrame = function(move) { + return this.gotoFrame(this._frame + move); +}; + +Cut.Anim.prototype.gotoLabel = function(label, resize) { + return this.gotoFrame(this._labels[label] || 0, resize); +}; + +Cut.Anim.prototype.repeat = function(repeat, callback) { + this._repeat = repeat * this._frames.length - 1; + this._callback = callback; + this.play(); + return this; +}; + +Cut.Anim.prototype.play = function(frame) { + if (arguments.length) { + this.gotoFrame(frame); + this._time = Cut._now(); + } else if (!this._time) { + this._time = Cut._now(); + } + return this; +}; + +Cut.Anim.prototype.stop = function(frame) { + this._time = null; + if (arguments.length) { + this.gotoFrame(frame); + } + return this; +}; + +Cut.string = function(frames) { + return new Cut.String().frames(frames); +}; + +Cut.String = function() { + Cut.String.prototype._super.apply(this, arguments); + this.row(); +}; + +Cut.String.prototype = Cut._create(Cut.prototype); + +Cut.String.prototype._super = Cut; + +Cut.String.prototype.constructor = Cut.String; + +/** + * @deprecated Use frames + */ +Cut.String.prototype.setFont = function() { + this.frames.apply(this, arguments); +}; + +Cut.String.prototype.frames = function(frames) { + if (typeof frames == "string") { + this._frames = function(value) { + return frames + value; + }; + } else if (Cut._isFunc(frames)) { + this._frames = frames; + } + return this; +}; + +/** + * @deprecated Use value + */ +Cut.String.prototype.setValue = function() { + this.value.apply(this, arguments); +}; + +Cut.String.prototype.value = function(value) { + if (this._value === value) return this; + this._value = value; + if (typeof value !== "string" && !Cut._isArray(value)) { + value = value + ""; + } + var child = this._first; + for (var i = 0; i < value.length; i++) { + var selector = this._frames(value[i]); + if (child) { + child.image(selector).show(); + } else { + child = Cut.image(selector).appendTo(this); + } + child = child._next; + } + while (child) { + child.hide(); + child = child._next; + } + return this; +}; + +Cut.row = function(align) { + return Cut.create().row(align); +}; + +Cut.prototype.row = function(align) { + this.sequence("row", align); + return this; +}; + +Cut.column = function(align) { + return Cut.create().column(align); +}; + +Cut.prototype.column = function(align) { + this.sequence("column", align); + return this; +}; + +Cut.sequence = function(type, align) { + return new Cut.create().sequence(type, align); +}; + +Cut.prototype.sequence = function(type, align) { + this.untick(this._layoutTicker); + this._layoutTicker = function() { + if (this._mo_seq == this._ts_touch) { + return; + } + this._mo_seq = this._ts_touch; + var alignChildren = this._mo_seqAlign != this._ts_children; + this._mo_seqAlign = this._ts_children; + var width = 0, height = 0; + var child, next = this.first(true); + var first = true; + while (child = next) { + next = child.next(true); + child._pin.relativeMatrix(); + var w = child._pin._boxWidth; + var h = child._pin._boxHeight; + if (type == "column") { + !first && (height += this._spacing || 0); + child.pin("offsetY") != height && child.pin("offsetY", height); + width = Math.max(width, w); + height = height + h; + alignChildren && child.pin("alignX", align); + } else if (type == "row") { + !first && (width += this._spacing || 0); + child.pin("offsetX") != width && child.pin("offsetX", width); + width = width + w; + height = Math.max(height, h); + alignChildren && child.pin("alignY", align); + } + first = false; + } + width += 2 * this._padding || 0; + height += 2 * this._padding || 0; + this.pin("width") != width && this.pin("width", width); + this.pin("height") != height && this.pin("height", height); + }; + this.tick(this._layoutTicker); + return this; +}; + +Cut.box = function() { + return new Cut.create().box(); +}; + +Cut.prototype.box = function() { + if (this._boxTicker) return this; + this._boxTicker = function() { + if (this._mo_box == this._ts_touch) { + return; + } + this._mo_box = this._ts_touch; + var width = 0, height = 0; + var child, next = this.first(true); + while (child = next) { + next = child.next(true); + child._pin.relativeMatrix(); + var w = child._pin._boxWidth; + var h = child._pin._boxHeight; + width = Math.max(width, w); + height = Math.max(height, h); + } + width += 2 * this._padding || 0; + height += 2 * this._padding || 0; + this.pin("width") != width && this.pin("width", width); + this.pin("height") != height && this.pin("height", height); + }; + this.tick(this._boxTicker); + return this; +}; + +Cut.prototype.padding = function(pad) { + this._padding = pad; + return this; +}; + +Cut.prototype.spacing = function(space) { + this._spacing = space; + return this; +}; + +// TODO use prototype +Cut.Loader = function() { + var queue = []; + var roots = []; + var images = {}; + var started = false; + function loadImages(loader, callback) { + var loading = 0; + var noimage = true; + var textures = Cut.Texture._list; + for (var texture in textures) { + if (textures[texture].getImagePath()) { + loading++; + var src = textures[texture].getImagePath(); + var image = loader(src, complete, error); + Cut.Loader.addImage(image, src); + noimage = false; + } + } + if (noimage) { + DEBUG && console.log("No image to load."); + callback && callback(); + } + function complete() { + DEBUG && console.log("Image loaded."); + done(); + } + function error(msg) { + DEBUG && console.log("Error loading image: " + msg); + done(); + } + function done() { + if (--loading <= 0) { + callback && callback(); + } + } + } + return { + load: function(app, configs) { + if (!started) { + queue.push(arguments); + return; + } + DEBUG && console.log("Init..."); + var root = this.init(function(root, canvas) { + DEBUG && console.log("Loading app..."); + app(root, canvas); + }, configs); + roots.push(root); + DEBUG && console.log("Loading images..."); + loadImages(this.loadImage, function() { + DEBUG && console.log("Images loaded."); + DEBUG && console.log("Start playing..."); + root.start(); + }); + }, + start: function() { + started = true; + var args; + while (args = queue.shift()) { + this.load.apply(this, args); + } + }, + pause: function() { + for (var i = queue.length - 1; i >= 0; i--) { + roots[i].pause(); + } + }, + resume: function() { + for (var i = queue.length - 1; i >= 0; i--) { + roots[i].resume(); + } + }, + getImage: function(src) { + return images[src]; + }, + addImage: function(image, src) { + images[src] = image; + return this; + } + }; +}(); + +// TODO use prototype +Cut.Texture = function(texture) { + texture.cutouts = texture.cutouts || []; + var selectionCache = {}; + var imageCache = null; + this.getImagePath = function() { + return texture.imagePath; + }; + function image() { + if (!imageCache) { + imageCache = Cut.Loader.getImage(texture.imagePath); + } + return imageCache; + } + for (var i = 0; i < texture.cutouts.length; i++) { + map(texture.cutouts[i]); + } + function map(cutout) { + if (!cutout || cutout.isCutout) { + return cutout; + } + if (typeof texture.map === "function") { + cutout = texture.map(cutout); + } else if (typeof texture.filter === "function") { + cutout = texture.filter(cutout); + } + var ratio = texture.ratio || 1; + if (ratio != 1) { + cutout.x *= ratio, cutout.y *= ratio; + cutout.width *= ratio, cutout.height *= ratio; + cutout.top *= ratio, cutout.bottom *= ratio; + cutout.left *= ratio, cutout.right *= ratio; + } + var trim = texture.trim || 0; + if (trim) { + cutout.x += trim, cutout.y += trim; + cutout.width -= 2 * trim, cutout.height -= 2 * trim; + cutout.top -= trim, cutout.bottom -= trim; + cutout.left -= trim, cutout.right -= trim; + } + return cutout; + } + function wrap(cutout) { + if (!cutout.isCutout) { + cutout = new Cut.Out(cutout, image, texture.imageRatio); + } + return cutout; + } + this.select = function(selector, prefix) { + if (!prefix) { + // one + var id = selector + "?"; + var result = selectionCache[id]; + if (typeof result === "undefined") { + for (var i = 0; i < texture.cutouts.length; i++) { + var item = texture.cutouts[i]; + var name = item._name || item.name; + if (name == selector) { + result = item; + break; + } + } + if (!result && texture.factory) { + result = map(texture.factory(selector)); + } + selectionCache[id] = result; + } + if (!result) { + throw "Cutout not found: '" + texture.name + ":" + selector + "'"; + } + return wrap(result); + } else { + // many + var id = selector + "*"; + var results = selectionCache[id]; + if (typeof results === "undefined") { + results = []; + var length = selector.length; + for (var i = 0; i < texture.cutouts.length; i++) { + var item = texture.cutouts[i]; + var name = item._name || item.name; + if (name && name.substring(0, length) == selector) { + results.push(texture.cutouts[i]); + } + } + selectionCache[id] = results; + } + if (!results.length) { + throw "Cutouts not found: '" + texture.name + ":" + selector + "'"; + } + for (var i = 0; i < results.length; i++) { + results[i] = wrap(results[i]); + } + return results; + } + }; +}; + +Cut.Texture._list = {}; + +Cut.Texture.add = function() { + for (var i = 0; i < arguments.length; i++) { + var texture = arguments[i]; + Cut.Texture._list[texture.name] = new Cut.Texture(texture); + } + return this; +}; + +/** + * @deprecated Use Cut(); + */ +Cut.addTexture = function() { + return Cut.Texture.add.apply(Cut.Texture, arguments); +}; + +Cut.Out = function(def, image, ratio) { + this.isCutout = true; + this._image = image; + this._ratio = ratio || 1; + this._name = def.name; + this._x = def.x; + this._y = def.y; + this._width = def.width; + this._height = def.height; + this._top = def.top || 0; + this._bottom = def.bottom || 0; + this._left = def.left || 0; + this._right = def.right || 0; + this._reset(); + return this; +}; + +Cut.Out.prototype._reset = function() { + this._sx = this._x * this._ratio; + this._sy = this._y * this._ratio; + this._sw = this._width * this._ratio; + this._sh = this._height * this._ratio; + this._dx = 0; + this._dy = 0; + this._dw = this._width; + this._dh = this._height; +}; + +Cut.Out.prototype.clone = function() { + var clone = Cut._create(Cut.Out.prototype); + for (var attr in this) if (this.hasOwnProperty(attr)) clone[attr] = this[attr]; + clone._reset(); + return clone; +}; + +Cut.Out.prototype.dWidth = function(width) { + if (arguments.length) { + this._dw = width; + return this; + } + return this._dw; +}; + +Cut.Out.prototype.dHeight = function(height) { + if (arguments.length) { + this._dh = height; + return this; + } + return this._dh; +}; + +Cut.Out.prototype.cropX = function(w, x) { + x = x || 0; + w = Math.min(w, this._width - x); + this._dw = w; + this._sw = w * this._ratio; + this._sx = (this._x + x) * this._ratio; + return this; +}; + +Cut.Out.prototype.cropY = function(h, y) { + y = y || 0; + h = Math.min(h, this._height - y); + this._dh = h; + this._sh = h * this._ratio; + this._sy = (this._y + y) * this._ratio; + return this; +}; + +Cut.Out.prototype.offset = function(x, y) { + this._dx = x; + this._dy = y; + return this; +}; + +Cut.Out.prototype.paste = function(context) { + Cut._stats.paste++; + var img = typeof this._image === "function" ? this._image() : this._image; + try { + img && context.drawImage(img, // source + this._sx, this._sy, this._sw, this._sh, // cut + this._dx, this._dy, this._dw, this._dh); + } catch (e) { + if (!this._failed) { + console.log("Unable to paste: " + this, img); + this._failed = true; + } + } +}; + +Cut.Out.prototype.toString = function() { + return "[" + this._name + ": " + this._sx + "x" + this._sy + "-" + this._sw + "x" + this._sh + "" + this._dx + "x" + this._dy + "-" + this._dw + "x" + this._dh + "]"; +}; + +Cut.Out.select = function(selector, prefix) { + if (typeof selector === "function") { + return Cut.Out.select(selector()); + } + if (typeof selector !== "string") { + return selector; + } + var i = selector.indexOf(":"); + if (i < 0) { + throw "Invalid selector: '" + selector + "'"; + return null; + } + var split = [ selector.slice(0, i), selector.slice(i + 1) ]; + var texture = Cut.Texture._list[split[0]]; + if (texture == null) { + throw "Texture not found: '" + selector + "'"; + return !prefix ? null : []; + } + return texture.select(split[1], prefix); +}; + +Cut.drawing = function() { + return Cut.image(Cut.Out.drawing.apply(Cut.Out, arguments)); +}; + +// [name], width, height, [ratio], [draw] +// def, [draw] +Cut.Out.drawing = function() { + var canvas = document.createElement("canvas"); + var context = canvas.getContext("2d"); + var def = {}; + var ai = 0; + if (typeof arguments[ai] === "object") { + def = arguments[ai++]; + } else { + if (typeof arguments[ai] === "string") { + def.name = arguments[ai++]; + } + def.width = arguments[ai++]; + def.height = arguments[ai++]; + if (typeof arguments[ai] === "number") { + def.ratio = arguments[ai++]; + } + def.x = 0; + def.y = 0; + } + def.ratio = def.ratio || 1; + def.name = def.name || Math.random() * 1e3 | 0; + canvas.width = Math.ceil(def.width * def.ratio); + canvas.height = Math.ceil(def.height * def.ratio); + var cut = new Cut.Out(def, canvas, def.ratio); + if (typeof arguments[arguments.length - 1] === "function") { + arguments[arguments.length - 1].call(cut, context, def.ratio); + } + return cut; +}; + +Cut.Pin = function(owner) { + this._owner = owner; + this._parent = null; + // relative to parent + this._relativeMatrix = new Cut.Matrix(); + // relative to root + this._absoluteMatrix = new Cut.Matrix(); + this.reset(); +}; + +Cut.Pin.prototype.reset = function() { + this._textureAlpha = 1; + this._alpha = 1; + this._width = 0; + this._height = 0; + this._scaleX = 1; + this._scaleY = 1; + this._skewX = 0; + this._skewY = 0; + this._rotation = 0; + // scale/skew/rotate center + this._pivoted = false; + this._pivotX = null; + this._pivotY = null; + // self pin point + this._handled = false; + this._handleX = 0; + this._handleY = 0; + // parent pin point + this._aligned = false; + this._alignX = 0; + this._alignY = 0; + // as seen by parent px + this._offsetX = 0; + this._offsetY = 0; + this._boxX = 0; + this._boxY = 0; + this._boxWidth = this._width; + this._boxHeight = this._height; + this._ts_translate = Cut._TS++; + this._ts_transform = Cut._TS++; + this._ts_matrix = Cut._TS++; +}; + +Cut.Pin.prototype.tick = function() { + this._parent = this._owner._parent && this._owner._parent._pin; + if (this._handled && this._mo_handle != this._ts_transform) { + this._mo_handle = this._ts_transform; + this._ts_translate = Cut._TS++; + } + if (this._aligned && this._parent && this._mo_align != this._parent._ts_transform) { + this._mo_align = this._parent._ts_transform; + this._ts_translate = Cut._TS++; + } + return this; +}; + +Cut.Pin.prototype.toString = function() { + return this._owner.id() + " [" + this._alignX + ", " + this._alignY + "] [" + this._handleX + ", " + this._handleY + "] [" + (this._parent ? this._parent._owner.id() : null) + "]"; +}; + +Cut.Pin.prototype.absoluteMatrix = function() { + var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_matrix : 0); + if (this._mo_abs == ts) { + return this._absoluteMatrix; + } + this._mo_abs = ts; + var abs = this._absoluteMatrix; + abs.copyFrom(this.relativeMatrix()); + this._parent && abs.concat(this._parent._absoluteMatrix); + this._ts_matrix = Cut._TS++; + return abs; +}; + +Cut.Pin.prototype.relativeMatrix = function() { + var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_transform : 0); + if (this._mo_rel == ts) { + return this._relativeMatrix; + } + this._mo_rel = ts; + var rel = this._relativeMatrix; + rel.identity(); + if (this._pivoted) { + rel.translate(-this._pivotX * this._width, -this._pivotY * this._height); + } + rel.scale(this._scaleX, this._scaleY); + rel.skew(this._skewX, this._skewY); + rel.rotate(this._rotation); + if (this._pivoted) { + rel.translate(this._pivotX * this._width, this._pivotY * this._height); + } + if (this._pivoted) { + // set handle on origin + this._boxX = 0; + this._boxY = 0; + this._boxWidth = this._width; + this._boxHeight = this._height; + } else { + // set handle on aabb + var p, q, m = rel; + if (m.a > 0 && m.c > 0 || m.a < 0 && m.c < 0) { + p = 0, q = m.a * this._width + m.c * this._height; + } else { + p = m.a * this._width, q = m.c * this._height; + } + if (p > q) { + this._boxX = q; + this._boxWidth = p - q; + } else { + this._boxX = p; + this._boxWidth = q - p; + } + if (m.b > 0 && m.d > 0 || m.b < 0 && m.d < 0) { + p = 0, q = m.b * this._width + m.d * this._height; + } else { + p = m.b * this._width, q = m.d * this._height; + } + if (p > q) { + this._boxY = q; + this._boxHeight = p - q; + } else { + this._boxY = p; + this._boxHeight = q - p; + } + } + this._x = this._offsetX; + this._y = this._offsetY; + this._x -= this._boxX + this._handleX * this._boxWidth; + this._y -= this._boxY + this._handleY * this._boxHeight; + if (this._aligned && this._parent) { + this._parent.relativeMatrix(); + this._x += this._alignX * this._parent._width; + this._y += this._alignY * this._parent._height; + } + rel.translate(this._x, this._y); + return this._relativeMatrix; +}; + +Cut.Pin._SINGLE = {}; + +Cut.Pin.prototype.update = function() { + if (arguments.length == 1 && typeof arguments[0] === "string") { + return this["_" + arguments[0]]; + } + this._transform_flag = false; + this._translate_flag = false; + var pin = null, key = null, value = null; + if (arguments.length == 2 && typeof arguments[0] === "string") { + for (key in Cut.Pin._SINGLE) { + delete Cut.Pin._SINGLE[key]; + } + (pin = Cut.Pin._SINGLE)[arguments[0]] = arguments[1]; + } else if (arguments.length == 1 && typeof arguments[0] === "object") { + pin = arguments[0]; + } + // TODO: map write only keys to read/write keys + if (pin) { + for (key in pin) { + if (typeof (value = pin[key]) !== "undefined") { + if (setter = Cut.Pin._setters[key]) { + setter.call(Cut.Pin._setters, this, value, pin); + } + } + } + } + if (this._translate_flag) { + this._translate_flag = false; + this._ts_translate = Cut._TS++; + } + if (this._transform_flag) { + this._transform_flag = false; + this._ts_transform = Cut._TS++; + } + if (this._owner) { + this._owner._ts_pin = Cut._TS++; + this._owner.touch(); + } + return this; +}; + +Cut.Pin._setters = { + alpha: function(pin, value, set) { + pin._alpha = value; + }, + textureAlpha: function(pin, value, set) { + pin._textureAlpha = value; + }, + width: function(pin, value, set) { + pin._width_ = value; + pin._width = value; + pin._transform_flag = true; + }, + height: function(pin, value, set) { + pin._height_ = value; + pin._height = value; + pin._transform_flag = true; + }, + scale: function(pin, value, set) { + pin._scaleX = value; + pin._scaleY = value; + pin._transform_flag = true; + }, + scaleX: function(pin, value, set) { + pin._scaleX = value; + pin._transform_flag = true; + }, + scaleY: function(pin, value, set) { + pin._scaleY = value; + pin._transform_flag = true; + }, + skew: function(pin, value, set) { + pin._skewX = value; + pin._skewY = value; + pin._transform_flag = true; + }, + skewX: function(pin, value, set) { + pin._skewX = value; + pin._transform_flag = true; + }, + skewY: function(pin, value, set) { + pin._skewY = value; + pin._transform_flag = true; + }, + rotation: function(pin, value, set) { + pin._rotation = value; + pin._transform_flag = true; + }, + pivot: function(pin, value, set) { + pin._pivotX = value; + pin._pivotY = value; + pin._pivoted = true; + pin._transform_flag = true; + }, + pivotX: function(pin, value, set) { + pin._pivotX = value; + pin._pivoted = true; + pin._transform_flag = true; + }, + pivotY: function(pin, value, set) { + pin._pivotY = value; + pin._pivoted = true; + pin._transform_flag = true; + }, + offset: function(pin, value, set) { + pin._offsetX = value; + pin._offsetY = value; + pin._translate_flag = true; + }, + offsetX: function(pin, value, set) { + pin._offsetX = value; + pin._translate_flag = true; + }, + offsetY: function(pin, value, set) { + pin._offsetY = value; + pin._translate_flag = true; + }, + align: function(pin, value, set) { + this.alignX.apply(this, arguments); + this.alignY.apply(this, arguments); + }, + alignX: function(pin, value, set) { + pin._alignX = value; + pin._aligned = true; + pin._translate_flag = true; + this.handleX(pin, value, set); + }, + alignY: function(pin, value, set) { + pin._alignY = value; + pin._aligned = true; + pin._translate_flag = true; + this.handleY(pin, value, set); + }, + handle: function(pin, value, set) { + this.handleX(pin, value, set); + this.handleY(pin, value, set); + }, + handleX: function(pin, value, set) { + pin._handleX = value; + pin._handled = true; + pin._translate_flag = true; + }, + handleY: function(pin, value, set) { + pin._handleY = value; + pin._handled = true; + pin._translate_flag = true; + }, + resizeMode: function(pin, value, set) { + if (Cut._isNum(set.resizeWidth) && Cut._isNum(set.resizeHeight)) { + this.resizeWidth(pin, set.resizeWidth, set, true); + this.resizeHeight(pin, set.resizeHeight, set, true); + if (value == "out") { + pin._scaleX = pin._scaleY = Math.max(pin._scaleX, pin._scaleY); + } else if (value == "in") { + pin._scaleX = pin._scaleY = Math.min(pin._scaleX, pin._scaleY); + } + pin._width = set.resizeWidth / pin._scaleX; + pin._height = set.resizeHeight / pin._scaleY; + } + }, + resizeWidth: function(pin, value, set, force) { + if (set.resizeMode && !force) { + return; + } + pin._scaleX = value / pin._width_; + pin._width = pin._width_; + pin._transform_flag = true; + }, + resizeHeight: function(pin, value, set, force) { + if (set.resizeMode && !force) { + return; + } + pin._scaleY = value / pin._height_; + pin._height = pin._height_; + pin._transform_flag = true; + }, + scaleMode: function(pin, value, set) { + if (Cut._isNum(set.scaleWidth) && Cut._isNum(set.scaleHeight)) { + this.scaleWidth(pin, set.scaleWidth, set, true); + this.scaleHeight(pin, set.scaleHeight, set, true); + if (value == "out") { + pin._scaleX = pin._scaleY = Math.max(pin._scaleX, pin._scaleY); + } else if (value == "in") { + pin._scaleX = pin._scaleY = Math.min(pin._scaleX, pin._scaleY); + } + } + }, + scaleWidth: function(pin, value, set, force) { + if (set.scaleMode && !force) { + return; + } + pin._scaleX = value / pin._width_; + pin._transform_flag = true; + }, + scaleHeight: function(pin, value, set, force) { + if (set.scaleMode && !force) { + return; + } + pin._scaleY = value / pin._height_; + pin._transform_flag = true; + }, + matrix: function(pin, value, set) { + this.scaleX(pin, value.a, set); + this.skewX(pin, value.c / value.d, set); + this.skewY(pin, value.b / value.a, set); + this.scaleY(pin, value.d, set); + this.offsetX(pin, value.e, set); + this.offsetY(pin, value.f, set); + this.rotation(pin, 0, set); + } +}; + +Cut.Matrix = function(a, b, c, d, e, f) { + this.changed = true; + this.a = a || 1; + this.b = b || 0; + this.c = c || 0; + this.d = d || 1; + this.e = e || 0; + this.f = f || 0; +}; + +Cut.Matrix.prototype.toString = function() { + return "[" + this.a + ", " + this.b + ", " + this.c + ", " + this.d + ", " + this.e + ", " + this.f + "]"; +}; + +Cut.Matrix.prototype.clone = function() { + return new Cut.Matrix(this.a, this.b, this.c, this.d, this.e, this.f); +}; + +Cut.Matrix.prototype.copyTo = function(m) { + m.copyFrom(this); + return this; +}; + +Cut.Matrix.prototype.copyFrom = function(m) { + this.changed = true; + this.a = m.a; + this.b = m.b; + this.c = m.c; + this.d = m.d; + this.e = m.e; + this.f = m.f; + return this; +}; + +Cut.Matrix.prototype.identity = function() { + this.changed = true; + this.a = 1; + this.b = 0; + this.c = 0; + this.d = 1; + this.e = 0; + this.f = 0; + return this; +}; + +Cut.Matrix.prototype.rotate = function(angle) { + if (!angle) { + return this; + } + this.changed = true; + var u = angle ? Math.cos(angle) : 1; + // android bug may give bad 0 values + var v = angle ? Math.sin(angle) : 0; + var a = u * this.a - v * this.b; + var b = u * this.b + v * this.a; + var c = u * this.c - v * this.d; + var d = u * this.d + v * this.c; + var e = u * this.e - v * this.f; + var f = u * this.f + v * this.e; + this.a = a; + this.b = b; + this.c = c; + this.d = d; + this.e = e; + this.f = f; + return this; +}; + +Cut.Matrix.prototype.translate = function(x, y) { + if (!x && !y) { + return this; + } + this.changed = true; + this.e += x; + this.f += y; + return this; +}; + +Cut.Matrix.prototype.scale = function(x, y) { + if (!(x - 1) && !(y - 1)) { + return this; + } + this.changed = true; + this.a *= x; + this.b *= y; + this.c *= x; + this.d *= y; + this.e *= x; + this.f *= y; + return this; +}; + +Cut.Matrix.prototype.skew = function(x, y) { + if (!x && !y) { + return this; + } + this.changed = true; + var a = this.a + this.b * x; + var b = this.b + this.a * y; + var c = this.c + this.d * x; + var d = this.d + this.c * y; + var e = this.e + this.f * x; + var f = this.f + this.e * y; + this.a = a; + this.b = b; + this.c = c; + this.d = d; + this.e = e; + this.f = f; + return this; +}; + +Cut.Matrix.prototype.concat = function(m) { + this.changed = true; + var n = this; + var a = n.a * m.a + n.b * m.c; + var b = n.b * m.d + n.a * m.b; + var c = n.c * m.a + n.d * m.c; + var d = n.d * m.d + n.c * m.b; + var e = n.e * m.a + m.e + n.f * m.c; + var f = n.f * m.d + m.f + n.e * m.b; + this.a = a; + this.b = b; + this.c = c; + this.d = d; + this.e = e; + this.f = f; + return this; +}; + +Cut.Matrix.prototype.reverse = function() { + if (this.changed) { + this.changed = false; + this.reversed = this.reversed || new Cut.Matrix(); + var z = this.a * this.d - this.b * this.c; + this.reversed.a = this.d / z; + this.reversed.b = -this.b / z; + this.reversed.c = -this.c / z; + this.reversed.d = this.a / z; + this.reversed.e = (this.c * this.f - this.e * this.d) / z; + this.reversed.f = (this.e * this.b - this.a * this.f) / z; + } + return this.reversed; +}; + +Cut.Matrix.prototype.map = function(p, q) { + q = q || {}; + q.x = this.a * p.x + this.c * p.y + this.e; + q.y = this.b * p.x + this.d * p.y + this.f; + return q; +}; + +Cut.Matrix.prototype.mapX = function(x, y) { + return this.a * x + this.c * y + this.e; +}; + +Cut.Matrix.prototype.mapY = function(x, y) { + return this.b * x + this.d * y + this.f; +}; + +Cut.Math = {}; + +Cut.Math.random = function(min, max) { + if (arguments.length == 0) { + max = 1, min = 0; + } else if (arguments.length == 1) { + max = min, min = 0; + } + if (min == max) { + return min; + } + return Math.random() * (max - min) + min; +}; + +Cut.Math.rotate = function(num, min, max) { + if (arguments.length < 3) { + max = min || 0; + min = 0; + } + if (max > min) { + num = (num - min) % (max - min); + return num + (num < 0 ? max : min); + } else { + num = (num - max) % (min - max); + return num + (num <= 0 ? min : max); + } +}; + +Cut.Math.length = function(x, y) { + return Math.sqrt(x * x + y * y); +}; + +Cut._TS = 0; + +Cut._isCut = function(obj) { + return obj instanceof Cut; +}; + +Cut._isNum = function(x) { + return typeof x === "number"; +}; + +Cut._isFunc = function(x) { + return typeof x === "function"; +}; + +Cut._isArray = "isArray" in Array ? Array.isArray : function(value) { + return Object.prototype.toString.call(value) === "[object Array]"; +}; + +Cut._extend = function(base, extension, attribs) { + if (attribs) { + for (var i = 0; i < attribs.length; i++) { + var attr = attribs[i]; + base[attr] = extension[attr]; + } + } else { + for (var attr in extension) { + base[attr] = extension[attr]; + } + } + return base; +}; + +Cut._now = function() { + if (typeof performance !== "undefined" && performance.now) { + return function() { + return performance.now(); + }; + } else if (Date.now) { + return function() { + return Date.now(); + }; + } else { + return function() { + return +new Date(); + }; + } +}(); + +Cut._function = function(value) { + return typeof value === "function" ? value : function() { + return value; + }; +}; + +Cut._options = function(options) { + options.get = function(name) { + return typeof this[name] == "function" ? this[name]() : this[name]; + }; + options.extend = function(obj) { + obj = typeof obj === "object" ? obj : {}; + for (var name in this) { + obj[name] = name in obj ? obj[name] : this[name]; + } + return obj; + }; + options.mixin = function(obj) { + if (typeof obj === "object") { + for (var name in obj) { + this[name] = obj[name]; + } + } + return this; + }; + return options; +}; + +Cut._status = function(msg) { + if (!Cut._statusbox) { + var statusbox = Cut._statusbox = document.createElement("div"); + statusbox.style.position = "absolute"; + statusbox.style.color = "black"; + statusbox.style.background = "white"; + statusbox.style.zIndex = 999; + statusbox.style.top = "5px"; + statusbox.style.right = "5px"; + statusbox.style.padding = "1px 5px"; + document.body.appendChild(statusbox); + } + Cut._statusbox.innerHTML = msg; +}; + +Cut.Easing = function() { + function identity(t) { + return t; + } + var easings = {}, modes = {}; + function select(token) { + if (typeof token === "function") { + return token; + } + if (typeof token !== "string") { + return identity; + } + var match = /^(\w+)(-(in|out|in-out|out-in))?(\((.*)\))?$/i.exec(token); + if (!match || !match.length) { + return identity; + } + var name = match[1] || "", mode = match[3] || "in", params = match[5]; + mode = modes[mode]; + params = params ? params.replace(/\s+/, "").split(",") : []; + var easing = easings[name]; + var fn = easing ? easing.fn || easing.fc.apply(easing.fc, params) : identity; + return mode ? mode(fn) : fn; + } + select.addMode = function(mode) { + var names = mode.name.split(/\s+/); + for (var i = 0; i < names.length; i++) { + names[i] && (modes[names[i]] = mode.fn); + } + }; + select.add = function(easing) { + var names = easing.name.split(/\s+/); + for (var i = 0; i < names.length; i++) { + names[i] && (easings[names[i]] = easing); + } + }; + return select; +}(); + +Cut.Easing.addMode({ + name: "in", + fn: function(f) { + return function(t) { + return f(t); + }; + } +}); + +Cut.Easing.addMode({ + name: "out", + fn: function(f) { + return function(t) { + return 1 - f(1 - t); + }; + } +}); + +Cut.Easing.addMode({ + name: "in-out", + fn: function(f) { + return function(t) { + return t < .5 ? f(2 * t) / 2 : 1 - f(2 * (1 - t)) / 2; + }; + } +}); + +Cut.Easing.addMode({ + name: "out-in", + fn: function(f) { + return function(t) { + return t < .5 ? 1 - f(2 * (1 - t)) / 2 : f(2 * t) / 2; + }; + } +}); + +Cut.Easing.add({ + name: "linear", + fn: function(t) { + return t; + } +}); + +Cut.Easing.add({ + name: "quad", + fn: function(t) { + return t * t; + } +}); + +Cut.Easing.add({ + name: "cubic", + fn: function(t) { + return t * t * t; + } +}); + +Cut.Easing.add({ + name: "quart", + fn: function(t) { + return t * t * t * t; + } +}); + +Cut.Easing.add({ + name: "quint", + fn: function(t) { + return t * t * t * t * t; + } +}); + +Cut.Easing.add({ + name: "sin sine", + fn: function(t) { + return 1 - Math.cos(t * Math.PI / 2); + } +}); + +Cut.Easing.add({ + name: "exp", + fn: function(t) { + return t == 0 ? 0 : Math.pow(2, 10 * (t - 1)); + } +}); + +Cut.Easing.add({ + name: "circle circ", + fn: function(t) { + return 1 - Math.sqrt(1 - t * t); + } +}); + +Cut.Easing.add({ + name: "bounce", + fn: function(t) { + return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375; + } +}); + +Cut.Easing.add({ + name: "poly", + fc: function(e) { + return function(t) { + return Math.pow(t, e); + }; + } +}); + +Cut.Easing.add({ + name: "elastic", + fc: function(a, p) { + p = p || .45; + a = a || 1; + var s = p / (2 * Math.PI) * Math.asin(1 / a); + return function(t) { + return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p); + }; + } +}); + +Cut.Easing.add({ + name: "back", + fc: function(s) { + s = arguments.length ? s : 1.70158; + return function(t) { + return t * t * ((s + 1) * t - s); + }; + } +}); + +if (typeof module !== "undefined") { + module.exports = Cut; +} + +if (typeof Cut === "undefined" && typeof require === "function") Cut = require("./cut-core"); + +DEBUG = (typeof DEBUG === "undefined" || DEBUG) && console; + +/** + * Default loader for web. + */ +window.addEventListener("load", function() { + DEBUG && console.log("On load."); + Cut.Loader.start(); +}, false); + +Cut.Loader.init = function(app, configs) { + configs = configs || {}; + var canvas = configs.canvas, context = null, full = false; + var width = 0, height = 0, ratio = 1; + if (typeof canvas === "string") { + canvas = document.getElementById(canvas); + } + if (!canvas) { + canvas = document.getElementById("cutjs"); + } + if (!canvas) { + full = true; + DEBUG && console.log("Creating element..."); + canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + var body = document.body; + body.insertBefore(canvas, body.firstChild); + } + context = canvas.getContext("2d"); + var devicePixelRatio = window.devicePixelRatio || 1; + var backingStoreRatio = context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; + ratio = devicePixelRatio / backingStoreRatio; + var requestAnimationFrame = window.requestAnimationFrame || window.msRequestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.oRequestAnimationFrame || function(callback) { + return window.setTimeout(callback, 1e3 / 60); + }; + DEBUG && console.log("Creating root..."); + var root = Cut.root(requestAnimationFrame, function() { + context.setTransform(1, 0, 0, 1, 0, 0); + context.clearRect(0, 0, width, height); + this.render(context); + }); + app(root, canvas); + resize(); + window.addEventListener("resize", resize, false); + function resize() { + if (full) { + width = window.innerWidth > 0 ? window.innerWidth : screen.width; + height = window.innerHeight > 0 ? window.innerHeight : screen.height; + canvas.style.width = width + "px"; + canvas.style.height = height + "px"; + } else { + width = canvas.clientWidth; + height = canvas.clientHeight; + } + width *= ratio; + height *= ratio; + canvas.width = width; + canvas.height = height; + DEBUG && console.log("Resize: " + width + " x " + height + " / " + ratio); + root.resize(width, height, ratio); + } + return root; +}; + +Cut.Loader.loadImage = function(src, handleComplete, handleError) { + var image = new Image(); + DEBUG && console.log("Loading image: " + src); + image.onload = handleComplete; + image.onerror = handleError; + image.src = src; + return image; +}; + +if (typeof Cut === "undefined" && typeof require === "function") Cut = require("./cut-core"); + +DEBUG = (typeof DEBUG === "undefined" || DEBUG) && console; + +Cut.Mouse = function() { + Cut.Mouse.subscribe.apply(Cut.Mouse, arguments); +}; + +Cut.Mouse.CLICK = "click"; + +Cut.Mouse.START = "touchstart mousedown"; + +Cut.Mouse.MOVE = "touchmove mousemove"; + +Cut.Mouse.END = "touchend mouseup"; + +Cut.Mouse.subscribe = function(root, elem, move) { + elem = elem || document; + elem.addEventListener("click", mouseClick); + // TODO: with 'if' mouse doesn't work on touch screen, without 'if' two events + // on Android + if ("ontouchstart" in window) { + elem.addEventListener("touchstart", function(event) { + mouseStart(event, "touchmove"); + }); + elem.addEventListener("touchend", function(event) { + mouseEnd(event, "touchmove"); + }); + move && elem.addEventListener("touchmove", mouseMove); + } else { + elem.addEventListener("mousedown", function(event) { + mouseStart(event, "mousemove"); + }); + elem.addEventListener("mouseup", function(event) { + mouseEnd(event, "mousemove"); + }); + move && elem.addEventListener("mousemove", mouseMove); + } + var visitor = null; + var abs = { + x: 0, + y: 0, + toString: function() { + return (this.x | 0) + "x" + (this.y | 0); + } + }; + var rel = { + x: 0, + y: 0, + toString: function() { + return abs + " / " + (this.x | 0) + "x" + (this.y | 0); + } + }; + var clicked = { + x: 0, + y: 0, + state: 0 + }; + function mouseStart(event, moveName) { + update(event, elem); + DEBUG && console.log("Mouse Start: " + event.type + " " + abs); + !move && elem.addEventListener(moveName, mouseMove); + event.preventDefault(); + publish(event.type, event); + clicked.x = abs.x; + clicked.y = abs.y; + clicked.state = 1; + } + function mouseEnd(event, moveName) { + try { + // New xy is not valid/available, last xy is used instead. + DEBUG && console.log("Mouse End: " + event.type + " " + abs); + !move && elem.removeEventListener(moveName, mouseMove); + event.preventDefault(); + publish(event.type, event); + if (clicked.state == 1 && clicked.x == abs.x && clicked.y == abs.y) { + DEBUG && console.log("Mouse Click [+]"); + publish("click", event); + clicked.state = 2; + } else { + clicked.state = 0; + } + } catch (e) { + console && console.log(e); + } + } + function mouseMove(event) { + try { + update(event, elem); + // DEBUG && console.log('Mouse Move: ' + event.type + ' ' + + // abs); + event.preventDefault(); + publish(event.type, event); + } catch (e) { + console && console.log(e); + } + } + function mouseClick(event) { + try { + update(event, elem); + DEBUG && console.log("Mouse Click: " + event.type + " " + abs); + event.preventDefault(); + if (clicked.state != 2) { + publish(event.type, event); + } else { + DEBUG && console.log("Mouse Click [-]"); + } + } catch (e) { + console && console.log(e); + } + } + function publish(type, event) { + abs.type = type; + abs.event = event; + rel.x = abs.x; + rel.y = abs.y; + // visitor.count = 0; + root.visit(visitor); + } + visitor = { + reverse: true, + visible: true, + start: function(cut) { + if (!cut._listens(abs.type)) { + return true; + } + }, + end: function(cut) { + // visitor.count++; + var listeners = cut.listeners(abs.type); + if (!listeners) { + return; + } + cut.matrix().reverse().map(abs, rel); + if (cut === root || cut.attr("spy")) {} else if (rel.x < 0 || rel.x > cut._pin._width || rel.y < 0 || rel.y > cut._pin._height) { + return; + } + rel.raw = abs.event; + for (var l = 0; l < listeners.length; l++) { + if (listeners[l].call(cut, rel)) { + return; + } + } + } + }; + function update(event, elem) { + var isTouch = false; + // touch screen events + if (event.touches) { + if (event.touches.length) { + isTouch = true; + abs.x = event.touches[0].pageX; + abs.y = event.touches[0].pageY; + } else { + return; + } + } else { + // mouse events + abs.x = event.clientX; + abs.y = event.clientY; + // See http://goo.gl/JuVnF2 + if (document.body.scrollLeft || document.body.scrollTop) {} else if (document.documentElement) { + abs.x += document.documentElement.scrollLeft; + abs.y += document.documentElement.scrollTop; + } + } + // accounts for border + abs.x -= elem.clientLeft || 0; + abs.y -= elem.clientTop || 0; + var par = elem; + while (par) { + abs.x -= par.offsetLeft || 0; + abs.y -= par.offsetTop || 0; + if (!isTouch) { + // touch events offset scrolling with pageX/Y + // so scroll offset not needed for them + abs.x += par.scrollLeft || 0; + abs.y += par.scrollTop || 0; + } + par = par.offsetParent; + } + // see loader + abs.x *= root._ratio || 1; + abs.y *= root._ratio || 1; + } +}; + +if (typeof define === 'function' && define.amd) { // AMD + define('Cut', [], function() { + return Cut; + }); +} \ No newline at end of file diff --git a/ajax/libs/cutjs/0.2.1/cut.cordova.min.js b/ajax/libs/cutjs/0.2.1/cut.cordova.min.js new file mode 100644 index 000000000..4aa20c395 --- /dev/null +++ b/ajax/libs/cutjs/0.2.1/cut.cordova.min.js @@ -0,0 +1,8 @@ +/* + * CutJS 0.2.1 + * Copyright (c) 2013-2014 Ali Shakiba, Piqnt LLC and other contributors + * Available under the MIT license + * @license + */ +function Cut(){if(!(this instanceof Cut)){if("function"==typeof arguments[0])return Cut.Loader.load.apply(Cut.Loader,arguments);if("object"==typeof arguments[0])return Cut.Texture.add.apply(Cut.Texture,arguments)}Cut._stats.create++,this._id="",this._visible=!0,this._parent=null,this._next=null,this._prev=null,this._first=null,this._last=null,this._pin=new Cut.Pin(this),this._cutouts=[],this._tickBefore=[],this._tickAfter=[],this._alpha=1}DEBUG=("undefined"==typeof DEBUG||DEBUG)&&console,Cut._create=function(){if("function"==typeof Object.create)return function(){return Object.create.apply(null,arguments)};var t=function(){};return function(i){if(arguments.length>1)throw Error("Second argument is not supported!");if(null===i||"object"!=typeof i)throw Error("Invalid prototype!");return t.prototype=i,new t}}(),Cut._stats={create:0,tick:0,paint:0,paste:0},Cut.create=function(){return new Cut},Cut.prototype.render=function(t){Cut._stats.tick=Cut._stats.paint=Cut._stats.paste=0;var i=Cut._now(),e=this._lastTime?i-this._lastTime:0;this._lastTime=i,this._tick(e),this._paint(t),Cut._stats.fps=1e3/(Cut._now()-i)},Cut.prototype.MAX_ELAPSE=1/0,Cut.prototype._tick=function(t){if(this._visible){t>this.MAX_ELAPSE&&(t=this.MAX_ELAPSE),this._pin.tick();for(var i=this._tickBefore.length,e=0;i>e;e++)Cut._stats.tick++,this._tickBefore[e].call(this,t);for(var s,n=this._first;s=n;)n=s._next,s._tick(t);for(var i=this._tickAfter.length,e=0;i>e;e++)Cut._stats.tick++,this._tickAfter[e].call(this,t)}},Cut.prototype.tick=function(t,i){i?this._tickBefore.push(t):this._tickAfter.push(t)},Cut.prototype.untick=function(t){var i;t&&((i=this._tickBefore.indexOf(t))>=0?this._tickBefore.splice(i,1):(i=this._tickAfter.indexOf(t))>=0&&this._tickAfter.splice(i,1))},Cut.prototype._paint=function(t){if(this._visible){Cut._stats.paint++;var i=this._pin.absoluteMatrix();t.setTransform(i.a,i.b,i.c,i.d,i.e,i.f),this._alpha=this._pin._alpha*(this._parent?this._parent._alpha:1);var e=this._pin._textureAlpha*this._alpha;t.globalAlpha!=e&&(t.globalAlpha=e);for(var s=this._cutouts.length,n=0;s>n;n++)this._cutouts[n].paste(t);t.globalAlpha!=this._alpha&&(t.globalAlpha=this._alpha);for(var r,o=this._first;r=o;)o=r._next,r._paint(t)}},Cut.prototype.toString=function(){return"["+this._id+"]"},Cut.prototype.id=function(t){return arguments.length?(this._id=t,this):this._id},Cut.prototype.attr=function(t,i){return arguments.length<2?this._attrs?this._attrs[t]:void 0:((this._attrs?this._attrs:this._attrs={})[t]=i,this)},Cut.prototype.on=Cut.prototype.listen=function(t,i){if("function"!=typeof i)return this;t=(Cut._isArray(t)?t.join(" "):t).split(/\s+/);for(var e=0;e0&&this._listenOn(i)},Cut.prototype._listenOff=function(t){if("string"==typeof t)this._listenersCount=this._listenersCount||{},1==this._listenersCount[t]&&this._parent&&this._parent._listenOff(t),this._listenersCount[t]=Math.max((this._listenersCount[t]||0)-1,0);else if("object"==typeof t&&t._listenersCount)for(var i in t._listenersCount)t._listenersCount[i]>0&&this._listenOff(i)},Cut.prototype._listens=function(t){return this._listenersCount&&this._listenersCount[t]||0},Cut.prototype.touch=function(){return this._ts_touch=Cut._TS++,this._parent&&this._parent.touch(),this},Cut.prototype.pin=function(){if(!arguments.length)return this._pin;var t=this._pin.update.apply(this._pin,arguments);return t===this._pin?this:t},Cut.prototype.matrix=function(){return this._pin.absoluteMatrix(this,this._parent?this._parent._pin:null)},Cut.prototype.tween=function(t,i){return(this._tween||(this._tween=new Cut.Tween(this))).tween(t,i)},Cut.Tween=function(t){var i=this;this._owner=t,this._queue=[],this._next=null,t.tick(function(e){if(i._queue.length){this.touch();var s=i._queue[0];if(s.time?s.time+=e:s.time=1,!(s.time=1;r=r>1?1:r,r="function"==typeof s.easing?s.easing(r):r;var h=1-r;for(var n in s.keys)t.pin(n,s.start[n]*h+s.end[s.keys[n]]*r);o&&(i._queue.shift(),s.then&&s.then.call(t))}}},!0)},Cut.Tween.prototype.tween=function(t,i){return this._next={id:Cut._TS++,end:{},duration:t||400,delay:i||0},this},Cut.Tween.prototype.pin=function(){this._next!==this._queue[this._queue.length-1]&&(this._owner.touch(),this._queue.push(this._next));var t=this._next.end;return 1===arguments.length?Cut._extend(t,arguments[0]):2===arguments.length&&(t[arguments[0]]=arguments[1]),this},Cut.Tween.prototype.clear=function(t){for(var i;i=this._queue.shift();)t&&this._owner.pin(i.end);return this},Cut.Tween.prototype.then=function(t){return this._next.then=t,this},Cut.Tween.prototype.ease=function(t){return this._next.easing=Cut.Easing(t),this},Cut.root=function(t,i){return new Cut.Root(t,i)},Cut.Root=function(t,i){Cut.String.prototype._super.apply(this,arguments),this._paused=!0,this._render=i,this._request=t;var e=this,s=function(){e._paused!==!0&&(e._mo_touch=e._ts_touch,e._render(),e.request(),e._mo_touch==e._ts_touch&&e.pause())};this.request=function(){this._request.call(null,s)},this.on("viewport",function(t){return this._size={width:t.width,height:t.height},this._updateViewbox(),!0})},Cut.Root.prototype=Cut._create(Cut.prototype),Cut.Root.prototype._super=Cut,Cut.Root.prototype.constructor=Cut.Root,Cut.Root.prototype.viewbox=function(t,i,e){return this._viewbox={width:t,height:i,mode:/^(in|out)$/.test(e)?e:"in"},this._updateViewbox(),this},Cut.Root.prototype._updateViewbox=function(){var t=this._viewbox,i=this._size;i&&this.pin(t?{width:t.width,height:t.height,resizeMode:t.mode,resizeWidth:i.width,resizeHeight:i.height}:{width:i.width,height:i.height})},Cut.Root.prototype.start=function(){return this.resume()},Cut.Root.prototype.resume=function(t){return(this._paused||t)&&(this._paused=!1,this.request()),this},Cut.Root.prototype.pause=function(){return this._paused=!0,this},Cut.Root.prototype.touch=function(){return this.resume(),Cut.prototype.touch.apply(this,arguments)},Cut.Root.prototype.resize=function(t,i,e){this._ratio=e||1;var s={};return s.width=t,s.height=i,s.ratio=e,this.visit({start:function(t){return t._listens("viewport")?void t.publish("viewport",[s]):!0}}),this},Cut.image=function(t){var i=new Cut.Image;return t&&i.image(t),i},Cut.Image=function(){Cut.Image.prototype._super.apply(this,arguments)},Cut.Image.prototype=Cut._create(Cut.prototype),Cut.Image.prototype._super=Cut,Cut.Image.prototype.constructor=Cut.Image,Cut.Image.prototype.setImage=function(){this.image.apply(this,arguments)},Cut.Image.prototype.image=function(t){return this._cutouts[0]=Cut.Out.select(t),this._cutouts.length=1,this.pin({width:this._cutouts[0]?this._cutouts[0].dWidth():0,height:this._cutouts[0]?this._cutouts[0].dHeight():0}),this._cutout=this._cutouts[0].clone(),this},Cut.Image.prototype.cropX=function(t,i){return this.image(this._cutouts[0].cropX(t,i))},Cut.Image.prototype.cropY=function(t,i){return this.image(this._cutouts[0].cropY(t,i))},Cut.Image.prototype._slice=function(t){return this._cutouts[t]||(this._cutouts[t]=this._cutout.clone())},Cut.Image.prototype.tile=function(t){return this.untick(this._repeatTicker),this._repeatTicker=function(){if(this._mo_tile!=this._ts_touch){this._mo_tile=this._ts_touch;var i=this._cutout._left,e=this._cutout._right,s=this._cutout._top,n=this._cutout._bottom,r=this._cutout.dWidth()-i-e,o=this._cutout.dHeight()-s-n,h=this.pin("width");h=t?h:h-i-e;var u=this.pin("height");u=t?u:u-s-n;var a=t?-i:0,_=t?-s:0,c=0;s&&i&&this._slice(c++).cropX(i,0).cropY(s,0).offset(a,_),n&&i&&this._slice(c++).cropX(i,0).cropY(n,o+s).offset(a,_+u+s),s&&e&&this._slice(c++).cropX(e,r+i).cropY(s,0).offset(a+h+i,_),n&&e&&this._slice(c++).cropX(e,r+i).cropY(n,o+s).offset(a+h+i,_+u+s);for(var f=a+i,p=h;p>0;){var l=Math.min(r,p);p-=r;for(var d=_+s,g=u;g>0;){var m=Math.min(o,g);g-=o,this._slice(c++).cropX(l,i).cropY(m,s).offset(f,d),0>=p&&(i&&this._slice(c++).cropX(i,0).cropY(m,s).offset(a,d),e&&this._slice(c++).cropX(e,r+i).cropY(m,s).offset(f+l,d)),d+=m}s&&this._slice(c++).cropX(l,i).cropY(s,0).offset(f,_),n&&this._slice(c++).cropX(l,i).cropY(n,o+s).offset(f,d),f+=l}this._cutouts.length=c}},this.tick(this._repeatTicker),this},Cut.Image.prototype.stretch=function(t){return this.untick(this._repeatTicker),this._repeatTicker=function(){if(this._mo_stretch!=this._pin._ts_transform){this._mo_stretch=this._pin._ts_transform;var i=this._cutout._left,e=this._cutout._right,s=this._cutout._top,n=this._cutout._bottom,r=this._cutout.dWidth(),o=this._cutout.dHeight(),h=this.pin("width"),u=this.pin("height");h=t?h+i+e:Math.max(h,i+e),u=t?u+s+n:Math.max(u,s+n);var a=0;s&&i&&this._slice(a++).cropX(i,0).cropY(s,0).offset(0,0),n&&i&&this._slice(a++).cropX(i,0).cropY(n,o-n).offset(0,u-n),s&&e&&this._slice(a++).cropX(e,r-e).cropY(s,0).offset(h-e,0),n&&e&&this._slice(a++).cropX(e,r-e).cropY(n,o-n).offset(h-e,u-n),s&&this._slice(a++).cropX(r-i-e,i).cropY(s,0).offset(i,0).dWidth(h-i-e),n&&this._slice(a++).cropX(r-i-e,i).cropY(n,o-n).offset(i,u-n).dWidth(h-i-e),i&&this._slice(a++).cropX(i,0).cropY(o-s-n,s).offset(0,s).dHeight(u-s-n),e&&this._slice(a++).cropX(e,r-e).cropY(o-s-n,s).offset(h-e,s).dHeight(u-s-n),this._slice(a++).cropX(r-i-e,i).cropY(o-s-n,s).offset(i,s).dWidth(h-i-e).dHeight(u-s-n),this._cutouts.length=a}},this.tick(this._repeatTicker),this},Cut.anim=function(t,i){var e=(new Cut.Anim).frames(t).gotoFrame(0);return i&&e.fps(i),e},Cut.Anim=function(){Cut.Anim.prototype._super.apply(this,arguments),this._fps=Cut.Anim.FPS,this._ft=1e3/this._fps,this._time=0,this._frame=0,this._frames=[],this._labels={},this.tick(function(){if(this._time&&this._frames.length>1){var t=Cut._now()-this._time;if(t>=this._ft){var i=t<2*this._ft?1:Math.floor(t/this._ft);this._time+=i*this._ft,this.moveFrame(i),this._repeat&&(this._repeat-=i)<=0&&(this.stop(),this._callback&&this._callback())}this.touch()}},!1)},Cut.Anim.prototype=Cut._create(Cut.prototype),Cut.Anim.prototype._super=Cut,Cut.Anim.prototype.constructor=Cut.Anim,Cut.Anim.FPS=22,Cut.Anim.prototype.fps=function(t){return arguments.length?(this._fps=t||Cut.Anim.FPS,this._ft=1e3/this._fps,this):this._fps},Cut.Anim.prototype.setFrames=function(){this.frames.apply(this,arguments)},Cut.Anim.prototype.frames=function(t){if(this._time=this._time||0,this._frame=0,this._frames=[],this._labels={},t=Cut.Out.select(t,!0),t&&t.length)for(var i=0;i=0;t--)e[t].pause()},resume:function(){for(var t=i.length-1;t>=0;t--)e[t].resume()},getImage:function(t){return s[t]},addImage:function(t,i){return s[i]=t,this}}}(),Cut.Texture=function(t){function i(){return r||(r=Cut.Loader.getImage(t.imagePath)),r}function e(i){if(!i||i.isCutout)return i;"function"==typeof t.map?i=t.map(i):"function"==typeof t.filter&&(i=t.filter(i));var e=t.ratio||1;1!=e&&(i.x*=e,i.y*=e,i.width*=e,i.height*=e,i.top*=e,i.bottom*=e,i.left*=e,i.right*=e);var s=t.trim||0;return s&&(i.x+=s,i.y+=s,i.width-=2*s,i.height-=2*s,i.top-=s,i.bottom-=s,i.left-=s,i.right-=s),i}function s(e){return e.isCutout||(e=new Cut.Out(e,i,t.imageRatio)),e}t.cutouts=t.cutouts||[];var n={},r=null;this.getImagePath=function(){return t.imagePath};for(var o=0;oe)throw"Invalid selector: '"+t+"'";var s=[t.slice(0,e),t.slice(e+1)],n=Cut.Texture._list[s[0]];if(null==n)throw"Texture not found: '"+t+"'";return n.select(s[1],i)},Cut.drawing=function(){return Cut.image(Cut.Out.drawing.apply(Cut.Out,arguments))},Cut.Out.drawing=function(){var t=document.createElement("canvas"),i=t.getContext("2d"),e={},s=0;"object"==typeof arguments[s]?e=arguments[s++]:("string"==typeof arguments[s]&&(e.name=arguments[s++]),e.width=arguments[s++],e.height=arguments[s++],"number"==typeof arguments[s]&&(e.ratio=arguments[s++]),e.x=0,e.y=0),e.ratio=e.ratio||1,e.name=e.name||1e3*Math.random()|0,t.width=Math.ceil(e.width*e.ratio),t.height=Math.ceil(e.height*e.ratio);var n=new Cut.Out(e,t,e.ratio);return"function"==typeof arguments[arguments.length-1]&&arguments[arguments.length-1].call(n,i,e.ratio),n},Cut.Pin=function(t){this._owner=t,this._parent=null,this._relativeMatrix=new Cut.Matrix,this._absoluteMatrix=new Cut.Matrix,this.reset()},Cut.Pin.prototype.reset=function(){this._textureAlpha=1,this._alpha=1,this._width=0,this._height=0,this._scaleX=1,this._scaleY=1,this._skewX=0,this._skewY=0,this._rotation=0,this._pivoted=!1,this._pivotX=null,this._pivotY=null,this._handled=!1,this._handleX=0,this._handleY=0,this._aligned=!1,this._alignX=0,this._alignY=0,this._offsetX=0,this._offsetY=0,this._boxX=0,this._boxY=0,this._boxWidth=this._width,this._boxHeight=this._height,this._ts_translate=Cut._TS++,this._ts_transform=Cut._TS++,this._ts_matrix=Cut._TS++},Cut.Pin.prototype.tick=function(){return this._parent=this._owner._parent&&this._owner._parent._pin,this._handled&&this._mo_handle!=this._ts_transform&&(this._mo_handle=this._ts_transform,this._ts_translate=Cut._TS++),this._aligned&&this._parent&&this._mo_align!=this._parent._ts_transform&&(this._mo_align=this._parent._ts_transform,this._ts_translate=Cut._TS++),this},Cut.Pin.prototype.toString=function(){return this._owner.id()+" ["+this._alignX+", "+this._alignY+"] ["+this._handleX+", "+this._handleY+"] ["+(this._parent?this._parent._owner.id():null)+"]"},Cut.Pin.prototype.absoluteMatrix=function(){var t=Math.max(this._ts_transform,this._ts_translate,this._parent?this._parent._ts_matrix:0);if(this._mo_abs==t)return this._absoluteMatrix;this._mo_abs=t;var i=this._absoluteMatrix;return i.copyFrom(this.relativeMatrix()),this._parent&&i.concat(this._parent._absoluteMatrix),this._ts_matrix=Cut._TS++,i},Cut.Pin.prototype.relativeMatrix=function(){var t=Math.max(this._ts_transform,this._ts_translate,this._parent?this._parent._ts_transform:0);if(this._mo_rel==t)return this._relativeMatrix;this._mo_rel=t;var i=this._relativeMatrix;if(i.identity(),this._pivoted&&i.translate(-this._pivotX*this._width,-this._pivotY*this._height),i.scale(this._scaleX,this._scaleY),i.skew(this._skewX,this._skewY),i.rotate(this._rotation),this._pivoted&&i.translate(this._pivotX*this._width,this._pivotY*this._height),this._pivoted)this._boxX=0,this._boxY=0,this._boxWidth=this._width,this._boxHeight=this._height;else{var e,s,n=i;n.a>0&&n.c>0||n.a<0&&n.c<0?(e=0,s=n.a*this._width+n.c*this._height):(e=n.a*this._width,s=n.c*this._height),e>s?(this._boxX=s,this._boxWidth=e-s):(this._boxX=e,this._boxWidth=s-e),n.b>0&&n.d>0||n.b<0&&n.d<0?(e=0,s=n.b*this._width+n.d*this._height):(e=n.b*this._width,s=n.d*this._height),e>s?(this._boxY=s,this._boxHeight=e-s):(this._boxY=e,this._boxHeight=s-e)}return this._x=this._offsetX,this._y=this._offsetY,this._x-=this._boxX+this._handleX*this._boxWidth,this._y-=this._boxY+this._handleY*this._boxHeight,this._aligned&&this._parent&&(this._parent.relativeMatrix(),this._x+=this._alignX*this._parent._width,this._y+=this._alignY*this._parent._height),i.translate(this._x,this._y),this._relativeMatrix},Cut.Pin._SINGLE={},Cut.Pin.prototype.update=function(){if(1==arguments.length&&"string"==typeof arguments[0])return this["_"+arguments[0]];this._transform_flag=!1,this._translate_flag=!1;var t=null,i=null,e=null;if(2==arguments.length&&"string"==typeof arguments[0]){for(i in Cut.Pin._SINGLE)delete Cut.Pin._SINGLE[i];(t=Cut.Pin._SINGLE)[arguments[0]]=arguments[1]}else 1==arguments.length&&"object"==typeof arguments[0]&&(t=arguments[0]);if(t)for(i in t)"undefined"!=typeof(e=t[i])&&(setter=Cut.Pin._setters[i])&&setter.call(Cut.Pin._setters,this,e,t);return this._translate_flag&&(this._translate_flag=!1,this._ts_translate=Cut._TS++),this._transform_flag&&(this._transform_flag=!1,this._ts_transform=Cut._TS++),this._owner&&(this._owner._ts_pin=Cut._TS++,this._owner.touch()),this},Cut.Pin._setters={alpha:function(t,i){t._alpha=i},textureAlpha:function(t,i){t._textureAlpha=i},width:function(t,i){t._width_=i,t._width=i,t._transform_flag=!0},height:function(t,i){t._height_=i,t._height=i,t._transform_flag=!0},scale:function(t,i){t._scaleX=i,t._scaleY=i,t._transform_flag=!0},scaleX:function(t,i){t._scaleX=i,t._transform_flag=!0},scaleY:function(t,i){t._scaleY=i,t._transform_flag=!0},skew:function(t,i){t._skewX=i,t._skewY=i,t._transform_flag=!0},skewX:function(t,i){t._skewX=i,t._transform_flag=!0},skewY:function(t,i){t._skewY=i,t._transform_flag=!0},rotation:function(t,i){t._rotation=i,t._transform_flag=!0},pivot:function(t,i){t._pivotX=i,t._pivotY=i,t._pivoted=!0,t._transform_flag=!0},pivotX:function(t,i){t._pivotX=i,t._pivoted=!0,t._transform_flag=!0},pivotY:function(t,i){t._pivotY=i,t._pivoted=!0,t._transform_flag=!0},offset:function(t,i){t._offsetX=i,t._offsetY=i,t._translate_flag=!0},offsetX:function(t,i){t._offsetX=i,t._translate_flag=!0},offsetY:function(t,i){t._offsetY=i,t._translate_flag=!0},align:function(){this.alignX.apply(this,arguments),this.alignY.apply(this,arguments)},alignX:function(t,i,e){t._alignX=i,t._aligned=!0,t._translate_flag=!0,this.handleX(t,i,e)},alignY:function(t,i,e){t._alignY=i,t._aligned=!0,t._translate_flag=!0,this.handleY(t,i,e)},handle:function(t,i,e){this.handleX(t,i,e),this.handleY(t,i,e)},handleX:function(t,i){t._handleX=i,t._handled=!0,t._translate_flag=!0},handleY:function(t,i){t._handleY=i,t._handled=!0,t._translate_flag=!0},resizeMode:function(t,i,e){Cut._isNum(e.resizeWidth)&&Cut._isNum(e.resizeHeight)&&(this.resizeWidth(t,e.resizeWidth,e,!0),this.resizeHeight(t,e.resizeHeight,e,!0),"out"==i?t._scaleX=t._scaleY=Math.max(t._scaleX,t._scaleY):"in"==i&&(t._scaleX=t._scaleY=Math.min(t._scaleX,t._scaleY)),t._width=e.resizeWidth/t._scaleX,t._height=e.resizeHeight/t._scaleY)},resizeWidth:function(t,i,e,s){(!e.resizeMode||s)&&(t._scaleX=i/t._width_,t._width=t._width_,t._transform_flag=!0)},resizeHeight:function(t,i,e,s){(!e.resizeMode||s)&&(t._scaleY=i/t._height_,t._height=t._height_,t._transform_flag=!0)},scaleMode:function(t,i,e){Cut._isNum(e.scaleWidth)&&Cut._isNum(e.scaleHeight)&&(this.scaleWidth(t,e.scaleWidth,e,!0),this.scaleHeight(t,e.scaleHeight,e,!0),"out"==i?t._scaleX=t._scaleY=Math.max(t._scaleX,t._scaleY):"in"==i&&(t._scaleX=t._scaleY=Math.min(t._scaleX,t._scaleY)))},scaleWidth:function(t,i,e,s){(!e.scaleMode||s)&&(t._scaleX=i/t._width_,t._transform_flag=!0)},scaleHeight:function(t,i,e,s){(!e.scaleMode||s)&&(t._scaleY=i/t._height_,t._transform_flag=!0)},matrix:function(t,i,e){this.scaleX(t,i.a,e),this.skewX(t,i.c/i.d,e),this.skewY(t,i.b/i.a,e),this.scaleY(t,i.d,e),this.offsetX(t,i.e,e),this.offsetY(t,i.f,e),this.rotation(t,0,e)}},Cut.Matrix=function(t,i,e,s,n,r){this.changed=!0,this.a=t||1,this.b=i||0,this.c=e||0,this.d=s||1,this.e=n||0,this.f=r||0},Cut.Matrix.prototype.toString=function(){return"["+this.a+", "+this.b+", "+this.c+", "+this.d+", "+this.e+", "+this.f+"]"},Cut.Matrix.prototype.clone=function(){return new Cut.Matrix(this.a,this.b,this.c,this.d,this.e,this.f)},Cut.Matrix.prototype.copyTo=function(t){return t.copyFrom(this),this},Cut.Matrix.prototype.copyFrom=function(t){return this.changed=!0,this.a=t.a,this.b=t.b,this.c=t.c,this.d=t.d,this.e=t.e,this.f=t.f,this},Cut.Matrix.prototype.identity=function(){return this.changed=!0,this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0,this},Cut.Matrix.prototype.rotate=function(t){if(!t)return this;this.changed=!0;var i=t?Math.cos(t):1,e=t?Math.sin(t):0,s=i*this.a-e*this.b,n=i*this.b+e*this.a,r=i*this.c-e*this.d,o=i*this.d+e*this.c,h=i*this.e-e*this.f,u=i*this.f+e*this.e;return this.a=s,this.b=n,this.c=r,this.d=o,this.e=h,this.f=u,this},Cut.Matrix.prototype.translate=function(t,i){return t||i?(this.changed=!0,this.e+=t,this.f+=i,this):this},Cut.Matrix.prototype.scale=function(t,i){return t-1||i-1?(this.changed=!0,this.a*=t,this.b*=i,this.c*=t,this.d*=i,this.e*=t,this.f*=i,this):this},Cut.Matrix.prototype.skew=function(t,i){if(!t&&!i)return this;this.changed=!0;var e=this.a+this.b*t,s=this.b+this.a*i,n=this.c+this.d*t,r=this.d+this.c*i,o=this.e+this.f*t,h=this.f+this.e*i;return this.a=e,this.b=s,this.c=n,this.d=r,this.e=o,this.f=h,this},Cut.Matrix.prototype.concat=function(t){this.changed=!0;var i=this,e=i.a*t.a+i.b*t.c,s=i.b*t.d+i.a*t.b,n=i.c*t.a+i.d*t.c,r=i.d*t.d+i.c*t.b,o=i.e*t.a+t.e+i.f*t.c,h=i.f*t.d+t.f+i.e*t.b;return this.a=e,this.b=s,this.c=n,this.d=r,this.e=o,this.f=h,this},Cut.Matrix.prototype.reverse=function(){if(this.changed){this.changed=!1,this.reversed=this.reversed||new Cut.Matrix; +var t=this.a*this.d-this.b*this.c;this.reversed.a=this.d/t,this.reversed.b=-this.b/t,this.reversed.c=-this.c/t,this.reversed.d=this.a/t,this.reversed.e=(this.c*this.f-this.e*this.d)/t,this.reversed.f=(this.e*this.b-this.a*this.f)/t}return this.reversed},Cut.Matrix.prototype.map=function(t,i){return i=i||{},i.x=this.a*t.x+this.c*t.y+this.e,i.y=this.b*t.x+this.d*t.y+this.f,i},Cut.Matrix.prototype.mapX=function(t,i){return this.a*t+this.c*i+this.e},Cut.Matrix.prototype.mapY=function(t,i){return this.b*t+this.d*i+this.f},Cut.Math={},Cut.Math.random=function(t,i){return 0==arguments.length?(i=1,t=0):1==arguments.length&&(i=t,t=0),t==i?t:Math.random()*(i-t)+t},Cut.Math.rotate=function(t,i,e){return arguments.length<3&&(e=i||0,i=0),e>i?(t=(t-i)%(e-i),t+(0>t?e:i)):(t=(t-e)%(i-e),t+(0>=t?i:e))},Cut.Math.length=function(t,i){return Math.sqrt(t*t+i*i)},Cut._TS=0,Cut._isCut=function(t){return t instanceof Cut},Cut._isNum=function(t){return"number"==typeof t},Cut._isFunc=function(t){return"function"==typeof t},Cut._isArray="isArray"in Array?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},Cut._extend=function(t,i,e){if(e)for(var s=0;si?t(2*i)/2:1-t(2*(1-i))/2}}}),Cut.Easing.addMode({name:"out-in",fn:function(t){return function(i){return.5>i?1-t(2*(1-i))/2:t(2*i)/2}}}),Cut.Easing.add({name:"linear",fn:function(t){return t}}),Cut.Easing.add({name:"quad",fn:function(t){return t*t}}),Cut.Easing.add({name:"cubic",fn:function(t){return t*t*t}}),Cut.Easing.add({name:"quart",fn:function(t){return t*t*t*t}}),Cut.Easing.add({name:"quint",fn:function(t){return t*t*t*t*t}}),Cut.Easing.add({name:"sin sine",fn:function(t){return 1-Math.cos(t*Math.PI/2)}}),Cut.Easing.add({name:"exp",fn:function(t){return 0==t?0:Math.pow(2,10*(t-1))}}),Cut.Easing.add({name:"circle circ",fn:function(t){return 1-Math.sqrt(1-t*t)}}),Cut.Easing.add({name:"bounce",fn:function(t){return 1/2.75>t?7.5625*t*t:2/2.75>t?7.5625*(t-=1.5/2.75)*t+.75:2.5/2.75>t?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}}),Cut.Easing.add({name:"poly",fc:function(t){return function(i){return Math.pow(i,t)}}}),Cut.Easing.add({name:"elastic",fc:function(t,i){i=i||.45,t=t||1;var e=i/(2*Math.PI)*Math.asin(1/t);return function(s){return 1+t*Math.pow(2,-10*s)*Math.sin(2*(s-e)*Math.PI/i)}}}),Cut.Easing.add({name:"back",fc:function(t){return t=arguments.length?t:1.70158,function(i){return i*i*((t+1)*i-t)}}}),"undefined"!=typeof module&&(module.exports=Cut),"undefined"==typeof Cut&&"function"==typeof require&&(Cut=require("./cut-core")),DEBUG=("undefined"==typeof DEBUG||DEBUG)&&console,window.addEventListener("load",function(){DEBUG&&console.log("On load."),Cut.Loader.start()},!1),Cut.Loader.init=function(t,i){function e(){r?(o=window.innerWidth>0?window.innerWidth:screen.width,h=window.innerHeight>0?window.innerHeight:screen.height,s.style.width=o+"px",s.style.height=h+"px"):(o=s.clientWidth,h=s.clientHeight),o*=u,h*=u,s.width=o,s.height=h,DEBUG&&console.log("Resize: "+o+" x "+h+" / "+u),p.resize(o,h,u)}i=i||{};var s=i.canvas,n=null,r=!1,o=0,h=0,u=1;if("string"==typeof s&&(s=document.getElementById(s)),s||(s=document.getElementById("cutjs")),!s){r=!0,DEBUG&&console.log("Creating element..."),s=document.createElement("canvas"),s.style.position="absolute";var a=document.body;a.insertBefore(s,a.firstChild)}n=s.getContext("2d");var _=window.devicePixelRatio||1,c=n.webkitBackingStorePixelRatio||n.mozBackingStorePixelRatio||n.msBackingStorePixelRatio||n.oBackingStorePixelRatio||n.backingStorePixelRatio||1;u=_/c;var f=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.oRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)};DEBUG&&console.log("Creating root...");var p=Cut.root(f,function(){n.setTransform(1,0,0,1,0,0),n.clearRect(0,0,o,h),this.render(n)});return t(p,s),e(),window.addEventListener("resize",e,!1),p},Cut.Loader.loadImage=function(t,i,e){var s=new Image;return DEBUG&&console.log("Loading image: "+t),s.onload=i,s.onerror=e,s.src=t,s},"undefined"==typeof Cut&&"function"==typeof require&&(Cut=require("./cut-core")),DEBUG=("undefined"==typeof DEBUG||DEBUG)&&console,Cut.Mouse=function(){Cut.Mouse.subscribe.apply(Cut.Mouse,arguments)},Cut.Mouse.CLICK="click",Cut.Mouse.START="touchstart mousedown",Cut.Mouse.MOVE="touchmove mousemove",Cut.Mouse.END="touchend mouseup",Cut.Mouse.subscribe=function(t,i,e){function s(t,s){u(t,i),DEBUG&&console.log("Mouse Start: "+t.type+" "+_),!e&&i.addEventListener(s,r),t.preventDefault(),h(t.type,t),f.x=_.x,f.y=_.y,f.state=1}function n(t,s){try{DEBUG&&console.log("Mouse End: "+t.type+" "+_),!e&&i.removeEventListener(s,r),t.preventDefault(),h(t.type,t),1==f.state&&f.x==_.x&&f.y==_.y?(DEBUG&&console.log("Mouse Click [+]"),h("click",t),f.state=2):f.state=0}catch(n){console&&console.log(n)}}function r(t){try{u(t,i),t.preventDefault(),h(t.type,t)}catch(e){console&&console.log(e)}}function o(t){try{u(t,i),DEBUG&&console.log("Mouse Click: "+t.type+" "+_),t.preventDefault(),2!=f.state?h(t.type,t):DEBUG&&console.log("Mouse Click [-]")}catch(e){console&&console.log(e)}}function h(i,e){_.type=i,_.event=e,c.x=_.x,c.y=_.y,t.visit(a)}function u(i,e){var s=!1;if(i.touches){if(!i.touches.length)return;s=!0,_.x=i.touches[0].pageX,_.y=i.touches[0].pageY}else _.x=i.clientX,_.y=i.clientY,document.body.scrollLeft||document.body.scrollTop||document.documentElement&&(_.x+=document.documentElement.scrollLeft,_.y+=document.documentElement.scrollTop);_.x-=e.clientLeft||0,_.y-=e.clientTop||0;for(var n=e;n;)_.x-=n.offsetLeft||0,_.y-=n.offsetTop||0,s||(_.x+=n.scrollLeft||0,_.y+=n.scrollTop||0),n=n.offsetParent;_.x*=t._ratio||1,_.y*=t._ratio||1}i=i||document,i.addEventListener("click",o),"ontouchstart"in window?(i.addEventListener("touchstart",function(t){s(t,"touchmove")}),i.addEventListener("touchend",function(t){n(t,"touchmove")}),e&&i.addEventListener("touchmove",r)):(i.addEventListener("mousedown",function(t){s(t,"mousemove")}),i.addEventListener("mouseup",function(t){n(t,"mousemove")}),e&&i.addEventListener("mousemove",r));var a=null,_={x:0,y:0,toString:function(){return(0|this.x)+"x"+(0|this.y)}},c={x:0,y:0,toString:function(){return _+" / "+(0|this.x)+"x"+(0|this.y)}},f={x:0,y:0,state:0};a={reverse:!0,visible:!0,start:function(t){return t._listens(_.type)?void 0:!0},end:function(i){var e=i.listeners(_.type);if(e){if(i.matrix().reverse().map(_,c),i===t||i.attr("spy"));else if(c.x<0||c.x>i._pin._width||c.y<0||c.y>i._pin._height)return;c.raw=_.event;for(var s=0;s 1) { + throw Error("Second argument is not supported!"); + } + if (proto === null || typeof proto != "object") { + throw Error("Invalid prototype!"); + } + F.prototype = proto; + return new F(); + }; + } +}(); + +Cut._stats = { + create: 0, + tick: 0, + paint: 0, + paste: 0 +}; + +Cut.create = function() { + return new Cut(); +}; + +Cut.prototype.render = function(context) { + Cut._stats.tick = Cut._stats.paint = Cut._stats.paste = 0; + var now = Cut._now(); + var elapsed = this._lastTime ? now - this._lastTime : 0; + this._lastTime = now; + this._tick(elapsed); + this._paint(context); + Cut._stats.fps = 1e3 / (Cut._now() - now); +}; + +Cut.prototype.MAX_ELAPSE = Infinity; + +Cut.prototype._tick = function(elapsed) { + if (!this._visible) { + return; + } + if (elapsed > this.MAX_ELAPSE) { + elapsed = this.MAX_ELAPSE; + } + this._pin.tick(); + var length = this._tickBefore.length; + for (var i = 0; i < length; i++) { + Cut._stats.tick++; + this._tickBefore[i].call(this, elapsed); + } + var child, next = this._first; + while (child = next) { + next = child._next; + child._tick(elapsed); + } + var length = this._tickAfter.length; + for (var i = 0; i < length; i++) { + Cut._stats.tick++; + this._tickAfter[i].call(this, elapsed); + } +}; + +Cut.prototype.tick = function(ticker, before) { + if (before) { + this._tickBefore.push(ticker); + } else { + this._tickAfter.push(ticker); + } +}; + +Cut.prototype.untick = function(ticker) { + var i; + if (!ticker) {} else if ((i = this._tickBefore.indexOf(ticker)) >= 0) { + this._tickBefore.splice(i, 1); + } else if ((i = this._tickAfter.indexOf(ticker)) >= 0) { + this._tickAfter.splice(i, 1); + } +}; + +Cut.prototype._paint = function(context) { + if (!this._visible) { + return; + } + Cut._stats.paint++; + var m = this._pin.absoluteMatrix(); + context.setTransform(m.a, m.b, m.c, m.d, m.e, m.f); + this._alpha = this._pin._alpha * (this._parent ? this._parent._alpha : 1); + var alpha = this._pin._textureAlpha * this._alpha; + if (context.globalAlpha != alpha) { + context.globalAlpha = alpha; + } + var length = this._cutouts.length; + for (var i = 0; i < length; i++) { + this._cutouts[i].paste(context); + } + if (context.globalAlpha != this._alpha) { + context.globalAlpha = this._alpha; + } + var child, next = this._first; + while (child = next) { + next = child._next; + child._paint(context); + } +}; + +Cut.prototype.toString = function() { + return "[" + this._id + "]"; +}; + +Cut.prototype.id = function(id) { + if (!arguments.length) { + return this._id; + } + this._id = id; + return this; +}; + +Cut.prototype.attr = function(name, value) { + if (arguments.length < 2) { + return this._attrs ? this._attrs[name] : undefined; + } + (this._attrs ? this._attrs : this._attrs = {})[name] = value; + return this; +}; + +Cut.prototype.on = Cut.prototype.listen = function(types, listener) { + if (typeof listener !== "function") { + return this; + } + types = (Cut._isArray(types) ? types.join(" ") : types).split(/\s+/); + for (var i = 0; i < types.length; i++) { + var type = types[i]; + if (type) { + this._listeners = this._listeners || {}; + this._listeners[type] = this._listeners[type] || []; + this._listeners[type].push(listener); + this._listenOn(type); + } + } + return this; +}; + +Cut.prototype.listeners = function(type) { + return this._listeners && this._listeners[type]; +}; + +Cut.prototype.publish = function(name, args) { + var listeners = this.listeners(name); + if (!listeners || !listeners.length) { + return 0; + } + for (var l = 0; l < listeners.length; l++) { + listeners[l].apply(this, args); + } + return listeners.length; +}; + +Cut.prototype.trigger = function(name, args) { + this.publish(name, args); + return this; +}; + +Cut.prototype.visit = function(visitor) { + var reverse = visitor.reverse; + var visible = visitor.visible; + if (visitor.start && visitor.start(this)) { + return; + } + var child, next = reverse ? this.last(visible) : this.first(visible); + while (child = next) { + next = reverse ? child.prev(visible) : child.next(visible); + if (child.visit(visitor, reverse)) { + return true; + } + } + return visitor.end && visitor.end(this); +}; + +Cut.prototype.visible = function(visible) { + if (!arguments.length) { + return this._visible; + } + this._visible = visible; + this._parent && (this._parent._ts_children = Cut._TS++); + this._ts_pin = Cut._TS++; + this.touch(); + return this; +}; + +Cut.prototype.hide = function() { + return this.visible(false); +}; + +Cut.prototype.show = function() { + return this.visible(true); +}; + +Cut.prototype.parent = function() { + return this._parent; +}; + +Cut.prototype.next = function(visible) { + var next = this._next; + while (next && visible && !next._visible) { + next = next._next; + } + return next; +}; + +Cut.prototype.prev = function(visible) { + var prev = this._prev; + while (prev && visible && !prev._visible) { + prev = prev._prev; + } + return prev; +}; + +Cut.prototype.first = function(visible) { + var next = this._first; + while (next && visible && !next._visible) { + next = next._next; + } + return next; +}; + +Cut.prototype.last = function(visible) { + var prev = this._last; + while (prev && visible && !prev._visible) { + prev = prev._prev; + } + return prev; +}; + +Cut.prototype.append = function() { + for (var i = 0; i < arguments.length; i++) { + if (!Cut._isCut(arguments[i])) { + throw "It is not a Cut node!"; + } + arguments[i].appendTo(this); + } + return this; +}; + +Cut.prototype.prepend = function() { + for (var i = 0; i < arguments.length; i++) { + if (!Cut._isCut(arguments[i])) { + throw "It is not a Cut node!"; + } + arguments[i].prependTo(this); + } + return this; +}; + +Cut.prototype.appendTo = function(parent) { + if (!parent) { + throw "Parent is null!"; + } + if (!Cut._isCut(parent)) { + throw "It is not a Cut node!"; + } + this.remove(); + if (parent._last) { + parent._last._next = this; + this._prev = parent._last; + } + this._parent = parent; + parent._last = this; + if (!parent._first) { + parent._first = this; + } + this._parent._listenOn(this); + this._ts_parent = Cut._TS++; + parent._ts_children = Cut._TS++; + parent.touch(); + return this; +}; + +Cut.prototype.prependTo = function(parent) { + if (!parent) { + throw "Parent is null!"; + } + if (!Cut._isCut(parent)) { + throw "It is not a Cut node!"; + } + this.remove(); + if (parent._first) { + parent._first._prev = this; + this._next = parent._first; + } + this._parent = parent; + parent._first = this; + if (!parent._last) { + parent._last = this; + } + this._parent._listenOn(this); + this._ts_parent = Cut._TS++; + parent._ts_children = Cut._TS++; + parent.touch(); + return this; +}; + +Cut.prototype.insertNext = function() { + if (arguments.length) { + for (var i = 0; i < arguments.length; i++) { + if (!Cut._isCut(arguments[i])) { + throw "It is not a Cut node!"; + } + arguments[i] && arguments[i].insertAfter(this); + } + } + return this; +}; + +Cut.prototype.insertPrev = function() { + if (arguments.length) { + for (var i = 0; i < arguments.length; i++) { + if (!Cut._isCut(arguments[i])) { + throw "It is not a Cut node!"; + } + arguments[i] && arguments[i].insertBefore(this); + } + } + return this; +}; + +Cut.prototype.insertBefore = function(next) { + if (!next) { + throw "Next is null!"; + } + if (!Cut._isCut(next)) { + throw "It is not a Cut node!"; + } + this.remove(); + var parent = next._parent; + var prev = next._prev; + next._prev = this; + prev && (prev._next = this) || parent && (parent._first = this); + this._parent = parent; + this._prev = prev; + this._next = next; + this._parent._listenOn(this); + this._ts_parent = Cut._TS++; + this.touch(); + return this; +}; + +Cut.prototype.insertAfter = function(prev) { + if (!prev) { + throw "Prev is null!"; + } + if (!Cut._isCut(prev)) { + throw "It is not a Cut node!"; + } + this.remove(); + var parent = prev._parent; + var next = prev._next; + prev._next = this; + next && (next._prev = this) || parent && (parent._last = this); + this._parent = parent; + this._prev = prev; + this._next = next; + this._parent._listenOn(this); + this._ts_parent = Cut._TS++; + this.touch(); + return this; +}; + +Cut.prototype.remove = function() { + if (arguments.length) { + for (var i = 0; i < arguments.length; i++) { + if (!Cut._isCut(arguments[i])) { + throw "It is not a Cut node!"; + } + arguments[i] && arguments[i].remove(); + } + return this; + } + if (this._prev) { + this._prev._next = this._next; + } + if (this._next) { + this._next._prev = this._prev; + } + if (this._parent) { + if (this._parent._first === this) { + this._parent._first = this._next; + } + if (this._parent._last === this) { + this._parent._last = this._prev; + } + this._parent._listenOff(this); + this._parent._ts_children = Cut._TS++; + this._parent.touch(); + } + this._prev = this._next = this._parent = null; + this._ts_parent = Cut._TS++; + // this._parent.touch(); + return this; +}; + +Cut.prototype.empty = function() { + var child, next = this._first; + while (child = next) { + next = child._next; + child._prev = child._next = child._parent = null; + this._listenOff(child); + } + this._first = this._last = null; + this._ts_children = Cut._TS++; + this.touch(); + return this; +}; + +Cut.prototype._listenOn = function(obj) { + if (typeof obj === "string") { + this._listenersCount = this._listenersCount || {}; + if (!this._listenersCount[obj] && this._parent) { + this._parent._listenOn(obj); + } + this._listenersCount[obj] = (this._listenersCount[obj] || 0) + 1; + } else if (typeof obj === "object") { + if (obj._listenersCount) { + for (var type in obj._listenersCount) { + if (obj._listenersCount[type] > 0) { + this._listenOn(type); + } + } + } + } +}; + +Cut.prototype._listenOff = function(obj) { + if (typeof obj === "string") { + this._listenersCount = this._listenersCount || {}; + if (this._listenersCount[obj] == 1 && this._parent) { + this._parent._listenOff(obj); + } + this._listenersCount[obj] = Math.max((this._listenersCount[obj] || 0) - 1, 0); + } else if (typeof obj === "object") { + if (obj._listenersCount) { + for (var type in obj._listenersCount) { + if (obj._listenersCount[type] > 0) { + this._listenOff(type); + } + } + } + } +}; + +Cut.prototype._listens = function(type) { + return this._listenersCount && this._listenersCount[type] || 0; +}; + +Cut.prototype.touch = function() { + this._ts_touch = Cut._TS++; + this._parent && this._parent.touch(); + return this; +}; + +Cut.prototype.pin = function() { + if (!arguments.length) { + return this._pin; + } + var obj = this._pin.update.apply(this._pin, arguments); + return obj === this._pin ? this : obj; +}; + +Cut.prototype.matrix = function() { + return this._pin.absoluteMatrix(this, this._parent ? this._parent._pin : null); +}; + +Cut.prototype.tween = function(duration, delay) { + return (this._tween || (this._tween = new Cut.Tween(this))).tween(duration, delay); +}; + +Cut.Tween = function(cut) { + var tween = this; + this._owner = cut; + this._queue = []; + this._next = null; + cut.tick(function(elapsed) { + if (!tween._queue.length) { + return; + } + this.touch(); + var head = tween._queue[0]; + if (!head.time) { + head.time = 1; + } else { + head.time += elapsed; + } + if (head.time < head.delay) { + return; + } + if (!head.start) { + head.start = {}; + head.keys = {}; + for (var key in head.end) { + if (typeof (start = cut.pin(key)) === "number") { + head.start[key] = start; + head.keys[key] = key; + } else if (typeof (startX = cut.pin(key + "X")) === "number" && typeof (startY = cut.pin(key + "Y")) === "number") { + head.start[key + "X"] = startX; + head.keys[key + "X"] = key; + head.start[key + "Y"] = startY; + head.keys[key + "Y"] = key; + } + } + } + var p = (head.time - head.delay) / head.duration; + var over = p >= 1; + p = p > 1 ? 1 : p; + p = typeof head.easing == "function" ? head.easing(p) : p; + var q = 1 - p; + for (var key in head.keys) { + cut.pin(key, head.start[key] * q + head.end[head.keys[key]] * p); + } + if (over) { + tween._queue.shift(); + head.then && head.then.call(cut); + } + }, true); +}; + +Cut.Tween.prototype.tween = function(duration, delay) { + this._next = { + id: Cut._TS++, + end: {}, + duration: duration || 400, + delay: delay || 0 + }; + return this; +}; + +Cut.Tween.prototype.pin = function(pin) { + if (this._next !== this._queue[this._queue.length - 1]) { + this._owner.touch(); + this._queue.push(this._next); + } + var end = this._next.end; + if (arguments.length === 1) { + Cut._extend(end, arguments[0]); + } else if (arguments.length === 2) { + end[arguments[0]] = arguments[1]; + } + return this; +}; + +Cut.Tween.prototype.clear = function(forward) { + var tween; + while (tween = this._queue.shift()) { + forward && this._owner.pin(tween.end); + } + return this; +}; + +Cut.Tween.prototype.then = function(then) { + this._next.then = then; + return this; +}; + +Cut.Tween.prototype.ease = function(easing) { + this._next.easing = Cut.Easing(easing); + return this; +}; + +Cut.root = function(request, render) { + return new Cut.Root(request, render); +}; + +Cut.Root = function(request, render) { + Cut.String.prototype._super.apply(this, arguments); + this._paused = true; + this._render = render; + this._request = request; + var self = this; + var requestCallback = function() { + if (self._paused === true) { + return; + } + self._mo_touch = self._ts_touch; + self._render(); + self.request(); + self._mo_touch == self._ts_touch && self.pause(); + }; + this.request = function() { + this._request.call(null, requestCallback); + }; + this.on("viewport", function(viewport) { + this._size = { + width: viewport.width, + height: viewport.height + }; + this._updateViewbox(); + return true; + }); +}; + +Cut.Root.prototype = Cut._create(Cut.prototype); + +Cut.Root.prototype._super = Cut; + +Cut.Root.prototype.constructor = Cut.Root; + +Cut.Root.prototype.viewbox = function(width, height, mode) { + this._viewbox = { + width: width, + height: height, + mode: /^(in|out)$/.test(mode) ? mode : "in" + }; + this._updateViewbox(); + return this; +}; + +Cut.Root.prototype._updateViewbox = function() { + var viewbox = this._viewbox; + var size = this._size; + if (!size) {} else if (viewbox) { + this.pin({ + width: viewbox.width, + height: viewbox.height, + resizeMode: viewbox.mode, + resizeWidth: size.width, + resizeHeight: size.height + }); + } else { + this.pin({ + width: size.width, + height: size.height + }); + } +}; + +Cut.Root.prototype.start = function() { + return this.resume(); +}; + +Cut.Root.prototype.resume = function(force) { + if (this._paused || force) { + this._paused = false; + this.request(); + } + return this; +}; + +Cut.Root.prototype.pause = function() { + this._paused = true; + return this; +}; + +Cut.Root.prototype.touch = function() { + this.resume(); + return Cut.prototype.touch.apply(this, arguments); +}; + +Cut.Root.prototype.resize = function(width, height, ratio) { + this._ratio = ratio || 1; + var data = {}; + data.width = width; + data.height = height; + data.ratio = ratio; + this.visit({ + start: function(cut) { + if (!cut._listens("viewport")) { + return true; + } + cut.publish("viewport", [ data ]); + } + }); + return this; +}; + +Cut.image = function(cutout) { + var image = new Cut.Image(); + cutout && image.image(cutout); + return image; +}; + +Cut.Image = function() { + Cut.Image.prototype._super.apply(this, arguments); +}; + +Cut.Image.prototype = Cut._create(Cut.prototype); + +Cut.Image.prototype._super = Cut; + +Cut.Image.prototype.constructor = Cut.Image; + +/** + * @deprecated Use image + */ +Cut.Image.prototype.setImage = function() { + this.image.apply(this, arguments); +}; + +Cut.Image.prototype.image = function(cutout) { + this._cutouts[0] = Cut.Out.select(cutout); + this._cutouts.length = 1; + this.pin({ + width: this._cutouts[0] ? this._cutouts[0].dWidth() : 0, + height: this._cutouts[0] ? this._cutouts[0].dHeight() : 0 + }); + this._cutout = this._cutouts[0].clone(); + return this; +}; + +Cut.Image.prototype.cropX = function(w, x) { + return this.image(this._cutouts[0].cropX(w, x)); +}; + +Cut.Image.prototype.cropY = function(h, y) { + return this.image(this._cutouts[0].cropY(h, y)); +}; + +Cut.Image.prototype._slice = function(i) { + return this._cutouts[i] || (this._cutouts[i] = this._cutout.clone()); +}; + +Cut.Image.prototype.tile = function(inner) { + this.untick(this._repeatTicker); + this._repeatTicker = function() { + if (this._mo_tile == this._ts_touch) { + return; + } + this._mo_tile = this._ts_touch; + var bleft = this._cutout._left, bright = this._cutout._right; + var btop = this._cutout._top, bbottom = this._cutout._bottom; + var bwidth = this._cutout.dWidth() - bleft - bright; + var bheight = this._cutout.dHeight() - btop - bbottom; + var width = this.pin("width"); + width = inner ? width : width - bleft - bright; + var height = this.pin("height"); + height = inner ? height : height - btop - bbottom; + var left = inner ? -bleft : 0; + var top = inner ? -btop : 0; + var c = 0; + // top, left + if (btop && bleft) { + this._slice(c++).cropX(bleft, 0).cropY(btop, 0).offset(left, top); + } + // bottom, left + if (bbottom && bleft) { + this._slice(c++).cropX(bleft, 0).cropY(bbottom, bheight + btop).offset(left, top + height + btop); + } + // top, right + if (btop && bright) { + this._slice(c++).cropX(bright, bwidth + bleft).cropY(btop, 0).offset(left + width + bleft, top); + } + // bottom, right + if (bbottom && bright) { + this._slice(c++).cropX(bright, bwidth + bleft).cropY(bbottom, bheight + btop).offset(left + width + bleft, top + height + btop); + } + var x = left + bleft; + var r = width; + while (r > 0) { + var w = Math.min(bwidth, r); + r -= bwidth; + var y = top + btop; + var b = height; + while (b > 0) { + var h = Math.min(bheight, b); + b -= bheight; + this._slice(c++).cropX(w, bleft).cropY(h, btop).offset(x, y); + if (r <= 0) { + // left + if (bleft) { + this._slice(c++).cropX(bleft, 0).cropY(h, btop).offset(left, y); + } + // right + if (bright) { + this._slice(c++).cropX(bright, bwidth + bleft).cropY(h, btop).offset(x + w, y); + } + } + y += h; + } + // top + if (btop) { + this._slice(c++).cropX(w, bleft).cropY(btop, 0).offset(x, top); + } + // bottom + if (bbottom) { + this._slice(c++).cropX(w, bleft).cropY(bbottom, bheight + btop).offset(x, y); + } + x += w; + } + this._cutouts.length = c; + }; + this.tick(this._repeatTicker); + return this; +}; + +Cut.Image.prototype.stretch = function(inner) { + this.untick(this._repeatTicker); + this._repeatTicker = function() { + if (this._mo_stretch == this._pin._ts_transform) { + return; + } + this._mo_stretch = this._pin._ts_transform; + var oleft = this._cutout._left, oright = this._cutout._right; + var otop = this._cutout._top, obottom = this._cutout._bottom; + var owidth = this._cutout.dWidth(), oheight = this._cutout.dHeight(); + var width = this.pin("width"), height = this.pin("height"); + width = inner ? width + oleft + oright : Math.max(width, oleft + oright); + height = inner ? height + otop + obottom : Math.max(height, otop + obottom); + var c = 0; + // top, left + if (otop && oleft) { + this._slice(c++).cropX(oleft, 0).cropY(otop, 0).offset(0, 0); + } + // bottom, left + if (obottom && oleft) { + this._slice(c++).cropX(oleft, 0).cropY(obottom, oheight - obottom).offset(0, height - obottom); + } + // top, right + if (otop && oright) { + this._slice(c++).cropX(oright, owidth - oright).cropY(otop, 0).offset(width - oright, 0); + } + // bottom, right + if (obottom && oright) { + this._slice(c++).cropX(oright, owidth - oright).cropY(obottom, oheight - obottom).offset(width - oright, height - obottom); + } + // top + if (otop) { + this._slice(c++).cropX(owidth - oleft - oright, oleft).cropY(otop, 0).offset(oleft, 0).dWidth(width - oleft - oright); + } + // bottom + if (obottom) { + this._slice(c++).cropX(owidth - oleft - oright, oleft).cropY(obottom, oheight - obottom).offset(oleft, height - obottom).dWidth(width - oleft - oright); + } + // left + if (oleft) { + this._slice(c++).cropX(oleft, 0).cropY(oheight - otop - obottom, otop).offset(0, otop).dHeight(height - otop - obottom); + } + // right + if (oright) { + this._slice(c++).cropX(oright, owidth - oright).cropY(oheight - otop - obottom, otop).offset(width - oright, otop).dHeight(height - otop - obottom); + } + // center + this._slice(c++).cropX(owidth - oleft - oright, oleft).cropY(oheight - otop - obottom, otop).offset(oleft, otop).dWidth(width - oleft - oright).dHeight(height - otop - obottom); + this._cutouts.length = c; + }; + this.tick(this._repeatTicker); + return this; +}; + +Cut.anim = function(frames, fps) { + var anim = new Cut.Anim().frames(frames).gotoFrame(0); + fps && anim.fps(fps); + return anim; +}; + +Cut.Anim = function() { + Cut.Anim.prototype._super.apply(this, arguments); + this._fps = Cut.Anim.FPS; + this._ft = 1e3 / this._fps; + this._time = 0; + this._frame = 0; + this._frames = []; + this._labels = {}; + this.tick(function() { + if (this._time && this._frames.length > 1) { + var t = Cut._now() - this._time; + if (t >= this._ft) { + var n = t < 2 * this._ft ? 1 : Math.floor(t / this._ft); + this._time += n * this._ft; + this.moveFrame(n); + if (this._repeat && (this._repeat -= n) <= 0) { + this.stop(); + this._callback && this._callback(); + } + } + this.touch(); + } + }, false); +}; + +Cut.Anim.prototype = Cut._create(Cut.prototype); + +Cut.Anim.prototype._super = Cut; + +Cut.Anim.prototype.constructor = Cut.Anim; + +Cut.Anim.FPS = 22; + +Cut.Anim.prototype.fps = function(fps) { + if (!arguments.length) { + return this._fps; + } + this._fps = fps || Cut.Anim.FPS; + this._ft = 1e3 / this._fps; + return this; +}; + +/** + * @deprecated Use frames + */ +Cut.Anim.prototype.setFrames = function() { + this.frames.apply(this, arguments); +}; + +Cut.Anim.prototype.frames = function(frames) { + this._time = this._time || 0; + this._frame = 0; + this._frames = []; + this._labels = {}; + frames = Cut.Out.select(frames, true); + if (frames && frames.length) { + for (var i = 0; i < frames.length; i++) { + var cutout = frames[i]; + this._frames.push(cutout); + this._labels[cutout._name] = i; + } + } + return this; +}; + +Cut.Anim.prototype.length = function() { + return this._frames ? this._frames.length : 0; +}; + +Cut.Anim.prototype.gotoFrame = function(frame, resize) { + frame = Cut.Math.rotate(frame, this._frames.length) | 0; + this._frame = frame; + resize = resize || !this._cutouts[0]; + this._cutouts[0] = this._frames[this._frame]; + if (resize) { + this.pin({ + width: this._cutouts[0].dWidth(), + height: this._cutouts[0].dHeight() + }); + } + this._ts_frame = Cut._TS++; + this.touch(); + return this; +}; + +Cut.Anim.prototype.moveFrame = function(move) { + return this.gotoFrame(this._frame + move); +}; + +Cut.Anim.prototype.gotoLabel = function(label, resize) { + return this.gotoFrame(this._labels[label] || 0, resize); +}; + +Cut.Anim.prototype.repeat = function(repeat, callback) { + this._repeat = repeat * this._frames.length - 1; + this._callback = callback; + this.play(); + return this; +}; + +Cut.Anim.prototype.play = function(frame) { + if (arguments.length) { + this.gotoFrame(frame); + this._time = Cut._now(); + } else if (!this._time) { + this._time = Cut._now(); + } + return this; +}; + +Cut.Anim.prototype.stop = function(frame) { + this._time = null; + if (arguments.length) { + this.gotoFrame(frame); + } + return this; +}; + +Cut.string = function(frames) { + return new Cut.String().frames(frames); +}; + +Cut.String = function() { + Cut.String.prototype._super.apply(this, arguments); + this.row(); +}; + +Cut.String.prototype = Cut._create(Cut.prototype); + +Cut.String.prototype._super = Cut; + +Cut.String.prototype.constructor = Cut.String; + +/** + * @deprecated Use frames + */ +Cut.String.prototype.setFont = function() { + this.frames.apply(this, arguments); +}; + +Cut.String.prototype.frames = function(frames) { + if (typeof frames == "string") { + this._frames = function(value) { + return frames + value; + }; + } else if (Cut._isFunc(frames)) { + this._frames = frames; + } + return this; +}; + +/** + * @deprecated Use value + */ +Cut.String.prototype.setValue = function() { + this.value.apply(this, arguments); +}; + +Cut.String.prototype.value = function(value) { + if (this._value === value) return this; + this._value = value; + if (typeof value !== "string" && !Cut._isArray(value)) { + value = value + ""; + } + var child = this._first; + for (var i = 0; i < value.length; i++) { + var selector = this._frames(value[i]); + if (child) { + child.image(selector).show(); + } else { + child = Cut.image(selector).appendTo(this); + } + child = child._next; + } + while (child) { + child.hide(); + child = child._next; + } + return this; +}; + +Cut.row = function(align) { + return Cut.create().row(align); +}; + +Cut.prototype.row = function(align) { + this.sequence("row", align); + return this; +}; + +Cut.column = function(align) { + return Cut.create().column(align); +}; + +Cut.prototype.column = function(align) { + this.sequence("column", align); + return this; +}; + +Cut.sequence = function(type, align) { + return new Cut.create().sequence(type, align); +}; + +Cut.prototype.sequence = function(type, align) { + this.untick(this._layoutTicker); + this._layoutTicker = function() { + if (this._mo_seq == this._ts_touch) { + return; + } + this._mo_seq = this._ts_touch; + var alignChildren = this._mo_seqAlign != this._ts_children; + this._mo_seqAlign = this._ts_children; + var width = 0, height = 0; + var child, next = this.first(true); + var first = true; + while (child = next) { + next = child.next(true); + child._pin.relativeMatrix(); + var w = child._pin._boxWidth; + var h = child._pin._boxHeight; + if (type == "column") { + !first && (height += this._spacing || 0); + child.pin("offsetY") != height && child.pin("offsetY", height); + width = Math.max(width, w); + height = height + h; + alignChildren && child.pin("alignX", align); + } else if (type == "row") { + !first && (width += this._spacing || 0); + child.pin("offsetX") != width && child.pin("offsetX", width); + width = width + w; + height = Math.max(height, h); + alignChildren && child.pin("alignY", align); + } + first = false; + } + width += 2 * this._padding || 0; + height += 2 * this._padding || 0; + this.pin("width") != width && this.pin("width", width); + this.pin("height") != height && this.pin("height", height); + }; + this.tick(this._layoutTicker); + return this; +}; + +Cut.box = function() { + return new Cut.create().box(); +}; + +Cut.prototype.box = function() { + if (this._boxTicker) return this; + this._boxTicker = function() { + if (this._mo_box == this._ts_touch) { + return; + } + this._mo_box = this._ts_touch; + var width = 0, height = 0; + var child, next = this.first(true); + while (child = next) { + next = child.next(true); + child._pin.relativeMatrix(); + var w = child._pin._boxWidth; + var h = child._pin._boxHeight; + width = Math.max(width, w); + height = Math.max(height, h); + } + width += 2 * this._padding || 0; + height += 2 * this._padding || 0; + this.pin("width") != width && this.pin("width", width); + this.pin("height") != height && this.pin("height", height); + }; + this.tick(this._boxTicker); + return this; +}; + +Cut.prototype.padding = function(pad) { + this._padding = pad; + return this; +}; + +Cut.prototype.spacing = function(space) { + this._spacing = space; + return this; +}; + +// TODO use prototype +Cut.Loader = function() { + var queue = []; + var roots = []; + var images = {}; + var started = false; + function loadImages(loader, callback) { + var loading = 0; + var noimage = true; + var textures = Cut.Texture._list; + for (var texture in textures) { + if (textures[texture].getImagePath()) { + loading++; + var src = textures[texture].getImagePath(); + var image = loader(src, complete, error); + Cut.Loader.addImage(image, src); + noimage = false; + } + } + if (noimage) { + DEBUG && console.log("No image to load."); + callback && callback(); + } + function complete() { + DEBUG && console.log("Image loaded."); + done(); + } + function error(msg) { + DEBUG && console.log("Error loading image: " + msg); + done(); + } + function done() { + if (--loading <= 0) { + callback && callback(); + } + } + } + return { + load: function(app, configs) { + if (!started) { + queue.push(arguments); + return; + } + DEBUG && console.log("Init..."); + var root = this.init(function(root, canvas) { + DEBUG && console.log("Loading app..."); + app(root, canvas); + }, configs); + roots.push(root); + DEBUG && console.log("Loading images..."); + loadImages(this.loadImage, function() { + DEBUG && console.log("Images loaded."); + DEBUG && console.log("Start playing..."); + root.start(); + }); + }, + start: function() { + started = true; + var args; + while (args = queue.shift()) { + this.load.apply(this, args); + } + }, + pause: function() { + for (var i = queue.length - 1; i >= 0; i--) { + roots[i].pause(); + } + }, + resume: function() { + for (var i = queue.length - 1; i >= 0; i--) { + roots[i].resume(); + } + }, + getImage: function(src) { + return images[src]; + }, + addImage: function(image, src) { + images[src] = image; + return this; + } + }; +}(); + +// TODO use prototype +Cut.Texture = function(texture) { + texture.cutouts = texture.cutouts || []; + var selectionCache = {}; + var imageCache = null; + this.getImagePath = function() { + return texture.imagePath; + }; + function image() { + if (!imageCache) { + imageCache = Cut.Loader.getImage(texture.imagePath); + } + return imageCache; + } + for (var i = 0; i < texture.cutouts.length; i++) { + map(texture.cutouts[i]); + } + function map(cutout) { + if (!cutout || cutout.isCutout) { + return cutout; + } + if (typeof texture.map === "function") { + cutout = texture.map(cutout); + } else if (typeof texture.filter === "function") { + cutout = texture.filter(cutout); + } + var ratio = texture.ratio || 1; + if (ratio != 1) { + cutout.x *= ratio, cutout.y *= ratio; + cutout.width *= ratio, cutout.height *= ratio; + cutout.top *= ratio, cutout.bottom *= ratio; + cutout.left *= ratio, cutout.right *= ratio; + } + var trim = texture.trim || 0; + if (trim) { + cutout.x += trim, cutout.y += trim; + cutout.width -= 2 * trim, cutout.height -= 2 * trim; + cutout.top -= trim, cutout.bottom -= trim; + cutout.left -= trim, cutout.right -= trim; + } + return cutout; + } + function wrap(cutout) { + if (!cutout.isCutout) { + cutout = new Cut.Out(cutout, image, texture.imageRatio); + } + return cutout; + } + this.select = function(selector, prefix) { + if (!prefix) { + // one + var id = selector + "?"; + var result = selectionCache[id]; + if (typeof result === "undefined") { + for (var i = 0; i < texture.cutouts.length; i++) { + var item = texture.cutouts[i]; + var name = item._name || item.name; + if (name == selector) { + result = item; + break; + } + } + if (!result && texture.factory) { + result = map(texture.factory(selector)); + } + selectionCache[id] = result; + } + if (!result) { + throw "Cutout not found: '" + texture.name + ":" + selector + "'"; + } + return wrap(result); + } else { + // many + var id = selector + "*"; + var results = selectionCache[id]; + if (typeof results === "undefined") { + results = []; + var length = selector.length; + for (var i = 0; i < texture.cutouts.length; i++) { + var item = texture.cutouts[i]; + var name = item._name || item.name; + if (name && name.substring(0, length) == selector) { + results.push(texture.cutouts[i]); + } + } + selectionCache[id] = results; + } + if (!results.length) { + throw "Cutouts not found: '" + texture.name + ":" + selector + "'"; + } + for (var i = 0; i < results.length; i++) { + results[i] = wrap(results[i]); + } + return results; + } + }; +}; + +Cut.Texture._list = {}; + +Cut.Texture.add = function() { + for (var i = 0; i < arguments.length; i++) { + var texture = arguments[i]; + Cut.Texture._list[texture.name] = new Cut.Texture(texture); + } + return this; +}; + +/** + * @deprecated Use Cut(); + */ +Cut.addTexture = function() { + return Cut.Texture.add.apply(Cut.Texture, arguments); +}; + +Cut.Out = function(def, image, ratio) { + this.isCutout = true; + this._image = image; + this._ratio = ratio || 1; + this._name = def.name; + this._x = def.x; + this._y = def.y; + this._width = def.width; + this._height = def.height; + this._top = def.top || 0; + this._bottom = def.bottom || 0; + this._left = def.left || 0; + this._right = def.right || 0; + this._reset(); + return this; +}; + +Cut.Out.prototype._reset = function() { + this._sx = this._x * this._ratio; + this._sy = this._y * this._ratio; + this._sw = this._width * this._ratio; + this._sh = this._height * this._ratio; + this._dx = 0; + this._dy = 0; + this._dw = this._width; + this._dh = this._height; +}; + +Cut.Out.prototype.clone = function() { + var clone = Cut._create(Cut.Out.prototype); + for (var attr in this) if (this.hasOwnProperty(attr)) clone[attr] = this[attr]; + clone._reset(); + return clone; +}; + +Cut.Out.prototype.dWidth = function(width) { + if (arguments.length) { + this._dw = width; + return this; + } + return this._dw; +}; + +Cut.Out.prototype.dHeight = function(height) { + if (arguments.length) { + this._dh = height; + return this; + } + return this._dh; +}; + +Cut.Out.prototype.cropX = function(w, x) { + x = x || 0; + w = Math.min(w, this._width - x); + this._dw = w; + this._sw = w * this._ratio; + this._sx = (this._x + x) * this._ratio; + return this; +}; + +Cut.Out.prototype.cropY = function(h, y) { + y = y || 0; + h = Math.min(h, this._height - y); + this._dh = h; + this._sh = h * this._ratio; + this._sy = (this._y + y) * this._ratio; + return this; +}; + +Cut.Out.prototype.offset = function(x, y) { + this._dx = x; + this._dy = y; + return this; +}; + +Cut.Out.prototype.paste = function(context) { + Cut._stats.paste++; + var img = typeof this._image === "function" ? this._image() : this._image; + try { + img && context.drawImage(img, // source + this._sx, this._sy, this._sw, this._sh, // cut + this._dx, this._dy, this._dw, this._dh); + } catch (e) { + if (!this._failed) { + console.log("Unable to paste: " + this, img); + this._failed = true; + } + } +}; + +Cut.Out.prototype.toString = function() { + return "[" + this._name + ": " + this._sx + "x" + this._sy + "-" + this._sw + "x" + this._sh + "" + this._dx + "x" + this._dy + "-" + this._dw + "x" + this._dh + "]"; +}; + +Cut.Out.select = function(selector, prefix) { + if (typeof selector === "function") { + return Cut.Out.select(selector()); + } + if (typeof selector !== "string") { + return selector; + } + var i = selector.indexOf(":"); + if (i < 0) { + throw "Invalid selector: '" + selector + "'"; + return null; + } + var split = [ selector.slice(0, i), selector.slice(i + 1) ]; + var texture = Cut.Texture._list[split[0]]; + if (texture == null) { + throw "Texture not found: '" + selector + "'"; + return !prefix ? null : []; + } + return texture.select(split[1], prefix); +}; + +Cut.drawing = function() { + return Cut.image(Cut.Out.drawing.apply(Cut.Out, arguments)); +}; + +// [name], width, height, [ratio], [draw] +// def, [draw] +Cut.Out.drawing = function() { + var canvas = document.createElement("canvas"); + var context = canvas.getContext("2d"); + var def = {}; + var ai = 0; + if (typeof arguments[ai] === "object") { + def = arguments[ai++]; + } else { + if (typeof arguments[ai] === "string") { + def.name = arguments[ai++]; + } + def.width = arguments[ai++]; + def.height = arguments[ai++]; + if (typeof arguments[ai] === "number") { + def.ratio = arguments[ai++]; + } + def.x = 0; + def.y = 0; + } + def.ratio = def.ratio || 1; + def.name = def.name || Math.random() * 1e3 | 0; + canvas.width = Math.ceil(def.width * def.ratio); + canvas.height = Math.ceil(def.height * def.ratio); + var cut = new Cut.Out(def, canvas, def.ratio); + if (typeof arguments[arguments.length - 1] === "function") { + arguments[arguments.length - 1].call(cut, context, def.ratio); + } + return cut; +}; + +Cut.Pin = function(owner) { + this._owner = owner; + this._parent = null; + // relative to parent + this._relativeMatrix = new Cut.Matrix(); + // relative to root + this._absoluteMatrix = new Cut.Matrix(); + this.reset(); +}; + +Cut.Pin.prototype.reset = function() { + this._textureAlpha = 1; + this._alpha = 1; + this._width = 0; + this._height = 0; + this._scaleX = 1; + this._scaleY = 1; + this._skewX = 0; + this._skewY = 0; + this._rotation = 0; + // scale/skew/rotate center + this._pivoted = false; + this._pivotX = null; + this._pivotY = null; + // self pin point + this._handled = false; + this._handleX = 0; + this._handleY = 0; + // parent pin point + this._aligned = false; + this._alignX = 0; + this._alignY = 0; + // as seen by parent px + this._offsetX = 0; + this._offsetY = 0; + this._boxX = 0; + this._boxY = 0; + this._boxWidth = this._width; + this._boxHeight = this._height; + this._ts_translate = Cut._TS++; + this._ts_transform = Cut._TS++; + this._ts_matrix = Cut._TS++; +}; + +Cut.Pin.prototype.tick = function() { + this._parent = this._owner._parent && this._owner._parent._pin; + if (this._handled && this._mo_handle != this._ts_transform) { + this._mo_handle = this._ts_transform; + this._ts_translate = Cut._TS++; + } + if (this._aligned && this._parent && this._mo_align != this._parent._ts_transform) { + this._mo_align = this._parent._ts_transform; + this._ts_translate = Cut._TS++; + } + return this; +}; + +Cut.Pin.prototype.toString = function() { + return this._owner.id() + " [" + this._alignX + ", " + this._alignY + "] [" + this._handleX + ", " + this._handleY + "] [" + (this._parent ? this._parent._owner.id() : null) + "]"; +}; + +Cut.Pin.prototype.absoluteMatrix = function() { + var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_matrix : 0); + if (this._mo_abs == ts) { + return this._absoluteMatrix; + } + this._mo_abs = ts; + var abs = this._absoluteMatrix; + abs.copyFrom(this.relativeMatrix()); + this._parent && abs.concat(this._parent._absoluteMatrix); + this._ts_matrix = Cut._TS++; + return abs; +}; + +Cut.Pin.prototype.relativeMatrix = function() { + var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_transform : 0); + if (this._mo_rel == ts) { + return this._relativeMatrix; + } + this._mo_rel = ts; + var rel = this._relativeMatrix; + rel.identity(); + if (this._pivoted) { + rel.translate(-this._pivotX * this._width, -this._pivotY * this._height); + } + rel.scale(this._scaleX, this._scaleY); + rel.skew(this._skewX, this._skewY); + rel.rotate(this._rotation); + if (this._pivoted) { + rel.translate(this._pivotX * this._width, this._pivotY * this._height); + } + if (this._pivoted) { + // set handle on origin + this._boxX = 0; + this._boxY = 0; + this._boxWidth = this._width; + this._boxHeight = this._height; + } else { + // set handle on aabb + var p, q, m = rel; + if (m.a > 0 && m.c > 0 || m.a < 0 && m.c < 0) { + p = 0, q = m.a * this._width + m.c * this._height; + } else { + p = m.a * this._width, q = m.c * this._height; + } + if (p > q) { + this._boxX = q; + this._boxWidth = p - q; + } else { + this._boxX = p; + this._boxWidth = q - p; + } + if (m.b > 0 && m.d > 0 || m.b < 0 && m.d < 0) { + p = 0, q = m.b * this._width + m.d * this._height; + } else { + p = m.b * this._width, q = m.d * this._height; + } + if (p > q) { + this._boxY = q; + this._boxHeight = p - q; + } else { + this._boxY = p; + this._boxHeight = q - p; + } + } + this._x = this._offsetX; + this._y = this._offsetY; + this._x -= this._boxX + this._handleX * this._boxWidth; + this._y -= this._boxY + this._handleY * this._boxHeight; + if (this._aligned && this._parent) { + this._parent.relativeMatrix(); + this._x += this._alignX * this._parent._width; + this._y += this._alignY * this._parent._height; + } + rel.translate(this._x, this._y); + return this._relativeMatrix; +}; + +Cut.Pin._SINGLE = {}; + +Cut.Pin.prototype.update = function() { + if (arguments.length == 1 && typeof arguments[0] === "string") { + return this["_" + arguments[0]]; + } + this._transform_flag = false; + this._translate_flag = false; + var pin = null, key = null, value = null; + if (arguments.length == 2 && typeof arguments[0] === "string") { + for (key in Cut.Pin._SINGLE) { + delete Cut.Pin._SINGLE[key]; + } + (pin = Cut.Pin._SINGLE)[arguments[0]] = arguments[1]; + } else if (arguments.length == 1 && typeof arguments[0] === "object") { + pin = arguments[0]; + } + // TODO: map write only keys to read/write keys + if (pin) { + for (key in pin) { + if (typeof (value = pin[key]) !== "undefined") { + if (setter = Cut.Pin._setters[key]) { + setter.call(Cut.Pin._setters, this, value, pin); + } + } + } + } + if (this._translate_flag) { + this._translate_flag = false; + this._ts_translate = Cut._TS++; + } + if (this._transform_flag) { + this._transform_flag = false; + this._ts_transform = Cut._TS++; + } + if (this._owner) { + this._owner._ts_pin = Cut._TS++; + this._owner.touch(); + } + return this; +}; + +Cut.Pin._setters = { + alpha: function(pin, value, set) { + pin._alpha = value; + }, + textureAlpha: function(pin, value, set) { + pin._textureAlpha = value; + }, + width: function(pin, value, set) { + pin._width_ = value; + pin._width = value; + pin._transform_flag = true; + }, + height: function(pin, value, set) { + pin._height_ = value; + pin._height = value; + pin._transform_flag = true; + }, + scale: function(pin, value, set) { + pin._scaleX = value; + pin._scaleY = value; + pin._transform_flag = true; + }, + scaleX: function(pin, value, set) { + pin._scaleX = value; + pin._transform_flag = true; + }, + scaleY: function(pin, value, set) { + pin._scaleY = value; + pin._transform_flag = true; + }, + skew: function(pin, value, set) { + pin._skewX = value; + pin._skewY = value; + pin._transform_flag = true; + }, + skewX: function(pin, value, set) { + pin._skewX = value; + pin._transform_flag = true; + }, + skewY: function(pin, value, set) { + pin._skewY = value; + pin._transform_flag = true; + }, + rotation: function(pin, value, set) { + pin._rotation = value; + pin._transform_flag = true; + }, + pivot: function(pin, value, set) { + pin._pivotX = value; + pin._pivotY = value; + pin._pivoted = true; + pin._transform_flag = true; + }, + pivotX: function(pin, value, set) { + pin._pivotX = value; + pin._pivoted = true; + pin._transform_flag = true; + }, + pivotY: function(pin, value, set) { + pin._pivotY = value; + pin._pivoted = true; + pin._transform_flag = true; + }, + offset: function(pin, value, set) { + pin._offsetX = value; + pin._offsetY = value; + pin._translate_flag = true; + }, + offsetX: function(pin, value, set) { + pin._offsetX = value; + pin._translate_flag = true; + }, + offsetY: function(pin, value, set) { + pin._offsetY = value; + pin._translate_flag = true; + }, + align: function(pin, value, set) { + this.alignX.apply(this, arguments); + this.alignY.apply(this, arguments); + }, + alignX: function(pin, value, set) { + pin._alignX = value; + pin._aligned = true; + pin._translate_flag = true; + this.handleX(pin, value, set); + }, + alignY: function(pin, value, set) { + pin._alignY = value; + pin._aligned = true; + pin._translate_flag = true; + this.handleY(pin, value, set); + }, + handle: function(pin, value, set) { + this.handleX(pin, value, set); + this.handleY(pin, value, set); + }, + handleX: function(pin, value, set) { + pin._handleX = value; + pin._handled = true; + pin._translate_flag = true; + }, + handleY: function(pin, value, set) { + pin._handleY = value; + pin._handled = true; + pin._translate_flag = true; + }, + resizeMode: function(pin, value, set) { + if (Cut._isNum(set.resizeWidth) && Cut._isNum(set.resizeHeight)) { + this.resizeWidth(pin, set.resizeWidth, set, true); + this.resizeHeight(pin, set.resizeHeight, set, true); + if (value == "out") { + pin._scaleX = pin._scaleY = Math.max(pin._scaleX, pin._scaleY); + } else if (value == "in") { + pin._scaleX = pin._scaleY = Math.min(pin._scaleX, pin._scaleY); + } + pin._width = set.resizeWidth / pin._scaleX; + pin._height = set.resizeHeight / pin._scaleY; + } + }, + resizeWidth: function(pin, value, set, force) { + if (set.resizeMode && !force) { + return; + } + pin._scaleX = value / pin._width_; + pin._width = pin._width_; + pin._transform_flag = true; + }, + resizeHeight: function(pin, value, set, force) { + if (set.resizeMode && !force) { + return; + } + pin._scaleY = value / pin._height_; + pin._height = pin._height_; + pin._transform_flag = true; + }, + scaleMode: function(pin, value, set) { + if (Cut._isNum(set.scaleWidth) && Cut._isNum(set.scaleHeight)) { + this.scaleWidth(pin, set.scaleWidth, set, true); + this.scaleHeight(pin, set.scaleHeight, set, true); + if (value == "out") { + pin._scaleX = pin._scaleY = Math.max(pin._scaleX, pin._scaleY); + } else if (value == "in") { + pin._scaleX = pin._scaleY = Math.min(pin._scaleX, pin._scaleY); + } + } + }, + scaleWidth: function(pin, value, set, force) { + if (set.scaleMode && !force) { + return; + } + pin._scaleX = value / pin._width_; + pin._transform_flag = true; + }, + scaleHeight: function(pin, value, set, force) { + if (set.scaleMode && !force) { + return; + } + pin._scaleY = value / pin._height_; + pin._transform_flag = true; + }, + matrix: function(pin, value, set) { + this.scaleX(pin, value.a, set); + this.skewX(pin, value.c / value.d, set); + this.skewY(pin, value.b / value.a, set); + this.scaleY(pin, value.d, set); + this.offsetX(pin, value.e, set); + this.offsetY(pin, value.f, set); + this.rotation(pin, 0, set); + } +}; + +Cut.Matrix = function(a, b, c, d, e, f) { + this.changed = true; + this.a = a || 1; + this.b = b || 0; + this.c = c || 0; + this.d = d || 1; + this.e = e || 0; + this.f = f || 0; +}; + +Cut.Matrix.prototype.toString = function() { + return "[" + this.a + ", " + this.b + ", " + this.c + ", " + this.d + ", " + this.e + ", " + this.f + "]"; +}; + +Cut.Matrix.prototype.clone = function() { + return new Cut.Matrix(this.a, this.b, this.c, this.d, this.e, this.f); +}; + +Cut.Matrix.prototype.copyTo = function(m) { + m.copyFrom(this); + return this; +}; + +Cut.Matrix.prototype.copyFrom = function(m) { + this.changed = true; + this.a = m.a; + this.b = m.b; + this.c = m.c; + this.d = m.d; + this.e = m.e; + this.f = m.f; + return this; +}; + +Cut.Matrix.prototype.identity = function() { + this.changed = true; + this.a = 1; + this.b = 0; + this.c = 0; + this.d = 1; + this.e = 0; + this.f = 0; + return this; +}; + +Cut.Matrix.prototype.rotate = function(angle) { + if (!angle) { + return this; + } + this.changed = true; + var u = angle ? Math.cos(angle) : 1; + // android bug may give bad 0 values + var v = angle ? Math.sin(angle) : 0; + var a = u * this.a - v * this.b; + var b = u * this.b + v * this.a; + var c = u * this.c - v * this.d; + var d = u * this.d + v * this.c; + var e = u * this.e - v * this.f; + var f = u * this.f + v * this.e; + this.a = a; + this.b = b; + this.c = c; + this.d = d; + this.e = e; + this.f = f; + return this; +}; + +Cut.Matrix.prototype.translate = function(x, y) { + if (!x && !y) { + return this; + } + this.changed = true; + this.e += x; + this.f += y; + return this; +}; + +Cut.Matrix.prototype.scale = function(x, y) { + if (!(x - 1) && !(y - 1)) { + return this; + } + this.changed = true; + this.a *= x; + this.b *= y; + this.c *= x; + this.d *= y; + this.e *= x; + this.f *= y; + return this; +}; + +Cut.Matrix.prototype.skew = function(x, y) { + if (!x && !y) { + return this; + } + this.changed = true; + var a = this.a + this.b * x; + var b = this.b + this.a * y; + var c = this.c + this.d * x; + var d = this.d + this.c * y; + var e = this.e + this.f * x; + var f = this.f + this.e * y; + this.a = a; + this.b = b; + this.c = c; + this.d = d; + this.e = e; + this.f = f; + return this; +}; + +Cut.Matrix.prototype.concat = function(m) { + this.changed = true; + var n = this; + var a = n.a * m.a + n.b * m.c; + var b = n.b * m.d + n.a * m.b; + var c = n.c * m.a + n.d * m.c; + var d = n.d * m.d + n.c * m.b; + var e = n.e * m.a + m.e + n.f * m.c; + var f = n.f * m.d + m.f + n.e * m.b; + this.a = a; + this.b = b; + this.c = c; + this.d = d; + this.e = e; + this.f = f; + return this; +}; + +Cut.Matrix.prototype.reverse = function() { + if (this.changed) { + this.changed = false; + this.reversed = this.reversed || new Cut.Matrix(); + var z = this.a * this.d - this.b * this.c; + this.reversed.a = this.d / z; + this.reversed.b = -this.b / z; + this.reversed.c = -this.c / z; + this.reversed.d = this.a / z; + this.reversed.e = (this.c * this.f - this.e * this.d) / z; + this.reversed.f = (this.e * this.b - this.a * this.f) / z; + } + return this.reversed; +}; + +Cut.Matrix.prototype.map = function(p, q) { + q = q || {}; + q.x = this.a * p.x + this.c * p.y + this.e; + q.y = this.b * p.x + this.d * p.y + this.f; + return q; +}; + +Cut.Matrix.prototype.mapX = function(x, y) { + return this.a * x + this.c * y + this.e; +}; + +Cut.Matrix.prototype.mapY = function(x, y) { + return this.b * x + this.d * y + this.f; +}; + +Cut.Math = {}; + +Cut.Math.random = function(min, max) { + if (arguments.length == 0) { + max = 1, min = 0; + } else if (arguments.length == 1) { + max = min, min = 0; + } + if (min == max) { + return min; + } + return Math.random() * (max - min) + min; +}; + +Cut.Math.rotate = function(num, min, max) { + if (arguments.length < 3) { + max = min || 0; + min = 0; + } + if (max > min) { + num = (num - min) % (max - min); + return num + (num < 0 ? max : min); + } else { + num = (num - max) % (min - max); + return num + (num <= 0 ? min : max); + } +}; + +Cut.Math.length = function(x, y) { + return Math.sqrt(x * x + y * y); +}; + +Cut._TS = 0; + +Cut._isCut = function(obj) { + return obj instanceof Cut; +}; + +Cut._isNum = function(x) { + return typeof x === "number"; +}; + +Cut._isFunc = function(x) { + return typeof x === "function"; +}; + +Cut._isArray = "isArray" in Array ? Array.isArray : function(value) { + return Object.prototype.toString.call(value) === "[object Array]"; +}; + +Cut._extend = function(base, extension, attribs) { + if (attribs) { + for (var i = 0; i < attribs.length; i++) { + var attr = attribs[i]; + base[attr] = extension[attr]; + } + } else { + for (var attr in extension) { + base[attr] = extension[attr]; + } + } + return base; +}; + +Cut._now = function() { + if (typeof performance !== "undefined" && performance.now) { + return function() { + return performance.now(); + }; + } else if (Date.now) { + return function() { + return Date.now(); + }; + } else { + return function() { + return +new Date(); + }; + } +}(); + +Cut._function = function(value) { + return typeof value === "function" ? value : function() { + return value; + }; +}; + +Cut._options = function(options) { + options.get = function(name) { + return typeof this[name] == "function" ? this[name]() : this[name]; + }; + options.extend = function(obj) { + obj = typeof obj === "object" ? obj : {}; + for (var name in this) { + obj[name] = name in obj ? obj[name] : this[name]; + } + return obj; + }; + options.mixin = function(obj) { + if (typeof obj === "object") { + for (var name in obj) { + this[name] = obj[name]; + } + } + return this; + }; + return options; +}; + +Cut._status = function(msg) { + if (!Cut._statusbox) { + var statusbox = Cut._statusbox = document.createElement("div"); + statusbox.style.position = "absolute"; + statusbox.style.color = "black"; + statusbox.style.background = "white"; + statusbox.style.zIndex = 999; + statusbox.style.top = "5px"; + statusbox.style.right = "5px"; + statusbox.style.padding = "1px 5px"; + document.body.appendChild(statusbox); + } + Cut._statusbox.innerHTML = msg; +}; + +Cut.Easing = function() { + function identity(t) { + return t; + } + var easings = {}, modes = {}; + function select(token) { + if (typeof token === "function") { + return token; + } + if (typeof token !== "string") { + return identity; + } + var match = /^(\w+)(-(in|out|in-out|out-in))?(\((.*)\))?$/i.exec(token); + if (!match || !match.length) { + return identity; + } + var name = match[1] || "", mode = match[3] || "in", params = match[5]; + mode = modes[mode]; + params = params ? params.replace(/\s+/, "").split(",") : []; + var easing = easings[name]; + var fn = easing ? easing.fn || easing.fc.apply(easing.fc, params) : identity; + return mode ? mode(fn) : fn; + } + select.addMode = function(mode) { + var names = mode.name.split(/\s+/); + for (var i = 0; i < names.length; i++) { + names[i] && (modes[names[i]] = mode.fn); + } + }; + select.add = function(easing) { + var names = easing.name.split(/\s+/); + for (var i = 0; i < names.length; i++) { + names[i] && (easings[names[i]] = easing); + } + }; + return select; +}(); + +Cut.Easing.addMode({ + name: "in", + fn: function(f) { + return function(t) { + return f(t); + }; + } +}); + +Cut.Easing.addMode({ + name: "out", + fn: function(f) { + return function(t) { + return 1 - f(1 - t); + }; + } +}); + +Cut.Easing.addMode({ + name: "in-out", + fn: function(f) { + return function(t) { + return t < .5 ? f(2 * t) / 2 : 1 - f(2 * (1 - t)) / 2; + }; + } +}); + +Cut.Easing.addMode({ + name: "out-in", + fn: function(f) { + return function(t) { + return t < .5 ? 1 - f(2 * (1 - t)) / 2 : f(2 * t) / 2; + }; + } +}); + +Cut.Easing.add({ + name: "linear", + fn: function(t) { + return t; + } +}); + +Cut.Easing.add({ + name: "quad", + fn: function(t) { + return t * t; + } +}); + +Cut.Easing.add({ + name: "cubic", + fn: function(t) { + return t * t * t; + } +}); + +Cut.Easing.add({ + name: "quart", + fn: function(t) { + return t * t * t * t; + } +}); + +Cut.Easing.add({ + name: "quint", + fn: function(t) { + return t * t * t * t * t; + } +}); + +Cut.Easing.add({ + name: "sin sine", + fn: function(t) { + return 1 - Math.cos(t * Math.PI / 2); + } +}); + +Cut.Easing.add({ + name: "exp", + fn: function(t) { + return t == 0 ? 0 : Math.pow(2, 10 * (t - 1)); + } +}); + +Cut.Easing.add({ + name: "circle circ", + fn: function(t) { + return 1 - Math.sqrt(1 - t * t); + } +}); + +Cut.Easing.add({ + name: "bounce", + fn: function(t) { + return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375; + } +}); + +Cut.Easing.add({ + name: "poly", + fc: function(e) { + return function(t) { + return Math.pow(t, e); + }; + } +}); + +Cut.Easing.add({ + name: "elastic", + fc: function(a, p) { + p = p || .45; + a = a || 1; + var s = p / (2 * Math.PI) * Math.asin(1 / a); + return function(t) { + return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p); + }; + } +}); + +Cut.Easing.add({ + name: "back", + fc: function(s) { + s = arguments.length ? s : 1.70158; + return function(t) { + return t * t * ((s + 1) * t - s); + }; + } +}); + +if (typeof module !== "undefined") { + module.exports = Cut; +} + +if (typeof Cut === "undefined" && typeof require === "function") Cut = require("./cut-core"); + +DEBUG = (typeof DEBUG === "undefined" || DEBUG) && console; + +/** + * Default loader for web. + */ +window.addEventListener("load", function() { + DEBUG && console.log("On load."); + Cut.Loader.start(); +}, false); + +Cut.Loader.init = function(app, configs) { + configs = configs || {}; + var canvas = configs.canvas, context = null, full = false; + var width = 0, height = 0, ratio = 1; + if (typeof canvas === "string") { + canvas = document.getElementById(canvas); + } + if (!canvas) { + canvas = document.getElementById("cutjs"); + } + if (!canvas) { + full = true; + DEBUG && console.log("Creating element..."); + canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + var body = document.body; + body.insertBefore(canvas, body.firstChild); + } + context = canvas.getContext("2d"); + var devicePixelRatio = window.devicePixelRatio || 1; + var backingStoreRatio = context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; + ratio = devicePixelRatio / backingStoreRatio; + var requestAnimationFrame = window.requestAnimationFrame || window.msRequestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.oRequestAnimationFrame || function(callback) { + return window.setTimeout(callback, 1e3 / 60); + }; + DEBUG && console.log("Creating root..."); + var root = Cut.root(requestAnimationFrame, function() { + context.setTransform(1, 0, 0, 1, 0, 0); + context.clearRect(0, 0, width, height); + this.render(context); + }); + app(root, canvas); + resize(); + window.addEventListener("resize", resize, false); + function resize() { + if (full) { + width = window.innerWidth > 0 ? window.innerWidth : screen.width; + height = window.innerHeight > 0 ? window.innerHeight : screen.height; + canvas.style.width = width + "px"; + canvas.style.height = height + "px"; + } else { + width = canvas.clientWidth; + height = canvas.clientHeight; + } + width *= ratio; + height *= ratio; + canvas.width = width; + canvas.height = height; + DEBUG && console.log("Resize: " + width + " x " + height + " / " + ratio); + root.resize(width, height, ratio); + } + return root; +}; + +Cut.Loader.loadImage = function(src, handleComplete, handleError) { + var image = new Image(); + DEBUG && console.log("Loading image: " + src); + image.onload = handleComplete; + image.onerror = handleError; + image.src = src; + return image; +}; + +if (typeof Cut === "undefined" && typeof require === "function") Cut = require("./cut-core"); + +DEBUG = (typeof DEBUG === "undefined" || DEBUG) && console; + +Cut.Mouse = function() { + Cut.Mouse.subscribe.apply(Cut.Mouse, arguments); +}; + +Cut.Mouse.CLICK = "click"; + +Cut.Mouse.START = "touchstart mousedown"; + +Cut.Mouse.MOVE = "touchmove mousemove"; + +Cut.Mouse.END = "touchend mouseup"; + +Cut.Mouse.subscribe = function(root, elem, move) { + elem = elem || document; + elem.addEventListener("click", mouseClick); + // TODO: with 'if' mouse doesn't work on touch screen, without 'if' two events + // on Android + if ("ontouchstart" in window) { + elem.addEventListener("touchstart", function(event) { + mouseStart(event, "touchmove"); + }); + elem.addEventListener("touchend", function(event) { + mouseEnd(event, "touchmove"); + }); + move && elem.addEventListener("touchmove", mouseMove); + } else { + elem.addEventListener("mousedown", function(event) { + mouseStart(event, "mousemove"); + }); + elem.addEventListener("mouseup", function(event) { + mouseEnd(event, "mousemove"); + }); + move && elem.addEventListener("mousemove", mouseMove); + } + var visitor = null; + var abs = { + x: 0, + y: 0, + toString: function() { + return (this.x | 0) + "x" + (this.y | 0); + } + }; + var rel = { + x: 0, + y: 0, + toString: function() { + return abs + " / " + (this.x | 0) + "x" + (this.y | 0); + } + }; + var clicked = { + x: 0, + y: 0, + state: 0 + }; + function mouseStart(event, moveName) { + update(event, elem); + DEBUG && console.log("Mouse Start: " + event.type + " " + abs); + !move && elem.addEventListener(moveName, mouseMove); + event.preventDefault(); + publish(event.type, event); + clicked.x = abs.x; + clicked.y = abs.y; + clicked.state = 1; + } + function mouseEnd(event, moveName) { + try { + // New xy is not valid/available, last xy is used instead. + DEBUG && console.log("Mouse End: " + event.type + " " + abs); + !move && elem.removeEventListener(moveName, mouseMove); + event.preventDefault(); + publish(event.type, event); + if (clicked.state == 1 && clicked.x == abs.x && clicked.y == abs.y) { + DEBUG && console.log("Mouse Click [+]"); + publish("click", event); + clicked.state = 2; + } else { + clicked.state = 0; + } + } catch (e) { + console && console.log(e); + } + } + function mouseMove(event) { + try { + update(event, elem); + // DEBUG && console.log('Mouse Move: ' + event.type + ' ' + + // abs); + event.preventDefault(); + publish(event.type, event); + } catch (e) { + console && console.log(e); + } + } + function mouseClick(event) { + try { + update(event, elem); + DEBUG && console.log("Mouse Click: " + event.type + " " + abs); + event.preventDefault(); + if (clicked.state != 2) { + publish(event.type, event); + } else { + DEBUG && console.log("Mouse Click [-]"); + } + } catch (e) { + console && console.log(e); + } + } + function publish(type, event) { + abs.type = type; + abs.event = event; + rel.x = abs.x; + rel.y = abs.y; + // visitor.count = 0; + root.visit(visitor); + } + visitor = { + reverse: true, + visible: true, + start: function(cut) { + if (!cut._listens(abs.type)) { + return true; + } + }, + end: function(cut) { + // visitor.count++; + var listeners = cut.listeners(abs.type); + if (!listeners) { + return; + } + cut.matrix().reverse().map(abs, rel); + if (cut === root || cut.attr("spy")) {} else if (rel.x < 0 || rel.x > cut._pin._width || rel.y < 0 || rel.y > cut._pin._height) { + return; + } + rel.raw = abs.event; + for (var l = 0; l < listeners.length; l++) { + if (listeners[l].call(cut, rel)) { + return; + } + } + } + }; + function update(event, elem) { + var isTouch = false; + // touch screen events + if (event.touches) { + if (event.touches.length) { + isTouch = true; + abs.x = event.touches[0].pageX; + abs.y = event.touches[0].pageY; + } else { + return; + } + } else { + // mouse events + abs.x = event.clientX; + abs.y = event.clientY; + // See http://goo.gl/JuVnF2 + if (document.body.scrollLeft || document.body.scrollTop) {} else if (document.documentElement) { + abs.x += document.documentElement.scrollLeft; + abs.y += document.documentElement.scrollTop; + } + } + // accounts for border + abs.x -= elem.clientLeft || 0; + abs.y -= elem.clientTop || 0; + var par = elem; + while (par) { + abs.x -= par.offsetLeft || 0; + abs.y -= par.offsetTop || 0; + if (!isTouch) { + // touch events offset scrolling with pageX/Y + // so scroll offset not needed for them + abs.x += par.scrollLeft || 0; + abs.y += par.scrollTop || 0; + } + par = par.offsetParent; + } + // see loader + abs.x *= root._ratio || 1; + abs.y *= root._ratio || 1; + } +}; + +if (typeof define === 'function' && define.amd) { // AMD + define('Cut', [], function() { + return Cut; + }); +} \ No newline at end of file diff --git a/ajax/libs/cutjs/0.2.1/cut.fc.min.js b/ajax/libs/cutjs/0.2.1/cut.fc.min.js new file mode 100644 index 000000000..4aa20c395 --- /dev/null +++ b/ajax/libs/cutjs/0.2.1/cut.fc.min.js @@ -0,0 +1,8 @@ +/* + * CutJS 0.2.1 + * Copyright (c) 2013-2014 Ali Shakiba, Piqnt LLC and other contributors + * Available under the MIT license + * @license + */ +function Cut(){if(!(this instanceof Cut)){if("function"==typeof arguments[0])return Cut.Loader.load.apply(Cut.Loader,arguments);if("object"==typeof arguments[0])return Cut.Texture.add.apply(Cut.Texture,arguments)}Cut._stats.create++,this._id="",this._visible=!0,this._parent=null,this._next=null,this._prev=null,this._first=null,this._last=null,this._pin=new Cut.Pin(this),this._cutouts=[],this._tickBefore=[],this._tickAfter=[],this._alpha=1}DEBUG=("undefined"==typeof DEBUG||DEBUG)&&console,Cut._create=function(){if("function"==typeof Object.create)return function(){return Object.create.apply(null,arguments)};var t=function(){};return function(i){if(arguments.length>1)throw Error("Second argument is not supported!");if(null===i||"object"!=typeof i)throw Error("Invalid prototype!");return t.prototype=i,new t}}(),Cut._stats={create:0,tick:0,paint:0,paste:0},Cut.create=function(){return new Cut},Cut.prototype.render=function(t){Cut._stats.tick=Cut._stats.paint=Cut._stats.paste=0;var i=Cut._now(),e=this._lastTime?i-this._lastTime:0;this._lastTime=i,this._tick(e),this._paint(t),Cut._stats.fps=1e3/(Cut._now()-i)},Cut.prototype.MAX_ELAPSE=1/0,Cut.prototype._tick=function(t){if(this._visible){t>this.MAX_ELAPSE&&(t=this.MAX_ELAPSE),this._pin.tick();for(var i=this._tickBefore.length,e=0;i>e;e++)Cut._stats.tick++,this._tickBefore[e].call(this,t);for(var s,n=this._first;s=n;)n=s._next,s._tick(t);for(var i=this._tickAfter.length,e=0;i>e;e++)Cut._stats.tick++,this._tickAfter[e].call(this,t)}},Cut.prototype.tick=function(t,i){i?this._tickBefore.push(t):this._tickAfter.push(t)},Cut.prototype.untick=function(t){var i;t&&((i=this._tickBefore.indexOf(t))>=0?this._tickBefore.splice(i,1):(i=this._tickAfter.indexOf(t))>=0&&this._tickAfter.splice(i,1))},Cut.prototype._paint=function(t){if(this._visible){Cut._stats.paint++;var i=this._pin.absoluteMatrix();t.setTransform(i.a,i.b,i.c,i.d,i.e,i.f),this._alpha=this._pin._alpha*(this._parent?this._parent._alpha:1);var e=this._pin._textureAlpha*this._alpha;t.globalAlpha!=e&&(t.globalAlpha=e);for(var s=this._cutouts.length,n=0;s>n;n++)this._cutouts[n].paste(t);t.globalAlpha!=this._alpha&&(t.globalAlpha=this._alpha);for(var r,o=this._first;r=o;)o=r._next,r._paint(t)}},Cut.prototype.toString=function(){return"["+this._id+"]"},Cut.prototype.id=function(t){return arguments.length?(this._id=t,this):this._id},Cut.prototype.attr=function(t,i){return arguments.length<2?this._attrs?this._attrs[t]:void 0:((this._attrs?this._attrs:this._attrs={})[t]=i,this)},Cut.prototype.on=Cut.prototype.listen=function(t,i){if("function"!=typeof i)return this;t=(Cut._isArray(t)?t.join(" "):t).split(/\s+/);for(var e=0;e0&&this._listenOn(i)},Cut.prototype._listenOff=function(t){if("string"==typeof t)this._listenersCount=this._listenersCount||{},1==this._listenersCount[t]&&this._parent&&this._parent._listenOff(t),this._listenersCount[t]=Math.max((this._listenersCount[t]||0)-1,0);else if("object"==typeof t&&t._listenersCount)for(var i in t._listenersCount)t._listenersCount[i]>0&&this._listenOff(i)},Cut.prototype._listens=function(t){return this._listenersCount&&this._listenersCount[t]||0},Cut.prototype.touch=function(){return this._ts_touch=Cut._TS++,this._parent&&this._parent.touch(),this},Cut.prototype.pin=function(){if(!arguments.length)return this._pin;var t=this._pin.update.apply(this._pin,arguments);return t===this._pin?this:t},Cut.prototype.matrix=function(){return this._pin.absoluteMatrix(this,this._parent?this._parent._pin:null)},Cut.prototype.tween=function(t,i){return(this._tween||(this._tween=new Cut.Tween(this))).tween(t,i)},Cut.Tween=function(t){var i=this;this._owner=t,this._queue=[],this._next=null,t.tick(function(e){if(i._queue.length){this.touch();var s=i._queue[0];if(s.time?s.time+=e:s.time=1,!(s.time=1;r=r>1?1:r,r="function"==typeof s.easing?s.easing(r):r;var h=1-r;for(var n in s.keys)t.pin(n,s.start[n]*h+s.end[s.keys[n]]*r);o&&(i._queue.shift(),s.then&&s.then.call(t))}}},!0)},Cut.Tween.prototype.tween=function(t,i){return this._next={id:Cut._TS++,end:{},duration:t||400,delay:i||0},this},Cut.Tween.prototype.pin=function(){this._next!==this._queue[this._queue.length-1]&&(this._owner.touch(),this._queue.push(this._next));var t=this._next.end;return 1===arguments.length?Cut._extend(t,arguments[0]):2===arguments.length&&(t[arguments[0]]=arguments[1]),this},Cut.Tween.prototype.clear=function(t){for(var i;i=this._queue.shift();)t&&this._owner.pin(i.end);return this},Cut.Tween.prototype.then=function(t){return this._next.then=t,this},Cut.Tween.prototype.ease=function(t){return this._next.easing=Cut.Easing(t),this},Cut.root=function(t,i){return new Cut.Root(t,i)},Cut.Root=function(t,i){Cut.String.prototype._super.apply(this,arguments),this._paused=!0,this._render=i,this._request=t;var e=this,s=function(){e._paused!==!0&&(e._mo_touch=e._ts_touch,e._render(),e.request(),e._mo_touch==e._ts_touch&&e.pause())};this.request=function(){this._request.call(null,s)},this.on("viewport",function(t){return this._size={width:t.width,height:t.height},this._updateViewbox(),!0})},Cut.Root.prototype=Cut._create(Cut.prototype),Cut.Root.prototype._super=Cut,Cut.Root.prototype.constructor=Cut.Root,Cut.Root.prototype.viewbox=function(t,i,e){return this._viewbox={width:t,height:i,mode:/^(in|out)$/.test(e)?e:"in"},this._updateViewbox(),this},Cut.Root.prototype._updateViewbox=function(){var t=this._viewbox,i=this._size;i&&this.pin(t?{width:t.width,height:t.height,resizeMode:t.mode,resizeWidth:i.width,resizeHeight:i.height}:{width:i.width,height:i.height})},Cut.Root.prototype.start=function(){return this.resume()},Cut.Root.prototype.resume=function(t){return(this._paused||t)&&(this._paused=!1,this.request()),this},Cut.Root.prototype.pause=function(){return this._paused=!0,this},Cut.Root.prototype.touch=function(){return this.resume(),Cut.prototype.touch.apply(this,arguments)},Cut.Root.prototype.resize=function(t,i,e){this._ratio=e||1;var s={};return s.width=t,s.height=i,s.ratio=e,this.visit({start:function(t){return t._listens("viewport")?void t.publish("viewport",[s]):!0}}),this},Cut.image=function(t){var i=new Cut.Image;return t&&i.image(t),i},Cut.Image=function(){Cut.Image.prototype._super.apply(this,arguments)},Cut.Image.prototype=Cut._create(Cut.prototype),Cut.Image.prototype._super=Cut,Cut.Image.prototype.constructor=Cut.Image,Cut.Image.prototype.setImage=function(){this.image.apply(this,arguments)},Cut.Image.prototype.image=function(t){return this._cutouts[0]=Cut.Out.select(t),this._cutouts.length=1,this.pin({width:this._cutouts[0]?this._cutouts[0].dWidth():0,height:this._cutouts[0]?this._cutouts[0].dHeight():0}),this._cutout=this._cutouts[0].clone(),this},Cut.Image.prototype.cropX=function(t,i){return this.image(this._cutouts[0].cropX(t,i))},Cut.Image.prototype.cropY=function(t,i){return this.image(this._cutouts[0].cropY(t,i))},Cut.Image.prototype._slice=function(t){return this._cutouts[t]||(this._cutouts[t]=this._cutout.clone())},Cut.Image.prototype.tile=function(t){return this.untick(this._repeatTicker),this._repeatTicker=function(){if(this._mo_tile!=this._ts_touch){this._mo_tile=this._ts_touch;var i=this._cutout._left,e=this._cutout._right,s=this._cutout._top,n=this._cutout._bottom,r=this._cutout.dWidth()-i-e,o=this._cutout.dHeight()-s-n,h=this.pin("width");h=t?h:h-i-e;var u=this.pin("height");u=t?u:u-s-n;var a=t?-i:0,_=t?-s:0,c=0;s&&i&&this._slice(c++).cropX(i,0).cropY(s,0).offset(a,_),n&&i&&this._slice(c++).cropX(i,0).cropY(n,o+s).offset(a,_+u+s),s&&e&&this._slice(c++).cropX(e,r+i).cropY(s,0).offset(a+h+i,_),n&&e&&this._slice(c++).cropX(e,r+i).cropY(n,o+s).offset(a+h+i,_+u+s);for(var f=a+i,p=h;p>0;){var l=Math.min(r,p);p-=r;for(var d=_+s,g=u;g>0;){var m=Math.min(o,g);g-=o,this._slice(c++).cropX(l,i).cropY(m,s).offset(f,d),0>=p&&(i&&this._slice(c++).cropX(i,0).cropY(m,s).offset(a,d),e&&this._slice(c++).cropX(e,r+i).cropY(m,s).offset(f+l,d)),d+=m}s&&this._slice(c++).cropX(l,i).cropY(s,0).offset(f,_),n&&this._slice(c++).cropX(l,i).cropY(n,o+s).offset(f,d),f+=l}this._cutouts.length=c}},this.tick(this._repeatTicker),this},Cut.Image.prototype.stretch=function(t){return this.untick(this._repeatTicker),this._repeatTicker=function(){if(this._mo_stretch!=this._pin._ts_transform){this._mo_stretch=this._pin._ts_transform;var i=this._cutout._left,e=this._cutout._right,s=this._cutout._top,n=this._cutout._bottom,r=this._cutout.dWidth(),o=this._cutout.dHeight(),h=this.pin("width"),u=this.pin("height");h=t?h+i+e:Math.max(h,i+e),u=t?u+s+n:Math.max(u,s+n);var a=0;s&&i&&this._slice(a++).cropX(i,0).cropY(s,0).offset(0,0),n&&i&&this._slice(a++).cropX(i,0).cropY(n,o-n).offset(0,u-n),s&&e&&this._slice(a++).cropX(e,r-e).cropY(s,0).offset(h-e,0),n&&e&&this._slice(a++).cropX(e,r-e).cropY(n,o-n).offset(h-e,u-n),s&&this._slice(a++).cropX(r-i-e,i).cropY(s,0).offset(i,0).dWidth(h-i-e),n&&this._slice(a++).cropX(r-i-e,i).cropY(n,o-n).offset(i,u-n).dWidth(h-i-e),i&&this._slice(a++).cropX(i,0).cropY(o-s-n,s).offset(0,s).dHeight(u-s-n),e&&this._slice(a++).cropX(e,r-e).cropY(o-s-n,s).offset(h-e,s).dHeight(u-s-n),this._slice(a++).cropX(r-i-e,i).cropY(o-s-n,s).offset(i,s).dWidth(h-i-e).dHeight(u-s-n),this._cutouts.length=a}},this.tick(this._repeatTicker),this},Cut.anim=function(t,i){var e=(new Cut.Anim).frames(t).gotoFrame(0);return i&&e.fps(i),e},Cut.Anim=function(){Cut.Anim.prototype._super.apply(this,arguments),this._fps=Cut.Anim.FPS,this._ft=1e3/this._fps,this._time=0,this._frame=0,this._frames=[],this._labels={},this.tick(function(){if(this._time&&this._frames.length>1){var t=Cut._now()-this._time;if(t>=this._ft){var i=t<2*this._ft?1:Math.floor(t/this._ft);this._time+=i*this._ft,this.moveFrame(i),this._repeat&&(this._repeat-=i)<=0&&(this.stop(),this._callback&&this._callback())}this.touch()}},!1)},Cut.Anim.prototype=Cut._create(Cut.prototype),Cut.Anim.prototype._super=Cut,Cut.Anim.prototype.constructor=Cut.Anim,Cut.Anim.FPS=22,Cut.Anim.prototype.fps=function(t){return arguments.length?(this._fps=t||Cut.Anim.FPS,this._ft=1e3/this._fps,this):this._fps},Cut.Anim.prototype.setFrames=function(){this.frames.apply(this,arguments)},Cut.Anim.prototype.frames=function(t){if(this._time=this._time||0,this._frame=0,this._frames=[],this._labels={},t=Cut.Out.select(t,!0),t&&t.length)for(var i=0;i=0;t--)e[t].pause()},resume:function(){for(var t=i.length-1;t>=0;t--)e[t].resume()},getImage:function(t){return s[t]},addImage:function(t,i){return s[i]=t,this}}}(),Cut.Texture=function(t){function i(){return r||(r=Cut.Loader.getImage(t.imagePath)),r}function e(i){if(!i||i.isCutout)return i;"function"==typeof t.map?i=t.map(i):"function"==typeof t.filter&&(i=t.filter(i));var e=t.ratio||1;1!=e&&(i.x*=e,i.y*=e,i.width*=e,i.height*=e,i.top*=e,i.bottom*=e,i.left*=e,i.right*=e);var s=t.trim||0;return s&&(i.x+=s,i.y+=s,i.width-=2*s,i.height-=2*s,i.top-=s,i.bottom-=s,i.left-=s,i.right-=s),i}function s(e){return e.isCutout||(e=new Cut.Out(e,i,t.imageRatio)),e}t.cutouts=t.cutouts||[];var n={},r=null;this.getImagePath=function(){return t.imagePath};for(var o=0;oe)throw"Invalid selector: '"+t+"'";var s=[t.slice(0,e),t.slice(e+1)],n=Cut.Texture._list[s[0]];if(null==n)throw"Texture not found: '"+t+"'";return n.select(s[1],i)},Cut.drawing=function(){return Cut.image(Cut.Out.drawing.apply(Cut.Out,arguments))},Cut.Out.drawing=function(){var t=document.createElement("canvas"),i=t.getContext("2d"),e={},s=0;"object"==typeof arguments[s]?e=arguments[s++]:("string"==typeof arguments[s]&&(e.name=arguments[s++]),e.width=arguments[s++],e.height=arguments[s++],"number"==typeof arguments[s]&&(e.ratio=arguments[s++]),e.x=0,e.y=0),e.ratio=e.ratio||1,e.name=e.name||1e3*Math.random()|0,t.width=Math.ceil(e.width*e.ratio),t.height=Math.ceil(e.height*e.ratio);var n=new Cut.Out(e,t,e.ratio);return"function"==typeof arguments[arguments.length-1]&&arguments[arguments.length-1].call(n,i,e.ratio),n},Cut.Pin=function(t){this._owner=t,this._parent=null,this._relativeMatrix=new Cut.Matrix,this._absoluteMatrix=new Cut.Matrix,this.reset()},Cut.Pin.prototype.reset=function(){this._textureAlpha=1,this._alpha=1,this._width=0,this._height=0,this._scaleX=1,this._scaleY=1,this._skewX=0,this._skewY=0,this._rotation=0,this._pivoted=!1,this._pivotX=null,this._pivotY=null,this._handled=!1,this._handleX=0,this._handleY=0,this._aligned=!1,this._alignX=0,this._alignY=0,this._offsetX=0,this._offsetY=0,this._boxX=0,this._boxY=0,this._boxWidth=this._width,this._boxHeight=this._height,this._ts_translate=Cut._TS++,this._ts_transform=Cut._TS++,this._ts_matrix=Cut._TS++},Cut.Pin.prototype.tick=function(){return this._parent=this._owner._parent&&this._owner._parent._pin,this._handled&&this._mo_handle!=this._ts_transform&&(this._mo_handle=this._ts_transform,this._ts_translate=Cut._TS++),this._aligned&&this._parent&&this._mo_align!=this._parent._ts_transform&&(this._mo_align=this._parent._ts_transform,this._ts_translate=Cut._TS++),this},Cut.Pin.prototype.toString=function(){return this._owner.id()+" ["+this._alignX+", "+this._alignY+"] ["+this._handleX+", "+this._handleY+"] ["+(this._parent?this._parent._owner.id():null)+"]"},Cut.Pin.prototype.absoluteMatrix=function(){var t=Math.max(this._ts_transform,this._ts_translate,this._parent?this._parent._ts_matrix:0);if(this._mo_abs==t)return this._absoluteMatrix;this._mo_abs=t;var i=this._absoluteMatrix;return i.copyFrom(this.relativeMatrix()),this._parent&&i.concat(this._parent._absoluteMatrix),this._ts_matrix=Cut._TS++,i},Cut.Pin.prototype.relativeMatrix=function(){var t=Math.max(this._ts_transform,this._ts_translate,this._parent?this._parent._ts_transform:0);if(this._mo_rel==t)return this._relativeMatrix;this._mo_rel=t;var i=this._relativeMatrix;if(i.identity(),this._pivoted&&i.translate(-this._pivotX*this._width,-this._pivotY*this._height),i.scale(this._scaleX,this._scaleY),i.skew(this._skewX,this._skewY),i.rotate(this._rotation),this._pivoted&&i.translate(this._pivotX*this._width,this._pivotY*this._height),this._pivoted)this._boxX=0,this._boxY=0,this._boxWidth=this._width,this._boxHeight=this._height;else{var e,s,n=i;n.a>0&&n.c>0||n.a<0&&n.c<0?(e=0,s=n.a*this._width+n.c*this._height):(e=n.a*this._width,s=n.c*this._height),e>s?(this._boxX=s,this._boxWidth=e-s):(this._boxX=e,this._boxWidth=s-e),n.b>0&&n.d>0||n.b<0&&n.d<0?(e=0,s=n.b*this._width+n.d*this._height):(e=n.b*this._width,s=n.d*this._height),e>s?(this._boxY=s,this._boxHeight=e-s):(this._boxY=e,this._boxHeight=s-e)}return this._x=this._offsetX,this._y=this._offsetY,this._x-=this._boxX+this._handleX*this._boxWidth,this._y-=this._boxY+this._handleY*this._boxHeight,this._aligned&&this._parent&&(this._parent.relativeMatrix(),this._x+=this._alignX*this._parent._width,this._y+=this._alignY*this._parent._height),i.translate(this._x,this._y),this._relativeMatrix},Cut.Pin._SINGLE={},Cut.Pin.prototype.update=function(){if(1==arguments.length&&"string"==typeof arguments[0])return this["_"+arguments[0]];this._transform_flag=!1,this._translate_flag=!1;var t=null,i=null,e=null;if(2==arguments.length&&"string"==typeof arguments[0]){for(i in Cut.Pin._SINGLE)delete Cut.Pin._SINGLE[i];(t=Cut.Pin._SINGLE)[arguments[0]]=arguments[1]}else 1==arguments.length&&"object"==typeof arguments[0]&&(t=arguments[0]);if(t)for(i in t)"undefined"!=typeof(e=t[i])&&(setter=Cut.Pin._setters[i])&&setter.call(Cut.Pin._setters,this,e,t);return this._translate_flag&&(this._translate_flag=!1,this._ts_translate=Cut._TS++),this._transform_flag&&(this._transform_flag=!1,this._ts_transform=Cut._TS++),this._owner&&(this._owner._ts_pin=Cut._TS++,this._owner.touch()),this},Cut.Pin._setters={alpha:function(t,i){t._alpha=i},textureAlpha:function(t,i){t._textureAlpha=i},width:function(t,i){t._width_=i,t._width=i,t._transform_flag=!0},height:function(t,i){t._height_=i,t._height=i,t._transform_flag=!0},scale:function(t,i){t._scaleX=i,t._scaleY=i,t._transform_flag=!0},scaleX:function(t,i){t._scaleX=i,t._transform_flag=!0},scaleY:function(t,i){t._scaleY=i,t._transform_flag=!0},skew:function(t,i){t._skewX=i,t._skewY=i,t._transform_flag=!0},skewX:function(t,i){t._skewX=i,t._transform_flag=!0},skewY:function(t,i){t._skewY=i,t._transform_flag=!0},rotation:function(t,i){t._rotation=i,t._transform_flag=!0},pivot:function(t,i){t._pivotX=i,t._pivotY=i,t._pivoted=!0,t._transform_flag=!0},pivotX:function(t,i){t._pivotX=i,t._pivoted=!0,t._transform_flag=!0},pivotY:function(t,i){t._pivotY=i,t._pivoted=!0,t._transform_flag=!0},offset:function(t,i){t._offsetX=i,t._offsetY=i,t._translate_flag=!0},offsetX:function(t,i){t._offsetX=i,t._translate_flag=!0},offsetY:function(t,i){t._offsetY=i,t._translate_flag=!0},align:function(){this.alignX.apply(this,arguments),this.alignY.apply(this,arguments)},alignX:function(t,i,e){t._alignX=i,t._aligned=!0,t._translate_flag=!0,this.handleX(t,i,e)},alignY:function(t,i,e){t._alignY=i,t._aligned=!0,t._translate_flag=!0,this.handleY(t,i,e)},handle:function(t,i,e){this.handleX(t,i,e),this.handleY(t,i,e)},handleX:function(t,i){t._handleX=i,t._handled=!0,t._translate_flag=!0},handleY:function(t,i){t._handleY=i,t._handled=!0,t._translate_flag=!0},resizeMode:function(t,i,e){Cut._isNum(e.resizeWidth)&&Cut._isNum(e.resizeHeight)&&(this.resizeWidth(t,e.resizeWidth,e,!0),this.resizeHeight(t,e.resizeHeight,e,!0),"out"==i?t._scaleX=t._scaleY=Math.max(t._scaleX,t._scaleY):"in"==i&&(t._scaleX=t._scaleY=Math.min(t._scaleX,t._scaleY)),t._width=e.resizeWidth/t._scaleX,t._height=e.resizeHeight/t._scaleY)},resizeWidth:function(t,i,e,s){(!e.resizeMode||s)&&(t._scaleX=i/t._width_,t._width=t._width_,t._transform_flag=!0)},resizeHeight:function(t,i,e,s){(!e.resizeMode||s)&&(t._scaleY=i/t._height_,t._height=t._height_,t._transform_flag=!0)},scaleMode:function(t,i,e){Cut._isNum(e.scaleWidth)&&Cut._isNum(e.scaleHeight)&&(this.scaleWidth(t,e.scaleWidth,e,!0),this.scaleHeight(t,e.scaleHeight,e,!0),"out"==i?t._scaleX=t._scaleY=Math.max(t._scaleX,t._scaleY):"in"==i&&(t._scaleX=t._scaleY=Math.min(t._scaleX,t._scaleY)))},scaleWidth:function(t,i,e,s){(!e.scaleMode||s)&&(t._scaleX=i/t._width_,t._transform_flag=!0)},scaleHeight:function(t,i,e,s){(!e.scaleMode||s)&&(t._scaleY=i/t._height_,t._transform_flag=!0)},matrix:function(t,i,e){this.scaleX(t,i.a,e),this.skewX(t,i.c/i.d,e),this.skewY(t,i.b/i.a,e),this.scaleY(t,i.d,e),this.offsetX(t,i.e,e),this.offsetY(t,i.f,e),this.rotation(t,0,e)}},Cut.Matrix=function(t,i,e,s,n,r){this.changed=!0,this.a=t||1,this.b=i||0,this.c=e||0,this.d=s||1,this.e=n||0,this.f=r||0},Cut.Matrix.prototype.toString=function(){return"["+this.a+", "+this.b+", "+this.c+", "+this.d+", "+this.e+", "+this.f+"]"},Cut.Matrix.prototype.clone=function(){return new Cut.Matrix(this.a,this.b,this.c,this.d,this.e,this.f)},Cut.Matrix.prototype.copyTo=function(t){return t.copyFrom(this),this},Cut.Matrix.prototype.copyFrom=function(t){return this.changed=!0,this.a=t.a,this.b=t.b,this.c=t.c,this.d=t.d,this.e=t.e,this.f=t.f,this},Cut.Matrix.prototype.identity=function(){return this.changed=!0,this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0,this},Cut.Matrix.prototype.rotate=function(t){if(!t)return this;this.changed=!0;var i=t?Math.cos(t):1,e=t?Math.sin(t):0,s=i*this.a-e*this.b,n=i*this.b+e*this.a,r=i*this.c-e*this.d,o=i*this.d+e*this.c,h=i*this.e-e*this.f,u=i*this.f+e*this.e;return this.a=s,this.b=n,this.c=r,this.d=o,this.e=h,this.f=u,this},Cut.Matrix.prototype.translate=function(t,i){return t||i?(this.changed=!0,this.e+=t,this.f+=i,this):this},Cut.Matrix.prototype.scale=function(t,i){return t-1||i-1?(this.changed=!0,this.a*=t,this.b*=i,this.c*=t,this.d*=i,this.e*=t,this.f*=i,this):this},Cut.Matrix.prototype.skew=function(t,i){if(!t&&!i)return this;this.changed=!0;var e=this.a+this.b*t,s=this.b+this.a*i,n=this.c+this.d*t,r=this.d+this.c*i,o=this.e+this.f*t,h=this.f+this.e*i;return this.a=e,this.b=s,this.c=n,this.d=r,this.e=o,this.f=h,this},Cut.Matrix.prototype.concat=function(t){this.changed=!0;var i=this,e=i.a*t.a+i.b*t.c,s=i.b*t.d+i.a*t.b,n=i.c*t.a+i.d*t.c,r=i.d*t.d+i.c*t.b,o=i.e*t.a+t.e+i.f*t.c,h=i.f*t.d+t.f+i.e*t.b;return this.a=e,this.b=s,this.c=n,this.d=r,this.e=o,this.f=h,this},Cut.Matrix.prototype.reverse=function(){if(this.changed){this.changed=!1,this.reversed=this.reversed||new Cut.Matrix; +var t=this.a*this.d-this.b*this.c;this.reversed.a=this.d/t,this.reversed.b=-this.b/t,this.reversed.c=-this.c/t,this.reversed.d=this.a/t,this.reversed.e=(this.c*this.f-this.e*this.d)/t,this.reversed.f=(this.e*this.b-this.a*this.f)/t}return this.reversed},Cut.Matrix.prototype.map=function(t,i){return i=i||{},i.x=this.a*t.x+this.c*t.y+this.e,i.y=this.b*t.x+this.d*t.y+this.f,i},Cut.Matrix.prototype.mapX=function(t,i){return this.a*t+this.c*i+this.e},Cut.Matrix.prototype.mapY=function(t,i){return this.b*t+this.d*i+this.f},Cut.Math={},Cut.Math.random=function(t,i){return 0==arguments.length?(i=1,t=0):1==arguments.length&&(i=t,t=0),t==i?t:Math.random()*(i-t)+t},Cut.Math.rotate=function(t,i,e){return arguments.length<3&&(e=i||0,i=0),e>i?(t=(t-i)%(e-i),t+(0>t?e:i)):(t=(t-e)%(i-e),t+(0>=t?i:e))},Cut.Math.length=function(t,i){return Math.sqrt(t*t+i*i)},Cut._TS=0,Cut._isCut=function(t){return t instanceof Cut},Cut._isNum=function(t){return"number"==typeof t},Cut._isFunc=function(t){return"function"==typeof t},Cut._isArray="isArray"in Array?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},Cut._extend=function(t,i,e){if(e)for(var s=0;si?t(2*i)/2:1-t(2*(1-i))/2}}}),Cut.Easing.addMode({name:"out-in",fn:function(t){return function(i){return.5>i?1-t(2*(1-i))/2:t(2*i)/2}}}),Cut.Easing.add({name:"linear",fn:function(t){return t}}),Cut.Easing.add({name:"quad",fn:function(t){return t*t}}),Cut.Easing.add({name:"cubic",fn:function(t){return t*t*t}}),Cut.Easing.add({name:"quart",fn:function(t){return t*t*t*t}}),Cut.Easing.add({name:"quint",fn:function(t){return t*t*t*t*t}}),Cut.Easing.add({name:"sin sine",fn:function(t){return 1-Math.cos(t*Math.PI/2)}}),Cut.Easing.add({name:"exp",fn:function(t){return 0==t?0:Math.pow(2,10*(t-1))}}),Cut.Easing.add({name:"circle circ",fn:function(t){return 1-Math.sqrt(1-t*t)}}),Cut.Easing.add({name:"bounce",fn:function(t){return 1/2.75>t?7.5625*t*t:2/2.75>t?7.5625*(t-=1.5/2.75)*t+.75:2.5/2.75>t?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}}),Cut.Easing.add({name:"poly",fc:function(t){return function(i){return Math.pow(i,t)}}}),Cut.Easing.add({name:"elastic",fc:function(t,i){i=i||.45,t=t||1;var e=i/(2*Math.PI)*Math.asin(1/t);return function(s){return 1+t*Math.pow(2,-10*s)*Math.sin(2*(s-e)*Math.PI/i)}}}),Cut.Easing.add({name:"back",fc:function(t){return t=arguments.length?t:1.70158,function(i){return i*i*((t+1)*i-t)}}}),"undefined"!=typeof module&&(module.exports=Cut),"undefined"==typeof Cut&&"function"==typeof require&&(Cut=require("./cut-core")),DEBUG=("undefined"==typeof DEBUG||DEBUG)&&console,window.addEventListener("load",function(){DEBUG&&console.log("On load."),Cut.Loader.start()},!1),Cut.Loader.init=function(t,i){function e(){r?(o=window.innerWidth>0?window.innerWidth:screen.width,h=window.innerHeight>0?window.innerHeight:screen.height,s.style.width=o+"px",s.style.height=h+"px"):(o=s.clientWidth,h=s.clientHeight),o*=u,h*=u,s.width=o,s.height=h,DEBUG&&console.log("Resize: "+o+" x "+h+" / "+u),p.resize(o,h,u)}i=i||{};var s=i.canvas,n=null,r=!1,o=0,h=0,u=1;if("string"==typeof s&&(s=document.getElementById(s)),s||(s=document.getElementById("cutjs")),!s){r=!0,DEBUG&&console.log("Creating element..."),s=document.createElement("canvas"),s.style.position="absolute";var a=document.body;a.insertBefore(s,a.firstChild)}n=s.getContext("2d");var _=window.devicePixelRatio||1,c=n.webkitBackingStorePixelRatio||n.mozBackingStorePixelRatio||n.msBackingStorePixelRatio||n.oBackingStorePixelRatio||n.backingStorePixelRatio||1;u=_/c;var f=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.oRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)};DEBUG&&console.log("Creating root...");var p=Cut.root(f,function(){n.setTransform(1,0,0,1,0,0),n.clearRect(0,0,o,h),this.render(n)});return t(p,s),e(),window.addEventListener("resize",e,!1),p},Cut.Loader.loadImage=function(t,i,e){var s=new Image;return DEBUG&&console.log("Loading image: "+t),s.onload=i,s.onerror=e,s.src=t,s},"undefined"==typeof Cut&&"function"==typeof require&&(Cut=require("./cut-core")),DEBUG=("undefined"==typeof DEBUG||DEBUG)&&console,Cut.Mouse=function(){Cut.Mouse.subscribe.apply(Cut.Mouse,arguments)},Cut.Mouse.CLICK="click",Cut.Mouse.START="touchstart mousedown",Cut.Mouse.MOVE="touchmove mousemove",Cut.Mouse.END="touchend mouseup",Cut.Mouse.subscribe=function(t,i,e){function s(t,s){u(t,i),DEBUG&&console.log("Mouse Start: "+t.type+" "+_),!e&&i.addEventListener(s,r),t.preventDefault(),h(t.type,t),f.x=_.x,f.y=_.y,f.state=1}function n(t,s){try{DEBUG&&console.log("Mouse End: "+t.type+" "+_),!e&&i.removeEventListener(s,r),t.preventDefault(),h(t.type,t),1==f.state&&f.x==_.x&&f.y==_.y?(DEBUG&&console.log("Mouse Click [+]"),h("click",t),f.state=2):f.state=0}catch(n){console&&console.log(n)}}function r(t){try{u(t,i),t.preventDefault(),h(t.type,t)}catch(e){console&&console.log(e)}}function o(t){try{u(t,i),DEBUG&&console.log("Mouse Click: "+t.type+" "+_),t.preventDefault(),2!=f.state?h(t.type,t):DEBUG&&console.log("Mouse Click [-]")}catch(e){console&&console.log(e)}}function h(i,e){_.type=i,_.event=e,c.x=_.x,c.y=_.y,t.visit(a)}function u(i,e){var s=!1;if(i.touches){if(!i.touches.length)return;s=!0,_.x=i.touches[0].pageX,_.y=i.touches[0].pageY}else _.x=i.clientX,_.y=i.clientY,document.body.scrollLeft||document.body.scrollTop||document.documentElement&&(_.x+=document.documentElement.scrollLeft,_.y+=document.documentElement.scrollTop);_.x-=e.clientLeft||0,_.y-=e.clientTop||0;for(var n=e;n;)_.x-=n.offsetLeft||0,_.y-=n.offsetTop||0,s||(_.x+=n.scrollLeft||0,_.y+=n.scrollTop||0),n=n.offsetParent;_.x*=t._ratio||1,_.y*=t._ratio||1}i=i||document,i.addEventListener("click",o),"ontouchstart"in window?(i.addEventListener("touchstart",function(t){s(t,"touchmove")}),i.addEventListener("touchend",function(t){n(t,"touchmove")}),e&&i.addEventListener("touchmove",r)):(i.addEventListener("mousedown",function(t){s(t,"mousemove")}),i.addEventListener("mouseup",function(t){n(t,"mousemove")}),e&&i.addEventListener("mousemove",r));var a=null,_={x:0,y:0,toString:function(){return(0|this.x)+"x"+(0|this.y)}},c={x:0,y:0,toString:function(){return _+" / "+(0|this.x)+"x"+(0|this.y)}},f={x:0,y:0,state:0};a={reverse:!0,visible:!0,start:function(t){return t._listens(_.type)?void 0:!0},end:function(i){var e=i.listeners(_.type);if(e){if(i.matrix().reverse().map(_,c),i===t||i.attr("spy"));else if(c.x<0||c.x>i._pin._width||c.y<0||c.y>i._pin._height)return;c.raw=_.event;for(var s=0;s 1) { + throw Error("Second argument is not supported!"); + } + if (proto === null || typeof proto != "object") { + throw Error("Invalid prototype!"); + } + F.prototype = proto; + return new F(); + }; + } +}(); + +Cut._stats = { + create: 0, + tick: 0, + paint: 0, + paste: 0 +}; + +Cut.create = function() { + return new Cut(); +}; + +Cut.prototype.render = function(context) { + Cut._stats.tick = Cut._stats.paint = Cut._stats.paste = 0; + var now = Cut._now(); + var elapsed = this._lastTime ? now - this._lastTime : 0; + this._lastTime = now; + this._tick(elapsed); + this._paint(context); + Cut._stats.fps = 1e3 / (Cut._now() - now); +}; + +Cut.prototype.MAX_ELAPSE = Infinity; + +Cut.prototype._tick = function(elapsed) { + if (!this._visible) { + return; + } + if (elapsed > this.MAX_ELAPSE) { + elapsed = this.MAX_ELAPSE; + } + this._pin.tick(); + var length = this._tickBefore.length; + for (var i = 0; i < length; i++) { + Cut._stats.tick++; + this._tickBefore[i].call(this, elapsed); + } + var child, next = this._first; + while (child = next) { + next = child._next; + child._tick(elapsed); + } + var length = this._tickAfter.length; + for (var i = 0; i < length; i++) { + Cut._stats.tick++; + this._tickAfter[i].call(this, elapsed); + } +}; + +Cut.prototype.tick = function(ticker, before) { + if (before) { + this._tickBefore.push(ticker); + } else { + this._tickAfter.push(ticker); + } +}; + +Cut.prototype.untick = function(ticker) { + var i; + if (!ticker) {} else if ((i = this._tickBefore.indexOf(ticker)) >= 0) { + this._tickBefore.splice(i, 1); + } else if ((i = this._tickAfter.indexOf(ticker)) >= 0) { + this._tickAfter.splice(i, 1); + } +}; + +Cut.prototype._paint = function(context) { + if (!this._visible) { + return; + } + Cut._stats.paint++; + var m = this._pin.absoluteMatrix(); + context.setTransform(m.a, m.b, m.c, m.d, m.e, m.f); + this._alpha = this._pin._alpha * (this._parent ? this._parent._alpha : 1); + var alpha = this._pin._textureAlpha * this._alpha; + if (context.globalAlpha != alpha) { + context.globalAlpha = alpha; + } + var length = this._cutouts.length; + for (var i = 0; i < length; i++) { + this._cutouts[i].paste(context); + } + if (context.globalAlpha != this._alpha) { + context.globalAlpha = this._alpha; + } + var child, next = this._first; + while (child = next) { + next = child._next; + child._paint(context); + } +}; + +Cut.prototype.toString = function() { + return "[" + this._id + "]"; +}; + +Cut.prototype.id = function(id) { + if (!arguments.length) { + return this._id; + } + this._id = id; + return this; +}; + +Cut.prototype.attr = function(name, value) { + if (arguments.length < 2) { + return this._attrs ? this._attrs[name] : undefined; + } + (this._attrs ? this._attrs : this._attrs = {})[name] = value; + return this; +}; + +Cut.prototype.on = Cut.prototype.listen = function(types, listener) { + if (typeof listener !== "function") { + return this; + } + types = (Cut._isArray(types) ? types.join(" ") : types).split(/\s+/); + for (var i = 0; i < types.length; i++) { + var type = types[i]; + if (type) { + this._listeners = this._listeners || {}; + this._listeners[type] = this._listeners[type] || []; + this._listeners[type].push(listener); + this._listenOn(type); + } + } + return this; +}; + +Cut.prototype.listeners = function(type) { + return this._listeners && this._listeners[type]; +}; + +Cut.prototype.publish = function(name, args) { + var listeners = this.listeners(name); + if (!listeners || !listeners.length) { + return 0; + } + for (var l = 0; l < listeners.length; l++) { + listeners[l].apply(this, args); + } + return listeners.length; +}; + +Cut.prototype.trigger = function(name, args) { + this.publish(name, args); + return this; +}; + +Cut.prototype.visit = function(visitor) { + var reverse = visitor.reverse; + var visible = visitor.visible; + if (visitor.start && visitor.start(this)) { + return; + } + var child, next = reverse ? this.last(visible) : this.first(visible); + while (child = next) { + next = reverse ? child.prev(visible) : child.next(visible); + if (child.visit(visitor, reverse)) { + return true; + } + } + return visitor.end && visitor.end(this); +}; + +Cut.prototype.visible = function(visible) { + if (!arguments.length) { + return this._visible; + } + this._visible = visible; + this._parent && (this._parent._ts_children = Cut._TS++); + this._ts_pin = Cut._TS++; + this.touch(); + return this; +}; + +Cut.prototype.hide = function() { + return this.visible(false); +}; + +Cut.prototype.show = function() { + return this.visible(true); +}; + +Cut.prototype.parent = function() { + return this._parent; +}; + +Cut.prototype.next = function(visible) { + var next = this._next; + while (next && visible && !next._visible) { + next = next._next; + } + return next; +}; + +Cut.prototype.prev = function(visible) { + var prev = this._prev; + while (prev && visible && !prev._visible) { + prev = prev._prev; + } + return prev; +}; + +Cut.prototype.first = function(visible) { + var next = this._first; + while (next && visible && !next._visible) { + next = next._next; + } + return next; +}; + +Cut.prototype.last = function(visible) { + var prev = this._last; + while (prev && visible && !prev._visible) { + prev = prev._prev; + } + return prev; +}; + +Cut.prototype.append = function() { + for (var i = 0; i < arguments.length; i++) { + if (!Cut._isCut(arguments[i])) { + throw "It is not a Cut node!"; + } + arguments[i].appendTo(this); + } + return this; +}; + +Cut.prototype.prepend = function() { + for (var i = 0; i < arguments.length; i++) { + if (!Cut._isCut(arguments[i])) { + throw "It is not a Cut node!"; + } + arguments[i].prependTo(this); + } + return this; +}; + +Cut.prototype.appendTo = function(parent) { + if (!parent) { + throw "Parent is null!"; + } + if (!Cut._isCut(parent)) { + throw "It is not a Cut node!"; + } + this.remove(); + if (parent._last) { + parent._last._next = this; + this._prev = parent._last; + } + this._parent = parent; + parent._last = this; + if (!parent._first) { + parent._first = this; + } + this._parent._listenOn(this); + this._ts_parent = Cut._TS++; + parent._ts_children = Cut._TS++; + parent.touch(); + return this; +}; + +Cut.prototype.prependTo = function(parent) { + if (!parent) { + throw "Parent is null!"; + } + if (!Cut._isCut(parent)) { + throw "It is not a Cut node!"; + } + this.remove(); + if (parent._first) { + parent._first._prev = this; + this._next = parent._first; + } + this._parent = parent; + parent._first = this; + if (!parent._last) { + parent._last = this; + } + this._parent._listenOn(this); + this._ts_parent = Cut._TS++; + parent._ts_children = Cut._TS++; + parent.touch(); + return this; +}; + +Cut.prototype.insertNext = function() { + if (arguments.length) { + for (var i = 0; i < arguments.length; i++) { + if (!Cut._isCut(arguments[i])) { + throw "It is not a Cut node!"; + } + arguments[i] && arguments[i].insertAfter(this); + } + } + return this; +}; + +Cut.prototype.insertPrev = function() { + if (arguments.length) { + for (var i = 0; i < arguments.length; i++) { + if (!Cut._isCut(arguments[i])) { + throw "It is not a Cut node!"; + } + arguments[i] && arguments[i].insertBefore(this); + } + } + return this; +}; + +Cut.prototype.insertBefore = function(next) { + if (!next) { + throw "Next is null!"; + } + if (!Cut._isCut(next)) { + throw "It is not a Cut node!"; + } + this.remove(); + var parent = next._parent; + var prev = next._prev; + next._prev = this; + prev && (prev._next = this) || parent && (parent._first = this); + this._parent = parent; + this._prev = prev; + this._next = next; + this._parent._listenOn(this); + this._ts_parent = Cut._TS++; + this.touch(); + return this; +}; + +Cut.prototype.insertAfter = function(prev) { + if (!prev) { + throw "Prev is null!"; + } + if (!Cut._isCut(prev)) { + throw "It is not a Cut node!"; + } + this.remove(); + var parent = prev._parent; + var next = prev._next; + prev._next = this; + next && (next._prev = this) || parent && (parent._last = this); + this._parent = parent; + this._prev = prev; + this._next = next; + this._parent._listenOn(this); + this._ts_parent = Cut._TS++; + this.touch(); + return this; +}; + +Cut.prototype.remove = function() { + if (arguments.length) { + for (var i = 0; i < arguments.length; i++) { + if (!Cut._isCut(arguments[i])) { + throw "It is not a Cut node!"; + } + arguments[i] && arguments[i].remove(); + } + return this; + } + if (this._prev) { + this._prev._next = this._next; + } + if (this._next) { + this._next._prev = this._prev; + } + if (this._parent) { + if (this._parent._first === this) { + this._parent._first = this._next; + } + if (this._parent._last === this) { + this._parent._last = this._prev; + } + this._parent._listenOff(this); + this._parent._ts_children = Cut._TS++; + this._parent.touch(); + } + this._prev = this._next = this._parent = null; + this._ts_parent = Cut._TS++; + // this._parent.touch(); + return this; +}; + +Cut.prototype.empty = function() { + var child, next = this._first; + while (child = next) { + next = child._next; + child._prev = child._next = child._parent = null; + this._listenOff(child); + } + this._first = this._last = null; + this._ts_children = Cut._TS++; + this.touch(); + return this; +}; + +Cut.prototype._listenOn = function(obj) { + if (typeof obj === "string") { + this._listenersCount = this._listenersCount || {}; + if (!this._listenersCount[obj] && this._parent) { + this._parent._listenOn(obj); + } + this._listenersCount[obj] = (this._listenersCount[obj] || 0) + 1; + } else if (typeof obj === "object") { + if (obj._listenersCount) { + for (var type in obj._listenersCount) { + if (obj._listenersCount[type] > 0) { + this._listenOn(type); + } + } + } + } +}; + +Cut.prototype._listenOff = function(obj) { + if (typeof obj === "string") { + this._listenersCount = this._listenersCount || {}; + if (this._listenersCount[obj] == 1 && this._parent) { + this._parent._listenOff(obj); + } + this._listenersCount[obj] = Math.max((this._listenersCount[obj] || 0) - 1, 0); + } else if (typeof obj === "object") { + if (obj._listenersCount) { + for (var type in obj._listenersCount) { + if (obj._listenersCount[type] > 0) { + this._listenOff(type); + } + } + } + } +}; + +Cut.prototype._listens = function(type) { + return this._listenersCount && this._listenersCount[type] || 0; +}; + +Cut.prototype.touch = function() { + this._ts_touch = Cut._TS++; + this._parent && this._parent.touch(); + return this; +}; + +Cut.prototype.pin = function() { + if (!arguments.length) { + return this._pin; + } + var obj = this._pin.update.apply(this._pin, arguments); + return obj === this._pin ? this : obj; +}; + +Cut.prototype.matrix = function() { + return this._pin.absoluteMatrix(this, this._parent ? this._parent._pin : null); +}; + +Cut.prototype.tween = function(duration, delay) { + return (this._tween || (this._tween = new Cut.Tween(this))).tween(duration, delay); +}; + +Cut.Tween = function(cut) { + var tween = this; + this._owner = cut; + this._queue = []; + this._next = null; + cut.tick(function(elapsed) { + if (!tween._queue.length) { + return; + } + this.touch(); + var head = tween._queue[0]; + if (!head.time) { + head.time = 1; + } else { + head.time += elapsed; + } + if (head.time < head.delay) { + return; + } + if (!head.start) { + head.start = {}; + head.keys = {}; + for (var key in head.end) { + if (typeof (start = cut.pin(key)) === "number") { + head.start[key] = start; + head.keys[key] = key; + } else if (typeof (startX = cut.pin(key + "X")) === "number" && typeof (startY = cut.pin(key + "Y")) === "number") { + head.start[key + "X"] = startX; + head.keys[key + "X"] = key; + head.start[key + "Y"] = startY; + head.keys[key + "Y"] = key; + } + } + } + var p = (head.time - head.delay) / head.duration; + var over = p >= 1; + p = p > 1 ? 1 : p; + p = typeof head.easing == "function" ? head.easing(p) : p; + var q = 1 - p; + for (var key in head.keys) { + cut.pin(key, head.start[key] * q + head.end[head.keys[key]] * p); + } + if (over) { + tween._queue.shift(); + head.then && head.then.call(cut); + } + }, true); +}; + +Cut.Tween.prototype.tween = function(duration, delay) { + this._next = { + id: Cut._TS++, + end: {}, + duration: duration || 400, + delay: delay || 0 + }; + return this; +}; + +Cut.Tween.prototype.pin = function(pin) { + if (this._next !== this._queue[this._queue.length - 1]) { + this._owner.touch(); + this._queue.push(this._next); + } + var end = this._next.end; + if (arguments.length === 1) { + Cut._extend(end, arguments[0]); + } else if (arguments.length === 2) { + end[arguments[0]] = arguments[1]; + } + return this; +}; + +Cut.Tween.prototype.clear = function(forward) { + var tween; + while (tween = this._queue.shift()) { + forward && this._owner.pin(tween.end); + } + return this; +}; + +Cut.Tween.prototype.then = function(then) { + this._next.then = then; + return this; +}; + +Cut.Tween.prototype.ease = function(easing) { + this._next.easing = Cut.Easing(easing); + return this; +}; + +Cut.root = function(request, render) { + return new Cut.Root(request, render); +}; + +Cut.Root = function(request, render) { + Cut.String.prototype._super.apply(this, arguments); + this._paused = true; + this._render = render; + this._request = request; + var self = this; + var requestCallback = function() { + if (self._paused === true) { + return; + } + self._mo_touch = self._ts_touch; + self._render(); + self.request(); + self._mo_touch == self._ts_touch && self.pause(); + }; + this.request = function() { + this._request.call(null, requestCallback); + }; + this.on("viewport", function(viewport) { + this._size = { + width: viewport.width, + height: viewport.height + }; + this._updateViewbox(); + return true; + }); +}; + +Cut.Root.prototype = Cut._create(Cut.prototype); + +Cut.Root.prototype._super = Cut; + +Cut.Root.prototype.constructor = Cut.Root; + +Cut.Root.prototype.viewbox = function(width, height, mode) { + this._viewbox = { + width: width, + height: height, + mode: /^(in|out)$/.test(mode) ? mode : "in" + }; + this._updateViewbox(); + return this; +}; + +Cut.Root.prototype._updateViewbox = function() { + var viewbox = this._viewbox; + var size = this._size; + if (!size) {} else if (viewbox) { + this.pin({ + width: viewbox.width, + height: viewbox.height, + resizeMode: viewbox.mode, + resizeWidth: size.width, + resizeHeight: size.height + }); + } else { + this.pin({ + width: size.width, + height: size.height + }); + } +}; + +Cut.Root.prototype.start = function() { + return this.resume(); +}; + +Cut.Root.prototype.resume = function(force) { + if (this._paused || force) { + this._paused = false; + this.request(); + } + return this; +}; + +Cut.Root.prototype.pause = function() { + this._paused = true; + return this; +}; + +Cut.Root.prototype.touch = function() { + this.resume(); + return Cut.prototype.touch.apply(this, arguments); +}; + +Cut.Root.prototype.resize = function(width, height, ratio) { + this._ratio = ratio || 1; + var data = {}; + data.width = width; + data.height = height; + data.ratio = ratio; + this.visit({ + start: function(cut) { + if (!cut._listens("viewport")) { + return true; + } + cut.publish("viewport", [ data ]); + } + }); + return this; +}; + +Cut.image = function(cutout) { + var image = new Cut.Image(); + cutout && image.image(cutout); + return image; +}; + +Cut.Image = function() { + Cut.Image.prototype._super.apply(this, arguments); +}; + +Cut.Image.prototype = Cut._create(Cut.prototype); + +Cut.Image.prototype._super = Cut; + +Cut.Image.prototype.constructor = Cut.Image; + +/** + * @deprecated Use image + */ +Cut.Image.prototype.setImage = function() { + this.image.apply(this, arguments); +}; + +Cut.Image.prototype.image = function(cutout) { + this._cutouts[0] = Cut.Out.select(cutout); + this._cutouts.length = 1; + this.pin({ + width: this._cutouts[0] ? this._cutouts[0].dWidth() : 0, + height: this._cutouts[0] ? this._cutouts[0].dHeight() : 0 + }); + this._cutout = this._cutouts[0].clone(); + return this; +}; + +Cut.Image.prototype.cropX = function(w, x) { + return this.image(this._cutouts[0].cropX(w, x)); +}; + +Cut.Image.prototype.cropY = function(h, y) { + return this.image(this._cutouts[0].cropY(h, y)); +}; + +Cut.Image.prototype._slice = function(i) { + return this._cutouts[i] || (this._cutouts[i] = this._cutout.clone()); +}; + +Cut.Image.prototype.tile = function(inner) { + this.untick(this._repeatTicker); + this._repeatTicker = function() { + if (this._mo_tile == this._ts_touch) { + return; + } + this._mo_tile = this._ts_touch; + var bleft = this._cutout._left, bright = this._cutout._right; + var btop = this._cutout._top, bbottom = this._cutout._bottom; + var bwidth = this._cutout.dWidth() - bleft - bright; + var bheight = this._cutout.dHeight() - btop - bbottom; + var width = this.pin("width"); + width = inner ? width : width - bleft - bright; + var height = this.pin("height"); + height = inner ? height : height - btop - bbottom; + var left = inner ? -bleft : 0; + var top = inner ? -btop : 0; + var c = 0; + // top, left + if (btop && bleft) { + this._slice(c++).cropX(bleft, 0).cropY(btop, 0).offset(left, top); + } + // bottom, left + if (bbottom && bleft) { + this._slice(c++).cropX(bleft, 0).cropY(bbottom, bheight + btop).offset(left, top + height + btop); + } + // top, right + if (btop && bright) { + this._slice(c++).cropX(bright, bwidth + bleft).cropY(btop, 0).offset(left + width + bleft, top); + } + // bottom, right + if (bbottom && bright) { + this._slice(c++).cropX(bright, bwidth + bleft).cropY(bbottom, bheight + btop).offset(left + width + bleft, top + height + btop); + } + var x = left + bleft; + var r = width; + while (r > 0) { + var w = Math.min(bwidth, r); + r -= bwidth; + var y = top + btop; + var b = height; + while (b > 0) { + var h = Math.min(bheight, b); + b -= bheight; + this._slice(c++).cropX(w, bleft).cropY(h, btop).offset(x, y); + if (r <= 0) { + // left + if (bleft) { + this._slice(c++).cropX(bleft, 0).cropY(h, btop).offset(left, y); + } + // right + if (bright) { + this._slice(c++).cropX(bright, bwidth + bleft).cropY(h, btop).offset(x + w, y); + } + } + y += h; + } + // top + if (btop) { + this._slice(c++).cropX(w, bleft).cropY(btop, 0).offset(x, top); + } + // bottom + if (bbottom) { + this._slice(c++).cropX(w, bleft).cropY(bbottom, bheight + btop).offset(x, y); + } + x += w; + } + this._cutouts.length = c; + }; + this.tick(this._repeatTicker); + return this; +}; + +Cut.Image.prototype.stretch = function(inner) { + this.untick(this._repeatTicker); + this._repeatTicker = function() { + if (this._mo_stretch == this._pin._ts_transform) { + return; + } + this._mo_stretch = this._pin._ts_transform; + var oleft = this._cutout._left, oright = this._cutout._right; + var otop = this._cutout._top, obottom = this._cutout._bottom; + var owidth = this._cutout.dWidth(), oheight = this._cutout.dHeight(); + var width = this.pin("width"), height = this.pin("height"); + width = inner ? width + oleft + oright : Math.max(width, oleft + oright); + height = inner ? height + otop + obottom : Math.max(height, otop + obottom); + var c = 0; + // top, left + if (otop && oleft) { + this._slice(c++).cropX(oleft, 0).cropY(otop, 0).offset(0, 0); + } + // bottom, left + if (obottom && oleft) { + this._slice(c++).cropX(oleft, 0).cropY(obottom, oheight - obottom).offset(0, height - obottom); + } + // top, right + if (otop && oright) { + this._slice(c++).cropX(oright, owidth - oright).cropY(otop, 0).offset(width - oright, 0); + } + // bottom, right + if (obottom && oright) { + this._slice(c++).cropX(oright, owidth - oright).cropY(obottom, oheight - obottom).offset(width - oright, height - obottom); + } + // top + if (otop) { + this._slice(c++).cropX(owidth - oleft - oright, oleft).cropY(otop, 0).offset(oleft, 0).dWidth(width - oleft - oright); + } + // bottom + if (obottom) { + this._slice(c++).cropX(owidth - oleft - oright, oleft).cropY(obottom, oheight - obottom).offset(oleft, height - obottom).dWidth(width - oleft - oright); + } + // left + if (oleft) { + this._slice(c++).cropX(oleft, 0).cropY(oheight - otop - obottom, otop).offset(0, otop).dHeight(height - otop - obottom); + } + // right + if (oright) { + this._slice(c++).cropX(oright, owidth - oright).cropY(oheight - otop - obottom, otop).offset(width - oright, otop).dHeight(height - otop - obottom); + } + // center + this._slice(c++).cropX(owidth - oleft - oright, oleft).cropY(oheight - otop - obottom, otop).offset(oleft, otop).dWidth(width - oleft - oright).dHeight(height - otop - obottom); + this._cutouts.length = c; + }; + this.tick(this._repeatTicker); + return this; +}; + +Cut.anim = function(frames, fps) { + var anim = new Cut.Anim().frames(frames).gotoFrame(0); + fps && anim.fps(fps); + return anim; +}; + +Cut.Anim = function() { + Cut.Anim.prototype._super.apply(this, arguments); + this._fps = Cut.Anim.FPS; + this._ft = 1e3 / this._fps; + this._time = 0; + this._frame = 0; + this._frames = []; + this._labels = {}; + this.tick(function() { + if (this._time && this._frames.length > 1) { + var t = Cut._now() - this._time; + if (t >= this._ft) { + var n = t < 2 * this._ft ? 1 : Math.floor(t / this._ft); + this._time += n * this._ft; + this.moveFrame(n); + if (this._repeat && (this._repeat -= n) <= 0) { + this.stop(); + this._callback && this._callback(); + } + } + this.touch(); + } + }, false); +}; + +Cut.Anim.prototype = Cut._create(Cut.prototype); + +Cut.Anim.prototype._super = Cut; + +Cut.Anim.prototype.constructor = Cut.Anim; + +Cut.Anim.FPS = 22; + +Cut.Anim.prototype.fps = function(fps) { + if (!arguments.length) { + return this._fps; + } + this._fps = fps || Cut.Anim.FPS; + this._ft = 1e3 / this._fps; + return this; +}; + +/** + * @deprecated Use frames + */ +Cut.Anim.prototype.setFrames = function() { + this.frames.apply(this, arguments); +}; + +Cut.Anim.prototype.frames = function(frames) { + this._time = this._time || 0; + this._frame = 0; + this._frames = []; + this._labels = {}; + frames = Cut.Out.select(frames, true); + if (frames && frames.length) { + for (var i = 0; i < frames.length; i++) { + var cutout = frames[i]; + this._frames.push(cutout); + this._labels[cutout._name] = i; + } + } + return this; +}; + +Cut.Anim.prototype.length = function() { + return this._frames ? this._frames.length : 0; +}; + +Cut.Anim.prototype.gotoFrame = function(frame, resize) { + frame = Cut.Math.rotate(frame, this._frames.length) | 0; + this._frame = frame; + resize = resize || !this._cutouts[0]; + this._cutouts[0] = this._frames[this._frame]; + if (resize) { + this.pin({ + width: this._cutouts[0].dWidth(), + height: this._cutouts[0].dHeight() + }); + } + this._ts_frame = Cut._TS++; + this.touch(); + return this; +}; + +Cut.Anim.prototype.moveFrame = function(move) { + return this.gotoFrame(this._frame + move); +}; + +Cut.Anim.prototype.gotoLabel = function(label, resize) { + return this.gotoFrame(this._labels[label] || 0, resize); +}; + +Cut.Anim.prototype.repeat = function(repeat, callback) { + this._repeat = repeat * this._frames.length - 1; + this._callback = callback; + this.play(); + return this; +}; + +Cut.Anim.prototype.play = function(frame) { + if (arguments.length) { + this.gotoFrame(frame); + this._time = Cut._now(); + } else if (!this._time) { + this._time = Cut._now(); + } + return this; +}; + +Cut.Anim.prototype.stop = function(frame) { + this._time = null; + if (arguments.length) { + this.gotoFrame(frame); + } + return this; +}; + +Cut.string = function(frames) { + return new Cut.String().frames(frames); +}; + +Cut.String = function() { + Cut.String.prototype._super.apply(this, arguments); + this.row(); +}; + +Cut.String.prototype = Cut._create(Cut.prototype); + +Cut.String.prototype._super = Cut; + +Cut.String.prototype.constructor = Cut.String; + +/** + * @deprecated Use frames + */ +Cut.String.prototype.setFont = function() { + this.frames.apply(this, arguments); +}; + +Cut.String.prototype.frames = function(frames) { + if (typeof frames == "string") { + this._frames = function(value) { + return frames + value; + }; + } else if (Cut._isFunc(frames)) { + this._frames = frames; + } + return this; +}; + +/** + * @deprecated Use value + */ +Cut.String.prototype.setValue = function() { + this.value.apply(this, arguments); +}; + +Cut.String.prototype.value = function(value) { + if (this._value === value) return this; + this._value = value; + if (typeof value !== "string" && !Cut._isArray(value)) { + value = value + ""; + } + var child = this._first; + for (var i = 0; i < value.length; i++) { + var selector = this._frames(value[i]); + if (child) { + child.image(selector).show(); + } else { + child = Cut.image(selector).appendTo(this); + } + child = child._next; + } + while (child) { + child.hide(); + child = child._next; + } + return this; +}; + +Cut.row = function(align) { + return Cut.create().row(align); +}; + +Cut.prototype.row = function(align) { + this.sequence("row", align); + return this; +}; + +Cut.column = function(align) { + return Cut.create().column(align); +}; + +Cut.prototype.column = function(align) { + this.sequence("column", align); + return this; +}; + +Cut.sequence = function(type, align) { + return new Cut.create().sequence(type, align); +}; + +Cut.prototype.sequence = function(type, align) { + this.untick(this._layoutTicker); + this._layoutTicker = function() { + if (this._mo_seq == this._ts_touch) { + return; + } + this._mo_seq = this._ts_touch; + var alignChildren = this._mo_seqAlign != this._ts_children; + this._mo_seqAlign = this._ts_children; + var width = 0, height = 0; + var child, next = this.first(true); + var first = true; + while (child = next) { + next = child.next(true); + child._pin.relativeMatrix(); + var w = child._pin._boxWidth; + var h = child._pin._boxHeight; + if (type == "column") { + !first && (height += this._spacing || 0); + child.pin("offsetY") != height && child.pin("offsetY", height); + width = Math.max(width, w); + height = height + h; + alignChildren && child.pin("alignX", align); + } else if (type == "row") { + !first && (width += this._spacing || 0); + child.pin("offsetX") != width && child.pin("offsetX", width); + width = width + w; + height = Math.max(height, h); + alignChildren && child.pin("alignY", align); + } + first = false; + } + width += 2 * this._padding || 0; + height += 2 * this._padding || 0; + this.pin("width") != width && this.pin("width", width); + this.pin("height") != height && this.pin("height", height); + }; + this.tick(this._layoutTicker); + return this; +}; + +Cut.box = function() { + return new Cut.create().box(); +}; + +Cut.prototype.box = function() { + if (this._boxTicker) return this; + this._boxTicker = function() { + if (this._mo_box == this._ts_touch) { + return; + } + this._mo_box = this._ts_touch; + var width = 0, height = 0; + var child, next = this.first(true); + while (child = next) { + next = child.next(true); + child._pin.relativeMatrix(); + var w = child._pin._boxWidth; + var h = child._pin._boxHeight; + width = Math.max(width, w); + height = Math.max(height, h); + } + width += 2 * this._padding || 0; + height += 2 * this._padding || 0; + this.pin("width") != width && this.pin("width", width); + this.pin("height") != height && this.pin("height", height); + }; + this.tick(this._boxTicker); + return this; +}; + +Cut.prototype.padding = function(pad) { + this._padding = pad; + return this; +}; + +Cut.prototype.spacing = function(space) { + this._spacing = space; + return this; +}; + +// TODO use prototype +Cut.Loader = function() { + var queue = []; + var roots = []; + var images = {}; + var started = false; + function loadImages(loader, callback) { + var loading = 0; + var noimage = true; + var textures = Cut.Texture._list; + for (var texture in textures) { + if (textures[texture].getImagePath()) { + loading++; + var src = textures[texture].getImagePath(); + var image = loader(src, complete, error); + Cut.Loader.addImage(image, src); + noimage = false; + } + } + if (noimage) { + DEBUG && console.log("No image to load."); + callback && callback(); + } + function complete() { + DEBUG && console.log("Image loaded."); + done(); + } + function error(msg) { + DEBUG && console.log("Error loading image: " + msg); + done(); + } + function done() { + if (--loading <= 0) { + callback && callback(); + } + } + } + return { + load: function(app, configs) { + if (!started) { + queue.push(arguments); + return; + } + DEBUG && console.log("Init..."); + var root = this.init(function(root, canvas) { + DEBUG && console.log("Loading app..."); + app(root, canvas); + }, configs); + roots.push(root); + DEBUG && console.log("Loading images..."); + loadImages(this.loadImage, function() { + DEBUG && console.log("Images loaded."); + DEBUG && console.log("Start playing..."); + root.start(); + }); + }, + start: function() { + started = true; + var args; + while (args = queue.shift()) { + this.load.apply(this, args); + } + }, + pause: function() { + for (var i = queue.length - 1; i >= 0; i--) { + roots[i].pause(); + } + }, + resume: function() { + for (var i = queue.length - 1; i >= 0; i--) { + roots[i].resume(); + } + }, + getImage: function(src) { + return images[src]; + }, + addImage: function(image, src) { + images[src] = image; + return this; + } + }; +}(); + +// TODO use prototype +Cut.Texture = function(texture) { + texture.cutouts = texture.cutouts || []; + var selectionCache = {}; + var imageCache = null; + this.getImagePath = function() { + return texture.imagePath; + }; + function image() { + if (!imageCache) { + imageCache = Cut.Loader.getImage(texture.imagePath); + } + return imageCache; + } + for (var i = 0; i < texture.cutouts.length; i++) { + map(texture.cutouts[i]); + } + function map(cutout) { + if (!cutout || cutout.isCutout) { + return cutout; + } + if (typeof texture.map === "function") { + cutout = texture.map(cutout); + } else if (typeof texture.filter === "function") { + cutout = texture.filter(cutout); + } + var ratio = texture.ratio || 1; + if (ratio != 1) { + cutout.x *= ratio, cutout.y *= ratio; + cutout.width *= ratio, cutout.height *= ratio; + cutout.top *= ratio, cutout.bottom *= ratio; + cutout.left *= ratio, cutout.right *= ratio; + } + var trim = texture.trim || 0; + if (trim) { + cutout.x += trim, cutout.y += trim; + cutout.width -= 2 * trim, cutout.height -= 2 * trim; + cutout.top -= trim, cutout.bottom -= trim; + cutout.left -= trim, cutout.right -= trim; + } + return cutout; + } + function wrap(cutout) { + if (!cutout.isCutout) { + cutout = new Cut.Out(cutout, image, texture.imageRatio); + } + return cutout; + } + this.select = function(selector, prefix) { + if (!prefix) { + // one + var id = selector + "?"; + var result = selectionCache[id]; + if (typeof result === "undefined") { + for (var i = 0; i < texture.cutouts.length; i++) { + var item = texture.cutouts[i]; + var name = item._name || item.name; + if (name == selector) { + result = item; + break; + } + } + if (!result && texture.factory) { + result = map(texture.factory(selector)); + } + selectionCache[id] = result; + } + if (!result) { + throw "Cutout not found: '" + texture.name + ":" + selector + "'"; + } + return wrap(result); + } else { + // many + var id = selector + "*"; + var results = selectionCache[id]; + if (typeof results === "undefined") { + results = []; + var length = selector.length; + for (var i = 0; i < texture.cutouts.length; i++) { + var item = texture.cutouts[i]; + var name = item._name || item.name; + if (name && name.substring(0, length) == selector) { + results.push(texture.cutouts[i]); + } + } + selectionCache[id] = results; + } + if (!results.length) { + throw "Cutouts not found: '" + texture.name + ":" + selector + "'"; + } + for (var i = 0; i < results.length; i++) { + results[i] = wrap(results[i]); + } + return results; + } + }; +}; + +Cut.Texture._list = {}; + +Cut.Texture.add = function() { + for (var i = 0; i < arguments.length; i++) { + var texture = arguments[i]; + Cut.Texture._list[texture.name] = new Cut.Texture(texture); + } + return this; +}; + +/** + * @deprecated Use Cut(); + */ +Cut.addTexture = function() { + return Cut.Texture.add.apply(Cut.Texture, arguments); +}; + +Cut.Out = function(def, image, ratio) { + this.isCutout = true; + this._image = image; + this._ratio = ratio || 1; + this._name = def.name; + this._x = def.x; + this._y = def.y; + this._width = def.width; + this._height = def.height; + this._top = def.top || 0; + this._bottom = def.bottom || 0; + this._left = def.left || 0; + this._right = def.right || 0; + this._reset(); + return this; +}; + +Cut.Out.prototype._reset = function() { + this._sx = this._x * this._ratio; + this._sy = this._y * this._ratio; + this._sw = this._width * this._ratio; + this._sh = this._height * this._ratio; + this._dx = 0; + this._dy = 0; + this._dw = this._width; + this._dh = this._height; +}; + +Cut.Out.prototype.clone = function() { + var clone = Cut._create(Cut.Out.prototype); + for (var attr in this) if (this.hasOwnProperty(attr)) clone[attr] = this[attr]; + clone._reset(); + return clone; +}; + +Cut.Out.prototype.dWidth = function(width) { + if (arguments.length) { + this._dw = width; + return this; + } + return this._dw; +}; + +Cut.Out.prototype.dHeight = function(height) { + if (arguments.length) { + this._dh = height; + return this; + } + return this._dh; +}; + +Cut.Out.prototype.cropX = function(w, x) { + x = x || 0; + w = Math.min(w, this._width - x); + this._dw = w; + this._sw = w * this._ratio; + this._sx = (this._x + x) * this._ratio; + return this; +}; + +Cut.Out.prototype.cropY = function(h, y) { + y = y || 0; + h = Math.min(h, this._height - y); + this._dh = h; + this._sh = h * this._ratio; + this._sy = (this._y + y) * this._ratio; + return this; +}; + +Cut.Out.prototype.offset = function(x, y) { + this._dx = x; + this._dy = y; + return this; +}; + +Cut.Out.prototype.paste = function(context) { + Cut._stats.paste++; + var img = typeof this._image === "function" ? this._image() : this._image; + try { + img && context.drawImage(img, // source + this._sx, this._sy, this._sw, this._sh, // cut + this._dx, this._dy, this._dw, this._dh); + } catch (e) { + if (!this._failed) { + console.log("Unable to paste: " + this, img); + this._failed = true; + } + } +}; + +Cut.Out.prototype.toString = function() { + return "[" + this._name + ": " + this._sx + "x" + this._sy + "-" + this._sw + "x" + this._sh + "" + this._dx + "x" + this._dy + "-" + this._dw + "x" + this._dh + "]"; +}; + +Cut.Out.select = function(selector, prefix) { + if (typeof selector === "function") { + return Cut.Out.select(selector()); + } + if (typeof selector !== "string") { + return selector; + } + var i = selector.indexOf(":"); + if (i < 0) { + throw "Invalid selector: '" + selector + "'"; + return null; + } + var split = [ selector.slice(0, i), selector.slice(i + 1) ]; + var texture = Cut.Texture._list[split[0]]; + if (texture == null) { + throw "Texture not found: '" + selector + "'"; + return !prefix ? null : []; + } + return texture.select(split[1], prefix); +}; + +Cut.drawing = function() { + return Cut.image(Cut.Out.drawing.apply(Cut.Out, arguments)); +}; + +// [name], width, height, [ratio], [draw] +// def, [draw] +Cut.Out.drawing = function() { + var canvas = document.createElement("canvas"); + var context = canvas.getContext("2d"); + var def = {}; + var ai = 0; + if (typeof arguments[ai] === "object") { + def = arguments[ai++]; + } else { + if (typeof arguments[ai] === "string") { + def.name = arguments[ai++]; + } + def.width = arguments[ai++]; + def.height = arguments[ai++]; + if (typeof arguments[ai] === "number") { + def.ratio = arguments[ai++]; + } + def.x = 0; + def.y = 0; + } + def.ratio = def.ratio || 1; + def.name = def.name || Math.random() * 1e3 | 0; + canvas.width = Math.ceil(def.width * def.ratio); + canvas.height = Math.ceil(def.height * def.ratio); + var cut = new Cut.Out(def, canvas, def.ratio); + if (typeof arguments[arguments.length - 1] === "function") { + arguments[arguments.length - 1].call(cut, context, def.ratio); + } + return cut; +}; + +Cut.Pin = function(owner) { + this._owner = owner; + this._parent = null; + // relative to parent + this._relativeMatrix = new Cut.Matrix(); + // relative to root + this._absoluteMatrix = new Cut.Matrix(); + this.reset(); +}; + +Cut.Pin.prototype.reset = function() { + this._textureAlpha = 1; + this._alpha = 1; + this._width = 0; + this._height = 0; + this._scaleX = 1; + this._scaleY = 1; + this._skewX = 0; + this._skewY = 0; + this._rotation = 0; + // scale/skew/rotate center + this._pivoted = false; + this._pivotX = null; + this._pivotY = null; + // self pin point + this._handled = false; + this._handleX = 0; + this._handleY = 0; + // parent pin point + this._aligned = false; + this._alignX = 0; + this._alignY = 0; + // as seen by parent px + this._offsetX = 0; + this._offsetY = 0; + this._boxX = 0; + this._boxY = 0; + this._boxWidth = this._width; + this._boxHeight = this._height; + this._ts_translate = Cut._TS++; + this._ts_transform = Cut._TS++; + this._ts_matrix = Cut._TS++; +}; + +Cut.Pin.prototype.tick = function() { + this._parent = this._owner._parent && this._owner._parent._pin; + if (this._handled && this._mo_handle != this._ts_transform) { + this._mo_handle = this._ts_transform; + this._ts_translate = Cut._TS++; + } + if (this._aligned && this._parent && this._mo_align != this._parent._ts_transform) { + this._mo_align = this._parent._ts_transform; + this._ts_translate = Cut._TS++; + } + return this; +}; + +Cut.Pin.prototype.toString = function() { + return this._owner.id() + " [" + this._alignX + ", " + this._alignY + "] [" + this._handleX + ", " + this._handleY + "] [" + (this._parent ? this._parent._owner.id() : null) + "]"; +}; + +Cut.Pin.prototype.absoluteMatrix = function() { + var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_matrix : 0); + if (this._mo_abs == ts) { + return this._absoluteMatrix; + } + this._mo_abs = ts; + var abs = this._absoluteMatrix; + abs.copyFrom(this.relativeMatrix()); + this._parent && abs.concat(this._parent._absoluteMatrix); + this._ts_matrix = Cut._TS++; + return abs; +}; + +Cut.Pin.prototype.relativeMatrix = function() { + var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_transform : 0); + if (this._mo_rel == ts) { + return this._relativeMatrix; + } + this._mo_rel = ts; + var rel = this._relativeMatrix; + rel.identity(); + if (this._pivoted) { + rel.translate(-this._pivotX * this._width, -this._pivotY * this._height); + } + rel.scale(this._scaleX, this._scaleY); + rel.skew(this._skewX, this._skewY); + rel.rotate(this._rotation); + if (this._pivoted) { + rel.translate(this._pivotX * this._width, this._pivotY * this._height); + } + if (this._pivoted) { + // set handle on origin + this._boxX = 0; + this._boxY = 0; + this._boxWidth = this._width; + this._boxHeight = this._height; + } else { + // set handle on aabb + var p, q, m = rel; + if (m.a > 0 && m.c > 0 || m.a < 0 && m.c < 0) { + p = 0, q = m.a * this._width + m.c * this._height; + } else { + p = m.a * this._width, q = m.c * this._height; + } + if (p > q) { + this._boxX = q; + this._boxWidth = p - q; + } else { + this._boxX = p; + this._boxWidth = q - p; + } + if (m.b > 0 && m.d > 0 || m.b < 0 && m.d < 0) { + p = 0, q = m.b * this._width + m.d * this._height; + } else { + p = m.b * this._width, q = m.d * this._height; + } + if (p > q) { + this._boxY = q; + this._boxHeight = p - q; + } else { + this._boxY = p; + this._boxHeight = q - p; + } + } + this._x = this._offsetX; + this._y = this._offsetY; + this._x -= this._boxX + this._handleX * this._boxWidth; + this._y -= this._boxY + this._handleY * this._boxHeight; + if (this._aligned && this._parent) { + this._parent.relativeMatrix(); + this._x += this._alignX * this._parent._width; + this._y += this._alignY * this._parent._height; + } + rel.translate(this._x, this._y); + return this._relativeMatrix; +}; + +Cut.Pin._SINGLE = {}; + +Cut.Pin.prototype.update = function() { + if (arguments.length == 1 && typeof arguments[0] === "string") { + return this["_" + arguments[0]]; + } + this._transform_flag = false; + this._translate_flag = false; + var pin = null, key = null, value = null; + if (arguments.length == 2 && typeof arguments[0] === "string") { + for (key in Cut.Pin._SINGLE) { + delete Cut.Pin._SINGLE[key]; + } + (pin = Cut.Pin._SINGLE)[arguments[0]] = arguments[1]; + } else if (arguments.length == 1 && typeof arguments[0] === "object") { + pin = arguments[0]; + } + // TODO: map write only keys to read/write keys + if (pin) { + for (key in pin) { + if (typeof (value = pin[key]) !== "undefined") { + if (setter = Cut.Pin._setters[key]) { + setter.call(Cut.Pin._setters, this, value, pin); + } + } + } + } + if (this._translate_flag) { + this._translate_flag = false; + this._ts_translate = Cut._TS++; + } + if (this._transform_flag) { + this._transform_flag = false; + this._ts_transform = Cut._TS++; + } + if (this._owner) { + this._owner._ts_pin = Cut._TS++; + this._owner.touch(); + } + return this; +}; + +Cut.Pin._setters = { + alpha: function(pin, value, set) { + pin._alpha = value; + }, + textureAlpha: function(pin, value, set) { + pin._textureAlpha = value; + }, + width: function(pin, value, set) { + pin._width_ = value; + pin._width = value; + pin._transform_flag = true; + }, + height: function(pin, value, set) { + pin._height_ = value; + pin._height = value; + pin._transform_flag = true; + }, + scale: function(pin, value, set) { + pin._scaleX = value; + pin._scaleY = value; + pin._transform_flag = true; + }, + scaleX: function(pin, value, set) { + pin._scaleX = value; + pin._transform_flag = true; + }, + scaleY: function(pin, value, set) { + pin._scaleY = value; + pin._transform_flag = true; + }, + skew: function(pin, value, set) { + pin._skewX = value; + pin._skewY = value; + pin._transform_flag = true; + }, + skewX: function(pin, value, set) { + pin._skewX = value; + pin._transform_flag = true; + }, + skewY: function(pin, value, set) { + pin._skewY = value; + pin._transform_flag = true; + }, + rotation: function(pin, value, set) { + pin._rotation = value; + pin._transform_flag = true; + }, + pivot: function(pin, value, set) { + pin._pivotX = value; + pin._pivotY = value; + pin._pivoted = true; + pin._transform_flag = true; + }, + pivotX: function(pin, value, set) { + pin._pivotX = value; + pin._pivoted = true; + pin._transform_flag = true; + }, + pivotY: function(pin, value, set) { + pin._pivotY = value; + pin._pivoted = true; + pin._transform_flag = true; + }, + offset: function(pin, value, set) { + pin._offsetX = value; + pin._offsetY = value; + pin._translate_flag = true; + }, + offsetX: function(pin, value, set) { + pin._offsetX = value; + pin._translate_flag = true; + }, + offsetY: function(pin, value, set) { + pin._offsetY = value; + pin._translate_flag = true; + }, + align: function(pin, value, set) { + this.alignX.apply(this, arguments); + this.alignY.apply(this, arguments); + }, + alignX: function(pin, value, set) { + pin._alignX = value; + pin._aligned = true; + pin._translate_flag = true; + this.handleX(pin, value, set); + }, + alignY: function(pin, value, set) { + pin._alignY = value; + pin._aligned = true; + pin._translate_flag = true; + this.handleY(pin, value, set); + }, + handle: function(pin, value, set) { + this.handleX(pin, value, set); + this.handleY(pin, value, set); + }, + handleX: function(pin, value, set) { + pin._handleX = value; + pin._handled = true; + pin._translate_flag = true; + }, + handleY: function(pin, value, set) { + pin._handleY = value; + pin._handled = true; + pin._translate_flag = true; + }, + resizeMode: function(pin, value, set) { + if (Cut._isNum(set.resizeWidth) && Cut._isNum(set.resizeHeight)) { + this.resizeWidth(pin, set.resizeWidth, set, true); + this.resizeHeight(pin, set.resizeHeight, set, true); + if (value == "out") { + pin._scaleX = pin._scaleY = Math.max(pin._scaleX, pin._scaleY); + } else if (value == "in") { + pin._scaleX = pin._scaleY = Math.min(pin._scaleX, pin._scaleY); + } + pin._width = set.resizeWidth / pin._scaleX; + pin._height = set.resizeHeight / pin._scaleY; + } + }, + resizeWidth: function(pin, value, set, force) { + if (set.resizeMode && !force) { + return; + } + pin._scaleX = value / pin._width_; + pin._width = pin._width_; + pin._transform_flag = true; + }, + resizeHeight: function(pin, value, set, force) { + if (set.resizeMode && !force) { + return; + } + pin._scaleY = value / pin._height_; + pin._height = pin._height_; + pin._transform_flag = true; + }, + scaleMode: function(pin, value, set) { + if (Cut._isNum(set.scaleWidth) && Cut._isNum(set.scaleHeight)) { + this.scaleWidth(pin, set.scaleWidth, set, true); + this.scaleHeight(pin, set.scaleHeight, set, true); + if (value == "out") { + pin._scaleX = pin._scaleY = Math.max(pin._scaleX, pin._scaleY); + } else if (value == "in") { + pin._scaleX = pin._scaleY = Math.min(pin._scaleX, pin._scaleY); + } + } + }, + scaleWidth: function(pin, value, set, force) { + if (set.scaleMode && !force) { + return; + } + pin._scaleX = value / pin._width_; + pin._transform_flag = true; + }, + scaleHeight: function(pin, value, set, force) { + if (set.scaleMode && !force) { + return; + } + pin._scaleY = value / pin._height_; + pin._transform_flag = true; + }, + matrix: function(pin, value, set) { + this.scaleX(pin, value.a, set); + this.skewX(pin, value.c / value.d, set); + this.skewY(pin, value.b / value.a, set); + this.scaleY(pin, value.d, set); + this.offsetX(pin, value.e, set); + this.offsetY(pin, value.f, set); + this.rotation(pin, 0, set); + } +}; + +Cut.Matrix = function(a, b, c, d, e, f) { + this.changed = true; + this.a = a || 1; + this.b = b || 0; + this.c = c || 0; + this.d = d || 1; + this.e = e || 0; + this.f = f || 0; +}; + +Cut.Matrix.prototype.toString = function() { + return "[" + this.a + ", " + this.b + ", " + this.c + ", " + this.d + ", " + this.e + ", " + this.f + "]"; +}; + +Cut.Matrix.prototype.clone = function() { + return new Cut.Matrix(this.a, this.b, this.c, this.d, this.e, this.f); +}; + +Cut.Matrix.prototype.copyTo = function(m) { + m.copyFrom(this); + return this; +}; + +Cut.Matrix.prototype.copyFrom = function(m) { + this.changed = true; + this.a = m.a; + this.b = m.b; + this.c = m.c; + this.d = m.d; + this.e = m.e; + this.f = m.f; + return this; +}; + +Cut.Matrix.prototype.identity = function() { + this.changed = true; + this.a = 1; + this.b = 0; + this.c = 0; + this.d = 1; + this.e = 0; + this.f = 0; + return this; +}; + +Cut.Matrix.prototype.rotate = function(angle) { + if (!angle) { + return this; + } + this.changed = true; + var u = angle ? Math.cos(angle) : 1; + // android bug may give bad 0 values + var v = angle ? Math.sin(angle) : 0; + var a = u * this.a - v * this.b; + var b = u * this.b + v * this.a; + var c = u * this.c - v * this.d; + var d = u * this.d + v * this.c; + var e = u * this.e - v * this.f; + var f = u * this.f + v * this.e; + this.a = a; + this.b = b; + this.c = c; + this.d = d; + this.e = e; + this.f = f; + return this; +}; + +Cut.Matrix.prototype.translate = function(x, y) { + if (!x && !y) { + return this; + } + this.changed = true; + this.e += x; + this.f += y; + return this; +}; + +Cut.Matrix.prototype.scale = function(x, y) { + if (!(x - 1) && !(y - 1)) { + return this; + } + this.changed = true; + this.a *= x; + this.b *= y; + this.c *= x; + this.d *= y; + this.e *= x; + this.f *= y; + return this; +}; + +Cut.Matrix.prototype.skew = function(x, y) { + if (!x && !y) { + return this; + } + this.changed = true; + var a = this.a + this.b * x; + var b = this.b + this.a * y; + var c = this.c + this.d * x; + var d = this.d + this.c * y; + var e = this.e + this.f * x; + var f = this.f + this.e * y; + this.a = a; + this.b = b; + this.c = c; + this.d = d; + this.e = e; + this.f = f; + return this; +}; + +Cut.Matrix.prototype.concat = function(m) { + this.changed = true; + var n = this; + var a = n.a * m.a + n.b * m.c; + var b = n.b * m.d + n.a * m.b; + var c = n.c * m.a + n.d * m.c; + var d = n.d * m.d + n.c * m.b; + var e = n.e * m.a + m.e + n.f * m.c; + var f = n.f * m.d + m.f + n.e * m.b; + this.a = a; + this.b = b; + this.c = c; + this.d = d; + this.e = e; + this.f = f; + return this; +}; + +Cut.Matrix.prototype.reverse = function() { + if (this.changed) { + this.changed = false; + this.reversed = this.reversed || new Cut.Matrix(); + var z = this.a * this.d - this.b * this.c; + this.reversed.a = this.d / z; + this.reversed.b = -this.b / z; + this.reversed.c = -this.c / z; + this.reversed.d = this.a / z; + this.reversed.e = (this.c * this.f - this.e * this.d) / z; + this.reversed.f = (this.e * this.b - this.a * this.f) / z; + } + return this.reversed; +}; + +Cut.Matrix.prototype.map = function(p, q) { + q = q || {}; + q.x = this.a * p.x + this.c * p.y + this.e; + q.y = this.b * p.x + this.d * p.y + this.f; + return q; +}; + +Cut.Matrix.prototype.mapX = function(x, y) { + return this.a * x + this.c * y + this.e; +}; + +Cut.Matrix.prototype.mapY = function(x, y) { + return this.b * x + this.d * y + this.f; +}; + +Cut.Math = {}; + +Cut.Math.random = function(min, max) { + if (arguments.length == 0) { + max = 1, min = 0; + } else if (arguments.length == 1) { + max = min, min = 0; + } + if (min == max) { + return min; + } + return Math.random() * (max - min) + min; +}; + +Cut.Math.rotate = function(num, min, max) { + if (arguments.length < 3) { + max = min || 0; + min = 0; + } + if (max > min) { + num = (num - min) % (max - min); + return num + (num < 0 ? max : min); + } else { + num = (num - max) % (min - max); + return num + (num <= 0 ? min : max); + } +}; + +Cut.Math.length = function(x, y) { + return Math.sqrt(x * x + y * y); +}; + +Cut._TS = 0; + +Cut._isCut = function(obj) { + return obj instanceof Cut; +}; + +Cut._isNum = function(x) { + return typeof x === "number"; +}; + +Cut._isFunc = function(x) { + return typeof x === "function"; +}; + +Cut._isArray = "isArray" in Array ? Array.isArray : function(value) { + return Object.prototype.toString.call(value) === "[object Array]"; +}; + +Cut._extend = function(base, extension, attribs) { + if (attribs) { + for (var i = 0; i < attribs.length; i++) { + var attr = attribs[i]; + base[attr] = extension[attr]; + } + } else { + for (var attr in extension) { + base[attr] = extension[attr]; + } + } + return base; +}; + +Cut._now = function() { + if (typeof performance !== "undefined" && performance.now) { + return function() { + return performance.now(); + }; + } else if (Date.now) { + return function() { + return Date.now(); + }; + } else { + return function() { + return +new Date(); + }; + } +}(); + +Cut._function = function(value) { + return typeof value === "function" ? value : function() { + return value; + }; +}; + +Cut._options = function(options) { + options.get = function(name) { + return typeof this[name] == "function" ? this[name]() : this[name]; + }; + options.extend = function(obj) { + obj = typeof obj === "object" ? obj : {}; + for (var name in this) { + obj[name] = name in obj ? obj[name] : this[name]; + } + return obj; + }; + options.mixin = function(obj) { + if (typeof obj === "object") { + for (var name in obj) { + this[name] = obj[name]; + } + } + return this; + }; + return options; +}; + +Cut._status = function(msg) { + if (!Cut._statusbox) { + var statusbox = Cut._statusbox = document.createElement("div"); + statusbox.style.position = "absolute"; + statusbox.style.color = "black"; + statusbox.style.background = "white"; + statusbox.style.zIndex = 999; + statusbox.style.top = "5px"; + statusbox.style.right = "5px"; + statusbox.style.padding = "1px 5px"; + document.body.appendChild(statusbox); + } + Cut._statusbox.innerHTML = msg; +}; + +Cut.Easing = function() { + function identity(t) { + return t; + } + var easings = {}, modes = {}; + function select(token) { + if (typeof token === "function") { + return token; + } + if (typeof token !== "string") { + return identity; + } + var match = /^(\w+)(-(in|out|in-out|out-in))?(\((.*)\))?$/i.exec(token); + if (!match || !match.length) { + return identity; + } + var name = match[1] || "", mode = match[3] || "in", params = match[5]; + mode = modes[mode]; + params = params ? params.replace(/\s+/, "").split(",") : []; + var easing = easings[name]; + var fn = easing ? easing.fn || easing.fc.apply(easing.fc, params) : identity; + return mode ? mode(fn) : fn; + } + select.addMode = function(mode) { + var names = mode.name.split(/\s+/); + for (var i = 0; i < names.length; i++) { + names[i] && (modes[names[i]] = mode.fn); + } + }; + select.add = function(easing) { + var names = easing.name.split(/\s+/); + for (var i = 0; i < names.length; i++) { + names[i] && (easings[names[i]] = easing); + } + }; + return select; +}(); + +Cut.Easing.addMode({ + name: "in", + fn: function(f) { + return function(t) { + return f(t); + }; + } +}); + +Cut.Easing.addMode({ + name: "out", + fn: function(f) { + return function(t) { + return 1 - f(1 - t); + }; + } +}); + +Cut.Easing.addMode({ + name: "in-out", + fn: function(f) { + return function(t) { + return t < .5 ? f(2 * t) / 2 : 1 - f(2 * (1 - t)) / 2; + }; + } +}); + +Cut.Easing.addMode({ + name: "out-in", + fn: function(f) { + return function(t) { + return t < .5 ? 1 - f(2 * (1 - t)) / 2 : f(2 * t) / 2; + }; + } +}); + +Cut.Easing.add({ + name: "linear", + fn: function(t) { + return t; + } +}); + +Cut.Easing.add({ + name: "quad", + fn: function(t) { + return t * t; + } +}); + +Cut.Easing.add({ + name: "cubic", + fn: function(t) { + return t * t * t; + } +}); + +Cut.Easing.add({ + name: "quart", + fn: function(t) { + return t * t * t * t; + } +}); + +Cut.Easing.add({ + name: "quint", + fn: function(t) { + return t * t * t * t * t; + } +}); + +Cut.Easing.add({ + name: "sin sine", + fn: function(t) { + return 1 - Math.cos(t * Math.PI / 2); + } +}); + +Cut.Easing.add({ + name: "exp", + fn: function(t) { + return t == 0 ? 0 : Math.pow(2, 10 * (t - 1)); + } +}); + +Cut.Easing.add({ + name: "circle circ", + fn: function(t) { + return 1 - Math.sqrt(1 - t * t); + } +}); + +Cut.Easing.add({ + name: "bounce", + fn: function(t) { + return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375; + } +}); + +Cut.Easing.add({ + name: "poly", + fc: function(e) { + return function(t) { + return Math.pow(t, e); + }; + } +}); + +Cut.Easing.add({ + name: "elastic", + fc: function(a, p) { + p = p || .45; + a = a || 1; + var s = p / (2 * Math.PI) * Math.asin(1 / a); + return function(t) { + return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p); + }; + } +}); + +Cut.Easing.add({ + name: "back", + fc: function(s) { + s = arguments.length ? s : 1.70158; + return function(t) { + return t * t * ((s + 1) * t - s); + }; + } +}); + +if (typeof module !== "undefined") { + module.exports = Cut; +} + +if (typeof Cut === "undefined" && typeof require === "function") Cut = require("./cut-core"); + +DEBUG = (typeof DEBUG === "undefined" || DEBUG) && console; + +/** + * Default loader for web. + */ +window.addEventListener("load", function() { + DEBUG && console.log("On load."); + Cut.Loader.start(); +}, false); + +Cut.Loader.init = function(app, configs) { + configs = configs || {}; + var canvas = configs.canvas, context = null, full = false; + var width = 0, height = 0, ratio = 1; + if (typeof canvas === "string") { + canvas = document.getElementById(canvas); + } + if (!canvas) { + canvas = document.getElementById("cutjs"); + } + if (!canvas) { + full = true; + DEBUG && console.log("Creating element..."); + canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + var body = document.body; + body.insertBefore(canvas, body.firstChild); + } + context = canvas.getContext("2d"); + var devicePixelRatio = window.devicePixelRatio || 1; + var backingStoreRatio = context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; + ratio = devicePixelRatio / backingStoreRatio; + var requestAnimationFrame = window.requestAnimationFrame || window.msRequestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.oRequestAnimationFrame || function(callback) { + return window.setTimeout(callback, 1e3 / 60); + }; + DEBUG && console.log("Creating root..."); + var root = Cut.root(requestAnimationFrame, function() { + context.setTransform(1, 0, 0, 1, 0, 0); + context.clearRect(0, 0, width, height); + this.render(context); + }); + app(root, canvas); + resize(); + window.addEventListener("resize", resize, false); + function resize() { + if (full) { + width = window.innerWidth > 0 ? window.innerWidth : screen.width; + height = window.innerHeight > 0 ? window.innerHeight : screen.height; + canvas.style.width = width + "px"; + canvas.style.height = height + "px"; + } else { + width = canvas.clientWidth; + height = canvas.clientHeight; + } + width *= ratio; + height *= ratio; + canvas.width = width; + canvas.height = height; + DEBUG && console.log("Resize: " + width + " x " + height + " / " + ratio); + root.resize(width, height, ratio); + } + return root; +}; + +Cut.Loader.loadImage = function(src, handleComplete, handleError) { + var image = new Image(); + DEBUG && console.log("Loading image: " + src); + image.onload = handleComplete; + image.onerror = handleError; + image.src = src; + return image; +}; + +if (typeof Cut === "undefined" && typeof require === "function") Cut = require("./cut-core"); + +DEBUG = (typeof DEBUG === "undefined" || DEBUG) && console; + +Cut.Mouse = function() { + Cut.Mouse.subscribe.apply(Cut.Mouse, arguments); +}; + +Cut.Mouse.CLICK = "click"; + +Cut.Mouse.START = "touchstart mousedown"; + +Cut.Mouse.MOVE = "touchmove mousemove"; + +Cut.Mouse.END = "touchend mouseup"; + +Cut.Mouse.subscribe = function(root, elem, move) { + elem = elem || document; + elem.addEventListener("click", mouseClick); + // TODO: with 'if' mouse doesn't work on touch screen, without 'if' two events + // on Android + if ("ontouchstart" in window) { + elem.addEventListener("touchstart", function(event) { + mouseStart(event, "touchmove"); + }); + elem.addEventListener("touchend", function(event) { + mouseEnd(event, "touchmove"); + }); + move && elem.addEventListener("touchmove", mouseMove); + } else { + elem.addEventListener("mousedown", function(event) { + mouseStart(event, "mousemove"); + }); + elem.addEventListener("mouseup", function(event) { + mouseEnd(event, "mousemove"); + }); + move && elem.addEventListener("mousemove", mouseMove); + } + var visitor = null; + var abs = { + x: 0, + y: 0, + toString: function() { + return (this.x | 0) + "x" + (this.y | 0); + } + }; + var rel = { + x: 0, + y: 0, + toString: function() { + return abs + " / " + (this.x | 0) + "x" + (this.y | 0); + } + }; + var clicked = { + x: 0, + y: 0, + state: 0 + }; + function mouseStart(event, moveName) { + update(event, elem); + DEBUG && console.log("Mouse Start: " + event.type + " " + abs); + !move && elem.addEventListener(moveName, mouseMove); + event.preventDefault(); + publish(event.type, event); + clicked.x = abs.x; + clicked.y = abs.y; + clicked.state = 1; + } + function mouseEnd(event, moveName) { + try { + // New xy is not valid/available, last xy is used instead. + DEBUG && console.log("Mouse End: " + event.type + " " + abs); + !move && elem.removeEventListener(moveName, mouseMove); + event.preventDefault(); + publish(event.type, event); + if (clicked.state == 1 && clicked.x == abs.x && clicked.y == abs.y) { + DEBUG && console.log("Mouse Click [+]"); + publish("click", event); + clicked.state = 2; + } else { + clicked.state = 0; + } + } catch (e) { + console && console.log(e); + } + } + function mouseMove(event) { + try { + update(event, elem); + // DEBUG && console.log('Mouse Move: ' + event.type + ' ' + + // abs); + event.preventDefault(); + publish(event.type, event); + } catch (e) { + console && console.log(e); + } + } + function mouseClick(event) { + try { + update(event, elem); + DEBUG && console.log("Mouse Click: " + event.type + " " + abs); + event.preventDefault(); + if (clicked.state != 2) { + publish(event.type, event); + } else { + DEBUG && console.log("Mouse Click [-]"); + } + } catch (e) { + console && console.log(e); + } + } + function publish(type, event) { + abs.type = type; + abs.event = event; + rel.x = abs.x; + rel.y = abs.y; + // visitor.count = 0; + root.visit(visitor); + } + visitor = { + reverse: true, + visible: true, + start: function(cut) { + if (!cut._listens(abs.type)) { + return true; + } + }, + end: function(cut) { + // visitor.count++; + var listeners = cut.listeners(abs.type); + if (!listeners) { + return; + } + cut.matrix().reverse().map(abs, rel); + if (cut === root || cut.attr("spy")) {} else if (rel.x < 0 || rel.x > cut._pin._width || rel.y < 0 || rel.y > cut._pin._height) { + return; + } + rel.raw = abs.event; + for (var l = 0; l < listeners.length; l++) { + if (listeners[l].call(cut, rel)) { + return; + } + } + } + }; + function update(event, elem) { + var isTouch = false; + // touch screen events + if (event.touches) { + if (event.touches.length) { + isTouch = true; + abs.x = event.touches[0].pageX; + abs.y = event.touches[0].pageY; + } else { + return; + } + } else { + // mouse events + abs.x = event.clientX; + abs.y = event.clientY; + // See http://goo.gl/JuVnF2 + if (document.body.scrollLeft || document.body.scrollTop) {} else if (document.documentElement) { + abs.x += document.documentElement.scrollLeft; + abs.y += document.documentElement.scrollTop; + } + } + // accounts for border + abs.x -= elem.clientLeft || 0; + abs.y -= elem.clientTop || 0; + var par = elem; + while (par) { + abs.x -= par.offsetLeft || 0; + abs.y -= par.offsetTop || 0; + if (!isTouch) { + // touch events offset scrolling with pageX/Y + // so scroll offset not needed for them + abs.x += par.scrollLeft || 0; + abs.y += par.scrollTop || 0; + } + par = par.offsetParent; + } + // see loader + abs.x *= root._ratio || 1; + abs.y *= root._ratio || 1; + } +}; + +if (typeof define === 'function' && define.amd) { // AMD + define('Cut', [], function() { + return Cut; + }); +} \ No newline at end of file diff --git a/ajax/libs/cutjs/0.2.1/cut.web.min.js b/ajax/libs/cutjs/0.2.1/cut.web.min.js new file mode 100644 index 000000000..4aa20c395 --- /dev/null +++ b/ajax/libs/cutjs/0.2.1/cut.web.min.js @@ -0,0 +1,8 @@ +/* + * CutJS 0.2.1 + * Copyright (c) 2013-2014 Ali Shakiba, Piqnt LLC and other contributors + * Available under the MIT license + * @license + */ +function Cut(){if(!(this instanceof Cut)){if("function"==typeof arguments[0])return Cut.Loader.load.apply(Cut.Loader,arguments);if("object"==typeof arguments[0])return Cut.Texture.add.apply(Cut.Texture,arguments)}Cut._stats.create++,this._id="",this._visible=!0,this._parent=null,this._next=null,this._prev=null,this._first=null,this._last=null,this._pin=new Cut.Pin(this),this._cutouts=[],this._tickBefore=[],this._tickAfter=[],this._alpha=1}DEBUG=("undefined"==typeof DEBUG||DEBUG)&&console,Cut._create=function(){if("function"==typeof Object.create)return function(){return Object.create.apply(null,arguments)};var t=function(){};return function(i){if(arguments.length>1)throw Error("Second argument is not supported!");if(null===i||"object"!=typeof i)throw Error("Invalid prototype!");return t.prototype=i,new t}}(),Cut._stats={create:0,tick:0,paint:0,paste:0},Cut.create=function(){return new Cut},Cut.prototype.render=function(t){Cut._stats.tick=Cut._stats.paint=Cut._stats.paste=0;var i=Cut._now(),e=this._lastTime?i-this._lastTime:0;this._lastTime=i,this._tick(e),this._paint(t),Cut._stats.fps=1e3/(Cut._now()-i)},Cut.prototype.MAX_ELAPSE=1/0,Cut.prototype._tick=function(t){if(this._visible){t>this.MAX_ELAPSE&&(t=this.MAX_ELAPSE),this._pin.tick();for(var i=this._tickBefore.length,e=0;i>e;e++)Cut._stats.tick++,this._tickBefore[e].call(this,t);for(var s,n=this._first;s=n;)n=s._next,s._tick(t);for(var i=this._tickAfter.length,e=0;i>e;e++)Cut._stats.tick++,this._tickAfter[e].call(this,t)}},Cut.prototype.tick=function(t,i){i?this._tickBefore.push(t):this._tickAfter.push(t)},Cut.prototype.untick=function(t){var i;t&&((i=this._tickBefore.indexOf(t))>=0?this._tickBefore.splice(i,1):(i=this._tickAfter.indexOf(t))>=0&&this._tickAfter.splice(i,1))},Cut.prototype._paint=function(t){if(this._visible){Cut._stats.paint++;var i=this._pin.absoluteMatrix();t.setTransform(i.a,i.b,i.c,i.d,i.e,i.f),this._alpha=this._pin._alpha*(this._parent?this._parent._alpha:1);var e=this._pin._textureAlpha*this._alpha;t.globalAlpha!=e&&(t.globalAlpha=e);for(var s=this._cutouts.length,n=0;s>n;n++)this._cutouts[n].paste(t);t.globalAlpha!=this._alpha&&(t.globalAlpha=this._alpha);for(var r,o=this._first;r=o;)o=r._next,r._paint(t)}},Cut.prototype.toString=function(){return"["+this._id+"]"},Cut.prototype.id=function(t){return arguments.length?(this._id=t,this):this._id},Cut.prototype.attr=function(t,i){return arguments.length<2?this._attrs?this._attrs[t]:void 0:((this._attrs?this._attrs:this._attrs={})[t]=i,this)},Cut.prototype.on=Cut.prototype.listen=function(t,i){if("function"!=typeof i)return this;t=(Cut._isArray(t)?t.join(" "):t).split(/\s+/);for(var e=0;e0&&this._listenOn(i)},Cut.prototype._listenOff=function(t){if("string"==typeof t)this._listenersCount=this._listenersCount||{},1==this._listenersCount[t]&&this._parent&&this._parent._listenOff(t),this._listenersCount[t]=Math.max((this._listenersCount[t]||0)-1,0);else if("object"==typeof t&&t._listenersCount)for(var i in t._listenersCount)t._listenersCount[i]>0&&this._listenOff(i)},Cut.prototype._listens=function(t){return this._listenersCount&&this._listenersCount[t]||0},Cut.prototype.touch=function(){return this._ts_touch=Cut._TS++,this._parent&&this._parent.touch(),this},Cut.prototype.pin=function(){if(!arguments.length)return this._pin;var t=this._pin.update.apply(this._pin,arguments);return t===this._pin?this:t},Cut.prototype.matrix=function(){return this._pin.absoluteMatrix(this,this._parent?this._parent._pin:null)},Cut.prototype.tween=function(t,i){return(this._tween||(this._tween=new Cut.Tween(this))).tween(t,i)},Cut.Tween=function(t){var i=this;this._owner=t,this._queue=[],this._next=null,t.tick(function(e){if(i._queue.length){this.touch();var s=i._queue[0];if(s.time?s.time+=e:s.time=1,!(s.time=1;r=r>1?1:r,r="function"==typeof s.easing?s.easing(r):r;var h=1-r;for(var n in s.keys)t.pin(n,s.start[n]*h+s.end[s.keys[n]]*r);o&&(i._queue.shift(),s.then&&s.then.call(t))}}},!0)},Cut.Tween.prototype.tween=function(t,i){return this._next={id:Cut._TS++,end:{},duration:t||400,delay:i||0},this},Cut.Tween.prototype.pin=function(){this._next!==this._queue[this._queue.length-1]&&(this._owner.touch(),this._queue.push(this._next));var t=this._next.end;return 1===arguments.length?Cut._extend(t,arguments[0]):2===arguments.length&&(t[arguments[0]]=arguments[1]),this},Cut.Tween.prototype.clear=function(t){for(var i;i=this._queue.shift();)t&&this._owner.pin(i.end);return this},Cut.Tween.prototype.then=function(t){return this._next.then=t,this},Cut.Tween.prototype.ease=function(t){return this._next.easing=Cut.Easing(t),this},Cut.root=function(t,i){return new Cut.Root(t,i)},Cut.Root=function(t,i){Cut.String.prototype._super.apply(this,arguments),this._paused=!0,this._render=i,this._request=t;var e=this,s=function(){e._paused!==!0&&(e._mo_touch=e._ts_touch,e._render(),e.request(),e._mo_touch==e._ts_touch&&e.pause())};this.request=function(){this._request.call(null,s)},this.on("viewport",function(t){return this._size={width:t.width,height:t.height},this._updateViewbox(),!0})},Cut.Root.prototype=Cut._create(Cut.prototype),Cut.Root.prototype._super=Cut,Cut.Root.prototype.constructor=Cut.Root,Cut.Root.prototype.viewbox=function(t,i,e){return this._viewbox={width:t,height:i,mode:/^(in|out)$/.test(e)?e:"in"},this._updateViewbox(),this},Cut.Root.prototype._updateViewbox=function(){var t=this._viewbox,i=this._size;i&&this.pin(t?{width:t.width,height:t.height,resizeMode:t.mode,resizeWidth:i.width,resizeHeight:i.height}:{width:i.width,height:i.height})},Cut.Root.prototype.start=function(){return this.resume()},Cut.Root.prototype.resume=function(t){return(this._paused||t)&&(this._paused=!1,this.request()),this},Cut.Root.prototype.pause=function(){return this._paused=!0,this},Cut.Root.prototype.touch=function(){return this.resume(),Cut.prototype.touch.apply(this,arguments)},Cut.Root.prototype.resize=function(t,i,e){this._ratio=e||1;var s={};return s.width=t,s.height=i,s.ratio=e,this.visit({start:function(t){return t._listens("viewport")?void t.publish("viewport",[s]):!0}}),this},Cut.image=function(t){var i=new Cut.Image;return t&&i.image(t),i},Cut.Image=function(){Cut.Image.prototype._super.apply(this,arguments)},Cut.Image.prototype=Cut._create(Cut.prototype),Cut.Image.prototype._super=Cut,Cut.Image.prototype.constructor=Cut.Image,Cut.Image.prototype.setImage=function(){this.image.apply(this,arguments)},Cut.Image.prototype.image=function(t){return this._cutouts[0]=Cut.Out.select(t),this._cutouts.length=1,this.pin({width:this._cutouts[0]?this._cutouts[0].dWidth():0,height:this._cutouts[0]?this._cutouts[0].dHeight():0}),this._cutout=this._cutouts[0].clone(),this},Cut.Image.prototype.cropX=function(t,i){return this.image(this._cutouts[0].cropX(t,i))},Cut.Image.prototype.cropY=function(t,i){return this.image(this._cutouts[0].cropY(t,i))},Cut.Image.prototype._slice=function(t){return this._cutouts[t]||(this._cutouts[t]=this._cutout.clone())},Cut.Image.prototype.tile=function(t){return this.untick(this._repeatTicker),this._repeatTicker=function(){if(this._mo_tile!=this._ts_touch){this._mo_tile=this._ts_touch;var i=this._cutout._left,e=this._cutout._right,s=this._cutout._top,n=this._cutout._bottom,r=this._cutout.dWidth()-i-e,o=this._cutout.dHeight()-s-n,h=this.pin("width");h=t?h:h-i-e;var u=this.pin("height");u=t?u:u-s-n;var a=t?-i:0,_=t?-s:0,c=0;s&&i&&this._slice(c++).cropX(i,0).cropY(s,0).offset(a,_),n&&i&&this._slice(c++).cropX(i,0).cropY(n,o+s).offset(a,_+u+s),s&&e&&this._slice(c++).cropX(e,r+i).cropY(s,0).offset(a+h+i,_),n&&e&&this._slice(c++).cropX(e,r+i).cropY(n,o+s).offset(a+h+i,_+u+s);for(var f=a+i,p=h;p>0;){var l=Math.min(r,p);p-=r;for(var d=_+s,g=u;g>0;){var m=Math.min(o,g);g-=o,this._slice(c++).cropX(l,i).cropY(m,s).offset(f,d),0>=p&&(i&&this._slice(c++).cropX(i,0).cropY(m,s).offset(a,d),e&&this._slice(c++).cropX(e,r+i).cropY(m,s).offset(f+l,d)),d+=m}s&&this._slice(c++).cropX(l,i).cropY(s,0).offset(f,_),n&&this._slice(c++).cropX(l,i).cropY(n,o+s).offset(f,d),f+=l}this._cutouts.length=c}},this.tick(this._repeatTicker),this},Cut.Image.prototype.stretch=function(t){return this.untick(this._repeatTicker),this._repeatTicker=function(){if(this._mo_stretch!=this._pin._ts_transform){this._mo_stretch=this._pin._ts_transform;var i=this._cutout._left,e=this._cutout._right,s=this._cutout._top,n=this._cutout._bottom,r=this._cutout.dWidth(),o=this._cutout.dHeight(),h=this.pin("width"),u=this.pin("height");h=t?h+i+e:Math.max(h,i+e),u=t?u+s+n:Math.max(u,s+n);var a=0;s&&i&&this._slice(a++).cropX(i,0).cropY(s,0).offset(0,0),n&&i&&this._slice(a++).cropX(i,0).cropY(n,o-n).offset(0,u-n),s&&e&&this._slice(a++).cropX(e,r-e).cropY(s,0).offset(h-e,0),n&&e&&this._slice(a++).cropX(e,r-e).cropY(n,o-n).offset(h-e,u-n),s&&this._slice(a++).cropX(r-i-e,i).cropY(s,0).offset(i,0).dWidth(h-i-e),n&&this._slice(a++).cropX(r-i-e,i).cropY(n,o-n).offset(i,u-n).dWidth(h-i-e),i&&this._slice(a++).cropX(i,0).cropY(o-s-n,s).offset(0,s).dHeight(u-s-n),e&&this._slice(a++).cropX(e,r-e).cropY(o-s-n,s).offset(h-e,s).dHeight(u-s-n),this._slice(a++).cropX(r-i-e,i).cropY(o-s-n,s).offset(i,s).dWidth(h-i-e).dHeight(u-s-n),this._cutouts.length=a}},this.tick(this._repeatTicker),this},Cut.anim=function(t,i){var e=(new Cut.Anim).frames(t).gotoFrame(0);return i&&e.fps(i),e},Cut.Anim=function(){Cut.Anim.prototype._super.apply(this,arguments),this._fps=Cut.Anim.FPS,this._ft=1e3/this._fps,this._time=0,this._frame=0,this._frames=[],this._labels={},this.tick(function(){if(this._time&&this._frames.length>1){var t=Cut._now()-this._time;if(t>=this._ft){var i=t<2*this._ft?1:Math.floor(t/this._ft);this._time+=i*this._ft,this.moveFrame(i),this._repeat&&(this._repeat-=i)<=0&&(this.stop(),this._callback&&this._callback())}this.touch()}},!1)},Cut.Anim.prototype=Cut._create(Cut.prototype),Cut.Anim.prototype._super=Cut,Cut.Anim.prototype.constructor=Cut.Anim,Cut.Anim.FPS=22,Cut.Anim.prototype.fps=function(t){return arguments.length?(this._fps=t||Cut.Anim.FPS,this._ft=1e3/this._fps,this):this._fps},Cut.Anim.prototype.setFrames=function(){this.frames.apply(this,arguments)},Cut.Anim.prototype.frames=function(t){if(this._time=this._time||0,this._frame=0,this._frames=[],this._labels={},t=Cut.Out.select(t,!0),t&&t.length)for(var i=0;i=0;t--)e[t].pause()},resume:function(){for(var t=i.length-1;t>=0;t--)e[t].resume()},getImage:function(t){return s[t]},addImage:function(t,i){return s[i]=t,this}}}(),Cut.Texture=function(t){function i(){return r||(r=Cut.Loader.getImage(t.imagePath)),r}function e(i){if(!i||i.isCutout)return i;"function"==typeof t.map?i=t.map(i):"function"==typeof t.filter&&(i=t.filter(i));var e=t.ratio||1;1!=e&&(i.x*=e,i.y*=e,i.width*=e,i.height*=e,i.top*=e,i.bottom*=e,i.left*=e,i.right*=e);var s=t.trim||0;return s&&(i.x+=s,i.y+=s,i.width-=2*s,i.height-=2*s,i.top-=s,i.bottom-=s,i.left-=s,i.right-=s),i}function s(e){return e.isCutout||(e=new Cut.Out(e,i,t.imageRatio)),e}t.cutouts=t.cutouts||[];var n={},r=null;this.getImagePath=function(){return t.imagePath};for(var o=0;oe)throw"Invalid selector: '"+t+"'";var s=[t.slice(0,e),t.slice(e+1)],n=Cut.Texture._list[s[0]];if(null==n)throw"Texture not found: '"+t+"'";return n.select(s[1],i)},Cut.drawing=function(){return Cut.image(Cut.Out.drawing.apply(Cut.Out,arguments))},Cut.Out.drawing=function(){var t=document.createElement("canvas"),i=t.getContext("2d"),e={},s=0;"object"==typeof arguments[s]?e=arguments[s++]:("string"==typeof arguments[s]&&(e.name=arguments[s++]),e.width=arguments[s++],e.height=arguments[s++],"number"==typeof arguments[s]&&(e.ratio=arguments[s++]),e.x=0,e.y=0),e.ratio=e.ratio||1,e.name=e.name||1e3*Math.random()|0,t.width=Math.ceil(e.width*e.ratio),t.height=Math.ceil(e.height*e.ratio);var n=new Cut.Out(e,t,e.ratio);return"function"==typeof arguments[arguments.length-1]&&arguments[arguments.length-1].call(n,i,e.ratio),n},Cut.Pin=function(t){this._owner=t,this._parent=null,this._relativeMatrix=new Cut.Matrix,this._absoluteMatrix=new Cut.Matrix,this.reset()},Cut.Pin.prototype.reset=function(){this._textureAlpha=1,this._alpha=1,this._width=0,this._height=0,this._scaleX=1,this._scaleY=1,this._skewX=0,this._skewY=0,this._rotation=0,this._pivoted=!1,this._pivotX=null,this._pivotY=null,this._handled=!1,this._handleX=0,this._handleY=0,this._aligned=!1,this._alignX=0,this._alignY=0,this._offsetX=0,this._offsetY=0,this._boxX=0,this._boxY=0,this._boxWidth=this._width,this._boxHeight=this._height,this._ts_translate=Cut._TS++,this._ts_transform=Cut._TS++,this._ts_matrix=Cut._TS++},Cut.Pin.prototype.tick=function(){return this._parent=this._owner._parent&&this._owner._parent._pin,this._handled&&this._mo_handle!=this._ts_transform&&(this._mo_handle=this._ts_transform,this._ts_translate=Cut._TS++),this._aligned&&this._parent&&this._mo_align!=this._parent._ts_transform&&(this._mo_align=this._parent._ts_transform,this._ts_translate=Cut._TS++),this},Cut.Pin.prototype.toString=function(){return this._owner.id()+" ["+this._alignX+", "+this._alignY+"] ["+this._handleX+", "+this._handleY+"] ["+(this._parent?this._parent._owner.id():null)+"]"},Cut.Pin.prototype.absoluteMatrix=function(){var t=Math.max(this._ts_transform,this._ts_translate,this._parent?this._parent._ts_matrix:0);if(this._mo_abs==t)return this._absoluteMatrix;this._mo_abs=t;var i=this._absoluteMatrix;return i.copyFrom(this.relativeMatrix()),this._parent&&i.concat(this._parent._absoluteMatrix),this._ts_matrix=Cut._TS++,i},Cut.Pin.prototype.relativeMatrix=function(){var t=Math.max(this._ts_transform,this._ts_translate,this._parent?this._parent._ts_transform:0);if(this._mo_rel==t)return this._relativeMatrix;this._mo_rel=t;var i=this._relativeMatrix;if(i.identity(),this._pivoted&&i.translate(-this._pivotX*this._width,-this._pivotY*this._height),i.scale(this._scaleX,this._scaleY),i.skew(this._skewX,this._skewY),i.rotate(this._rotation),this._pivoted&&i.translate(this._pivotX*this._width,this._pivotY*this._height),this._pivoted)this._boxX=0,this._boxY=0,this._boxWidth=this._width,this._boxHeight=this._height;else{var e,s,n=i;n.a>0&&n.c>0||n.a<0&&n.c<0?(e=0,s=n.a*this._width+n.c*this._height):(e=n.a*this._width,s=n.c*this._height),e>s?(this._boxX=s,this._boxWidth=e-s):(this._boxX=e,this._boxWidth=s-e),n.b>0&&n.d>0||n.b<0&&n.d<0?(e=0,s=n.b*this._width+n.d*this._height):(e=n.b*this._width,s=n.d*this._height),e>s?(this._boxY=s,this._boxHeight=e-s):(this._boxY=e,this._boxHeight=s-e)}return this._x=this._offsetX,this._y=this._offsetY,this._x-=this._boxX+this._handleX*this._boxWidth,this._y-=this._boxY+this._handleY*this._boxHeight,this._aligned&&this._parent&&(this._parent.relativeMatrix(),this._x+=this._alignX*this._parent._width,this._y+=this._alignY*this._parent._height),i.translate(this._x,this._y),this._relativeMatrix},Cut.Pin._SINGLE={},Cut.Pin.prototype.update=function(){if(1==arguments.length&&"string"==typeof arguments[0])return this["_"+arguments[0]];this._transform_flag=!1,this._translate_flag=!1;var t=null,i=null,e=null;if(2==arguments.length&&"string"==typeof arguments[0]){for(i in Cut.Pin._SINGLE)delete Cut.Pin._SINGLE[i];(t=Cut.Pin._SINGLE)[arguments[0]]=arguments[1]}else 1==arguments.length&&"object"==typeof arguments[0]&&(t=arguments[0]);if(t)for(i in t)"undefined"!=typeof(e=t[i])&&(setter=Cut.Pin._setters[i])&&setter.call(Cut.Pin._setters,this,e,t);return this._translate_flag&&(this._translate_flag=!1,this._ts_translate=Cut._TS++),this._transform_flag&&(this._transform_flag=!1,this._ts_transform=Cut._TS++),this._owner&&(this._owner._ts_pin=Cut._TS++,this._owner.touch()),this},Cut.Pin._setters={alpha:function(t,i){t._alpha=i},textureAlpha:function(t,i){t._textureAlpha=i},width:function(t,i){t._width_=i,t._width=i,t._transform_flag=!0},height:function(t,i){t._height_=i,t._height=i,t._transform_flag=!0},scale:function(t,i){t._scaleX=i,t._scaleY=i,t._transform_flag=!0},scaleX:function(t,i){t._scaleX=i,t._transform_flag=!0},scaleY:function(t,i){t._scaleY=i,t._transform_flag=!0},skew:function(t,i){t._skewX=i,t._skewY=i,t._transform_flag=!0},skewX:function(t,i){t._skewX=i,t._transform_flag=!0},skewY:function(t,i){t._skewY=i,t._transform_flag=!0},rotation:function(t,i){t._rotation=i,t._transform_flag=!0},pivot:function(t,i){t._pivotX=i,t._pivotY=i,t._pivoted=!0,t._transform_flag=!0},pivotX:function(t,i){t._pivotX=i,t._pivoted=!0,t._transform_flag=!0},pivotY:function(t,i){t._pivotY=i,t._pivoted=!0,t._transform_flag=!0},offset:function(t,i){t._offsetX=i,t._offsetY=i,t._translate_flag=!0},offsetX:function(t,i){t._offsetX=i,t._translate_flag=!0},offsetY:function(t,i){t._offsetY=i,t._translate_flag=!0},align:function(){this.alignX.apply(this,arguments),this.alignY.apply(this,arguments)},alignX:function(t,i,e){t._alignX=i,t._aligned=!0,t._translate_flag=!0,this.handleX(t,i,e)},alignY:function(t,i,e){t._alignY=i,t._aligned=!0,t._translate_flag=!0,this.handleY(t,i,e)},handle:function(t,i,e){this.handleX(t,i,e),this.handleY(t,i,e)},handleX:function(t,i){t._handleX=i,t._handled=!0,t._translate_flag=!0},handleY:function(t,i){t._handleY=i,t._handled=!0,t._translate_flag=!0},resizeMode:function(t,i,e){Cut._isNum(e.resizeWidth)&&Cut._isNum(e.resizeHeight)&&(this.resizeWidth(t,e.resizeWidth,e,!0),this.resizeHeight(t,e.resizeHeight,e,!0),"out"==i?t._scaleX=t._scaleY=Math.max(t._scaleX,t._scaleY):"in"==i&&(t._scaleX=t._scaleY=Math.min(t._scaleX,t._scaleY)),t._width=e.resizeWidth/t._scaleX,t._height=e.resizeHeight/t._scaleY)},resizeWidth:function(t,i,e,s){(!e.resizeMode||s)&&(t._scaleX=i/t._width_,t._width=t._width_,t._transform_flag=!0)},resizeHeight:function(t,i,e,s){(!e.resizeMode||s)&&(t._scaleY=i/t._height_,t._height=t._height_,t._transform_flag=!0)},scaleMode:function(t,i,e){Cut._isNum(e.scaleWidth)&&Cut._isNum(e.scaleHeight)&&(this.scaleWidth(t,e.scaleWidth,e,!0),this.scaleHeight(t,e.scaleHeight,e,!0),"out"==i?t._scaleX=t._scaleY=Math.max(t._scaleX,t._scaleY):"in"==i&&(t._scaleX=t._scaleY=Math.min(t._scaleX,t._scaleY)))},scaleWidth:function(t,i,e,s){(!e.scaleMode||s)&&(t._scaleX=i/t._width_,t._transform_flag=!0)},scaleHeight:function(t,i,e,s){(!e.scaleMode||s)&&(t._scaleY=i/t._height_,t._transform_flag=!0)},matrix:function(t,i,e){this.scaleX(t,i.a,e),this.skewX(t,i.c/i.d,e),this.skewY(t,i.b/i.a,e),this.scaleY(t,i.d,e),this.offsetX(t,i.e,e),this.offsetY(t,i.f,e),this.rotation(t,0,e)}},Cut.Matrix=function(t,i,e,s,n,r){this.changed=!0,this.a=t||1,this.b=i||0,this.c=e||0,this.d=s||1,this.e=n||0,this.f=r||0},Cut.Matrix.prototype.toString=function(){return"["+this.a+", "+this.b+", "+this.c+", "+this.d+", "+this.e+", "+this.f+"]"},Cut.Matrix.prototype.clone=function(){return new Cut.Matrix(this.a,this.b,this.c,this.d,this.e,this.f)},Cut.Matrix.prototype.copyTo=function(t){return t.copyFrom(this),this},Cut.Matrix.prototype.copyFrom=function(t){return this.changed=!0,this.a=t.a,this.b=t.b,this.c=t.c,this.d=t.d,this.e=t.e,this.f=t.f,this},Cut.Matrix.prototype.identity=function(){return this.changed=!0,this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0,this},Cut.Matrix.prototype.rotate=function(t){if(!t)return this;this.changed=!0;var i=t?Math.cos(t):1,e=t?Math.sin(t):0,s=i*this.a-e*this.b,n=i*this.b+e*this.a,r=i*this.c-e*this.d,o=i*this.d+e*this.c,h=i*this.e-e*this.f,u=i*this.f+e*this.e;return this.a=s,this.b=n,this.c=r,this.d=o,this.e=h,this.f=u,this},Cut.Matrix.prototype.translate=function(t,i){return t||i?(this.changed=!0,this.e+=t,this.f+=i,this):this},Cut.Matrix.prototype.scale=function(t,i){return t-1||i-1?(this.changed=!0,this.a*=t,this.b*=i,this.c*=t,this.d*=i,this.e*=t,this.f*=i,this):this},Cut.Matrix.prototype.skew=function(t,i){if(!t&&!i)return this;this.changed=!0;var e=this.a+this.b*t,s=this.b+this.a*i,n=this.c+this.d*t,r=this.d+this.c*i,o=this.e+this.f*t,h=this.f+this.e*i;return this.a=e,this.b=s,this.c=n,this.d=r,this.e=o,this.f=h,this},Cut.Matrix.prototype.concat=function(t){this.changed=!0;var i=this,e=i.a*t.a+i.b*t.c,s=i.b*t.d+i.a*t.b,n=i.c*t.a+i.d*t.c,r=i.d*t.d+i.c*t.b,o=i.e*t.a+t.e+i.f*t.c,h=i.f*t.d+t.f+i.e*t.b;return this.a=e,this.b=s,this.c=n,this.d=r,this.e=o,this.f=h,this},Cut.Matrix.prototype.reverse=function(){if(this.changed){this.changed=!1,this.reversed=this.reversed||new Cut.Matrix; +var t=this.a*this.d-this.b*this.c;this.reversed.a=this.d/t,this.reversed.b=-this.b/t,this.reversed.c=-this.c/t,this.reversed.d=this.a/t,this.reversed.e=(this.c*this.f-this.e*this.d)/t,this.reversed.f=(this.e*this.b-this.a*this.f)/t}return this.reversed},Cut.Matrix.prototype.map=function(t,i){return i=i||{},i.x=this.a*t.x+this.c*t.y+this.e,i.y=this.b*t.x+this.d*t.y+this.f,i},Cut.Matrix.prototype.mapX=function(t,i){return this.a*t+this.c*i+this.e},Cut.Matrix.prototype.mapY=function(t,i){return this.b*t+this.d*i+this.f},Cut.Math={},Cut.Math.random=function(t,i){return 0==arguments.length?(i=1,t=0):1==arguments.length&&(i=t,t=0),t==i?t:Math.random()*(i-t)+t},Cut.Math.rotate=function(t,i,e){return arguments.length<3&&(e=i||0,i=0),e>i?(t=(t-i)%(e-i),t+(0>t?e:i)):(t=(t-e)%(i-e),t+(0>=t?i:e))},Cut.Math.length=function(t,i){return Math.sqrt(t*t+i*i)},Cut._TS=0,Cut._isCut=function(t){return t instanceof Cut},Cut._isNum=function(t){return"number"==typeof t},Cut._isFunc=function(t){return"function"==typeof t},Cut._isArray="isArray"in Array?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},Cut._extend=function(t,i,e){if(e)for(var s=0;si?t(2*i)/2:1-t(2*(1-i))/2}}}),Cut.Easing.addMode({name:"out-in",fn:function(t){return function(i){return.5>i?1-t(2*(1-i))/2:t(2*i)/2}}}),Cut.Easing.add({name:"linear",fn:function(t){return t}}),Cut.Easing.add({name:"quad",fn:function(t){return t*t}}),Cut.Easing.add({name:"cubic",fn:function(t){return t*t*t}}),Cut.Easing.add({name:"quart",fn:function(t){return t*t*t*t}}),Cut.Easing.add({name:"quint",fn:function(t){return t*t*t*t*t}}),Cut.Easing.add({name:"sin sine",fn:function(t){return 1-Math.cos(t*Math.PI/2)}}),Cut.Easing.add({name:"exp",fn:function(t){return 0==t?0:Math.pow(2,10*(t-1))}}),Cut.Easing.add({name:"circle circ",fn:function(t){return 1-Math.sqrt(1-t*t)}}),Cut.Easing.add({name:"bounce",fn:function(t){return 1/2.75>t?7.5625*t*t:2/2.75>t?7.5625*(t-=1.5/2.75)*t+.75:2.5/2.75>t?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}}),Cut.Easing.add({name:"poly",fc:function(t){return function(i){return Math.pow(i,t)}}}),Cut.Easing.add({name:"elastic",fc:function(t,i){i=i||.45,t=t||1;var e=i/(2*Math.PI)*Math.asin(1/t);return function(s){return 1+t*Math.pow(2,-10*s)*Math.sin(2*(s-e)*Math.PI/i)}}}),Cut.Easing.add({name:"back",fc:function(t){return t=arguments.length?t:1.70158,function(i){return i*i*((t+1)*i-t)}}}),"undefined"!=typeof module&&(module.exports=Cut),"undefined"==typeof Cut&&"function"==typeof require&&(Cut=require("./cut-core")),DEBUG=("undefined"==typeof DEBUG||DEBUG)&&console,window.addEventListener("load",function(){DEBUG&&console.log("On load."),Cut.Loader.start()},!1),Cut.Loader.init=function(t,i){function e(){r?(o=window.innerWidth>0?window.innerWidth:screen.width,h=window.innerHeight>0?window.innerHeight:screen.height,s.style.width=o+"px",s.style.height=h+"px"):(o=s.clientWidth,h=s.clientHeight),o*=u,h*=u,s.width=o,s.height=h,DEBUG&&console.log("Resize: "+o+" x "+h+" / "+u),p.resize(o,h,u)}i=i||{};var s=i.canvas,n=null,r=!1,o=0,h=0,u=1;if("string"==typeof s&&(s=document.getElementById(s)),s||(s=document.getElementById("cutjs")),!s){r=!0,DEBUG&&console.log("Creating element..."),s=document.createElement("canvas"),s.style.position="absolute";var a=document.body;a.insertBefore(s,a.firstChild)}n=s.getContext("2d");var _=window.devicePixelRatio||1,c=n.webkitBackingStorePixelRatio||n.mozBackingStorePixelRatio||n.msBackingStorePixelRatio||n.oBackingStorePixelRatio||n.backingStorePixelRatio||1;u=_/c;var f=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.oRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)};DEBUG&&console.log("Creating root...");var p=Cut.root(f,function(){n.setTransform(1,0,0,1,0,0),n.clearRect(0,0,o,h),this.render(n)});return t(p,s),e(),window.addEventListener("resize",e,!1),p},Cut.Loader.loadImage=function(t,i,e){var s=new Image;return DEBUG&&console.log("Loading image: "+t),s.onload=i,s.onerror=e,s.src=t,s},"undefined"==typeof Cut&&"function"==typeof require&&(Cut=require("./cut-core")),DEBUG=("undefined"==typeof DEBUG||DEBUG)&&console,Cut.Mouse=function(){Cut.Mouse.subscribe.apply(Cut.Mouse,arguments)},Cut.Mouse.CLICK="click",Cut.Mouse.START="touchstart mousedown",Cut.Mouse.MOVE="touchmove mousemove",Cut.Mouse.END="touchend mouseup",Cut.Mouse.subscribe=function(t,i,e){function s(t,s){u(t,i),DEBUG&&console.log("Mouse Start: "+t.type+" "+_),!e&&i.addEventListener(s,r),t.preventDefault(),h(t.type,t),f.x=_.x,f.y=_.y,f.state=1}function n(t,s){try{DEBUG&&console.log("Mouse End: "+t.type+" "+_),!e&&i.removeEventListener(s,r),t.preventDefault(),h(t.type,t),1==f.state&&f.x==_.x&&f.y==_.y?(DEBUG&&console.log("Mouse Click [+]"),h("click",t),f.state=2):f.state=0}catch(n){console&&console.log(n)}}function r(t){try{u(t,i),t.preventDefault(),h(t.type,t)}catch(e){console&&console.log(e)}}function o(t){try{u(t,i),DEBUG&&console.log("Mouse Click: "+t.type+" "+_),t.preventDefault(),2!=f.state?h(t.type,t):DEBUG&&console.log("Mouse Click [-]")}catch(e){console&&console.log(e)}}function h(i,e){_.type=i,_.event=e,c.x=_.x,c.y=_.y,t.visit(a)}function u(i,e){var s=!1;if(i.touches){if(!i.touches.length)return;s=!0,_.x=i.touches[0].pageX,_.y=i.touches[0].pageY}else _.x=i.clientX,_.y=i.clientY,document.body.scrollLeft||document.body.scrollTop||document.documentElement&&(_.x+=document.documentElement.scrollLeft,_.y+=document.documentElement.scrollTop);_.x-=e.clientLeft||0,_.y-=e.clientTop||0;for(var n=e;n;)_.x-=n.offsetLeft||0,_.y-=n.offsetTop||0,s||(_.x+=n.scrollLeft||0,_.y+=n.scrollTop||0),n=n.offsetParent;_.x*=t._ratio||1,_.y*=t._ratio||1}i=i||document,i.addEventListener("click",o),"ontouchstart"in window?(i.addEventListener("touchstart",function(t){s(t,"touchmove")}),i.addEventListener("touchend",function(t){n(t,"touchmove")}),e&&i.addEventListener("touchmove",r)):(i.addEventListener("mousedown",function(t){s(t,"mousemove")}),i.addEventListener("mouseup",function(t){n(t,"mousemove")}),e&&i.addEventListener("mousemove",r));var a=null,_={x:0,y:0,toString:function(){return(0|this.x)+"x"+(0|this.y)}},c={x:0,y:0,toString:function(){return _+" / "+(0|this.x)+"x"+(0|this.y)}},f={x:0,y:0,state:0};a={reverse:!0,visible:!0,start:function(t){return t._listens(_.type)?void 0:!0},end:function(i){var e=i.listeners(_.type);if(e){if(i.matrix().reverse().map(_,c),i===t||i.attr("spy"));else if(c.x<0||c.x>i._pin._width||c.y<0||c.y>i._pin._height)return;c.raw=_.event;for(var s=0;s .column, + .row.collapse > .columns { + padding-left: 0; + padding-right: 0; } + .row.collapse .row { + margin-left: 0; + margin-right: 0; } + .row .row { + width: auto; + margin-left: -0.9375em; + margin-right: -0.9375em; + margin-top: 0; + margin-bottom: 0; + max-width: none; } + .row .row:before, .row .row:after { + content: " "; + display: table; } + .row .row:after { + clear: both; } + .row .row.collapse { + width: auto; + margin: 0; + max-width: none; } + .row .row.collapse:before, .row .row.collapse:after { + content: " "; + display: table; } + .row .row.collapse:after { + clear: both; } + +.column, +.columns { + padding-left: 0.9375em; + padding-right: 0.9375em; + width: 100%; + float: left; } + +[class*="column"] + [class*="column"]:last-child { + float: right; } + +[class*="column"] + [class*="column"].end { + float: left; } + +@media only screen { + .small-push-0 { + position: relative; + left: 0%; + right: auto; } + + .small-pull-0 { + position: relative; + right: 0%; + left: auto; } + + .small-push-1 { + position: relative; + left: 8.33333%; + right: auto; } + + .small-pull-1 { + position: relative; + right: 8.33333%; + left: auto; } + + .small-push-2 { + position: relative; + left: 16.66667%; + right: auto; } + + .small-pull-2 { + position: relative; + right: 16.66667%; + left: auto; } + + .small-push-3 { + position: relative; + left: 25%; + right: auto; } + + .small-pull-3 { + position: relative; + right: 25%; + left: auto; } + + .small-push-4 { + position: relative; + left: 33.33333%; + right: auto; } + + .small-pull-4 { + position: relative; + right: 33.33333%; + left: auto; } + + .small-push-5 { + position: relative; + left: 41.66667%; + right: auto; } + + .small-pull-5 { + position: relative; + right: 41.66667%; + left: auto; } + + .small-push-6 { + position: relative; + left: 50%; + right: auto; } + + .small-pull-6 { + position: relative; + right: 50%; + left: auto; } + + .small-push-7 { + position: relative; + left: 58.33333%; + right: auto; } + + .small-pull-7 { + position: relative; + right: 58.33333%; + left: auto; } + + .small-push-8 { + position: relative; + left: 66.66667%; + right: auto; } + + .small-pull-8 { + position: relative; + right: 66.66667%; + left: auto; } + + .small-push-9 { + position: relative; + left: 75%; + right: auto; } + + .small-pull-9 { + position: relative; + right: 75%; + left: auto; } + + .small-push-10 { + position: relative; + left: 83.33333%; + right: auto; } + + .small-pull-10 { + position: relative; + right: 83.33333%; + left: auto; } + + .small-push-11 { + position: relative; + left: 91.66667%; + right: auto; } + + .small-pull-11 { + position: relative; + right: 91.66667%; + left: auto; } + + .column, + .columns { + position: relative; + padding-left: 0.9375em; + padding-right: 0.9375em; + float: left; } + + .small-1 { + width: 8.33333%; } + + .small-2 { + width: 16.66667%; } + + .small-3 { + width: 25%; } + + .small-4 { + width: 33.33333%; } + + .small-5 { + width: 41.66667%; } + + .small-6 { + width: 50%; } + + .small-7 { + width: 58.33333%; } + + .small-8 { + width: 66.66667%; } + + .small-9 { + width: 75%; } + + .small-10 { + width: 83.33333%; } + + .small-11 { + width: 91.66667%; } + + .small-12 { + width: 100%; } + + .small-offset-0 { + margin-left: 0% !important; } + + .small-offset-1 { + margin-left: 8.33333% !important; } + + .small-offset-2 { + margin-left: 16.66667% !important; } + + .small-offset-3 { + margin-left: 25% !important; } + + .small-offset-4 { + margin-left: 33.33333% !important; } + + .small-offset-5 { + margin-left: 41.66667% !important; } + + .small-offset-6 { + margin-left: 50% !important; } + + .small-offset-7 { + margin-left: 58.33333% !important; } + + .small-offset-8 { + margin-left: 66.66667% !important; } + + .small-offset-9 { + margin-left: 75% !important; } + + .small-offset-10 { + margin-left: 83.33333% !important; } + + .small-offset-11 { + margin-left: 91.66667% !important; } + + .small-reset-order { + margin-left: 0; + margin-right: 0; + left: auto; + right: auto; + float: left; } + + .column.small-centered, + .columns.small-centered { + margin-left: auto; + margin-right: auto; + float: none; } + + .column.small-uncentered, + .columns.small-uncentered { + margin-left: 0; + margin-right: 0; + float: left; } + + .column.small-centered:last-child, + .columns.small-centered:last-child { + float: none; } + + .column.small-uncentered:last-child, + .columns.small-uncentered:last-child { + float: left; } + + .column.small-uncentered.opposite, + .columns.small-uncentered.opposite { + float: right; } } +@media only screen and (min-width: 40.063em) { + .medium-push-0 { + position: relative; + left: 0%; + right: auto; } + + .medium-pull-0 { + position: relative; + right: 0%; + left: auto; } + + .medium-push-1 { + position: relative; + left: 8.33333%; + right: auto; } + + .medium-pull-1 { + position: relative; + right: 8.33333%; + left: auto; } + + .medium-push-2 { + position: relative; + left: 16.66667%; + right: auto; } + + .medium-pull-2 { + position: relative; + right: 16.66667%; + left: auto; } + + .medium-push-3 { + position: relative; + left: 25%; + right: auto; } + + .medium-pull-3 { + position: relative; + right: 25%; + left: auto; } + + .medium-push-4 { + position: relative; + left: 33.33333%; + right: auto; } + + .medium-pull-4 { + position: relative; + right: 33.33333%; + left: auto; } + + .medium-push-5 { + position: relative; + left: 41.66667%; + right: auto; } + + .medium-pull-5 { + position: relative; + right: 41.66667%; + left: auto; } + + .medium-push-6 { + position: relative; + left: 50%; + right: auto; } + + .medium-pull-6 { + position: relative; + right: 50%; + left: auto; } + + .medium-push-7 { + position: relative; + left: 58.33333%; + right: auto; } + + .medium-pull-7 { + position: relative; + right: 58.33333%; + left: auto; } + + .medium-push-8 { + position: relative; + left: 66.66667%; + right: auto; } + + .medium-pull-8 { + position: relative; + right: 66.66667%; + left: auto; } + + .medium-push-9 { + position: relative; + left: 75%; + right: auto; } + + .medium-pull-9 { + position: relative; + right: 75%; + left: auto; } + + .medium-push-10 { + position: relative; + left: 83.33333%; + right: auto; } + + .medium-pull-10 { + position: relative; + right: 83.33333%; + left: auto; } + + .medium-push-11 { + position: relative; + left: 91.66667%; + right: auto; } + + .medium-pull-11 { + position: relative; + right: 91.66667%; + left: auto; } + + .column, + .columns { + position: relative; + padding-left: 0.9375em; + padding-right: 0.9375em; + float: left; } + + .medium-1 { + width: 8.33333%; } + + .medium-2 { + width: 16.66667%; } + + .medium-3 { + width: 25%; } + + .medium-4 { + width: 33.33333%; } + + .medium-5 { + width: 41.66667%; } + + .medium-6 { + width: 50%; } + + .medium-7 { + width: 58.33333%; } + + .medium-8 { + width: 66.66667%; } + + .medium-9 { + width: 75%; } + + .medium-10 { + width: 83.33333%; } + + .medium-11 { + width: 91.66667%; } + + .medium-12 { + width: 100%; } + + .medium-offset-0 { + margin-left: 0% !important; } + + .medium-offset-1 { + margin-left: 8.33333% !important; } + + .medium-offset-2 { + margin-left: 16.66667% !important; } + + .medium-offset-3 { + margin-left: 25% !important; } + + .medium-offset-4 { + margin-left: 33.33333% !important; } + + .medium-offset-5 { + margin-left: 41.66667% !important; } + + .medium-offset-6 { + margin-left: 50% !important; } + + .medium-offset-7 { + margin-left: 58.33333% !important; } + + .medium-offset-8 { + margin-left: 66.66667% !important; } + + .medium-offset-9 { + margin-left: 75% !important; } + + .medium-offset-10 { + margin-left: 83.33333% !important; } + + .medium-offset-11 { + margin-left: 91.66667% !important; } + + .medium-reset-order { + margin-left: 0; + margin-right: 0; + left: auto; + right: auto; + float: left; } + + .column.medium-centered, + .columns.medium-centered { + margin-left: auto; + margin-right: auto; + float: none; } + + .column.medium-uncentered, + .columns.medium-uncentered { + margin-left: 0; + margin-right: 0; + float: left; } + + .column.medium-centered:last-child, + .columns.medium-centered:last-child { + float: none; } + + .column.medium-uncentered:last-child, + .columns.medium-uncentered:last-child { + float: left; } + + .column.medium-uncentered.opposite, + .columns.medium-uncentered.opposite { + float: right; } + + .push-0 { + position: relative; + left: 0%; + right: auto; } + + .pull-0 { + position: relative; + right: 0%; + left: auto; } + + .push-1 { + position: relative; + left: 8.33333%; + right: auto; } + + .pull-1 { + position: relative; + right: 8.33333%; + left: auto; } + + .push-2 { + position: relative; + left: 16.66667%; + right: auto; } + + .pull-2 { + position: relative; + right: 16.66667%; + left: auto; } + + .push-3 { + position: relative; + left: 25%; + right: auto; } + + .pull-3 { + position: relative; + right: 25%; + left: auto; } + + .push-4 { + position: relative; + left: 33.33333%; + right: auto; } + + .pull-4 { + position: relative; + right: 33.33333%; + left: auto; } + + .push-5 { + position: relative; + left: 41.66667%; + right: auto; } + + .pull-5 { + position: relative; + right: 41.66667%; + left: auto; } + + .push-6 { + position: relative; + left: 50%; + right: auto; } + + .pull-6 { + position: relative; + right: 50%; + left: auto; } + + .push-7 { + position: relative; + left: 58.33333%; + right: auto; } + + .pull-7 { + position: relative; + right: 58.33333%; + left: auto; } + + .push-8 { + position: relative; + left: 66.66667%; + right: auto; } + + .pull-8 { + position: relative; + right: 66.66667%; + left: auto; } + + .push-9 { + position: relative; + left: 75%; + right: auto; } + + .pull-9 { + position: relative; + right: 75%; + left: auto; } + + .push-10 { + position: relative; + left: 83.33333%; + right: auto; } + + .pull-10 { + position: relative; + right: 83.33333%; + left: auto; } + + .push-11 { + position: relative; + left: 91.66667%; + right: auto; } + + .pull-11 { + position: relative; + right: 91.66667%; + left: auto; } } +@media only screen and (min-width: 64.063em) { + .large-push-0 { + position: relative; + left: 0%; + right: auto; } + + .large-pull-0 { + position: relative; + right: 0%; + left: auto; } + + .large-push-1 { + position: relative; + left: 8.33333%; + right: auto; } + + .large-pull-1 { + position: relative; + right: 8.33333%; + left: auto; } + + .large-push-2 { + position: relative; + left: 16.66667%; + right: auto; } + + .large-pull-2 { + position: relative; + right: 16.66667%; + left: auto; } + + .large-push-3 { + position: relative; + left: 25%; + right: auto; } + + .large-pull-3 { + position: relative; + right: 25%; + left: auto; } + + .large-push-4 { + position: relative; + left: 33.33333%; + right: auto; } + + .large-pull-4 { + position: relative; + right: 33.33333%; + left: auto; } + + .large-push-5 { + position: relative; + left: 41.66667%; + right: auto; } + + .large-pull-5 { + position: relative; + right: 41.66667%; + left: auto; } + + .large-push-6 { + position: relative; + left: 50%; + right: auto; } + + .large-pull-6 { + position: relative; + right: 50%; + left: auto; } + + .large-push-7 { + position: relative; + left: 58.33333%; + right: auto; } + + .large-pull-7 { + position: relative; + right: 58.33333%; + left: auto; } + + .large-push-8 { + position: relative; + left: 66.66667%; + right: auto; } + + .large-pull-8 { + position: relative; + right: 66.66667%; + left: auto; } + + .large-push-9 { + position: relative; + left: 75%; + right: auto; } + + .large-pull-9 { + position: relative; + right: 75%; + left: auto; } + + .large-push-10 { + position: relative; + left: 83.33333%; + right: auto; } + + .large-pull-10 { + position: relative; + right: 83.33333%; + left: auto; } + + .large-push-11 { + position: relative; + left: 91.66667%; + right: auto; } + + .large-pull-11 { + position: relative; + right: 91.66667%; + left: auto; } + + .column, + .columns { + position: relative; + padding-left: 0.9375em; + padding-right: 0.9375em; + float: left; } + + .large-1 { + width: 8.33333%; } + + .large-2 { + width: 16.66667%; } + + .large-3 { + width: 25%; } + + .large-4 { + width: 33.33333%; } + + .large-5 { + width: 41.66667%; } + + .large-6 { + width: 50%; } + + .large-7 { + width: 58.33333%; } + + .large-8 { + width: 66.66667%; } + + .large-9 { + width: 75%; } + + .large-10 { + width: 83.33333%; } + + .large-11 { + width: 91.66667%; } + + .large-12 { + width: 100%; } + + .large-offset-0 { + margin-left: 0% !important; } + + .large-offset-1 { + margin-left: 8.33333% !important; } + + .large-offset-2 { + margin-left: 16.66667% !important; } + + .large-offset-3 { + margin-left: 25% !important; } + + .large-offset-4 { + margin-left: 33.33333% !important; } + + .large-offset-5 { + margin-left: 41.66667% !important; } + + .large-offset-6 { + margin-left: 50% !important; } + + .large-offset-7 { + margin-left: 58.33333% !important; } + + .large-offset-8 { + margin-left: 66.66667% !important; } + + .large-offset-9 { + margin-left: 75% !important; } + + .large-offset-10 { + margin-left: 83.33333% !important; } + + .large-offset-11 { + margin-left: 91.66667% !important; } + + .large-reset-order { + margin-left: 0; + margin-right: 0; + left: auto; + right: auto; + float: left; } + + .column.large-centered, + .columns.large-centered { + margin-left: auto; + margin-right: auto; + float: none; } + + .column.large-uncentered, + .columns.large-uncentered { + margin-left: 0; + margin-right: 0; + float: left; } + + .column.large-centered:last-child, + .columns.large-centered:last-child { + float: none; } + + .column.large-uncentered:last-child, + .columns.large-uncentered:last-child { + float: left; } + + .column.large-uncentered.opposite, + .columns.large-uncentered.opposite { + float: right; } + + .push-0 { + position: relative; + left: 0%; + right: auto; } + + .pull-0 { + position: relative; + right: 0%; + left: auto; } + + .push-1 { + position: relative; + left: 8.33333%; + right: auto; } + + .pull-1 { + position: relative; + right: 8.33333%; + left: auto; } + + .push-2 { + position: relative; + left: 16.66667%; + right: auto; } + + .pull-2 { + position: relative; + right: 16.66667%; + left: auto; } + + .push-3 { + position: relative; + left: 25%; + right: auto; } + + .pull-3 { + position: relative; + right: 25%; + left: auto; } + + .push-4 { + position: relative; + left: 33.33333%; + right: auto; } + + .pull-4 { + position: relative; + right: 33.33333%; + left: auto; } + + .push-5 { + position: relative; + left: 41.66667%; + right: auto; } + + .pull-5 { + position: relative; + right: 41.66667%; + left: auto; } + + .push-6 { + position: relative; + left: 50%; + right: auto; } + + .pull-6 { + position: relative; + right: 50%; + left: auto; } + + .push-7 { + position: relative; + left: 58.33333%; + right: auto; } + + .pull-7 { + position: relative; + right: 58.33333%; + left: auto; } + + .push-8 { + position: relative; + left: 66.66667%; + right: auto; } + + .pull-8 { + position: relative; + right: 66.66667%; + left: auto; } + + .push-9 { + position: relative; + left: 75%; + right: auto; } + + .pull-9 { + position: relative; + right: 75%; + left: auto; } + + .push-10 { + position: relative; + left: 83.33333%; + right: auto; } + + .pull-10 { + position: relative; + right: 83.33333%; + left: auto; } + + .push-11 { + position: relative; + left: 91.66667%; + right: auto; } + + .pull-11 { + position: relative; + right: 91.66667%; + left: auto; } } +button, .button { + border-style: solid; + border-width: 0px; + cursor: pointer; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; + line-height: normal; + margin: 0 0 1.25rem; + position: relative; + text-decoration: none; + text-align: center; + -webkit-appearance: none; + -webkit-border-radius: 0; + display: inline-block; + padding-top: 1rem; + padding-right: 2rem; + padding-bottom: 1.0625rem; + padding-left: 2rem; + font-size: 1rem; + background-color: #2ba6cb; + border-color: #2285a2; + color: white; + transition: background-color 300ms ease-out; } + button:hover, button:focus, .button:hover, .button:focus { + background-color: #2285a2; } + button:hover, button:focus, .button:hover, .button:focus { + color: white; } + button.secondary, .button.secondary { + background-color: #e9e9e9; + border-color: #bababa; + color: #333333; } + button.secondary:hover, button.secondary:focus, .button.secondary:hover, .button.secondary:focus { + background-color: #bababa; } + button.secondary:hover, button.secondary:focus, .button.secondary:hover, .button.secondary:focus { + color: #333333; } + button.success, .button.success { + background-color: #5da423; + border-color: #4a831c; + color: white; } + button.success:hover, button.success:focus, .button.success:hover, .button.success:focus { + background-color: #4a831c; } + button.success:hover, button.success:focus, .button.success:hover, .button.success:focus { + color: white; } + button.alert, .button.alert { + background-color: #c60f13; + border-color: #9e0c0f; + color: white; } + button.alert:hover, button.alert:focus, .button.alert:hover, .button.alert:focus { + background-color: #9e0c0f; } + button.alert:hover, button.alert:focus, .button.alert:hover, .button.alert:focus { + color: white; } + button.warning, .button.warning { + background-color: #f08a24; + border-color: #cf6e0e; + color: white; } + button.warning:hover, button.warning:focus, .button.warning:hover, .button.warning:focus { + background-color: #cf6e0e; } + button.warning:hover, button.warning:focus, .button.warning:hover, .button.warning:focus { + color: white; } + button.info, .button.info { + background-color: #a0d3e8; + border-color: #61b6d9; + color: #333333; } + button.info:hover, button.info:focus, .button.info:hover, .button.info:focus { + background-color: #61b6d9; } + button.info:hover, button.info:focus, .button.info:hover, .button.info:focus { + color: white; } + button.large, .button.large { + padding-top: 1.125rem; + padding-right: 2.25rem; + padding-bottom: 1.1875rem; + padding-left: 2.25rem; + font-size: 1.25rem; } + button.small, .button.small { + padding-top: 0.875rem; + padding-right: 1.75rem; + padding-bottom: 0.9375rem; + padding-left: 1.75rem; + font-size: 0.8125rem; } + button.tiny, .button.tiny { + padding-top: 0.625rem; + padding-right: 1.25rem; + padding-bottom: 0.6875rem; + padding-left: 1.25rem; + font-size: 0.6875rem; } + button.expand, .button.expand { + padding-right: 0; + padding-left: 0; + width: 100%; } + button.left-align, .button.left-align { + text-align: left; + text-indent: 0.75rem; } + button.right-align, .button.right-align { + text-align: right; + padding-right: 0.75rem; } + button.radius, .button.radius { + border-radius: 3px; } + button.round, .button.round { + border-radius: 1000px; } + button.disabled, button[disabled], .button.disabled, .button[disabled] { + background-color: #2ba6cb; + border-color: #2285a2; + color: white; + cursor: default; + opacity: 0.7; + box-shadow: none; } + button.disabled:hover, button.disabled:focus, button[disabled]:hover, button[disabled]:focus, .button.disabled:hover, .button.disabled:focus, .button[disabled]:hover, .button[disabled]:focus { + background-color: #2285a2; } + button.disabled:hover, button.disabled:focus, button[disabled]:hover, button[disabled]:focus, .button.disabled:hover, .button.disabled:focus, .button[disabled]:hover, .button[disabled]:focus { + color: white; } + button.disabled:hover, button.disabled:focus, button[disabled]:hover, button[disabled]:focus, .button.disabled:hover, .button.disabled:focus, .button[disabled]:hover, .button[disabled]:focus { + background-color: #2ba6cb; } + button.disabled.secondary, button[disabled].secondary, .button.disabled.secondary, .button[disabled].secondary { + background-color: #e9e9e9; + border-color: #bababa; + color: #333333; + cursor: default; + opacity: 0.7; + box-shadow: none; } + button.disabled.secondary:hover, button.disabled.secondary:focus, button[disabled].secondary:hover, button[disabled].secondary:focus, .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary:hover, .button[disabled].secondary:focus { + background-color: #bababa; } + button.disabled.secondary:hover, button.disabled.secondary:focus, button[disabled].secondary:hover, button[disabled].secondary:focus, .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary:hover, .button[disabled].secondary:focus { + color: #333333; } + button.disabled.secondary:hover, button.disabled.secondary:focus, button[disabled].secondary:hover, button[disabled].secondary:focus, .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary:hover, .button[disabled].secondary:focus { + background-color: #e9e9e9; } + button.disabled.success, button[disabled].success, .button.disabled.success, .button[disabled].success { + background-color: #5da423; + border-color: #4a831c; + color: white; + cursor: default; + opacity: 0.7; + box-shadow: none; } + button.disabled.success:hover, button.disabled.success:focus, button[disabled].success:hover, button[disabled].success:focus, .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success:hover, .button[disabled].success:focus { + background-color: #4a831c; } + button.disabled.success:hover, button.disabled.success:focus, button[disabled].success:hover, button[disabled].success:focus, .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success:hover, .button[disabled].success:focus { + color: white; } + button.disabled.success:hover, button.disabled.success:focus, button[disabled].success:hover, button[disabled].success:focus, .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success:hover, .button[disabled].success:focus { + background-color: #5da423; } + button.disabled.alert, button[disabled].alert, .button.disabled.alert, .button[disabled].alert { + background-color: #c60f13; + border-color: #9e0c0f; + color: white; + cursor: default; + opacity: 0.7; + box-shadow: none; } + button.disabled.alert:hover, button.disabled.alert:focus, button[disabled].alert:hover, button[disabled].alert:focus, .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert:hover, .button[disabled].alert:focus { + background-color: #9e0c0f; } + button.disabled.alert:hover, button.disabled.alert:focus, button[disabled].alert:hover, button[disabled].alert:focus, .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert:hover, .button[disabled].alert:focus { + color: white; } + button.disabled.alert:hover, button.disabled.alert:focus, button[disabled].alert:hover, button[disabled].alert:focus, .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert:hover, .button[disabled].alert:focus { + background-color: #c60f13; } + button.disabled.warning, button[disabled].warning, .button.disabled.warning, .button[disabled].warning { + background-color: #f08a24; + border-color: #cf6e0e; + color: white; + cursor: default; + opacity: 0.7; + box-shadow: none; } + button.disabled.warning:hover, button.disabled.warning:focus, button[disabled].warning:hover, button[disabled].warning:focus, .button.disabled.warning:hover, .button.disabled.warning:focus, .button[disabled].warning:hover, .button[disabled].warning:focus { + background-color: #cf6e0e; } + button.disabled.warning:hover, button.disabled.warning:focus, button[disabled].warning:hover, button[disabled].warning:focus, .button.disabled.warning:hover, .button.disabled.warning:focus, .button[disabled].warning:hover, .button[disabled].warning:focus { + color: white; } + button.disabled.warning:hover, button.disabled.warning:focus, button[disabled].warning:hover, button[disabled].warning:focus, .button.disabled.warning:hover, .button.disabled.warning:focus, .button[disabled].warning:hover, .button[disabled].warning:focus { + background-color: #f08a24; } + button.disabled.info, button[disabled].info, .button.disabled.info, .button[disabled].info { + background-color: #a0d3e8; + border-color: #61b6d9; + color: #333333; + cursor: default; + opacity: 0.7; + box-shadow: none; } + button.disabled.info:hover, button.disabled.info:focus, button[disabled].info:hover, button[disabled].info:focus, .button.disabled.info:hover, .button.disabled.info:focus, .button[disabled].info:hover, .button[disabled].info:focus { + background-color: #61b6d9; } + button.disabled.info:hover, button.disabled.info:focus, button[disabled].info:hover, button[disabled].info:focus, .button.disabled.info:hover, .button.disabled.info:focus, .button[disabled].info:hover, .button[disabled].info:focus { + color: white; } + button.disabled.info:hover, button.disabled.info:focus, button[disabled].info:hover, button[disabled].info:focus, .button.disabled.info:hover, .button.disabled.info:focus, .button[disabled].info:hover, .button[disabled].info:focus { + background-color: #a0d3e8; } + +button::-moz-focus-inner { + border: 0; + padding: 0; } + +@media only screen and (min-width: 40.063em) { + button, .button { + display: inline-block; } } +.button-group { + list-style: none; + margin: 0; + left: 0; } + .button-group:before, .button-group:after { + content: " "; + display: table; } + .button-group:after { + clear: both; } + .button-group > li { + margin: 0 -2px; + float: left; + display: inline-block; } + .button-group > li > button, .button-group > li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group > li:first-child button, .button-group > li:first-child .button { + border-left: 0; } + .button-group.stack > li { + margin: 0 -2px; + float: left; + display: inline-block; + display: block; + margin: 0; + float: none; } + .button-group.stack > li > button, .button-group.stack > li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.stack > li:first-child button, .button-group.stack > li:first-child .button { + border-left: 0; } + .button-group.stack > li > button, .button-group.stack > li .button { + border-top: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + border-left-width: 0px; + margin: 0; + display: block; } + .button-group.stack > li:first-child button, .button-group.stack > li:first-child .button { + border-top: 0; } + .button-group.stack-for-small > li { + margin: 0 -2px; + float: left; + display: inline-block; } + .button-group.stack-for-small > li > button, .button-group.stack-for-small > li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.stack-for-small > li:first-child button, .button-group.stack-for-small > li:first-child .button { + border-left: 0; } + @media only screen and (max-width: 40em) { + .button-group.stack-for-small > li { + margin: 0 -2px; + float: left; + display: inline-block; + display: block; + margin: 0; } + .button-group.stack-for-small > li > button, .button-group.stack-for-small > li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.stack-for-small > li:first-child button, .button-group.stack-for-small > li:first-child .button { + border-left: 0; } + .button-group.stack-for-small > li > button, .button-group.stack-for-small > li .button { + border-top: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + border-left-width: 0px; + margin: 0; + display: block; } + .button-group.stack-for-small > li:first-child button, .button-group.stack-for-small > li:first-child .button { + border-top: 0; } } + .button-group.radius > * { + margin: 0 -2px; + float: left; + display: inline-block; } + .button-group.radius > * > button, .button-group.radius > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.radius > *:first-child button, .button-group.radius > *:first-child .button { + border-left: 0; } + .button-group.radius > *, .button-group.radius > * > a, .button-group.radius > * > button, .button-group.radius > * > .button { + border-radius: 0; } + .button-group.radius > *:first-child, .button-group.radius > *:first-child > a, .button-group.radius > *:first-child > button, .button-group.radius > *:first-child > .button { + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; } + .button-group.radius > *:last-child, .button-group.radius > *:last-child > a, .button-group.radius > *:last-child > button, .button-group.radius > *:last-child > .button { + -webkit-border-bottom-right-radius: 3px; + -webkit-border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; } + .button-group.radius.stack > * { + margin: 0 -2px; + float: left; + display: inline-block; + display: block; + margin: 0; } + .button-group.radius.stack > * > button, .button-group.radius.stack > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.radius.stack > *:first-child button, .button-group.radius.stack > *:first-child .button { + border-left: 0; } + .button-group.radius.stack > * > button, .button-group.radius.stack > * .button { + border-top: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + border-left-width: 0px; + margin: 0; + display: block; } + .button-group.radius.stack > *:first-child button, .button-group.radius.stack > *:first-child .button { + border-top: 0; } + .button-group.radius.stack > *, .button-group.radius.stack > * > a, .button-group.radius.stack > * > button, .button-group.radius.stack > * > .button { + border-radius: 0; } + .button-group.radius.stack > *:first-child, .button-group.radius.stack > *:first-child > a, .button-group.radius.stack > *:first-child > button, .button-group.radius.stack > *:first-child > .button { + -webkit-top-left-radius: 3px; + -webkit-top-right-radius: 3px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; } + .button-group.radius.stack > *:last-child, .button-group.radius.stack > *:last-child > a, .button-group.radius.stack > *:last-child > button, .button-group.radius.stack > *:last-child > .button { + -webkit-bottom-left-radius: 3px; + -webkit-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; } + @media only screen and (min-width: 40.063em) { + .button-group.radius.stack-for-small > * { + margin: 0 -2px; + float: left; + display: inline-block; } + .button-group.radius.stack-for-small > * > button, .button-group.radius.stack-for-small > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.radius.stack-for-small > *:first-child button, .button-group.radius.stack-for-small > *:first-child .button { + border-left: 0; } + .button-group.radius.stack-for-small > *, .button-group.radius.stack-for-small > * > a, .button-group.radius.stack-for-small > * > button, .button-group.radius.stack-for-small > * > .button { + border-radius: 0; } + .button-group.radius.stack-for-small > *:first-child, .button-group.radius.stack-for-small > *:first-child > a, .button-group.radius.stack-for-small > *:first-child > button, .button-group.radius.stack-for-small > *:first-child > .button { + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; } + .button-group.radius.stack-for-small > *:last-child, .button-group.radius.stack-for-small > *:last-child > a, .button-group.radius.stack-for-small > *:last-child > button, .button-group.radius.stack-for-small > *:last-child > .button { + -webkit-border-bottom-right-radius: 3px; + -webkit-border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; } } + @media only screen and (max-width: 40em) { + .button-group.radius.stack-for-small > * { + margin: 0 -2px; + float: left; + display: inline-block; + display: block; + margin: 0; } + .button-group.radius.stack-for-small > * > button, .button-group.radius.stack-for-small > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.radius.stack-for-small > *:first-child button, .button-group.radius.stack-for-small > *:first-child .button { + border-left: 0; } + .button-group.radius.stack-for-small > * > button, .button-group.radius.stack-for-small > * .button { + border-top: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + border-left-width: 0px; + margin: 0; + display: block; } + .button-group.radius.stack-for-small > *:first-child button, .button-group.radius.stack-for-small > *:first-child .button { + border-top: 0; } + .button-group.radius.stack-for-small > *, .button-group.radius.stack-for-small > * > a, .button-group.radius.stack-for-small > * > button, .button-group.radius.stack-for-small > * > .button { + border-radius: 0; } + .button-group.radius.stack-for-small > *:first-child, .button-group.radius.stack-for-small > *:first-child > a, .button-group.radius.stack-for-small > *:first-child > button, .button-group.radius.stack-for-small > *:first-child > .button { + -webkit-top-left-radius: 3px; + -webkit-top-right-radius: 3px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; } + .button-group.radius.stack-for-small > *:last-child, .button-group.radius.stack-for-small > *:last-child > a, .button-group.radius.stack-for-small > *:last-child > button, .button-group.radius.stack-for-small > *:last-child > .button { + -webkit-bottom-left-radius: 3px; + -webkit-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; } } + .button-group.round > * { + margin: 0 -2px; + float: left; + display: inline-block; } + .button-group.round > * > button, .button-group.round > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.round > *:first-child button, .button-group.round > *:first-child .button { + border-left: 0; } + .button-group.round > *, .button-group.round > * > a, .button-group.round > * > button, .button-group.round > * > .button { + border-radius: 0; } + .button-group.round > *:first-child, .button-group.round > *:first-child > a, .button-group.round > *:first-child > button, .button-group.round > *:first-child > .button { + -webkit-border-bottom-left-radius: 1000px; + -webkit-border-top-left-radius: 1000px; + border-bottom-left-radius: 1000px; + border-top-left-radius: 1000px; } + .button-group.round > *:last-child, .button-group.round > *:last-child > a, .button-group.round > *:last-child > button, .button-group.round > *:last-child > .button { + -webkit-border-bottom-right-radius: 1000px; + -webkit-border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; } + .button-group.round.stack > * { + margin: 0 -2px; + float: left; + display: inline-block; + display: block; + margin: 0; } + .button-group.round.stack > * > button, .button-group.round.stack > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.round.stack > *:first-child button, .button-group.round.stack > *:first-child .button { + border-left: 0; } + .button-group.round.stack > * > button, .button-group.round.stack > * .button { + border-top: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + border-left-width: 0px; + margin: 0; + display: block; } + .button-group.round.stack > *:first-child button, .button-group.round.stack > *:first-child .button { + border-top: 0; } + .button-group.round.stack > *, .button-group.round.stack > * > a, .button-group.round.stack > * > button, .button-group.round.stack > * > .button { + border-radius: 0; } + .button-group.round.stack > *:first-child, .button-group.round.stack > *:first-child > a, .button-group.round.stack > *:first-child > button, .button-group.round.stack > *:first-child > .button { + -webkit-top-left-radius: 1rem; + -webkit-top-right-radius: 1rem; + border-top-left-radius: 1rem; + border-top-right-radius: 1rem; } + .button-group.round.stack > *:last-child, .button-group.round.stack > *:last-child > a, .button-group.round.stack > *:last-child > button, .button-group.round.stack > *:last-child > .button { + -webkit-bottom-left-radius: 1rem; + -webkit-bottom-right-radius: 1rem; + border-bottom-left-radius: 1rem; + border-bottom-right-radius: 1rem; } + @media only screen and (min-width: 40.063em) { + .button-group.round.stack-for-small > * { + margin: 0 -2px; + float: left; + display: inline-block; } + .button-group.round.stack-for-small > * > button, .button-group.round.stack-for-small > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.round.stack-for-small > *:first-child button, .button-group.round.stack-for-small > *:first-child .button { + border-left: 0; } + .button-group.round.stack-for-small > *, .button-group.round.stack-for-small > * > a, .button-group.round.stack-for-small > * > button, .button-group.round.stack-for-small > * > .button { + border-radius: 0; } + .button-group.round.stack-for-small > *:first-child, .button-group.round.stack-for-small > *:first-child > a, .button-group.round.stack-for-small > *:first-child > button, .button-group.round.stack-for-small > *:first-child > .button { + -webkit-border-bottom-left-radius: 1000px; + -webkit-border-top-left-radius: 1000px; + border-bottom-left-radius: 1000px; + border-top-left-radius: 1000px; } + .button-group.round.stack-for-small > *:last-child, .button-group.round.stack-for-small > *:last-child > a, .button-group.round.stack-for-small > *:last-child > button, .button-group.round.stack-for-small > *:last-child > .button { + -webkit-border-bottom-right-radius: 1000px; + -webkit-border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; } } + @media only screen and (max-width: 40em) { + .button-group.round.stack-for-small > * { + margin: 0 -2px; + float: left; + display: inline-block; + display: block; + margin: 0; } + .button-group.round.stack-for-small > * > button, .button-group.round.stack-for-small > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.round.stack-for-small > *:first-child button, .button-group.round.stack-for-small > *:first-child .button { + border-left: 0; } + .button-group.round.stack-for-small > * > button, .button-group.round.stack-for-small > * .button { + border-top: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + border-left-width: 0px; + margin: 0; + display: block; } + .button-group.round.stack-for-small > *:first-child button, .button-group.round.stack-for-small > *:first-child .button { + border-top: 0; } + .button-group.round.stack-for-small > *, .button-group.round.stack-for-small > * > a, .button-group.round.stack-for-small > * > button, .button-group.round.stack-for-small > * > .button { + border-radius: 0; } + .button-group.round.stack-for-small > *:first-child, .button-group.round.stack-for-small > *:first-child > a, .button-group.round.stack-for-small > *:first-child > button, .button-group.round.stack-for-small > *:first-child > .button { + -webkit-top-left-radius: 1rem; + -webkit-top-right-radius: 1rem; + border-top-left-radius: 1rem; + border-top-right-radius: 1rem; } + .button-group.round.stack-for-small > *:last-child, .button-group.round.stack-for-small > *:last-child > a, .button-group.round.stack-for-small > *:last-child > button, .button-group.round.stack-for-small > *:last-child > .button { + -webkit-bottom-left-radius: 1rem; + -webkit-bottom-right-radius: 1rem; + border-bottom-left-radius: 1rem; + border-bottom-right-radius: 1rem; } } + .button-group.even-2 li { + margin: 0 -2px; + float: left; + display: inline-block; + width: 50%; } + .button-group.even-2 li > button, .button-group.even-2 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.even-2 li:first-child button, .button-group.even-2 li:first-child .button { + border-left: 0; } + .button-group.even-2 li button, .button-group.even-2 li .button { + width: 100%; } + .button-group.even-3 li { + margin: 0 -2px; + float: left; + display: inline-block; + width: 33.33333%; } + .button-group.even-3 li > button, .button-group.even-3 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.even-3 li:first-child button, .button-group.even-3 li:first-child .button { + border-left: 0; } + .button-group.even-3 li button, .button-group.even-3 li .button { + width: 100%; } + .button-group.even-4 li { + margin: 0 -2px; + float: left; + display: inline-block; + width: 25%; } + .button-group.even-4 li > button, .button-group.even-4 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.even-4 li:first-child button, .button-group.even-4 li:first-child .button { + border-left: 0; } + .button-group.even-4 li button, .button-group.even-4 li .button { + width: 100%; } + .button-group.even-5 li { + margin: 0 -2px; + float: left; + display: inline-block; + width: 20%; } + .button-group.even-5 li > button, .button-group.even-5 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.even-5 li:first-child button, .button-group.even-5 li:first-child .button { + border-left: 0; } + .button-group.even-5 li button, .button-group.even-5 li .button { + width: 100%; } + .button-group.even-6 li { + margin: 0 -2px; + float: left; + display: inline-block; + width: 16.66667%; } + .button-group.even-6 li > button, .button-group.even-6 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.even-6 li:first-child button, .button-group.even-6 li:first-child .button { + border-left: 0; } + .button-group.even-6 li button, .button-group.even-6 li .button { + width: 100%; } + .button-group.even-7 li { + margin: 0 -2px; + float: left; + display: inline-block; + width: 14.28571%; } + .button-group.even-7 li > button, .button-group.even-7 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.even-7 li:first-child button, .button-group.even-7 li:first-child .button { + border-left: 0; } + .button-group.even-7 li button, .button-group.even-7 li .button { + width: 100%; } + .button-group.even-8 li { + margin: 0 -2px; + float: left; + display: inline-block; + width: 12.5%; } + .button-group.even-8 li > button, .button-group.even-8 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.even-8 li:first-child button, .button-group.even-8 li:first-child .button { + border-left: 0; } + .button-group.even-8 li button, .button-group.even-8 li .button { + width: 100%; } + +.button-bar:before, .button-bar:after { + content: " "; + display: table; } +.button-bar:after { + clear: both; } +.button-bar .button-group { + float: left; + margin-right: 0.625rem; } + .button-bar .button-group div { + overflow: hidden; } + +.dropdown.button, button.dropdown { + position: relative; + padding-right: 3.5625rem; } + .dropdown.button:after, button.dropdown:after { + position: absolute; + content: ""; + width: 0; + height: 0; + display: block; + border-style: solid; + border-color: white transparent transparent transparent; + top: 50%; } + .dropdown.button:after, button.dropdown:after { + border-width: 0.375rem; + right: 1.40625rem; + margin-top: -0.15625rem; } + .dropdown.button:after, button.dropdown:after { + border-color: white transparent transparent transparent; } + .dropdown.button.tiny, button.dropdown.tiny { + padding-right: 2.625rem; } + .dropdown.button.tiny:before, button.dropdown.tiny:before { + border-width: 0.375rem; + right: 1.125rem; + margin-top: -0.125rem; } + .dropdown.button.tiny:after, button.dropdown.tiny:after { + border-color: white transparent transparent transparent; } + .dropdown.button.small, button.dropdown.small { + padding-right: 3.0625rem; } + .dropdown.button.small:after, button.dropdown.small:after { + border-width: 0.4375rem; + right: 1.3125rem; + margin-top: -0.15625rem; } + .dropdown.button.small:after, button.dropdown.small:after { + border-color: white transparent transparent transparent; } + .dropdown.button.large, button.dropdown.large { + padding-right: 3.625rem; } + .dropdown.button.large:after, button.dropdown.large:after { + border-width: 0.3125rem; + right: 1.71875rem; + margin-top: -0.15625rem; } + .dropdown.button.large:after, button.dropdown.large:after { + border-color: white transparent transparent transparent; } + .dropdown.button.secondary:after, button.dropdown.secondary:after { + border-color: #333333 transparent transparent transparent; } + +.split.button { + position: relative; + padding-right: 5.0625rem; } + .split.button span { + display: block; + height: 100%; + position: absolute; + right: 0; + top: 0; + border-left: solid 1px; } + .split.button span:after { + position: absolute; + content: ""; + width: 0; + height: 0; + display: block; + border-style: inset; + top: 50%; + left: 50%; } + .split.button span:active { + background-color: rgba(0, 0, 0, 0.1); } + .split.button span { + border-left-color: rgba(255, 255, 255, 0.5); } + .split.button span { + width: 3.09375rem; } + .split.button span:after { + border-top-style: solid; + border-width: 0.375rem; + top: 48%; + margin-left: -0.375rem; } + .split.button span:after { + border-color: white transparent transparent transparent; } + .split.button.secondary span { + border-left-color: rgba(255, 255, 255, 0.5); } + .split.button.secondary span:after { + border-color: white transparent transparent transparent; } + .split.button.alert span { + border-left-color: rgba(255, 255, 255, 0.5); } + .split.button.success span { + border-left-color: rgba(255, 255, 255, 0.5); } + .split.button.tiny { + padding-right: 3.75rem; } + .split.button.tiny span { + width: 2.25rem; } + .split.button.tiny span:after { + border-top-style: solid; + border-width: 0.375rem; + top: 48%; + margin-left: -0.375rem; } + .split.button.small { + padding-right: 4.375rem; } + .split.button.small span { + width: 2.625rem; } + .split.button.small span:after { + border-top-style: solid; + border-width: 0.4375rem; + top: 48%; + margin-left: -0.375rem; } + .split.button.large { + padding-right: 5.5rem; } + .split.button.large span { + width: 3.4375rem; } + .split.button.large span:after { + border-top-style: solid; + border-width: 0.3125rem; + top: 48%; + margin-left: -0.375rem; } + .split.button.expand { + padding-left: 2rem; } + .split.button.secondary span:after { + border-color: #333333 transparent transparent transparent; } + .split.button.radius span { + -webkit-border-bottom-right-radius: 3px; + -webkit-border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; } + .split.button.round span { + -webkit-border-bottom-right-radius: 1000px; + -webkit-border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; } + +.reveal-modal-bg { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + background: black; + background: rgba(0, 0, 0, 0.45); + z-index: 1004; + display: none; + left: 0; } + +.reveal-modal, dialog { + visibility: hidden; + display: none; + position: absolute; + z-index: 1005; + width: 100vw; + top: 0; + border-radius: 3px; + left: 0; + background-color: white; + padding: 1.25rem; + border: solid 1px #666666; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); + padding: 1.875rem; } + @media only screen and (max-width: 40em) { + .reveal-modal, dialog { + min-height: 100vh; } } + .reveal-modal .column, dialog .column, .reveal-modal .columns, dialog .columns { + min-width: 0; } + .reveal-modal > :first-child, dialog > :first-child { + margin-top: 0; } + .reveal-modal > :last-child, dialog > :last-child { + margin-bottom: 0; } + @media only screen and (min-width: 40.063em) { + .reveal-modal, dialog { + width: 80%; + max-width: 62.5em; + left: 0; + right: 0; + margin: 0 auto; } } + @media only screen and (min-width: 40.063em) { + .reveal-modal, dialog { + top: 6.25rem; } } + .reveal-modal.radius, dialog.radius { + border-radius: 3px; } + .reveal-modal.round, dialog.round { + border-radius: 1000px; } + .reveal-modal.collapse, dialog.collapse { + padding: 0; } + @media only screen and (min-width: 40.063em) { + .reveal-modal.tiny, dialog.tiny { + width: 30%; + max-width: 62.5em; + left: 0; + right: 0; + margin: 0 auto; } } + @media only screen and (min-width: 40.063em) { + .reveal-modal.small, dialog.small { + width: 40%; + max-width: 62.5em; + left: 0; + right: 0; + margin: 0 auto; } } + @media only screen and (min-width: 40.063em) { + .reveal-modal.medium, dialog.medium { + width: 60%; + max-width: 62.5em; + left: 0; + right: 0; + margin: 0 auto; } } + @media only screen and (min-width: 40.063em) { + .reveal-modal.large, dialog.large { + width: 70%; + max-width: 62.5em; + left: 0; + right: 0; + margin: 0 auto; } } + @media only screen and (min-width: 40.063em) { + .reveal-modal.xlarge, dialog.xlarge { + width: 95%; + max-width: 62.5em; + left: 0; + right: 0; + margin: 0 auto; } } + .reveal-modal.full, dialog.full { + top: 0; + left: 0; + height: 100%; + height: 100vh; + min-height: 100vh; + margin-left: 0 !important; } + @media only screen and (min-width: 40.063em) { + .reveal-modal.full, dialog.full { + width: 100vw; + max-width: 62.5em; + left: 0; + right: 0; + margin: 0 auto; } } + .reveal-modal .close-reveal-modal, dialog .close-reveal-modal { + font-size: 2.5rem; + line-height: 1; + position: absolute; + top: 0.5rem; + right: 0.6875rem; + color: #aaaaaa; + font-weight: bold; + cursor: pointer; } + +dialog { + display: none; } + dialog::backdrop, dialog + .backdrop { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + background: black; + background: rgba(0, 0, 0, 0.45); + z-index: auto; + display: none; + left: 0; } + dialog[open] { + display: block; } + +@media print { + dialog, .reveal-modal, dialog { + display: none; + background: white !important; } } +[class*="block-grid-"] { + display: block; + padding: 0; + margin: 0 -0.625rem; } + [class*="block-grid-"]:before, [class*="block-grid-"]:after { + content: " "; + display: table; } + [class*="block-grid-"]:after { + clear: both; } + [class*="block-grid-"] > li { + display: block; + height: auto; + float: left; + padding: 0 0.625rem 1.25rem; } + +@media only screen { + .small-block-grid-1 > li { + width: 100%; + list-style: none; } + .small-block-grid-1 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-1 > li:nth-of-type(1n+1) { + clear: both; } + + .small-block-grid-2 > li { + width: 50%; + list-style: none; } + .small-block-grid-2 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-2 > li:nth-of-type(2n+1) { + clear: both; } + + .small-block-grid-3 > li { + width: 33.33333%; + list-style: none; } + .small-block-grid-3 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-3 > li:nth-of-type(3n+1) { + clear: both; } + + .small-block-grid-4 > li { + width: 25%; + list-style: none; } + .small-block-grid-4 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-4 > li:nth-of-type(4n+1) { + clear: both; } + + .small-block-grid-5 > li { + width: 20%; + list-style: none; } + .small-block-grid-5 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-5 > li:nth-of-type(5n+1) { + clear: both; } + + .small-block-grid-6 > li { + width: 16.66667%; + list-style: none; } + .small-block-grid-6 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-6 > li:nth-of-type(6n+1) { + clear: both; } + + .small-block-grid-7 > li { + width: 14.28571%; + list-style: none; } + .small-block-grid-7 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-7 > li:nth-of-type(7n+1) { + clear: both; } + + .small-block-grid-8 > li { + width: 12.5%; + list-style: none; } + .small-block-grid-8 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-8 > li:nth-of-type(8n+1) { + clear: both; } + + .small-block-grid-9 > li { + width: 11.11111%; + list-style: none; } + .small-block-grid-9 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-9 > li:nth-of-type(9n+1) { + clear: both; } + + .small-block-grid-10 > li { + width: 10%; + list-style: none; } + .small-block-grid-10 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-10 > li:nth-of-type(10n+1) { + clear: both; } + + .small-block-grid-11 > li { + width: 9.09091%; + list-style: none; } + .small-block-grid-11 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-11 > li:nth-of-type(11n+1) { + clear: both; } + + .small-block-grid-12 > li { + width: 8.33333%; + list-style: none; } + .small-block-grid-12 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-12 > li:nth-of-type(12n+1) { + clear: both; } } +@media only screen and (min-width: 40.063em) { + .medium-block-grid-1 > li { + width: 100%; + list-style: none; } + .medium-block-grid-1 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-1 > li:nth-of-type(1n+1) { + clear: both; } + + .medium-block-grid-2 > li { + width: 50%; + list-style: none; } + .medium-block-grid-2 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-2 > li:nth-of-type(2n+1) { + clear: both; } + + .medium-block-grid-3 > li { + width: 33.33333%; + list-style: none; } + .medium-block-grid-3 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-3 > li:nth-of-type(3n+1) { + clear: both; } + + .medium-block-grid-4 > li { + width: 25%; + list-style: none; } + .medium-block-grid-4 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-4 > li:nth-of-type(4n+1) { + clear: both; } + + .medium-block-grid-5 > li { + width: 20%; + list-style: none; } + .medium-block-grid-5 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-5 > li:nth-of-type(5n+1) { + clear: both; } + + .medium-block-grid-6 > li { + width: 16.66667%; + list-style: none; } + .medium-block-grid-6 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-6 > li:nth-of-type(6n+1) { + clear: both; } + + .medium-block-grid-7 > li { + width: 14.28571%; + list-style: none; } + .medium-block-grid-7 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-7 > li:nth-of-type(7n+1) { + clear: both; } + + .medium-block-grid-8 > li { + width: 12.5%; + list-style: none; } + .medium-block-grid-8 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-8 > li:nth-of-type(8n+1) { + clear: both; } + + .medium-block-grid-9 > li { + width: 11.11111%; + list-style: none; } + .medium-block-grid-9 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-9 > li:nth-of-type(9n+1) { + clear: both; } + + .medium-block-grid-10 > li { + width: 10%; + list-style: none; } + .medium-block-grid-10 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-10 > li:nth-of-type(10n+1) { + clear: both; } + + .medium-block-grid-11 > li { + width: 9.09091%; + list-style: none; } + .medium-block-grid-11 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-11 > li:nth-of-type(11n+1) { + clear: both; } + + .medium-block-grid-12 > li { + width: 8.33333%; + list-style: none; } + .medium-block-grid-12 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-12 > li:nth-of-type(12n+1) { + clear: both; } } +@media only screen and (min-width: 64.063em) { + .large-block-grid-1 > li { + width: 100%; + list-style: none; } + .large-block-grid-1 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-1 > li:nth-of-type(1n+1) { + clear: both; } + + .large-block-grid-2 > li { + width: 50%; + list-style: none; } + .large-block-grid-2 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-2 > li:nth-of-type(2n+1) { + clear: both; } + + .large-block-grid-3 > li { + width: 33.33333%; + list-style: none; } + .large-block-grid-3 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-3 > li:nth-of-type(3n+1) { + clear: both; } + + .large-block-grid-4 > li { + width: 25%; + list-style: none; } + .large-block-grid-4 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-4 > li:nth-of-type(4n+1) { + clear: both; } + + .large-block-grid-5 > li { + width: 20%; + list-style: none; } + .large-block-grid-5 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-5 > li:nth-of-type(5n+1) { + clear: both; } + + .large-block-grid-6 > li { + width: 16.66667%; + list-style: none; } + .large-block-grid-6 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-6 > li:nth-of-type(6n+1) { + clear: both; } + + .large-block-grid-7 > li { + width: 14.28571%; + list-style: none; } + .large-block-grid-7 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-7 > li:nth-of-type(7n+1) { + clear: both; } + + .large-block-grid-8 > li { + width: 12.5%; + list-style: none; } + .large-block-grid-8 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-8 > li:nth-of-type(8n+1) { + clear: both; } + + .large-block-grid-9 > li { + width: 11.11111%; + list-style: none; } + .large-block-grid-9 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-9 > li:nth-of-type(9n+1) { + clear: both; } + + .large-block-grid-10 > li { + width: 10%; + list-style: none; } + .large-block-grid-10 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-10 > li:nth-of-type(10n+1) { + clear: both; } + + .large-block-grid-11 > li { + width: 9.09091%; + list-style: none; } + .large-block-grid-11 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-11 > li:nth-of-type(11n+1) { + clear: both; } + + .large-block-grid-12 > li { + width: 8.33333%; + list-style: none; } + .large-block-grid-12 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-12 > li:nth-of-type(12n+1) { + clear: both; } } diff --git a/ajax/libs/foundation-essential/5.4.5/css/foundation.min.css b/ajax/libs/foundation-essential/5.4.5/css/foundation.min.css new file mode 100644 index 000000000..2bc2a4d35 --- /dev/null +++ b/ajax/libs/foundation-essential/5.4.5/css/foundation.min.css @@ -0,0 +1 @@ +meta.foundation-version{font-family:"/5.4.5/"}meta.foundation-mq-small{font-family:"/only screen/";width:0em}meta.foundation-mq-medium{font-family:"/only screen and (min-width:40.063em)/";width:40.063em}meta.foundation-mq-large{font-family:"/only screen and (min-width:64.063em)/";width:64.063em}meta.foundation-mq-xlarge{font-family:"/only screen and (min-width:90.063em)/";width:90.063em}meta.foundation-mq-xxlarge{font-family:"/only screen and (min-width:120.063em)/";width:120.063em}meta.foundation-data-attribute-namespace{font-family:false}html,body{height:100%}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html,body{font-size:100%}body{background:#fff;color:#222;padding:0;margin:0;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal;font-style:normal;line-height:1.5;position:relative;cursor:auto}a:hover{cursor:pointer}img{max-width:100%;height:auto}img{-ms-interpolation-mode:bicubic}#map_canvas img,#map_canvas embed,#map_canvas object,.map_canvas img,.map_canvas embed,.map_canvas object{max-width:none !important}.left{float:left !important}.right{float:right !important}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.hide{display:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img{display:inline-block;vertical-align:middle}textarea{height:auto;min-height:50px}select{width:100%}.row{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.row.collapse>.column,.row.collapse>.columns{padding-left:0;padding-right:0}.row.collapse .row{margin-left:0;margin-right:0}.row .row{width:auto;margin-left:-0.9375em;margin-right:-0.9375em;margin-top:0;margin-bottom:0;max-width:none}.row .row:before,.row .row:after{content:" ";display:table}.row .row:after{clear:both}.row .row.collapse{width:auto;margin:0;max-width:none}.row .row.collapse:before,.row .row.collapse:after{content:" ";display:table}.row .row.collapse:after{clear:both}.column,.columns{padding-left:0.9375em;padding-right:0.9375em;width:100%;float:left}[class*="column"]+[class*="column"]:last-child{float:right}[class*="column"]+[class*="column"].end{float:left}@media only screen{.small-push-0{position:relative;left:0%;right:auto}.small-pull-0{position:relative;right:0%;left:auto}.small-push-1{position:relative;left:8.33333%;right:auto}.small-pull-1{position:relative;right:8.33333%;left:auto}.small-push-2{position:relative;left:16.66667%;right:auto}.small-pull-2{position:relative;right:16.66667%;left:auto}.small-push-3{position:relative;left:25%;right:auto}.small-pull-3{position:relative;right:25%;left:auto}.small-push-4{position:relative;left:33.33333%;right:auto}.small-pull-4{position:relative;right:33.33333%;left:auto}.small-push-5{position:relative;left:41.66667%;right:auto}.small-pull-5{position:relative;right:41.66667%;left:auto}.small-push-6{position:relative;left:50%;right:auto}.small-pull-6{position:relative;right:50%;left:auto}.small-push-7{position:relative;left:58.33333%;right:auto}.small-pull-7{position:relative;right:58.33333%;left:auto}.small-push-8{position:relative;left:66.66667%;right:auto}.small-pull-8{position:relative;right:66.66667%;left:auto}.small-push-9{position:relative;left:75%;right:auto}.small-pull-9{position:relative;right:75%;left:auto}.small-push-10{position:relative;left:83.33333%;right:auto}.small-pull-10{position:relative;right:83.33333%;left:auto}.small-push-11{position:relative;left:91.66667%;right:auto}.small-pull-11{position:relative;right:91.66667%;left:auto}.column,.columns{position:relative;padding-left:0.9375em;padding-right:0.9375em;float:left}.small-1{width:8.33333%}.small-2{width:16.66667%}.small-3{width:25%}.small-4{width:33.33333%}.small-5{width:41.66667%}.small-6{width:50%}.small-7{width:58.33333%}.small-8{width:66.66667%}.small-9{width:75%}.small-10{width:83.33333%}.small-11{width:91.66667%}.small-12{width:100%}.small-offset-0{margin-left:0% !important}.small-offset-1{margin-left:8.33333% !important}.small-offset-2{margin-left:16.66667% !important}.small-offset-3{margin-left:25% !important}.small-offset-4{margin-left:33.33333% !important}.small-offset-5{margin-left:41.66667% !important}.small-offset-6{margin-left:50% !important}.small-offset-7{margin-left:58.33333% !important}.small-offset-8{margin-left:66.66667% !important}.small-offset-9{margin-left:75% !important}.small-offset-10{margin-left:83.33333% !important}.small-offset-11{margin-left:91.66667% !important}.small-reset-order{margin-left:0;margin-right:0;left:auto;right:auto;float:left}.column.small-centered,.columns.small-centered{margin-left:auto;margin-right:auto;float:none}.column.small-uncentered,.columns.small-uncentered{margin-left:0;margin-right:0;float:left}.column.small-centered:last-child,.columns.small-centered:last-child{float:none}.column.small-uncentered:last-child,.columns.small-uncentered:last-child{float:left}.column.small-uncentered.opposite,.columns.small-uncentered.opposite{float:right}}@media only screen and (min-width: 40.063em){.medium-push-0{position:relative;left:0%;right:auto}.medium-pull-0{position:relative;right:0%;left:auto}.medium-push-1{position:relative;left:8.33333%;right:auto}.medium-pull-1{position:relative;right:8.33333%;left:auto}.medium-push-2{position:relative;left:16.66667%;right:auto}.medium-pull-2{position:relative;right:16.66667%;left:auto}.medium-push-3{position:relative;left:25%;right:auto}.medium-pull-3{position:relative;right:25%;left:auto}.medium-push-4{position:relative;left:33.33333%;right:auto}.medium-pull-4{position:relative;right:33.33333%;left:auto}.medium-push-5{position:relative;left:41.66667%;right:auto}.medium-pull-5{position:relative;right:41.66667%;left:auto}.medium-push-6{position:relative;left:50%;right:auto}.medium-pull-6{position:relative;right:50%;left:auto}.medium-push-7{position:relative;left:58.33333%;right:auto}.medium-pull-7{position:relative;right:58.33333%;left:auto}.medium-push-8{position:relative;left:66.66667%;right:auto}.medium-pull-8{position:relative;right:66.66667%;left:auto}.medium-push-9{position:relative;left:75%;right:auto}.medium-pull-9{position:relative;right:75%;left:auto}.medium-push-10{position:relative;left:83.33333%;right:auto}.medium-pull-10{position:relative;right:83.33333%;left:auto}.medium-push-11{position:relative;left:91.66667%;right:auto}.medium-pull-11{position:relative;right:91.66667%;left:auto}.column,.columns{position:relative;padding-left:0.9375em;padding-right:0.9375em;float:left}.medium-1{width:8.33333%}.medium-2{width:16.66667%}.medium-3{width:25%}.medium-4{width:33.33333%}.medium-5{width:41.66667%}.medium-6{width:50%}.medium-7{width:58.33333%}.medium-8{width:66.66667%}.medium-9{width:75%}.medium-10{width:83.33333%}.medium-11{width:91.66667%}.medium-12{width:100%}.medium-offset-0{margin-left:0% !important}.medium-offset-1{margin-left:8.33333% !important}.medium-offset-2{margin-left:16.66667% !important}.medium-offset-3{margin-left:25% !important}.medium-offset-4{margin-left:33.33333% !important}.medium-offset-5{margin-left:41.66667% !important}.medium-offset-6{margin-left:50% !important}.medium-offset-7{margin-left:58.33333% !important}.medium-offset-8{margin-left:66.66667% !important}.medium-offset-9{margin-left:75% !important}.medium-offset-10{margin-left:83.33333% !important}.medium-offset-11{margin-left:91.66667% !important}.medium-reset-order{margin-left:0;margin-right:0;left:auto;right:auto;float:left}.column.medium-centered,.columns.medium-centered{margin-left:auto;margin-right:auto;float:none}.column.medium-uncentered,.columns.medium-uncentered{margin-left:0;margin-right:0;float:left}.column.medium-centered:last-child,.columns.medium-centered:last-child{float:none}.column.medium-uncentered:last-child,.columns.medium-uncentered:last-child{float:left}.column.medium-uncentered.opposite,.columns.medium-uncentered.opposite{float:right}.push-0{position:relative;left:0%;right:auto}.pull-0{position:relative;right:0%;left:auto}.push-1{position:relative;left:8.33333%;right:auto}.pull-1{position:relative;right:8.33333%;left:auto}.push-2{position:relative;left:16.66667%;right:auto}.pull-2{position:relative;right:16.66667%;left:auto}.push-3{position:relative;left:25%;right:auto}.pull-3{position:relative;right:25%;left:auto}.push-4{position:relative;left:33.33333%;right:auto}.pull-4{position:relative;right:33.33333%;left:auto}.push-5{position:relative;left:41.66667%;right:auto}.pull-5{position:relative;right:41.66667%;left:auto}.push-6{position:relative;left:50%;right:auto}.pull-6{position:relative;right:50%;left:auto}.push-7{position:relative;left:58.33333%;right:auto}.pull-7{position:relative;right:58.33333%;left:auto}.push-8{position:relative;left:66.66667%;right:auto}.pull-8{position:relative;right:66.66667%;left:auto}.push-9{position:relative;left:75%;right:auto}.pull-9{position:relative;right:75%;left:auto}.push-10{position:relative;left:83.33333%;right:auto}.pull-10{position:relative;right:83.33333%;left:auto}.push-11{position:relative;left:91.66667%;right:auto}.pull-11{position:relative;right:91.66667%;left:auto}}@media only screen and (min-width: 64.063em){.large-push-0{position:relative;left:0%;right:auto}.large-pull-0{position:relative;right:0%;left:auto}.large-push-1{position:relative;left:8.33333%;right:auto}.large-pull-1{position:relative;right:8.33333%;left:auto}.large-push-2{position:relative;left:16.66667%;right:auto}.large-pull-2{position:relative;right:16.66667%;left:auto}.large-push-3{position:relative;left:25%;right:auto}.large-pull-3{position:relative;right:25%;left:auto}.large-push-4{position:relative;left:33.33333%;right:auto}.large-pull-4{position:relative;right:33.33333%;left:auto}.large-push-5{position:relative;left:41.66667%;right:auto}.large-pull-5{position:relative;right:41.66667%;left:auto}.large-push-6{position:relative;left:50%;right:auto}.large-pull-6{position:relative;right:50%;left:auto}.large-push-7{position:relative;left:58.33333%;right:auto}.large-pull-7{position:relative;right:58.33333%;left:auto}.large-push-8{position:relative;left:66.66667%;right:auto}.large-pull-8{position:relative;right:66.66667%;left:auto}.large-push-9{position:relative;left:75%;right:auto}.large-pull-9{position:relative;right:75%;left:auto}.large-push-10{position:relative;left:83.33333%;right:auto}.large-pull-10{position:relative;right:83.33333%;left:auto}.large-push-11{position:relative;left:91.66667%;right:auto}.large-pull-11{position:relative;right:91.66667%;left:auto}.column,.columns{position:relative;padding-left:0.9375em;padding-right:0.9375em;float:left}.large-1{width:8.33333%}.large-2{width:16.66667%}.large-3{width:25%}.large-4{width:33.33333%}.large-5{width:41.66667%}.large-6{width:50%}.large-7{width:58.33333%}.large-8{width:66.66667%}.large-9{width:75%}.large-10{width:83.33333%}.large-11{width:91.66667%}.large-12{width:100%}.large-offset-0{margin-left:0% !important}.large-offset-1{margin-left:8.33333% !important}.large-offset-2{margin-left:16.66667% !important}.large-offset-3{margin-left:25% !important}.large-offset-4{margin-left:33.33333% !important}.large-offset-5{margin-left:41.66667% !important}.large-offset-6{margin-left:50% !important}.large-offset-7{margin-left:58.33333% !important}.large-offset-8{margin-left:66.66667% !important}.large-offset-9{margin-left:75% !important}.large-offset-10{margin-left:83.33333% !important}.large-offset-11{margin-left:91.66667% !important}.large-reset-order{margin-left:0;margin-right:0;left:auto;right:auto;float:left}.column.large-centered,.columns.large-centered{margin-left:auto;margin-right:auto;float:none}.column.large-uncentered,.columns.large-uncentered{margin-left:0;margin-right:0;float:left}.column.large-centered:last-child,.columns.large-centered:last-child{float:none}.column.large-uncentered:last-child,.columns.large-uncentered:last-child{float:left}.column.large-uncentered.opposite,.columns.large-uncentered.opposite{float:right}.push-0{position:relative;left:0%;right:auto}.pull-0{position:relative;right:0%;left:auto}.push-1{position:relative;left:8.33333%;right:auto}.pull-1{position:relative;right:8.33333%;left:auto}.push-2{position:relative;left:16.66667%;right:auto}.pull-2{position:relative;right:16.66667%;left:auto}.push-3{position:relative;left:25%;right:auto}.pull-3{position:relative;right:25%;left:auto}.push-4{position:relative;left:33.33333%;right:auto}.pull-4{position:relative;right:33.33333%;left:auto}.push-5{position:relative;left:41.66667%;right:auto}.pull-5{position:relative;right:41.66667%;left:auto}.push-6{position:relative;left:50%;right:auto}.pull-6{position:relative;right:50%;left:auto}.push-7{position:relative;left:58.33333%;right:auto}.pull-7{position:relative;right:58.33333%;left:auto}.push-8{position:relative;left:66.66667%;right:auto}.pull-8{position:relative;right:66.66667%;left:auto}.push-9{position:relative;left:75%;right:auto}.pull-9{position:relative;right:75%;left:auto}.push-10{position:relative;left:83.33333%;right:auto}.pull-10{position:relative;right:83.33333%;left:auto}.push-11{position:relative;left:91.66667%;right:auto}.pull-11{position:relative;right:91.66667%;left:auto}}button,.button{border-style:solid;border-width:0px;cursor:pointer;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal;line-height:normal;margin:0 0 1.25rem;position:relative;text-decoration:none;text-align:center;-webkit-appearance:none;-webkit-border-radius:0;display:inline-block;padding-top:1rem;padding-right:2rem;padding-bottom:1.0625rem;padding-left:2rem;font-size:1rem;background-color:#2ba6cb;border-color:#2285a2;color:#fff;transition:background-color 300ms ease-out}button:hover,button:focus,.button:hover,.button:focus{background-color:#2285a2}button:hover,button:focus,.button:hover,.button:focus{color:#fff}button.secondary,.button.secondary{background-color:#e9e9e9;border-color:#bababa;color:#333}button.secondary:hover,button.secondary:focus,.button.secondary:hover,.button.secondary:focus{background-color:#bababa}button.secondary:hover,button.secondary:focus,.button.secondary:hover,.button.secondary:focus{color:#333}button.success,.button.success{background-color:#5da423;border-color:#4a831c;color:#fff}button.success:hover,button.success:focus,.button.success:hover,.button.success:focus{background-color:#4a831c}button.success:hover,button.success:focus,.button.success:hover,.button.success:focus{color:#fff}button.alert,.button.alert{background-color:#c60f13;border-color:#9e0c0f;color:#fff}button.alert:hover,button.alert:focus,.button.alert:hover,.button.alert:focus{background-color:#9e0c0f}button.alert:hover,button.alert:focus,.button.alert:hover,.button.alert:focus{color:#fff}button.warning,.button.warning{background-color:#f08a24;border-color:#cf6e0e;color:#fff}button.warning:hover,button.warning:focus,.button.warning:hover,.button.warning:focus{background-color:#cf6e0e}button.warning:hover,button.warning:focus,.button.warning:hover,.button.warning:focus{color:#fff}button.info,.button.info{background-color:#a0d3e8;border-color:#61b6d9;color:#333}button.info:hover,button.info:focus,.button.info:hover,.button.info:focus{background-color:#61b6d9}button.info:hover,button.info:focus,.button.info:hover,.button.info:focus{color:#fff}button.large,.button.large{padding-top:1.125rem;padding-right:2.25rem;padding-bottom:1.1875rem;padding-left:2.25rem;font-size:1.25rem}button.small,.button.small{padding-top:0.875rem;padding-right:1.75rem;padding-bottom:0.9375rem;padding-left:1.75rem;font-size:0.8125rem}button.tiny,.button.tiny{padding-top:0.625rem;padding-right:1.25rem;padding-bottom:0.6875rem;padding-left:1.25rem;font-size:0.6875rem}button.expand,.button.expand{padding-right:0;padding-left:0;width:100%}button.left-align,.button.left-align{text-align:left;text-indent:0.75rem}button.right-align,.button.right-align{text-align:right;padding-right:0.75rem}button.radius,.button.radius{border-radius:3px}button.round,.button.round{border-radius:1000px}button.disabled,button[disabled],.button.disabled,.button[disabled]{background-color:#2ba6cb;border-color:#2285a2;color:#fff;cursor:default;opacity:0.7;box-shadow:none}button.disabled:hover,button.disabled:focus,button[disabled]:hover,button[disabled]:focus,.button.disabled:hover,.button.disabled:focus,.button[disabled]:hover,.button[disabled]:focus{background-color:#2285a2}button.disabled:hover,button.disabled:focus,button[disabled]:hover,button[disabled]:focus,.button.disabled:hover,.button.disabled:focus,.button[disabled]:hover,.button[disabled]:focus{color:#fff}button.disabled:hover,button.disabled:focus,button[disabled]:hover,button[disabled]:focus,.button.disabled:hover,.button.disabled:focus,.button[disabled]:hover,.button[disabled]:focus{background-color:#2ba6cb}button.disabled.secondary,button[disabled].secondary,.button.disabled.secondary,.button[disabled].secondary{background-color:#e9e9e9;border-color:#bababa;color:#333;cursor:default;opacity:0.7;box-shadow:none}button.disabled.secondary:hover,button.disabled.secondary:focus,button[disabled].secondary:hover,button[disabled].secondary:focus,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary:hover,.button[disabled].secondary:focus{background-color:#bababa}button.disabled.secondary:hover,button.disabled.secondary:focus,button[disabled].secondary:hover,button[disabled].secondary:focus,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary:hover,.button[disabled].secondary:focus{color:#333}button.disabled.secondary:hover,button.disabled.secondary:focus,button[disabled].secondary:hover,button[disabled].secondary:focus,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary:hover,.button[disabled].secondary:focus{background-color:#e9e9e9}button.disabled.success,button[disabled].success,.button.disabled.success,.button[disabled].success{background-color:#5da423;border-color:#4a831c;color:#fff;cursor:default;opacity:0.7;box-shadow:none}button.disabled.success:hover,button.disabled.success:focus,button[disabled].success:hover,button[disabled].success:focus,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success:hover,.button[disabled].success:focus{background-color:#4a831c}button.disabled.success:hover,button.disabled.success:focus,button[disabled].success:hover,button[disabled].success:focus,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success:hover,.button[disabled].success:focus{color:#fff}button.disabled.success:hover,button.disabled.success:focus,button[disabled].success:hover,button[disabled].success:focus,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success:hover,.button[disabled].success:focus{background-color:#5da423}button.disabled.alert,button[disabled].alert,.button.disabled.alert,.button[disabled].alert{background-color:#c60f13;border-color:#9e0c0f;color:#fff;cursor:default;opacity:0.7;box-shadow:none}button.disabled.alert:hover,button.disabled.alert:focus,button[disabled].alert:hover,button[disabled].alert:focus,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert:hover,.button[disabled].alert:focus{background-color:#9e0c0f}button.disabled.alert:hover,button.disabled.alert:focus,button[disabled].alert:hover,button[disabled].alert:focus,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert:hover,.button[disabled].alert:focus{color:#fff}button.disabled.alert:hover,button.disabled.alert:focus,button[disabled].alert:hover,button[disabled].alert:focus,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert:hover,.button[disabled].alert:focus{background-color:#c60f13}button.disabled.warning,button[disabled].warning,.button.disabled.warning,.button[disabled].warning{background-color:#f08a24;border-color:#cf6e0e;color:#fff;cursor:default;opacity:0.7;box-shadow:none}button.disabled.warning:hover,button.disabled.warning:focus,button[disabled].warning:hover,button[disabled].warning:focus,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning:hover,.button[disabled].warning:focus{background-color:#cf6e0e}button.disabled.warning:hover,button.disabled.warning:focus,button[disabled].warning:hover,button[disabled].warning:focus,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning:hover,.button[disabled].warning:focus{color:#fff}button.disabled.warning:hover,button.disabled.warning:focus,button[disabled].warning:hover,button[disabled].warning:focus,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning:hover,.button[disabled].warning:focus{background-color:#f08a24}button.disabled.info,button[disabled].info,.button.disabled.info,.button[disabled].info{background-color:#a0d3e8;border-color:#61b6d9;color:#333;cursor:default;opacity:0.7;box-shadow:none}button.disabled.info:hover,button.disabled.info:focus,button[disabled].info:hover,button[disabled].info:focus,.button.disabled.info:hover,.button.disabled.info:focus,.button[disabled].info:hover,.button[disabled].info:focus{background-color:#61b6d9}button.disabled.info:hover,button.disabled.info:focus,button[disabled].info:hover,button[disabled].info:focus,.button.disabled.info:hover,.button.disabled.info:focus,.button[disabled].info:hover,.button[disabled].info:focus{color:#fff}button.disabled.info:hover,button.disabled.info:focus,button[disabled].info:hover,button[disabled].info:focus,.button.disabled.info:hover,.button.disabled.info:focus,.button[disabled].info:hover,.button[disabled].info:focus{background-color:#a0d3e8}button::-moz-focus-inner{border:0;padding:0}@media only screen and (min-width: 40.063em){button,.button{display:inline-block}}.button-group{list-style:none;margin:0;left:0}.button-group:before,.button-group:after{content:" ";display:table}.button-group:after{clear:both}.button-group>li{margin:0 -2px;float:left;display:inline-block}.button-group>li>button,.button-group>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group>li:first-child button,.button-group>li:first-child .button{border-left:0}.button-group.stack>li{margin:0 -2px;float:left;display:inline-block;display:block;margin:0;float:none}.button-group.stack>li>button,.button-group.stack>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.stack>li:first-child button,.button-group.stack>li:first-child .button{border-left:0}.button-group.stack>li>button,.button-group.stack>li .button{border-top:1px solid;border-color:rgba(255,255,255,0.5);border-left-width:0px;margin:0;display:block}.button-group.stack>li:first-child button,.button-group.stack>li:first-child .button{border-top:0}.button-group.stack-for-small>li{margin:0 -2px;float:left;display:inline-block}.button-group.stack-for-small>li>button,.button-group.stack-for-small>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.stack-for-small>li:first-child button,.button-group.stack-for-small>li:first-child .button{border-left:0}@media only screen and (max-width: 40em){.button-group.stack-for-small>li{margin:0 -2px;float:left;display:inline-block;display:block;margin:0}.button-group.stack-for-small>li>button,.button-group.stack-for-small>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.stack-for-small>li:first-child button,.button-group.stack-for-small>li:first-child .button{border-left:0}.button-group.stack-for-small>li>button,.button-group.stack-for-small>li .button{border-top:1px solid;border-color:rgba(255,255,255,0.5);border-left-width:0px;margin:0;display:block}.button-group.stack-for-small>li:first-child button,.button-group.stack-for-small>li:first-child .button{border-top:0}}.button-group.radius>*{margin:0 -2px;float:left;display:inline-block}.button-group.radius>*>button,.button-group.radius>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius>*:first-child button,.button-group.radius>*:first-child .button{border-left:0}.button-group.radius>*,.button-group.radius>*>a,.button-group.radius>*>button,.button-group.radius>*>.button{border-radius:0}.button-group.radius>*:first-child,.button-group.radius>*:first-child>a,.button-group.radius>*:first-child>button,.button-group.radius>*:first-child>.button{-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.button-group.radius>*:last-child,.button-group.radius>*:last-child>a,.button-group.radius>*:last-child>button,.button-group.radius>*:last-child>.button{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.button-group.radius.stack>*{margin:0 -2px;float:left;display:inline-block;display:block;margin:0}.button-group.radius.stack>*>button,.button-group.radius.stack>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius.stack>*:first-child button,.button-group.radius.stack>*:first-child .button{border-left:0}.button-group.radius.stack>*>button,.button-group.radius.stack>* .button{border-top:1px solid;border-color:rgba(255,255,255,0.5);border-left-width:0px;margin:0;display:block}.button-group.radius.stack>*:first-child button,.button-group.radius.stack>*:first-child .button{border-top:0}.button-group.radius.stack>*,.button-group.radius.stack>*>a,.button-group.radius.stack>*>button,.button-group.radius.stack>*>.button{border-radius:0}.button-group.radius.stack>*:first-child,.button-group.radius.stack>*:first-child>a,.button-group.radius.stack>*:first-child>button,.button-group.radius.stack>*:first-child>.button{-webkit-top-left-radius:3px;-webkit-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px}.button-group.radius.stack>*:last-child,.button-group.radius.stack>*:last-child>a,.button-group.radius.stack>*:last-child>button,.button-group.radius.stack>*:last-child>.button{-webkit-bottom-left-radius:3px;-webkit-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px}@media only screen and (min-width: 40.063em){.button-group.radius.stack-for-small>*{margin:0 -2px;float:left;display:inline-block}.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius.stack-for-small>*:first-child button,.button-group.radius.stack-for-small>*:first-child .button{border-left:0}.button-group.radius.stack-for-small>*,.button-group.radius.stack-for-small>*>a,.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>*>.button{border-radius:0}.button-group.radius.stack-for-small>*:first-child,.button-group.radius.stack-for-small>*:first-child>a,.button-group.radius.stack-for-small>*:first-child>button,.button-group.radius.stack-for-small>*:first-child>.button{-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.button-group.radius.stack-for-small>*:last-child,.button-group.radius.stack-for-small>*:last-child>a,.button-group.radius.stack-for-small>*:last-child>button,.button-group.radius.stack-for-small>*:last-child>.button{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}}@media only screen and (max-width: 40em){.button-group.radius.stack-for-small>*{margin:0 -2px;float:left;display:inline-block;display:block;margin:0}.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius.stack-for-small>*:first-child button,.button-group.radius.stack-for-small>*:first-child .button{border-left:0}.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>* .button{border-top:1px solid;border-color:rgba(255,255,255,0.5);border-left-width:0px;margin:0;display:block}.button-group.radius.stack-for-small>*:first-child button,.button-group.radius.stack-for-small>*:first-child .button{border-top:0}.button-group.radius.stack-for-small>*,.button-group.radius.stack-for-small>*>a,.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>*>.button{border-radius:0}.button-group.radius.stack-for-small>*:first-child,.button-group.radius.stack-for-small>*:first-child>a,.button-group.radius.stack-for-small>*:first-child>button,.button-group.radius.stack-for-small>*:first-child>.button{-webkit-top-left-radius:3px;-webkit-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px}.button-group.radius.stack-for-small>*:last-child,.button-group.radius.stack-for-small>*:last-child>a,.button-group.radius.stack-for-small>*:last-child>button,.button-group.radius.stack-for-small>*:last-child>.button{-webkit-bottom-left-radius:3px;-webkit-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px}}.button-group.round>*{margin:0 -2px;float:left;display:inline-block}.button-group.round>*>button,.button-group.round>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round>*:first-child button,.button-group.round>*:first-child .button{border-left:0}.button-group.round>*,.button-group.round>*>a,.button-group.round>*>button,.button-group.round>*>.button{border-radius:0}.button-group.round>*:first-child,.button-group.round>*:first-child>a,.button-group.round>*:first-child>button,.button-group.round>*:first-child>.button{-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}.button-group.round>*:last-child,.button-group.round>*:last-child>a,.button-group.round>*:last-child>button,.button-group.round>*:last-child>.button{-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}.button-group.round.stack>*{margin:0 -2px;float:left;display:inline-block;display:block;margin:0}.button-group.round.stack>*>button,.button-group.round.stack>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round.stack>*:first-child button,.button-group.round.stack>*:first-child .button{border-left:0}.button-group.round.stack>*>button,.button-group.round.stack>* .button{border-top:1px solid;border-color:rgba(255,255,255,0.5);border-left-width:0px;margin:0;display:block}.button-group.round.stack>*:first-child button,.button-group.round.stack>*:first-child .button{border-top:0}.button-group.round.stack>*,.button-group.round.stack>*>a,.button-group.round.stack>*>button,.button-group.round.stack>*>.button{border-radius:0}.button-group.round.stack>*:first-child,.button-group.round.stack>*:first-child>a,.button-group.round.stack>*:first-child>button,.button-group.round.stack>*:first-child>.button{-webkit-top-left-radius:1rem;-webkit-top-right-radius:1rem;border-top-left-radius:1rem;border-top-right-radius:1rem}.button-group.round.stack>*:last-child,.button-group.round.stack>*:last-child>a,.button-group.round.stack>*:last-child>button,.button-group.round.stack>*:last-child>.button{-webkit-bottom-left-radius:1rem;-webkit-bottom-right-radius:1rem;border-bottom-left-radius:1rem;border-bottom-right-radius:1rem}@media only screen and (min-width: 40.063em){.button-group.round.stack-for-small>*{margin:0 -2px;float:left;display:inline-block}.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round.stack-for-small>*:first-child button,.button-group.round.stack-for-small>*:first-child .button{border-left:0}.button-group.round.stack-for-small>*,.button-group.round.stack-for-small>*>a,.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>*>.button{border-radius:0}.button-group.round.stack-for-small>*:first-child,.button-group.round.stack-for-small>*:first-child>a,.button-group.round.stack-for-small>*:first-child>button,.button-group.round.stack-for-small>*:first-child>.button{-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}.button-group.round.stack-for-small>*:last-child,.button-group.round.stack-for-small>*:last-child>a,.button-group.round.stack-for-small>*:last-child>button,.button-group.round.stack-for-small>*:last-child>.button{-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}}@media only screen and (max-width: 40em){.button-group.round.stack-for-small>*{margin:0 -2px;float:left;display:inline-block;display:block;margin:0}.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round.stack-for-small>*:first-child button,.button-group.round.stack-for-small>*:first-child .button{border-left:0}.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>* .button{border-top:1px solid;border-color:rgba(255,255,255,0.5);border-left-width:0px;margin:0;display:block}.button-group.round.stack-for-small>*:first-child button,.button-group.round.stack-for-small>*:first-child .button{border-top:0}.button-group.round.stack-for-small>*,.button-group.round.stack-for-small>*>a,.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>*>.button{border-radius:0}.button-group.round.stack-for-small>*:first-child,.button-group.round.stack-for-small>*:first-child>a,.button-group.round.stack-for-small>*:first-child>button,.button-group.round.stack-for-small>*:first-child>.button{-webkit-top-left-radius:1rem;-webkit-top-right-radius:1rem;border-top-left-radius:1rem;border-top-right-radius:1rem}.button-group.round.stack-for-small>*:last-child,.button-group.round.stack-for-small>*:last-child>a,.button-group.round.stack-for-small>*:last-child>button,.button-group.round.stack-for-small>*:last-child>.button{-webkit-bottom-left-radius:1rem;-webkit-bottom-right-radius:1rem;border-bottom-left-radius:1rem;border-bottom-right-radius:1rem}}.button-group.even-2 li{margin:0 -2px;float:left;display:inline-block;width:50%}.button-group.even-2 li>button,.button-group.even-2 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-2 li:first-child button,.button-group.even-2 li:first-child .button{border-left:0}.button-group.even-2 li button,.button-group.even-2 li .button{width:100%}.button-group.even-3 li{margin:0 -2px;float:left;display:inline-block;width:33.33333%}.button-group.even-3 li>button,.button-group.even-3 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-3 li:first-child button,.button-group.even-3 li:first-child .button{border-left:0}.button-group.even-3 li button,.button-group.even-3 li .button{width:100%}.button-group.even-4 li{margin:0 -2px;float:left;display:inline-block;width:25%}.button-group.even-4 li>button,.button-group.even-4 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-4 li:first-child button,.button-group.even-4 li:first-child .button{border-left:0}.button-group.even-4 li button,.button-group.even-4 li .button{width:100%}.button-group.even-5 li{margin:0 -2px;float:left;display:inline-block;width:20%}.button-group.even-5 li>button,.button-group.even-5 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-5 li:first-child button,.button-group.even-5 li:first-child .button{border-left:0}.button-group.even-5 li button,.button-group.even-5 li .button{width:100%}.button-group.even-6 li{margin:0 -2px;float:left;display:inline-block;width:16.66667%}.button-group.even-6 li>button,.button-group.even-6 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-6 li:first-child button,.button-group.even-6 li:first-child .button{border-left:0}.button-group.even-6 li button,.button-group.even-6 li .button{width:100%}.button-group.even-7 li{margin:0 -2px;float:left;display:inline-block;width:14.28571%}.button-group.even-7 li>button,.button-group.even-7 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-7 li:first-child button,.button-group.even-7 li:first-child .button{border-left:0}.button-group.even-7 li button,.button-group.even-7 li .button{width:100%}.button-group.even-8 li{margin:0 -2px;float:left;display:inline-block;width:12.5%}.button-group.even-8 li>button,.button-group.even-8 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-8 li:first-child button,.button-group.even-8 li:first-child .button{border-left:0}.button-group.even-8 li button,.button-group.even-8 li .button{width:100%}.button-bar:before,.button-bar:after{content:" ";display:table}.button-bar:after{clear:both}.button-bar .button-group{float:left;margin-right:0.625rem}.button-bar .button-group div{overflow:hidden}.dropdown.button,button.dropdown{position:relative;padding-right:3.5625rem}.dropdown.button:after,button.dropdown:after{position:absolute;content:"";width:0;height:0;display:block;border-style:solid;border-color:#fff transparent transparent transparent;top:50%}.dropdown.button:after,button.dropdown:after{border-width:0.375rem;right:1.40625rem;margin-top:-0.15625rem}.dropdown.button:after,button.dropdown:after{border-color:#fff transparent transparent transparent}.dropdown.button.tiny,button.dropdown.tiny{padding-right:2.625rem}.dropdown.button.tiny:before,button.dropdown.tiny:before{border-width:0.375rem;right:1.125rem;margin-top:-0.125rem}.dropdown.button.tiny:after,button.dropdown.tiny:after{border-color:#fff transparent transparent transparent}.dropdown.button.small,button.dropdown.small{padding-right:3.0625rem}.dropdown.button.small:after,button.dropdown.small:after{border-width:0.4375rem;right:1.3125rem;margin-top:-0.15625rem}.dropdown.button.small:after,button.dropdown.small:after{border-color:#fff transparent transparent transparent}.dropdown.button.large,button.dropdown.large{padding-right:3.625rem}.dropdown.button.large:after,button.dropdown.large:after{border-width:0.3125rem;right:1.71875rem;margin-top:-0.15625rem}.dropdown.button.large:after,button.dropdown.large:after{border-color:#fff transparent transparent transparent}.dropdown.button.secondary:after,button.dropdown.secondary:after{border-color:#333 transparent transparent transparent}.split.button{position:relative;padding-right:5.0625rem}.split.button span{display:block;height:100%;position:absolute;right:0;top:0;border-left:solid 1px}.split.button span:after{position:absolute;content:"";width:0;height:0;display:block;border-style:inset;top:50%;left:50%}.split.button span:active{background-color:rgba(0,0,0,0.1)}.split.button span{border-left-color:rgba(255,255,255,0.5)}.split.button span{width:3.09375rem}.split.button span:after{border-top-style:solid;border-width:0.375rem;top:48%;margin-left:-0.375rem}.split.button span:after{border-color:#fff transparent transparent transparent}.split.button.secondary span{border-left-color:rgba(255,255,255,0.5)}.split.button.secondary span:after{border-color:#fff transparent transparent transparent}.split.button.alert span{border-left-color:rgba(255,255,255,0.5)}.split.button.success span{border-left-color:rgba(255,255,255,0.5)}.split.button.tiny{padding-right:3.75rem}.split.button.tiny span{width:2.25rem}.split.button.tiny span:after{border-top-style:solid;border-width:0.375rem;top:48%;margin-left:-0.375rem}.split.button.small{padding-right:4.375rem}.split.button.small span{width:2.625rem}.split.button.small span:after{border-top-style:solid;border-width:0.4375rem;top:48%;margin-left:-0.375rem}.split.button.large{padding-right:5.5rem}.split.button.large span{width:3.4375rem}.split.button.large span:after{border-top-style:solid;border-width:0.3125rem;top:48%;margin-left:-0.375rem}.split.button.expand{padding-left:2rem}.split.button.secondary span:after{border-color:#333 transparent transparent transparent}.split.button.radius span{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.split.button.round span{-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}.reveal-modal-bg{position:fixed;top:0;bottom:0;left:0;right:0;background:#000;background:rgba(0,0,0,0.45);z-index:1004;display:none;left:0}.reveal-modal,dialog{visibility:hidden;display:none;position:absolute;z-index:1005;width:100vw;top:0;border-radius:3px;left:0;background-color:#fff;padding:1.25rem;border:solid 1px #666;box-shadow:0 0 10px rgba(0,0,0,0.4);padding:1.875rem}@media only screen and (max-width: 40em){.reveal-modal,dialog{min-height:100vh}}.reveal-modal .column,dialog .column,.reveal-modal .columns,dialog .columns{min-width:0}.reveal-modal>:first-child,dialog>:first-child{margin-top:0}.reveal-modal>:last-child,dialog>:last-child{margin-bottom:0}@media only screen and (min-width: 40.063em){.reveal-modal,dialog{width:80%;max-width:62.5em;left:0;right:0;margin:0 auto}}@media only screen and (min-width: 40.063em){.reveal-modal,dialog{top:6.25rem}}.reveal-modal.radius,dialog.radius{border-radius:3px}.reveal-modal.round,dialog.round{border-radius:1000px}.reveal-modal.collapse,dialog.collapse{padding:0}@media only screen and (min-width: 40.063em){.reveal-modal.tiny,dialog.tiny{width:30%;max-width:62.5em;left:0;right:0;margin:0 auto}}@media only screen and (min-width: 40.063em){.reveal-modal.small,dialog.small{width:40%;max-width:62.5em;left:0;right:0;margin:0 auto}}@media only screen and (min-width: 40.063em){.reveal-modal.medium,dialog.medium{width:60%;max-width:62.5em;left:0;right:0;margin:0 auto}}@media only screen and (min-width: 40.063em){.reveal-modal.large,dialog.large{width:70%;max-width:62.5em;left:0;right:0;margin:0 auto}}@media only screen and (min-width: 40.063em){.reveal-modal.xlarge,dialog.xlarge{width:95%;max-width:62.5em;left:0;right:0;margin:0 auto}}.reveal-modal.full,dialog.full{top:0;left:0;height:100%;height:100vh;min-height:100vh;margin-left:0 !important}@media only screen and (min-width: 40.063em){.reveal-modal.full,dialog.full{width:100vw;max-width:62.5em;left:0;right:0;margin:0 auto}}.reveal-modal .close-reveal-modal,dialog .close-reveal-modal{font-size:2.5rem;line-height:1;position:absolute;top:0.5rem;right:0.6875rem;color:#aaa;font-weight:bold;cursor:pointer}dialog{display:none}dialog::backdrop,dialog+.backdrop{position:fixed;top:0;bottom:0;left:0;right:0;background:#000;background:rgba(0,0,0,0.45);z-index:auto;display:none;left:0}dialog[open]{display:block}@media print{dialog,.reveal-modal,dialog{display:none;background:#fff !important}}[class*="block-grid-"]{display:block;padding:0;margin:0 -0.625rem}[class*="block-grid-"]:before,[class*="block-grid-"]:after{content:" ";display:table}[class*="block-grid-"]:after{clear:both}[class*="block-grid-"]>li{display:block;height:auto;float:left;padding:0 0.625rem 1.25rem}@media only screen{.small-block-grid-1>li{width:100%;list-style:none}.small-block-grid-1>li:nth-of-type(1n){clear:none}.small-block-grid-1>li:nth-of-type(1n+1){clear:both}.small-block-grid-2>li{width:50%;list-style:none}.small-block-grid-2>li:nth-of-type(1n){clear:none}.small-block-grid-2>li:nth-of-type(2n+1){clear:both}.small-block-grid-3>li{width:33.33333%;list-style:none}.small-block-grid-3>li:nth-of-type(1n){clear:none}.small-block-grid-3>li:nth-of-type(3n+1){clear:both}.small-block-grid-4>li{width:25%;list-style:none}.small-block-grid-4>li:nth-of-type(1n){clear:none}.small-block-grid-4>li:nth-of-type(4n+1){clear:both}.small-block-grid-5>li{width:20%;list-style:none}.small-block-grid-5>li:nth-of-type(1n){clear:none}.small-block-grid-5>li:nth-of-type(5n+1){clear:both}.small-block-grid-6>li{width:16.66667%;list-style:none}.small-block-grid-6>li:nth-of-type(1n){clear:none}.small-block-grid-6>li:nth-of-type(6n+1){clear:both}.small-block-grid-7>li{width:14.28571%;list-style:none}.small-block-grid-7>li:nth-of-type(1n){clear:none}.small-block-grid-7>li:nth-of-type(7n+1){clear:both}.small-block-grid-8>li{width:12.5%;list-style:none}.small-block-grid-8>li:nth-of-type(1n){clear:none}.small-block-grid-8>li:nth-of-type(8n+1){clear:both}.small-block-grid-9>li{width:11.11111%;list-style:none}.small-block-grid-9>li:nth-of-type(1n){clear:none}.small-block-grid-9>li:nth-of-type(9n+1){clear:both}.small-block-grid-10>li{width:10%;list-style:none}.small-block-grid-10>li:nth-of-type(1n){clear:none}.small-block-grid-10>li:nth-of-type(10n+1){clear:both}.small-block-grid-11>li{width:9.09091%;list-style:none}.small-block-grid-11>li:nth-of-type(1n){clear:none}.small-block-grid-11>li:nth-of-type(11n+1){clear:both}.small-block-grid-12>li{width:8.33333%;list-style:none}.small-block-grid-12>li:nth-of-type(1n){clear:none}.small-block-grid-12>li:nth-of-type(12n+1){clear:both}}@media only screen and (min-width: 40.063em){.medium-block-grid-1>li{width:100%;list-style:none}.medium-block-grid-1>li:nth-of-type(1n){clear:none}.medium-block-grid-1>li:nth-of-type(1n+1){clear:both}.medium-block-grid-2>li{width:50%;list-style:none}.medium-block-grid-2>li:nth-of-type(1n){clear:none}.medium-block-grid-2>li:nth-of-type(2n+1){clear:both}.medium-block-grid-3>li{width:33.33333%;list-style:none}.medium-block-grid-3>li:nth-of-type(1n){clear:none}.medium-block-grid-3>li:nth-of-type(3n+1){clear:both}.medium-block-grid-4>li{width:25%;list-style:none}.medium-block-grid-4>li:nth-of-type(1n){clear:none}.medium-block-grid-4>li:nth-of-type(4n+1){clear:both}.medium-block-grid-5>li{width:20%;list-style:none}.medium-block-grid-5>li:nth-of-type(1n){clear:none}.medium-block-grid-5>li:nth-of-type(5n+1){clear:both}.medium-block-grid-6>li{width:16.66667%;list-style:none}.medium-block-grid-6>li:nth-of-type(1n){clear:none}.medium-block-grid-6>li:nth-of-type(6n+1){clear:both}.medium-block-grid-7>li{width:14.28571%;list-style:none}.medium-block-grid-7>li:nth-of-type(1n){clear:none}.medium-block-grid-7>li:nth-of-type(7n+1){clear:both}.medium-block-grid-8>li{width:12.5%;list-style:none}.medium-block-grid-8>li:nth-of-type(1n){clear:none}.medium-block-grid-8>li:nth-of-type(8n+1){clear:both}.medium-block-grid-9>li{width:11.11111%;list-style:none}.medium-block-grid-9>li:nth-of-type(1n){clear:none}.medium-block-grid-9>li:nth-of-type(9n+1){clear:both}.medium-block-grid-10>li{width:10%;list-style:none}.medium-block-grid-10>li:nth-of-type(1n){clear:none}.medium-block-grid-10>li:nth-of-type(10n+1){clear:both}.medium-block-grid-11>li{width:9.09091%;list-style:none}.medium-block-grid-11>li:nth-of-type(1n){clear:none}.medium-block-grid-11>li:nth-of-type(11n+1){clear:both}.medium-block-grid-12>li{width:8.33333%;list-style:none}.medium-block-grid-12>li:nth-of-type(1n){clear:none}.medium-block-grid-12>li:nth-of-type(12n+1){clear:both}}@media only screen and (min-width: 64.063em){.large-block-grid-1>li{width:100%;list-style:none}.large-block-grid-1>li:nth-of-type(1n){clear:none}.large-block-grid-1>li:nth-of-type(1n+1){clear:both}.large-block-grid-2>li{width:50%;list-style:none}.large-block-grid-2>li:nth-of-type(1n){clear:none}.large-block-grid-2>li:nth-of-type(2n+1){clear:both}.large-block-grid-3>li{width:33.33333%;list-style:none}.large-block-grid-3>li:nth-of-type(1n){clear:none}.large-block-grid-3>li:nth-of-type(3n+1){clear:both}.large-block-grid-4>li{width:25%;list-style:none}.large-block-grid-4>li:nth-of-type(1n){clear:none}.large-block-grid-4>li:nth-of-type(4n+1){clear:both}.large-block-grid-5>li{width:20%;list-style:none}.large-block-grid-5>li:nth-of-type(1n){clear:none}.large-block-grid-5>li:nth-of-type(5n+1){clear:both}.large-block-grid-6>li{width:16.66667%;list-style:none}.large-block-grid-6>li:nth-of-type(1n){clear:none}.large-block-grid-6>li:nth-of-type(6n+1){clear:both}.large-block-grid-7>li{width:14.28571%;list-style:none}.large-block-grid-7>li:nth-of-type(1n){clear:none}.large-block-grid-7>li:nth-of-type(7n+1){clear:both}.large-block-grid-8>li{width:12.5%;list-style:none}.large-block-grid-8>li:nth-of-type(1n){clear:none}.large-block-grid-8>li:nth-of-type(8n+1){clear:both}.large-block-grid-9>li{width:11.11111%;list-style:none}.large-block-grid-9>li:nth-of-type(1n){clear:none}.large-block-grid-9>li:nth-of-type(9n+1){clear:both}.large-block-grid-10>li{width:10%;list-style:none}.large-block-grid-10>li:nth-of-type(1n){clear:none}.large-block-grid-10>li:nth-of-type(10n+1){clear:both}.large-block-grid-11>li{width:9.09091%;list-style:none}.large-block-grid-11>li:nth-of-type(1n){clear:none}.large-block-grid-11>li:nth-of-type(11n+1){clear:both}.large-block-grid-12>li{width:8.33333%;list-style:none}.large-block-grid-12>li:nth-of-type(1n){clear:none}.large-block-grid-12>li:nth-of-type(12n+1){clear:both}} diff --git a/ajax/libs/foundation-essential/5.4.5/css/normalize.css b/ajax/libs/foundation-essential/5.4.5/css/normalize.css new file mode 100644 index 000000000..08f895079 --- /dev/null +++ b/ajax/libs/foundation-essential/5.4.5/css/normalize.css @@ -0,0 +1,425 @@ +/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ + +audio, +canvas, +progress, +video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background: transparent; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9/10. + */ + +img { + border: 0; +} + +/** + * Correct overflow not hidden in IE 9/10/11. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Grouping content + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari. + */ + +figure { + margin: 1em 40px; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. + */ + +pre { + overflow: auto; +} + +/** + * Address odd `em`-unit font size rendering in all browsers. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +/* Forms + ========================================================================== */ + +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ + +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ + +button, +input, +optgroup, +select, +textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ + +button { + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +input { + line-height: normal; +} + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ + +textarea { + overflow: auto; +} + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ + +optgroup { + font-weight: bold; +} + +/* Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} diff --git a/ajax/libs/foundation-essential/5.4.5/css/normalize.min.css b/ajax/libs/foundation-essential/5.4.5/css/normalize.min.css new file mode 100644 index 000000000..be9fde3f4 --- /dev/null +++ b/ajax/libs/foundation-essential/5.4.5/css/normalize.min.css @@ -0,0 +1 @@ +/*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} \ No newline at end of file diff --git a/ajax/libs/foundation-essential/5.4.5/js/foundation.min.js b/ajax/libs/foundation-essential/5.4.5/js/foundation.min.js new file mode 100644 index 000000000..e451a4aff --- /dev/null +++ b/ajax/libs/foundation-essential/5.4.5/js/foundation.min.js @@ -0,0 +1,8 @@ +/* + * Foundation Responsive Library + * http://foundation.zurb.com + * Copyright 2014, ZURB + * Free to use under the MIT license. + * http://www.opensource.org/licenses/mit-license.php +*/ +(function(e,t,n,r){"use strict";function l(e){if(typeof e=="string"||e instanceof String)e=e.replace(/^['\\/"]+|(;\s?})+|['\\/"]+$/g,"");return e}var i=function(t){var n=t.length,r=e("head");while(n--)r.has("."+t[n]).length===0&&r.append('')};i(["foundation-mq-small","foundation-mq-medium","foundation-mq-large","foundation-mq-xlarge","foundation-mq-xxlarge","foundation-data-attribute-namespace"]),e(function(){typeof FastClick!="undefined"&&typeof n.body!="undefined"&&FastClick.attach(n.body)});var s=function(t,r){if(typeof t=="string"){if(r){var i;if(r.jquery){i=r[0];if(!i)return r}else i=r;return e(i.querySelectorAll(t))}return e(n.querySelectorAll(t))}return e(t,r)},o=function(e){var t=[];return e||t.push("data"),this.namespace.length>0&&t.push(this.namespace),t.push(this.name),t.join("-")},u=function(e){var t=e.split("-"),n=t.length,r=[];while(n--)n!==0?r.push(t[n]):this.namespace.length>0?r.push(this.namespace,t[n]):r.push(t[n]);return r.reverse().join("-")},a=function(t,n){var r=this,i=!s(this).data(this.attr_name(!0));s(this.scope).is("["+this.attr_name()+"]")?(s(this.scope).data(this.attr_name(!0)+"-init",e.extend({},this.settings,n||t,this.data_options(s(this.scope)))),i&&this.events(this.scope)):s("["+this.attr_name()+"]",this.scope).each(function(){var i=!s(this).data(r.attr_name(!0)+"-init");s(this).data(r.attr_name(!0)+"-init",e.extend({},r.settings,n||t,r.data_options(s(this)))),i&&r.events(this)});if(typeof t=="string")return this[t].call(this,n)},f=function(e,t){function n(){t(e[0])}function r(){this.one("load",n);if(/MSIE (\d+\.\d+);/.test(navigator.userAgent)){var e=this.attr("src"),t=e.match(/\?/)?"&":"?";t+="random="+(new Date).getTime(),this.attr("src",e+t)}}if(!e.attr("src")){n();return}e[0].complete||e[0].readyState===4?n():r.call(e)};t.matchMedia=t.matchMedia||function(e){var t,n=e.documentElement,r=n.firstElementChild||n.firstChild,i=e.createElement("body"),s=e.createElement("div");return s.id="mq-test-1",s.style.cssText="position:absolute;top:-100em",i.style.background="none",i.appendChild(s),function(e){return s.innerHTML='­',n.insertBefore(i,r),t=s.offsetWidth===42,n.removeChild(i),{matches:t,media:e}}}(n),function(e){function a(){n&&(s(a),u&&jQuery.fx.tick())}var n,r=0,i=["webkit","moz"],s=t.requestAnimationFrame,o=t.cancelAnimationFrame,u="undefined"!=typeof jQuery.fx;for(;r").appendTo("head")[0].sheet,global:{namespace:r},init:function(e,n,r,i,o){var u=[e,r,i,o],a=[];this.rtl=/rtl/i.test(s("html").attr("dir")),this.scope=e||this.scope,this.set_namespace();if(n&&typeof n=="string"&&!/reflow/i.test(n))this.libs.hasOwnProperty(n)&&a.push(this.init_lib(n,u));else for(var f in this.libs)a.push(this.init_lib(f,n));return s(t).load(function(){s(t).trigger("resize.fndtn.clearing").trigger("resize.fndtn.dropdown").trigger("resize.fndtn.equalizer").trigger("resize.fndtn.interchange").trigger("resize.fndtn.joyride").trigger("resize.fndtn.magellan").trigger("resize.fndtn.topbar").trigger("resize.fndtn.slider")}),e},init_lib:function(t,n){return this.libs.hasOwnProperty(t)?(this.patch(this.libs[t]),n&&n.hasOwnProperty(t)?(typeof this.libs[t].settings!="undefined"?e.extend(!0,this.libs[t].settings,n[t]):typeof this.libs[t].defaults!="undefined"&&e.extend(!0,this.libs[t].defaults,n[t]),this.libs[t].init.apply(this.libs[t],[this.scope,n[t]])):(n=n instanceof Array?n:new Array(n),this.libs[t].init.apply(this.libs[t],n))):function(){}},patch:function(e){e.scope=this.scope,e.namespace=this.global.namespace,e.rtl=this.rtl,e.data_options=this.utils.data_options,e.attr_name=o,e.add_namespace=u,e.bindings=a,e.S=this.utils.S},inherit:function(e,t){var n=t.split(" "),r=n.length;while(r--)this.utils.hasOwnProperty(n[r])&&(e[n[r]]=this.utils[n[r]])},set_namespace:function(){var t=this.global.namespace===r?e(".foundation-data-attribute-namespace").css("font-family"):this.global.namespace;this.global.namespace=t===r||/false/i.test(t)?"":t},libs:{},utils:{S:s,throttle:function(e,t){var n=null;return function(){var r=this,i=arguments;n==null&&(n=setTimeout(function(){e.apply(r,i),n=null},t))}},debounce:function(e,t,n){var r,i;return function(){var s=this,o=arguments,u=function(){r=null,n||(i=e.apply(s,o))},a=n&&!r;return clearTimeout(r),r=setTimeout(u,t),a&&(i=e.apply(s,o)),i}},data_options:function(t,n){function f(e){return!isNaN(e-0)&&e!==null&&e!==""&&e!==!1&&e!==!0}function l(t){return typeof t=="string"?e.trim(t):t}n=n||"options";var r={},i,s,o,u=function(e){var t=Foundation.global.namespace;return t.length>0?e.data(t+"-"+n):e.data(n)},a=u(t);if(typeof a=="object")return a;o=(a||":").split(";"),i=o.length;while(i--)s=o[i].split(":"),s=[s[0],s.slice(1).join(":")],/true/i.test(s[1])&&(s[1]=!0),/false/i.test(s[1])&&(s[1]=!1),f(s[1])&&(s[1].indexOf(".")===-1?s[1]=parseInt(s[1],10):s[1]=parseFloat(s[1])),s.length===2&&s[0].length>0&&(r[l(s[0])]=l(s[1]));return r},register_media:function(t,n){Foundation.media_queries[t]===r&&(e("head").append(''),Foundation.media_queries[t]=l(e("."+n).css("font-family")))},add_custom_rule:function(e,t){if(t===r&&Foundation.stylesheet)Foundation.stylesheet.insertRule(e,Foundation.stylesheet.cssRules.length);else{var n=Foundation.media_queries[t];n!==r&&Foundation.stylesheet.insertRule("@media "+Foundation.media_queries[t]+"{ "+e+" }")}},image_loaded:function(e,t){var n=this,r=e.length;r===0&&t(e),e.each(function(){f(n.S(this),function(){r-=1,r===0&&t(e)})})},random_str:function(){return this.fidx||(this.fidx=0),this.prefix=this.prefix||[this.name||"F",(+(new Date)).toString(36)].join("-"),this.prefix+(this.fidx++).toString(36)}}},e.fn.foundation=function(){var e=Array.prototype.slice.call(arguments,0);return this.each(function(){return Foundation.init.apply(Foundation,[this].concat(e)),this})}})(jQuery,window,window.document),function(e,t,n,r){"use strict";Foundation.libs.interchange={name:"interchange",version:"5.4.5",cache:{},images_loaded:!1,nodes_loaded:!1,settings:{load_attr:"interchange",named_queries:{"default":"only screen",small:Foundation.media_queries.small,medium:Foundation.media_queries.medium,large:Foundation.media_queries.large,xlarge:Foundation.media_queries.xlarge,xxlarge:Foundation.media_queries.xxlarge,landscape:"only screen and (orientation: landscape)",portrait:"only screen and (orientation: portrait)",retina:"only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx)"},directives:{replace:function(t,n,r){if(/IMG/.test(t[0].nodeName)){var i=t[0].src;if((new RegExp(n,"i")).test(i))return;return t[0].src=n,r(t[0].src)}var s=t.data(this.data_attr+"-last-path"),o=this;if(s==n)return;return/\.(gif|jpg|jpeg|tiff|png)([?#].*)?/i.test(n)?(e(t).css("background-image","url("+n+")"),t.data("interchange-last-path",n),r(n)):e.get(n,function(e){t.html(e),t.data(o.data_attr+"-last-path",n),r()})}}},init:function(t,n,r){Foundation.inherit(this,"throttle random_str"),this.data_attr=this.set_data_attr(),e.extend(!0,this.settings,n,r),this.bindings(n,r),this.load("images"),this.load("nodes")},get_media_hash:function(){var e="";for(var t in this.settings.named_queries)e+=matchMedia(this.settings.named_queries[t]).matches.toString();return e},events:function(){var n=this,r;return e(t).off(".interchange").on("resize.fndtn.interchange",n.throttle(function(){var e=n.get_media_hash();e!==r&&n.resize(),r=e},50)),this},resize:function(){var t=this.cache;if(!this.images_loaded||!this.nodes_loaded){setTimeout(e.proxy(this.resize,this),50);return}for(var n in t)if(t.hasOwnProperty(n)){var r=this.results(n,t[n]);r&&this.settings.directives[r.scenario[1]].call(this,r.el,r.scenario[0],function(){if(arguments[0]instanceof Array)var e=arguments[0];else var e=Array.prototype.slice.call(arguments,0);r.el.trigger(r.scenario[1],e)})}},results:function(e,t){var n=t.length;if(n>0){var r=this.S("["+this.add_namespace("data-uuid")+'="'+e+'"]');while(n--){var i,s=t[n][2];this.settings.named_queries.hasOwnProperty(s)?i=matchMedia(this.settings.named_queries[s]):i=matchMedia(s);if(i.matches)return{el:r,scenario:t[n]}}}return!1},load:function(e,t){return(typeof this["cached_"+e]=="undefined"||t)&&this["update_"+e](),this["cached_"+e]},update_images:function(){var e=this.S("img["+this.data_attr+"]"),t=e.length,n=t,r=0,i=this.data_attr;this.cache={},this.cached_images=[],this.images_loaded=t===0;while(n--){r++;if(e[n]){var s=e[n].getAttribute(i)||"";s.length>0&&this.cached_images.push(e[n])}r===t&&(this.images_loaded=!0,this.enhance("images"))}return this},update_nodes:function(){var e=this.S("["+this.data_attr+"]").not("img"),t=e.length,n=t,r=0,i=this.data_attr;this.cached_nodes=[],this.nodes_loaded=t===0;while(n--){r++;var s=e[n].getAttribute(i)||"";s.length>0&&this.cached_nodes.push(e[n]),r===t&&(this.nodes_loaded=!0,this.enhance("nodes"))}return this},enhance:function(n){var r=this["cached_"+n].length;while(r--)this.object(e(this["cached_"+n][r]));return e(t).trigger("resize").trigger("resize.fndtn.interchange")},convert_directive:function(e){var t=this.trim(e);return t.length>0?t:"replace"},parse_scenario:function(e){var t=e[0].match(/(.+),\s*(\w+)\s*$/),n=e[1];if(t)var r=t[1],i=t[2];else var s=e[0].split(/,\s*$/),r=s[0],i="";return[this.trim(r),this.convert_directive(i),this.trim(n)]},object:function(e){var t=this.parse_data_attr(e),n=[],r=t.length;if(r>0)while(r--){var i=t[r].split(/\((.*?)(\))$/);if(i.length>1){var s=this.parse_scenario(i);n.push(s)}}return this.store(e,n)},store:function(e,t){var n=this.random_str(),r=e.data(this.add_namespace("uuid",!0));return this.cache[r]?this.cache[r]:(e.attr(this.add_namespace("data-uuid"),n),this.cache[n]=t)},trim:function(t){return typeof t=="string"?e.trim(t):t},set_data_attr:function(e){return e?this.namespace.length>0?this.namespace+"-"+this.settings.load_attr:this.settings.load_attr:this.namespace.length>0?"data-"+this.namespace+"-"+this.settings.load_attr:"data-"+this.settings.load_attr},parse_data_attr:function(e){var t=e.attr(this.attr_name()).split(/\[(.*?)\]/),n=t.length,r=[];while(n--)t[n].replace(/[\W\d]+/,"").length>4&&r.push(t[n]);return r},reflow:function(){this.load("images",!0),this.load("nodes",!0)}}}(jQuery,window,window.document),function(e,t,n,r){"use strict";Foundation.libs.dropdown={name:"dropdown",version:"5.4.5",settings:{active_class:"open",mega_class:"mega",align:"bottom",is_hover:!1,opened:function(){},closed:function(){}},init:function(e,t,n){Foundation.inherit(this,"throttle"),this.bindings(t,n)},events:function(n){var r=this,i=r.S;i(this.scope).off(".dropdown").on("click.fndtn.dropdown","["+this.attr_name()+"]",function(t){var n=i(this).data(r.attr_name(!0)+"-init")||r.settings;if(!n.is_hover||Modernizr.touch)t.preventDefault(),r.toggle(e(this))}).on("mouseenter.fndtn.dropdown","["+this.attr_name()+"], ["+this.attr_name()+"-content]",function(e){var t=i(this),n,s;clearTimeout(r.timeout),t.data(r.data_attr())?(n=i("#"+t.data(r.data_attr())),s=t):(n=t,s=i("["+r.attr_name()+"='"+n.attr("id")+"']"));var o=s.data(r.attr_name(!0)+"-init")||r.settings;i(e.target).data(r.data_attr())&&o.is_hover&&r.closeall.call(r),o.is_hover&&r.open.apply(r,[n,s])}).on("mouseleave.fndtn.dropdown","["+this.attr_name()+"], ["+this.attr_name()+"-content]",function(e){var t=i(this);r.timeout=setTimeout(function(){if(t.data(r.data_attr())){var e=t.data(r.data_attr(!0)+"-init")||r.settings;e.is_hover&&r.close.call(r,i("#"+t.data(r.data_attr())))}else{var n=i("["+r.attr_name()+'="'+i(this).attr("id")+'"]'),e=n.data(r.attr_name(!0)+"-init")||r.settings;e.is_hover&&r.close.call(r,t)}}.bind(this),150)}).on("click.fndtn.dropdown",function(t){var n=i(t.target).closest("["+r.attr_name()+"-content]");if(i(t.target).closest("["+r.attr_name()+"]").length>0)return;if(!i(t.target).data("revealId")&&n.length>0&&(i(t.target).is("["+r.attr_name()+"-content]")||e.contains(n.first()[0],t.target))){t.stopPropagation();return}r.close.call(r,i("["+r.attr_name()+"-content]"))}).on("opened.fndtn.dropdown","["+r.attr_name()+"-content]",function(){r.settings.opened.call(this)}).on("closed.fndtn.dropdown","["+r.attr_name()+"-content]",function(){r.settings.closed.call(this)}),i(t).off(".dropdown").on("resize.fndtn.dropdown",r.throttle(function(){r.resize.call(r)},50)),this.resize()},close:function(t){var n=this;t.each(function(){var r=e("["+n.attr_name()+"="+t[0].id+"]")||e("aria-controls="+t[0].id+"]");r.attr("aria-expanded","false"),n.S(this).hasClass(n.settings.active_class)&&(n.S(this).css(Foundation.rtl?"right":"left","-99999px").attr("aria-hidden","true").removeClass(n.settings.active_class).prev("["+n.attr_name()+"]").removeClass(n.settings.active_class).removeData("target"),n.S(this).trigger("closed").trigger("closed.fndtn.dropdown",[t]))})},closeall:function(){var t=this;e.each(t.S("["+this.attr_name()+"-content]"),function(){t.close.call(t,t.S(this))})},open:function(e,t){this.css(e.addClass(this.settings.active_class),t),e.prev("["+this.attr_name()+"]").addClass(this.settings.active_class),e.data("target",t.get(0)).trigger("opened").trigger("opened.fndtn.dropdown",[e,t]),e.attr("aria-hidden","false"),t.attr("aria-expanded","true"),e.focus()},data_attr:function(){return this.namespace.length>0?this.namespace+"-"+this.name:this.name},toggle:function(e){var t=this.S("#"+e.data(this.data_attr()));if(t.length===0)return;this.close.call(this,this.S("["+this.attr_name()+"-content]").not(t)),t.hasClass(this.settings.active_class)?(this.close.call(this,t),t.data("target")!==e.get(0)&&this.open.call(this,t,e)):this.open.call(this,t,e)},resize:function(){var e=this.S("["+this.attr_name()+"-content].open"),t=this.S("["+this.attr_name()+"='"+e.attr("id")+"']");e.length&&t.length&&this.css(e,t)},css:function(e,t){var n=Math.max((t.width()-e.width())/2,8),r=t.data(this.attr_name(!0)+"-init")||this.settings;this.clear_idx();if(this.small()){var i=this.dirs.bottom.call(e,t,r);e.attr("style","").removeClass("drop-left drop-right drop-top").css({position:"absolute",width:"95%","max-width":"none",top:i.top}),e.css(Foundation.rtl?"right":"left",n)}else this.style(e,t,r);return e},style:function(t,n,r){var i=e.extend({position:"absolute"},this.dirs[r.align].call(t,n,r));t.attr("style","").css(i)},dirs:{_base:function(e){var t=this.offsetParent(),n=t.offset(),r=e.offset();return r.top-=n.top,r.left-=n.left,r},top:function(e,t){var n=Foundation.libs.dropdown,r=n.dirs._base.call(this,e);return this.addClass("drop-top"),(e.outerWidth()0?r(this.scope).on("open.fndtn.reveal",this.settings.open).on("opened.fndtn.reveal",this.settings.opened).on("opened.fndtn.reveal",this.open_video).on("close.fndtn.reveal",this.settings.close).on("closed.fndtn.reveal",this.settings.closed).on("closed.fndtn.reveal",this.close_video):r(this.scope).on("open.fndtn.reveal","["+t.attr_name()+"]",this.settings.open).on("opened.fndtn.reveal","["+t.attr_name()+"]",this.settings.opened).on("opened.fndtn.reveal","["+t.attr_name()+"]",this.open_video).on("close.fndtn.reveal","["+t.attr_name()+"]",this.settings.close).on("closed.fndtn.reveal","["+t.attr_name()+"]",this.settings.closed).on("closed.fndtn.reveal","["+t.attr_name()+"]",this.close_video),!0},key_up_on:function(e){var t=this;return t.S("body").off("keyup.fndtn.reveal").on("keyup.fndtn.reveal",function(e){var n=t.S("["+t.attr_name()+"].open"),r=n.data(t.attr_name(!0)+"-init")||t.settings;r&&e.which===27&&r.close_on_esc&&!t.locked&&t.close.call(t,n)}),!0},key_up_off:function(e){return this.S("body").off("keyup.fndtn.reveal"),!0},open:function(n,r){var i=this,s;n?typeof n.selector!="undefined"?s=i.S("#"+n.data(i.data_attr("reveal-id"))).first():(s=i.S(this.scope),r=n):s=i.S(this.scope);var o=s.data(i.attr_name(!0)+"-init");o=o||this.settings;if(s.hasClass("open")&&n.attr("data-reveal-id")==s.attr("id"))return i.close(s);if(!s.hasClass("open")){var u=i.S("["+i.attr_name()+"].open");typeof s.data("css-top")=="undefined"&&s.data("css-top",parseInt(s.css("top"),10)).data("offset",this.cache_offset(s)),this.key_up_on(s),s.trigger("open").trigger("open.fndtn.reveal"),u.length<1&&this.toggle_bg(s,!0),typeof r=="string"&&(r={url:r});if(typeof r=="undefined"||!r.url)u.length>0&&this.hide(u,o.css.close),this.show(s,o.css.open);else{var a=typeof r.success!="undefined"?r.success:null;e.extend(r,{success:function(t,n,r){e.isFunction(a)&&a(t,n,r),s.html(t),i.S(s).foundation("section","reflow"),i.S(s).children().foundation(),u.length>0&&i.hide(u,o.css.close),i.show(s,o.css.open)}}),e.ajax(r)}}i.S(t).trigger("resize")},close:function(e){var e=e&&e.length?e:this.S(this.scope),t=this.S("["+this.attr_name()+"].open"),n=e.data(this.attr_name(!0)+"-init")||this.settings;t.length>0&&(this.locked=!0,this.key_up_off(e),e.trigger("close").trigger("close.fndtn.reveal"),this.toggle_bg(e,!1),this.hide(t,n.css.close,n))},close_targets:function(){var e="."+this.settings.dismiss_modal_class;return this.settings.close_on_background_click?e+", ."+this.settings.bg_class:e},toggle_bg:function(t,n){this.S("."+this.settings.bg_class).length===0&&(this.settings.bg=e("
",{"class":this.settings.bg_class}).appendTo("body").hide());var i=this.settings.bg.filter(":visible").length>0;n!=i&&((n==r?i:!n)?this.hide(this.settings.bg):this.show(this.settings.bg))},show:function(n,r){if(r){var s=n.data(this.attr_name(!0)+"-init")||this.settings,o=s.root_element;if(n.parent(o).length===0){var u=n.wrap('
').parent();n.on("closed.fndtn.reveal.wrapped",function(){n.detach().appendTo(u),n.unwrap().unbind("closed.fndtn.reveal.wrapped")}),n.detach().appendTo(o)}var a=i(s.animation);a.animate||(this.locked=!1);if(a.pop){r.top=e(t).scrollTop()-n.data("offset")+"px";var f={top:e(t).scrollTop()+n.data("css-top")+"px",opacity:1};return setTimeout(function(){return n.css(r).animate(f,s.animation_speed,"linear",function(){this.locked=!1,n.trigger("opened").trigger("opened.fndtn.reveal")}.bind(this)).addClass("open")}.bind(this),s.animation_speed/2)}if(a.fade){r.top=e(t).scrollTop()+n.data("css-top")+"px";var f={opacity:1};return setTimeout(function(){return n.css(r).animate(f,s.animation_speed,"linear",function(){this.locked=!1,n.trigger("opened").trigger("opened.fndtn.reveal")}.bind(this)).addClass("open")}.bind(this),s.animation_speed/2)}return n.css(r).show().css({opacity:1}).addClass("open").trigger("opened").trigger("opened.fndtn.reveal")}var s=this.settings;return i(s.animation).fade?n.fadeIn(s.animation_speed/2):(this.locked=!1,n.show())},hide:function(n,r){if(r){var s=n.data(this.attr_name(!0)+"-init");s=s||this.settings;var o=i(s.animation);o.animate||(this.locked=!1);if(o.pop){var u={top:-e(t).scrollTop()-n.data("offset")+"px",opacity:0};return setTimeout(function(){return n.animate(u,s.animation_speed,"linear",function(){this.locked=!1,n.css(r).trigger("closed").trigger("closed.fndtn.reveal")}.bind(this)).removeClass("open")}.bind(this),s.animation_speed/2)}if(o.fade){var u={opacity:0};return setTimeout(function(){return n.animate(u,s.animation_speed,"linear",function(){this.locked=!1,n.css(r).trigger("closed").trigger("closed.fndtn.reveal")}.bind(this)).removeClass("open")}.bind(this),s.animation_speed/2)}return n.hide().css(r).removeClass("open").trigger("closed").trigger("closed.fndtn.reveal")}var s=this.settings;return i(s.animation).fade?n.fadeOut(s.animation_speed/2):n.hide()},close_video:function(t){var n=e(".flex-video",t.target),r=e("iframe",n);r.length>0&&(r.attr("data-src",r[0].src),r.attr("src",r.attr("src")),n.hide())},open_video:function(t){var n=e(".flex-video",t.target),i=n.find("iframe");if(i.length>0){var s=i.attr("data-src");if(typeof s=="string")i[0].src=i.attr("data-src");else{var o=i[0].src;i[0].src=r,i[0].src=o}n.show()}},data_attr:function(e){return this.namespace.length>0?this.namespace+"-"+e:e},cache_offset:function(e){var t=e.show().height()+parseInt(e.css("top"),10);return e.hide(),t},off:function(){e(this.scope).off(".fndtn.reveal")},reflow:function(){}}}(jQuery,window,window.document); diff --git a/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.dropdown.js b/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.dropdown.js new file mode 100644 index 000000000..252b87cae --- /dev/null +++ b/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.dropdown.js @@ -0,0 +1,322 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.dropdown = { + name : 'dropdown', + + version : '5.4.5', + + settings : { + active_class: 'open', + mega_class: 'mega', + align: 'bottom', + is_hover: false, + opened: function(){}, + closed: function(){} + }, + + init : function (scope, method, options) { + Foundation.inherit(this, 'throttle'); + + this.bindings(method, options); + }, + + events : function (scope) { + var self = this, + S = self.S; + + S(this.scope) + .off('.dropdown') + .on('click.fndtn.dropdown', '[' + this.attr_name() + ']', function (e) { + var settings = S(this).data(self.attr_name(true) + '-init') || self.settings; + if (!settings.is_hover || Modernizr.touch) { + e.preventDefault(); + self.toggle($(this)); + } + }) + .on('mouseenter.fndtn.dropdown', '[' + this.attr_name() + '], [' + this.attr_name() + '-content]', function (e) { + var $this = S(this), + dropdown, + target; + + clearTimeout(self.timeout); + + if ($this.data(self.data_attr())) { + dropdown = S('#' + $this.data(self.data_attr())); + target = $this; + } else { + dropdown = $this; + target = S("[" + self.attr_name() + "='" + dropdown.attr('id') + "']"); + } + + var settings = target.data(self.attr_name(true) + '-init') || self.settings; + + if(S(e.target).data(self.data_attr()) && settings.is_hover) { + self.closeall.call(self); + } + + if (settings.is_hover) self.open.apply(self, [dropdown, target]); + }) + .on('mouseleave.fndtn.dropdown', '[' + this.attr_name() + '], [' + this.attr_name() + '-content]', function (e) { + var $this = S(this); + self.timeout = setTimeout(function () { + if ($this.data(self.data_attr())) { + var settings = $this.data(self.data_attr(true) + '-init') || self.settings; + if (settings.is_hover) self.close.call(self, S('#' + $this.data(self.data_attr()))); + } else { + var target = S('[' + self.attr_name() + '="' + S(this).attr('id') + '"]'), + settings = target.data(self.attr_name(true) + '-init') || self.settings; + if (settings.is_hover) self.close.call(self, $this); + } + }.bind(this), 150); + }) + .on('click.fndtn.dropdown', function (e) { + var parent = S(e.target).closest('[' + self.attr_name() + '-content]'); + + if (S(e.target).closest('[' + self.attr_name() + ']').length > 0) { + return; + } + if (!(S(e.target).data('revealId')) && + (parent.length > 0 && (S(e.target).is('[' + self.attr_name() + '-content]') || + $.contains(parent.first()[0], e.target)))) { + e.stopPropagation(); + return; + } + + self.close.call(self, S('[' + self.attr_name() + '-content]')); + }) + .on('opened.fndtn.dropdown', '[' + self.attr_name() + '-content]', function () { + self.settings.opened.call(this); + }) + .on('closed.fndtn.dropdown', '[' + self.attr_name() + '-content]', function () { + self.settings.closed.call(this); + }); + + S(window) + .off('.dropdown') + .on('resize.fndtn.dropdown', self.throttle(function () { + self.resize.call(self); + }, 50)); + + this.resize(); + }, + + close: function (dropdown) { + var self = this; + dropdown.each(function () { + var original_target = $('[' + self.attr_name() + '=' + dropdown[0].id + ']') || $('aria-controls=' + dropdown[0].id+ ']'); + original_target.attr('aria-expanded', "false"); + if (self.S(this).hasClass(self.settings.active_class)) { + self.S(this) + .css(Foundation.rtl ? 'right':'left', '-99999px') + .attr('aria-hidden', "true") + .removeClass(self.settings.active_class) + .prev('[' + self.attr_name() + ']') + .removeClass(self.settings.active_class) + .removeData('target'); + + self.S(this).trigger('closed').trigger('closed.fndtn.dropdown', [dropdown]); + } + }); + }, + + closeall: function() { + var self = this; + $.each(self.S('[' + this.attr_name() + '-content]'), function() { + self.close.call(self, self.S(this)); + }); + }, + + open: function (dropdown, target) { + this + .css(dropdown + .addClass(this.settings.active_class), target); + dropdown.prev('[' + this.attr_name() + ']').addClass(this.settings.active_class); + dropdown.data('target', target.get(0)).trigger('opened').trigger('opened.fndtn.dropdown', [dropdown, target]); + dropdown.attr('aria-hidden', 'false'); + target.attr('aria-expanded', 'true'); + dropdown.focus(); + }, + + data_attr: function () { + if (this.namespace.length > 0) { + return this.namespace + '-' + this.name; + } + + return this.name; + }, + + toggle : function (target) { + var dropdown = this.S('#' + target.data(this.data_attr())); + if (dropdown.length === 0) { + // No dropdown found, not continuing + return; + } + + this.close.call(this, this.S('[' + this.attr_name() + '-content]').not(dropdown)); + + if (dropdown.hasClass(this.settings.active_class)) { + this.close.call(this, dropdown); + if (dropdown.data('target') !== target.get(0)) + this.open.call(this, dropdown, target); + } else { + this.open.call(this, dropdown, target); + } + }, + + resize : function () { + var dropdown = this.S('[' + this.attr_name() + '-content].open'), + target = this.S("[" + this.attr_name() + "='" + dropdown.attr('id') + "']"); + + if (dropdown.length && target.length) { + this.css(dropdown, target); + } + }, + + css : function (dropdown, target) { + var left_offset = Math.max((target.width() - dropdown.width()) / 2, 8), + settings = target.data(this.attr_name(true) + '-init') || this.settings; + + this.clear_idx(); + + if (this.small()) { + var p = this.dirs.bottom.call(dropdown, target, settings); + + dropdown.attr('style', '').removeClass('drop-left drop-right drop-top').css({ + position : 'absolute', + width: '95%', + 'max-width': 'none', + top: p.top + }); + + dropdown.css(Foundation.rtl ? 'right':'left', left_offset); + } else { + + this.style(dropdown, target, settings); + } + + return dropdown; + }, + + style : function (dropdown, target, settings) { + var css = $.extend({position: 'absolute'}, + this.dirs[settings.align].call(dropdown, target, settings)); + + dropdown.attr('style', '').css(css); + }, + + // return CSS property object + // `this` is the dropdown + dirs : { + // Calculate target offset + _base : function (t) { + var o_p = this.offsetParent(), + o = o_p.offset(), + p = t.offset(); + + p.top -= o.top; + p.left -= o.left; + + return p; + }, + top: function (t, s) { + var self = Foundation.libs.dropdown, + p = self.dirs._base.call(this, t); + + this.addClass('drop-top'); + + if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) { + self.adjust_pip(this,t,s,p); + } + + if (Foundation.rtl) { + return {left: p.left - this.outerWidth() + t.outerWidth(), + top: p.top - this.outerHeight()}; + } + + return {left: p.left, top: p.top - this.outerHeight()}; + }, + bottom: function (t,s) { + var self = Foundation.libs.dropdown, + p = self.dirs._base.call(this, t); + + if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) { + self.adjust_pip(this,t,s,p); + } + + if (self.rtl) { + return {left: p.left - this.outerWidth() + t.outerWidth(), top: p.top + t.outerHeight()}; + } + + return {left: p.left, top: p.top + t.outerHeight()}; + }, + left: function (t, s) { + var p = Foundation.libs.dropdown.dirs._base.call(this, t); + + this.addClass('drop-left'); + + return {left: p.left - this.outerWidth(), top: p.top}; + }, + right: function (t, s) { + var p = Foundation.libs.dropdown.dirs._base.call(this, t); + + this.addClass('drop-right'); + + return {left: p.left + t.outerWidth(), top: p.top}; + } + }, + + // Insert rule to style psuedo elements + adjust_pip : function (dropdown,target,settings,position) { + var sheet = Foundation.stylesheet, + pip_offset_base = 8; + + if (dropdown.hasClass(settings.mega_class)) { + pip_offset_base = position.left + (target.outerWidth()/2) - 8; + } + else if (this.small()) { + pip_offset_base += position.left - 8; + } + + this.rule_idx = sheet.cssRules.length; + + var sel_before = '.f-dropdown.open:before', + sel_after = '.f-dropdown.open:after', + css_before = 'left: ' + pip_offset_base + 'px;', + css_after = 'left: ' + (pip_offset_base - 1) + 'px;'; + + if (sheet.insertRule) { + sheet.insertRule([sel_before, '{', css_before, '}'].join(' '), this.rule_idx); + sheet.insertRule([sel_after, '{', css_after, '}'].join(' '), this.rule_idx + 1); + } else { + sheet.addRule(sel_before, css_before, this.rule_idx); + sheet.addRule(sel_after, css_after, this.rule_idx + 1); + } + }, + + // Remove old dropdown rule index + clear_idx : function () { + var sheet = Foundation.stylesheet; + + if (this.rule_idx) { + sheet.deleteRule(this.rule_idx); + sheet.deleteRule(this.rule_idx); + delete this.rule_idx; + } + }, + + small : function () { + return matchMedia(Foundation.media_queries.small).matches && + !matchMedia(Foundation.media_queries.medium).matches; + }, + + off: function () { + this.S(this.scope).off('.fndtn.dropdown'); + this.S('html, body').off('.fndtn.dropdown'); + this.S(window).off('.fndtn.dropdown'); + this.S('[data-dropdown-content]').off('.fndtn.dropdown'); + }, + + reflow : function () {} + }; +}(jQuery, window, window.document)); diff --git a/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.dropdown.min.js b/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.dropdown.min.js new file mode 100644 index 000000000..b146fb132 --- /dev/null +++ b/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.dropdown.min.js @@ -0,0 +1 @@ +!function(t,e){"use strict";Foundation.libs.dropdown={name:"dropdown",version:"5.4.5",settings:{active_class:"open",mega_class:"mega",align:"bottom",is_hover:!1,opened:function(){},closed:function(){}},init:function(t,e,i){Foundation.inherit(this,"throttle"),this.bindings(e,i)},events:function(){var i=this,a=i.S;a(this.scope).off(".dropdown").on("click.fndtn.dropdown","["+this.attr_name()+"]",function(e){var n=a(this).data(i.attr_name(!0)+"-init")||i.settings;(!n.is_hover||Modernizr.touch)&&(e.preventDefault(),i.toggle(t(this)))}).on("mouseenter.fndtn.dropdown","["+this.attr_name()+"], ["+this.attr_name()+"-content]",function(t){var e,n,s=a(this);clearTimeout(i.timeout),s.data(i.data_attr())?(e=a("#"+s.data(i.data_attr())),n=s):(e=s,n=a("["+i.attr_name()+"='"+e.attr("id")+"']"));var o=n.data(i.attr_name(!0)+"-init")||i.settings;a(t.target).data(i.data_attr())&&o.is_hover&&i.closeall.call(i),o.is_hover&&i.open.apply(i,[e,n])}).on("mouseleave.fndtn.dropdown","["+this.attr_name()+"], ["+this.attr_name()+"-content]",function(){var t=a(this);i.timeout=setTimeout(function(){if(t.data(i.data_attr())){var e=t.data(i.data_attr(!0)+"-init")||i.settings;e.is_hover&&i.close.call(i,a("#"+t.data(i.data_attr())))}else{var n=a("["+i.attr_name()+'="'+a(this).attr("id")+'"]'),e=n.data(i.attr_name(!0)+"-init")||i.settings;e.is_hover&&i.close.call(i,t)}}.bind(this),150)}).on("click.fndtn.dropdown",function(e){var n=a(e.target).closest("["+i.attr_name()+"-content]");if(!(a(e.target).closest("["+i.attr_name()+"]").length>0))return!a(e.target).data("revealId")&&n.length>0&&(a(e.target).is("["+i.attr_name()+"-content]")||t.contains(n.first()[0],e.target))?void e.stopPropagation():void i.close.call(i,a("["+i.attr_name()+"-content]"))}).on("opened.fndtn.dropdown","["+i.attr_name()+"-content]",function(){i.settings.opened.call(this)}).on("closed.fndtn.dropdown","["+i.attr_name()+"-content]",function(){i.settings.closed.call(this)}),a(e).off(".dropdown").on("resize.fndtn.dropdown",i.throttle(function(){i.resize.call(i)},50)),this.resize()},close:function(e){var i=this;e.each(function(){var a=t("["+i.attr_name()+"="+e[0].id+"]")||t("aria-controls="+e[0].id+"]");a.attr("aria-expanded","false"),i.S(this).hasClass(i.settings.active_class)&&(i.S(this).css(Foundation.rtl?"right":"left","-99999px").attr("aria-hidden","true").removeClass(i.settings.active_class).prev("["+i.attr_name()+"]").removeClass(i.settings.active_class).removeData("target"),i.S(this).trigger("closed").trigger("closed.fndtn.dropdown",[e]))})},closeall:function(){var e=this;t.each(e.S("["+this.attr_name()+"-content]"),function(){e.close.call(e,e.S(this))})},open:function(t,e){this.css(t.addClass(this.settings.active_class),e),t.prev("["+this.attr_name()+"]").addClass(this.settings.active_class),t.data("target",e.get(0)).trigger("opened").trigger("opened.fndtn.dropdown",[t,e]),t.attr("aria-hidden","false"),e.attr("aria-expanded","true"),t.focus()},data_attr:function(){return this.namespace.length>0?this.namespace+"-"+this.name:this.name},toggle:function(t){var e=this.S("#"+t.data(this.data_attr()));0!==e.length&&(this.close.call(this,this.S("["+this.attr_name()+"-content]").not(e)),e.hasClass(this.settings.active_class)?(this.close.call(this,e),e.data("target")!==t.get(0)&&this.open.call(this,e,t)):this.open.call(this,e,t))},resize:function(){var t=this.S("["+this.attr_name()+"-content].open"),e=this.S("["+this.attr_name()+"='"+t.attr("id")+"']");t.length&&e.length&&this.css(t,e)},css:function(t,e){var i=Math.max((e.width()-t.width())/2,8),a=e.data(this.attr_name(!0)+"-init")||this.settings;if(this.clear_idx(),this.small()){var n=this.dirs.bottom.call(t,e,a);t.attr("style","").removeClass("drop-left drop-right drop-top").css({position:"absolute",width:"95%","max-width":"none",top:n.top}),t.css(Foundation.rtl?"right":"left",i)}else this.style(t,e,a);return t},style:function(e,i,a){var n=t.extend({position:"absolute"},this.dirs[a.align].call(e,i,a));e.attr("style","").css(n)},dirs:{_base:function(t){var e=this.offsetParent(),i=e.offset(),a=t.offset();return a.top-=i.top,a.left-=i.left,a},top:function(t,e){var i=Foundation.libs.dropdown,a=i.dirs._base.call(this,t);return this.addClass("drop-top"),(t.outerWidth() 0) { + var el = this.S('[' + this.add_namespace('data-uuid') + '="' + uuid + '"]'); + + while (count--) { + var mq, rule = scenarios[count][2]; + if (this.settings.named_queries.hasOwnProperty(rule)) { + mq = matchMedia(this.settings.named_queries[rule]); + } else { + mq = matchMedia(rule); + } + if (mq.matches) { + return {el: el, scenario: scenarios[count]}; + } + } + } + + return false; + }, + + load : function (type, force_update) { + if (typeof this['cached_' + type] === 'undefined' || force_update) { + this['update_' + type](); + } + + return this['cached_' + type]; + }, + + update_images : function () { + var images = this.S('img[' + this.data_attr + ']'), + count = images.length, + i = count, + loaded_count = 0, + data_attr = this.data_attr; + + this.cache = {}; + this.cached_images = []; + this.images_loaded = (count === 0); + + while (i--) { + loaded_count++; + if (images[i]) { + var str = images[i].getAttribute(data_attr) || ''; + + if (str.length > 0) { + this.cached_images.push(images[i]); + } + } + + if (loaded_count === count) { + this.images_loaded = true; + this.enhance('images'); + } + } + + return this; + }, + + update_nodes : function () { + var nodes = this.S('[' + this.data_attr + ']').not('img'), + count = nodes.length, + i = count, + loaded_count = 0, + data_attr = this.data_attr; + + this.cached_nodes = []; + this.nodes_loaded = (count === 0); + + + while (i--) { + loaded_count++; + var str = nodes[i].getAttribute(data_attr) || ''; + + if (str.length > 0) { + this.cached_nodes.push(nodes[i]); + } + + if(loaded_count === count) { + this.nodes_loaded = true; + this.enhance('nodes'); + } + } + + return this; + }, + + enhance : function (type) { + var i = this['cached_' + type].length; + + while (i--) { + this.object($(this['cached_' + type][i])); + } + + return $(window).trigger('resize').trigger('resize.fndtn.interchange'); + }, + + convert_directive : function (directive) { + + var trimmed = this.trim(directive); + + if (trimmed.length > 0) { + return trimmed; + } + + return 'replace'; + }, + + parse_scenario : function (scenario) { + // This logic had to be made more complex since some users were using commas in the url path + // So we cannot simply just split on a comma + var directive_match = scenario[0].match(/(.+),\s*(\w+)\s*$/), + media_query = scenario[1]; + + if (directive_match) { + var path = directive_match[1], + directive = directive_match[2]; + } + else { + var cached_split = scenario[0].split(/,\s*$/), + path = cached_split[0], + directive = ''; + } + + return [this.trim(path), this.convert_directive(directive), this.trim(media_query)]; + }, + + object : function(el) { + var raw_arr = this.parse_data_attr(el), + scenarios = [], + i = raw_arr.length; + + if (i > 0) { + while (i--) { + var split = raw_arr[i].split(/\((.*?)(\))$/); + + if (split.length > 1) { + var params = this.parse_scenario(split); + scenarios.push(params); + } + } + } + + return this.store(el, scenarios); + }, + + store : function (el, scenarios) { + var uuid = this.random_str(), + current_uuid = el.data(this.add_namespace('uuid', true)); + + if (this.cache[current_uuid]) return this.cache[current_uuid]; + + el.attr(this.add_namespace('data-uuid'), uuid); + + return this.cache[uuid] = scenarios; + }, + + trim : function(str) { + + if (typeof str === 'string') { + return $.trim(str); + } + + return str; + }, + + set_data_attr: function (init) { + if (init) { + if (this.namespace.length > 0) { + return this.namespace + '-' + this.settings.load_attr; + } + + return this.settings.load_attr; + } + + if (this.namespace.length > 0) { + return 'data-' + this.namespace + '-' + this.settings.load_attr; + } + + return 'data-' + this.settings.load_attr; + }, + + parse_data_attr : function (el) { + var raw = el.attr(this.attr_name()).split(/\[(.*?)\]/), + i = raw.length, + output = []; + + while (i--) { + if (raw[i].replace(/[\W\d]+/, '').length > 4) { + output.push(raw[i]); + } + } + + return output; + }, + + reflow : function () { + this.load('images', true); + this.load('nodes', true); + } + + }; + +}(jQuery, window, window.document)); diff --git a/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.interchange.min.js b/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.interchange.min.js new file mode 100644 index 000000000..adfd598d7 --- /dev/null +++ b/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.interchange.min.js @@ -0,0 +1 @@ +!function(t,e){"use strict";Foundation.libs.interchange={name:"interchange",version:"5.4.5",cache:{},images_loaded:!1,nodes_loaded:!1,settings:{load_attr:"interchange",named_queries:{"default":"only screen",small:Foundation.media_queries.small,medium:Foundation.media_queries.medium,large:Foundation.media_queries.large,xlarge:Foundation.media_queries.xlarge,xxlarge:Foundation.media_queries.xxlarge,landscape:"only screen and (orientation: landscape)",portrait:"only screen and (orientation: portrait)",retina:"only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx)"},directives:{replace:function(e,i,a){if(/IMG/.test(e[0].nodeName)){var n=e[0].src;if(new RegExp(i,"i").test(n))return;return e[0].src=i,a(e[0].src)}var s=e.data(this.data_attr+"-last-path"),r=this;if(s!=i)return/\.(gif|jpg|jpeg|tiff|png)([?#].*)?/i.test(i)?(t(e).css("background-image","url("+i+")"),e.data("interchange-last-path",i),a(i)):t.get(i,function(t){e.html(t),e.data(r.data_attr+"-last-path",i),a()})}}},init:function(e,i,a){Foundation.inherit(this,"throttle random_str"),this.data_attr=this.set_data_attr(),t.extend(!0,this.settings,i,a),this.bindings(i,a),this.load("images"),this.load("nodes")},get_media_hash:function(){var t="";for(var e in this.settings.named_queries)t+=matchMedia(this.settings.named_queries[e]).matches.toString();return t},events:function(){var i,a=this;return t(e).off(".interchange").on("resize.fndtn.interchange",a.throttle(function(){var t=a.get_media_hash();t!==i&&a.resize(),i=t},50)),this},resize:function(){var e=this.cache;if(!this.images_loaded||!this.nodes_loaded)return void setTimeout(t.proxy(this.resize,this),50);for(var i in e)if(e.hasOwnProperty(i)){var a=this.results(i,e[i]);a&&this.settings.directives[a.scenario[1]].call(this,a.el,a.scenario[0],function(){if(arguments[0]instanceof Array)var t=arguments[0];else var t=Array.prototype.slice.call(arguments,0);a.el.trigger(a.scenario[1],t)})}},results:function(t,e){var i=e.length;if(i>0)for(var a=this.S("["+this.add_namespace("data-uuid")+'="'+t+'"]');i--;){var n,s=e[i][2];if(n=matchMedia(this.settings.named_queries.hasOwnProperty(s)?this.settings.named_queries[s]:s),n.matches)return{el:a,scenario:e[i]}}return!1},load:function(t,e){return("undefined"==typeof this["cached_"+t]||e)&&this["update_"+t](),this["cached_"+t]},update_images:function(){var t=this.S("img["+this.data_attr+"]"),e=t.length,i=e,a=0,n=this.data_attr;for(this.cache={},this.cached_images=[],this.images_loaded=0===e;i--;){if(a++,t[i]){var s=t[i].getAttribute(n)||"";s.length>0&&this.cached_images.push(t[i])}a===e&&(this.images_loaded=!0,this.enhance("images"))}return this},update_nodes:function(){var t=this.S("["+this.data_attr+"]").not("img"),e=t.length,i=e,a=0,n=this.data_attr;for(this.cached_nodes=[],this.nodes_loaded=0===e;i--;){a++;var s=t[i].getAttribute(n)||"";s.length>0&&this.cached_nodes.push(t[i]),a===e&&(this.nodes_loaded=!0,this.enhance("nodes"))}return this},enhance:function(i){for(var a=this["cached_"+i].length;a--;)this.object(t(this["cached_"+i][a]));return t(e).trigger("resize").trigger("resize.fndtn.interchange")},convert_directive:function(t){var e=this.trim(t);return e.length>0?e:"replace"},parse_scenario:function(t){var e=t[0].match(/(.+),\s*(\w+)\s*$/),i=t[1];if(e)var a=e[1],n=e[2];else var s=t[0].split(/,\s*$/),a=s[0],n="";return[this.trim(a),this.convert_directive(n),this.trim(i)]},object:function(t){var e=this.parse_data_attr(t),i=[],a=e.length;if(a>0)for(;a--;){var n=e[a].split(/\((.*?)(\))$/);if(n.length>1){var s=this.parse_scenario(n);i.push(s)}}return this.store(t,i)},store:function(t,e){var i=this.random_str(),a=t.data(this.add_namespace("uuid",!0));return this.cache[a]?this.cache[a]:(t.attr(this.add_namespace("data-uuid"),i),this.cache[i]=e)},trim:function(e){return"string"==typeof e?t.trim(e):e},set_data_attr:function(t){return t?this.namespace.length>0?this.namespace+"-"+this.settings.load_attr:this.settings.load_attr:this.namespace.length>0?"data-"+this.namespace+"-"+this.settings.load_attr:"data-"+this.settings.load_attr},parse_data_attr:function(t){for(var e=t.attr(this.attr_name()).split(/\[(.*?)\]/),i=e.length,a=[];i--;)e[i].replace(/[\W\d]+/,"").length>4&&a.push(e[i]);return a},reflow:function(){this.load("images",!0),this.load("nodes",!0)}}}(jQuery,window,window.document); \ No newline at end of file diff --git a/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.js b/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.js new file mode 100644 index 000000000..920409b8a --- /dev/null +++ b/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.js @@ -0,0 +1,625 @@ +/* + * Foundation Responsive Library + * http://foundation.zurb.com + * Copyright 2014, ZURB + * Free to use under the MIT license. + * http://www.opensource.org/licenses/mit-license.php +*/ + +(function ($, window, document, undefined) { + 'use strict'; + + var header_helpers = function (class_array) { + var i = class_array.length; + var head = $('head'); + + while (i--) { + if(head.has('.' + class_array[i]).length === 0) { + head.append(''); + } + } + }; + + header_helpers([ + 'foundation-mq-small', + 'foundation-mq-medium', + 'foundation-mq-large', + 'foundation-mq-xlarge', + 'foundation-mq-xxlarge', + 'foundation-data-attribute-namespace']); + + // Enable FastClick if present + + $(function() { + if (typeof FastClick !== 'undefined') { + // Don't attach to body if undefined + if (typeof document.body !== 'undefined') { + FastClick.attach(document.body); + } + } + }); + + // private Fast Selector wrapper, + // returns jQuery object. Only use where + // getElementById is not available. + var S = function (selector, context) { + if (typeof selector === 'string') { + if (context) { + var cont; + if (context.jquery) { + cont = context[0]; + if (!cont) return context; + } else { + cont = context; + } + return $(cont.querySelectorAll(selector)); + } + + return $(document.querySelectorAll(selector)); + } + + return $(selector, context); + }; + + // Namespace functions. + + var attr_name = function (init) { + var arr = []; + if (!init) arr.push('data'); + if (this.namespace.length > 0) arr.push(this.namespace); + arr.push(this.name); + + return arr.join('-'); + }; + + var add_namespace = function (str) { + var parts = str.split('-'), + i = parts.length, + arr = []; + + while (i--) { + if (i !== 0) { + arr.push(parts[i]); + } else { + if (this.namespace.length > 0) { + arr.push(this.namespace, parts[i]); + } else { + arr.push(parts[i]); + } + } + } + + return arr.reverse().join('-'); + }; + + // Event binding and data-options updating. + + var bindings = function (method, options) { + var self = this, + should_bind_events = !S(this).data(this.attr_name(true)); + + + if (S(this.scope).is('[' + this.attr_name() +']')) { + S(this.scope).data(this.attr_name(true) + '-init', $.extend({}, this.settings, (options || method), this.data_options(S(this.scope)))); + + if (should_bind_events) { + this.events(this.scope); + } + + } else { + S('[' + this.attr_name() +']', this.scope).each(function () { + var should_bind_events = !S(this).data(self.attr_name(true) + '-init'); + S(this).data(self.attr_name(true) + '-init', $.extend({}, self.settings, (options || method), self.data_options(S(this)))); + + if (should_bind_events) { + self.events(this); + } + }); + } + // # Patch to fix #5043 to move this *after* the if/else clause in order for Backbone and similar frameworks to have improved control over event binding and data-options updating. + if (typeof method === 'string') { + return this[method].call(this, options); + } + + }; + + var single_image_loaded = function (image, callback) { + function loaded () { + callback(image[0]); + } + + function bindLoad () { + this.one('load', loaded); + + if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { + var src = this.attr( 'src' ), + param = src.match( /\?/ ) ? '&' : '?'; + + param += 'random=' + (new Date()).getTime(); + this.attr('src', src + param); + } + } + + if (!image.attr('src')) { + loaded(); + return; + } + + if (image[0].complete || image[0].readyState === 4) { + loaded(); + } else { + bindLoad.call(image); + } + }; + + /* + https://github.com/paulirish/matchMedia.js + */ + + window.matchMedia = window.matchMedia || (function( doc ) { + + "use strict"; + + var bool, + docElem = doc.documentElement, + refNode = docElem.firstElementChild || docElem.firstChild, + // fakeBody required for + fakeBody = doc.createElement( "body" ), + div = doc.createElement( "div" ); + + div.id = "mq-test-1"; + div.style.cssText = "position:absolute;top:-100em"; + fakeBody.style.background = "none"; + fakeBody.appendChild(div); + + return function (q) { + + div.innerHTML = "­"; + + docElem.insertBefore( fakeBody, refNode ); + bool = div.offsetWidth === 42; + docElem.removeChild( fakeBody ); + + return { + matches: bool, + media: q + }; + + }; + + }( document )); + + /* + * jquery.requestAnimationFrame + * https://github.com/gnarf37/jquery-requestAnimationFrame + * Requires jQuery 1.8+ + * + * Copyright (c) 2012 Corey Frang + * Licensed under the MIT license. + */ + + (function($) { + + // requestAnimationFrame polyfill adapted from Erik Möller + // fixes from Paul Irish and Tino Zijdel + // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ + // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating + + var animating, + lastTime = 0, + vendors = ['webkit', 'moz'], + requestAnimationFrame = window.requestAnimationFrame, + cancelAnimationFrame = window.cancelAnimationFrame, + jqueryFxAvailable = 'undefined' !== typeof jQuery.fx; + + for (; lastTime < vendors.length && !requestAnimationFrame; lastTime++) { + requestAnimationFrame = window[ vendors[lastTime] + "RequestAnimationFrame" ]; + cancelAnimationFrame = cancelAnimationFrame || + window[ vendors[lastTime] + "CancelAnimationFrame" ] || + window[ vendors[lastTime] + "CancelRequestAnimationFrame" ]; + } + + function raf() { + if (animating) { + requestAnimationFrame(raf); + + if (jqueryFxAvailable) { + jQuery.fx.tick(); + } + } + } + + if (requestAnimationFrame) { + // use rAF + window.requestAnimationFrame = requestAnimationFrame; + window.cancelAnimationFrame = cancelAnimationFrame; + + if (jqueryFxAvailable) { + jQuery.fx.timer = function (timer) { + if (timer() && jQuery.timers.push(timer) && !animating) { + animating = true; + raf(); + } + }; + + jQuery.fx.stop = function () { + animating = false; + }; + } + } else { + // polyfill + window.requestAnimationFrame = function (callback) { + var currTime = new Date().getTime(), + timeToCall = Math.max(0, 16 - (currTime - lastTime)), + id = window.setTimeout(function () { + callback(currTime + timeToCall); + }, timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + + window.cancelAnimationFrame = function (id) { + clearTimeout(id); + }; + + } + + }( jQuery )); + + + function removeQuotes (string) { + if (typeof string === 'string' || string instanceof String) { + string = string.replace(/^['\\/"]+|(;\s?})+|['\\/"]+$/g, ''); + } + + return string; + } + + window.Foundation = { + name : 'Foundation', + + version : '5.4.5', + + media_queries : { + small : S('.foundation-mq-small').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + medium : S('.foundation-mq-medium').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + large : S('.foundation-mq-large').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + xlarge: S('.foundation-mq-xlarge').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + xxlarge: S('.foundation-mq-xxlarge').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, '') + }, + + stylesheet : $('').appendTo('head')[0].sheet, + + global: { + namespace: undefined + }, + + init : function (scope, libraries, method, options, response) { + var args = [scope, method, options, response], + responses = []; + + // check RTL + this.rtl = /rtl/i.test(S('html').attr('dir')); + + // set foundation global scope + this.scope = scope || this.scope; + + this.set_namespace(); + + if (libraries && typeof libraries === 'string' && !/reflow/i.test(libraries)) { + if (this.libs.hasOwnProperty(libraries)) { + responses.push(this.init_lib(libraries, args)); + } + } else { + for (var lib in this.libs) { + responses.push(this.init_lib(lib, libraries)); + } + } + + S(window).load(function(){ + S(window) + .trigger('resize.fndtn.clearing') + .trigger('resize.fndtn.dropdown') + .trigger('resize.fndtn.equalizer') + .trigger('resize.fndtn.interchange') + .trigger('resize.fndtn.joyride') + .trigger('resize.fndtn.magellan') + .trigger('resize.fndtn.topbar') + .trigger('resize.fndtn.slider'); + }); + + return scope; + }, + + init_lib : function (lib, args) { + if (this.libs.hasOwnProperty(lib)) { + this.patch(this.libs[lib]); + + if (args && args.hasOwnProperty(lib)) { + if (typeof this.libs[lib].settings !== 'undefined') { + $.extend(true, this.libs[lib].settings, args[lib]); + } + else if (typeof this.libs[lib].defaults !== 'undefined') { + $.extend(true, this.libs[lib].defaults, args[lib]); + } + return this.libs[lib].init.apply(this.libs[lib], [this.scope, args[lib]]); + } + + args = args instanceof Array ? args : new Array(args); // PATCH: added this line + return this.libs[lib].init.apply(this.libs[lib], args); + } + + return function () {}; + }, + + patch : function (lib) { + lib.scope = this.scope; + lib.namespace = this.global.namespace; + lib.rtl = this.rtl; + lib['data_options'] = this.utils.data_options; + lib['attr_name'] = attr_name; + lib['add_namespace'] = add_namespace; + lib['bindings'] = bindings; + lib['S'] = this.utils.S; + }, + + inherit : function (scope, methods) { + var methods_arr = methods.split(' '), + i = methods_arr.length; + + while (i--) { + if (this.utils.hasOwnProperty(methods_arr[i])) { + scope[methods_arr[i]] = this.utils[methods_arr[i]]; + } + } + }, + + set_namespace: function () { + + // Description: + // Don't bother reading the namespace out of the meta tag + // if the namespace has been set globally in javascript + // + // Example: + // Foundation.global.namespace = 'my-namespace'; + // or make it an empty string: + // Foundation.global.namespace = ''; + // + // + + // If the namespace has not been set (is undefined), try to read it out of the meta element. + // Otherwise use the globally defined namespace, even if it's empty ('') + var namespace = ( this.global.namespace === undefined ) ? $('.foundation-data-attribute-namespace').css('font-family') : this.global.namespace; + + // Finally, if the namsepace is either undefined or false, set it to an empty string. + // Otherwise use the namespace value. + this.global.namespace = ( namespace === undefined || /false/i.test(namespace) ) ? '' : namespace; + }, + + libs : {}, + + // methods that can be inherited in libraries + utils : { + + // Description: + // Fast Selector wrapper returns jQuery object. Only use where getElementById + // is not available. + // + // Arguments: + // Selector (String): CSS selector describing the element(s) to be + // returned as a jQuery object. + // + // Scope (String): CSS selector describing the area to be searched. Default + // is document. + // + // Returns: + // Element (jQuery Object): jQuery object containing elements matching the + // selector within the scope. + S : S, + + // Description: + // Executes a function a max of once every n milliseconds + // + // Arguments: + // Func (Function): Function to be throttled. + // + // Delay (Integer): Function execution threshold in milliseconds. + // + // Returns: + // Lazy_function (Function): Function with throttling applied. + throttle : function (func, delay) { + var timer = null; + + return function () { + var context = this, args = arguments; + + if (timer == null) { + timer = setTimeout(function () { + func.apply(context, args); + timer = null; + }, delay); + } + }; + }, + + // Description: + // Executes a function when it stops being invoked for n seconds + // Modified version of _.debounce() http://underscorejs.org + // + // Arguments: + // Func (Function): Function to be debounced. + // + // Delay (Integer): Function execution threshold in milliseconds. + // + // Immediate (Bool): Whether the function should be called at the beginning + // of the delay instead of the end. Default is false. + // + // Returns: + // Lazy_function (Function): Function with debouncing applied. + debounce : function (func, delay, immediate) { + var timeout, result; + return function () { + var context = this, args = arguments; + var later = function () { + timeout = null; + if (!immediate) result = func.apply(context, args); + }; + var callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, delay); + if (callNow) result = func.apply(context, args); + return result; + }; + }, + + // Description: + // Parses data-options attribute + // + // Arguments: + // El (jQuery Object): Element to be parsed. + // + // Returns: + // Options (Javascript Object): Contents of the element's data-options + // attribute. + data_options : function (el, data_attr_name) { + data_attr_name = data_attr_name || 'options'; + var opts = {}, ii, p, opts_arr, + data_options = function (el) { + var namespace = Foundation.global.namespace; + + if (namespace.length > 0) { + return el.data(namespace + '-' + data_attr_name); + } + + return el.data(data_attr_name); + }; + + var cached_options = data_options(el); + + if (typeof cached_options === 'object') { + return cached_options; + } + + opts_arr = (cached_options || ':').split(';'); + ii = opts_arr.length; + + function isNumber (o) { + return ! isNaN (o-0) && o !== null && o !== "" && o !== false && o !== true; + } + + function trim (str) { + if (typeof str === 'string') return $.trim(str); + return str; + } + + while (ii--) { + p = opts_arr[ii].split(':'); + p = [p[0], p.slice(1).join(':')]; + + if (/true/i.test(p[1])) p[1] = true; + if (/false/i.test(p[1])) p[1] = false; + if (isNumber(p[1])) { + if (p[1].indexOf('.') === -1) { + p[1] = parseInt(p[1], 10); + } else { + p[1] = parseFloat(p[1]); + } + } + + if (p.length === 2 && p[0].length > 0) { + opts[trim(p[0])] = trim(p[1]); + } + } + + return opts; + }, + + // Description: + // Adds JS-recognizable media queries + // + // Arguments: + // Media (String): Key string for the media query to be stored as in + // Foundation.media_queries + // + // Class (String): Class name for the generated tag + register_media : function (media, media_class) { + if(Foundation.media_queries[media] === undefined) { + $('head').append(''); + Foundation.media_queries[media] = removeQuotes($('.' + media_class).css('font-family')); + } + }, + + // Description: + // Add custom CSS within a JS-defined media query + // + // Arguments: + // Rule (String): CSS rule to be appended to the document. + // + // Media (String): Optional media query string for the CSS rule to be + // nested under. + add_custom_rule : function (rule, media) { + if (media === undefined && Foundation.stylesheet) { + Foundation.stylesheet.insertRule(rule, Foundation.stylesheet.cssRules.length); + } else { + var query = Foundation.media_queries[media]; + + if (query !== undefined) { + Foundation.stylesheet.insertRule('@media ' + + Foundation.media_queries[media] + '{ ' + rule + ' }'); + } + } + }, + + // Description: + // Performs a callback function when an image is fully loaded + // + // Arguments: + // Image (jQuery Object): Image(s) to check if loaded. + // + // Callback (Function): Function to execute when image is fully loaded. + image_loaded : function (images, callback) { + var self = this, + unloaded = images.length; + + if (unloaded === 0) { + callback(images); + } + + images.each(function () { + single_image_loaded(self.S(this), function () { + unloaded -= 1; + if (unloaded === 0) { + callback(images); + } + }); + }); + }, + + // Description: + // Returns a random, alphanumeric string + // + // Arguments: + // Length (Integer): Length of string to be generated. Defaults to random + // integer. + // + // Returns: + // Rand (String): Pseudo-random, alphanumeric string. + random_str : function () { + if (!this.fidx) this.fidx = 0; + this.prefix = this.prefix || [(this.name || 'F'), (+new Date).toString(36)].join('-'); + + return this.prefix + (this.fidx++).toString(36); + } + } + }; + + $.fn.foundation = function () { + var args = Array.prototype.slice.call(arguments, 0); + + return this.each(function () { + Foundation.init.apply(Foundation, [this].concat(args)); + return this; + }); + }; + +}(jQuery, window, window.document)); diff --git a/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.min.js b/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.min.js new file mode 100644 index 000000000..f18fc0cfd --- /dev/null +++ b/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.min.js @@ -0,0 +1 @@ +!function(t,e,n,i){"use strict";function a(t){return("string"==typeof t||t instanceof String)&&(t=t.replace(/^['\\/"]+|(;\s?})+|['\\/"]+$/g,"")),t}var s=function(e){for(var n=e.length,i=t("head");n--;)0===i.has("."+e[n]).length&&i.append('')};s(["foundation-mq-small","foundation-mq-medium","foundation-mq-large","foundation-mq-xlarge","foundation-mq-xxlarge","foundation-data-attribute-namespace"]),t(function(){"undefined"!=typeof FastClick&&"undefined"!=typeof n.body&&FastClick.attach(n.body)});var r=function(e,i){if("string"==typeof e){if(i){var a;if(i.jquery){if(a=i[0],!a)return i}else a=i;return t(a.querySelectorAll(e))}return t(n.querySelectorAll(e))}return t(e,i)},o=function(t){var e=[];return t||e.push("data"),this.namespace.length>0&&e.push(this.namespace),e.push(this.name),e.join("-")},u=function(t){for(var e=t.split("-"),n=e.length,i=[];n--;)0!==n?i.push(e[n]):this.namespace.length>0?i.push(this.namespace,e[n]):i.push(e[n]);return i.reverse().join("-")},l=function(e,n){var i=this,a=!r(this).data(this.attr_name(!0));return r(this.scope).is("["+this.attr_name()+"]")?(r(this.scope).data(this.attr_name(!0)+"-init",t.extend({},this.settings,n||e,this.data_options(r(this.scope)))),a&&this.events(this.scope)):r("["+this.attr_name()+"]",this.scope).each(function(){var a=!r(this).data(i.attr_name(!0)+"-init");r(this).data(i.attr_name(!0)+"-init",t.extend({},i.settings,n||e,i.data_options(r(this)))),a&&i.events(this)}),"string"==typeof e?this[e].call(this,n):void 0},c=function(t,e){function n(){e(t[0])}function i(){if(this.one("load",n),/MSIE (\d+\.\d+);/.test(navigator.userAgent)){var t=this.attr("src"),e=t.match(/\?/)?"&":"?";e+="random="+(new Date).getTime(),this.attr("src",t+e)}}return t.attr("src")?void(t[0].complete||4===t[0].readyState?n():i.call(t)):void n()};e.matchMedia=e.matchMedia||function(t){var e,n=t.documentElement,i=n.firstElementChild||n.firstChild,a=t.createElement("body"),s=t.createElement("div");return s.id="mq-test-1",s.style.cssText="position:absolute;top:-100em",a.style.background="none",a.appendChild(s),function(t){return s.innerHTML='­',n.insertBefore(a,i),e=42===s.offsetWidth,n.removeChild(a),{matches:e,media:t}}}(n),function(){function t(){n&&(s(t),o&&jQuery.fx.tick())}for(var n,i=0,a=["webkit","moz"],s=e.requestAnimationFrame,r=e.cancelAnimationFrame,o="undefined"!=typeof jQuery.fx;i").appendTo("head")[0].sheet,global:{namespace:i},init:function(t,n,i,a,s){var o=[t,i,a,s],u=[];if(this.rtl=/rtl/i.test(r("html").attr("dir")),this.scope=t||this.scope,this.set_namespace(),n&&"string"==typeof n&&!/reflow/i.test(n))this.libs.hasOwnProperty(n)&&u.push(this.init_lib(n,o));else for(var l in this.libs)u.push(this.init_lib(l,n));return r(e).load(function(){r(e).trigger("resize.fndtn.clearing").trigger("resize.fndtn.dropdown").trigger("resize.fndtn.equalizer").trigger("resize.fndtn.interchange").trigger("resize.fndtn.joyride").trigger("resize.fndtn.magellan").trigger("resize.fndtn.topbar").trigger("resize.fndtn.slider")}),t},init_lib:function(e,n){return this.libs.hasOwnProperty(e)?(this.patch(this.libs[e]),n&&n.hasOwnProperty(e)?("undefined"!=typeof this.libs[e].settings?t.extend(!0,this.libs[e].settings,n[e]):"undefined"!=typeof this.libs[e].defaults&&t.extend(!0,this.libs[e].defaults,n[e]),this.libs[e].init.apply(this.libs[e],[this.scope,n[e]])):(n=n instanceof Array?n:new Array(n),this.libs[e].init.apply(this.libs[e],n))):function(){}},patch:function(t){t.scope=this.scope,t.namespace=this.global.namespace,t.rtl=this.rtl,t.data_options=this.utils.data_options,t.attr_name=o,t.add_namespace=u,t.bindings=l,t.S=this.utils.S},inherit:function(t,e){for(var n=e.split(" "),i=n.length;i--;)this.utils.hasOwnProperty(n[i])&&(t[n[i]]=this.utils[n[i]])},set_namespace:function(){var e=this.global.namespace===i?t(".foundation-data-attribute-namespace").css("font-family"):this.global.namespace;this.global.namespace=e===i||/false/i.test(e)?"":e},libs:{},utils:{S:r,throttle:function(t,e){var n=null;return function(){var i=this,a=arguments;null==n&&(n=setTimeout(function(){t.apply(i,a),n=null},e))}},debounce:function(t,e,n){var i,a;return function(){var s=this,r=arguments,o=function(){i=null,n||(a=t.apply(s,r))},u=n&&!i;return clearTimeout(i),i=setTimeout(o,e),u&&(a=t.apply(s,r)),a}},data_options:function(e,n){function i(t){return!isNaN(t-0)&&null!==t&&""!==t&&t!==!1&&t!==!0}function a(e){return"string"==typeof e?t.trim(e):e}n=n||"options";var s,r,o,u={},l=function(t){var e=Foundation.global.namespace;return t.data(e.length>0?e+"-"+n:n)},c=l(e);if("object"==typeof c)return c;for(o=(c||":").split(";"),s=o.length;s--;)r=o[s].split(":"),r=[r[0],r.slice(1).join(":")],/true/i.test(r[1])&&(r[1]=!0),/false/i.test(r[1])&&(r[1]=!1),i(r[1])&&(r[1]=-1===r[1].indexOf(".")?parseInt(r[1],10):parseFloat(r[1])),2===r.length&&r[0].length>0&&(u[a(r[0])]=a(r[1]));return u},register_media:function(e,n){Foundation.media_queries[e]===i&&(t("head").append(''),Foundation.media_queries[e]=a(t("."+n).css("font-family")))},add_custom_rule:function(t,e){if(e===i&&Foundation.stylesheet)Foundation.stylesheet.insertRule(t,Foundation.stylesheet.cssRules.length);else{var n=Foundation.media_queries[e];n!==i&&Foundation.stylesheet.insertRule("@media "+Foundation.media_queries[e]+"{ "+t+" }")}},image_loaded:function(t,e){var n=this,i=t.length;0===i&&e(t),t.each(function(){c(n.S(this),function(){i-=1,0===i&&e(t)})})},random_str:function(){return this.fidx||(this.fidx=0),this.prefix=this.prefix||[this.name||"F",(+new Date).toString(36)].join("-"),this.prefix+(this.fidx++).toString(36)}}},t.fn.foundation=function(){var t=Array.prototype.slice.call(arguments,0);return this.each(function(){return Foundation.init.apply(Foundation,[this].concat(t)),this})}}(jQuery,window,window.document); \ No newline at end of file diff --git a/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.reveal.js b/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.reveal.js new file mode 100644 index 000000000..c5f85c38a --- /dev/null +++ b/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.reveal.js @@ -0,0 +1,444 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.reveal = { + name : 'reveal', + + version : '5.4.5', + + locked : false, + + settings : { + animation: 'fadeAndPop', + animation_speed: 250, + close_on_background_click: true, + close_on_esc: true, + dismiss_modal_class: 'close-reveal-modal', + bg_class: 'reveal-modal-bg', + root_element: 'body', + open: function(){}, + opened: function(){}, + close: function(){}, + closed: function(){}, + bg : $('.reveal-modal-bg'), + css : { + open : { + 'opacity': 0, + 'visibility': 'visible', + 'display' : 'block' + }, + close : { + 'opacity': 1, + 'visibility': 'hidden', + 'display': 'none' + } + } + }, + + init : function (scope, method, options) { + $.extend(true, this.settings, method, options); + this.bindings(method, options); + }, + + events : function (scope) { + var self = this, + S = self.S; + + S(this.scope) + .off('.reveal') + .on('click.fndtn.reveal', '[' + this.add_namespace('data-reveal-id') + ']:not([disabled])', function (e) { + e.preventDefault(); + + if (!self.locked) { + var element = S(this), + ajax = element.data(self.data_attr('reveal-ajax')); + + self.locked = true; + + if (typeof ajax === 'undefined') { + self.open.call(self, element); + } else { + var url = ajax === true ? element.attr('href') : ajax; + + self.open.call(self, element, {url: url}); + } + } + }); + + S(document) + .on('click.fndtn.reveal', this.close_targets(), function (e) { + + e.preventDefault(); + + if (!self.locked) { + var settings = S('[' + self.attr_name() + '].open').data(self.attr_name(true) + '-init'), + bg_clicked = S(e.target)[0] === S('.' + settings.bg_class)[0]; + + if (bg_clicked) { + if (settings.close_on_background_click) { + e.stopPropagation(); + } else { + return; + } + } + + self.locked = true; + self.close.call(self, bg_clicked ? S('[' + self.attr_name() + '].open') : S(this).closest('[' + self.attr_name() + ']')); + } + }); + + if(S('[' + self.attr_name() + ']', this.scope).length > 0) { + S(this.scope) + // .off('.reveal') + .on('open.fndtn.reveal', this.settings.open) + .on('opened.fndtn.reveal', this.settings.opened) + .on('opened.fndtn.reveal', this.open_video) + .on('close.fndtn.reveal', this.settings.close) + .on('closed.fndtn.reveal', this.settings.closed) + .on('closed.fndtn.reveal', this.close_video); + } else { + S(this.scope) + // .off('.reveal') + .on('open.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.open) + .on('opened.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.opened) + .on('opened.fndtn.reveal', '[' + self.attr_name() + ']', this.open_video) + .on('close.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.close) + .on('closed.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.closed) + .on('closed.fndtn.reveal', '[' + self.attr_name() + ']', this.close_video); + } + + return true; + }, + + // PATCH #3: turning on key up capture only when a reveal window is open + key_up_on : function (scope) { + var self = this; + + // PATCH #1: fixing multiple keyup event trigger from single key press + self.S('body').off('keyup.fndtn.reveal').on('keyup.fndtn.reveal', function ( event ) { + var open_modal = self.S('[' + self.attr_name() + '].open'), + settings = open_modal.data(self.attr_name(true) + '-init') || self.settings ; + // PATCH #2: making sure that the close event can be called only while unlocked, + // so that multiple keyup.fndtn.reveal events don't prevent clean closing of the reveal window. + if ( settings && event.which === 27 && settings.close_on_esc && !self.locked) { // 27 is the keycode for the Escape key + self.close.call(self, open_modal); + } + }); + + return true; + }, + + // PATCH #3: turning on key up capture only when a reveal window is open + key_up_off : function (scope) { + this.S('body').off('keyup.fndtn.reveal'); + return true; + }, + + + open : function (target, ajax_settings) { + var self = this, + modal; + + if (target) { + if (typeof target.selector !== 'undefined') { + // Find the named node; only use the first one found, since the rest of the code assumes there's only one node + modal = self.S('#' + target.data(self.data_attr('reveal-id'))).first(); + } else { + modal = self.S(this.scope); + + ajax_settings = target; + } + } else { + modal = self.S(this.scope); + } + + var settings = modal.data(self.attr_name(true) + '-init'); + settings = settings || this.settings; + + + if (modal.hasClass('open') && target.attr('data-reveal-id') == modal.attr('id')) { + return self.close(modal); + } + + if (!modal.hasClass('open')) { + var open_modal = self.S('[' + self.attr_name() + '].open'); + + if (typeof modal.data('css-top') === 'undefined') { + modal.data('css-top', parseInt(modal.css('top'), 10)) + .data('offset', this.cache_offset(modal)); + } + + this.key_up_on(modal); // PATCH #3: turning on key up capture only when a reveal window is open + modal.trigger('open').trigger('open.fndtn.reveal'); + + if (open_modal.length < 1) { + this.toggle_bg(modal, true); + } + + if (typeof ajax_settings === 'string') { + ajax_settings = { + url: ajax_settings + }; + } + + if (typeof ajax_settings === 'undefined' || !ajax_settings.url) { + if (open_modal.length > 0) { + this.hide(open_modal, settings.css.close); + } + + this.show(modal, settings.css.open); + } else { + var old_success = typeof ajax_settings.success !== 'undefined' ? ajax_settings.success : null; + + $.extend(ajax_settings, { + success: function (data, textStatus, jqXHR) { + if ( $.isFunction(old_success) ) { + old_success(data, textStatus, jqXHR); + } + + modal.html(data); + self.S(modal).foundation('section', 'reflow'); + self.S(modal).children().foundation(); + + if (open_modal.length > 0) { + self.hide(open_modal, settings.css.close); + } + self.show(modal, settings.css.open); + } + }); + + $.ajax(ajax_settings); + } + } + self.S(window).trigger('resize'); + }, + + close : function (modal) { + var modal = modal && modal.length ? modal : this.S(this.scope), + open_modals = this.S('[' + this.attr_name() + '].open'), + settings = modal.data(this.attr_name(true) + '-init') || this.settings; + + if (open_modals.length > 0) { + this.locked = true; + this.key_up_off(modal); // PATCH #3: turning on key up capture only when a reveal window is open + modal.trigger('close').trigger('close.fndtn.reveal'); + this.toggle_bg(modal, false); + this.hide(open_modals, settings.css.close, settings); + } + }, + + close_targets : function () { + var base = '.' + this.settings.dismiss_modal_class; + + if (this.settings.close_on_background_click) { + return base + ', .' + this.settings.bg_class; + } + + return base; + }, + + toggle_bg : function (modal, state) { + if (this.S('.' + this.settings.bg_class).length === 0) { + this.settings.bg = $('
', {'class': this.settings.bg_class}) + .appendTo('body').hide(); + } + + var visible = this.settings.bg.filter(':visible').length > 0; + if ( state != visible ) { + if ( state == undefined ? visible : !state ) { + this.hide(this.settings.bg); + } else { + this.show(this.settings.bg); + } + } + }, + + show : function (el, css) { + // is modal + if (css) { + var settings = el.data(this.attr_name(true) + '-init') || this.settings, + root_element = settings.root_element; + + if (el.parent(root_element).length === 0) { + var placeholder = el.wrap('
').parent(); + + el.on('closed.fndtn.reveal.wrapped', function() { + el.detach().appendTo(placeholder); + el.unwrap().unbind('closed.fndtn.reveal.wrapped'); + }); + + el.detach().appendTo(root_element); + } + + var animData = getAnimationData(settings.animation); + if (!animData.animate) { + this.locked = false; + } + if (animData.pop) { + css.top = $(window).scrollTop() - el.data('offset') + 'px'; + var end_css = { + top: $(window).scrollTop() + el.data('css-top') + 'px', + opacity: 1 + }; + + return setTimeout(function () { + return el + .css(css) + .animate(end_css, settings.animation_speed, 'linear', function () { + this.locked = false; + el.trigger('opened').trigger('opened.fndtn.reveal'); + }.bind(this)) + .addClass('open'); + }.bind(this), settings.animation_speed / 2); + } + + if (animData.fade) { + css.top = $(window).scrollTop() + el.data('css-top') + 'px'; + var end_css = {opacity: 1}; + + return setTimeout(function () { + return el + .css(css) + .animate(end_css, settings.animation_speed, 'linear', function () { + this.locked = false; + el.trigger('opened').trigger('opened.fndtn.reveal'); + }.bind(this)) + .addClass('open'); + }.bind(this), settings.animation_speed / 2); + } + + return el.css(css).show().css({opacity: 1}).addClass('open').trigger('opened').trigger('opened.fndtn.reveal'); + } + + var settings = this.settings; + + // should we animate the background? + if (getAnimationData(settings.animation).fade) { + return el.fadeIn(settings.animation_speed / 2); + } + + this.locked = false; + + return el.show(); + }, + + hide : function (el, css) { + // is modal + if (css) { + var settings = el.data(this.attr_name(true) + '-init'); + settings = settings || this.settings; + + var animData = getAnimationData(settings.animation); + if (!animData.animate) { + this.locked = false; + } + if (animData.pop) { + var end_css = { + top: - $(window).scrollTop() - el.data('offset') + 'px', + opacity: 0 + }; + + return setTimeout(function () { + return el + .animate(end_css, settings.animation_speed, 'linear', function () { + this.locked = false; + el.css(css).trigger('closed').trigger('closed.fndtn.reveal'); + }.bind(this)) + .removeClass('open'); + }.bind(this), settings.animation_speed / 2); + } + + if (animData.fade) { + var end_css = {opacity: 0}; + + return setTimeout(function () { + return el + .animate(end_css, settings.animation_speed, 'linear', function () { + this.locked = false; + el.css(css).trigger('closed').trigger('closed.fndtn.reveal'); + }.bind(this)) + .removeClass('open'); + }.bind(this), settings.animation_speed / 2); + } + + return el.hide().css(css).removeClass('open').trigger('closed').trigger('closed.fndtn.reveal'); + } + + var settings = this.settings; + + // should we animate the background? + if (getAnimationData(settings.animation).fade) { + return el.fadeOut(settings.animation_speed / 2); + } + + return el.hide(); + }, + + close_video : function (e) { + var video = $('.flex-video', e.target), + iframe = $('iframe', video); + + if (iframe.length > 0) { + iframe.attr('data-src', iframe[0].src); + iframe.attr('src', iframe.attr('src')); + video.hide(); + } + }, + + open_video : function (e) { + var video = $('.flex-video', e.target), + iframe = video.find('iframe'); + + if (iframe.length > 0) { + var data_src = iframe.attr('data-src'); + if (typeof data_src === 'string') { + iframe[0].src = iframe.attr('data-src'); + } else { + var src = iframe[0].src; + iframe[0].src = undefined; + iframe[0].src = src; + } + video.show(); + } + }, + + data_attr: function (str) { + if (this.namespace.length > 0) { + return this.namespace + '-' + str; + } + + return str; + }, + + cache_offset : function (modal) { + var offset = modal.show().height() + parseInt(modal.css('top'), 10); + + modal.hide(); + + return offset; + }, + + off : function () { + $(this.scope).off('.fndtn.reveal'); + }, + + reflow : function () {} + }; + + /* + * getAnimationData('popAndFade') // {animate: true, pop: true, fade: true} + * getAnimationData('fade') // {animate: true, pop: false, fade: true} + * getAnimationData('pop') // {animate: true, pop: true, fade: false} + * getAnimationData('foo') // {animate: false, pop: false, fade: false} + * getAnimationData(null) // {animate: false, pop: false, fade: false} + */ + function getAnimationData(str) { + var fade = /fade/i.test(str); + var pop = /pop/i.test(str); + return { + animate: fade || pop, + pop: pop, + fade: fade + }; + } +}(jQuery, window, window.document)); diff --git a/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.reveal.min.js b/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.reveal.min.js new file mode 100644 index 000000000..1cc62f2ff --- /dev/null +++ b/ajax/libs/foundation-essential/5.4.5/js/foundation/foundation.reveal.min.js @@ -0,0 +1 @@ +!function(e,t,n,s){"use strict";function i(e){var t=/fade/i.test(e),n=/pop/i.test(e);return{animate:t||n,pop:n,fade:t}}Foundation.libs.reveal={name:"reveal",version:"5.4.5",locked:!1,settings:{animation:"fadeAndPop",animation_speed:250,close_on_background_click:!0,close_on_esc:!0,dismiss_modal_class:"close-reveal-modal",bg_class:"reveal-modal-bg",root_element:"body",open:function(){},opened:function(){},close:function(){},closed:function(){},bg:e(".reveal-modal-bg"),css:{open:{opacity:0,visibility:"visible",display:"block"},close:{opacity:1,visibility:"hidden",display:"none"}}},init:function(t,n,s){e.extend(!0,this.settings,n,s),this.bindings(n,s)},events:function(){var e=this,t=e.S;return t(this.scope).off(".reveal").on("click.fndtn.reveal","["+this.add_namespace("data-reveal-id")+"]:not([disabled])",function(n){if(n.preventDefault(),!e.locked){var s=t(this),i=s.data(e.data_attr("reveal-ajax"));if(e.locked=!0,"undefined"==typeof i)e.open.call(e,s);else{var a=i===!0?s.attr("href"):i;e.open.call(e,s,{url:a})}}}),t(n).on("click.fndtn.reveal",this.close_targets(),function(n){if(n.preventDefault(),!e.locked){var s=t("["+e.attr_name()+"].open").data(e.attr_name(!0)+"-init"),i=t(n.target)[0]===t("."+s.bg_class)[0];if(i){if(!s.close_on_background_click)return;n.stopPropagation()}e.locked=!0,e.close.call(e,i?t("["+e.attr_name()+"].open"):t(this).closest("["+e.attr_name()+"]"))}}),t("["+e.attr_name()+"]",this.scope).length>0?t(this.scope).on("open.fndtn.reveal",this.settings.open).on("opened.fndtn.reveal",this.settings.opened).on("opened.fndtn.reveal",this.open_video).on("close.fndtn.reveal",this.settings.close).on("closed.fndtn.reveal",this.settings.closed).on("closed.fndtn.reveal",this.close_video):t(this.scope).on("open.fndtn.reveal","["+e.attr_name()+"]",this.settings.open).on("opened.fndtn.reveal","["+e.attr_name()+"]",this.settings.opened).on("opened.fndtn.reveal","["+e.attr_name()+"]",this.open_video).on("close.fndtn.reveal","["+e.attr_name()+"]",this.settings.close).on("closed.fndtn.reveal","["+e.attr_name()+"]",this.settings.closed).on("closed.fndtn.reveal","["+e.attr_name()+"]",this.close_video),!0},key_up_on:function(){var e=this;return e.S("body").off("keyup.fndtn.reveal").on("keyup.fndtn.reveal",function(t){var n=e.S("["+e.attr_name()+"].open"),s=n.data(e.attr_name(!0)+"-init")||e.settings;s&&27===t.which&&s.close_on_esc&&!e.locked&&e.close.call(e,n)}),!0},key_up_off:function(){return this.S("body").off("keyup.fndtn.reveal"),!0},open:function(n,s){var i,a=this;n?"undefined"!=typeof n.selector?i=a.S("#"+n.data(a.data_attr("reveal-id"))).first():(i=a.S(this.scope),s=n):i=a.S(this.scope);var o=i.data(a.attr_name(!0)+"-init");if(o=o||this.settings,i.hasClass("open")&&n.attr("data-reveal-id")==i.attr("id"))return a.close(i);if(!i.hasClass("open")){var r=a.S("["+a.attr_name()+"].open");if("undefined"==typeof i.data("css-top")&&i.data("css-top",parseInt(i.css("top"),10)).data("offset",this.cache_offset(i)),this.key_up_on(i),i.trigger("open").trigger("open.fndtn.reveal"),r.length<1&&this.toggle_bg(i,!0),"string"==typeof s&&(s={url:s}),"undefined"!=typeof s&&s.url){var d="undefined"!=typeof s.success?s.success:null;e.extend(s,{success:function(t,n,s){e.isFunction(d)&&d(t,n,s),i.html(t),a.S(i).foundation("section","reflow"),a.S(i).children().foundation(),r.length>0&&a.hide(r,o.css.close),a.show(i,o.css.open)}}),e.ajax(s)}else r.length>0&&this.hide(r,o.css.close),this.show(i,o.css.open)}a.S(t).trigger("resize")},close:function(e){var e=e&&e.length?e:this.S(this.scope),t=this.S("["+this.attr_name()+"].open"),n=e.data(this.attr_name(!0)+"-init")||this.settings;t.length>0&&(this.locked=!0,this.key_up_off(e),e.trigger("close").trigger("close.fndtn.reveal"),this.toggle_bg(e,!1),this.hide(t,n.css.close,n))},close_targets:function(){var e="."+this.settings.dismiss_modal_class;return this.settings.close_on_background_click?e+", ."+this.settings.bg_class:e},toggle_bg:function(t,n){0===this.S("."+this.settings.bg_class).length&&(this.settings.bg=e("
",{"class":this.settings.bg_class}).appendTo("body").hide());var i=this.settings.bg.filter(":visible").length>0;n!=i&&((n==s?i:!n)?this.hide(this.settings.bg):this.show(this.settings.bg))},show:function(n,s){if(s){var a=n.data(this.attr_name(!0)+"-init")||this.settings,o=a.root_element;if(0===n.parent(o).length){var r=n.wrap('
').parent();n.on("closed.fndtn.reveal.wrapped",function(){n.detach().appendTo(r),n.unwrap().unbind("closed.fndtn.reveal.wrapped")}),n.detach().appendTo(o)}var d=i(a.animation);if(d.animate||(this.locked=!1),d.pop){s.top=e(t).scrollTop()-n.data("offset")+"px";var c={top:e(t).scrollTop()+n.data("css-top")+"px",opacity:1};return setTimeout(function(){return n.css(s).animate(c,a.animation_speed,"linear",function(){this.locked=!1,n.trigger("opened").trigger("opened.fndtn.reveal")}.bind(this)).addClass("open")}.bind(this),a.animation_speed/2)}if(d.fade){s.top=e(t).scrollTop()+n.data("css-top")+"px";var c={opacity:1};return setTimeout(function(){return n.css(s).animate(c,a.animation_speed,"linear",function(){this.locked=!1,n.trigger("opened").trigger("opened.fndtn.reveal")}.bind(this)).addClass("open")}.bind(this),a.animation_speed/2)}return n.css(s).show().css({opacity:1}).addClass("open").trigger("opened").trigger("opened.fndtn.reveal")}var a=this.settings;return i(a.animation).fade?n.fadeIn(a.animation_speed/2):(this.locked=!1,n.show())},hide:function(n,s){if(s){var a=n.data(this.attr_name(!0)+"-init");a=a||this.settings;var o=i(a.animation);if(o.animate||(this.locked=!1),o.pop){var r={top:-e(t).scrollTop()-n.data("offset")+"px",opacity:0};return setTimeout(function(){return n.animate(r,a.animation_speed,"linear",function(){this.locked=!1,n.css(s).trigger("closed").trigger("closed.fndtn.reveal")}.bind(this)).removeClass("open")}.bind(this),a.animation_speed/2)}if(o.fade){var r={opacity:0};return setTimeout(function(){return n.animate(r,a.animation_speed,"linear",function(){this.locked=!1,n.css(s).trigger("closed").trigger("closed.fndtn.reveal")}.bind(this)).removeClass("open")}.bind(this),a.animation_speed/2)}return n.hide().css(s).removeClass("open").trigger("closed").trigger("closed.fndtn.reveal")}var a=this.settings;return i(a.animation).fade?n.fadeOut(a.animation_speed/2):n.hide()},close_video:function(t){var n=e(".flex-video",t.target),s=e("iframe",n);s.length>0&&(s.attr("data-src",s[0].src),s.attr("src",s.attr("src")),n.hide())},open_video:function(t){var n=e(".flex-video",t.target),i=n.find("iframe");if(i.length>0){var a=i.attr("data-src");if("string"==typeof a)i[0].src=i.attr("data-src");else{var o=i[0].src;i[0].src=s,i[0].src=o}n.show()}},data_attr:function(e){return this.namespace.length>0?this.namespace+"-"+e:e},cache_offset:function(e){var t=e.show().height()+parseInt(e.css("top"),10);return e.hide(),t},off:function(){e(this.scope).off(".fndtn.reveal")},reflow:function(){}}}(jQuery,window,window.document); \ No newline at end of file diff --git a/ajax/libs/foundation-essential/5.4.5/js/vendor/fastclick.js b/ajax/libs/foundation-essential/5.4.5/js/vendor/fastclick.js new file mode 100644 index 000000000..e8e03925c --- /dev/null +++ b/ajax/libs/foundation-essential/5.4.5/js/vendor/fastclick.js @@ -0,0 +1,9 @@ +/** + * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs. + * + * @version 1.0.3 + * @codingstandard ftlabs-jsv2 + * @copyright The Financial Times Limited [All Rights Reserved] + * @license MIT License (see LICENSE.txt) + */ +function FastClick(a,b){"use strict";function c(a,b){return function(){return a.apply(b,arguments)}}var d;if(b=b||{},this.trackingClick=!1,this.trackingClickStart=0,this.targetElement=null,this.touchStartX=0,this.touchStartY=0,this.lastTouchIdentifier=0,this.touchBoundary=b.touchBoundary||10,this.layer=a,this.tapDelay=b.tapDelay||200,!FastClick.notNeeded(a)){for(var e=["onMouse","onClick","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel"],f=this,g=0,h=e.length;h>g;g++)f[e[g]]=c(f[e[g]],f);deviceIsAndroid&&(a.addEventListener("mouseover",this.onMouse,!0),a.addEventListener("mousedown",this.onMouse,!0),a.addEventListener("mouseup",this.onMouse,!0)),a.addEventListener("click",this.onClick,!0),a.addEventListener("touchstart",this.onTouchStart,!1),a.addEventListener("touchmove",this.onTouchMove,!1),a.addEventListener("touchend",this.onTouchEnd,!1),a.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(a.removeEventListener=function(b,c,d){var e=Node.prototype.removeEventListener;"click"===b?e.call(a,b,c.hijacked||c,d):e.call(a,b,c,d)},a.addEventListener=function(b,c,d){var e=Node.prototype.addEventListener;"click"===b?e.call(a,b,c.hijacked||(c.hijacked=function(a){a.propagationStopped||c(a)}),d):e.call(a,b,c,d)}),"function"==typeof a.onclick&&(d=a.onclick,a.addEventListener("click",function(a){d(a)},!1),a.onclick=null)}}var deviceIsAndroid=navigator.userAgent.indexOf("Android")>0,deviceIsIOS=/iP(ad|hone|od)/.test(navigator.userAgent),deviceIsIOS4=deviceIsIOS&&/OS 4_\d(_\d)?/.test(navigator.userAgent),deviceIsIOSWithBadTarget=deviceIsIOS&&/OS ([6-9]|\d{2})_\d/.test(navigator.userAgent),deviceIsBlackBerry10=navigator.userAgent.indexOf("BB10")>0;FastClick.prototype.needsClick=function(a){"use strict";switch(a.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(a.disabled)return!0;break;case"input":if(deviceIsIOS&&"file"===a.type||a.disabled)return!0;break;case"label":case"video":return!0}return/\bneedsclick\b/.test(a.className)},FastClick.prototype.needsFocus=function(a){"use strict";switch(a.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!deviceIsAndroid;case"input":switch(a.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!a.disabled&&!a.readOnly;default:return/\bneedsfocus\b/.test(a.className)}},FastClick.prototype.sendClick=function(a,b){"use strict";var c,d;document.activeElement&&document.activeElement!==a&&document.activeElement.blur(),d=b.changedTouches[0],c=document.createEvent("MouseEvents"),c.initMouseEvent(this.determineEventType(a),!0,!0,window,1,d.screenX,d.screenY,d.clientX,d.clientY,!1,!1,!1,!1,0,null),c.forwardedTouchEvent=!0,a.dispatchEvent(c)},FastClick.prototype.determineEventType=function(a){"use strict";return deviceIsAndroid&&"select"===a.tagName.toLowerCase()?"mousedown":"click"},FastClick.prototype.focus=function(a){"use strict";var b;deviceIsIOS&&a.setSelectionRange&&0!==a.type.indexOf("date")&&"time"!==a.type?(b=a.value.length,a.setSelectionRange(b,b)):a.focus()},FastClick.prototype.updateScrollParent=function(a){"use strict";var b,c;if(b=a.fastClickScrollParent,!b||!b.contains(a)){c=a;do{if(c.scrollHeight>c.offsetHeight){b=c,a.fastClickScrollParent=c;break}c=c.parentElement}while(c)}b&&(b.fastClickLastScrollTop=b.scrollTop)},FastClick.prototype.getTargetElementFromEventTarget=function(a){"use strict";return a.nodeType===Node.TEXT_NODE?a.parentNode:a},FastClick.prototype.onTouchStart=function(a){"use strict";var b,c,d;if(a.targetTouches.length>1)return!0;if(b=this.getTargetElementFromEventTarget(a.target),c=a.targetTouches[0],deviceIsIOS){if(d=window.getSelection(),d.rangeCount&&!d.isCollapsed)return!0;if(!deviceIsIOS4){if(c.identifier&&c.identifier===this.lastTouchIdentifier)return a.preventDefault(),!1;this.lastTouchIdentifier=c.identifier,this.updateScrollParent(b)}}return this.trackingClick=!0,this.trackingClickStart=a.timeStamp,this.targetElement=b,this.touchStartX=c.pageX,this.touchStartY=c.pageY,a.timeStamp-this.lastClickTimec||Math.abs(b.pageY-this.touchStartY)>c?!0:!1},FastClick.prototype.onTouchMove=function(a){"use strict";return this.trackingClick?((this.targetElement!==this.getTargetElementFromEventTarget(a.target)||this.touchHasMoved(a))&&(this.trackingClick=!1,this.targetElement=null),!0):!0},FastClick.prototype.findControl=function(a){"use strict";return void 0!==a.control?a.control:a.htmlFor?document.getElementById(a.htmlFor):a.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},FastClick.prototype.onTouchEnd=function(a){"use strict";var b,c,d,e,f,g=this.targetElement;if(!this.trackingClick)return!0;if(a.timeStamp-this.lastClickTime100||deviceIsIOS&&window.top!==window&&"input"===d?(this.targetElement=null,!1):(this.focus(g),this.sendClick(g,a),deviceIsIOS&&"select"===d||(this.targetElement=null,a.preventDefault()),!1);return deviceIsIOS&&!deviceIsIOS4&&(e=g.fastClickScrollParent,e&&e.fastClickLastScrollTop!==e.scrollTop)?!0:(this.needsClick(g)||(a.preventDefault(),this.sendClick(g,a)),!1)},FastClick.prototype.onTouchCancel=function(){"use strict";this.trackingClick=!1,this.targetElement=null},FastClick.prototype.onMouse=function(a){"use strict";return this.targetElement?a.forwardedTouchEvent?!0:a.cancelable&&(!this.needsClick(this.targetElement)||this.cancelNextClick)?(a.stopImmediatePropagation?a.stopImmediatePropagation():a.propagationStopped=!0,a.stopPropagation(),a.preventDefault(),!1):!0:!0},FastClick.prototype.onClick=function(a){"use strict";var b;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===a.target.type&&0===a.detail?!0:(b=this.onMouse(a),b||(this.targetElement=null),b)},FastClick.prototype.destroy=function(){"use strict";var a=this.layer;deviceIsAndroid&&(a.removeEventListener("mouseover",this.onMouse,!0),a.removeEventListener("mousedown",this.onMouse,!0),a.removeEventListener("mouseup",this.onMouse,!0)),a.removeEventListener("click",this.onClick,!0),a.removeEventListener("touchstart",this.onTouchStart,!1),a.removeEventListener("touchmove",this.onTouchMove,!1),a.removeEventListener("touchend",this.onTouchEnd,!1),a.removeEventListener("touchcancel",this.onTouchCancel,!1)},FastClick.notNeeded=function(a){"use strict";var b,c,d;if("undefined"==typeof window.ontouchstart)return!0;if(c=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!deviceIsAndroid)return!0;if(b=document.querySelector("meta[name=viewport]")){if(-1!==b.content.indexOf("user-scalable=no"))return!0;if(c>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(deviceIsBlackBerry10&&(d=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),d[1]>=10&&d[2]>=3&&(b=document.querySelector("meta[name=viewport]")))){if(-1!==b.content.indexOf("user-scalable=no"))return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===a.style.msTouchAction?!0:!1},FastClick.attach=function(a,b){"use strict";return new FastClick(a,b)},"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){"use strict";return FastClick}):"undefined"!=typeof module&&module.exports?(module.exports=FastClick.attach,module.exports.FastClick=FastClick):window.FastClick=FastClick; diff --git a/ajax/libs/foundation-essential/5.4.5/js/vendor/jquery.cookie.js b/ajax/libs/foundation-essential/5.4.5/js/vendor/jquery.cookie.js new file mode 100644 index 000000000..9abcdeced --- /dev/null +++ b/ajax/libs/foundation-essential/5.4.5/js/vendor/jquery.cookie.js @@ -0,0 +1,8 @@ +/*! + * jQuery Cookie Plugin v1.4.1 + * https://github.com/carhartl/jquery-cookie + * + * Copyright 2013 Klaus Hartl + * Released under the MIT license + */ +!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){function b(a){return h.raw?a:encodeURIComponent(a)}function c(a){return h.raw?a:decodeURIComponent(a)}function d(a){return b(h.json?JSON.stringify(a):String(a))}function e(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return a=decodeURIComponent(a.replace(g," ")),h.json?JSON.parse(a):a}catch(b){}}function f(b,c){var d=h.raw?b:e(b);return a.isFunction(c)?c(d):d}var g=/\+/g,h=a.cookie=function(e,g,i){if(void 0!==g&&!a.isFunction(g)){if(i=a.extend({},h.defaults,i),"number"==typeof i.expires){var j=i.expires,k=i.expires=new Date;k.setTime(+k+864e5*j)}return document.cookie=[b(e),"=",d(g),i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}for(var l=e?void 0:{},m=document.cookie?document.cookie.split("; "):[],n=0,o=m.length;o>n;n++){var p=m[n].split("="),q=c(p.shift()),r=p.join("=");if(e&&e===q){l=f(r,g);break}e||void 0===(r=f(r))||(l[q]=r)}return l};h.defaults={},a.removeCookie=function(b,c){return void 0===a.cookie(b)?!1:(a.cookie(b,"",a.extend({},c,{expires:-1})),!a.cookie(b))}}); diff --git a/ajax/libs/foundation-essential/5.4.5/js/vendor/jquery.js b/ajax/libs/foundation-essential/5.4.5/js/vendor/jquery.js new file mode 100644 index 000000000..05fb1ec2b --- /dev/null +++ b/ajax/libs/foundation-essential/5.4.5/js/vendor/jquery.js @@ -0,0 +1,26 @@ +/*! + * jQuery JavaScript Library v2.1.1 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-05-01T17:11Z + */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){function c(a){var b=a.length,c=_.type(a);return"function"===c||_.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}function d(a,b,c){if(_.isFunction(b))return _.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return _.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(hb.test(b))return _.filter(b,a,c);b=_.filter(b,a)}return _.grep(a,function(a){return U.call(b,a)>=0!==c})}function e(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function f(a){var b=ob[a]={};return _.each(a.match(nb)||[],function(a,c){b[c]=!0}),b}function g(){Z.removeEventListener("DOMContentLoaded",g,!1),a.removeEventListener("load",g,!1),_.ready()}function h(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=_.expando+Math.random()}function i(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(ub,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:tb.test(c)?_.parseJSON(c):c}catch(e){}sb.set(a,b,c)}else c=void 0;return c}function j(){return!0}function k(){return!1}function l(){try{return Z.activeElement}catch(a){}}function m(a,b){return _.nodeName(a,"table")&&_.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function n(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function o(a){var b=Kb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function p(a,b){for(var c=0,d=a.length;d>c;c++)rb.set(a[c],"globalEval",!b||rb.get(b[c],"globalEval"))}function q(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(rb.hasData(a)&&(f=rb.access(a),g=rb.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)_.event.add(b,e,j[e][c])}sb.hasData(a)&&(h=sb.access(a),i=_.extend({},h),sb.set(b,i))}}function r(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&_.nodeName(a,b)?_.merge([a],c):c}function s(a,b){var c=b.nodeName.toLowerCase();"input"===c&&yb.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function t(b,c){var d,e=_(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:_.css(e[0],"display");return e.detach(),f}function u(a){var b=Z,c=Ob[a];return c||(c=t(a,b),"none"!==c&&c||(Nb=(Nb||_("