/*
* HelpPlacardController.js
* Keynote HTML Player
*
* Created by Tungwei Cheng
* Copyright (c) 2012-2013 Apple Inc. All rights reserved.
*/
var HelpPlacardController = Class.create({
initialize: function(domNode) {
//root node for the slide number control
this.domNode = domNode;
this.width = 822;
this.height = 603;
var itemList = [
{key: " ", text: kHelpPlacardNavigationTitle, header:true},
{key: "return/enter space → ↓ page down", text: kHelpPlacardAdvanceToNextBuild},
{key: "[ shift - page up shift - ←", text: kHelpPlacardGoBackToPreviousBuild},
{key: "] shift - →", text: kHelpPlacardAdvanceAndSkipBuild},
{key: "shift - page down shift - ↓ + =", text: kHelpPlacardAdvanceToNextSlide},
{key: "← ↑ - shift - ↑", text: kHelpPlacardGoBackToPreviousSlide},
{key: "home", text: kHelpPlacardGoToFirstSlide},
{key: "end", text: kHelpPlacardGoToLastSlide},
{key: "slide number + return/enter", text: kHelpPlacardGoToSpecificSlide},
{key: " ", text: kHelpPlacardOtherTitle, header: true},
{key: "? /", text: kHelpPlacardShowOrHideKeyboardShortcuts},
{key: "s", text: kHelpPlacardShowOrHideTheCurrentSlideNumber},
{key: "esc q", text: kHelpPlacardQuitPresentationMode}
];
this.helpPlacardTitleBar = new HelpPlacardTitleBar();
this.helpPlacardContentPanel = new HelpPlacardContentPanel(itemList);
this.helpPlacardFooter = new HelpPlacardFooter();
this.domNode.appendChild(this.helpPlacardTitleBar.domNode);
this.domNode.appendChild(this.helpPlacardContentPanel.domNode);
this.domNode.appendChild(this.helpPlacardFooter.domNode);
this.isShowing = false;
},
handleClickEvent: function(event) {
event = event || window.event;
var target = event.target || event.srcElement;
// stop event from propagating up
if (this.isShowing) {
if (browserPrefix === "ms") {
event.cancelBubble = true;
} else {
event.stopPropagation();
}
}
this.hide();
},
setPosition: function(left, top) {
this.domNode.style.left = left + "px";
this.domNode.style.top = top + "px"
},
show: function() {
this.isShowing = true;
this.domNode.style.display = "block";
this.domNode.style.opacity = 1;
},
hide: function() {
this.isShowing = false;
this.domNode.style.display = "none";
this.domNode.style.opacity = 0;
},
registerDragEvents: function() {
this.drag = this.dragging.bindAsEventListener(this);
this.dragStop = this.stopDragging.bindAsEventListener(this);
Event.observe(this.domNode, "mousedown", this.startDragging.bindAsEventListener(this));
},
startDragging: function(event) {
this.startX = Event.pointerX(event);
this.startY = Event.pointerY(event);
this.left = parseInt(this.domNode.style.left);
this.top = parseInt(this.domNode.style.top);
Event.observe(document, "mousemove", this.drag);
Event.observe(this.domNode, "mouseup", this.dragStop);
},
dragging: function(event) {
var x = Event.pointerX(event);
var y = Event.pointerY(event);
this.domNode.style.left = (x - this.startX + this.left) + "px";
this.domNode.style.top = (y - this.startY + this.top) + "px";
Event.stop(event);
},
stopDragging: function(event) {
Event.stopObserving(document, "mousemove", this.drag);
Event.stopObserving(this.domNode, "mouseup", this.dragStop);
Event.stop(event);
}
});
var HelpPlacardTitleBar = Class.create({
initialize: function() {
this.domNode = document.createElement("div");
this.domNode.setAttribute("class", "helpPlacardTitleBar");
this.closeButton = document.createElement("div");
this.closeButton.setAttribute("class", "helpPlacardCloseButton");
this.title = document.createElement("div");
this.title.setAttribute("class", "helpPlacardTitle");
this.title.innerHTML = kHelpPlacardMainTitle;
this.domNode.appendChild(this.closeButton);
this.domNode.appendChild(this.title);
}
});
var HelpPlacardContentPanel = Class.create({
initialize: function(itemList) {
this.domNode = document.createElement("div");
this.domNode.setAttribute("class", "helpPlacardContentPanel");
for (var i = 0, length = itemList.length; i < length; i++) {
var item = itemList[i];
var div = document.createElement("div");
var leftDiv, rightDiv;
if (item.header) {
div.setAttribute("class", "helpPlacardHeader");
leftDiv = document.createElement("div");
leftDiv.setAttribute("class", "helpPlacardLeftHeaderItem");
leftDiv.innerHTML = item.text;
div.appendChild(leftDiv);
}
else {
div.setAttribute("class", "helpPlacardItem");
leftDiv = document.createElement("div");
leftDiv.setAttribute("class", "helpPlacardRightItem");
leftDiv.innerHTML = item.key;
rightDiv = document.createElement("div");
rightDiv.setAttribute("class", "helpPlacardLeftItem");
rightDiv.innerHTML = item.text;
div.appendChild(leftDiv);
div.appendChild(rightDiv);
}
this.domNode.appendChild(div);
}
}
});
var HelpPlacardFooter = Class.create({
initialize: function() {
this.domNode = document.createElement("div");
this.domNode.setAttribute("class", "helpPlacardFooter");
var div = document.createElement("div");
div.innerHTML = "Acknowledgements";
div.setAttribute("class", "helpPlacardAcknowledgementsButton");
Event.observe(div, "click", this.handleClickEvent.bind(this));
this.domNode.appendChild(div);
},
handleClickEvent: function(event) {
event = event || window.event;
// stop event from propagating up
if (browserPrefix === "ms") {
event.cancelBubble = true;
} else {
event.stopPropagation();
}
window.open("Acknowledgements.pdf", "_Acknowledgements");
}
});