Skip to content

Instantly share code, notes, and snippets.

@whalesalad
Created December 16, 2009 01:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save whalesalad/257514 to your computer and use it in GitHub Desktop.
Save whalesalad/257514 to your computer and use it in GitHub Desktop.
const PKSupportsTouches = ("createTouch" in document);
const PKStartEvent = PKSupportsTouches ? "touchstart": "mousedown";
const PKMoveEvent = PKSupportsTouches ? "touchmove": "mousemove";
const PKEndEvent = PKSupportsTouches ? "touchend": "mouseup";
function PKUtils() {}
PKUtils.assetsPath = "";
PKUtils.t = function(b, a) {
return "translate3d(" + b + "px, " + a + "px, 0)"
};
PKUtils.px = function(a) {
return a + "px"
};
PKUtils.degreesToRadians = function(a) {
return (a / 360) * (Math.PI * 2)
};
PKUtils.radiansToDegrees = function(a) {
return (a / (Math.PI * 2)) * 360
};
PKUtils.copyPropertiesFromSourceToTarget = function(c, b) {
for (var a in c) {
b[a] = c[a]
}
};
PKUtils.objectIsFunction = function(a) {
return (typeof a == "function")
};
PKUtils.objectIsUndefined = function(a) {
return (a === undefined)
};
PKUtils.objectIsString = function(a) {
return (typeof a == "string" || a instanceof String)
};
PKUtils.objectIsArray = function(a) {
return (a instanceof Array)
};
PKUtils.objectHasMethod = function(b, a) {
return (b !== null && !this.objectIsUndefined(b[a]) && this.objectIsFunction(b[a]))
};
PKUtils.disableScrolling = function(a) {
a.stopPropagation();
window.addEventListener("touchmove", PKUtils.preventEventDefault, true);
window.addEventListener("touchend", PKUtils.restoreScrollingBehavior, true);
window.addEventListener("touchcancel", PKUtils.restoreScrollingBehavior, true)
};
PKUtils.preventEventDefault = function(a) {
a.preventDefault()
};
PKUtils.restoreScrolling = function() {
window.removeEventListener("touchmove", PKUtils.preventEventDefault, true);
window.removeEventListener("touchend", PKUtils.restoreScrollingBehavior, true);
window.removeEventListener("touchcancel", PKUtils.restoreScrollingBehavior, true)
};
PKUtils.createUIEvent = function(a, b) {
return PKSupportsTouches ? this.createEventWithTouch(a, b) : this.createEventWithMouse(a, b)
};
PKUtils.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
};
PKUtils.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
};
PKUtils.init = function() {
for (var b = 0; b < document.styleSheets.length; b++) {
var c = document.styleSheets[b];
var a = c.href ? c.href.indexOf("dist/PastryKit") : -1;
if (a != -1) {
PKUtils.assetsPath = c.href.substring(0, a) + "assets/";
break
}
}
};
PKUtils.preloadImageAsset = function(a) {
new Image().src = PKUtils.assetsPath + a
};
PKUtils.setupDisplayNames = function(a, d) {
var c = d || a.name;
for (var e in a) {
if (a.__lookupGetter__(e)) {
continue
}
var b = a[e];
if (PKUtils.objectIsFunction(b)) {
b.displayName = PKUtils.createDisplayName(c, e)
}
}
for (var e in a.prototype) {
if (a.prototype.__lookupGetter__(e)) {
continue
}
var b = a.prototype[e];
if (PKUtils.objectIsFunction(b)) {
b.displayName = PKUtils.createDisplayName(c, e)
}
}
};
PKUtils.createDisplayName = function(b, a) {
return b + "." + a + "()"
};
window.addEventListener("load", PKUtils.init, false);
PKUtils.setupDisplayNames(PKUtils, "PKUtils");
var PKEventTriage = {};
PKEventTriage.handleEvent = function(b) {
if (this instanceof PKObject) {
this.callSuper(b)
}
var c = b.type;
var a = "handle" + c.charAt(0).toUpperCase() + c.substr(1);
if (PKUtils.objectHasMethod(this, a)) {
this[a](b)
}
};
PKUtils.setupDisplayNames(PKEventTriage, "PKEventTriage");
var PKPropertyTriage = {};
PKPropertyTriage.handlePropertyChange = function(b, c) {
var a = "handle" + c.charAt(0).toUpperCase() + c.substr(1) + "Change";
if (PKUtils.objectHasMethod(this, a)) {
this[a](b)
}
};
PKUtils.setupDisplayNames(PKPropertyTriage, "PKPropertyTriage");
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)
};
PKUtils.setupDisplayNames(Element, "Element");
Node.prototype.getNearestView = function() {
var a = this;
while (PKUtils.objectIsUndefined(a._view) && a.parentNode) {
a = a.parentNode
}
return (PKUtils.objectIsUndefined(a._view)) ? null: a._view
};
PKUtils.setupDisplayNames(Node, "Node");
function PKClass(b) {
if (PKUtils.objectIsUndefined(b.inherits) && b !== PKObject) {
b.inherits = PKObject
}
if (b.includes) {
PKClass.mixin(b.prototype, b.includes)
}
var e = (b.synthetizes) ? b.synthetizes: [];
for (var a = 0; a < e.length; a++) {
PKClass.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++) {
PKClass.synthetizeProperty(b.prototype, e[a], false)
}
for (var a in b.prototype) {
if (b.prototype.__lookupGetter__(a)) {
continue
}
var c = b.prototype[a];
if (PKUtils.objectIsFunction(c)) {
c._class = b;
c._name = a;
c.displayName = PKUtils.createDisplayName(b.name, a)
}
}
if (b !== PKObject) {
b.prototype.__proto__ = b.inherits.prototype
}
}
PKClass.synthetizeProperty = function(j, f, e) {
var h = f.charAt(0).toUpperCase() + f.substr(1);
var g = "get" + h;
var i = "set" + h;
var b = PKUtils.objectHasMethod(j, g);
var d = PKUtils.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)
}
};
PKClass.mixin = function(b, a) {
for (var c = 0; c < a.length; c++) {
PKUtils.copyPropertiesFromSourceToTarget(a[c], b)
}
};
PKUtils.setupDisplayNames(PKClass, "PKClass");
const PKObjectPropertyChanged = "handlePropertyChange";
function PKObject() {
this.observedProperties = {}
}
PKObject.prototype.callSuper = function() {
var a = PKObject.prototype.callSuper.caller;
if (PKUtils.objectHasMethod(a, "inherits")) {
a.inherits.apply(this, arguments)
} else {
var b = a._class.inherits.prototype;
var c = a._name;
if (PKUtils.objectHasMethod(b, c)) {
return b[c].apply(this, arguments)
}
}
};
PKObject.prototype.isPropertyObserved = function(a) {
return ! PKUtils.objectIsUndefined(this.observedProperties[a])
};
PKObject.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 || PKObjectPropertyChanged;
if (PKUtils.objectHasMethod(c, a)) {
this.observedProperties[b].push({
observer: c,
methodName: a
})
}
};
PKObject.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)
};
PKObject.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)
}
};
PKObject.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 = PKUtils.createDisplayName(this.constructor.name, a);
return setTimeout(e, c)
};
PKClass(PKObject, "PKObject");
function PKPoint(a, b) {
this.x = (a != null && !isNaN(a)) ? a: 0;
this.y = (b != null && !isNaN(b)) ? b: 0
}
PKPoint.fromEvent = function(a) {
var a = (a.touches && a.touches.length > 0) ? a.touches[0] : a;
return new PKPoint(a.pageX, a.pageY)
};
PKPoint.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))
};
PKPoint.prototype.toString = function() {
return "PKPoint[" + this.x + "," + this.y + "]"
};
PKPoint.prototype.copy = function() {
return new PKPoint(this.x, this.y)
};
PKPoint.prototype.equals = function(a) {
return (this.x == a.x && this.y == a.y)
};
PKUtils.setupDisplayNames(PKPoint, "PKPoint");
function PKSize(b, a) {
this.width = (b != null && !isNaN(b)) ? b: 0;
this.height = (a != null && !isNaN(a)) ? a: 0
}
PKSize.prototype.toString = function() {
return "PKSize[" + this.width + "," + this.height + "]"
};
PKSize.prototype.copy = function() {
return new PKSize(this.width, this.height)
};
PKSize.prototype.equals = function(a) {
return (this.width == a.width && this.height == a.height)
};
PKUtils.setupDisplayNames(PKSize);
PKImage.inherits = PKObject;
PKImage.synthetizes = ["width", "height"];
function PKImage(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
}
PKImage.prototype.getWidth = function() {
return this.element.width
};
PKImage.prototype.getHeight = function() {
return this.element.height
};
PKImage.prototype.handleEvent = function(a) {
this.loaded = true;
this.notifyPropertyChange("loaded")
};
PKClass(PKImage);
const PKAnimatorLinearType = 0;
const PKAnimatorSplinesType = 1;
const PKAnimatorInvalidArgsException = 2;
const PKAnimatorAnimationDidIterate = "animationDidIterate";
const PKAnimatorAnimationDidEnd = "animationDidEnd";
function PKAnimator(c, a, b) {
if (arguments.length != 2 && arguments.length != 3 && arguments.length != 7) {
throw PKAnimatorInvalidArgsException;
return false
}
this.ready = false;
this.animating = false;
this.timer = null;
this.duration = c;
this.delegate = a;
if (!PKUtils.objectHasMethod(this.delegate, PKAnimatorAnimationDidIterate)) {
return
}
if (arguments.length >= 2) {
this.type = PKAnimatorSplinesType;
this.x1 = b[0];
this.y1 = b[1];
this.x2 = b[2];
this.y2 = b[3];
this.init()
} else {
this.type = PKAnimatorLinearType
}
this.ready = true
}
PKAnimator.prototype.init = function() {
this.cx = 3 * this.x1;
this.bx = 3 * (this.x2 - this.x1) - this.cx;
this.ax = 1 - this.cx - this.bx;
this.cy = 3 * this.y1;
this.by = 3 * (this.y2 - this.y1) - this.cy;
this.ay = 1 - this.cy - this.by;
var c = (this.duration / 1000) * 240;
this.curve = new Array(c);
var b = 1 / (c - 1);
for (var d = 0; d < c; d++) {
var a = d * b;
this.curve[d] = {
x: (this.ax * Math.pow(a, 3)) + (this.bx * Math.pow(a, 2)) + (this.cx * a),
y: (this.ay * Math.pow(a, 3)) + (this.by * Math.pow(a, 2)) + (this.cy * a)
}
}
};
PKAnimator.prototype.start = function() {
if (!this.ready) {
var a = this;
this.timer = setTimeout(function() {
a.start()
},
0);
return
}
this.animating = true;
this.lastIndex = 0;
this.startTime = (new Date()).getTime();
this.iterate()
};
PKAnimator.prototype.stop = function() {
this.animating = false;
clearTimeout(this.timer)
};
PKAnimator.prototype.iterate = function() {
var f = (new Date()).getTime() - this.startTime;
if (f < this.duration) {
var g = f / this.duration;
if (this.type == PKAnimatorSplinesType) {
var b = 0;
for (var e = this.lastIndex; e < this.curve.length; e++) {
var a = this.curve[e];
if (a.x >= g && e > 0) {
var d = this.curve[e - 1];
if ((g - d.x) < (a.x - g)) {
this.lastIndex = e - 1;
b = d.y
} else {
this.lastIndex = e;
b = a.y
}
break
}
}
}
this.delegate[PKAnimatorAnimationDidIterate]((this.type == PKAnimatorSplinesType) ? b: g);
var c = this;
this.timer = setTimeout(function() {
c.iterate()
},
0)
} else {
this.delegate[PKAnimatorAnimationDidIterate](1);
if (PKUtils.objectHasMethod(this.delegate, PKAnimatorAnimationDidEnd)) {
this.delegate[PKAnimatorAnimationDidEnd]()
}
this.animating = false
}
};
PKClass(PKAnimator);
const PKTransitionDidCompleteDelegate = "transitionDidComplete";
const PKTransitionDefaults = {
duration: 0.5,
delay: 0,
removesTargetUponCompletion: false,
revertsToOriginalValues: false
};
const PKTransitionStyles = ["-webkit-transition-property", "-webkit-transition-duration", "-webkit-transition-timing-function", "-webkit-transition-delay", "-webkit-transition"];
function PKTransition(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 = [];
PKUtils.copyPropertiesFromSourceToTarget(a, this)
}
PKTransition.prototype.applyDefaults = function() {
if (this.defaultsApplied) {
return
}
for (var a in PKTransitionDefaults) {
if (this[a] === null) {
this[a] = PKTransitionDefaults[a]
}
}
this.defaultsApplied = true
};
PKTransition.prototype.archiveTransitionStyles = function() {
if (this.archivedStyles !== null) {
return
}
var b = (this.target instanceof PKView) ? this.target.layer: this.target;
this.archivedStyles = [];
for (var a = 0; a < PKTransitionStyles.length; a++) {
this.archivedStyles.push(b.style.getPropertyValue(PKTransitionStyles[a]))
}
};
PKTransition.prototype.restoreTransitionStyles = function() {
for (var a = 0; a < PKTransitionStyles.length; a++) {
this.element.style.setProperty(PKTransitionStyles[a], this.archivedStyles[a], "")
}
this.archivedStyles = null
};
PKTransition.prototype.archiveBaseValues = function() {
if (!this.revertsToOriginalValues) {
return
}
if (this.target instanceof PKView) {
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]))
}
}
};
PKTransition.prototype.restoreBaseValues = function() {
if (this.target instanceof PKView) {
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)
}
}
};
PKTransition.prototype.start = function() {
if (PKTransaction.openTransactions > 0) {
PKTransaction.addTransition(this);
return
}
this.applyDefaults();
if (this.from === null) {
this.applyToState()
} else {
this.applyFromState();
var a = this;
setTimeout(function() {
a.applyToState()
},
0)
}
};
PKTransition.prototype.applyFromState = function() {
if (this.from === null) {
return
}
this.applyDefaults();
this.archiveTransitionStyles();
if (this.target instanceof PKView) {
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], "")
}
}
};
PKTransition.prototype.applyToState = function() {
this.applyDefaults();
this.archiveTransitionStyles();
this.archiveBaseValues();
var e = (this.target instanceof PKView);
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 = (PKUtils.objectIsArray(this.duration)) ? this.duration[g] : this.duration;
var f = (PKUtils.objectIsArray(this.timingFunction)) ? this.timingFunction[g] : this.timingFunction;
var a = (PKUtils.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
};
PKTransition.prototype.handleEvent = function(a) {
if (a.currentTarget !== this.element) {
return
}
this.completedTransitions++;
if (this.completedTransitions != this.cssProperties.length) {
return
}
if (PKUtils.objectHasMethod(this.delegate, PKTransitionDidCompleteDelegate)) {
this.delegate[PKTransitionDidCompleteDelegate](this)
}
if (this.removesTargetUponCompletion) {
var b = this.target;
if (this.target instanceof PKView) {
b.removeFromSuperview()
} else {
b.parentNode.removeChild(b)
}
} else {
this.restoreTransitionStyles()
}
if (this.revertsToOriginalValues) {
this.restoreBaseValues()
}
};
const PKTransitionWidthRegExp = new RegExp(/\$width/g);
const PKTransitionHeightRegExp = new RegExp(/\$height/g);
PKTransition.prototype.processTransitionValue = function(a) {
if (!PKUtils.objectIsString(a)) {
return a
}
a = a.replace(PKTransitionWidthRegExp, PKUtils.px(this.target.size.width));
return a.replace(PKTransitionHeightRegExp, PKUtils.px(this.target.size.height))
};
PKClass(PKTransition);
var PKTransaction = {
transitions: [],
openTransactions: 0,
defaults: {},
defaultsStates: []
};
PKTransaction.begin = function() {
if (this.openTransactions == 0) {
this.transitions = [];
this.defaults = {}
} else {
this.defaultsStates.push(this.defaults)
}
this.openTransactions++
};
PKTransaction.addTransition = function(b) {
for (var a in this.defaults) {
if (b[a] === null) {
b[a] = this.defaults[a]
}
}
this.transitions.push(b)
};
PKTransaction.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)
};
PKUtils.setupDisplayNames(PKTransaction, "PKTransaction");
const PKViewTransitionDissolveOut = {
properties: ["opacity"],
from: [1],
to: [0]
};
const PKViewTransitionDissolveIn = {
properties: ["opacity"],
from: [0],
to: [1]
};
const PKViewTransitionZoomIn = {
properties: ["opacity", "transform"],
from: [0, "scale(0.2)"],
to: [1, "scale(1)"]
};
const PKViewTransitionZoomOut = {
properties: ["opacity", "transform"],
from: [0, "scale(1.2)"],
to: [1, "scale(1)"]
};
const PKViewTransitionCrossSpinRight = {
properties: ["opacity", "transform"],
from: [0, "rotate(20deg)"],
to: [1, "rotate(0)"]
};
const PKViewTransitionCrossSpinLeft = {
properties: ["opacity", "transform"],
from: [0, "rotate(-20deg)"],
to: [1, "rotate(0)"]
};
const PKViewTransitionFlipLeftOut = {
properties: ["transform"],
from: ["perspective(800) rotateY(0deg)"],
to: ["perspective(800) rotateY(-180deg)"]
};
const PKViewTransitionFlipLeftIn = {
properties: ["transform"],
from: ["perspective(800) rotateY(180deg)"],
to: ["perspective(800) rotateY(0deg)"]
};
const PKViewTransitionFlipRightOut = {
properties: ["transform"],
from: ["perspective(800) rotateY(0deg)"],
to: ["perspective(800) rotateY(180deg)"]
};
const PKViewTransitionFlipRightIn = {
properties: ["transform"],
from: ["perspective(800) rotateY(-180deg)"],
to: ["perspective(800) rotateY(0deg)"]
};
const PKViewTransitionCubeLeftOut = {
base: ["anchorPoint", new PKPoint(1, 0.5)],
properties: ["transform"],
from: ["perspective(800) rotateY(0deg) translateZ(0)"],
to: ["perspective(800) rotateY(-90deg) translateZ($width)"]
};
const PKViewTransitionCubeLeftIn = {
base: ["anchorPoint", new PKPoint(0, 0.5)],
properties: ["transform"],
from: ["perspective(800) rotateY(90deg) translateZ($width)"],
to: ["perspective(800) rotateY(0deg) translateZ(0)"]
};
const PKViewTransitionCubeRightOut = {
base: ["anchorPoint", new PKPoint(0, 0.5)],
properties: ["transform"],
from: ["perspective(800) rotateY(0deg) translateZ(0)"],
to: ["perspective(800) rotateY(90deg) translateZ($width)"]
};
const PKViewTransitionCubeRightIn = {
base: ["anchorPoint", new PKPoint(1, 0.5)],
properties: ["transform"],
from: ["perspective(800) rotateY(-90deg) translateZ($width)"],
to: ["perspective(800) rotateY(0deg) translateZ(0)"]
};
const PKViewTransitionDoorOpenLeftOut = {
base: ["anchorPoint", new PKPoint(0, 0.5), "zIndex", 1],
properties: ["transform"],
from: ["perspective(800) rotateY(0deg)"],
to: ["perspective(800) rotateY(-90deg)"]
};
const PKViewTransitionDoorCloseLeftIn = {
base: ["anchorPoint", new PKPoint(0, 0.5), "zIndex", 2],
properties: ["transform"],
from: ["perspective(800) rotateY(-90deg)"],
to: ["perspective(800) rotateY(0deg)"]
};
const PKViewTransitionDoorOpenRightOut = {
base: ["anchorPoint", new PKPoint(1, 0.5), "zIndex", 1],
properties: ["transform"],
from: ["perspective(800) rotateY(0deg)"],
to: ["perspective(800) rotateY(90deg)"]
};
const PKViewTransitionDoorCloseRightIn = {
base: ["anchorPoint", new PKPoint(1, 0.5), "zIndex", 2],
properties: ["transform"],
from: ["perspective(800) rotateY(90deg)"],
to: ["perspective(800) rotateY(0deg)"]
};
const PKViewTransitionRevolveTowardsLeftOut = {
base: ["anchorPoint", new PKPoint(0, 0.5)],
properties: ["transform", "opacity"],
from: ["perspective(800) rotateY(0deg)", 1],
to: ["perspective(800) rotateY(-90deg)", 0]
};
const PKViewTransitionRevolveTowardsLeftIn = {
base: ["anchorPoint", new PKPoint(0, 0.5)],
properties: ["transform"],
from: ["perspective(800) rotateY(90deg)"],
to: ["perspective(800) rotateY(0deg)"]
};
const PKViewTransitionRevolveAwayLeftOut = {
base: ["anchorPoint", new PKPoint(0, 0.5)],
properties: ["transform"],
from: ["perspective(800) rotateY(0deg)"],
to: ["perspective(800) rotateY(90deg)"]
};
const PKViewTransitionRevolveAwayLeftIn = {
base: ["anchorPoint", new PKPoint(0, 0.5)],
properties: ["transform", "opacity"],
from: ["perspective(800) rotateY(-90deg)", 0],
to: ["perspective(800) rotateY(0deg)", 1]
};
const PKViewTransitionRevolveTowardsRightOut = {
base: ["anchorPoint", new PKPoint(1, 0.5)],
properties: ["transform", "opacity"],
from: ["perspective(800) rotateY(0deg)", 1],
to: ["perspective(800) rotateY(90deg)", 0]
};
const PKViewTransitionRevolveTowardsRightIn = {
base: ["anchorPoint", new PKPoint(1, 0.5)],
properties: ["transform"],
from: ["perspective(800) rotateY(-90deg)"],
to: ["perspective(800) rotateY(0deg)"]
};
const PKViewTransitionRevolveAwayRightOut = {
base: ["anchorPoint", new PKPoint(1, 0.5)],
properties: ["transform"],
from: ["perspective(800) rotateY(0deg)"],
to: ["perspective(800) rotateY(-90deg)"]
};
const PKViewTransitionRevolveAwayRightIn = {
base: ["anchorPoint", new PKPoint(1, 0.5)],
properties: ["transform", "opacity"],
from: ["perspective(800) rotateY(90deg)", 0],
to: ["perspective(800) rotateY(0deg)", 1]
};
const PKViewTransitionSpinOut = {
properties: ["transform", "opacity"],
from: ["perspective(800) rotate(0)", 1],
to: ["perspective(800) rotate(-180deg)", 0]
};
const PKViewTransitionSpinIn = {
base: ["zIndex", 1],
properties: ["transform", "opacity"],
from: ["perspective(800) rotate(-180deg)", 0],
to: ["perspective(800) rotate(0)", 1]
};
const PKViewTransitionScaleIn = {
base: ["zIndex", 1],
properties: ["transform"],
from: ["scale(0.01)"],
to: ["scale(1)"]
};
const PKViewTransitionScaleOut = {
base: ["zIndex", 1],
properties: ["transform"],
from: ["scale(1)"],
to: ["scale(0.01)"]
};
PKView.inherits = PKObject;
PKView.synthetizes = ["id", "position", "size", "transform", "anchorPoint", "doubleSided", "zIndex", "opacity", "clipsToBounds", "transitionsEnabled", "transitionsDuration", "hostingLayer"];
function PKView() {
this.callSuper();
this.superview = null;
this.subviews = [];
this.tracksTouchesOnceTouchesBegan = false;
this.userInteractionEnabled = true;
this.autoresizesSubviews = true;
this.autoresizingMask = PKViewAutoresizingNone;
this._position = new PKPoint();
this._size = new PKSize();
this._anchorPoint = new PKPoint(0.5, 0.5);
this._doubleSided = true;
this._zIndex = 0;
this._transform = PKUtils.t(0, 0);
this._clipsToBounds = false;
this._transitionsEnabled = false;
this._transitionsDuration = 0.5;
this._hostingLayer = null;
if (PKUtils.objectIsUndefined(this.layer) || this.layer === null) {
this.createLayer()
}
this.layer.addEventListener(PKStartEvent, this, false);
this.layer._view = this
}
PKView.prototype.toString = function() {
return [this.constructor.name, "[", this._size.width, "x", this._size.height, "@", this._position.x, ",", this._position.y, "]"].join("")
};
PKView.prototype.getId = function() {
return this.layer.id
};
PKView.prototype.setId = function(a) {
this.layer.id = a
};
PKView.prototype.setPosition = function(a) {
if (this._position.equals(a)) {
return
}
this._position = a;
this.updateLayerTransform()
};
PKView.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)
}
};
PKView.prototype.setTransform = function(a) {
this._transform = a;
this.updateLayerTransform()
};
PKView.prototype.setAnchorPoint = function(a) {
this._anchorPoint = a;
this.layer.style.webkitTransformOrigin = Math.round(a.x * 100) + "% " + Math.round(a.y * 100) + "% 0"
};
PKView.prototype.setDoubleSided = function(a) {
this._doubleSided = a;
this.layer.style.webkitBackfaceVisibility = a ? "visible": "hidden"
};
PKView.prototype.setZIndex = function(a) {
this._zIndex = a;
this.layer.style.zIndex = a
};
PKView.prototype.updateLayerTransform = function() {
this.layer.style.webkitTransform = PKUtils.t(this._position.x, this._position.y) + this._transform
};
PKView.prototype.getOpacity = function() {
return Number(window.getComputedStyle(this.layer).opacity)
};
PKView.prototype.setOpacity = function(a) {
this.layer.style.opacity = a
};
PKView.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
};
PKView.prototype.setTransitionsDuration = function(a) {
this.layer.style.webkitTransitionDuration = a + "s";
this._transitionsDuration = a
};
PKView.prototype.setClipsToBounds = function(a) {
this._clipsToBounds = a;
this.layer.style.overflow = a ? "hidden": "visible"
};
PKView.prototype.getHostingLayer = function() {
return (this._hostingLayer != null) ? this._hostingLayer: this.layer
};
PKView.prototype.addSubview = function(a) {
return this.insertSubviewAtIndex(a, this.subviews.length)
};
PKView.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()
};
PKView.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
};
PKView.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
};
PKView.prototype.insertSubviewBeforeSubview = function(b, a) {
if (a.superview !== this) {
return
}
return this.insertSubviewAtIndex(b, a._indexInSuperviewSubviews)
};
PKView.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)
}
};
PKView.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
};
PKView.prototype.createLayer = function() {
this.layer = document.createElement("div");
this.layer.className = "pk-view"
};
PKView.prototype.willMoveToSuperview = function(a) {
this._wasDescendantOfRootView = this.isDescendantOfView(PKRootView.sharedRoot)
};
PKView.prototype.didMoveToSuperview = function() {
if (!this._wasDescendantOfRootView && this.isDescendantOfView(PKRootView.sharedRoot)) {
this.becameDescendantOfRootView();
this.notifySubviewsOfDescendencyOfRootView()
}
};
PKView.prototype.didAddSubview = function(a) {};
PKView.prototype.willRemoveSubview = function(a) {};
PKView.prototype.becameDescendantOfRootView = function() {};
PKView.prototype.notifySubviewsOfDescendencyOfRootView = function() {
for (var a = 0; a < this.subviews.length; a++) {
this.subviews[a].becameDescendantOfRootView();
this.subviews[a].notifySubviewsOfDescendencyOfRootView()
}
};
PKView.prototype.handleEvent = function(a) {
switch (a.type) {
case PKStartEvent:
this.touchesBegan(a);
break;
case PKMoveEvent:
this.touchesMoved(a);
break;
case PKEndEvent:
this.touchesEnded(a);
break;
case "touchcancel":
this.touchesCancelled(a);
break
}
};
PKView.prototype.touchesBegan = function(a) {
if (!this.userInteractionEnabled) {
return
}
if (this.tracksTouchesOnceTouchesBegan) {
window.addEventListener(PKMoveEvent, this, true);
window.addEventListener(PKEndEvent, this, true);
window.addEventListener("touchcancel", this, true)
}
};
PKView.prototype.touchesMoved = function(a) {
if (!this.userInteractionEnabled) {
return
}
a.preventDefault()
};
PKView.prototype.touchesEnded = function(a) {
if (!this.userInteractionEnabled) {
return
}
window.removeEventListener(PKMoveEvent, this, true);
window.removeEventListener(PKEndEvent, this, true);
window.removeEventListener("touchcancel", this, true)
};
PKView.prototype.touchesCancelled = function(a) {
if (!this.userInteractionEnabled) {
return
}
window.removeEventListener(PKMoveEvent, this, true);
window.removeEventListener(PKEndEvent, this, true);
window.removeEventListener("touchcancel", this, true)
};
PKView.prototype.pointInside = function(a) {
return (a.x >= 0 && a.x <= this.size.width && a.y >= 0 && a.y <= this.size.height)
};
const PKViewAutoresizingNone = 0;
const PKViewAutoresizingFlexibleLeftMargin = 1 << 0;
const PKViewAutoresizingFlexibleWidth = 1 << 1;
const PKViewAutoresizingFlexibleRightMargin = 1 << 2;
const PKViewAutoresizingFlexibleTopMargin = 1 << 3;
const PKViewAutoresizingFlexibleHeight = 1 << 4;
const PKViewAutoresizingFlexibleBottomMargin = 1 << 5;
PKView.prototype.resizeSubviewsWithOldSize = function(b) {
for (var a = 0; a < this.subviews.length; a++) {
this.subviews[a].resizeWithOldSuperviewSize(b)
}
};
PKView.prototype.resizeWithOldSuperviewSize = function(d) {
var a = this._position.copy();
var e = this._size.copy();
var g = this.autoresizingMask;
var f = (g & PKViewAutoresizingFlexibleLeftMargin) + (g & PKViewAutoresizingFlexibleWidth) + (g & PKViewAutoresizingFlexibleRightMargin);
switch (f) {
case PKViewAutoresizingNone:
break;
case PKViewAutoresizingFlexibleLeftMargin:
a.x += this.superview._size.width - d.width;
break;
case PKViewAutoresizingFlexibleWidth:
e.width = this.superview._size.width - (d.width - this._size.width);
break;
case PKViewAutoresizingFlexibleLeftMargin | PKViewAutoresizingFlexibleWidth: 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 PKViewAutoresizingFlexibleRightMargin:
break;
case PKViewAutoresizingFlexibleLeftMargin | PKViewAutoresizingFlexibleRightMargin: 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 PKViewAutoresizingFlexibleRightMargin | PKViewAutoresizingFlexibleWidth: 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 PKViewAutoresizingFlexibleLeftMargin | PKViewAutoresizingFlexibleWidth | PKViewAutoresizingFlexibleRightMargin: 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 & PKViewAutoresizingFlexibleTopMargin) + (g & PKViewAutoresizingFlexibleHeight) + (g & PKViewAutoresizingFlexibleBottomMargin);
switch (h) {
case PKViewAutoresizingNone:
break;
case PKViewAutoresizingFlexibleTopMargin:
a.y += this.superview._size.height - d.height;
break;
case PKViewAutoresizingFlexibleHeight:
e.height = this.superview._size.height - (d.height - this._size.height);
break;
case PKViewAutoresizingFlexibleTopMargin | PKViewAutoresizingFlexibleHeight: 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 PKViewAutoresizingFlexibleBottomMargin:
break;
case PKViewAutoresizingFlexibleTopMargin | PKViewAutoresizingFlexibleBottomMargin: 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 PKViewAutoresizingFlexibleBottomMargin | PKViewAutoresizingFlexibleHeight: 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 PKViewAutoresizingFlexibleTopMargin | PKViewAutoresizingFlexibleHeight | PKViewAutoresizingFlexibleBottomMargin: 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 PKViewPropertyMapping = {
opacity: "opacity",
transform: "-webkit-transform",
position: "-webkit-transform",
anchorPoint: "-webkit-transform-origin",
doubleSided: "-webkit-backface-visibility",
zIndex: "z-index"
};
PKView.prototype.cssPropertyNameForJSProperty = function(a) {
return PKViewPropertyMapping[a]
};
PKView.prototype.applyTransition = function(e, c) {
if (e === null) {
return
}
var d = new PKTransition(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()
};
PKView.getViewById = function(b) {
var a = document.getElementById(b);
return (a && !PKUtils.objectIsUndefined(a._view)) ? a._view: null
};
PKClass(PKView);
PKContentView.inherits = PKView;
function PKContentView(b) {
var a = b;
if (PKUtils.objectIsString(b)) {
a = document.querySelector(b)
}
this.layer = a;
this.callSuper();
this.layer.addClassName("pk-view");
if (a === document.body) {
this.size = new PKSize(window.innerWidth, window.innerHeight)
}
}
PKContentView.prototype.becameDescendantOfRootView = function() {
this.callSuper();
this.refreshSize()
};
PKContentView.prototype.refreshSize = function() {
var a = window.getComputedStyle(this.layer);
this._size = new PKSize(parseInt(a.width), parseInt(a.height))
};
PKClass(PKContentView);
PKRootView.inherits = PKContentView;
PKRootView.synthetizes = ["disablesDefaultScrolling"];
function PKRootView(a) {
this.callSuper(a);
this._disablesDefaultScrolling = true;
this.disablesDefaultScrolling = true;
if (this.layer === document.body) {
window.addEventListener("orientationchange", this, false);
this.layer.removeClassName("pk-view")
}
}
PKRootView.prototype.setDisablesDefaultScrolling = function(a) {
this.layer[a ? "addEventListener": "removeEventListener"](PKMoveEvent, PKUtils.preventEventDefault, false);
this._disablesDefaultScrolling = a
};
PKRootView.prototype.handleEvent = function(a) {
this.callSuper(a);
if (a.type == "orientationchange") {
var b = this;
setTimeout(function() {
b.size = new PKSize(window.innerWidth, window.innerHeight);
window.scrollTo(0, 0)
},
0)
}
};
PKRootView._sharedRoot = null;
PKRootView.__defineGetter__("sharedRoot",
function() {
if (PKRootView._sharedRoot === null) {
PKRootView._sharedRoot = new PKRootView(document.body)
}
return PKRootView._sharedRoot
});
PKRootView.__defineSetter__("sharedRoot",
function(a) {
PKRootView._sharedRoot = a
});
PKClass(PKRootView);
const PKScrollIndicatorThickness = 7;
const PKScrollIndicatorEndSize = 3;
const PKScrollIndicatorTypeHorizontal = "horizontal";
const PKScrollIndicatorTypeVertical = "vertical";
PKScrollIndicator.inherits = PKView;
PKScrollIndicator.synthetizes = ["visible", "width", "height", "style"];
function PKScrollIndicator(a) {
this.callSuper();
this.type = a;
this.layer.addClassName(a);
this._visible = false;
this._width = PKScrollIndicatorThickness;
this._height = PKScrollIndicatorThickness;
this.position = new PKPoint( - PKScrollIndicatorThickness, -PKScrollIndicatorThickness);
this.positionBeforeHide = this.position;
this.lastPositionUpdateInHide = false;
this._style = PKScrollViewIndicatorStyleDefault;
this.visible = false
}
PKScrollIndicator.prototype.createLayer = function() {
this.layer = document.createElement("div");
this.layer.addClassName("pk-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"))
};
PKScrollIndicator.prototype.setPosition = function(a) {
a.x = Math.round(a.x);
a.y = Math.round(a.y);
this.callSuper(a);
this.lastPositionUpdateInHide = false
};
PKScrollIndicator.prototype.setSize = function(a) {
this.width = a.width;
this.height = a.height;
this._size = a
};
PKScrollIndicator.prototype.setStyle = function(c) {
this._style = c;
this.layer.removeClassName(this._style);
this.layer.addClassName(this._style);
var a = (this.type === PKScrollIndicatorTypeHorizontal) ? "Horizontal": "Vertical";
var b = "Default";
switch (c) {
case PKScrollViewIndicatorStyleWhite:
b = "White";
break;
case PKScrollViewIndicatorStyleBlack:
b = "Black";
break
}
this.middle.src = PKUtils.assetsPath + "scrollindicator/UIScrollerIndicator" + b + a + "Middle.png"
};
PKScrollIndicator.prototype.setWidth = function(a) {
this.middle.style.webkitTransform = "translate3d(0,0,0) scale(" + (a - PKScrollIndicatorEndSize * 2) + ",1)";
this.end.style.webkitTransform = "translate3d(" + (a - PKScrollIndicatorEndSize) + "px,0,0)";
this._width = a
};
PKScrollIndicator.prototype.setHeight = function(a) {
this.middle.style.webkitTransform = "translate3d(0,0,0) scale(1," + (a - PKScrollIndicatorEndSize * 2) + ")";
this.end.style.webkitTransform = "translate3d(0," + (a - PKScrollIndicatorEndSize) + "px,0)";
this._height = a
};
PKScrollIndicator.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
};
PKScrollIndicator.prototype.flash = function() {
this.flashing = true
};
PKScrollIndicator.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 PKPoint( - PKScrollIndicatorThickness, -PKScrollIndicatorThickness);
this.fading = false
}
}
};
PKClass(PKScrollIndicator);
const PKScrollViewWillBeginDragging = "scrollViewWillBeginDragging";
const PKScrollViewDidEndScrollingAnimation = "scrollViewDidEndScrollingAnimation";
const PKScrollViewDidScroll = "scrollViewDidScroll";
const PKScrollViewDidEndDragging = "scrollViewDidEndDragging";
const PKScrollViewWillBeginDecelerating = "scrollViewWillBeginDecelerating";
const PKScrollViewDidEndDecelerating = "scrollViewDidEndDecelerating";
const PKScrollViewMinimumTrackingForDrag = 5;
const PKScrollViewPagingTransitionDuration = "0.25s";
const PKScrollViewMinIndicatorLength = 34;
const PKScrollViewAcceleration = 15;
const PKScrollViewMaxTrackingTime = 100;
const PKScrollViewDecelerationFrictionFactor = 0.95;
const PKScrollViewDesiredAnimationFrameRate = 1000 / 60;
const PKScrollViewMinimumVelocityToHideScrollIndicators = 0.05;
const PKScrollViewMinimumVelocity = 0.01;
const PKScrollViewPenetrationDeceleration = 0.03;
const PKScrollViewPenetrationAcceleration = 0.08;
const PKScrollViewMinVelocityForDeceleration = 1;
const PKScrollViewMinVelocityForDecelerationWithPaging = 4;
const PKScrollViewClickableElementNames = ["a", "button", "input", "select"];
const PKScrollViewContentTouchesDelay = 150;
const PKScrollViewAutomatedContentSize = -1;
const PKScrollViewIndicatorStyleDefault = "indicator-default";
const PKScrollViewIndicatorStyleBlack = "indicator-black";
const PKScrollViewIndicatorStyleWhite = "indicator-white";
PKScrollView.inherits = PKView;
PKScrollView.synthetizes = ["contentOffset", "contentSize", "indicatorStyle", "scrollEnabled"];
function PKScrollView() {
this.callSuper();
this._contentOffset = new PKPoint();
this._contentSize = PKScrollViewAutomatedContentSize;
this.adjustedContentSize = new PKSize();
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.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 = PKScrollViewIndicatorStyleDefault;
this.tracksTouchesOnceTouchesBegan = true;
this.layer.addEventListener(PKStartEvent, this, true);
this.delaysContentTouches = true;
this.canCancelContentTouches = true;
this._scrollEnabled = true
}
PKScrollView.prototype.createLayer = function() {
this.callSuper();
this.layer.addClassName("pk-scroll-view");
this.horizontalScrollIndicator = new PKScrollIndicator(PKScrollIndicatorTypeHorizontal);
this.verticalScrollIndicator = new PKScrollIndicator(PKScrollIndicatorTypeVertical);
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"
};
PKScrollView.prototype.setSize = function(a) {
this.callSuper(a);
this.adjustContentSize()
};
PKScrollView.prototype.setScrollEnabled = function(a) {
this._scrollEnabled = a;
if (!a) {
this.stopTrackingTouches()
}
};
PKScrollView.prototype.setContentOffset = function(a) {
this.setContentOffsetWithAnimation(a, false)
};
PKScrollView.prototype.setContentOffsetWithAnimation = function(b, a) {
this._contentOffset = b;
this.hostingLayer.style.webkitTransform = PKUtils.t(this._contentOffset.x, this._contentOffset.y);
if (a) {
this.scrollTransitionsNeedRemoval = true;
this.hostingLayer.style.webkitTransitionDuration = PKScrollViewPagingTransitionDuration
} else {
this.didScroll(false)
}
if (!a) {
if (this.horizontalScrollEnabled && this.showsHorizontalScrollIndicator) {
this.updateHorizontalScrollIndicator()
}
if (this.verticalScrollEnabled && this.showsVerticalScrollIndicator) {
this.updateVerticalScrollIndicator()
}
}
this.notifyPropertyChange("contentOffset")
};
PKScrollView.prototype.snapContentOffsetToBounds = function(a) {
var b = false;
var c = new PKPoint();
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.min(Math.max(this.minPoint.x, this._contentOffset.x), 0);
c.y = Math.min(Math.max(this.minPoint.y, this._contentOffset.y), 0);
b = (c.x != this._contentOffset.x || c.y != this._contentOffset.y)
}
}
if (b) {
this.setContentOffsetWithAnimation(c, a)
}
};
PKScrollView.prototype.getContentSize = function() {
var c = this._contentSize;
if (c === PKScrollViewAutomatedContentSize) {
c = new PKSize(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
};
PKScrollView.prototype.adjustContentSize = function() {
this.adjustedContentSize.width = Math.max(this.size.width, this.contentSize.width);
this.adjustedContentSize.height = Math.max(this.size.height, this.contentSize.height)
};
PKScrollView.prototype.setIndicatorStyle = function(a) {
this._indicatorStyle = a;
this.horizontalScrollIndicator.style = a;
this.verticalScrollIndicator.style = a
};
PKScrollView.prototype.updateHorizontalScrollIndicator = function() {
var c = (this.verticalScrollEnabled && this.showsVerticalScrollIndicator) ? PKScrollIndicatorEndSize * 2: 1;
var d = Math.max(PKScrollViewMinIndicatorLength, Math.round((this._size.width / this.adjustedContentSize.width) * (this._size.width - c)));
var a = ( - this._contentOffset.x / (this.adjustedContentSize.width - this._size.width)) * (this._size.width - c - d);
var b = this._size.height - PKScrollIndicatorThickness - 1;
if (this._contentOffset.x > 0) {
d = Math.round(Math.max(d - this._contentOffset.x, PKScrollIndicatorThickness));
a = 1
} else {
if (this._contentOffset.x < -(this.adjustedContentSize.width - this._size.width)) {
d = Math.round(Math.max(d + this.adjustedContentSize.width - this._size.width + this.contentOffset.x, PKScrollIndicatorThickness));
a = this._size.width - d - c
}
}
this.horizontalScrollIndicator.position = new PKPoint(a, b);
this.horizontalScrollIndicator.width = d
};
PKScrollView.prototype.updateVerticalScrollIndicator = function() {
var c = (this.horizontalScrollEnabled && this.showsHorizontalScrollIndicator) ? PKScrollIndicatorEndSize * 2: 1;
var d = Math.max(PKScrollViewMinIndicatorLength, Math.round((this._size.height / this.adjustedContentSize.height) * (this._size.height - c)));
var a = this._size.width - PKScrollIndicatorThickness - 1;
var b = ( - this._contentOffset.y / (this.adjustedContentSize.height - this._size.height)) * (this._size.height - c - d);
if (this._contentOffset.y > 0) {
d = Math.round(Math.max(d - this._contentOffset.y, PKScrollIndicatorThickness));
b = 1
} else {
if (this._contentOffset.y < -(this.adjustedContentSize.height - this._size.height)) {
d = Math.round(Math.max(d + this.adjustedContentSize.height - this._size.height + this.contentOffset.y, PKScrollIndicatorThickness));
b = this._size.height - d - c
}
}
this.verticalScrollIndicator.position = new PKPoint(a, b);
this.verticalScrollIndicator.height = d
};
PKScrollView.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()
}
};
PKScrollView.prototype.hideScrollIndicators = function() {
this.horizontalScrollIndicator.visible = false;
this.verticalScrollIndicator.visible = false
};
PKScrollView.prototype.handleEvent = function(a) {
this.callSuper(a);
if (a.type == "webkitTransitionEnd") {
this.transitionEnded(a)
}
};
PKScrollView.prototype.touchesBegan = function(a) {
if (!this._scrollEnabled) {
return
}
if (a.eventPhase == Event.CAPTURING_PHASE) {
if (a._manufactured) {
return
}
this.originalTarget = (PKSupportsTouches ? a.touches[0] : a).target;
if (this.delaysContentTouches) {
a.stopPropagation();
this.callMethodNameAfterDelay("beginTouchesInContent", PKScrollViewContentTouchesDelay, a);
this.beginTracking(a)
}
} else {
this.beginTracking(a)
}
};
PKScrollView.prototype.beginTouchesInContent = function(a) {
if (this.tracking && !this.dragging) {
var b = PKUtils.createUIEvent(PKStartEvent, a);
b._manufactured = true;
this.originalTarget.dispatchEvent(b);
if (!this.canCancelContentTouches) {
this.touchesEnded(PKUtils.createUIEvent(PKEndEvent, a))
}
}
};
PKScrollView.prototype.beginTracking = function(a) {
if (this.tracking) {
return
}
a.preventDefault();
this.stopDecelerationAnimation();
this.hostingLayer.style.webkitTransitionDuration = 0;
this.adjustContentSize();
this.minPoint = new PKPoint(this.size.width - this.adjustedContentSize.width, this.size.height - this.adjustedContentSize.height);
this.snapContentOffsetToBounds(false);
this.startPosition = this._contentOffset;
this.startTouchPosition = PKPoint.fromEvent(a);
this.startTime = a.timeStamp;
this.startTimePosition = this.contentOffset.copy();
this.tracking = true;
this.dragging = false;
this.touchesHaveMoved = false;
window.addEventListener(PKMoveEvent, this, true);
window.addEventListener(PKEndEvent, this, true);
window.addEventListener("touchcancel", this, true);
window.addEventListener(PKEndEvent, this, false)
};
PKScrollView.prototype.touchesMoved = function(d) {
this.touchesHaveMoved = true;
this.callSuper(d);
var e = PKPoint.fromEvent(d);
var b = e.x - this.startTouchPosition.x;
var c = e.y - this.startTouchPosition.y;
if (!this.dragging) {
if ((Math.abs(b) >= PKScrollViewMinimumTrackingForDrag && this.horizontalScrollEnabled) || (Math.abs(c) >= PKScrollViewMinimumTrackingForDrag && this.verticalScrollEnabled)) {
if (PKUtils.objectHasMethod(this.delegate, PKScrollViewWillBeginDragging)) {
this.delegate[PKScrollViewWillBeginDragging](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.startPosition.x + b) : this._contentOffset.x;
var a = this.verticalScrollEnabled ? (this.startPosition.y + c) : this._contentOffset.y;
if (this.bounces) {
f -= ((f < this.minPoint.x) ? (f - this.minPoint.x) : ((f > 0) ? f: 0)) / 2;
a -= ((a < this.minPoint.y) ? (a - this.minPoint.y) : ((a > 0) ? a: 0)) / 2
} else {
f = Math.min(Math.max(this.minPoint.x, f), 0);
a = Math.min(Math.max(this.minPoint.y, a), 0)
}
if (this.firstDrag) {
this.firstDrag = false;
this.startTouchPosition = e;
return
}
this.contentOffset = new PKPoint(f, a);
this.lastEventTime = d.timeStamp;
if (this.lastEventTime - this.scrollStartTime > PKScrollViewMaxTrackingTime) {
this.startTime = this.lastEventTime;
this.startTimePosition = this.contentOffset.copy()
}
}
};
PKScrollView.prototype.touchesEnded = function(a) {
this.callSuper(a);
this.tracking = false;
if (this.dragging) {
this.dragging = false;
a.stopPropagation();
if (a.timeStamp - this.lastEventTime <= PKScrollViewMaxTrackingTime) {
this._contentOffsetBeforeDeceleration = this._contentOffset.copy();
this.startDecelerationAnimation()
}
if (!this.decelerating) {}
window.removeEventListener(PKEndEvent, this, false);
if (PKUtils.objectHasMethod(this.delegate, PKScrollViewDidEndDragging)) {
this.delegate[PKScrollViewDidEndDragging](this)
}
}
if (!this.decelerating) {
this.snapContentOffsetToBounds(true);
this.hideScrollIndicators()
}
if (a.eventPhase == Event.BUBBLING_PHASE) {
window.removeEventListener(PKEndEvent, this, false);
if (!this.touchesHaveMoved && this.originalTarget !== null && a.type == PKEndEvent) {
this.activateOriginalTarget()
}
}
};
PKScrollView.prototype.touchesCancelled = function(a) {
this.callSuper(a);
this.touchesEnded(a)
};
PKScrollView.prototype.stopTrackingTouches = function() {
if (!this.tracking) {
return
}
this.tracking = false;
if (this.dragging) {
this.dragging = false;
this.snapContentOffsetToBounds(true);
if (PKUtils.objectHasMethod(this.delegate, PKScrollViewDidEndDragging)) {
this.delegate[PKScrollViewDidEndDragging](this)
}
this.hideScrollIndicators()
}
window.removeEventListener(PKMoveEvent, this, true);
window.removeEventListener(PKEndEvent, this, true);
window.removeEventListener(PKEndEvent, this, false);
window.removeEventListener("touchcancel", this, true)
};
PKScrollView.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)
}
};
PKScrollView.prototype.didScroll = function(a) {
if (a && PKUtils.objectHasMethod(this.delegate, PKScrollViewDidEndScrollingAnimation)) {
this.delegate[PKScrollViewDidEndScrollingAnimation](this)
}
if (PKUtils.objectHasMethod(this.delegate, PKScrollViewDidScroll)) {
this.delegate[PKScrollViewDidScroll](this)
}
};
PKScrollView.prototype.startDecelerationAnimation = function() {
var a = new PKPoint(this._contentOffset.x - this.startTimePosition.x, this._contentOffset.y - this.startTimePosition.y);
var b = (event.timeStamp - this.startTime) / PKScrollViewAcceleration;
this.decelerationVelocity = new PKPoint(a.x / b, a.y / b);
this.minDecelerationPoint = this.minPoint.copy();
this.maxDecelerationPoint = new PKPoint(0, 0);
if (this.pagingEnabled) {
this.minDecelerationPoint.x = Math.max(this.minPoint.x, Math.floor(this._contentOffsetBeforeDeceleration.x / this.size.width) * this.size.width);
this.minDecelerationPoint.y = Math.max(this.minPoint.y, Math.floor(this._contentOffsetBeforeDeceleration.y / this.size.height) * this.size.height);
this.maxDecelerationPoint.x = Math.min(0, Math.ceil(this._contentOffsetBeforeDeceleration.x / this.size.width) * this.size.width);
this.maxDecelerationPoint.y = Math.min(0, Math.ceil(this._contentOffsetBeforeDeceleration.y / this.size.height) * this.size.height)
}
this.penetrationDeceleration = PKScrollViewPenetrationDeceleration;
this.penetrationAcceleration = PKScrollViewPenetrationAcceleration;
if (this.pagingEnabled) {
this.penetrationDeceleration *= 5
}
var c = this.pagingEnabled ? PKScrollViewMinVelocityForDecelerationWithPaging: PKScrollViewMinVelocityForDeceleration;
if (Math.abs(this.decelerationVelocity.x) > c || Math.abs(this.decelerationVelocity.y) > c) {
this.decelerating = true;
this.decelerationTimer = this.callMethodNameAfterDelay("stepThroughDecelerationAnimation", PKScrollViewDesiredAnimationFrameRate);
this.lastFrame = new Date();
if (PKUtils.objectHasMethod(this.delegate, PKScrollViewWillBeginDecelerating)) {
this.delegate[PKScrollViewWillBeginDecelerating](this)
}
}
};
PKScrollView.prototype.stopDecelerationAnimation = function() {
this.decelerating = false;
clearTimeout(this.decelerationTimer)
};
PKScrollView.prototype.stepThroughDecelerationAnimation = function(f) {
if (!this.decelerating) {
return
}
var d = new Date();
var k = d - this.lastFrame;
var l = f ? 0: (Math.round(k / PKScrollViewDesiredAnimationFrameRate) - 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.min(Math.max(this.minPoint.x, g), 0);
if (a != g) {
g = a;
this.decelerationVelocity.x = 0
}
var c = Math.min(Math.max(this.minPoint.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 PKPoint(g, h)
}
if (!this.pagingEnabled) {
this.decelerationVelocity.x *= PKScrollViewDecelerationFrictionFactor;
this.decelerationVelocity.y *= PKScrollViewDecelerationFrictionFactor
}
var b = Math.abs(this.decelerationVelocity.x);
var i = Math.abs(this.decelerationVelocity.y);
if (!f && b <= PKScrollViewMinimumVelocityToHideScrollIndicators && i <= PKScrollViewMinimumVelocityToHideScrollIndicators) {
this.hideScrollIndicators();
if (b <= PKScrollViewMinimumVelocity && i <= PKScrollViewMinimumVelocity) {
this.decelerating = false;
if (PKUtils.objectHasMethod(this.delegate, PKScrollViewDidEndDecelerating)) {
this.delegate[PKScrollViewDidEndDecelerating](this)
}
return
}
}
if (!f) {
this.decelerationTimer = this.callMethodNameAfterDelay("stepThroughDecelerationAnimation", PKScrollViewDesiredAnimationFrameRate)
}
if (this.bounces) {
var e = new PKPoint(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 (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 (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
}
};
PKScrollView.prototype.activateOriginalTarget = function() {
var b = this.originalTarget;
while (b.parentNode && b !== this.hostingLayer) {
if (b.nodeType == Node.ELEMENT_NODE) {
if (PKScrollViewClickableElementNames.indexOf(b.localName) != -1) {
break
}
}
b = b.parentNode
}
if (!PKSupportsTouches) {
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)
};
PKClass(PKScrollView);
const PKTableViewCellForRowAtPath = "tableViewCellForRowAtPath";
const PKTableViewNumberOfSectionsInTableView = "numberOfSectionsInTableView";
const PKTableViewNumberOfRowsInSection = "tableViewNumberOfRowsInSection";
const PKTableViewTitleForHeaderInSection = "tableViewTitleForHeaderInSection";
const PKTableViewTitleForFooterInSection = "tableViewTitleForFooterInSection";
const PKTableViewCustomCellForRowAtPath = "tableViewCustomCellForRowAtPath";
const PKTableViewDidSelectRowAtPath = "tableViewDidSelectRowAtPath";
const PKTableViewDidSelectAccessoryForRowAtPath = "tableViewDidSelectAccessoryForRowAtPath";
const PKTableViewCustomCellCSS = "pk-custom-table-view-cell";
const PKTableViewStylePlain = "plain";
const PKTableViewStyleCustom = "custom";
const PKTableViewStyleGrouped = "grouped";
const PKTableViewMinTouchDurationForCellSelection = 150;
PKTableView.inherits = PKScrollView;
PKTableView.synthetizes = ["style"];
PKTableView.includes = [PKPropertyTriage];
function PKTableView() {
this.callSuper();
this._style = PKTableViewStyleCustom;
this.horizontalScrollEnabled = false;
this.dataSource = null;
this.touchedCell = null;
this.numberOfSections = 1;
this.numberOfRows = [];
this.sections = [];
this.headers = [];
this.sectionMetrics = [];
this.selectedCell = null;
this.inTree = false;
this.populated = false
}
PKTableView.prototype.createLayer = function() {
this.callSuper();
this.layer.addClassName("pk-table-view")
};
PKTableView.prototype.setStyle = function(a) {
this.layer.removeClassName(this._style);
this.layer.addClassName(a);
this._style = a;
this[((a === PKTableViewStylePlain) ? "add": "remove") + "PropertyObserver"]("contentOffset", this)
};
PKTableView.prototype.numberOfRowsInSection = function(a) {
if (a > this.numberOfSections - 1) {
return
}
return this.numberOfRows[a]
};
PKTableView.prototype.cellForRowAtPath = function(a) {
if (this._style === PKTableViewStyleCustom || a.section > this.numberOfSections - 1 || a.row > this.numberOfRows[a.section]) {
return null
}
return this.hostingLayer.querySelector(".section:nth-of-type(" + (a.section + 1) + ") > div:nth-of-type(" + (a.row + 1) + ")")._view
};
PKTableView.prototype.customCellForRowAtPath = function(a) {
if (this._style !== PKTableViewStyleCustom || a.section > this.numberOfSections - 1 || a.row > this.numberOfRows[a.section]) {
return null
}
return this.hostingLayer.querySelector(".section:nth-of-type(" + (a.section + 1) + ") > ." + PKTableViewCustomCellCSS + ":nth-of-type(" + (a.row + 1) + ")")
};
PKTableView.prototype.pathForCell = function(a) {
if (this._style === PKTableViewStyleCustom) {
return null
}
return a._tableViewDataSourcePath
};
PKTableView.prototype.pathForCustomCell = function(a) {
if (this._style !== PKTableViewStyleCustom) {
return null
}
return a._tableViewDataSourcePath
};
PKTableView.prototype.becameDescendantOfRootView = function() {
this.inTree = true;
this.notifyCellsOfRootViewDescendancy()
};
PKTableView.prototype.notifyCellsOfRootViewDescendancy = function() {
if (!this.inTree || !this.populated) {
return
}
var a = this.hostingLayer.querySelectorAll(".pk-table-view-cell");
for (var b = 0; b < a.length; b++) {
a[b]._view.becameDescendantOfRootView()
}
};
PKTableView.prototype.reloadData = function() {
var c = (this._style === PKTableViewStyleCustom);
if (c) {
if (!PKUtils.objectHasMethod(this.dataSource, PKTableViewCustomCellForRowAtPath) || !PKUtils.objectHasMethod(this.dataSource, PKTableViewNumberOfRowsInSection)) {
console.error("A PKTableView's dataSource must implement all required methods");
return
}
} else {
if (!PKUtils.objectHasMethod(this.dataSource, PKTableViewCellForRowAtPath) || !PKUtils.objectHasMethod(this.dataSource, PKTableViewNumberOfRowsInSection)) {
console.error("A PKTableView's dataSource must implement all required methods");
return
}
}
this._hostingLayer.innerText = "";
this.sections = [];
this.headers = [];
if (PKUtils.objectHasMethod(this.dataSource, PKTableViewNumberOfSectionsInTableView)) {
this.numberOfSections = this.dataSource[PKTableViewNumberOfSectionsInTableView](this);
if (this.numberOfSections < 1) {
console.error("A PKTableView 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 (PKUtils.objectHasMethod(this.dataSource, PKTableViewTitleForHeaderInSection)) {
var a = this.dataSource[PKTableViewTitleForHeaderInSection](this, i);
if (a !== null) {
var k = d.appendChild(document.createElement("h1"));
k.innerText = a;
this.headers[i] = k
}
}
var g = this.dataSource[PKTableViewNumberOfRowsInSection](this, i);
for (var f = 0; f < g; f++) {
var e = new PKCellPath(i, f);
if (c) {
var h = this.dataSource[PKTableViewCustomCellForRowAtPath](this, e);
h.addClassName(PKTableViewCustomCellCSS);
h._tableViewDataSourcePath = e;
d.appendChild(h)
} else {
var h = this.dataSource[PKTableViewCellForRowAtPath](this, e);
h._tableViewDataSourcePath = e;
d.appendChild(h.layer)
}
}
if (PKUtils.objectHasMethod(this.dataSource, PKTableViewTitleForFooterInSection)) {
var j = this.dataSource[PKTableViewTitleForFooterInSection](this, i);
if (j !== null) {
d.appendChild(document.createElement("span")).innerText = j
}
}
this.numberOfRows[i] = g;
this._hostingLayer.appendChild(d)
}
if (this._style === PKTableViewStylePlain) {
this.sectionMetrics = [];
for (var b = 0; b < this.sections.length; b++) {
this.sectionMetrics[b] = {
y: this.sections[b].offsetTop,
height: this.sections[b].offsetHeight
}
}
}
this.populated = true;
this.notifyCellsOfRootViewDescendancy()
};
PKTableView.prototype.touchesBegan = function(d) {
if (d._manufactured) {
return
}
this.wasDeceleratingWhenTouchesBegan = this.decelerating;
this.callSuper(d);
this.touchedCell = null;
this.touchedAccessory = null;
if (this.wasDeceleratingWhenTouchesBegan || !this.tracking) {
return
}
var c = document.elementFromPoint(this.startTouchPosition.x, this.startTouchPosition.y);
if (this._style === PKTableViewStyleCustom) {
var a = c;
while (a.parentNode) {
if (a.hasClassName(PKTableViewCustomCellCSS)) {
this.touchedCell = a;
this.touchedCellWasSelected = this.touchedCell.hasClassName(PKControlStateSelectedCSS);
break
}
a = a.parentNode
}
} else {
var b = (c._view !== undefined) ? c._view: c.getNearestView();
if (b instanceof PKTableViewCell) {
this.touchedCell = b;
this.touchedCellWasSelected = this.touchedCell.selected
} else {
if (b instanceof PKBarButtonItem) {
this.touchedAccessory = b
}
}
}
if (this.touchedCell !== null) {
this.callMethodNameAfterDelay("highlightTouchedCell", PKTableViewMinTouchDurationForCellSelection)
}
};
PKTableView.prototype.touchesMoved = function(b) {
var a = this.dragging;
this.callSuper(b);
if (this.wasDeceleratingWhenTouchesBegan) {
return
}
if (a != this.dragging && this.touchedCell !== null && !this.touchedCellWasSelected) {
if (this.touchedCell instanceof PKTableViewCell) {
this.touchedCell.selected = false
} else {
this.touchedCell.removeClassName(PKControlStateSelectedCSS)
}
}
};
PKTableView.prototype.touchesEnded = function(b) {
var c = this.dragging;
this.callSuper(b);
if (this.wasDeceleratingWhenTouchesBegan) {
return
}
if (b.type != PKEndEvent) {
return
}
if (b.eventPhase == Event.CAPTURING_PHASE && this.touchedAccessory !== null) {
var a = this.touchedAccessory.superview;
if (a.accessoryType === PKTableViewCellAccessoryDetailDisclosureButton) {
this.disclosureButtonWasSelectedAtPath(a._tableViewDataSourcePath)
}
} else {
if (b.eventPhase == Event.BUBBLING_PHASE && !c && this.touchedCell !== null) {
this.selectRowAtPath(this.touchedCell._tableViewDataSourcePath)
}
}
};
PKTableView.prototype.pathForSelectedRow = function() {
if (this.selectedCell === null) {
return null
}
return (this._style === PKTableViewStyleCustom) ? this.pathForCustomCell(this.selectedCell) : this.pathForCell(this.selectedCell)
};
PKTableView.prototype.deselectRowAtPathAnimated = function(b, c) {
if (b === null) {
return
}
var a = (this._style === PKTableViewStyleCustom) ? this.customCellForRowAtPath(b) : this.cellForRowAtPath(b);
if (a !== null) {
this.markCellAsSelectedAnimated(a, false, c)
}
};
PKTableView.prototype.selectRowAtPath = function(b) {
var a = (this._style === PKTableViewStyleCustom) ? 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 (PKUtils.objectHasMethod(this.delegate, PKTableViewDidSelectRowAtPath)) {
this.delegate[PKTableViewDidSelectRowAtPath](this, b)
}
};
PKTableView.prototype.highlightTouchedCell = function() {
if (this.touchedCell !== null && !this.dragging && this.tracking) {
this.markCellAsSelectedAnimated(this.touchedCell, true, false)
}
};
PKTableView.prototype.markCellAsSelectedAnimated = function(a, c, b) {
if (a instanceof PKTableViewCell) {
a.setSelectedAnimated(c, b)
} else {
a[c ? "addClassName": "removeClassName"](PKControlStateSelectedCSS)
}
};
PKTableView.prototype.disclosureButtonWasSelectedAtPath = function(b) {
var a = this.cellForRowAtPath(b);
if (a.accessoryType === PKTableViewCellAccessoryDetailDisclosureButton && PKUtils.objectHasMethod(this.delegate, PKTableViewDidSelectAccessoryForRowAtPath)) {
this.delegate[PKTableViewDidSelectAccessoryForRowAtPath](this, b)
}
};
const PKTableViewPlainHeaderHeight = 23;
PKTableView.prototype.handleContentOffsetChange = function() {
this.updateSectionHeaders()
};
PKTableView.prototype.updateSectionHeaders = function() {
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 < (PKTableViewPlainHeaderHeight - 1)) {
a = d.height - PKTableViewPlainHeaderHeight
} else {
if (e <= h && f > h) {
a = Math.abs(e - h) - 1
}
}
b.style.webkitTransform = PKUtils.t(0, a)
}
};
PKClass(PKTableView);
PKTableView.init = function() {
PKUtils.preloadImageAsset("tableview/UITableSelection.png")
};
window.addEventListener("load", PKTableView.init, false);
function PKCellPath(a, b) {
this.section = a || 0;
this.row = b || 0
}
PKCellPath.prototype.toString = function() {
return "PKCellPath with section " + this.section + " and row " + this.row
};
const PKTableViewCellAccessoryNone = "no-accessory";
const PKTableViewCellAccessoryDisclosureIndicator = "disclosure-accessory";
const PKTableViewCellAccessoryDetailDisclosureButton = "detail-accessory";
const PKTableViewCellSelectionStyleNone = "no-selection";
const PKTableViewCellSelectionStyleBlue = "blue-selection";
const PKTableViewCellSelectionStyleGray = "gray-selection";
const PKTableViewCellStyleDefault = "style-default";
const PKTableViewCellStyleValue1 = "style-value-1";
const PKTableViewCellStyleValue2 = "style-value-2";
const PKTableViewCellStyleSubtitle = "style-subtitle";
PKTableViewCell.inherits = PKView;
PKTableViewCell.synthetizes = ["text", "detailedText", "selectionStyle", "accessoryType", "selected"];
function PKTableViewCell(a) {
this.style = a || PKTableViewCellStyleDefault;
this.callSuper();
this._selectionStyle = PKTableViewCellSelectionStyleBlue;
this._accessoryType = PKTableViewCellAccessoryNone;
this._selected = false;
this.inTree = false;
this.layer.removeEventListener(PKStartEvent, this, false)
}
PKTableViewCell.prototype.createLayer = function() {
this.callSuper();
this.layer.addClassName("pk-table-view-cell " + this.style);
this.layer.setAttribute("role", "button");
this.accessory = new PKBarButtonItem(PKBarButtonItemTypePlain);
this.accessory.image = new PKImage(PKUtils.assetsPath + "pixel.png");
this.addSubview(this.accessory);
this.accessory.touchLayer.removeEventListener(PKStartEvent, this.accessory, false);
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")
};
PKTableViewCell.prototype.getText = function() {
return this.textLabel.innerText
};
PKTableViewCell.prototype.setText = function(a) {
this.textLabel.innerText = a;
this.updateTextLayout()
};
PKTableViewCell.prototype.getDetailedText = function() {
return this.detailedTextLabel.innerText
};
PKTableViewCell.prototype.setDetailedText = function(a) {
this.detailedTextLabel.innerText = a;
this.updateTextLayout()
};
PKTableViewCell.prototype.setSelectionStyle = function(a) {
this.layer.removeClassName(this._selectionStyle);
this.layer.addClassName(a);
this._selectionStyle = a
};
const PKTableViewCellAccessoryDisclosureIndicatorWidth = 10;
const PKTableViewCellAccessoryDetailDisclosureButtonWidth = 29;
PKTableViewCell.prototype.setAccessoryType = function(a) {
this.layer.removeClassName(this._accessoryType);
this.layer.addClassName(a);
this._accessoryType = a;
if (a === PKTableViewCellAccessoryDisclosureIndicator) {
this.accessory.width = PKTableViewCellAccessoryDisclosureIndicatorWidth
} else {
if (a === PKTableViewCellAccessoryDetailDisclosureButton) {
this.accessory.width = PKTableViewCellAccessoryDetailDisclosureButtonWidth
}
}
};
PKTableViewCell.prototype.setSelected = function(a) {
this.setSelectedAnimated(a, false)
};
PKTableViewCell.prototype.setSelectedAnimated = function(a, b) {
if (this._selected == a) {
return
}
this._selected = a;
this.layer[a ? "addClassName": "removeClassName"](PKControlStateSelectedCSS)
};
PKTableViewCell.prototype.becameDescendantOfRootView = function() {
this.callSuper();
this.inTree = true;
this.updateTextLayout()
};
const PKTableViewCellStyleValue1Margin = 10;
PKTableViewCell.prototype.updateTextLayout = function() {
if (this.style != PKTableViewCellStyleValue1 || !this.inTree) {
return
}
var c = this.textLabel.offsetWidth - 2 * PKTableViewCellStyleValue1Margin;
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 = PKUtils.px(b);
this.detailedTextLabel.style.left = PKUtils.px(b + PKTableViewCellStyleValue1Margin * 2)
} else {
this.textLabel.style.width = PKUtils.px(b + PKTableViewCellStyleValue1Margin);
this.detailedTextLabel.style.left = PKUtils.px(b + PKTableViewCellStyleValue1Margin * 3)
}
}
};
PKClass(PKTableViewCell);
const PKToolbarHeight = 44;
const PKToolbarEdgeMargin = 6;
const PKToolbarItemMargin = 10;
const PKToolbarStyleDefault = "default";
const PKToolbarStyleBlack = "black";
const PKToolbarStyleBlackTranslucent = "black-translucent";
PKToolbar.inherits = PKView;
PKToolbar.synthetizes = ["items", "style"];
function PKToolbar() {
this._items = [];
this._style = "";
this.callSuper();
this.layer.addEventListener("webkitTransitionEnd", this, false);
this.style = PKToolbarStyleDefault;
this.clipsToBounds = true
}
PKToolbar.prototype.createLayer = function() {
this.callSuper();
this.layer.addClassName("pk-toolbar");
this.glow = this.layer.appendChild(document.createElement("div"));
this.glow.className = "glow"
};
PKToolbar.prototype.setSize = function(a) {
a.height = PKToolbarHeight;
this.callSuper(a);
this.updateLayout()
};
PKToolbar.prototype.willMoveToSuperview = function(a) {
if (a !== null && this._size.width == 0) {
this.size = new PKSize(a.size.width, PKToolbarHeight)
}
};
PKToolbar.prototype.setStyle = function(a) {
this.layer.removeClassName(this._style);
this.layer.addClassName(a);
this._style = a
};
PKToolbar.prototype.setItems = function(a) {
this.setItemsWithAnimation(a, false)
};
PKToolbar.prototype.setItemsWithAnimation = function(g, b) {
for (var i = 0; i < this._items.length; i++) {
var e = this._items[i];
if (g.indexOf(e) == -1) {
e.transitionsEnabled = b;
if (!b) {
e.removeFromSuperview()
} else {
e.needsRemoval = true;
e.transform = "scale(0.001)";
e.opacity = 0
}
}
}
for (var i = 0; i < g.length; i++) {
var e = g[i];
if (e.superview !== this) {
e._newItem = true;
this.addSubview(e);
e.addPropertyObserver("size", this);
if (e.type == PKBarButtonItemTypePlain) {
e.addEventListener(PKControlTouchStateChangeEvent, this, false)
}
}
}
var a = 0;
var d = 0;
for (var i = 0; i < g.length; i++) {
var e = g[i];
if (e.type == PKBarButtonItemTypeFlexibleSpace) {
a++
} else {
d += e.size.width
}
}
var c = this.size.width - d - PKToolbarItemMargin * (g.length - 1) - PKToolbarEdgeMargin * 2;
var f = (a > 0) ? (c / a) : 0;
var h = PKToolbarEdgeMargin;
for (var i = 0; i < g.length; i++) {
var e = g[i];
if (e.type == PKBarButtonItemTypeFlexibleSpace) {
h += f
} else {
if (e.type == PKBarButtonItemTypeFixedSpace) {
h += e.size.width
} else {
e.position = new PKPoint(h, (this.size.height - e.size.height) / 2);
if (e._newItem) {
e._newItem = false;
if (b) {
e.applyTransition(PKViewTransitionDissolveIn)
}
} else {
e.transitionsEnabled = b
}
h += e.size.width
}
}
h += PKToolbarItemMargin
}
this._items = g
};
PKToolbar.prototype.updateLayout = function() {
if (this._items.length > 0) {
this.setItemsWithAnimation(this._items, false)
}
};
PKToolbar.prototype.handleEvent = function(b) {
this.callSuper(b);
if (b.type == "webkitTransitionEnd") {
if (b.target === this.layer) {
return
} else {
if (b.target !== this.glow) {
this.removeItemIfNeeded(b.target._control)
} else {
if (this.glow.style.opacity == 0) {
this.glow.style.display = "none"
}
}
}
} else {
if (b.type == PKControlTouchStateChangeEvent) {
var a = b.control;
this.glow.style.webkitTransform = PKUtils.t(a.position.x + a.size.width / 2 - 50, 0);
this.glow.style.opacity = a.touchInside ? 1: 0;
this.glow.style.display = "block"
}
}
};
PKToolbar.prototype.removeItemIfNeeded = function(a) {
if (a.needsRemoval) {
a.removeFromSuperview();
a.needsRemoval = false;
a.transitionsEnabled = false;
a.transform = "scale(1)";
a.opacity = 1
}
};
PKToolbar.prototype.handlePropertyChange = function(b, a) {
this.setItemsWithAnimation(this._items, false)
};
PKClass(PKToolbar);
PKToolbar.init = function() {
PKUtils.preloadImageAsset("bar/UINavigationBarDefaultBackground.png");
PKUtils.preloadImageAsset("bar/UINavigationBarBlackOpaqueBackground.png");
PKUtils.preloadImageAsset("bar/UINavigationBarBlackTranslucentBackground.png");
PKUtils.preloadImageAsset("bar/toolbar_glow.png")
};
window.addEventListener("load", PKToolbar.init, false);
const PKNavigationViewBarStyleDefault = "default";
const PKNavigationViewBarStyleBlack = "black";
const PKNavigationViewBarStyleBlackTranslucent = "black-translucent";
const PKNavigationViewButtonMarginLeft = 5;
const PKNavigationViewButtonMarginRight = 8;
const PKNavigationViewBarHeight = 44;
const PKNavigationViewAnimationDuration = 0.35;
const PKNavigationControllerHideShowBarDuration = 0.2;
const PKNavigationViewShouldPushItem = "navigationViewShouldPushItem";
const PKNavigationViewDidPushItem = "navigationViewDidPushItem";
const PKNavigationViewShouldPopItem = "navigationViewShouldPopItem";
const PKNavigationViewDidPopItem = "navigationViewDidPopItem";
PKNavigationView.inherits = PKView;
PKNavigationView.synthetizes = ["barStyle", "topItem", "backItem", "navigationBarHidden"];
function PKNavigationView() {
this.callSuper();
this.delegate = null;
this._barStyle = "";
this._navigationBarHidden = false;
this.items = [];
this.busy = false;
this.barStyle = PKNavigationViewBarStyleDefault
}
PKNavigationView.prototype.createLayer = function() {
this.callSuper();
this.layer.addClassName("pk-navigation-view");
this.toolbar = this.addSubview(new PKToolbar());
this.hostView = this.addSubview(new PKView());
this.hostView.position = new PKPoint(0, PKNavigationViewBarHeight);
this.hostView.layer.addClassName("pk-navigation-view-hosting-layer")
};
PKNavigationView.prototype.setSize = function(a) {
this.toolbar.size = new PKSize(a.width, PKNavigationViewBarHeight);
this.hostView.size = new PKSize(a.width, a.height - (this._navigationBarHidden ? 0: PKNavigationViewBarHeight));
this.callSuper(a);
if (this.items.length > 0) {
this.topItem.updateLayoutIfTopItem()
}
for (var d = this.items.length - 2; d >= 0; d--) {
var c = this.items[d];
if (c.becomesBackItemTransition !== null) {
var b = new PKTransition(c.becomesBackItemTransition);
b.target = c.view;
b.duration = 0;
b.applyToState()
}
}
};
PKNavigationView.prototype.willMoveToSuperview = function(a) {
if (a !== null && this._size.width == 0) {
this.size = new PKSize(a._size.width, a._size.height)
}
};
PKNavigationView.prototype.setBarStyle = function(a) {
this.layer.removeClassName(this._barStyle);
this.layer.addClassName(a);
this._barStyle = a;
this.toolbar.style = a
};
PKNavigationView.prototype.getTopItem = function() {
return (this.items.length > 0) ? this.items[this.items.length - 1] : null
};
PKNavigationView.prototype.getBackItem = function() {
return (this.items.length > 1) ? this.items[this.items.length - 2] : null
};
PKNavigationView.prototype.setNavigationBarHidden = function(a) {
this.setNavigationBarHiddenAnimated(a, false)
};
PKNavigationView.prototype.setNavigationBarHiddenAnimated = function(b, a) {
if (this._navigationBarHidden == b) {
return
}
this._navigationBarHidden = b;
PKTransaction.begin();
PKTransaction.defaults.duration = a ? PKNavigationControllerHideShowBarDuration: 0;
PKTransaction.defaults.properties = ["position"];
new PKTransition({
target: this.toolbar,
to: [new PKPoint(0, b ? -PKNavigationViewBarHeight: 0)]
}).start();
new PKTransition({
target: this.hostView,
to: [new PKPoint(0, b ? 0: PKNavigationViewBarHeight)],
delegate: this
}).start();
PKTransaction.commit();
if (!a || b) {
this.updateHostViewSize()
}
};
PKNavigationView.prototype.transitionDidComplete = function(a) {
if (!this._navigationBarHidden) {
this.updateHostViewSize()
}
};
PKNavigationView.prototype.updateHostViewSize = function() {
this.hostView.size = new PKSize(this.size.width, this.size.height - (this._navigationBarHidden ? 0: PKNavigationViewBarHeight))
};
PKNavigationView.prototype.handleEvent = function(a) {
this.callSuper(a);
if (this.busy && a.type == "webkitTransitionEnd") {
this.transitionsEnded()
}
};
PKNavigationView.prototype.pushNavigationItem = function(c, a) {
if (this.busy) {
return
}
var b = (this.items.length == 0);
if (!b) {
PKTransaction.begin()
}
if (PKUtils.objectHasMethod(this.delegate, PKNavigationViewShouldPushItem)) {
if (!this.delegate[PKNavigationViewShouldPushItem](this, c)) {
if (!b) {
PKTransaction.commit()
}
return
}
}
this.items.push(c);
c.navigationView = this;
if (c.view._size.width == 0) {
c.view.size = new PKSize(this.hostView._size.width, this.hostView._size.height)
}
if (b) {
this.addItemViewsInToolbar(c, null);
c.sizeItemsAndComputePositions();
c.updateLayout();
this.hostView.addSubview(c.view)
} else {
this.transitionToTopItem(this.backItem, true, a)
}
c.view.autoresizingMask = PKViewAutoresizingFlexibleWidth | PKViewAutoresizingFlexibleHeight
};
PKNavigationView.prototype.popNavigationItem = function(b) {
if (this.busy || this.items.length < 2) {
return
}
PKTransaction.begin();
if (PKUtils.objectHasMethod(this.delegate, PKNavigationViewShouldPopItem)) {
if (!this.delegate[PKNavigationViewShouldPopItem](this, this.topItem)) {
PKTransaction.commit();
return
}
}
var a = this.items.pop();
a.navigationView = null;
this.transitionToTopItem(a, false, b)
};
PKNavigationView.prototype.addItemViewsInToolbar = function(c, e) {
var b = c._leftBarButtonItem || ((e !== null) ? e.backBarButtonItem: null) || null;
var f = [b, c.rightBarButtonItem, c.titleView];
for (var d = 0; d < f.length; d++) {
var a = f[d];
if (!PKUtils.objectIsUndefined(a) && a !== null && (a.superview === null || a.superview !== this.toolbar)) {
this.toolbar.addSubview(a)
}
}
};
PKNavigationView.prototype.transitionToTopItem = function(e, h, c) {
this.busy = c;
this.previousItem = e;
this.transitionWentForward = h;
var b = this.topItem;
this.addItemViewsInToolbar(b, this.backItem);
b.sizeItemsAndComputePositions();
if (e !== null) {
e.view.layer.style.display = "block"
}
b.view.layer.style.display = "block";
PKTransaction.defaults.duration = c ? PKNavigationViewAnimationDuration: 0;
PKTransaction.defaults.properties = ["opacity", "position"];
if (e._leftBarButtonItem !== null) {
if (e._leftBarButtonItem !== b._leftBarButtonItem) {
new PKTransition({
target: e._leftBarButtonItem,
properties: ["opacity"],
to: [0]
}).start()
}
} else {
if (e.leftButton !== null) {
var a = (h) ? ( - e.leftButton.size.width - PKNavigationItemLeftButtonLeftMargin) : b.positions.title;
new PKTransition({
target: e.leftButton,
to: [0, new PKPoint(a, 0)]
}).start()
}
}
var a = (h) ? PKNavigationItemLeftButtonLeftMargin: this.size.width;
new PKTransition({
target: e.titleView,
to: [0, new PKPoint(a, 0)]
}).start();
if (e._rightBarButtonItem !== null && e._rightBarButtonItem !== b._rightBarButtonItem) {
new PKTransition({
target: e._rightBarButtonItem,
properties: ["opacity"],
to: [0]
}).start()
}
if (b._leftBarButtonItem !== null) {
if (b._leftBarButtonItem !== e._leftBarButtonItem) {
b._leftBarButtonItem.position = new PKPoint(b.positions.leftButton, 0);
new PKTransition({
target: b._leftBarButtonItem,
properties: ["opacity"],
from: [0],
to: [1]
}).start()
}
} else {
if (b.leftButton !== null) {
var g = (h) ? e.positions.title: ( - e.leftButton.size.width - PKNavigationItemLeftButtonLeftMargin);
new PKTransition({
target: b.leftButton,
from: [0, new PKPoint(g, 0)],
to: [b.hidesBackButton ? 0: 1, new PKPoint(b.positions.leftButton, 0)]
}).start()
}
}
var g = (h) ? this.size.width: PKNavigationItemLeftButtonLeftMargin;
new PKTransition({
target: b.titleView,
from: [0, new PKPoint(g, 0)],
to: [1, new PKPoint(b.positions.title, 0)]
}).start();
if (b._rightBarButtonItem !== null && b._rightBarButtonItem !== e._rightBarButtonItem) {
b._rightBarButtonItem.position = new PKPoint(b.positions.rightButton, 0);
new PKTransition({
target: b._rightBarButtonItem,
properties: ["opacity"],
from: [0],
to: [1]
}).start()
}
var f = h ? e.becomesBackItemTransition: e.wasTopItemTransition;
var d = h ? b.becomesTopItemTransition: b.wasBackItemTransition;
e.view.applyTransition(f, false);
b.view.applyTransition(d, false);
if (h) {
this.hostView.addSubview(this.topItem.view)
}
if (c) {
e.titleView.layer.addEventListener("webkitTransitionEnd", this, false)
}
PKTransaction.commit();
if (!c) {
this.transitionsEnded()
}
};
PKNavigationView.prototype.transitionsEnded = function() {
this.busy = false;
if (this.transitionWentForward) {
if (PKUtils.objectHasMethod(this.delegate, PKNavigationViewDidPushItem)) {
this.delegate[PKNavigationViewDidPushItem](this, this.topItem)
}
if (this.previousItem !== null) {
this.previousItem.view.layer.style.display = "none"
}
} else {
this.previousItem.view.removeFromSuperview();
if (PKUtils.objectHasMethod(this.delegate, PKNavigationViewDidPopItem)) {
this.delegate[PKNavigationViewDidPopItem](this, this.previousItem)
}
}
if (this.previousItem.leftButton !== null && this.previousItem.leftButton !== this.topItem.leftButton) {
this.previousItem.leftButton.removeFromSuperview()
}
this.previousItem.titleView.removeFromSuperview();
if (this.previousItem._rightBarButtonItem !== null && this.previousItem._rightBarButtonItem !== this.topItem._rightBarButtonItem) {
this.previousItem._rightBarButtonItem.removeFromSuperview()
}
if (this.previousItem.leftButton !== null) {
this.previousItem.leftButton.removeEventListener(PKControlTouchUpInsideEvent, this, false)
}
};
PKClass(PKNavigationView);
const PKNavigationItemLeftButtonLeftMargin = 5;
const PKNavigationItemLeftButtonRightMargin = 8;
const PKNavigationItemRightButtonLeftMargin = 11;
const PKNavigationItemRightButtonRightMargin = 5;
const PKNavigationItemTransitionInFromRight = {
properties: ["transform"],
from: ["translateX($width)"],
to: ["translateX(0)"]
};
const PKNavigationItemTransitionInFromLeft = {
properties: ["transform"],
from: ["translateX(-$width)"],
to: ["translateX(0)"]
};
const PKNavigationItemTransitionOutToRight = {
properties: ["transform"],
from: ["translateX(0)"],
to: ["translateX($width)"]
};
const PKNavigationItemTransitionOutToLeft = {
properties: ["transform"],
from: ["translateX(0)"],
to: ["translateX(-$width)"]
};
PKNavigationItem.inherits = PKObject;
PKNavigationItem.synthetizes = ["title", "view", "backBarButtonItem", "leftBarButtonItem", "rightBarButtonItem", "hidesBackButton"];
PKNavigationItem.includes = [PKEventTriage];
function PKNavigationItem(b, a) {
this.callSuper();
this._title = "";
this._view = null;
this._backBarButtonItem = new PKBarButtonItem(PKBarButtonItemTypeBack);
this._hidesBackButton = false;
this._leftBarButtonItem = null;
this._rightBarButtonItem = null;
this.titleView = new PKBarButtonItem(PKBarButtonItemTypePlain);
this.titleView.layer.setAttribute("role", "header");
this.buttons = null;
this.positions = null;
this.navigationView = null;
this.wasBackItemTransition = PKNavigationItemTransitionInFromLeft;
this.becomesBackItemTransition = PKNavigationItemTransitionOutToLeft;
this.wasTopItemTransition = PKNavigationItemTransitionOutToRight;
this.becomesTopItemTransition = PKNavigationItemTransitionInFromRight;
this.title = b || "";
this.view = a || null;
this._backBarButtonItem.addEventListener(PKControlTouchUpInsideEvent, this, false)
}
PKNavigationItem.prototype.handleControlTouchUpInside = function(a) {
if (this.navigationView !== null && !this.navigationView.busy && !this.navigationView.topItem.hidesBackButton) {
this.navigationView.popNavigationItem(true)
}
};
PKNavigationItem.prototype.setTitle = function(a) {
this._title = a;
this.updateLayoutIfTopItem()
};
PKNavigationItem.prototype.setView = function(a) {
if (this.navigationView !== null && this.navigationView.topItem === this) {
this._view.removeFromSuperview();
this.navigationView.addSubview(a)
}
this._view = a
};
PKNavigationItem.prototype.setBackBarButtonItem = function(a) {
if (this.navigationView !== null && this.navigationView.backItem === this) {
if (this._backBarButtonItem !== null) {
this._backBarButtonItem.removeFromSuperview()
}
this._backBarButtonItem = a;
this.navigationView.toolbar.addSubview(this._backBarButtonItem);
this.navigationView.topItem.updateLayoutIfTopItem()
} else {
this._backBarButtonItem = a
}
if (this._backBarButtonItem !== null) {
this._backBarButtonItem.addEventListener(PKControlTouchUpInsideEvent, this, false)
}
};
PKNavigationItem.prototype.setHidesBackButton = function(a) {
this.setHidesBackButtonWithAnimation(a, false)
};
PKNavigationItem.prototype.setLeftBarButtonItem = function(a) {
if (this.navigationView !== null && this.navigationView.topItem === this) {
var b = this.getDefaultBackButton();
if (this.leftButton !== null) {
this.leftButton.removeFromSuperview()
}
this._leftBarButtonItem = a;
var c = this._leftBarButtonItem || this.getDefaultBackButton();
if (c !== null) {
this.navigationView.toolbar.addSubview(c);
if (this._leftBarButtonItem === null && !this.hidesBackButton) {
c.opacity = 1
}
}
this.updateLayoutIfTopItem()
} else {
this._leftBarButtonItem = a
}
};
PKNavigationItem.prototype.setRightBarButtonItem = function(a) {
if (this.navigationView !== null && this.navigationView.topItem === this) {
if (this._rightBarButtonItem !== null) {
this._rightBarButtonItem.removeFromSuperview()
}
this._rightBarButtonItem = a;
this.navigationView.toolbar.addSubview(this._rightBarButtonItem);
this.updateLayoutIfTopItem()
} else {
this._rightBarButtonItem = a
}
};
PKNavigationItem.prototype.setHidesBackButtonWithAnimation = function(a, c) {
var b = this.getDefaultBackButton();
if (this._hidesBackButton == a) {
return
}
this._hidesBackButton = a;
if (b === null) {
return
}
b.transitionsEnabled = c;
b.opacity = a ? 0: 1
};
PKNavigationItem.prototype.setLeftBarButtonItemWithAnimation = function(d, a) {
if (!a || this.navigationView === null || this.navigationView.topItem !== this) {
this.leftBarButtonItem = d;
return
}
PKTransaction.begin();
PKTransaction.defaults.duration = 0.5;
PKTransaction.defaults.properties = ["opacity"];
var b = this.leftButton;
if (b !== null) {
new PKTransition({
target: b,
to: [0],
removesTargetUponCompletion: true
}).start()
}
this._leftBarButtonItem = d;
var c = this._leftBarButtonItem || this.getDefaultBackButton();
if (c !== null) {
this.navigationView.toolbar.addSubview(c);
if (this._leftBarButtonItem !== null || !this._hidesBackButton) {
new PKTransition({
target: c,
from: [0],
to: [1]
}).start()
}
}
this.updateLayoutIfTopItem();
PKTransaction.commit()
};
PKNavigationItem.prototype.setRightBarButtonItemWithAnimation = function(c, a) {
if (!a || this.navigationView === null || this.navigationView.topItem !== this) {
this.rightBarButtonItem = c;
return
}
PKTransaction.begin();
PKTransaction.defaults.duration = 0.5;
PKTransaction.defaults.properties = ["opacity"];
var b = this._rightBarButtonItem;
if (b !== null) {
new PKTransition({
target: b,
to: [0],
removesTargetUponCompletion: true
}).start()
}
this._rightBarButtonItem = c;
if (this._rightBarButtonItem !== null) {
this.navigationView.toolbar.addSubview(this._rightBarButtonItem);
new PKTransition({
target: this._rightBarButtonItem,
from: [0],
to: [1]
}).start()
}
this.updateLayoutIfTopItem();
PKTransaction.commit()
};
PKNavigationItem.prototype.getDefaultBackButton = function() {
return (this.navigationView !== null && this.navigationView.backItem !== null) ? this.navigationView.backItem.backBarButtonItem: null
};
PKNavigationItem.prototype.sizeItemsAndComputePositions = function() {
if (this.navigationView === null) {
return
}
var i = this._leftBarButtonItem || this.getDefaultBackButton();
var e = (this._rightBarButtonItem !== null) ? this._rightBarButtonItem.size.width: 0;
var a = this.navigationView.size.width - PKNavigationItemLeftButtonLeftMargin - PKNavigationItemRightButtonRightMargin;
if (i !== null) {
a -= PKNavigationItemLeftButtonRightMargin
}
if (this._rightBarButtonItem !== null) {
a -= PKNavigationItemRightButtonLeftMargin + e
}
var f = 0;
if (i !== null) {
i.maxWidth = this.navigationView.size.width / 2;
if (i !== this._leftBarButtonItem && i.title == "" && i.image === null) {
i.title = this.navigationView.backItem.title
}
f = i.size.width
}
this.titleView.maxWidth = 0;
this.titleView.title = this._title;
var g = this.titleView.size.width;
if (g + f > a) {
if (i !== null) {
i.maxWidth = Math.min(Math.max(a / 3, a - g), i.maxWidth);
f = i.size.width
}
this.titleView.maxWidth = a - f;
g = this.titleView.size.width
}
var c = PKNavigationItemLeftButtonLeftMargin;
var k = this.navigationView.size.width - PKNavigationItemRightButtonRightMargin - e;
var j = c + ((i != null) ? f + PKNavigationItemLeftButtonRightMargin: 0);
var b = k - g - ((e > 0) ? PKNavigationItemRightButtonLeftMargin: 0);
var l = (this.navigationView.size.width - g) / 2;
var h = l;
if (l > b || l < j) {
var d = Math.abs(l - j);
var m = Math.abs(l - b);
h = (d < m) ? j: b
}
this.leftButton = i;
this.positions = {
leftButton: c,
title: h,
rightButton: k
}
};
PKNavigationItem.prototype.updateLayout = function() {
if (this.positions === null || this.button === null) {
return
}
if (this.leftButton != null) {
this.leftButton.position = new PKPoint(this.positions.leftButton, 0)
}
if (this._rightBarButtonItem != null) {
this._rightBarButtonItem.position = new PKPoint(this.positions.rightButton, 0)
}
this.titleView.position = new PKPoint(this.positions.title, 0)
};
PKNavigationItem.prototype.updateLayoutIfTopItem = function() {
if (this.navigationView === null || this.navigationView.topItem !== this) {
return
}
this.sizeItemsAndComputePositions();
this.updateLayout()
};
PKClass(PKNavigationItem);
const PKControlTouchDownEvent = "controlTouchDown";
const PKControlTouchDragInsideEvent = "controlTouchDragInside";
const PKControlTouchDragOutsideEvent = "controlTouchDragOutside";
const PKControlTouchDragEnterEvent = "controlTouchDragEnter";
const PKControlTouchDragExitEvent = "controlTouchDragExit";
const PKControlTouchUpInsideEvent = "controlTouchUpInside";
const PKControlTouchUpOutsideEvent = "controlTouchUpOutside";
const PKControlTouchCancelEvent = "controlTouchCancel";
const PKControlValueChangeEvent = "controlValueChange";
const PKControlTouchStateChangeEvent = "controlTouchStateChange";
const PKControlStateNormal = 0;
const PKControlStateNormalCSS = "normal";
const PKControlStateHighlighted = 1 << 0;
const PKControlStateHighlightedCSS = "highlighted";
const PKControlStateDisabled = 1 << 1;
const PKControlStateDisabledCSS = "disabled";
const PKControlStateSelected = 1 << 2;
const PKControlStateSelectedCSS = "selected";
PKControl.inherits = PKView;
PKControl.synthetizes = ["state", "enabled", "selected", "highlighted", "touchLayer"];
function PKControl() {
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.tracksTouchesOnceTouchesBegan = true;
this.layer.removeEventListener(PKStartEvent, this, false);
this.touchLayer.addEventListener(PKStartEvent, this, false)
}
PKControl.prototype.createLayer = function() {
this.callSuper();
this.layer.addClassName("pk-control")
};
PKControl.prototype.getState = function() {
return (PKControlStateNormal | (this._highlighted ? PKControlStateHighlighted: 0) | (this._enabled ? 0: PKControlStateDisabled) | (this._selected ? PKControlStateSelected: 0))
};
PKControl.prototype.setEnabled = function(a) {
if (a == this._enabled) {
return
}
this.layer[a ? "removeClassName": "addClassName"](PKControlStateDisabledCSS);
this._enabled = a;
this.tracksTouchesOnceTouchesBegan = a;
this.notifyPropertyChange("state")
};
PKControl.prototype.setSelected = function(a) {
if (a == this._selected) {
return
}
this.layer[a ? "addClassName": "removeClassName"](PKControlStateSelectedCSS);
this._selected = a;
this.notifyPropertyChange("state")
};
PKControl.prototype.setHighlighted = function(a) {
if (a == this._highlighted) {
return
}
this.layer[a ? "addClassName": "removeClassName"](PKControlStateHighlightedCSS);
this._highlighted = a;
this.notifyPropertyChange("state")
};
PKControl.prototype.addEventListener = function(c, b, a) {
this.layer.addEventListener(c, b, a)
};
PKControl.prototype.removeEventListener = function(c, b, a) {
this.layer.removeEventListener(c, b, a)
};
PKControl.prototype.dispatchEvent = function(a) {
this.layer.dispatchEvent(a)
};
PKControl.prototype.getTouchLayer = function() {
return (this._touchLayer != null) ? this._touchLayer: this.layer
};
PKControl.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(PKControlTouchDownEvent, a));
this.dispatchEvent(this.createEvent(PKControlTouchStateChangeEvent));
this.lastProcessedEvent = a
};
PKControl.prototype.touchesMoved = function(c) {
this.callSuper(c);
this.tracking = true;
var a = this.pointInside(PKPoint.fromEventInElement(c, this.layer));
var b = a ? PKControlTouchDragInsideEvent: PKControlTouchDragOutsideEvent;
if (a != this.touchInside) {
this.touchInside = a;
this.highlighted = a;
b = a ? PKControlTouchDragEnterEvent: PKControlTouchDragExitEvent;
this.dispatchEvent(this.createEvent(PKControlTouchStateChangeEvent))
}
this.dispatchEvent(this.createUIEvent(b, c));
this.lastProcessedEvent = c
};
PKControl.prototype.touchesEnded = function(b) {
this.callSuper(b);
this.tracking = false;
this.highlighted = false;
var a = this.touchInside ? PKControlTouchUpInsideEvent: PKControlTouchUpOutsideEvent;
this.dispatchEvent(this.createUIEvent(a, this.lastProcessedEvent));
this.touchInside = false;
this.dispatchEvent(this.createEvent(PKControlTouchStateChangeEvent))
};
PKControl.prototype.touchesCancelled = function(a) {
this.callSuper(a);
this.dispatchEvent(this.createUIEvent(PKControlTouchCancelEvent, a))
};
PKControl.prototype.createEvent = function(a) {
var b = document.createEvent("Event");
b.initEvent(a, true, false);
b.control = this;
return b
};
PKControl.prototype.createUIEvent = function(c, b) {
var a = PKUtils.createUIEvent(c, b);
a.control = this;
return a
};
PKClass(PKControl);
const PKBarButtonItemTypePlain = "plain";
const PKBarButtonItemTypeSquare = "square";
const PKBarButtonItemTypeBack = "back";
const PKBarButtonItemTypeForward = "forward";
const PKBarButtonItemTypeFlexibleSpace = "flexible-space";
const PKBarButtonItemTypeFixedSpace = "fixed-space";
const PKBarButtonItemStyleBlack = "black";
const PKBarButtonItemStyleDefault = "default";
const PKBarButtonItemStyleLightBlue = "lightblue";
const PKBarButtonItemHeight = 30;
const PKBarButtonItemPointyXOffset = 3;
PKBarButtonItem.inherits = PKControl;
PKBarButtonItem.synthetizes = ["maxWidth", "width", "title", "type", "style", "image", "imageOffset"];
function PKBarButtonItem(a) {
this.callSuper();
this._maxWidth = 0;
this._width = 0;
this._title = "";
this._type = "";
this._style = "";
this._image = null;
this.type = (a != null) ? a: PKBarButtonItemTypeSquare;
this.style = PKBarButtonItemStyleDefault;
this.usesAutomaticImageOffset = true
}
PKBarButtonItem.prototype.createLayer = function() {
this.callSuper();
this.layer.addClassName("pk-bar-button-item");
this.layer.setAttribute("role", "button");
this.background = this.layer.appendChild(document.createElement("div"));
this.icon = this.layer.appendChild(document.createElement("img"))
};
PKBarButtonItem.prototype.becameDescendantOfRootView = function() {
this.callSuper();
if (this._title != "" && this._width == 0) {
this.autoSizeTitle()
}
};
PKBarButtonItem.prototype.getSize = function() {
var a = (this._maxWidth == 0) ? this._size.width: Math.min(this._maxWidth, this._size.width);
return new PKSize(a, this._size.height)
};
PKBarButtonItem.prototype.setSize = function(a) {
a.height = PKBarButtonItemHeight;
this.callSuper(a)
};
PKBarButtonItem.prototype.touchesBegan = function(a) {
if (this.type == PKBarButtonItemTypeFlexibleSpace || this.type == PKBarButtonItemTypeFixedSpace) {
a.preventDefault();
return
}
this.callSuper(a)
};
PKBarButtonItem.prototype.setMaxWidth = function(a) {
this.background.style.maxWidth = (a == 0) ? "inherit": PKUtils.px(a);
this._maxWidth = a;
if (this._width == 0) {
this.autoSizeTitle()
}
};
PKBarButtonItem.prototype.setWidth = function(a) {
if (a == 0) {
this.autoSizeTitle();
this.autoSizeImage();
this.positionImage()
} else {
this._width = a;
this.size = new PKSize(a, PKBarButtonItemHeight);
this.positionImage()
}
};
PKBarButtonItem.prototype.autoSizeTitle = function() {
if (this._title != "" && this.isDescendantOfView(PKRootView.sharedRoot)) {
this.layer.style.width = "auto";
var a = parseInt(window.getComputedStyle(this.layer).width);
this.size = new PKSize(a, this._size.height)
}
};
PKBarButtonItem.prototype.autoSizeImage = function() {
if (this._image !== null) {
var b = this.getBorderXOffsets();
var a = this._image.width + b.left + b.right;
this.size = new PKSize(a, this._size.height)
}
};
PKBarButtonItem.prototype.setTitle = function(a) {
this.background.innerText = a;
this._title = a;
if (this._width == 0) {
this.autoSizeTitle()
}
};
PKBarButtonItem.prototype.setImage = function(a) {
this.icon.src = a.url;
this._image = a;
if (a.loaded) {
this.positionImage()
} else {
a.addPropertyObserver("loaded", this)
}
};
PKBarButtonItem.prototype.getImageOffset = function() {
return new PKPoint(parseInt(this.icon.style.left), parseInt(this.icon.style.top))
};
PKBarButtonItem.prototype.setImageOffset = function(a) {
this.icon.style.left = PKUtils.px(a.x);
this.icon.style.top = PKUtils.px(a.y);
this.usesAutomaticImageOffset = false
};
PKBarButtonItem.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 PKPoint((this._size.width - this.icon.width) / 2, (PKBarButtonItemHeight - this.icon.height) / 2);
if (this._type == PKBarButtonItemTypeBack) {
b.x += PKBarButtonItemPointyXOffset
}
if (this._type == PKBarButtonItemTypeForward) {
b.x -= PKBarButtonItemPointyXOffset
}
this.imageOffset = b;
this.usesAutomaticImageOffset = true
};
PKBarButtonItem.prototype.setType = function(a) {
this.layer.removeClassName(this._type);
this.layer.addClassName(a);
this._type = a
};
PKBarButtonItem.prototype.setStyle = function(a) {
this.layer.removeClassName(this._style);
this.layer.addClassName(a);
this._style = a
};
PKBarButtonItem.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
}
};
PKBarButtonItem.prototype.handlePropertyChange = function(b, a) {
if (this._width == 0) {
this.autoSizeImage()
}
this.positionImage()
};
PKClass(PKBarButtonItem);
PKBarButtonItem.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++) {
PKUtils.preloadImageAsset("button/" + a[b] + ".png")
}
};
window.addEventListener("load", PKBarButtonItem.init, false);
const PKSearchBarHeight = 44;
const PKSearchBarStyleDefault = "default";
const PKSearchBarStyleBlack = "black";
const PKSearchBarStyleBlackTranslucent = "black-translucent";
const PKSearchBarTextDidChange = "searchBarTextDidChange";
const PKSearchBarTextDidBeginEditing = "searchBarTextDidBeginEditing";
const PKSearchBarTextDidEndEditing = "searchBarTextDidEndEditing";
const PKSearchBarCancelButtonClicked = "searchBarCancelButtonClicked";
const PKSearchBarShowsCancelButtonCSS = "shows-cancel-button";
const PKSearchBarDisplaysPlaceholder = "displays-placeholder";
PKSearchBar.inherits = PKView;
PKSearchBar.includes = [PKEventTriage];
PKSearchBar.synthetizes = ["style", "placeholder", "text", "showsCancelButton", "editing"];
function PKSearchBar() {
this.delegate = null;
this._style = PKSearchBarStyleDefault;
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(PKControlTouchUpInsideEvent, this, false);
this.emptyButton.addEventListener(PKControlTouchUpInsideEvent, this, false);
this.button.addPropertyObserver("size", this, "updateLayout");
this.autoresizesSubviews = false
}
PKSearchBar.prototype.createLayer = function() {
this.callSuper();
this.layer.addClassName("pk-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 PKBarButtonItem();
this.button.title = "Cancel";
this.addSubview(this.button);
this.emptyButton = new PKBarButtonItem(PKBarButtonItemTypePlain);
this.emptyButton.width = 19;
this.emptyButton.image = new PKImage(PKUtils.assetsPath + "pixel.png");
this.addSubview(this.emptyButton)
};
PKSearchBar.prototype.setSize = function(a) {
a.height = PKSearchBarHeight;
this.callSuper(a);
this.hasBeenExplicitelySized = true;
this.updateLayout()
};
PKSearchBar.prototype.updateLayout = function() {
if (!this.isDescendantOfView(PKRootView.sharedRoot)) {
return
}
var a = this.showsCancelButton ? (this.button.size.width + 5) : 0;
this.field.parentNode.style.right = PKUtils.px(a + 5);
this.emptyButton.layer.style.right = PKUtils.px(a + 10)
};
PKSearchBar.prototype.didMoveToSuperview = function() {
this.callSuper();
if (this.hasBeenExplicitelySized || this.superview === null) {
return
}
this.size = new PKSize(this.superview.size.width, PKSearchBarHeight);
this.hasBeenExplicitelySized = false
};
PKSearchBar.prototype.setStyle = function(a) {
this.layer.removeClassName(this._style);
this.layer.addClassName(a);
this._style = a
};
PKSearchBar.prototype.setPlaceholder = function(a) {
this._placeholder = a;
this.checkForPlaceholderDisplay()
};
PKSearchBar.prototype.getText = function(a) {
return this.field.value
};
PKSearchBar.prototype.setText = function(a) {
this.label.innerText = a;
this.field.value = a;
if (PKUtils.objectHasMethod(this.delegate, PKSearchBarTextDidChange)) {
this.delegate[PKSearchBarTextDidChange](this, a)
}
this.checkForPlaceholderDisplay()
};
PKSearchBar.prototype.setShowsCancelButton = function(a) {
if (this._showsCancelButton == a) {
return
}
this.layer[a ? "addClassName": "removeClassName"](PKSearchBarShowsCancelButtonCSS);
this._showsCancelButton = a;
this.updateLayout()
};
PKSearchBar.prototype.checkForPlaceholderDisplay = function() {
this.layer[this.text == "" ? "addClassName": "removeClassName"](PKSearchBarDisplaysPlaceholder);
if (this.text == "") {
this.label.innerText = this._placeholder
}
};
PKSearchBar.prototype.setEditing = function(a) {
this._editing = a;
this.field[a ? "focus": "blur"]()
};
PKSearchBar.prototype.handleFocus = function(a) {
if (PKUtils.objectHasMethod(this.delegate, PKSearchBarTextDidBeginEditing)) {
this.delegate[PKSearchBarTextDidBeginEditing](this)
}
this.editing = true
};
PKSearchBar.prototype.handleBlur = function(a) {
if (PKUtils.objectHasMethod(this.delegate, PKSearchBarTextDidEndEditing)) {
this.delegate[PKSearchBarTextDidEndEditing](this)
}
this.label.innerText = this.field.value;
this.checkForPlaceholderDisplay();
this.editing = false
};
PKSearchBar.prototype.handleInput = function(a) {
this.checkForPlaceholderDisplay();
if (PKUtils.objectHasMethod(this.delegate, PKSearchBarTextDidChange)) {
this.delegate[PKSearchBarTextDidChange](this, this.field.value)
}
};
PKSearchBar.prototype.handleSubmit = function(a) {
a.preventDefault();
this.editing = false
};
PKSearchBar.prototype.handleControlTouchUpInside = function(a) {
if (a.control === this.emptyButton) {
this.text = "";
this.checkForPlaceholderDisplay()
} else {
if (PKUtils.objectHasMethod(this.delegate, PKSearchBarCancelButtonClicked)) {
this.delegate[PKSearchBarCancelButtonClicked](this)
}
}
};
PKClass(PKSearchBar);
PKSearchBar.init = function() {
PKUtils.preloadImageAsset("search/background_default.png");
PKUtils.preloadImageAsset("search/cancel_touched.png")
};
window.addEventListener("load", PKSearchBar.init, false);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment