Skip to content

Instantly share code, notes, and snippets.

@dinge
Created April 19, 2010 13:34
Show Gist options
  • Save dinge/371045 to your computer and use it in GitHub Desktop.
Save dinge/371045 to your computer and use it in GitHub Desktop.
/**
* This code is property of Apple Inc.
* This code is intended for informational use only.
* Apple has granted no license for distribution or use.
**/
const iPad = true;
const ADSupportsTouches = ("createTouch" in document);
const ADStartEvent = ADSupportsTouches ? "touchstart": "mousedown";
const ADMoveEvent = ADSupportsTouches ? "touchmove": "mousemove";
const ADEndEvent = ADSupportsTouches ? "touchend": "mouseup";
function ADUtils() {}
ADUtils.assetsPath = "";
ADUtils.t = function(b, a) {
return ADUtils.t3d(b, a, 0)
};
ADUtils.t3d = function(c, a, b) {
return "translate3d(" + c + "px, " + a + "px, " + b + "px)"
};
ADUtils.r3d = function(a, b, c, d) {
return "rotate3d(" + a + ", " + b + ", " + c + ", " + d + "rad)"
};
ADUtils.px = function(a) {
return a + "px"
};
ADUtils.degreesToRadians = function(a) {
return (a / 360) * (Math.PI * 2)
};
ADUtils.radiansToDegrees = function(a) {
return (a / (Math.PI * 2)) * 360
};
ADUtils.copyPropertiesFromSourceToTarget = function(c, b) {
for (var a in c) {
b[a] = c[a]
}
};
ADUtils.objectIsFunction = function(a) {
return (typeof a == "function")
};
ADUtils.objectIsUndefined = function(a) {
return (a === undefined)
};
ADUtils.objectIsString = function(a) {
return (typeof a == "string" || a instanceof String)
};
ADUtils.objectIsArray = function(a) {
return (a instanceof Array)
};
ADUtils.objectHasMethod = function(b, a) {
return (b !== null && !this.objectIsUndefined(b[a]) && this.objectIsFunction(b[a]))
};
ADUtils.disableScrolling = function(a) {
a.stopPropagation();
window.addEventListener("touchmove", ADUtils.preventEventDefault, true);
window.addEventListener("touchend", ADUtils.restoreScrollingBehavior, true);
window.addEventListener("touchcancel", ADUtils.restoreScrollingBehavior, true)
};
ADUtils.preventEventDefault = function(a) {
a.preventDefault()
};
ADUtils.restoreScrolling = function() {
window.removeEventListener("touchmove", ADUtils.preventEventDefault, true);
window.removeEventListener("touchend", ADUtils.restoreScrollingBehavior, true);
window.removeEventListener("touchcancel", ADUtils.restoreScrollingBehavior, true)
};
ADUtils.createUIEvent = function(a, b) {
return ADSupportsTouches ? this.createEventWithTouch(a, b) : this.createEventWithMouse(a, b)
};
ADUtils.createEventWithTouch = function(c, a) {
var b = document.createEvent("TouchEvent");
b.initTouchEvent(c, a.bubbles, a.cancelable, window, a.detail, a.screenX, a.screenY, a.clientX, a.clientY, a.ctrlKey, a.altKey, a.shiftKey, a.metaKey, a.touches, a.targetTouches, a.changedTouches, a.scale, a.rotation);
return b
};
ADUtils.createEventWithMouse = function(a, b) {
var c = document.createEvent("MouseEvent");
c.initMouseEvent(a, b.bubbles, b.cancelable, document.defaultView, b.detail, b.screenX, b.screenY, b.clientX, b.clientY, b.ctrlKey, b.altKey, b.shiftKey, b.metaKey, b.metaKey, b.button, b.relatedTarget);
return c
};
ADUtils.init = function() {
if (iPad) {
document.body.addClassName("iPad")
}
for (var b = 0; b < document.styleSheets.length; b++) {
var c = document.styleSheets[b];
var a = c.href ? c.href.indexOf("dist/AdLib") : -1;
if (a != -1) {
ADUtils.assetsPath = c.href.substring(0, a) + "assets/";
break
}
}
};
ADUtils.preloadImageAsset = function(a) {
new Image().src = ADUtils.assetsPath + a
};
ADUtils.setupDisplayNames = function(a, d) {
var c = d || a.name;
for (var e in a) {
if (a.__lookupGetter__(e)) {
continue
}
var b = a[e];
if (ADUtils.objectIsFunction(b)) {
b.displayName = ADUtils.createDisplayName(c, e)
}
}
for (var e in a.prototype) {
if (a.prototype.__lookupGetter__(e)) {
continue
}
var b = a.prototype[e];
if (ADUtils.objectIsFunction(b)) {
b.displayName = ADUtils.createDisplayName(c, e)
}
}
};
ADUtils.createDisplayName = function(b, a) {
return b + "." + a + "()"
};
ADUtils.createNodeFromString = function(b) {
var a = document.implementation.createHTMLDocument();
a.write(b);
return document.importNode(a.body.firstElementChild, true)
};
window.addEventListener("DOMContentLoaded", ADUtils.init, false);
ADUtils.setupDisplayNames(ADUtils, "ADUtils");
var ADEventTriage = {};
ADEventTriage.handleEvent = function(b) {
if (this instanceof ADObject) {
this.callSuper(b)
}
var c = b.type;
var a = "handle" + c.charAt(0).toUpperCase() + c.substr(1);
if (ADUtils.objectHasMethod(this, a)) {
this[a](b)
}
};
ADUtils.setupDisplayNames(ADEventTriage, "ADEventTriage");
var ADEventTarget = {};
ADEventTarget.addEventListener = function(c, b, a) {
this.eventTarget.addEventListener(c, b, a)
};
ADEventTarget.removeEventListener = function(c, b, a) {
this.eventTarget.removeEventListener(c, b, a)
};
ADEventTarget.dispatchEvent = function(a) {
this.eventTarget.dispatchEvent(a)
};
ADUtils.setupDisplayNames(ADEventTarget, "ADEventTarget");
var ADPropertyTriage = {};
ADPropertyTriage.handlePropertyChange = function(b, c) {
var a = "handle" + c.charAt(0).toUpperCase() + c.substr(1) + "Change";
if (ADUtils.objectHasMethod(this, a)) {
this[a](b)
}
};
ADUtils.setupDisplayNames(ADPropertyTriage, "ADPropertyTriage");
Element.prototype.hasClassName = function(a) {
return new RegExp("(?:^|\\s+)" + a + "(?:\\s+|$)").test(this.className)
};
Element.prototype.addClassName = function(a) {
if (!this.hasClassName(a)) {
this.className = [this.className, a].join(" ")
}
};
Element.prototype.removeClassName = function(b) {
if (this.hasClassName(b)) {
var a = this.className;
this.className = a.replace(new RegExp("(?:^|\\s+)" + b + "(?:\\s+|$)", "g"), " ")
}
};
Element.prototype.toggleClassName = function(a) {
this[this.hasClassName(a) ? "removeClassName": "addClassName"](a)
};
ADUtils.setupDisplayNames(Element, "Element");
Node.prototype.getNearestView = function() {
var a = this;
while (ADUtils.objectIsUndefined(a._view) && a.parentNode) {
a = a.parentNode
}
return (ADUtils.objectIsUndefined(a._view)) ? null: a._view
};
ADUtils.setupDisplayNames(Node, "Node");
window.classes = [];
function ADClass(b) {
window.classes.push(b);
if (ADUtils.objectIsUndefined(b.inherits) && b !== ADObject) {
b.inherits = ADObject
}
if (b.includes) {
ADClass.mixin(b.prototype, b.includes)
}
var e = (b.synthetizes) ? b.synthetizes: [];
for (var a = 0; a < e.length; a++) {
ADClass.synthetizeProperty(b.prototype, e[a], true)
}
var d = b;
var e = [];
while (d.inherits) {
d = d.inherits;
if (d.synthetizes) {
e = d.synthetizes.concat(e)
}
}
for (var a = 0; a < e.length; a++) {
ADClass.synthetizeProperty(b.prototype, e[a], false)
}
for (var a in b.prototype) {
if (b.prototype.__lookupGetter__(a)) {
continue
}
var c = b.prototype[a];
if (ADUtils.objectIsFunction(c)) {
c._class = b;
c._name = a;
c.displayName = ADUtils.createDisplayName(b.name, a)
}
}
if (b !== ADObject) {
b.prototype.__proto__ = b.inherits.prototype
}
}
ADClass.synthetizeProperty = function(j, f, e) {
var h = f.charAt(0).toUpperCase() + f.substr(1);
var g = "get" + h;
var i = "set" + h;
var b = ADUtils.objectHasMethod(j, g);
var d = ADUtils.objectHasMethod(j, i);
if (!e && !(b || d)) {
return
}
if (d) {
var k = function(l) {
j[i].call(this, l);
this.notifyPropertyChange(f)
};
k.displayName = "Specified setter for ." + f + " on " + j.constructor.name;
j.__defineSetter__(f, k)
} else {
var a = function(l) {
this["_" + f] = l;
this.notifyPropertyChange(f)
};
a.displayName = "Default setter for ." + f + " on " + j.constructor.name;
j.__defineSetter__(f, a)
}
if (b) {
j.__defineGetter__(f, j[g])
} else {
var c = function() {
return this["_" + f]
};
c.displayName = "Default getter for ." + f + " on " + j.constructor.name;
j.__defineGetter__(f, c)
}
};
ADClass.mixin = function(b, a) {
for (var c = 0; c < a.length; c++) {
ADUtils.copyPropertiesFromSourceToTarget(a[c], b)
}
};
ADUtils.setupDisplayNames(ADClass, "ADClass");
const ADObjectPropertyChanged = "handlePropertyChange";
function ADObject() {
this.observedProperties = {}
}
ADObject.prototype.callSuper = function() {
var a = ADObject.prototype.callSuper.caller;
if (ADUtils.objectHasMethod(a, "inherits")) {
a.inherits.apply(this, arguments)
} else {
var b = a._class.inherits.prototype;
var c = a._name;
if (ADUtils.objectHasMethod(b, c)) {
return b[c].apply(this, arguments)
}
}
};
ADObject.prototype.isPropertyObserved = function(a) {
return ! ADUtils.objectIsUndefined(this.observedProperties[a])
};
ADObject.prototype.addPropertyObserver = function(b, c, a) {
if (!this.isPropertyObserved(b)) {
this.observedProperties[b] = new Array()
} else {
if (this.observedProperties[b].indexOf(c) > -1) {
return
}
}
var a = a || ADObjectPropertyChanged;
if (ADUtils.objectHasMethod(c, a)) {
this.observedProperties[b].push({
observer: c,
methodName: a
})
}
};
ADObject.prototype.removePropertyObserver = function(d, a) {
if (!this.isPropertyObserved(d)) {
return false
}
var b = this.observedProperties[d];
var c = b.indexOf(a);
if (c > -1) {
b.splice(c, 1)
}
return (c > -1)
};
ADObject.prototype.notifyPropertyChange = function(d) {
if (!this.isPropertyObserved(d)) {
return
}
var b = this.observedProperties[d];
for (var c = 0; c < b.length; c++) {
var a = b[c];
a.observer[a.methodName](this, d)
}
};
ADObject.prototype.callMethodNameAfterDelay = function(a, c) {
var b = this;
var d = Array.prototype.slice.call(arguments, 2);
var e = function() {
b[a].apply(b, d)
};
e.displayName = ADUtils.createDisplayName(this.constructor.name, a);
return setTimeout(e, c)
};
ADClass(ADObject, "ADObject");
function ADPoint(a, b) {
this.x = (a != null && !isNaN(a)) ? a: 0;
this.y = (b != null && !isNaN(b)) ? b: 0
}
ADPoint.fromEvent = function(a) {
var a = (a.touches && a.touches.length > 0) ? a.touches[0] : a;
return new ADPoint(a.pageX, a.pageY)
};
ADPoint.fromEventInElement = function(b, a) {
var b = (b.touches && b.touches.length > 0) ? b.touches[0] : b;
return window.webkitConvertPointFromPageToNode(a, new WebKitPoint(b.pageX, b.pageY))
};
ADPoint.prototype.toString = function() {
return "ADPoint[" + this.x + "," + this.y + "]"
};
ADPoint.prototype.copy = function() {
return new ADPoint(this.x, this.y)
};
ADPoint.prototype.equals = function(a) {
return (this.x == a.x && this.y == a.y)
};
ADUtils.setupDisplayNames(ADPoint, "ADPoint");
function ADSize(b, a) {
this.width = (b != null && !isNaN(b)) ? b: 0;
this.height = (a != null && !isNaN(a)) ? a: 0
}
ADSize.prototype.toString = function() {
return "ADSize[" + this.width + "," + this.height + "]"
};
ADSize.prototype.copy = function() {
return new ADSize(this.width, this.height)
};
ADSize.prototype.equals = function(a) {
return (this.width == a.width && this.height == a.height)
};
ADUtils.setupDisplayNames(ADSize);
function ADEdgeInsets(b, d, a, c) {
this.top = b;
this.right = d;
this.bottom = a;
this.left = c
}
ADImage.inherits = ADObject;
ADImage.synthetizes = ["width", "height"];
function ADImage(a) {
this.callSuper();
this.url = a;
this.loaded = false;
this.element = new Image();
this.element.src = a;
this.element.addEventListener("load", this, false);
this._width = 0;
this._height = 0
}
ADImage.prototype.getWidth = function() {
return this.element.width
};
ADImage.prototype.getHeight = function() {
return this.element.height
};
ADImage.prototype.handleEvent = function(a) {
this.loaded = true;
this.notifyPropertyChange("loaded")
};
ADClass(ADImage);
const ADTransitionDidCompleteDelegate = "transitionDidComplete";
const ADTransitionDefaults = {
duration: 0.5,
delay: 0,
removesTargetUponCompletion: false,
revertsToOriginalValues: false
};
const ADTransitionStyles = ["-webkit-transition-property", "-webkit-transition-duration", "-webkit-transition-timing-function", "-webkit-transition-delay", "-webkit-transition"];
function ADTransition(a) {
this.target = null;
this.properties = null;
this.duration = null;
this.delay = null;
this.from = null;
this.to = null;
this.timingFunction = null;
this.delegate = null;
this.removesTargetUponCompletion = null;
this.revertsToOriginalValues = null;
this.defaultsApplied = false;
this.archivedStyles = null;
this.archivedValues = [];
ADUtils.copyPropertiesFromSourceToTarget(a, this)
}
ADTransition.prototype.applyDefaults = function() {
if (this.defaultsApplied) {
return
}
for (var a in ADTransitionDefaults) {
if (this[a] === null) {
this[a] = ADTransitionDefaults[a]
}
}
this.defaultsApplied = true
};
ADTransition.prototype.archiveTransitionStyles = function() {
if (this.archivedStyles !== null) {
return
}
var b = (this.target instanceof ADView) ? this.target.layer: this.target;
this.archivedStyles = [];
for (var a = 0; a < ADTransitionStyles.length; a++) {
this.archivedStyles.push(b.style.getPropertyValue(ADTransitionStyles[a]))
}
};
ADTransition.prototype.restoreTransitionStyles = function() {
for (var a = 0; a < ADTransitionStyles.length; a++) {
this.element.style.setProperty(ADTransitionStyles[a], this.archivedStyles[a], "")
}
this.archivedStyles = null
};
ADTransition.prototype.archiveBaseValues = function() {
if (!this.revertsToOriginalValues) {
return
}
if (this.target instanceof ADView) {
for (var a = 0; a < this.properties.length; a++) {
this.archivedValues.push(this.target[this.properties[a]])
}
} else {
for (var a = 0; a < this.properties.length; a++) {
this.archivedValues.push(this.target.layer.style.getPropertyValue(this.properties[a]))
}
}
};
ADTransition.prototype.restoreBaseValues = function() {
if (this.target instanceof ADView) {
for (var a = 0; a < this.properties.length; a++) {
this.target[this.properties[a]] = this.archivedValues[a]
}
} else {
for (var a = 0; a < this.properties.length; a++) {
this.target.layer.style.setProperty(this.properties[a], this.archivedValues[a], null)
}
}
};
ADTransition.prototype.start = function() {
if (ADTransaction.openTransactions > 0) {
ADTransaction.addTransition(this);
return
}
this.applyDefaults();
if (this.from === null) {
this.applyToState()
} else {
this.applyFromState();
var a = this;
setTimeout(function() {
a.applyToState()
},
0)
}
};
ADTransition.prototype.applyFromState = function() {
if (this.from === null) {
return
}
this.applyDefaults();
this.archiveTransitionStyles();
if (this.target instanceof ADView) {
this.target.layer.style.webkitTransitionDuration = 0;
for (var a = 0; a < this.properties.length; a++) {
this.target[this.properties[a]] = this.processTransitionValue(this.from[a])
}
} else {
this.target.style.webkitTransitionDuration = 0;
for (var a = 0; a < this.properties.length; a++) {
this.target.style.setProperty(this.properties[a], this.from[a], "")
}
}
};
ADTransition.prototype.applyToState = function() {
this.applyDefaults();
this.archiveTransitionStyles();
this.archiveBaseValues();
var e = (this.target instanceof ADView);
this.cssProperties = [];
var b = [];
for (var g = 0; g < this.properties.length; g++) {
var d = (e) ? this.target.cssPropertyNameForJSProperty(this.properties[g]) : this.properties[g];
if (this.cssProperties.indexOf(d) > -1) {
continue
}
var c = (ADUtils.objectIsArray(this.duration)) ? this.duration[g] : this.duration;
var f = (ADUtils.objectIsArray(this.timingFunction)) ? this.timingFunction[g] : this.timingFunction;
var a = (ADUtils.objectIsArray(this.delay)) ? this.delay[g] : this.delay;
b.push([d, c + "s", f, a + "s"].join(" "));
this.cssProperties.push(d)
}
if (e) {
this.element = this.target.layer;
for (var g = 0; g < this.properties.length; g++) {
this.target[this.properties[g]] = this.processTransitionValue(this.to[g])
}
} else {
this.element = this.target;
for (var g = 0; g < this.properties.length; g++) {
this.target.style.setProperty(this.properties[g], this.to[g], "")
}
}
this.element.style.webkitTransition = b.join(", ");
this.element.addEventListener("webkitTransitionEnd", this, false);
this.completedTransitions = 0
};
ADTransition.prototype.handleEvent = function(a) {
if (a.currentTarget !== this.element) {
return
}
this.completedTransitions++;
if (this.completedTransitions != this.cssProperties.length) {
return
}
if (ADUtils.objectHasMethod(this.delegate, ADTransitionDidCompleteDelegate)) {
this.delegate[ADTransitionDidCompleteDelegate](this)
}
if (this.removesTargetUponCompletion) {
var b = this.target;
if (this.target instanceof ADView) {
b.removeFromSuperview()
} else {
b.parentNode.removeChild(b)
}
} else {
this.restoreTransitionStyles()
}
if (this.revertsToOriginalValues) {
this.restoreBaseValues()
}
};
const ADTransitionWidthRegExp = new RegExp(/\$width/g);
const ADTransitionHeightRegExp = new RegExp(/\$height/g);
ADTransition.prototype.processTransitionValue = function(a) {
if (!ADUtils.objectIsString(a)) {
return a
}
a = a.replace(ADTransitionWidthRegExp, ADUtils.px(this.target.size.width));
return a.replace(ADTransitionHeightRegExp, ADUtils.px(this.target.size.height))
};
ADClass(ADTransition);
var ADTransaction = {
transitions: [],
openTransactions: 0,
defaults: {},
defaultsStates: []
};
ADTransaction.begin = function() {
if (this.openTransactions == 0) {
this.transitions = [];
this.defaults = {}
} else {
this.defaultsStates.push(this.defaults)
}
this.openTransactions++
};
ADTransaction.addTransition = function(b) {
for (var a in this.defaults) {
if (b[a] === null) {
b[a] = this.defaults[a]
}
}
this.transitions.push(b)
};
ADTransaction.commit = function() {
if (this.openTransactions == 0) {
return
}
this.openTransactions--;
if (this.openTransactions != 0) {
this.defaults = this.defaultsStates.pop();
return
}
var b = this.transitions;
for (var a = 0; a < b.length; a++) {
b[a].applyFromState()
}
setTimeout(function() {
for (var c = 0; c < b.length; c++) {
b[c].applyToState()
}
},
0)
};
ADUtils.setupDisplayNames(ADTransaction, "ADTransaction");
const ADViewTransitionDissolveOut = {
properties: ["opacity"],
from: [1],
to: [0]
};
const ADViewTransitionDissolveIn = {
properties: ["opacity"],
from: [0],
to: [1]
};
const ADViewTransitionZoomIn = {
properties: ["opacity", "transform"],
from: [0, "scale(0.2)"],
to: [1, "scale(1)"]
};
const ADViewTransitionZoomOut = {
properties: ["opacity", "transform"],
from: [0, "scale(1.2)"],
to: [1, "scale(1)"]
};
const ADViewTransitionCrossSpinRight = {
properties: ["opacity", "transform"],
from: [0, "rotate(20deg)"],
to: [1, "rotate(0)"]
};
const ADViewTransitionCrossSpinLeft = {
properties: ["opacity", "transform"],
from: [0, "rotate(-20deg)"],
to: [1, "rotate(0)"]
};
const ADViewTransitionFlipLeftOut = {
properties: ["transform"],
from: ["perspective(800) rotateY(0deg)"],
to: ["perspective(800) rotateY(-180deg)"]
};
const ADViewTransitionFlipLeftIn = {
properties: ["transform"],
from: ["perspective(800) rotateY(180deg)"],
to: ["perspective(800) rotateY(0deg)"]
};
const ADViewTransitionFlipRightOut = {
properties: ["transform"],
from: ["perspective(800) rotateY(0deg)"],
to: ["perspective(800) rotateY(180deg)"]
};
const ADViewTransitionFlipRightIn = {
properties: ["transform"],
from: ["perspective(800) rotateY(-180deg)"],
to: ["perspective(800) rotateY(0deg)"]
};
const ADViewTransitionCubeLeftOut = {
base: ["anchorPoint", new ADPoint(1, 0.5)],
properties: ["transform"],
from: ["perspective(800) rotateY(0deg) translateZ(0)"],
to: ["perspective(800) rotateY(-90deg) translateZ($width)"]
};
const ADViewTransitionCubeLeftIn = {
base: ["anchorPoint", new ADPoint(0, 0.5)],
properties: ["transform"],
from: ["perspective(800) rotateY(90deg) translateZ($width)"],
to: ["perspective(800) rotateY(0deg) translateZ(0)"]
};
const ADViewTransitionCubeRightOut = {
base: ["anchorPoint", new ADPoint(0, 0.5)],
properties: ["transform"],
from: ["perspective(800) rotateY(0deg) translateZ(0)"],
to: ["perspective(800) rotateY(90deg) translateZ($width)"]
};
const ADViewTransitionCubeRightIn = {
base: ["anchorPoint", new ADPoint(1, 0.5)],
properties: ["transform"],
from: ["perspective(800) rotateY(-90deg) translateZ($width)"],
to: ["perspective(800) rotateY(0deg) translateZ(0)"]
};
const ADViewTransitionDoorOpenLeftOut = {
base: ["anchorPoint", new ADPoint(0, 0.5), "zIndex", 1],
properties: ["transform"],
from: ["perspective(800) rotateY(0deg)"],
to: ["perspective(800) rotateY(-90deg)"]
};
const ADViewTransitionDoorCloseLeftIn = {
base: ["anchorPoint", new ADPoint(0, 0.5), "zIndex", 2],
properties: ["transform"],
from: ["perspective(800) rotateY(-90deg)"],
to: ["perspective(800) rotateY(0deg)"]
};
const ADViewTransitionDoorOpenRightOut = {
base: ["anchorPoint", new ADPoint(1, 0.5), "zIndex", 1],
properties: ["transform"],
from: ["perspective(800) rotateY(0deg)"],
to: ["perspective(800) rotateY(90deg)"]
};
const ADViewTransitionDoorCloseRightIn = {
base: ["anchorPoint", new ADPoint(1, 0.5), "zIndex", 2],
properties: ["transform"],
from: ["perspective(800) rotateY(90deg)"],
to: ["perspective(800) rotateY(0deg)"]
};
const ADViewTransitionRevolveTowardsLeftOut = {
base: ["anchorPoint", new ADPoint(0, 0.5)],
properties: ["transform", "opacity"],
from: ["perspective(800) rotateY(0deg)", 1],
to: ["perspective(800) rotateY(-90deg)", 0]
};
const ADViewTransitionRevolveTowardsLeftIn = {
base: ["anchorPoint", new ADPoint(0, 0.5)],
properties: ["transform"],
from: ["perspective(800) rotateY(90deg)"],
to: ["perspective(800) rotateY(0deg)"]
};
const ADViewTransitionRevolveAwayLeftOut = {
base: ["anchorPoint", new ADPoint(0, 0.5)],
properties: ["transform"],
from: ["perspective(800) rotateY(0deg)"],
to: ["perspective(800) rotateY(90deg)"]
};
const ADViewTransitionRevolveAwayLeftIn = {
base: ["anchorPoint", new ADPoint(0, 0.5)],
properties: ["transform", "opacity"],
from: ["perspective(800) rotateY(-90deg)", 0],
to: ["perspective(800) rotateY(0deg)", 1]
};
const ADViewTransitionRevolveTowardsRightOut = {
base: ["anchorPoint", new ADPoint(1, 0.5)],
properties: ["transform", "opacity"],
from: ["perspective(800) rotateY(0deg)", 1],
to: ["perspective(800) rotateY(90deg)", 0]
};
const ADViewTransitionRevolveTowardsRightIn = {
base: ["anchorPoint", new ADPoint(1, 0.5)],
properties: ["transform"],
from: ["perspective(800) rotateY(-90deg)"],
to: ["perspective(800) rotateY(0deg)"]
};
const ADViewTransitionRevolveAwayRightOut = {
base: ["anchorPoint", new ADPoint(1, 0.5)],
properties: ["transform"],
from: ["perspective(800) rotateY(0deg)"],
to: ["perspective(800) rotateY(-90deg)"]
};
const ADViewTransitionRevolveAwayRightIn = {
base: ["anchorPoint", new ADPoint(1, 0.5)],
properties: ["transform", "opacity"],
from: ["perspective(800) rotateY(90deg)", 0],
to: ["perspective(800) rotateY(0deg)", 1]
};
const ADViewTransitionSpinOut = {
properties: ["transform", "opacity"],
from: ["perspective(800) rotate(0)", 1],
to: ["perspective(800) rotate(-180deg)", 0]
};
const ADViewTransitionSpinIn = {
base: ["zIndex", 1],
properties: ["transform", "opacity"],
from: ["perspective(800) rotate(-180deg)", 0],
to: ["perspective(800) rotate(0)", 1]
};
const ADViewTransitionScaleIn = {
base: ["zIndex", 1],
properties: ["transform"],
from: ["scale(0.01)"],
to: ["scale(1)"]
};
const ADViewTransitionScaleOut = {
base: ["zIndex", 1],
properties: ["transform"],
from: ["scale(1)"],
to: ["scale(0.01)"]
};
function ADViewLayerInsertionNotificationHelper() {
this.callSuper();
this.views = [];
document.addEventListener("DOMSubtreeModified", this, true)
}
ADViewLayerInsertionNotificationHelper.prototype.considerView = function(a) {
if (this.views.indexOf(a) == -1) {
a._ignoreView = false;
this.views.push(a)
}
};
ADViewLayerInsertionNotificationHelper.prototype.handleEvent = function(a) {
this.processViews()
};
ADViewLayerInsertionNotificationHelper.prototype.processViews = function() {
if (this.views.length < 1) {
return
}
var a;
for (var b = 0; b < this.views.length; ++b) {
a = this.views[b];
for (var c = a.superview; c && !a._ignoreView; c = c.superview) {
if ("_ignoreView" in c) {
a._ignoreView = true
}
}
}
while (this.views.length > 0) {
a = this.views.pop();
if (a._ignoreView) {
delete a._ignoreView;
continue
}
delete a._ignoreView;
a.dispatchNotificationOfLayerInsertionIntoDocument()
}
};
ADClass(ADViewLayerInsertionNotificationHelper);
ADView.inherits = ADObject;
ADView.synthetizes = ["id", "position", "size", "transform", "anchorPoint", "doubleSided", "zIndex", "opacity", "clipsToBounds", "transitionsEnabled", "transitionsDuration", "hostingLayer"];
ADView.layerInsertionNotificationHelper = new ADViewLayerInsertionNotificationHelper();
function ADView() {
this.callSuper();
this.superview = null;
this.subviews = [];
this.tracksTouchesOnceTouchesBegan = false;
this.userInteractionEnabled = true;
this.autoresizesSubviews = true;
this.autoresizingMask = ADViewAutoresizingNone;
this.layerIsInDocument = false;
this._position = new ADPoint();
this._size = new ADSize();
this._anchorPoint = new ADPoint(0.5, 0.5);
this._doubleSided = true;
this._zIndex = 0;
this._transform = ADUtils.t(0, 0);
this._clipsToBounds = false;
this._transitionsEnabled = false;
this._transitionsDuration = 0.5;
this._hostingLayer = null;
if (ADUtils.objectIsUndefined(this.layer) || this.layer === null) {
this.createLayer()
}
this.layer.addEventListener(ADStartEvent, this, false);
this.layer.addEventListener("DOMNodeInsertedIntoDocument", this, true);
this.layer.addEventListener("DOMNodeRemovedFromDocument", this, true);
this.layer._view = this
}
ADView.prototype.toString = function() {
return [this.constructor.name, "[", this._size.width, "x", this._size.height, "@", this._position.x, ",", this._position.y, "]"].join("")
};
ADView.prototype.getId = function() {
return this.layer.id
};
ADView.prototype.setId = function(a) {
this.layer.id = a
};
ADView.prototype.setPosition = function(a) {
if (this._position.equals(a)) {
return
}
this._position = a;
this.updateLayerTransform()
};
ADView.prototype.setSize = function(a) {
if (this._size.equals(a)) {
return
}
var b = this._size.copy();
this._size = a;
this.layer.style.width = a.width + "px";
this.layer.style.height = a.height + "px";
if (this.autoresizesSubviews) {
this.resizeSubviewsWithOldSize(b)
}
};
ADView.prototype.setTransform = function(a) {
this._transform = a;
this.updateLayerTransform()
};
ADView.prototype.setAnchorPoint = function(a) {
this._anchorPoint = a;
this.layer.style.webkitTransformOrigin = Math.round(a.x * 100) + "% " + Math.round(a.y * 100) + "% 0"
};
ADView.prototype.setDoubleSided = function(a) {
this._doubleSided = a;
this.layer.style.webkitBackfaceVisibility = a ? "visible": "hidden"
};
ADView.prototype.setZIndex = function(a) {
this._zIndex = a;
this.layer.style.zIndex = a
};
ADView.prototype.updateLayerTransform = function() {
this.layer.style.webkitTransform = ADUtils.t(this._position.x, this._position.y) + this._transform
};
ADView.prototype.getOpacity = function() {
return Number(window.getComputedStyle(this.layer).opacity)
};
ADView.prototype.setOpacity = function(a) {
this.layer.style.opacity = a
};
ADView.prototype.setTransitionsEnabled = function(a) {
if (a) {
this.layer.style.webkitTransitionProperty = "-webkit-transform, opacity";
this.layer.style.webkitTransitionDuration = this._transitionsDuration + "s"
} else {
this.layer.style.webkitTransitionDuration = "0s"
}
this._transitionsEnabled = a
};
ADView.prototype.setTransitionsDuration = function(a) {
this.layer.style.webkitTransitionDuration = a + "s";
this._transitionsDuration = a
};
ADView.prototype.setClipsToBounds = function(a) {
this._clipsToBounds = a;
this.layer.style.overflow = a ? "hidden": "visible"
};
ADView.prototype.getHostingLayer = function() {
return (this._hostingLayer != null) ? this._hostingLayer: this.layer
};
ADView.prototype.addSubview = function(a) {
return this.insertSubviewAtIndex(a, this.subviews.length)
};
ADView.prototype.removeFromSuperview = function() {
if (this.superview == null) {
return
}
this.willMoveToSuperview(null);
this.superview.willRemoveSubview(this);
var a = this._indexInSuperviewSubviews;
this.superview.subviews.splice(a, 1);
for (var b = a; b < this.superview.subviews.length; b++) {
this.superview.subviews[b]._indexInSuperviewSubviews = b
}
this.layer.parentNode.removeChild(this.layer);
this.superview = null;
this.didMoveToSuperview()
};
ADView.prototype.insertSubviewAtIndex = function(b, a) {
if (a > this.subviews.length) {
return
}
if (b.superview === this) {
a--
}
b.removeFromSuperview();
b.willMoveToSuperview(this);
this.subviews.splice(a, 0, b);
b._indexInSuperviewSubviews = a;
for (var d = a + 1; d < this.subviews.length; d++) {
this.subviews[d]._indexInSuperviewSubviews = d
}
var c = this.hostingLayer;
if (a == this.subviews.length - 1) {
c.appendChild(b.layer)
} else {
c.insertBefore(b.layer, this.subviews[a + 1].layer)
}
b.superview = this;
b.didMoveToSuperview();
this.didAddSubview(b);
return b
};
ADView.prototype.insertSubviewAfterSubview = function(c, a) {
if (a.superview !== this) {
return
}
var b = a._indexInSuperviewSubviews + 1;
if (b < this.subviews.length) {
this.insertSubviewAtIndex(c, b)
} else {
this.addSubview(c)
}
return c
};
ADView.prototype.insertSubviewBeforeSubview = function(b, a) {
if (a.superview !== this) {
return
}
return this.insertSubviewAtIndex(b, a._indexInSuperviewSubviews)
};
ADView.prototype.exchangeSubviewsAtIndices = function(c, d) {
if (c >= this.subviews.length || d >= this.subviews.length) {
return
}
var a = this.subviews[c];
var g = this.subviews[d];
this.subviews[c] = g;
this.subviews[d] = a;
a._indexInSuperviewSubviews = d;
g._indexInSuperviewSubviews = c;
var f = a.layer;
var h = g.layer;
var e = this.hostingLayer;
var i = f.nextSibling;
var b = h.nextSibling;
if (i != null) {
e.insertBefore(h, i)
} else {
e.appendChild(h)
}
if (b != null) {
e.insertBefore(f, b)
} else {
e.appendChild(f)
}
};
ADView.prototype.isDescendantOfView = function(c) {
var b = false;
var a = this;
while (a.superview != null) {
if (a.superview === c) {
b = true;
break
}
a = a.superview
}
return b
};
ADView.prototype.createLayer = function() {
this.layer = document.createElement("div");
this.layer.className = "ad-view"
};
ADView.prototype.willMoveToSuperview = function(a) {};
ADView.prototype.didMoveToSuperview = function() {};
ADView.prototype.didAddSubview = function(a) {};
ADView.prototype.willRemoveSubview = function(a) {};
ADView.prototype.layerWasInsertedIntoDocument = function() {
this.layerIsInDocument = true
};
ADView.prototype.layerWasRemovedFromDocument = function() {};
ADView.prototype.handleLayerInsertionIntoDocument = function(a) {
if (a.target !== this.layer || this.layer.ownerDocument !== document || this.layerIsInDocument) {
return
}
a.stopPropagation();
ADView.layerInsertionNotificationHelper.considerView(this)
};
ADView.prototype.dispatchNotificationOfLayerInsertionIntoDocument = function() {
var d = [];
var a = [].concat(this.subviews);
var c = 0;
while (a.length > 0) {
var b = a.shift();
if (typeof(b) === "number") {
c = b
} else {
if (d[c] === undefined) {
d[c] = []
}
d[c].push(b);
a = a.concat(c + 1, b.subviews)
}
}
var e;
while (d.length > 0) {
e = d.pop();
while (e.length > 0) {
e.pop().layerWasInsertedIntoDocument()
}
}
this.layerWasInsertedIntoDocument()
};
ADView.prototype.handleLayerRemovalFromDocument = function(a) {
if (a.target === this.layer && this.layer.ownerDocument === document) {
a.stopPropagation();
this.layerIsInDocument = false;
this.layerWasRemovedFromDocument()
}
};
ADView.prototype.handleEvent = function(a) {
switch (a.type) {
case ADStartEvent:
this.touchesBegan(a);
break;
case ADMoveEvent:
this.touchesMoved(a);
break;
case ADEndEvent:
this.touchesEnded(a);
break;
case "touchcancel":
this.touchesCancelled(a);
break;
case "DOMNodeInsertedIntoDocument":
this.handleLayerInsertionIntoDocument(a);
break;
case "DOMNodeRemovedFromDocument":
this.handleLayerRemovalFromDocument(a);
break
}
};
ADView.prototype.touchesBegan = function(a) {
if (!this.userInteractionEnabled) {
return
}
if (this.tracksTouchesOnceTouchesBegan) {
window.addEventListener(ADMoveEvent, this, true);
window.addEventListener(ADEndEvent, this, true);
window.addEventListener("touchcancel", this, true)
}
};
ADView.prototype.touchesMoved = function(a) {
if (!this.userInteractionEnabled) {
return
}
a.preventDefault()
};
ADView.prototype.touchesEnded = function(a) {
if (!this.userInteractionEnabled) {
return
}
window.removeEventListener(ADMoveEvent, this, true);
window.removeEventListener(ADEndEvent, this, true);
window.removeEventListener("touchcancel", this, true)
};
ADView.prototype.touchesCancelled = function(a) {
if (!this.userInteractionEnabled) {
return
}
window.removeEventListener(ADMoveEvent, this, true);
window.removeEventListener(ADEndEvent, this, true);
window.removeEventListener("touchcancel", this, true)
};
ADView.prototype.pointInside = function(a) {
return (a.x >= 0 && a.x <= this.size.width && a.y >= 0 && a.y <= this.size.height)
};
const ADViewAutoresizingNone = 0;
const ADViewAutoresizingFlexibleLeftMargin = 1 << 0;
const ADViewAutoresizingFlexibleWidth = 1 << 1;
const ADViewAutoresizingFlexibleRightMargin = 1 << 2;
const ADViewAutoresizingFlexibleTopMargin = 1 << 3;
const ADViewAutoresizingFlexibleHeight = 1 << 4;
const ADViewAutoresizingFlexibleBottomMargin = 1 << 5;
ADView.prototype.resizeSubviewsWithOldSize = function(b) {
for (var a = 0; a < this.subviews.length; a++) {
this.subviews[a].resizeWithOldSuperviewSize(b)
}
};
ADView.prototype.resizeWithOldSuperviewSize = function(d) {
var a = this._position.copy();
var e = this._size.copy();
var g = this.autoresizingMask;
var f = (g & ADViewAutoresizingFlexibleLeftMargin) + (g & ADViewAutoresizingFlexibleWidth) + (g & ADViewAutoresizingFlexibleRightMargin);
switch (f) {
case ADViewAutoresizingNone:
break;
case ADViewAutoresizingFlexibleLeftMargin:
a.x += this.superview._size.width - d.width;
break;
case ADViewAutoresizingFlexibleWidth:
e.width = this.superview._size.width - (d.width - this._size.width);
break;
case ADViewAutoresizingFlexibleLeftMargin | ADViewAutoresizingFlexibleWidth: var b = (d.width - this._size.width - this._position.x);
a.x = (this._position.x / (d.width - b)) * (this.superview._size.width - b);
e.width = this.superview._size.width - a.x - b;
break;
case ADViewAutoresizingFlexibleRightMargin:
break;
case ADViewAutoresizingFlexibleLeftMargin | ADViewAutoresizingFlexibleRightMargin: var b = (d.width - this._size.width - this._position.x);
a.x += (this.superview._size.width - d.width) * (this.position.x / (this.position.x + b));
break;
case ADViewAutoresizingFlexibleRightMargin | ADViewAutoresizingFlexibleWidth: var b = (d.width - this._size.width - this._position.x);
scaled_right_margin = (b / (d.width - this._position.x)) * (this.superview._size.width - this._position.x);
e.width = this.superview._size.width - a.x - scaled_right_margin;
break;
case ADViewAutoresizingFlexibleLeftMargin | ADViewAutoresizingFlexibleWidth | ADViewAutoresizingFlexibleRightMargin: a.x = (this._position.x / d.width) * this.superview._size.width;
e.width = (this._size.width / d.width) * this.superview._size.width;
break
}
var h = (g & ADViewAutoresizingFlexibleTopMargin) + (g & ADViewAutoresizingFlexibleHeight) + (g & ADViewAutoresizingFlexibleBottomMargin);
switch (h) {
case ADViewAutoresizingNone:
break;
case ADViewAutoresizingFlexibleTopMargin:
a.y += this.superview._size.height - d.height;
break;
case ADViewAutoresizingFlexibleHeight:
e.height = this.superview._size.height - (d.height - this._size.height);
break;
case ADViewAutoresizingFlexibleTopMargin | ADViewAutoresizingFlexibleHeight: var c = (d.height - this._size.height - this._position.y);
a.y = (this._position.y / (d.height - c)) * (this.superview._size.height - c);
e.height = this.superview._size.height - a.y - c;
break;
case ADViewAutoresizingFlexibleBottomMargin:
break;
case ADViewAutoresizingFlexibleTopMargin | ADViewAutoresizingFlexibleBottomMargin: var c = (d.height - this._size.height - this._position.y);
a.y += (this.superview._size.height - d.height) * (this.position.y / (this.position.y + c));
break;
case ADViewAutoresizingFlexibleBottomMargin | ADViewAutoresizingFlexibleHeight: var c = (d.height - this._size.height - this._position.y);
scaled_bottom_margin = (c / (d.height - this._position.y)) * (this.superview._size.height - this._position.y);
e.height = this.superview._size.height - a.y - scaled_bottom_margin;
break;
case ADViewAutoresizingFlexibleTopMargin | ADViewAutoresizingFlexibleHeight | ADViewAutoresizingFlexibleBottomMargin: a.y = (this._position.y / d.height) * this.superview._size.height;
e.height = (this._size.height / d.height) * this.superview._size.height;
break
}
this.position = a;
this.size = e
};
const ADViewPropertyMapping = {
opacity: "opacity",
transform: "-webkit-transform",
position: "-webkit-transform",
anchorPoint: "-webkit-transform-origin",
doubleSided: "-webkit-backface-visibility",
zIndex: "z-index"
};
ADView.prototype.cssPropertyNameForJSProperty = function(a) {
return ADViewPropertyMapping[a]
};
ADView.prototype.applyTransition = function(e, c) {
if (e === null) {
return
}
var d = new ADTransition(e);
d.target = this;
if (c) {
var b = d.from;
d.from = d.to;
d.to = b
}
if (e.base) {
for (var a = 0; a < e.base.length; a += 2) {
this[e.base[a]] = e.base[a + 1]
}
}
d.start()
};
ADView.getViewById = function(b) {
var a = document.getElementById(b);
return (a && !ADUtils.objectIsUndefined(a._view)) ? a._view: null
};
ADClass(ADView);
ADContentView.inherits = ADView;
function ADContentView(b) {
var a = b;
if (ADUtils.objectIsString(b)) {
a = document.querySelector(b)
}
this.layer = a;
this.callSuper();
this.layer.addClassName("ad-view");
if (a === document.body) {
this.size = new ADSize(window.innerWidth, window.innerHeight)
}
}
ADContentView.prototype.layerWasInsertedIntoDocument = function() {
this.callSuper();
this.refreshSize()
};
ADContentView.prototype.refreshSize = function() {
var a = window.getComputedStyle(this.layer);
this._size = new ADSize(parseInt(a.width), parseInt(a.height))
};
ADClass(ADContentView);
ADRootView.inherits = ADContentView;
ADRootView.synthetizes = ["disablesDefaultScrolling"];
function ADRootView(a) {
this.callSuper(a);
this._disablesDefaultScrolling = true;
this.disablesDefaultScrolling = true;
if (this.layer === document.body) {
window.addEventListener("orientationchange", this, false);
this.layer.removeClassName("ad-view")
}
}
ADRootView.prototype.setDisablesDefaultScrolling = function(a) {
this.layer[a ? "addEventListener": "removeEventListener"](ADMoveEvent, ADUtils.preventEventDefault, false);
this._disablesDefaultScrolling = a
};
ADRootView.prototype.handleEvent = function(a) {
this.callSuper(a);
if (a.type == "orientationchange") {
var b = this;
setTimeout(function() {
b.size = new ADSize(window.innerWidth, window.innerHeight);
window.scrollTo(0, 0)
},
0)
}
};
ADRootView._sharedRoot = null;
ADRootView.__defineGetter__("sharedRoot",
function() {
if (ADRootView._sharedRoot === null) {
ADRootView._sharedRoot = new ADRootView(document.body)
}
return ADRootView._sharedRoot
});
ADRootView.__defineSetter__("sharedRoot",
function(a) {
ADRootView._sharedRoot = a
});
ADClass(ADRootView);
const ADHTMLFragmentLoaderDidFail = "htmlFragmentLoaderDidFail";
const ADHTMLFragmentLoaderDidLoad = "htmlFragmentLoaderDidLoad";
ADViewController.inherits = ADObject;
ADHTMLFragmentLoader.includes = [ADEventTriage];
function ADHTMLFragmentLoader(a, b) {
this.callSuper();
this.url = a;
this.delegate = b;
this.fragment = null;
this.request = new XMLHttpRequest();
this.request.addEventListener("load", this, false);
this.request.addEventListener("error", this, false);
if (this.url !== undefined) {
this.load()
}
}
ADHTMLFragmentLoader.prototype.load = function() {
this.fragment = null;
this.request.abort();
var b = (this.url.indexOf("http") == 0);
this.request.open("GET", this.url, b);
try {
this.request.send()
} catch(a) {
this.requestDidFail()
}
return b
};
ADHTMLFragmentLoader.prototype.handleLoad = function(a) {
this.requestDidLoad()
};
ADHTMLFragmentLoader.prototype.handleError = function(a) {
this.requestDidFail()
};
ADHTMLFragmentLoader.prototype.requestDidLoad = function() {
this.fragment = ADUtils.createNodeFromString(this.request.responseText);
if (ADUtils.objectHasMethod(this.delegate, ADHTMLFragmentLoaderDidLoad)) {
this.delegate[ADHTMLFragmentLoaderDidLoad](this)
}
};
ADHTMLFragmentLoader.prototype.requestDidFail = function() {
if (ADUtils.objectHasMethod(this.delegate, ADHTMLFragmentLoaderDidFail)) {
this.delegate[ADHTMLFragmentLoaderDidFail](this)
}
};
ADClass(ADHTMLFragmentLoader);
const ADScrollIndicatorThickness = 7;
const ADScrollIndicatorEndSize = 3;
const ADScrollIndicatorTypeHorizontal = "horizontal";
const ADScrollIndicatorTypeVertical = "vertical";
ADScrollIndicator.inherits = ADView;
ADScrollIndicator.synthetizes = ["visible", "width", "height", "style"];
function ADScrollIndicator(a) {
this.callSuper();
this.type = a;
this.layer.addClassName(a);
this._visible = false;
this._width = ADScrollIndicatorThickness;
this._height = ADScrollIndicatorThickness;
this.position = new ADPoint( - ADScrollIndicatorThickness, -ADScrollIndicatorThickness);
this.positionBeforeHide = this.position;
this.lastPositionUpdateInHide = false;
this._style = ADScrollViewIndicatorStyleDefault;
this.visible = false
}
ADScrollIndicator.prototype.createLayer = function() {
this.layer = document.createElement("div");
this.layer.addClassName("ad-scroll-indicator");
this.layer.addEventListener("webkitTransitionEnd", this, false);
this.start = this.layer.appendChild(document.createElement("div"));
this.middle = this.layer.appendChild(document.createElement("img"));
this.end = this.layer.appendChild(document.createElement("div"))
};
ADScrollIndicator.prototype.setPosition = function(a) {
a.x = Math.round(a.x);
a.y = Math.round(a.y);
this.callSuper(a);
this.lastPositionUpdateInHide = false
};
ADScrollIndicator.prototype.setSize = function(a) {
this.width = a.width;
this.height = a.height;
this._size = a
};
ADScrollIndicator.prototype.setStyle = function(c) {
this._style = c;
this.layer.removeClassName(this._style);
this.layer.addClassName(this._style);
var a = (this.type === ADScrollIndicatorTypeHorizontal) ? "Horizontal": "Vertical";
var b = "Default";
switch (c) {
case ADScrollViewIndicatorStyleWhite:
b = "White";
break;
case ADScrollViewIndicatorStyleBlack:
b = "Black";
break
}
this.middle.src = ADUtils.assetsPath + "scrollindicator/UIScrollerIndicator" + b + a + "Middle.png"
};
ADScrollIndicator.prototype.setWidth = function(a) {
this.middle.style.webkitTransform = "translate3d(0,0,0) scale(" + (a - ADScrollIndicatorEndSize * 2) + ",1)";
this.end.style.webkitTransform = "translate3d(" + (a - ADScrollIndicatorEndSize) + "px,0,0)";
this._width = a
};
ADScrollIndicator.prototype.setHeight = function(a) {
this.middle.style.webkitTransform = "translate3d(0,0,0) scale(1," + (a - ADScrollIndicatorEndSize * 2) + ")";
this.end.style.webkitTransform = "translate3d(0," + (a - ADScrollIndicatorEndSize) + "px,0)";
this._height = a
};
ADScrollIndicator.prototype.setVisible = function(a) {
if (a) {
this.fading = false;
this.opacity = 1;
this.position = this.lastPositionUpdateInHide ? this.positionBeforeHide: this.position
} else {
if (!this.fading) {
this.fading = true;
this.opacity = 0;
this.lastPositionUpdateInHide = true;
this.positionBeforeHide = this.position
}
}
this._visible = a
};
ADScrollIndicator.prototype.flash = function() {
this.flashing = true
};
ADScrollIndicator.prototype.handleEvent = function(a) {
if (a.type != "webkitTransitionEnd") {
return
}
this.callSuper(a);
if (this.flashing) {
this.flashing = false
} else {
if (this.fading) {
this.position = new ADPoint( - ADScrollIndicatorThickness, -ADScrollIndicatorThickness);
this.fading = false
}
}
};
ADClass(ADScrollIndicator);
const ADScrollViewWillBeginDragging = "scrollViewWillBeginDragging";
const ADScrollViewDidEndScrollingAnimation = "scrollViewDidEndScrollingAnimation";
const ADScrollViewDidScroll = "scrollViewDidScroll";
const ADScrollViewDidEndDragging = "scrollViewDidEndDragging";
const ADScrollViewWillBeginDecelerating = "scrollViewWillBeginDecelerating";
const ADScrollViewDidEndDecelerating = "scrollViewDidEndDecelerating";
const ADScrollViewMinimumTrackingForDrag = 5;
const ADScrollViewPagingTransitionDuration = "0.25s";
const ADScrollViewMinIndicatorLength = 34;
const ADScrollViewAcceleration = 15;
const ADScrollViewMaxTimeForTrackingDataPoints = 100;
const ADScrollViewDecelerationFrictionFactor = 0.95;
const ADScrollViewDesiredAnimationFrameRate = 1000 / 60;
const ADScrollViewMinimumVelocity = 0.05;
const ADScrollViewPenetrationDeceleration = 0.08;
const ADScrollViewPenetrationAcceleration = 0.15;
const ADScrollViewMinVelocityForDeceleration = 1;
const ADScrollViewMinVelocityForDecelerationWithPaging = 4;
const ADScrollViewMaxVelocityForBouncingWithPaging = 20;
const ADScrollViewClickableElementNames = ["a", "button", "input", "select"];
const ADScrollViewContentTouchesDelay = 150;
const ADScrollViewAutomatedContentSize = -1;
const ADScrollViewIndicatorStyleDefault = "indicator-default";
const ADScrollViewIndicatorStyleBlack = "indicator-black";
const ADScrollViewIndicatorStyleWhite = "indicator-white";
ADScrollView.inherits = ADView;
ADScrollView.synthetizes = ["contentOffset", "contentSize", "indicatorStyle", "scrollEnabled", "scrollIndicatorInsets"];
function ADScrollView() {
this.callSuper();
this._contentOffset = new ADPoint();
this._contentSize = ADScrollViewAutomatedContentSize;
this.adjustedContentSize = new ADSize();
this.tracking = false;
this.dragging = false;
this.horizontalScrollEnabled = true;
this.verticalScrollEnabled = true;
this.decelerating = false;
this.decelerationTimer = null;
this._indicatorStyle = "";
this.showsHorizontalScrollIndicator = true;
this.showsVerticalScrollIndicator = true;
this.scrollIndicatorsNeedFlashing = false;
this._scrollIndicatorInsets = new ADEdgeInsets(0, 0, 0, 0);
this.pagingEnabled = false;
this.bounces = true;
this.clipsToBounds = true;
this.delegate = null;
this.layer.addEventListener("webkitTransitionEnd", this, false);
this.hostingLayer.addEventListener("webkitTransitionEnd", this, false);
this.indicatorStyle = ADScrollViewIndicatorStyleDefault;
this.tracksTouchesOnceTouchesBegan = true;
this.layer.addEventListener(ADStartEvent, this, true);
this.delaysContentTouches = true;
this.canCancelContentTouches = true;
this._scrollEnabled = true;
this._setContentOffsetWithAnimationCalledFromSetter = false
}
ADScrollView.prototype.createLayer = function() {
this.callSuper();
this.layer.addClassName("ad-scroll-view");
this.horizontalScrollIndicator = new ADScrollIndicator(ADScrollIndicatorTypeHorizontal);
this.verticalScrollIndicator = new ADScrollIndicator(ADScrollIndicatorTypeVertical);
this.layer.appendChild(this.horizontalScrollIndicator.layer);
this.layer.appendChild(this.verticalScrollIndicator.layer);
this.hostingLayer = this.layer.insertBefore(document.createElement("div"), this.horizontalScrollIndicator.layer);
this.hostingLayer.className = "hosting-layer"
};
ADScrollView.prototype.setSize = function(a) {
this.callSuper(a);
this.adjustContentSize(true)
};
ADScrollView.prototype.setScrollEnabled = function(a) {
this._scrollEnabled = a;
if (!a) {
this.stopTrackingTouches()
}
};
ADScrollView.prototype.setContentOffset = function(a) {
this._setContentOffsetWithAnimationCalledFromSetter = true;
this.setContentOffsetWithAnimation(a, false)
};
ADScrollView.prototype.setContentOffsetWithAnimation = function(b, a) {
if (b.equals(this._contentOffset)) {
return
}
this._contentOffset = b;
if (!this.dragging && !this.decelerating) {
this.adjustContentSize(false);
this._contentOffset.x = Math.max(Math.min(this.maxPoint.x, this._contentOffset.x), 0);
this._contentOffset.y = Math.max(Math.min(this.maxPoint.y, this._contentOffset.y), 0)
}
this.hostingLayer.style.webkitTransform = ADUtils.t( - this._contentOffset.x, -this._contentOffset.y);
if (a) {
this.scrollTransitionsNeedRemoval = true;
this.hostingLayer.style.webkitTransitionDuration = ADScrollViewPagingTransitionDuration
} else {
this.didScroll(false)
}
if (!a) {
if (this.horizontalScrollEnabled && this.showsHorizontalScrollIndicator) {
this.updateHorizontalScrollIndicator()
}
if (this.verticalScrollEnabled && this.showsVerticalScrollIndicator) {
this.updateVerticalScrollIndicator()
}
}
if (!this._setContentOffsetWithAnimationCalledFromSetter) {
this.notifyPropertyChange("contentOffset")
}
this._setContentOffsetWithAnimationCalledFromSetter = false
};
ADScrollView.prototype.snapContentOffsetToBounds = function(a) {
var b = false;
var c = new ADPoint();
if (this.pagingEnabled) {
c.x = Math.round(this._contentOffset.x / this._size.width) * this._size.width;
c.y = Math.round(this._contentOffset.y / this._size.height) * this._size.height;
b = true
} else {
if (this.bounces) {
c.x = Math.max(Math.min(this.maxPoint.x, this._contentOffset.x), 0);
c.y = Math.max(Math.min(this.maxPoint.y, this._contentOffset.y), 0);
b = (c.x != this._contentOffset.x || c.y != this._contentOffset.y)
}
}
if (b) {
this.setContentOffsetWithAnimation(c, a)
}
};
ADScrollView.prototype.getContentSize = function() {
var c = this._contentSize;
if (c === ADScrollViewAutomatedContentSize) {
c = new ADSize(this._hostingLayer.offsetWidth, this._hostingLayer.offsetHeight);
if (this.subviews.length) {
for (var a = 0; a < this.subviews.length; a++) {
var b = this.subviews[a];
c.width = Math.max(c.width, b.position.x + b.size.width);
c.height = Math.max(c.height, b.position.y + b.size.height)
}
}
}
return c
};
ADScrollView.prototype.setContentSize = function(a) {
this._contentSize = a;
this.adjustContentSize(false)
};
ADScrollView.prototype.adjustContentSize = function(a) {
if (a) {
var b = new ADPoint();
if (this.adjustedContentSize.width != 0) {
b.x = this._contentOffset.x / this.adjustedContentSize.width
}
if (this.adjustedContentSize.height != 0) {
b.y = this._contentOffset.y / this.adjustedContentSize.height
}
}
this.adjustedContentSize.width = Math.max(this._size.width, this.contentSize.width);
this.adjustedContentSize.height = Math.max(this._size.height, this.contentSize.height);
this.maxPoint = new ADPoint(this.adjustedContentSize.width - this._size.width, this.adjustedContentSize.height - this._size.height);
if (a) {
this.contentOffset = new ADPoint(Math.min(b.x * this.adjustedContentSize.width, this.maxPoint.x), Math.min(b.y * this.adjustedContentSize.height, this.maxPoint.y))
}
};
ADScrollView.prototype.setIndicatorStyle = function(a) {
this._indicatorStyle = a;
this.horizontalScrollIndicator.style = a;
this.verticalScrollIndicator.style = a
};
ADScrollView.prototype.setScrollIndicatorInsets = function(a) {
this._scrollIndicatorInsets = a;
if (this.horizontalScrollIndicator.visible) {
this.updateHorizontalScrollIndicator()
}
if (this.verticalScrollIndicator.visible) {
this.updateVerticalScrollIndicator()
}
};
ADScrollView.prototype.updateHorizontalScrollIndicator = function() {
var d = (this.verticalScrollEnabled && this.showsVerticalScrollIndicator) ? ADScrollIndicatorEndSize * 2: 1;
var b = this._size.width - this._scrollIndicatorInsets.left - this._scrollIndicatorInsets.right - d;
var e = Math.max(ADScrollViewMinIndicatorLength, Math.round((this._size.width / this.adjustedContentSize.width) * b));
var a = (this._contentOffset.x / (this.adjustedContentSize.width - this._size.width)) * (b - d - e) + this._scrollIndicatorInsets.left;
var c = this._size.height - ADScrollIndicatorThickness - 1 - this._scrollIndicatorInsets.bottom;
if (this._contentOffset.x < 0) {
e = Math.round(Math.max(e + this._contentOffset.x, ADScrollIndicatorThickness));
a = 1 + this._scrollIndicatorInsets.left
} else {
if (this._contentOffset.x > this.maxPoint.x) {
e = Math.round(Math.max(e + this.adjustedContentSize.width - this._size.width - this._contentOffset.x, ADScrollIndicatorThickness));
a = this._size.width - e - d - this._scrollIndicatorInsets.right
}
}
this.horizontalScrollIndicator.position = new ADPoint(a, c);
this.horizontalScrollIndicator.width = e
};
ADScrollView.prototype.updateVerticalScrollIndicator = function() {
var c = (this.horizontalScrollEnabled && this.showsHorizontalScrollIndicator) ? ADScrollIndicatorEndSize * 2: 1;
var d = this._size.height - this._scrollIndicatorInsets.top - this._scrollIndicatorInsets.bottom - c;
var e = Math.max(ADScrollViewMinIndicatorLength, Math.round((this._size.height / this.adjustedContentSize.height) * d));
var a = this._size.width - ADScrollIndicatorThickness - 1 - this._scrollIndicatorInsets.right;
var b = (this._contentOffset.y / (this.adjustedContentSize.height - this._size.height)) * (d - c - e) + this._scrollIndicatorInsets.top;
if (this._contentOffset.y < 0) {
e = Math.round(Math.max(e + this._contentOffset.y, ADScrollIndicatorThickness));
b = 1 + this._scrollIndicatorInsets.top
} else {
if (this._contentOffset.y > this.maxPoint.y) {
e = Math.round(Math.max(e + this.adjustedContentSize.height - this._size.height - this._contentOffset.y, ADScrollIndicatorThickness));
b = this._size.height - e - c - this._scrollIndicatorInsets.bottom
}
}
this.verticalScrollIndicator.position = new ADPoint(a, b);
this.verticalScrollIndicator.height = e
};
ADScrollView.prototype.flashScrollIndicators = function(a) {
if (a) {
this.scrollIndicatorsNeedFlashing = true;
return
}
if (this.horizontalScrollEnabled && this.showsHorizontalScrollIndicator && (this.adjustedContentSize.width > this._size.width)) {
this.updateHorizontalScrollIndicator();
this.horizontalScrollIndicator.flash()
}
if (this.verticalScrollEnabled && this.showsVerticalScrollIndicator && (this.adjustedContentSize.height > this._size.height)) {
this.updateVerticalScrollIndicator();
this.verticalScrollIndicator.flash()
}
};
ADScrollView.prototype.hideScrollIndicators = function() {
this.horizontalScrollIndicator.visible = false;
this.verticalScrollIndicator.visible = false
};
ADScrollView.prototype.handleEvent = function(a) {
this.callSuper(a);
if (a.type == "webkitTransitionEnd") {
this.transitionEnded(a)
}
};
ADScrollView.prototype.touchesBegan = function(a) {
if (!this._scrollEnabled) {
return
}
if (a.eventPhase == Event.CAPTURING_PHASE) {
if (a._manufactured) {
return
}
this.originalTarget = (ADSupportsTouches ? a.touches[0] : a).target;
if (this.delaysContentTouches) {
a.stopPropagation();
this.callMethodNameAfterDelay("beginTouchesInContent", ADScrollViewContentTouchesDelay, a);
if (!this.tracking) {
this.beginTracking(a)
}
}
} else {
if (!this.tracking) {
this.beginTracking(a)
}
}
};
ADScrollView.prototype.beginTouchesInContent = function(a) {
if (this.tracking && !this.dragging) {
var b = ADUtils.createUIEvent(ADStartEvent, a);
b._manufactured = true;
this.originalTarget.dispatchEvent(b);
if (!this.canCancelContentTouches) {
this.touchesEnded(ADUtils.createUIEvent(ADEndEvent, a))
}
}
};
ADScrollView.prototype.beginTracking = function(a) {
a.preventDefault();
this.stopDecelerationAnimation();
this.hostingLayer.style.webkitTransitionDuration = 0;
this.adjustContentSize();
this.snapContentOffsetToBounds(false);
var b = this._contentOffset.copy();
this.trackingDataPoints = [];
this.addTrackingDataPoint(a.timeStamp, b);
this.startContentOffset = b;
this.startTouchPosition = ADPoint.fromEventInElement(a, this.layer);
this.tracking = true;
this.dragging = false;
this.touchesHaveMoved = false;
window.addEventListener(ADMoveEvent, this, true);
window.addEventListener(ADEndEvent, this, true);
window.addEventListener("touchcancel", this, true);
window.addEventListener(ADEndEvent, this, false)
};
ADScrollView.prototype.touchesMoved = function(d) {
this.touchesHaveMoved = true;
this.callSuper(d);
var e = ADPoint.fromEventInElement(d, this.layer);
var b = e.x - this.startTouchPosition.x;
var c = e.y - this.startTouchPosition.y;
if (!this.dragging) {
if ((Math.abs(b) >= ADScrollViewMinimumTrackingForDrag && this.horizontalScrollEnabled) || (Math.abs(c) >= ADScrollViewMinimumTrackingForDrag && this.verticalScrollEnabled)) {
if (ADUtils.objectHasMethod(this.delegate, ADScrollViewWillBeginDragging)) {
this.delegate[ADScrollViewWillBeginDragging](this)
}
this.dragging = true;
this.firstDrag = true;
if (this.horizontalScrollEnabled && this.showsHorizontalScrollIndicator && (this.adjustedContentSize.width > this._size.width)) {
this.horizontalScrollIndicator.visible = true
}
if (this.verticalScrollEnabled && this.showsVerticalScrollIndicator && (this.adjustedContentSize.height > this._size.height)) {
this.verticalScrollIndicator.visible = true
}
}
}
if (this.dragging) {
d.stopPropagation();
var f = this.horizontalScrollEnabled ? (this.startContentOffset.x - b) : this._contentOffset.x;
var a = this.verticalScrollEnabled ? (this.startContentOffset.y - c) : this._contentOffset.y;
if (this.bounces) {
f -= ((f > this.maxPoint.x) ? (f - this.maxPoint.x) : ((f < 0) ? f: 0)) / 2;
a -= ((a > this.maxPoint.y) ? (a - this.maxPoint.y) : ((a < 0) ? a: 0)) / 2
} else {
f = Math.max(Math.min(this.maxPoint.x, f), 0);
a = Math.max(Math.min(this.maxPoint.y, a), 0)
}
if (this.firstDrag) {
this.firstDrag = false;
this.startTouchPosition = e;
return
}
this.contentOffset = new ADPoint(f, a)
}
this.addTrackingDataPoint(d.timeStamp, this._contentOffset.copy())
};
ADScrollView.prototype.touchesEnded = function(a) {
this.callSuper(a);
this.tracking = false;
if (this.dragging) {
this.dragging = false;
a.stopPropagation();
this.purgeTrackingDataPointsWithTime(a.timeStamp);
if (this.trackingDataPoints.length > 1) {
this._contentOffsetBeforeDeceleration = this._contentOffset.copy();
this.startDecelerationAnimation()
}
window.removeEventListener(ADEndEvent, this, false);
if (ADUtils.objectHasMethod(this.delegate, ADScrollViewDidEndDragging)) {
this.delegate[ADScrollViewDidEndDragging](this)
}
}
if (!this.decelerating) {
this.snapContentOffsetToBounds(true);
this.hideScrollIndicators()
}
if (a.eventPhase == Event.BUBBLING_PHASE) {
window.removeEventListener(ADEndEvent, this, false);
if (!this.touchesHaveMoved && this.originalTarget !== null && a.type == ADEndEvent) {
this.activateOriginalTarget()
}
}
};
ADScrollView.prototype.touchesCancelled = function(a) {
this.callSuper(a);
this.touchesEnded(a)
};
ADScrollView.prototype.stopTrackingTouches = function() {
if (!this.tracking) {
return
}
this.tracking = false;
if (this.dragging) {
this.dragging = false;
this.snapContentOffsetToBounds(true);
if (ADUtils.objectHasMethod(this.delegate, ADScrollViewDidEndDragging)) {
this.delegate[ADScrollViewDidEndDragging](this)
}
this.hideScrollIndicators()
}
window.removeEventListener(ADMoveEvent, this, true);
window.removeEventListener(ADEndEvent, this, true);
window.removeEventListener(ADEndEvent, this, false);
window.removeEventListener("touchcancel", this, true)
};
ADScrollView.prototype.purgeTrackingDataPointsWithTime = function(a) {
while (this.trackingDataPoints.length > 0) {
if (a - this.trackingDataPoints[0].time <= ADScrollViewMaxTimeForTrackingDataPoints) {
break
}
this.trackingDataPoints.shift()
}
};
ADScrollView.prototype.addTrackingDataPoint = function(b, a) {
this.purgeTrackingDataPointsWithTime(b);
this.trackingDataPoints.push({
time: b,
contentOffset: a
})
};
ADScrollView.prototype.transitionEnded = function(a) {
if (this.scrollIndicatorsNeedFlashing && a.currentTarget === this.layer) {
this.scrollIndicatorsNeedFlashing = false;
this.flashScrollIndicators()
}
if (this.scrollTransitionsNeedRemoval && a.currentTarget === this.hostingLayer) {
this.scrollTransitionsNeedRemoval = false;
this.hostingLayer.style.webkitTransitionDuration = 0;
this.didScroll(true)
}
};
ADScrollView.prototype.didScroll = function(a) {
if (a && ADUtils.objectHasMethod(this.delegate, ADScrollViewDidEndScrollingAnimation)) {
this.delegate[ADScrollViewDidEndScrollingAnimation](this)
}
if (ADUtils.objectHasMethod(this.delegate, ADScrollViewDidScroll)) {
this.delegate[ADScrollViewDidScroll](this)
}
};
ADScrollView.prototype.startDecelerationAnimation = function() {
if (this.bounces && (this._contentOffset.x > this.maxPoint.x || this._contentOffset.y > this.maxPoint.y || this._contentOffset.x < 0 || this._contentOffset.y < 0)) {
return
}
var d = this.trackingDataPoints[0];
var b = this.trackingDataPoints[this.trackingDataPoints.length - 1];
var a = new ADPoint(b.contentOffset.x - d.contentOffset.x, b.contentOffset.y - d.contentOffset.y);
var c = (b.time - d.time) / ADScrollViewAcceleration;
this.decelerationVelocity = new ADPoint(a.x / c, a.y / c);
this.minDecelerationPoint = new ADPoint(0, 0);
this.maxDecelerationPoint = this.maxPoint.copy();
if (this.pagingEnabled) {
this.minDecelerationPoint.x = Math.max(0, Math.floor(this._contentOffsetBeforeDeceleration.x / this._size.width) * this._size.width);
this.minDecelerationPoint.y = Math.max(0, Math.floor(this._contentOffsetBeforeDeceleration.y / this._size.height) * this._size.height);
this.maxDecelerationPoint.x = Math.min(this.maxPoint.x, Math.ceil(this._contentOffsetBeforeDeceleration.x / this._size.width) * this._size.width);
this.maxDecelerationPoint.y = Math.min(this.maxPoint.y, Math.ceil(this._contentOffsetBeforeDeceleration.y / this._size.height) * this._size.height)
}
this.penetrationDeceleration = ADScrollViewPenetrationDeceleration;
this.penetrationAcceleration = ADScrollViewPenetrationAcceleration;
if (this.pagingEnabled) {
this.penetrationDeceleration *= 5
}
var e = this.pagingEnabled ? ADScrollViewMinVelocityForDecelerationWithPaging: ADScrollViewMinVelocityForDeceleration;
if (Math.abs(this.decelerationVelocity.x) > e || Math.abs(this.decelerationVelocity.y) > e) {
this.decelerating = true;
this.decelerationTimer = this.callMethodNameAfterDelay("stepThroughDecelerationAnimation", ADScrollViewDesiredAnimationFrameRate);
this.lastFrame = new Date();
if (ADUtils.objectHasMethod(this.delegate, ADScrollViewWillBeginDecelerating)) {
this.delegate[ADScrollViewWillBeginDecelerating](this)
}
}
};
ADScrollView.prototype.stopDecelerationAnimation = function() {
this.decelerating = false;
clearTimeout(this.decelerationTimer)
};
ADScrollView.prototype.stepThroughDecelerationAnimation = function(f) {
if (!this.decelerating) {
return
}
var d = new Date();
var k = d - this.lastFrame;
var l = f ? 0: (Math.round(k / ADScrollViewDesiredAnimationFrameRate) - 1);
for (var j = 0; j < l; j++) {
this.stepThroughDecelerationAnimation(true)
}
var g = this._contentOffset.x + this.decelerationVelocity.x;
var h = this._contentOffset.y + this.decelerationVelocity.y;
if (!this.bounces) {
var a = Math.max(Math.min(this.maxPoint.x, g), 0);
if (a != g) {
g = a;
this.decelerationVelocity.x = 0
}
var c = Math.max(Math.min(this.maxPoint.y, h), 0);
if (c != h) {
h = c;
this.decelerationVelocity.y = 0
}
}
if (f) {
this._contentOffset.x = g;
this._contentOffset.y = h
} else {
this.contentOffset = new ADPoint(g, h)
}
if (!this.pagingEnabled) {
this.decelerationVelocity.x *= ADScrollViewDecelerationFrictionFactor;
this.decelerationVelocity.y *= ADScrollViewDecelerationFrictionFactor
}
var b = Math.abs(this.decelerationVelocity.x);
var i = Math.abs(this.decelerationVelocity.y);
if (!f && b <= ADScrollViewMinimumVelocity && i <= ADScrollViewMinimumVelocity) {
this.hideScrollIndicators();
this.decelerationAnimationCompleted();
return
}
if (!f) {
this.decelerationTimer = this.callMethodNameAfterDelay("stepThroughDecelerationAnimation", ADScrollViewDesiredAnimationFrameRate)
}
if (this.bounces) {
var e = new ADPoint(0, 0);
if (g < this.minDecelerationPoint.x) {
e.x = this.minDecelerationPoint.x - g
} else {
if (g > this.maxDecelerationPoint.x) {
e.x = this.maxDecelerationPoint.x - g
}
}
if (h < this.minDecelerationPoint.y) {
e.y = this.minDecelerationPoint.y - h
} else {
if (h > this.maxDecelerationPoint.y) {
e.y = this.maxDecelerationPoint.y - h
}
}
if (e.x != 0) {
if (this.pagingEnabled && Math.abs(this.decelerationVelocity.x) >= ADScrollViewMaxVelocityForBouncingWithPaging) {
this.decelerationAnimationCompleted();
return
}
if (e.x * this.decelerationVelocity.x <= 0) {
this.decelerationVelocity.x += e.x * this.penetrationDeceleration
} else {
this.decelerationVelocity.x = e.x * this.penetrationAcceleration
}
}
if (e.y != 0) {
if (this.pagingEnabled && Math.abs(this.decelerationVelocity.y) >= ADScrollViewMaxVelocityForBouncingWithPaging) {
this.decelerationAnimationCompleted();
return
}
if (e.y * this.decelerationVelocity.y <= 0) {
this.decelerationVelocity.y += e.y * this.penetrationDeceleration
} else {
this.decelerationVelocity.y = e.y * this.penetrationAcceleration
}
}
}
if (!f) {
this.lastFrame = d
}
};
ADScrollView.prototype.decelerationAnimationCompleted = function() {
this.stopDecelerationAnimation();
if (this.pagingEnabled) {
this.setContentOffsetWithAnimation(new ADPoint(Math.round(this._contentOffset.x / this._size.width) * this._size.width, Math.round(this._contentOffset.y / this._size.height) * this._size.height), false)
}
if (ADUtils.objectHasMethod(this.delegate, ADScrollViewDidEndDecelerating)) {
this.delegate[ADScrollViewDidEndDecelerating](this)
}
};
ADScrollView.prototype.activateOriginalTarget = function() {
var b = this.originalTarget;
while (b.parentNode && b !== this.hostingLayer) {
if (b.nodeType == Node.ELEMENT_NODE) {
if (ADScrollViewClickableElementNames.indexOf(b.localName) != -1) {
break
}
}
b = b.parentNode
}
if (!ADSupportsTouches) {
return
}
var a = document.createEvent("MouseEvent");
a.initMouseEvent("click", true, true, document.defaultView, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null);
a._manufactured = true;
b.dispatchEvent(a)
};
ADClass(ADScrollView);
const ADTableViewCellForRowAtPath = "tableViewCellForRowAtPath";
const ADTableViewNumberOfSectionsInTableView = "numberOfSectionsInTableView";
const ADTableViewNumberOfRowsInSection = "tableViewNumberOfRowsInSection";
const ADTableViewTitleForHeaderInSection = "tableViewTitleForHeaderInSection";
const ADTableViewTitleForFooterInSection = "tableViewTitleForFooterInSection";
const ADTableViewCustomCellForRowAtPath = "tableViewCustomCellForRowAtPath";
const ADTableViewDidSelectRowAtPath = "tableViewDidSelectRowAtPath";
const ADTableViewDidSelectAccessoryForRowAtPath = "tableViewDidSelectAccessoryForRowAtPath";
const ADTableViewCustomCellCSS = "ad-custom-table-view-cell";
const ADTableViewStylePlain = "plain";
const ADTableViewStyleCustom = "custom";
const ADTableViewStyleGrouped = "grouped";
const ADTableViewMinTouchDurationForCellSelection = 150;
ADTableView.inherits = ADScrollView;
ADTableView.synthetizes = ["style", "separatorStyle"];
ADTableView.includes = [ADPropertyTriage];
function ADTableView() {
this.callSuper();
this._style = ADTableViewStyleCustom;
this._separatorStyle = ADTableViewCellSeparatorStyleSingleLine;
this.horizontalScrollEnabled = false;
this.delegate = null;
this.dataSource = null;
this.touchedCell = null;
this.touchedAccessory = null;
this.shouldPreventScrolling = false;
this.numberOfSections = 1;
this.numberOfRows = [];
this.sections = [];
this.headers = [];
this.sectionMetrics = [];
this.selectedCell = null;
this.populated = false
}
ADTableView.prototype.createLayer = function() {
this.callSuper();
this.layer.addClassName("ad-table-view")
};
ADTableView.prototype.layerWasInsertedIntoDocument = function() {
this.callSuper();
this.notifyCellsOfInsertionIntoDocument();
this.updateSectionMetrics()
};
ADTableView.prototype.setContentOffsetWithAnimation = function(b, a) {
this.callSuper(b, a);
this.updateSectionHeaders()
};
ADTableView.prototype.setStyle = function(a) {
this.layer.removeClassName(this._style);
this.layer.addClassName(a);
this._style = a
};
ADTableView.prototype.setSeparatorStyle = function(a) {
this.layer.removeClassName(this._separatorStyle);
this.layer.addClassName(a);
this._separatorStyle = a
};
ADTableView.prototype.numberOfRowsInSection = function(a) {
if (a > this.numberOfSections - 1) {
return
}
return this.numberOfRows[a]
};
ADTableView.prototype.cellForRowAtPath = function(a) {
if (this._style === ADTableViewStyleCustom || a.section > this.numberOfSections - 1 || a.row > this.numberOfRows[a.section]) {
return null
}
return this.hostingLayer.querySelector(".section:nth-of-type(" + (a.section + 1) + ") .cells > div:nth-of-type(" + (a.row + 1) + ")")._view
};
ADTableView.prototype.customCellForRowAtPath = function(a) {
if (this._style !== ADTableViewStyleCustom || a.section > this.numberOfSections - 1 || a.row > this.numberOfRows[a.section]) {
return null
}
return this.hostingLayer.querySelector(".section:nth-of-type(" + (a.section + 1) + ") .cells > ." + ADTableViewCustomCellCSS + ":nth-of-type(" + (a.row + 1) + ")")
};
ADTableView.prototype.pathForCell = function(a) {
if (this._style === ADTableViewStyleCustom) {
return null
}
return a._tableViewDataSourcePath
};
ADTableView.prototype.pathForCustomCell = function(a) {
if (this._style !== ADTableViewStyleCustom) {
return null
}
return a._tableViewDataSourcePath
};
ADTableView.prototype.notifyCellsOfInsertionIntoDocument = function() {
if (!this.layerIsInDocument || !this.populated) {
return
}
var a = this.hostingLayer.querySelectorAll(".ad-table-view-cell");
for (var b = 0; b < a.length; b++) {
a[b]._view.layerWasInsertedIntoDocument()
}
};
ADTableView.prototype.reloadData = function() {
var c = (this._style === ADTableViewStyleCustom);
if (c) {
if (!ADUtils.objectHasMethod(this.dataSource, ADTableViewCustomCellForRowAtPath) || !ADUtils.objectHasMethod(this.dataSource, ADTableViewNumberOfRowsInSection)) {
console.error("An ADTableView's dataSource must implement all required methods");
return
}
} else {
if (!ADUtils.objectHasMethod(this.dataSource, ADTableViewCellForRowAtPath) || !ADUtils.objectHasMethod(this.dataSource, ADTableViewNumberOfRowsInSection)) {
console.error("An ADTableView's dataSource must implement all required methods");
return
}
}
this._hostingLayer.innerText = "";
this.sections = [];
this.headers = [];
if (ADUtils.objectHasMethod(this.dataSource, ADTableViewNumberOfSectionsInTableView)) {
this.numberOfSections = this.dataSource[ADTableViewNumberOfSectionsInTableView](this);
if (this.numberOfSections < 1) {
console.error("An ADTableView must have at least one section");
return
}
}
for (var i = 0; i < this.numberOfSections; i++) {
var d = document.createElement("div");
d.className = "section";
this.sections[i] = d;
if (ADUtils.objectHasMethod(this.dataSource, ADTableViewTitleForHeaderInSection)) {
var b = this.dataSource[ADTableViewTitleForHeaderInSection](this, i);
if (b !== null) {
var a = d.appendChild(document.createElement("h1"));
a.innerText = b;
this.headers[i] = a
}
}
var g = this.dataSource[ADTableViewNumberOfRowsInSection](this, i);
if (g > 0) {
var k = d.appendChild(document.createElement("div"));
k.className = "cells";
for (var e = 0; e < g; e++) {
var f = new ADCellPath(i, e);
if (c) {
var h = this.dataSource[ADTableViewCustomCellForRowAtPath](this, f);
h.addClassName(ADTableViewCustomCellCSS);
h._tableViewDataSourcePath = f;
k.appendChild(h)
} else {
var h = this.dataSource[ADTableViewCellForRowAtPath](this, f);
h._tableViewDataSourcePath = f;
h._table = this;
k.appendChild(h.layer)
}
}
}
if (ADUtils.objectHasMethod(this.dataSource, ADTableViewTitleForFooterInSection)) {
var j = this.dataSource[ADTableViewTitleForFooterInSection](this, i);
if (j !== null) {
d.appendChild(document.createElement("span")).innerText = j
}
}
this.numberOfRows[i] = g;
this._hostingLayer.appendChild(d)
}
this.populated = true;
this.updateSectionMetrics();
this.notifyCellsOfInsertionIntoDocument()
};
ADTableView.prototype.updateSectionMetrics = function() {
if (!this.layerIsInDocument || this._style !== ADTableViewStylePlain || !this.populated) {
return
}
this.sectionMetrics = [];
for (var a = 0; a < this.sections.length; a++) {
this.sectionMetrics[a] = {
y: this.sections[a].offsetTop,
height: this.sections[a].offsetHeight
}
}
};
ADTableView.prototype.touchesBegan = function(e) {
if (e._manufactured) {
return
}
this.wasDeceleratingWhenTouchesBegan = this.decelerating;
this.callSuper(e);
this.touchedCell = null;
this.touchedAccessory = null;
this.shouldPreventScrolling = false;
if (this.wasDeceleratingWhenTouchesBegan || !this.tracking) {
return
}
var c = ADPoint.fromEvent(e);
var d = document.elementFromPoint(c.x, c.y);
if (this._style === ADTableViewStyleCustom) {
var a = d;
while (a.parentNode) {
if (a.hasClassName(ADTableViewCustomCellCSS)) {
this.touchedCell = a;
this.touchedCellWasSelected = this.touchedCell.hasClassName(ADControlStateSelectedCSS);
break
}
a = a.parentNode
}
} else {
var b = (d._view !== undefined) ? d._view: d.getNearestView();
if (b instanceof ADTableViewCell) {
this.touchedCell = b;
this.touchedCellWasSelected = this.touchedCell.selected
} else {
if (b instanceof ADButton) {
this.touchedAccessory = b
}
}
}
if (this.touchedCell !== null || this.touchedAccessory !== null) {
this.callMethodNameAfterDelay("detectedStationaryTouch", ADTableViewMinTouchDurationForCellSelection)
}
};
ADTableView.prototype.touchesMoved = function(b) {
if (this.shouldPreventScrolling) {
return
}
var a = this.dragging;
this.callSuper(b);
if (this.wasDeceleratingWhenTouchesBegan) {
return
}
if (a != this.dragging && this.touchedCell !== null && !this.touchedCellWasSelected) {
if (this.touchedCell instanceof ADTableViewCell) {
this.touchedCell.selected = false
} else {
this.touchedCell.removeClassName(ADControlStateSelectedCSS)
}
}
};
ADTableView.prototype.touchesEnded = function(b) {
var a = this.dragging;
this.callSuper(b);
if (this.wasDeceleratingWhenTouchesBegan) {
return
}
if (b.type != ADEndEvent) {
return
}
if (b.eventPhase == Event.BUBBLING_PHASE && !a) {
if (this.touchedAccessory !== null && !this.shouldPreventScrolling) {
this.disclosureButtonWasSelectedAtPath(this.touchedAccessory.superview._tableViewDataSourcePath)
} else {
if (this.touchedCell !== null) {
this.selectRowAtPath(this.touchedCell._tableViewDataSourcePath)
}
}
}
};
ADTableView.prototype.pathForSelectedRow = function() {
if (this.selectedCell === null) {
return null
}
return (this._style === ADTableViewStyleCustom) ? this.pathForCustomCell(this.selectedCell) : this.pathForCell(this.selectedCell)
};
ADTableView.prototype.deselectRowAtPathAnimated = function(b, c) {
if (b === null) {
return
}
var a = (this._style === ADTableViewStyleCustom) ? this.customCellForRowAtPath(b) : this.cellForRowAtPath(b);
if (a !== null) {
this.markCellAsSelectedAnimated(a, false, c)
}
};
ADTableView.prototype.selectRowAtPath = function(b) {
var a = (this._style === ADTableViewStyleCustom) ? this.customCellForRowAtPath(b) : this.cellForRowAtPath(b);
if (a === null) {
throw (new Error("No cell at " + b.toString()));
return
}
this.deselectRowAtPathAnimated(this.pathForSelectedRow(), false);
this.selectedCell = a;
this.markCellAsSelectedAnimated(this.selectedCell, true, false);
if (ADUtils.objectHasMethod(this.delegate, ADTableViewDidSelectRowAtPath)) {
this.delegate[ADTableViewDidSelectRowAtPath](this, b)
}
};
ADTableView.prototype.detectedStationaryTouch = function() {
if (!this.dragging && this.tracking) {
if (this.touchedCell !== null) {
this.markCellAsSelectedAnimated(this.touchedCell, true, false)
} else {
if (this.touchedAccessory !== null) {
this.shouldPreventScrolling = true
}
}
}
};
ADTableView.prototype.markCellAsSelectedAnimated = function(a, c, b) {
if (a instanceof ADTableViewCell) {
a.setSelectedAnimated(c, b)
} else {
a[c ? "addClassName": "removeClassName"](ADControlStateSelectedCSS)
}
};
ADTableView.prototype.disclosureButtonWasSelectedAtPath = function(b) {
var a = this.cellForRowAtPath(b);
if (a.accessoryType === ADTableViewCellAccessoryDetailDisclosureButton && ADUtils.objectHasMethod(this.delegate, ADTableViewDidSelectAccessoryForRowAtPath)) {
this.delegate[ADTableViewDidSelectAccessoryForRowAtPath](this, b)
}
};
const ADTableViewPlainHeaderHeight = 23;
ADTableView.prototype.updateSectionHeaders = function() {
if (this.sectionMetrics.length != this.numberOfSections || this.style !== ADTableViewStylePlain) {
return
}
var h = this.contentOffset.y;
for (var c = 0; c < this.numberOfSections; c++) {
var b = this.headers[c];
if (b === undefined) {
continue
}
var d = this.sectionMetrics[c];
var e = d.y;
var f = e + d.height;
var g = f - h;
var a = 0;
if (g > 0 && g < (ADTableViewPlainHeaderHeight - 1)) {
a = d.height - ADTableViewPlainHeaderHeight
} else {
if (e <= h && f > h) {
a = Math.abs(e - h) - 1
}
}
b.style.webkitTransform = ADUtils.t(0, a)
}
};
ADClass(ADTableView);
ADTableView.init = function() {
ADUtils.preloadImageAsset("tableview/UITableSelection.png")
};
window.addEventListener("load", ADTableView.init, false);
function ADCellPath(a, b) {
this.section = a || 0;
this.row = b || 0
}
ADCellPath.prototype.toString = function() {
return "ADCellPath with section " + this.section + " and row " + this.row
};
const ADTableViewCellAccessoryNone = "no-accessory";
const ADTableViewCellAccessoryDisclosureIndicator = "disclosure-accessory";
const ADTableViewCellAccessoryDetailDisclosureButton = "detail-accessory";
const ADTableViewCellSelectionStyleNone = "no-selection";
const ADTableViewCellSelectionStyleBlue = "blue-selection";
const ADTableViewCellSelectionStyleGray = "gray-selection";
const ADTableViewCellStyleDefault = "style-default";
const ADTableViewCellStyleValue1 = "style-value-1";
const ADTableViewCellStyleValue2 = "style-value-2";
const ADTableViewCellStyleSubtitle = "style-subtitle";
const ADTableViewCellSeparatorStyleNone = "separator-none";
const ADTableViewCellSeparatorStyleSingleLine = "separator-single-line";
const ADTableViewCellSeparatorStyleSingleLineEtched = "separator-single-line-etched";
ADTableViewCell.inherits = ADView;
ADTableViewCell.synthetizes = ["text", "detailedText", "selectionStyle", "accessoryType", "selected"];
function ADTableViewCell(a) {
this.style = a || ADTableViewCellStyleDefault;
this.callSuper();
this._selectionStyle = ADTableViewCellSelectionStyleBlue;
this._accessoryType = ADTableViewCellAccessoryNone;
this._selected = false;
this.layer.removeEventListener(ADStartEvent, this, false)
}
ADTableViewCell.prototype.createLayer = function() {
this.callSuper();
this.layer.addClassName("ad-table-view-cell " + this.style);
this.layer.setAttribute("role", "button");
this.accessory = new ADButton(ADButtonTypeDetailDisclosure);
this.accessory.addEventListener(ADControlTouchUpInsideEvent, this, false);
this.addSubview(this.accessory);
this.textLabel = this.layer.appendChild(document.createElement("span"));
this.textLabel.addClassName("text-label");
this.detailedTextLabel = this.layer.appendChild(document.createElement("span"));
this.detailedTextLabel.addClassName("detailed-text-label")
};
ADTableViewCell.prototype.handleEvent = function(c) {
if (c.currentTarget === this.accessory.layer) {
var a = this._table;
var b = this._tableViewDataSourcePath;
if (a !== undefined && b !== undefined) {
a.disclosureButtonWasSelectedAtPath(b)
}
} else {
this.callSuper(c)
}
};
ADTableViewCell.prototype.getText = function() {
return this.textLabel.innerText
};
ADTableViewCell.prototype.setText = function(a) {
this.textLabel.innerText = a;
this.updateTextLayout()
};
ADTableViewCell.prototype.getDetailedText = function() {
return this.detailedTextLabel.innerText
};
ADTableViewCell.prototype.setDetailedText = function(a) {
this.detailedTextLabel.innerText = a;
this.updateTextLayout()
};
ADTableViewCell.prototype.setSelectionStyle = function(a) {
this.layer.removeClassName(this._selectionStyle);
this.layer.addClassName(a);
this._selectionStyle = a
};
const ADTableViewCellAccessoryDisclosureIndicatorWidth = 10;
const ADTableViewCellAccessoryDetailDisclosureButtonWidth = 44;
ADTableViewCell.prototype.setAccessoryType = function(a) {
this.layer.removeClassName(this._accessoryType);
this.layer.addClassName(a);
this._accessoryType = a
};
ADTableViewCell.prototype.setSelected = function(a) {
this.setSelectedAnimated(a, false)
};
ADTableViewCell.prototype.setSelectedAnimated = function(a, b) {
if (this._selected == a) {
return
}
this._selected = a;
this.layer[a ? "addClassName": "removeClassName"](ADControlStateSelectedCSS)
};
ADTableViewCell.prototype.layerWasInsertedIntoDocument = function() {
this.callSuper();
this.updateTextLayout()
};
const ADTableViewCellStyleValue1Margin = 10;
ADTableViewCell.prototype.updateTextLayout = function() {
if (this.style != ADTableViewCellStyleValue1 || !this.layerIsInDocument) {
return
}
var c = this.textLabel.offsetWidth - 2 * ADTableViewCellStyleValue1Margin;
this.textLabel.style.right = "auto !important";
this.detailedTextLabel.style.right = "auto !important";
var d = Math.min(this.textLabel.offsetWidth, c);
var a = Math.min(this.detailedTextLabel.offsetWidth, c);
this.textLabel.setAttribute("style", "");
this.detailedTextLabel.setAttribute("style", "");
if (d + a > c) {
var b = Math.floor((d / (d + a)) * c);
if (d > a) {
this.textLabel.style.width = ADUtils.px(b);
this.detailedTextLabel.style.left = ADUtils.px(b + ADTableViewCellStyleValue1Margin * 2)
} else {
this.textLabel.style.width = ADUtils.px(b + ADTableViewCellStyleValue1Margin);
this.detailedTextLabel.style.left = ADUtils.px(b + ADTableViewCellStyleValue1Margin * 3)
}
}
};
ADClass(ADTableViewCell);
const ADNavigationBarStyleDefault = "default";
const ADNavigationBarStyleBlack = "black";
const ADNavigationBarStyleBlackTranslucent = "black-translucent";
const ADNavigationBarButtonMarginLeft = 5;
const ADNavigationBarButtonMarginRight = 8;
const ADNavigationBarHeight = 44;
const ADNavigationBarAnimationDuration = 0.35;
const ADNavigationBarShouldPushItem = "navigationBarShouldPushItem";
const ADNavigationBarDidPushItem = "navigationBarDidPushItem";
const ADNavigationBarShouldPopItem = "navigationBarShouldPopItem";
const ADNavigationBarDidPopItem = "navigationBarDidPopItem";
ADNavigationBar.inherits = ADView;
ADNavigationBar.synthetizes = ["barStyle", "items", "topItem", "backItem"];
function ADNavigationBar() {
this.callSuper();
this.delegate = null;
this._barStyle = "";
this._items = [];
this.busy = false;
this.itemsToSetupAfterAnimatedChange = null;
this.barStyle = ADNavigationBarStyleDefault
}
ADNavigationBar.prototype.createLayer = function() {
this.callSuper();
this.layer.addClassName("ad-navigation-bar")
};
ADNavigationBar.prototype.setSize = function(a) {
this.callSuper(new ADSize(a.width, ADNavigationBarHeight));
this.updateTopItemLayout()
};
ADNavigationBar.prototype.willMoveToSuperview = function(a) {
if (a !== null && this._size.width == 0) {
this.size = new ADSize(a._size.width, ADNavigationBarHeight)
}
};
ADNavigationBar.prototype.layerWasInsertedIntoDocument = function(a) {
this.callSuper();
this.updateTopItemLayout()
};
ADNavigationBar.prototype.setBarStyle = function(a) {
this.layer.removeClassName(this._barStyle);
this.layer.addClassName(a);
this._barStyle = a
};
ADNavigationBar.prototype.getTopItem = function() {
return (this._items.length > 0) ? this._items[this._items.length - 1] : null
};
ADNavigationBar.prototype.getBackItem = function() {
return (this._items.length > 1) ? this._items[this._items.length - 2] : null
};
ADNavigationBar.prototype.handleEvent = function(a) {
this.callSuper(a);
if (this.busy && a.type == "webkitTransitionEnd") {
this.transitionsEnded()
}
};
ADNavigationBar.prototype.setItems = function(a) {
this.setItemsAnimated(a, false)
};
ADNavigationBar.prototype.setItemsAnimated = function(g, c) {
if (this.busy || g.length == 0) {
return
}
ADTransaction.begin();
var f = this.topItem;
var b = (g.length > 1) ? g[g.length - 2] : null;
var d = g[g.length - 1];
for (var e = 0; e < this._items.length; e++) {
this._items[e].navigationBar = null
}
for (var e = 0; e < g.length; e++) {
g[e].navigationBar = this
}
if (f === null) {
if (!this.shouldPushItem(d)) {
ADTransaction.commit();
return
}
this.addItemViews(d, null);
d.sizeItemsAndComputePositionsWithBackItem(null);
d.updateLayout();
this._items = g;
if (ADUtils.objectHasMethod(this.delegate, ADNavigationBarDidPushItem)) {
this.delegate[ADNavigationBarDidPushItem](this, d)
}
ADTransaction.commit()
} else {
if (f === d) {
this.removeViewsForItem(f);
while (this.subviews.length) {
this.subviews[0].removeFromSuperview()
}
this.addItemViews(d, b);
d.sizeItemsAndComputePositionsWithBackItem(b);
d.updateLayout();
this._items = g;
ADTransaction.commit()
} else {
var a = (this._items.indexOf(d) == -1);
if ((a && !this.shouldPushItem(d)) || (!a && !this.shouldPopItem(f))) {
ADTransaction.commit();
return
}
this.addItemViews(d, b);
d.sizeItemsAndComputePositionsWithBackItem(b);
this.itemsAfterTransition = g;
this.transitionToItem(d, f, a, c)
}
}
};
ADNavigationBar.prototype.pushNavigationItemAnimated = function(b, a) {
if (this.busy) {
return
}
ADTransaction.begin();
if (!this.shouldPushItem(b)) {
ADTransaction.commit();
return
}
this.setItemsAnimated(this._items.concat([b]), a);
ADTransaction.commit()
};
ADNavigationBar.prototype.popNavigationItemAnimated = function(a) {
if (this.busy || this._items.length < 2) {
return
}
ADTransaction.begin();
if (!this.shouldPopItem(this.topItem)) {
ADTransaction.commit();
return
}
this.setItemsAnimated(this._items.slice(0, this._items.length - 1), a);
ADTransaction.commit()
};
ADNavigationBar.prototype.addItemViews = function(b, d) {
var e = b._leftBarButtonItem || ((d !== null) ? d.backBarButtonItem: null) || null;
var f = [e, b.rightBarButtonItem, b.titleView];
for (var c = 0; c < f.length; c++) {
var b = f[c];
if (ADUtils.objectIsUndefined(b) || b === null) {
continue
}
var a = b.view;
if (a.superview === null || a.superview !== this) {
this.addSubview(a)
}
}
};
ADNavigationBar.prototype.transitionToItem = function(b, d, f, c) {
this.busy = c;
this.previousItem = d;
this.transitionWentForward = f;
ADTransaction.defaults.duration = c ? ADNavigationBarAnimationDuration: 0;
ADTransaction.defaults.properties = ["opacity", "position"];
if (d._leftBarButtonItem !== null) {
if (d._leftBarButtonItem !== b._leftBarButtonItem) {
new ADTransition({
target: d._leftBarButtonItem.view,
properties: ["opacity"],
to: [0]
}).start()
}
} else {
if (d.leftButton !== null) {
var a = (f) ? ( - d.leftButton.view.size.width - ADNavigationItemLeftButtonLeftMargin) : b.positions.title;
new ADTransition({
target: d.leftButton.view,
to: [0, new ADPoint(a, 0)]
}).start()
}
}
var a = (f) ? ADNavigationItemLeftButtonLeftMargin: this.size.width;
new ADTransition({
target: d.titleView.view,
to: [0, new ADPoint(a, 0)]
}).start();
if (d._rightBarButtonItem !== null && d._rightBarButtonItem !== b._rightBarButtonItem) {
new ADTransition({
target: d._rightBarButtonItem.view,
properties: ["opacity"],
to: [0]
}).start()
}
if (b._leftBarButtonItem !== null) {
if (b._leftBarButtonItem !== d._leftBarButtonItem) {
b._leftBarButtonItem.view.position = new ADPoint(b.positions.leftButton, 0);
new ADTransition({
target: b._leftBarButtonItem.view,
properties: ["opacity"],
from: [0],
to: [1]
}).start()
}
} else {
if (b.leftButton !== null) {
var e = (f) ? d.positions.title: ( - d.leftButton.view.size.width - ADNavigationItemLeftButtonLeftMargin);
new ADTransition({
target: b.leftButton.view,
from: [0, new ADPoint(e, 0)],
to: [b.hidesBackButton ? 0: 1, new ADPoint(b.positions.leftButton, 0)]
}).start()
}
}
var e = (f) ? this.size.width: ADNavigationItemLeftButtonLeftMargin;
new ADTransition({
target: b.titleView.view,
from: [0, new ADPoint(e, 0)],
to: [1, new ADPoint(b.positions.title, 0)]
}).start();
if (b._rightBarButtonItem !== null && b._rightBarButtonItem !== d._rightBarButtonItem) {
b._rightBarButtonItem.view.position = new ADPoint(b.positions.rightButton, 0);
new ADTransition({
target: b._rightBarButtonItem.view,
properties: ["opacity"],
from: [0],
to: [1]
}).start()
}
if (c) {
d.titleView.view.layer.addEventListener("webkitTransitionEnd", this, false)
}
ADTransaction.commit();
if (!c) {
this.transitionsEnded()
}
};
ADNavigationBar.prototype.transitionsEnded = function() {
this._items = this.itemsAfterTransition;
this.busy = false;
if (this.transitionWentForward) {
if (ADUtils.objectHasMethod(this.delegate, ADNavigationBarDidPushItem)) {
this.delegate[ADNavigationBarDidPushItem](this, this.topItem)
}
} else {
if (ADUtils.objectHasMethod(this.delegate, ADNavigationBarDidPopItem)) {
this.delegate[ADNavigationBarDidPopItem](this, this.previousItem)
}
}
this.removeViewsForItem(this.previousItem);
if (this.superview instanceof ADNavigationView) {
this.superview.viewController.transitionsEnded()
}
};
ADNavigationBar.prototype.removeViewsForItem = function(a) {
if (a.leftButton !== null && a.leftButton !== this.topItem.leftButton) {
a.leftButton.view.removeFromSuperview()
}
a.titleView.view.removeFromSuperview();
if (a._rightBarButtonItem !== null && a._rightBarButtonItem !== a._rightBarButtonItem) {
a._rightBarButtonItem.view.removeFromSuperview()
}
if (a.leftButton !== null) {
a.leftButton.removeEventListener(ADControlTouchUpInsideEvent, this, false)
}
};
ADNavigationBar.prototype.updateTopItemLayout = function() {
if (this._items.length > 0) {
this.topItem.updateLayoutIfTopItem()
}
};
ADNavigationBar.prototype.shouldPushItem = function(a) {
if (ADUtils.objectHasMethod(this.delegate, ADNavigationBarShouldPushItem)) {
return this.delegate[ADNavigationBarShouldPushItem](this, a)
}
return true
};
ADNavigationBar.prototype.shouldPopItem = function(a) {
if (ADUtils.objectHasMethod(this.delegate, ADNavigationBarShouldPopItem)) {
return this.delegate[ADNavigationBarShouldPopItem](this, a)
}
return true
};
ADClass(ADNavigationBar);
const ADNavigationItemLeftButtonLeftMargin = 5;
const ADNavigationItemLeftButtonRightMargin = 8;
const ADNavigationItemRightButtonLeftMargin = 11;
const ADNavigationItemRightButtonRightMargin = 5;
ADNavigationItem.inherits = ADObject;
ADNavigationItem.synthetizes = ["title", "backBarButtonItem", "leftBarButtonItem", "rightBarButtonItem", "hidesBackButton"];
ADNavigationItem.includes = [ADEventTriage];
function ADNavigationItem(a) {
this.callSuper();
this._title = "";
this._backBarButtonItem = new ADBarButtonItem(ADBarButtonItemTypeBack);
this._hidesBackButton = false;
this._leftBarButtonItem = null;
this._rightBarButtonItem = null;
this.titleView = new ADBarButtonItem(ADBarButtonItemTypePlain);
this.titleView.view.layer.setAttribute("role", "header");
this.buttons = null;
this.positions = null;
this.navigationBar = null;
this.viewController = null;
this.title = a || "";
this._backBarButtonItem.addEventListener(ADControlTouchUpInsideEvent, this, false)
}
ADNavigationItem.prototype.handleControlTouchUpInside = function(a) {
if (this._hidesBackButton) {
return
}
if (this.viewController !== null && this.viewController.parentViewController !== null) {
this.viewController.parentViewController.popViewControllerAnimated(true)
} else {
if (this.navigationBar !== null) {
this.navigationBar.popNavigationItemAnimated(true)
}
}
};
ADNavigationItem.prototype.setTitle = function(a) {
this._title = a;
this.updateLayoutIfTopItem()
};
ADNavigationItem.prototype.setBackBarButtonItem = function(a) {
if (this.navigationBar !== null && this.navigationBar.backItem === this) {
if (this._backBarButtonItem !== null) {
this._backBarButtonItem.view.removeFromSuperview()
}
this._backBarButtonItem = a;
this.navigationBar.addSubview(this._backBarButtonItem.view);
this.navigationBar.topItem.updateLayoutIfTopItem()
} else {
this._backBarButtonItem = a
}
if (this._backBarButtonItem !== null) {
this._backBarButtonItem.addEventListener(ADControlTouchUpInsideEvent, this, false)
}
};
ADNavigationItem.prototype.setHidesBackButton = function(a) {
this.setHidesBackButtonWithAnimation(a, false)
};
ADNavigationItem.prototype.setLeftBarButtonItem = function(a) {
if (this.navigationBar !== null && this.navigationBar.topItem === this) {
var b = this.getDefaultBackButton();
if (this.leftButton !== null) {
this.leftButton.view.removeFromSuperview()
}
this._leftBarButtonItem = a;
var c = this._leftBarButtonItem || this.getDefaultBackButton();
if (c !== null) {
this.navigationBar.addSubview(c.view);
if (this._leftBarButtonItem === null && !this.hidesBackButton) {
c.view.opacity = 1
}
}
this.updateLayoutIfTopItem()
} else {
this._leftBarButtonItem = a
}
};
ADNavigationItem.prototype.setRightBarButtonItem = function(a) {
if (this.navigationBar !== null && this.navigationBar.topItem === this) {
if (this._rightBarButtonItem !== null) {
this._rightBarButtonItem.view.removeFromSuperview()
}
this._rightBarButtonItem = a;
this.navigationBar.addSubview(this._rightBarButtonItem.view);
this.updateLayoutIfTopItem()
} else {
this._rightBarButtonItem = a
}
};
ADNavigationItem.prototype.setHidesBackButtonWithAnimation = function(a, c) {
var b = this.getDefaultBackButton();
if (this._hidesBackButton == a) {
return
}
this._hidesBackButton = a;
if (b === null) {
return
}
b.view.transitionsEnabled = c;
b.view.opacity = a ? 0: 1
};
ADNavigationItem.prototype.setLeftBarButtonItemWithAnimation = function(d, a) {
if (!a || this.navigationBar === null || this.navigationBar.topItem !== this) {
this.leftBarButtonItem = d;
return
}
ADTransaction.begin();
ADTransaction.defaults.duration = 0.5;
ADTransaction.defaults.properties = ["opacity"];
var b = this.leftButton;
if (b !== null) {
new ADTransition({
target: b.view,
to: [0],
removesTargetUponCompletion: true
}).start()
}
this._leftBarButtonItem = d;
var c = this._leftBarButtonItem || this.getDefaultBackButton();
if (c !== null) {
this.navigationBar.addSubview(c.view);
if (this._leftBarButtonItem !== null || !this._hidesBackButton) {
new ADTransition({
target: c.view,
from: [0],
to: [1]
}).start()
}
}
this.updateLayoutIfTopItem();
ADTransaction.commit()
};
ADNavigationItem.prototype.setRightBarButtonItemWithAnimation = function(c, a) {
if (!a || this.navigationBar === null || this.navigationBar.topItem !== this) {
this.rightBarButtonItem = c;
return
}
ADTransaction.begin();
ADTransaction.defaults.duration = 0.5;
ADTransaction.defaults.properties = ["opacity"];
var b = this._rightBarButtonItem;
if (b !== null) {
new ADTransition({
target: b.view,
to: [0],
removesTargetUponCompletion: true
}).start()
}
this._rightBarButtonItem = c;
if (this._rightBarButtonItem !== null) {
this.navigationBar.addSubview(this._rightBarButtonItem.view);
new ADTransition({
target: this._rightBarButtonItem.view,
from: [0],
to: [1]
}).start()
}
this.updateLayoutIfTopItem();
ADTransaction.commit()
};
ADNavigationItem.prototype.getDefaultBackButton = function() {
return (this.navigationBar !== null && this.navigationBar.backItem !== null) ? this.navigationBar.backItem.backBarButtonItem: null
};
ADNavigationItem.prototype.sizeItemsAndComputePositionsWithBackItem = function(d) {
if (this.navigationBar === null) {
return
}
var i = this._leftBarButtonItem || ((d !== null) ? d.backBarButtonItem: null);
var e = (this._rightBarButtonItem !== null) ? this._rightBarButtonItem.view.size.width: 0;
var n = this.navigationBar.size.width - ADNavigationItemLeftButtonLeftMargin - ADNavigationItemRightButtonRightMargin;
if (i !== null) {
n -= ADNavigationItemLeftButtonRightMargin
}
if (this._rightBarButtonItem !== null) {
n -= ADNavigationItemRightButtonLeftMargin + e
}
var f = 0;
if (i !== null) {
i.maxWidth = this.navigationBar.size.width / 2;
if (i !== this._leftBarButtonItem && i.title == "" && i.image === null) {
i.title = d.title
}
f = i.view.size.width
}
this.titleView.maxWidth = 0;
this.titleView.title = this._title;
var g = this.titleView.view.size.width;
if (g + f > n) {
if (i !== null) {
i.maxWidth = Math.min(Math.max(n / 3, n - g), i.maxWidth);
f = i.view.size.width
}
this.titleView.maxWidth = n - f;
g = this.titleView.view.size.width
}
var b = ADNavigationItemLeftButtonLeftMargin;
var k = this.navigationBar.size.width - ADNavigationItemRightButtonRightMargin - e;
var j = b + ((i != null) ? f + ADNavigationItemLeftButtonRightMargin: 0);
var a = k - g - ((e > 0) ? ADNavigationItemRightButtonLeftMargin: 0);
var l = (this.navigationBar.size.width - g) / 2;
var h = l;
if (l > a || l < j) {
var c = Math.abs(l - j);
var m = Math.abs(l - a);
h = (c < m) ? j: a
}
this.leftButton = i;
this.positions = {
leftButton: b,
title: h,
rightButton: k
}
};
ADNavigationItem.prototype.updateLayout = function() {
if (this.positions === null || this.button === null) {
return
}
if (this.leftButton != null) {
this.leftButton.view.position = new ADPoint(this.positions.leftButton, 0)
}
if (this._rightBarButtonItem != null) {
this._rightBarButtonItem.view.position = new ADPoint(this.positions.rightButton, 0)
}
this.titleView.view.position = new ADPoint(this.positions.title, 0)
};
ADNavigationItem.prototype.updateLayoutIfTopItem = function(a) {
if (this.navigationBar === null || this.navigationBar.topItem !== this) {
return
}
this.sizeItemsAndComputePositionsWithBackItem(this.navigationBar.backItem);
this.updateLayout()
};
ADClass(ADNavigationItem);
const ADToolbarHeight = 44;
const ADToolbarEdgeMargin = 6;
const ADToolbarItemMargin = 10;
const ADToolbarStyleDefault = "default";
const ADToolbarStyleBlack = "black";
const ADToolbarStyleBlackTranslucent = "black-translucent";
const ADToolbarAnimationDuration = 0.2;
const ADToolbarFadeOutTransition = {
properties: ["transform", "opacity"],
to: ["scale(0.01)", 0]
};
ADToolbar.inherits = ADView;
ADToolbar.synthetizes = ["items", "style"];
function ADToolbar() {
this._items = [];
this._style = "";
this.callSuper();
this.layer.addEventListener("webkitTransitionEnd", this, false);
this.style = ADToolbarStyleDefault;
this.clipsToBounds = true
}
ADToolbar.prototype.createLayer = function() {
this.callSuper();
this.layer.addClassName("ad-toolbar");
this.glow = this.layer.appendChild(document.createElement("div"));
this.glow.className = "glow"
};
ADToolbar.prototype.setPosition = function(a) {
this.callSuper(a);
if (this.layerIsInDocument) {
this.callMethodNameAfterDelay("updateBackgroundWithPosition", 0)
}
};
ADToolbar.prototype.setSize = function(a) {
a.height = ADToolbarHeight;
this.callSuper(a);
this.updateLayout()
};
ADToolbar.prototype.willMoveToSuperview = function(a) {
if (a !== null && this._size.width == 0) {
this.size = new ADSize(a.size.width, ADToolbarHeight)
}
};
ADToolbar.prototype.layerWasInsertedIntoDocument = function() {
this.updateBackgroundWithPosition()
};
ADToolbar.prototype.setStyle = function(a) {
this.layer.removeClassName(this._style);
this.layer.addClassName(a);
this._style = a
};
ADToolbar.prototype.setItems = function(a) {
this.setItemsAnimated(a, false)
};
ADToolbar.prototype.setItemsAnimated = function(h, a) {
ADTransaction.begin();
ADTransaction.defaults.duration = a ? ADToolbarAnimationDuration: 0;
for (var k = 0; k < this._items.length; k++) {
var e = this._items[k];
var g = e.view;
if (h.indexOf(e) == -1) {
if (!a) {
g.removeFromSuperview()
} else {
g.needsRemoval = true;
g.applyTransition(ADToolbarFadeOutTransition)
}
}
}
for (var k = 0; k < h.length; k++) {
e = h[k];
g = e.view;
if (g.superview !== this) {
e._newItem = true;
this.addSubview(g);
g.addPropertyObserver("size", this);
if (e.type == ADBarButtonItemTypePlain) {
g.addEventListener(ADControlTouchStateChangeEvent, this, false)
}
}
}
var l = 0;
var d = 0;
for (var k = 0; k < h.length; k++) {
e = h[k];
if (e.type == ADBarButtonItemTypeFlexibleSpace) {
l++
} else {
d += e.view.size.width
}
}
var c = this.size.width - d - ADToolbarItemMargin * (h.length - 1) - ADToolbarEdgeMargin * 2;
var f = (l > 0) ? (c / l) : 0;
var i = ADToolbarEdgeMargin;
var b;
for (var k = 0; k < h.length; k++) {
b = ADToolbarItemMargin;
e = h[k];
g = e.view;
if (e.type == ADBarButtonItemTypeFlexibleSpace) {
i += f
} else {
if (e.type == ADBarButtonItemTypeFixedSpace) {
i += g.size.width;
b = 0
} else {
var j = new ADPoint(i, (this.size.height - g.size.height) / 2);
if (e._newItem) {
g.position = j;
e._newItem = false;
if (a) {
g.applyTransition(ADViewTransitionDissolveIn)
}
} else {
g.applyTransition({
properties: ["position"],
to: [j]
})
}
i += g.size.width
}
}
i += b
}
ADTransaction.commit();
this._items = h
};
ADToolbar.prototype.updateLayout = function() {
if (this._items.length > 0) {
this.setItemsAnimated(this._items, false)
}
};
ADToolbar.prototype.updateBackgroundWithPosition = function() {
var a = window.webkitConvertPointFromNodeToPage(this.layer, new WebKitPoint(0, 0));
this.layer[a.y == 0 ? "addClassName": "removeClassName"]("top")
};
ADToolbar.prototype.handleEvent = function(a) {
this.callSuper(a);
if (a.type == "webkitTransitionEnd") {
if (a.target === this.layer) {
return
} else {
if (a.target !== this.glow) {
this.removeItemViewIfNeeded(a.target._control)
} else {
if (this.glow.style.opacity == 0) {
this.glow.style.display = "none"
}
}
}
} else {
if (a.type == ADControlTouchStateChangeEvent) {
var b = a.control;
this.glow.style.webkitTransform = ADUtils.t(b.position.x + b.size.width / 2 - 50, 0);
this.glow.style.opacity = b.touchInside ? 1: 0;
this.glow.style.display = "block"
}
}
};
ADToolbar.prototype.removeItemViewIfNeeded = function(a) {
if (a.needsRemoval) {
a.removeFromSuperview();
a.needsRemoval = false;
a.transitionsEnabled = false;
a.transform = "scale(1)";
a.opacity = 1
}
};
ADToolbar.prototype.handlePropertyChange = function(b, a) {
this.setItemsAnimated(this._items, false)
};
ADClass(ADToolbar);
ADToolbar.init = function() {
ADUtils.preloadImageAsset("bar/UINavigationBarDefaultBackground.png");
ADUtils.preloadImageAsset("bar/UINavigationBarBlackOpaqueBackground.png");
ADUtils.preloadImageAsset("bar/UINavigationBarBlackTranslucentBackground.png");
ADUtils.preloadImageAsset("bar/toolbar_glow.png")
};
window.addEventListener("load", ADToolbar.init, false);
const ADControlTouchDownEvent = "controlTouchDown";
const ADControlTouchDragInsideEvent = "controlTouchDragInside";
const ADControlTouchDragOutsideEvent = "controlTouchDragOutside";
const ADControlTouchDragEnterEvent = "controlTouchDragEnter";
const ADControlTouchDragExitEvent = "controlTouchDragExit";
const ADControlTouchUpInsideEvent = "controlTouchUpInside";
const ADControlTouchUpOutsideEvent = "controlTouchUpOutside";
const ADControlTouchCancelEvent = "controlTouchCancel";
const ADControlValueChangeEvent = "controlValueChange";
const ADControlTouchStateChangeEvent = "controlTouchStateChange";
const ADControlStateNormal = 0;
const ADControlStateNormalCSS = "normal";
const ADControlStateHighlighted = 1 << 0;
const ADControlStateHighlightedCSS = "highlighted";
const ADControlStateDisabled = 1 << 1;
const ADControlStateDisabledCSS = "disabled";
const ADControlStateSelected = 1 << 2;
const ADControlStateSelectedCSS = "selected";
ADControl.inherits = ADView;
ADControl.includes = [ADEventTarget];
ADControl.synthetizes = ["state", "enabled", "selected", "highlighted", "touchLayer"];
function ADControl() {
this.tag = 0;
this._enabled = true;
this._selected = false;
this._highlighted = false;
this._touchLayer = null;
this.callSuper();
this.tracking = false;
this.touchInside = false;
this.layer._control = this;
this.eventTarget = this.layer;
this.tracksTouchesOnceTouchesBegan = true;
this.layer.removeEventListener(ADStartEvent, this, false);
this.touchLayer.addEventListener(ADStartEvent, this, false)
}
ADControl.prototype.createLayer = function() {
this.callSuper();
this.layer.addClassName("ad-control")
};
ADControl.prototype.getState = function() {
return (ADControlStateNormal | (this._highlighted ? ADControlStateHighlighted: 0) | (this._enabled ? 0: ADControlStateDisabled) | (this._selected ? ADControlStateSelected: 0))
};
ADControl.prototype.setEnabled = function(a) {
if (a == this._enabled) {
return
}
this.layer[a ? "removeClassName": "addClassName"](ADControlStateDisabledCSS);
this._enabled = a;
this.tracksTouchesOnceTouchesBegan = a;
this.notifyPropertyChange("state")
};
ADControl.prototype.setSelected = function(a) {
if (a == this._selected) {
return
}
this.layer[a ? "addClassName": "removeClassName"](ADControlStateSelectedCSS);
this._selected = a;
this.notifyPropertyChange("state")
};
ADControl.prototype.setHighlighted = function(a) {
if (a == this._highlighted) {
return
}
this.layer[a ? "addClassName": "removeClassName"](ADControlStateHighlightedCSS);
this._highlighted = a;
this.notifyPropertyChange("state")
};
ADControl.prototype.getTouchLayer = function() {
return (this._touchLayer != null) ? this._touchLayer: this.layer
};
ADControl.prototype.touchesBegan = function(a) {
this.callSuper(a);
if (!this._enabled) {
return
}
a.stopPropagation();
a.preventDefault();
this.touchInside = true;
this.highlighted = true;
this.dispatchEvent(this.createUIEvent(ADControlTouchDownEvent, a));
this.dispatchEvent(this.createEvent(ADControlTouchStateChangeEvent));
this.lastProcessedEvent = a
};
ADControl.prototype.touchesMoved = function(c) {
this.callSuper(c);
this.tracking = true;
var a = this.pointInside(ADPoint.fromEventInElement(c, this.layer));
var b = a ? ADControlTouchDragInsideEvent: ADControlTouchDragOutsideEvent;
if (a != this.touchInside) {
this.touchInside = a;
this.highlighted = a;
b = a ? ADControlTouchDragEnterEvent: ADControlTouchDragExitEvent;
this.dispatchEvent(this.createEvent(ADControlTouchStateChangeEvent))
}
this.dispatchEvent(this.createUIEvent(b, c));
this.lastProcessedEvent = c
};
ADControl.prototype.touchesEnded = function(b) {
this.callSuper(b);
this.tracking = false;
this.highlighted = false;
var a = this.touchInside ? ADControlTouchUpInsideEvent: ADControlTouchUpOutsideEvent;
this.dispatchEvent(this.createUIEvent(a, this.lastProcessedEvent));
this.touchInside = false;
this.dispatchEvent(this.createEvent(ADControlTouchStateChangeEvent))
};
ADControl.prototype.touchesCancelled = function(a) {
this.callSuper(a);
this.dispatchEvent(this.createUIEvent(ADControlTouchCancelEvent, a))
};
ADControl.prototype.createEvent = function(a) {
var b = document.createEvent("Event");
b.initEvent(a, true, false);
b.control = this;
return b
};
ADControl.prototype.createUIEvent = function(c, b) {
var a = ADUtils.createUIEvent(c, b);
a.control = this;
return a
};
ADClass(ADControl);
const ADBarItemDisabledCSS = "disabled";
ADBarItem.inherits = ADObject;
ADBarItem.synthetizes = ["enabled", "image", "imageOffset", "title"];
function ADBarItem() {
this.callSuper();
this._enabled = true;
this._image = null;
this._imageOffset = null;
this._title = "";
this.tag = 0;
this.view = null
}
ADClass(ADBarItem);
const ADBarButtonHeight = 30;
const ADBarButtonPointyXOffset = 3;
ADBarButton.inherits = ADControl;
ADBarButton.synthetizes = ["maxWidth", "width", "type", "style", "image", "imageOffset", "title"];
function ADBarButton(a) {
this.callSuper();
this._maxWidth = 0;
this._width = 0;
this._type = "";
this._style = "";
this._image = null;
this._imageOffset = null;
this._title = "";
this.type = (a != null) ? a: ADBarButtonItemTypeSquare;
this.style = ADBarButtonItemStyleDefault;
this.usesAutomaticImageOffset = true
}
ADBarButton.prototype.createLayer = function() {
this.callSuper();
this.layer.addClassName("ad-bar-button");
this.layer.setAttribute("role", "button");
this.background = this.layer.appendChild(document.createElement("div"));
this.icon = this.layer.appendChild(document.createElement("img"))
};
ADBarButton.prototype.layerWasInsertedIntoDocument = function() {
this.callSuper();
if (this._title != "" && this._width == 0) {
this.autoSizeTitle()
}
};
ADBarButton.prototype.getSize = function() {
var a = (this._maxWidth == 0) ? this._size.width: Math.min(this._maxWidth, this._size.width);
return new ADSize(a, this._size.height)
};
ADBarButton.prototype.setSize = function(a) {
a.height = ADBarButtonHeight;
this.callSuper(a)
};
ADBarButton.prototype.touchesBegan = function(a) {
if (this.type == ADBarButtonItemTypeFlexibleSpace || this.type == ADBarButtonItemTypeFixedSpace) {
a.preventDefault();
return
}
this.callSuper(a)
};
ADBarButton.prototype.setMaxWidth = function(a) {
this.background.style.maxWidth = (a == 0) ? "inherit": ADUtils.px(a);
this._maxWidth = a;
if (this._width == 0) {
this.autoSizeTitle()
}
};
ADBarButton.prototype.setWidth = function(a) {
if (a == 0) {
this.autoSizeTitle();
this.autoSizeImage();
this.positionImage()
} else {
this._width = a;
this.size = new ADSize(a, ADBarButtonHeight);
this.positionImage()
}
};
ADBarButton.prototype.autoSizeTitle = function() {
if (this._title != "" && this.layerIsInDocument) {
this.layer.style.width = "auto";
var a = parseInt(window.getComputedStyle(this.layer).width);
this.size = new ADSize(a, this._size.height)
}
};
ADBarButton.prototype.autoSizeImage = function() {
if (this._image !== null) {
var b = this.getBorderXOffsets();
var a = this._image.width + b.left + b.right;
this.size = new ADSize(a, this._size.height)
}
};
ADBarButton.prototype.setTitle = function(a) {
this.background.innerText = a;
this._title = a;
if (this._width == 0) {
this.autoSizeTitle()
}
};
ADBarButton.prototype.setImage = function(a) {
this.icon.src = a.url;
this._image = a;
if (a.loaded) {
this.positionImage()
} else {
a.addPropertyObserver("loaded", this)
}
};
ADBarButton.prototype.getImageOffset = function() {
return new ADPoint(parseInt(this.icon.style.left), parseInt(this.icon.style.top))
};
ADBarButton.prototype.setImageOffset = function(a) {
this.icon.style.left = ADUtils.px(a.x);
this.icon.style.top = ADUtils.px(a.y);
this.usesAutomaticImageOffset = false
};
ADBarButton.prototype.positionImage = function() {
if (this._image === null || !this.usesAutomaticImageOffset) {
return
}
var a = Math.min(this._image.height, this.size.height);
this.icon.height = a;
var b = new ADPoint((this._size.width - this.icon.width) / 2, (ADBarButtonHeight - this.icon.height) / 2);
if (this._type == ADBarButtonItemTypeBack) {
b.x += ADBarButtonPointyXOffset
}
if (this._type == ADBarButtonItemTypeForward) {
b.x -= ADBarButtonPointyXOffset
}
this.imageOffset = b;
this.usesAutomaticImageOffset = true
};
ADBarButton.prototype.setType = function(a) {
this.layer.removeClassName(this._type);
this.layer.addClassName(a);
this._type = a
};
ADBarButton.prototype.setStyle = function(a) {
this.layer.removeClassName(this._style);
this.layer.addClassName(a);
this._style = a
};
ADBarButton.prototype.getBorderXOffsets = function() {
var c = window.getComputedStyle(this.background);
var b = c.getPropertyCSSValue("border-left-width");
var a = c.getPropertyCSSValue("border-right-width");
return {
left: (b !== null) ? b.getFloatValue(CSSPrimitiveValue.CSS_PX) : 0,
right: (a !== null) ? a.getFloatValue(CSSPrimitiveValue.CSS_PX) : 0
}
};
ADBarButton.prototype.handlePropertyChange = function(b, a) {
if (this._width == 0) {
this.autoSizeImage()
}
this.positionImage()
};
ADBarButton.prototype.dispatchEvent = function(a) {
a.barButtonItem = this.barButtonItem;
this.callSuper(a)
};
ADClass(ADBarButton);
ADBarButton.init = function() {
var a = ["UINavigationBarDoneButtonPressed", "UINavigationBarDoneButton", "UINavigationBarDefaultForwardPressed", "UINavigationBarDefaultForward", "UINavigationBarDefaultButtonPressed", "UINavigationBarDefaultButton", "UINavigationBarDefaultBackPressed", "UINavigationBarDefaultBack", "UINavigationBarBlackTranslucentForward", "UINavigationBarBlackTranslucentButton", "UINavigationBarBlackTranslucentBack", "UINavigationBarBlackOpaqueForward", "UINavigationBarBlackOpaqueButton", "UINavigationBarBlackOpaqueBack", "UINavigationBarBlackForwardPressed", "UINavigationBarBlackButtonPressed", "UINavigationBarBlackBackPressed"];
for (var b = 0; b < a.length; b++) {
ADUtils.preloadImageAsset("button/" + a[b] + ".png")
}
};
window.addEventListener("load", ADBarButton.init, false);
const ADBarButtonItemTypePlain = "plain";
const ADBarButtonItemTypeSquare = "square";
const ADBarButtonItemTypeBack = "back";
const ADBarButtonItemTypeForward = "forward";
const ADBarButtonItemTypeFlexibleSpace = "flexible-space";
const ADBarButtonItemTypeFixedSpace = "fixed-space";
const ADBarButtonItemStyleBlack = "black";
const ADBarButtonItemStyleDefault = "default";
const ADBarButtonItemStyleLightBlue = "lightblue";
ADBarButtonItem.inherits = ADBarItem;
ADBarButtonItem.includes = [ADEventTarget];
ADBarButtonItem.synthetizes = ["maxWidth", "customView", "width", "type", "style"];
function ADBarButtonItem(a) {
this.callSuper();
this.view = new ADBarButton(a);
this.view.isCustomView = false;
this.view.barButtonItem = this;
this.eventTarget = this.view
}
ADBarButtonItem.prototype.getEnabled = function() {
return (!this.view.isCustomView) ? this.view.enabled: this.view.userInteractionEnabled
};
ADBarButtonItem.prototype.setEnabled = function(a) {
if (this.view.isCustomView) {
this.view.userInteractionEnabled = a
} else {
this.view.enabled = a
}
};
ADBarButtonItem.prototype.getMaxWidth = function() {
return (!this.view.isCustomView) ? this.view.maxWidth: 0
};
ADBarButtonItem.prototype.setMaxWidth = function(a) {
if (!this.view.isCustomView) {
this.view.maxWidth = a
}
};
ADBarButtonItem.prototype.getWidth = function() {
return (!this.view.isCustomView) ? this.view.width: this.view.size.width
};
ADBarButtonItem.prototype.setWidth = function(a) {
if (this.view.isCustomView) {
this.view.size = new ADSize(a, this.view.size.height)
} else {
this.view.width = a
}
};
ADBarButtonItem.prototype.getTitle = function() {
return (!this.view.isCustomView) ? this.view.title: ""
};
ADBarButtonItem.prototype.setTitle = function(a) {
if (!this.view.isCustomView) {
this.view.title = a
}
};
ADBarButtonItem.prototype.getImage = function() {
return (!this.view.isCustomView) ? this.view.image: null
};
ADBarButtonItem.prototype.setImage = function(a) {
if (!this.view.isCustomView) {
this.view.image = a
}
};
ADBarButtonItem.prototype.getImageOffset = function() {
return (!this.view.isCustomView) ? this.view.imageOffset: null
};
ADBarButtonItem.prototype.setImageOffset = function(a) {
if (!this.view.isCustomView) {
this.view.imageOffset = a
}
};
ADBarButtonItem.prototype.getType = function() {
return (!this.view.isCustomView) ? this.view.type: ""
};
ADBarButtonItem.prototype.setType = function(a) {
if (!this.view.isCustomView) {
this.view.type = a
}
};
ADBarButtonItem.prototype.getStyle = function(a) {
return (!this.view.isCustomView) ? this.view.style: ""
};
ADBarButtonItem.prototype.setStyle = function(a) {
if (!this.view.isCustomView) {
this.view.style = a
}
};
ADBarButtonItem.prototype.getCustomView = function() {
return (this.view.isCustomView) ? this.view: null
};
ADBarButtonItem.prototype.setCustomView = function(a) {
if (a === this.view) {
return
}
if (!this.view.isCustomView) {
this.view = undefined
}
a.isCustomView = true;
a.barButtonItem = this;
this.view = a
};
ADClass(ADBarButtonItem);
const ADTabBarItemHeight = 44;
const ADTabBarItemCanvasHeight = 34;
ADTabBarItem.inherits = ADControl;
ADTabBarItem.synthetizes = ["title", "image", "badgeValue"];
function ADTabBarItem(b, c, a) {
this._title = "";
this._image = "";
this._badgeValue = 0;
this.callSuper()
}
ADTabBarItem.prototype.createLayer = function() {
this.callSuper();
this.layer.addClassName("ad-tab-bar-item");
this.canvas = this.layer.appendChild(document.createElement("canvas"));
this.label = this.layer.appendChild(document.createElement("div"));
this.badge = this.layer.appendChild(document.createElement("div"));
this.badgeContent = this.badge.appendChild(document.createElement("span"));
this.canvas.height = ADTabBarItemCanvasHeight
};
ADTabBarItem.prototype.setSize = function(a) {
this.callSuper(a);
this.badgeContent.style.maxWidth = ADUtils.px(this.size.width - 12);
this.updateBadgePosition();
this.canvas.width = this.size.width;
this.drawImage()
};
ADTabBarItem.prototype.didMoveToSuperview = function() {
this.callSuper();
var a = this;
setTimeout(function() {
a.updateBadgePosition()
},
0)
};
ADTabBarItem.prototype.setSelected = function(a) {
this.callSuper(a);
this.drawImage()
};
ADTabBarItem.prototype.setTitle = function(a) {
this.label.textContent = a;
this._title = a
};
ADTabBarItem.prototype.setImage = function(a) {
this._image = a;
if (a.loaded) {
this.drawImage()
} else {
a.addPropertyObserver("loaded", this)
}
};
ADTabBarItem.prototype.setBadgeValue = function(a) {
this._badgeValue = a;
if (a > 0) {
this.badge.style.display = "block";
this.badgeContent.textContent = a;
this.updateBadgePosition()
} else {
this.badge.style.display = "none"
}
};
ADTabBarItem.prototype.updateBadgePosition = function() {
if (this.superview == null) {
return
}
if (this.badge.offsetWidth < this.size.width / 2) {
this.badge.style.left = ADUtils.px(Math.round(this.size.width / 2))
} else {
this.badge.style.right = ADUtils.px( - 4)
}
};
ADTabBarItem.prototype.drawImage = function() {
if (this._image === null || !this._image.loaded) {
return
}
var a = this.canvas.getContext("2d");
a.clearRect(0, 0, this.size.width, this.size.height);
var b = (ADTabBarItemCanvasHeight - this._image.height) / 2;
a.globalCompositeOperation = "source-over";
a.drawImage(this._image.element, (this.size.width - this._image.width) / 2, b);
if (this.selected) {
a.globalCompositeOperation = "source-in";
a.drawImage(ADTabBarItem.prototype.maskImage.element, (this.size.width - ADTabBarItem.prototype.maskImage.width) / 2, b)
}
};
ADTabBarItem.prototype.handlePropertyChange = function(b, a) {
this.drawImage()
};
ADClass(ADTabBarItem);
ADTabBarItem.init = function() {
ADTabBarItem.prototype.maskImage = new ADImage(ADUtils.assetsPath + "bar/tab_bar_blue_gradient.png")
};
ADTabBarItem.initWithTitleImageAndTag = function(b, c, a) {
var d = new ADTabBarItem();
d.title = b;
d.image = c;
d.tag = a;
return d
};
window.addEventListener("load", ADTabBarItem.init, false);
const ADSearchBarHeight = 44;
const ADSearchBarStyleDefault = "default";
const ADSearchBarStyleBlack = "black";
const ADSearchBarStyleBlackTranslucent = "black-translucent";
const ADSearchBarTextDidChange = "searchBarTextDidChange";
const ADSearchBarTextDidBeginEditing = "searchBarTextDidBeginEditing";
const ADSearchBarTextDidEndEditing = "searchBarTextDidEndEditing";
const ADSearchBarCancelButtonClicked = "searchBarCancelButtonClicked";
const ADSearchBarShowsCancelButtonCSS = "shows-cancel-button";
const ADSearchBarDisplaysPlaceholder = "displays-placeholder";
ADSearchBar.inherits = ADView;
ADSearchBar.includes = [ADEventTriage];
ADSearchBar.synthetizes = ["style", "placeholder", "text", "showsCancelButton", "editing"];
function ADSearchBar() {
this.delegate = null;
this._style = ADSearchBarStyleDefault;
this._placeholder = "";
this._text = "";
this._showsCancelButton = false;
this._editing = false;
this.hasBeenExplicitelySized = false;
this.callSuper();
this.field.addEventListener("focus", this, false);
this.field.addEventListener("blur", this, false);
this.field.addEventListener("input", this, false);
this.field.parentNode.addEventListener("submit", this, false);
this.button.addEventListener(ADControlTouchUpInsideEvent, this, false);
this.emptyButton.addEventListener(ADControlTouchUpInsideEvent, this, false);
this.button.addPropertyObserver("size", this, "updateLayout");
this.autoresizesSubviews = false
}
ADSearchBar.prototype.createLayer = function() {
this.callSuper();
this.layer.addClassName("ad-search-bar");
var a = this.layer.appendChild(document.createElement("form"));
this.label = a.appendChild(document.createElement("div"));
this.field = a.appendChild(document.createElement("input"));
this.field.type = "text";
this.button = new ADBarButtonItem();
this.button.title = "Cancel";
this.button.view.addPropertyObserver("size", this, "updateLayout");
this.addSubview(this.button.view);
this.emptyButton = this.addSubview(new ADButton(ADButtonTypeCustom))
};
ADSearchBar.prototype.setSize = function(a) {
a.height = ADSearchBarHeight;
this.callSuper(a);
this.hasBeenExplicitelySized = true;
this.updateLayout()
};
ADSearchBar.prototype.updateLayout = function() {
if (!this.layerIsInDocument) {
return
}
var a = this.showsCancelButton ? (this.button.view.size.width + 5) : 0;
this.field.parentNode.style.right = ADUtils.px(a + 5);
this.emptyButton.layer.style.right = ADUtils.px(a + 10)
};
ADSearchBar.prototype.didMoveToSuperview = function() {
this.callSuper();
if (this.hasBeenExplicitelySized || this.superview === null) {
return
}
this.size = new ADSize(this.superview.size.width, ADSearchBarHeight);
this.hasBeenExplicitelySized = false
};
ADSearchBar.prototype.setStyle = function(a) {
this.layer.removeClassName(this._style);
this.layer.addClassName(a);
this._style = a
};
ADSearchBar.prototype.setPlaceholder = function(a) {
this._placeholder = a;
this.checkForPlaceholderDisplay()
};
ADSearchBar.prototype.getText = function(a) {
return this.field.value
};
ADSearchBar.prototype.setText = function(a) {
this.label.innerText = a;
this.field.value = a;
if (ADUtils.objectHasMethod(this.delegate, ADSearchBarTextDidChange)) {
this.delegate[ADSearchBarTextDidChange](this, a)
}
this.checkForPlaceholderDisplay()
};
ADSearchBar.prototype.setShowsCancelButton = function(a) {
if (this._showsCancelButton == a) {
return
}
this.layer[a ? "addClassName": "removeClassName"](ADSearchBarShowsCancelButtonCSS);
this._showsCancelButton = a;
this.updateLayout()
};
ADSearchBar.prototype.checkForPlaceholderDisplay = function() {
this.layer[this.text == "" ? "addClassName": "removeClassName"](ADSearchBarDisplaysPlaceholder);
if (this.text == "") {
this.label.innerText = this._placeholder
}
};
ADSearchBar.prototype.setEditing = function(a) {
this._editing = a;
this.field[a ? "focus": "blur"]()
};
ADSearchBar.prototype.handleFocus = function(a) {
if (ADUtils.objectHasMethod(this.delegate, ADSearchBarTextDidBeginEditing)) {
this.delegate[ADSearchBarTextDidBeginEditing](this)
}
this.editing = true
};
ADSearchBar.prototype.handleBlur = function(a) {
if (ADUtils.objectHasMethod(this.delegate, ADSearchBarTextDidEndEditing)) {
this.delegate[ADSearchBarTextDidEndEditing](this)
}
this.label.innerText = this.field.value;
this.checkForPlaceholderDisplay();
this.editing = false
};
ADSearchBar.prototype.handleInput = function(a) {
this.checkForPlaceholderDisplay();
if (ADUtils.objectHasMethod(this.delegate, ADSearchBarTextDidChange)) {
this.delegate[ADSearchBarTextDidChange](this, this.field.value)
}
};
ADSearchBar.prototype.handleSubmit = function(a) {
a.preventDefault();
this.editing = false
};
ADSearchBar.prototype.handleControlTouchUpInside = function(a) {
if (a.control === this.emptyButton) {
this.text = "";
this.checkForPlaceholderDisplay()
} else {
if (ADUtils.objectHasMethod(this.delegate, ADSearchBarCancelButtonClicked)) {
this.delegate[ADSearchBarCancelButtonClicked](this)
}
}
};
ADClass(ADSearchBar);
ADSearchBar.init = function() {
ADUtils.preloadImageAsset("search/background_default.png");
ADUtils.preloadImageAsset("search/cancel_touched.png")
};
window.addEventListener("load", ADSearchBar.init, false);
const ADButtonTypeCustom = "custom-type";
const ADButtonTypeRoundedRect = "rounded-rect-type";
const ADButtonTypeDetailDisclosure = "detail-disclosure-type";
const ADButtonTypeInfoLight = "info-light-type";
const ADButtonTypeInfoDark = "info-dark-type";
const ADButtonTypeContactAdd = "contact-add-type";
const ADButtonDefaultHeight = 37;
ADButton.inherits = ADControl;
ADButton.synthetizes = ["currentTitle", "autosized"];
function ADButton(a) {
this.type = a;
this.callSuper();
this._autosized = true;
this.titles = [""];
this.syncTitleToState();
this.addPropertyObserver("state", this, "syncTitleToState")
}
ADButton.prototype.createLayer = function() {
this.callSuper();
this.layer.addClassName("ad-button " + this.type)
};
ADButton.prototype.getSize = function() {
var a = window.getComputedStyle(this.layer);
return new ADSize(parseInt(a.width), parseInt(a.height))
};
ADButton.prototype.setSize = function(a) {
this._autoSized = false;
this.callSuper(a)
};
ADButton.prototype.getCurrentTitle = function() {
return this.layer.innerText
};
ADButton.prototype.setAutosized = function(a) {
if (a) {
this.layer.style.width = "auto";
this.layer.style.height = ADUtils.px(ADButtonDefaultHeight)
}
this._autosized = a
};
ADButton.prototype.titleForState = function(a) {
return this.titles[a] || null
};
ADButton.prototype.setTitleForState = function(b, a) {
this.titles[a] = b;
if (a == this.state) {
this.syncTitleToState()
}
};
ADButton.prototype.syncTitleToState = function() {
if (! (this.type === ADButtonTypeRoundedRect || this.type === ADButtonTypeCustom)) {
return
}
this.layer.innerText = this.titles[this.state] || this.titles[ADControlStateNormal]
};
ADClass(ADButton);
ADButton.init = function() {
ADUtils.preloadImageAsset("tableview/UITableSelection.png")
};
window.addEventListener("load", ADButton.init, false);
ADInterfaceOrientationPortrait = 0;
ADInterfaceOrientationPortraitUpsideDown = 1;
ADInterfaceOrientationLandscapeLeft = 2;
ADInterfaceOrientationLandscapeRight = 3;
const ADViewControllerTransitionInFromRight = {
properties: ["transform"],
from: ["translateX($width)"],
to: ["translateX(0)"]
};
const ADViewControllerTransitionInFromLeft = {
properties: ["transform"],
from: ["translateX(-$width)"],
to: ["translateX(0)"]
};
const ADViewControllerTransitionOutToRight = {
properties: ["transform"],
from: ["translateX(0)"],
to: ["translateX($width)"]
};
const ADViewControllerTransitionOutToLeft = {
properties: ["transform"],
from: ["translateX(0)"],
to: ["translateX(-$width)"]
};
ADViewController.inherits = ADObject;
ADViewController.synthetizes = ["view", "title", "navigationItem", "toolbarItems", "navigationController", "tabBarItem", "tabBarController"];
function ADViewController(a) {
this.callSuper();
this.viewArchiveURL = a;
this._view = null;
this._title = "";
this._tabBarItem = null;
this._navigationItem = null;
this._toolbarItems = null;
this.hidesBottomBarWhenPushed = false;
this.modalViewController = null;
this.parentViewController = null;
this.modalTransitionStyle = null;
this.searchDisplayController = null;
this.wasBackItemTransition = ADViewControllerTransitionInFromLeft;
this.becomesBackItemTransition = ADViewControllerTransitionOutToLeft;
this.wasTopItemTransition = ADViewControllerTransitionOutToRight;
this.becomesTopItemTransition = ADViewControllerTransitionInFromRight;
this.interfaceOrientation = ADInterfaceOrientationPortrait
}
ADViewController.prototype.parentControllerOfKind = function(b) {
var a = this;
var c = null;
while (a.parentViewController !== null) {
if (a instanceof b) {
c = a;
break
}
a = a.parentViewController
}
return c
};
ADViewController.prototype.getNavigationController = function() {
return this.parentControllerOfKind(ADNavigationController)
};
ADViewController.prototype.getTabBarController = function() {
return this.parentControllerOfKind(ADTabBarController)
};
ADViewController.prototype.getView = function() {
if (this._view === null) {
this.loadView()
}
return this._view
};
ADViewController.prototype.loadView = function() {
if (this.viewArchiveURL) {
this._view = new ADView();
var a = new ADHTMLFragmentLoader(this.viewArchiveURL, this)
} else {
this.createDefaultView()
}
};
ADViewController.prototype.createDefaultView = function() {
this._view = new ADView();
this.viewDidLoad()
};
ADViewController.prototype.isViewLoaded = function() {
return (this._view != null)
};
ADViewController.prototype.viewDidLoad = function() {};
ADViewController.prototype.viewDidUnload = function() {};
ADViewController.prototype.setTitle = function(a) {
this._title = a;
if (this.parentViewController instanceof ADTabBarController) {
this.tabBarItem.title = a
} else {
if (this.parentViewController instanceof ADNavigationController) {
this.navigationItem.title = a
}
}
};
ADViewController.prototype.viewWillAppear = function(a) {};
ADViewController.prototype.viewDidAppear = function(a) {};
ADViewController.prototype.viewWillDisappear = function(a) {};
ADViewController.prototype.viewDidDisappear = function(a) {};
ADViewController.prototype.willRotateToInterfaceOrientation = function(a) {};
ADViewController.prototype.didRotateFromInterfaceOrientation = function(a) {};
ADViewController.prototype.presentModalViewControllerAnimated = function(b, a) {
this.modalViewController = b
};
ADViewController.prototype.dismissModalViewControllerAnimated = function(a) {
this.modalViewController = null
};
ADViewController.prototype.getNavigationItem = function() {
if (this._navigationItem === null) {
this._navigationItem = new ADNavigationItem(this.title);
this._navigationItem.viewController = this
}
return this._navigationItem
};
ADViewController.prototype.getTabBarItem = function() {
if (this._tabBarItem === null) {
this._tabBarItem = new ADTabBarItem();
this._tabBarItem.title = this.title;
this._tabBarItem.viewController = this
}
return this._tabBarItem
};
ADViewController.prototype.setToolbarItems = function(a) {
this.setToolbarItemsAnimated(a, false)
};
ADViewController.prototype.setToolbarItemsAnimated = function(c, b) {
this._toolbarItems = c;
var a = this.parentViewController;
if (a !== null && a instanceof ADNavigationController) {
a.toolbar.setItemsAnimated(c, b)
}
};
ADViewController.prototype.htmlFragmentLoaderDidLoad = function(a) {
var c = new ADContentView(a.fragment);
if (this._view !== null && this._view.superview) {
var b = this._view.layer;
var d = c.layer;
d.setAttribute("style", c.layer.style.cssText + b.style.cssText);
b.parentNode.replaceChild(d, b)
}
this._view.layer = c.layer;
c = null;
this.viewDidLoad()
};
ADViewController.prototype.htmlFragmentLoaderDidFail = function(a) {
console.warn("ADViewController — could not load view archive at URL " + a.url);
this.createDefaultView()
};
ADClass(ADViewController);
const ADNavigationControllerWillShowViewController = "navigationControllerWillShowViewControllerAnimated";
const ADNavigationControllerDidShowViewController = "navigationControllerDidShowViewControllerAnimated";
const ADNavigationControllerHideShowBarDuration = 0.2;
ADNavigationController.inherits = ADViewController;
ADNavigationController.synthetizes = ["viewControllers", "topViewController", "visibleViewController", "navigationBarHidden", "toolbarHidden"];
function ADNavigationController(a, b) {
this.callSuper(a);
this.delegate = null;
this._viewControllers = [];
this._navigationBarHidden = false;
this._toolbarHidden = true;
this.navigationBar = new ADNavigationBar();
this.toolbar = null;
this.busy = false;
this.requiresDeferredHostViewSizeUpdate = false;
this.previousController = null;
if (b !== undefined) {
this.viewControllers = [b]
}
}
ADNavigationController.prototype.loadView = function() {
if (this.isViewLoaded()) {
return
}
this._view = new ADNavigationView(this);
this._view.layer.addClassName("ad-navigation-controller-view");
this._view.clipsToBounds = true;
this._view.addSubview(this.navigationBar);
this.navigationBar.autoresizingMask = ADViewAutoresizingFlexibleWidth;
this.hostView = this._view.addSubview(new ADView());
this.hostView.layer.addClassName("ad-navigation-controller-host-view");
this.toolbar = this._view.addSubview(new ADToolbar());
this.toolbar.autoresizingMask = ADViewAutoresizingFlexibleWidth;
this._view.addPropertyObserver("size", this, "sizeChanged");
this._view.size = new ADSize(window.innerWidth, window.innerHeight);
this._view.autoresizingMask = ADViewAutoresizingFlexibleWidth | ADViewAutoresizingFlexibleHeight
};
ADNavigationController.prototype.viewMovedToNewSuperview = function() {
var a = this.navigationBar.topItem;
if (a !== null) {
a.updateLayoutIfTopItem()
}
};
ADNavigationController.prototype.sizeChanged = function() {
var c = -ADNavigationBarHeight;
var a = 0;
var b = this._view.size.height;
if (!this._navigationBarHidden) {
c = 0;
a += ADNavigationBarHeight
}
if (!this._toolbarHidden) {
b -= ADToolbarHeight
}
this.navigationBar.position = new ADPoint(0, c);
this.toolbar.position = new ADPoint(0, b);
this.hostView.position = new ADPoint(0, a);
this.updateHostViewSize()
};
ADNavigationController.prototype.updateHostViewSize = function() {
var a = this._view.size.height;
if (!this._navigationBarHidden) {
a -= ADNavigationBarHeight
}
if (!this._toolbarHidden) {
a -= ADToolbarHeight
}
this.hostView.size = new ADSize(this._view.size.width, a)
};
ADNavigationController.prototype.getTopViewController = function() {
return (this._viewControllers.length > 0) ? this._viewControllers[this._viewControllers.length - 1] : null
};
ADNavigationController.prototype.getVisibleViewController = function() {
var a = this.topViewController;
return a.modalViewController || a
};
ADNavigationController.prototype.setViewControllers = function(a) {
this.setViewControllersAnimated(a, false)
};
ADNavigationController.prototype.setViewControllersAnimated = function(c, f) {
if (this.busy || c.length == 0) {
return
}
ADTransaction.begin();
this.loadView();
var d = this.topViewController;
var h = c[c.length - 1];
var b = (this._viewControllers.indexOf(h) != -1);
if (d !== null) {
d.viewWillDisappear(f)
}
h.viewWillAppear(f);
for (var g = 0; g < this._viewControllers.length; g++) {
this._viewControllers[g].parentViewController = null
}
for (var g = 0; g < c.length; g++) {
c[g].parentViewController = this
}
h.view.size = this.hostView.size.copy();
h.view.autoresizingMask = ADViewAutoresizingFlexibleWidth | ADViewAutoresizingFlexibleHeight;
this.hostView.addSubview(h.view);
if (d === null) {
if (ADUtils.objectHasMethod(this.delegate, ADNavigationControllerWillShowViewController)) {
this.delegate[ADNavigationControllerWillShowViewController](this, h, f)
}
h.viewDidAppear()
} else {
if (d !== h) {
if (ADUtils.objectHasMethod(this.delegate, ADNavigationControllerWillShowViewController)) {
this.delegate[ADNavigationControllerWillShowViewController](this, h, f)
}
this.transitionToController(h, d, !b, f)
}
}
this._viewControllers = c;
var a = [];
for (var g = 0; g < c.length; g++) {
a.push(c[g].navigationItem)
}
this.navigationBar.setItemsAnimated(a, f);
var e = h.toolbarItems;
if (e !== null) {
this.toolbar.setItemsAnimated(e, f)
}
ADTransaction.commit()
};
ADNavigationController.prototype.pushViewControllerAnimated = function(a, b) {
this.setViewControllersAnimated(this._viewControllers.concat([a]), b)
};
ADNavigationController.prototype.popViewControllerAnimated = function(b) {
if (this._viewControllers.length > 1) {
var a = this.topViewController;
this.setViewControllersAnimated(this._viewControllers.slice(0, this._viewControllers.length - 1), b);
return a
}
return null
};
ADNavigationController.prototype.popToRootViewControllerAnimated = function(a) {
return this.popToViewControllerAnimated(this._viewControllers[0], a)
};
ADNavigationController.prototype.popToViewControllerAnimated = function(a, c) {
var b = this._viewControllers.indexOf(a);
if (b < 0 || b >= this._viewControllers.length - 1) {
return []
}
var d = this._viewControllers.slice(b + 1);
this.setViewControllersAnimated(this._viewControllers.slice(0, b + 1), c);
return d
};
ADNavigationController.prototype.transitionToController = function(b, c, a, d) {
this.busy = d;
this.previousController = c;
ADTransaction.defaults.duration = d ? ADNavigationBarAnimationDuration: 0;
if (c !== null) {
c.view.applyTransition(a ? c.becomesBackItemTransition: c.wasTopItemTransition, false)
}
b.view.applyTransition(a ? b.becomesTopItemTransition: b.wasBackItemTransition, false)
};
ADNavigationController.prototype.transitionsEnded = function() {
var a = this.busy;
if (this.previousController !== null) {
this.previousController.view.removeFromSuperview();
this.previousController.viewDidDisappear(a)
}
this.topViewController.viewDidAppear(a);
this.busy = false;
if (ADUtils.objectHasMethod(this.delegate, ADNavigationControllerDidShowViewController)) {
this.delegate[ADNavigationControllerDidShowViewController](this, this.topViewController, a)
}
};
ADNavigationController.prototype.setNavigationBarHidden = function(a) {
this.setNavigationBarHiddenAnimated(a, false)
};
ADNavigationController.prototype.setNavigationBarHiddenAnimated = function(b, a) {
if (this._navigationBarHidden == b) {
return
}
this._navigationBarHidden = b;
if (!this.isViewLoaded()) {
return
}
ADTransaction.begin();
ADTransaction.defaults.duration = a ? ADNavigationControllerHideShowBarDuration: 0;
ADTransaction.defaults.properties = ["position"];
new ADTransition({
target: this.navigationBar,
to: [new ADPoint(0, b ? -ADNavigationBarHeight: 0)]
}).start();
new ADTransition({
target: this.hostView,
to: [new ADPoint(0, b ? 0: ADNavigationBarHeight)],
delegate: this
}).start();
ADTransaction.commit();
if (!a || b) {
this.updateHostViewSize()
} else {
this.requiresDeferredHostViewSizeUpdate = true
}
};
ADNavigationController.prototype.transitionDidComplete = function(a) {
if (this.requiresDeferredHostViewSizeUpdate) {
this.requiresDeferredHostViewSizeUpdate = false;
this.updateHostViewSize()
}
};
ADNavigationController.prototype.setToolbarHidden = function(a) {
this.setToolbarHiddenAnimated(a, false)
};
ADNavigationController.prototype.setToolbarHiddenAnimated = function(b, a) {
if (this._toolbarHidden == b) {
return
}
this._toolbarHidden = b;
if (!this.isViewLoaded()) {
return
}
new ADTransition({
target: this.toolbar,
properties: ["position"],
to: [new ADPoint(0, this._view.size.height - (b ? 0: ADNavigationBarHeight))],
duration: a ? ADNavigationControllerHideShowBarDuration: 0,
delegate: this
}).start();
if (!a || b) {
this.updateHostViewSize()
} else {
this.requiresDeferredHostViewSizeUpdate = true
}
};
ADClass(ADNavigationController);
ADNavigationView.inherits = ADView;
function ADNavigationView(a) {
this.callSuper();
this.viewController = a
}
ADNavigationView.prototype.didMoveToSuperview = function(a) {
this.callSuper(a);
if (a !== null) {
this.viewController.viewMovedToNewSuperview()
}
};
ADClass(ADNavigationView);
const ADTabBarControllerShouldSelectViewController = "tabBarControllerShouldSelectViewController";
const ADTabBarControllerDidSelectViewController = "tabBarControllerDidSelectViewController";
const ADTabBarControllerMaxItems = 5;
ADTabBarController.inherits = ADViewController;
ADTabBarController.synthetizes = ["viewControllers", "selectedViewController", "selectedIndex"];
function ADTabBarController(a) {
this.callSuper(a);
this.delegate = null;
this.tabBar = new ADTabBar();
this._viewControllers = [];
this.customizableViewControllers = [];
this.moreNavigationController = null;
this.tabBar.delegate = this
}
ADTabBarController.prototype.loadView = function() {
if (this.isViewLoaded()) {
return
}
this._view = new ADView(this);
this._view.layer.addClassName("ad-tab-bar-controller-view");
this._view.size = new ADSize(window.innerWidth, window.innerHeight);
this._view.autoresizingMask = ADViewAutoresizingFlexibleWidth | ADViewAutoresizingFlexibleHeight;
this.hostView = this._view.addSubview(new ADView());
this.hostView.layer.addClassName("ad-tab-bar-controller-host-view");
this.hostView.size = new ADSize(this._view.size.width, this._view.size.height - ADTabBarHeight);
this.hostView.autoresizingMask = ADViewAutoresizingFlexibleWidth | ADViewAutoresizingFlexibleHeight;
this._view.addSubview(this.tabBar);
this.tabBar.autoresizingMask = ADViewAutoresizingFlexibleWidth | ADViewAutoresizingFlexibleTopMargin
};
ADTabBarController.prototype.tabBarDidSelectItem = function(d, a) {
while (this.hostView.subviews.length) {
this.hostView.subviews[0].removeFromSuperview()
}
var b = this.selectedViewController;
var c = b.view;
b.viewWillAppear(false);
c.size = this.hostView.size.copy();
c.autoresizingMask = ADViewAutoresizingFlexibleWidth | ADViewAutoresizingFlexibleHeight;
this.hostView.addSubview(c);
if (ADUtils.objectHasMethod(this.delegate, ADTabBarControllerDidSelectViewController)) {
this.delegate[ADTabBarControllerDidSelectViewController](this, b)
}
b.viewDidAppear(false)
};
ADTabBarController.prototype.setViewControllers = function(a) {
this.setViewControllersAnimated(a, false)
};
ADTabBarController.prototype.setViewControllersAnimated = function(b, c) {
if (b.length > ADTabBarControllerMaxItems) {}
this._viewControllers = b;
var a = [];
for (var d = 0; d < b.length; d++) {
a.push(b[d].tabBarItem)
}
this.tabBar.setItemsAnimated(a, c)
};
ADTabBarController.prototype.getSelectedViewController = function() {
var b = null;
var a = this.selectedIndex;
if (a >= 0 && a < this._viewControllers.length) {
b = this._viewControllers[a]
}
return b
};
ADTabBarController.prototype.setSelectedViewController = function(a) {
if (this._viewControllers.indexOf(a) != -1) {
this.tabBar.selectedItem = a.tabBarItem
}
};
ADTabBarController.prototype.getSelectedIndex = function() {
return this.tabBar.items.indexOf(this.tabBar.selectedItem)
};
ADTabBarController.prototype.setSelectedIndex = function(a) {
if (a >= 0 && a < this._viewControllers.length) {
this.tabBar.selectedItem = this._viewControllers[a]
}
};
ADClass(ADTabBarController);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment