|
- /*
- * Utilities.js
- * Keynote HTML Player
- *
- * Responsibility: Tungwei Cheng
- * Copyright (c) 2009-2013 Apple Inc. All rights reserved.
- */
-
- var s = Class.create({
- initialize: function(){}
- });
-
- function getMobileOSVersionInfo() {
- var match = navigator.userAgent.match(/iPhone OS ([\d_]+)/) || navigator.userAgent.match(/iPad OS ([\d_]+)/) || navigator.userAgent.match(/CPU OS ([\d_]+)/);
- var versionInfo = { major: 0, minor: 0, point: 0 };
-
- if (match) {
- var release = match[1].split('_');
- versionInfo.major = parseInt(release[0]);
-
- if (release.length > 1) {
- versionInfo.minor = parseInt(release[1]);
- }
-
- if (release.length > 2) {
- versionInfo.point = parseInt(release[2]);
- }
- }
-
- return versionInfo;
- }
-
- function isMobileSafari() {
- if (navigator.userAgent.indexOf('iPod') != -1) {
- return true;
- }
- else if (navigator.userAgent.indexOf('iPhone') != -1) {
- return true;
- }
- else if (navigator.userAgent.indexOf('iPad') != -1) {
- return true;
- }
- else {
- return false;
- }
- }
-
- function isiPad() {
- return (navigator.userAgent.indexOf('iPad') != -1);
- }
-
- function getUrlParameter(paramterName) {
- paramterName = paramterName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
-
- var regExpPattern = "[\\?&]" + paramterName + "=([^&#]*)";
- var regExp = new RegExp(regExpPattern);
- var results = regExp.exec(window.location.href);
-
- if (results == null) {
- return "";
- } else {
- return results[1];
- }
- }
-
- function setElementProperty(node, propertyName, propertyValue) {
- if (browserPrefix == "ms") {
- node.style[propertyName] = propertyValue;
- } else {
- node.style.setProperty(propertyName, propertyValue, null);
- }
- }
-
- function setElementOpaque(element) {
- element.style.opacity = 1;
- }
-
- function setElementTransparent(element) {
- element.style.opacity = 0;
- }
-
- function setElementPosition(element, top, left, width, height) {
- if (element == null) {
- window.console.log("null element passed to setElementPosition " + top + ", " + left + ", " + width + ", " + height);
- return;
- }
- element.style.top = top + "px";
- element.style.left = left + "px";
- element.style.width = width + "px";
- element.style.height = height + "px";
- }
-
- function setElementRect(element, rect) {
- if (element == null) {
- return;
- }
- element.style.top = rect.y;
- element.style.left = rect.x;
- element.style.width = rect.width;
- element.style.height = rect.height;
- }
-
- function centerElementInDiv (element, elementWidth, elementHeight, divWidth, divHeight) {
- if (element == null) {
- return;
- }
-
- var top = (divHeight - elementHeight) / 2;
- var left = (divWidth - elementWidth) / 2;
-
- setElementPosition( element, top, left, elementWidth, elementHeight );
- }
-
- function showElement(element) {
- if (element == null) {
- return;
- }
- element.style.visibility = "visible";
- }
-
- function hideElement(element) {
- if (element == null) {
- return;
- }
- element.style.visibility = "hidden";
- }
-
- function runInNextEventLoop(codeBlock) {
- setTimeout(codeBlock, 100);
- }
-
- function ensureScaleFactorNotZero(scaleFactor) {
- // Mobile Safari doesn't like scale values of 0, force them to be 0.01
- if (scaleFactor == 0) {
- return 0.000001;
- } else {
- return scaleFactor;
- }
- }
-
- function scaleSizeWithinSize(sourceWidth, sourceHeight, destinationWidth, destinationHeight) {
- var scaledSize = {};
- var sourceAspectRatio = sourceWidth / sourceHeight;
- var destinationAspectRatio = destinationWidth / destinationHeight;
-
- if (sourceAspectRatio > destinationAspectRatio) {
- scaledSize.width = destinationWidth;
- scaledSize.height = sourceHeight * ( destinationWidth / sourceWidth );
- } else if (sourceAspectRatio < destinationAspectRatio) {
- scaledSize.width = sourceWidth * ( destinationHeight / sourceHeight );
- scaledSize.height = destinationHeight
- } else {
- scaledSize.width = destinationWidth;
- scaledSize.height = destinationHeight
- }
-
- return scaledSize;
- }
-
- function parseTransformMatrix(transformMatrix) {
- var parsedMatrix = [1,0,0,1,0,0];
-
- if (transformMatrix.indexOf( "matrix(" ) == 0) {
- var arrayString = transformMatrix.substring(7, transformMatrix.length - 1);
-
- parsedMatrix = arrayString.split(",");
- }
-
- return parsedMatrix;
- }
-
- function escapeTextureId(textureId) {
- var escapedTextureId = textureId.replace( /\./g, "-" );
-
- return escapedTextureId;
- }
-
- function unEscapeTextureId(textureId) {
- var escapedTextureId = textureId.replace( /\-/g, "." );
-
- return escapedTextureId;
- }
-
- var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
- var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
- function LZ(x) {return(x<0||x>9?"":"0")+x;}
-
- Object.extend(Date.prototype, {
- // ------------------------------------------------------------------
- // formatDate (date_object, format)
- // Returns a date in the output format specified.
- // The format string uses the same abbreviations as in getDateFromFormat()
- //
- // ------------------------------------------------------------------
- format: function(format) {
- format=format+"";
- var date = this ;
- var result="";
- var i_format=0;
- var c="";
- var token="";
- var y=date.getFullYear()+"";
- var M=date.getMonth()+1;
- var d=date.getDate();
- var E=date.getDay();
- var H=date.getHours();
- var m=date.getMinutes();
- var s=date.getSeconds();
- var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
- // Convert real date parts into formatted versions
- var value=new Object();
- if (y.length < 4) {
- y=""+(y-0+1900);
- }
- value["y"]=""+y;
- value["yyyy"]=y;
- value["yy"]=y.substring(2,4);
- value["M"]=M;
- value["MM"]=LZ(M);
- value["MMM"]=MONTH_NAMES[M-1];
- value["NNN"]=MONTH_NAMES[M+11];
- value["d"]=d;
- value["dd"]=LZ(d);
- value["E"]=DAY_NAMES[E+7];
- value["EE"]=DAY_NAMES[E];
- value["H"]=H;
- value["HH"]=LZ(H);
- if (H==0) {
- value["h"]=12;
- } else if (H>12) {
- value["h"]=H-12;
- } else {
- value["h"]=H;
- }
- value["hh"]=LZ(value["h"]);
- if (H>11) {
- value["K"]=H-12;
- } else {
- value["K"]=H;
- }
- value["k"]=H+1;
- value["KK"]=LZ(value["K"]);
- value["kk"]=LZ(value["k"]);
- if (H > 11) {
- value["a"]="PM";
- } else {
- value["a"]="AM";
- }
- value["m"]=m;
- value["mm"]=LZ(m);
- value["s"]=s;
- value["ss"]=LZ(s);
- while (i_format < format.length) {
- c=format.charAt(i_format);
- token="";
- while ((format.charAt(i_format)==c) && (i_format < format.length)) {
- token += format.charAt(i_format++);
- }
-
- if (value[token] != null) {
- result=result + value[token];
- } else {
- result=result + token;
- }
- }
- return result;
- }
- });
-
- function getHecklerElementsByTagName(xml, tagName) {
- return getElementsByTagNameNS(xml, tagName, 'urn:iwork:property', 'X:');
- }
-
- function getElementsByTagNameNS(xml, tagName, ns, prefix) {
- var nodes = null;
- if (xml.getElementsByTagNameNS) {
- nodes = xml.getElementsByTagNameNS(ns, tagName);
- } else {
- // IE7 Does not support getElementsByTagNameNS
- // So we have to do this silly IE7 workaround and prefix the Heckler
- // namespace to everything
- nodes = xml.getElementsByTagName(prefix + tagName);
- }
-
- return nodes;
- }
|