From c448e123ebc625d0b8f2768d4530d9347702cc41 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Wed, 24 Jul 2013 13:56:08 +0000 Subject: [PATCH] --- js/libs/fluidbook/fluidbook.bookmarks.js | 4 +- js/libs/fluidbook/fluidbook.coquillette.js | 2 +- js/libs/fluidbook/fluidbook.help.js | 2 +- js/libs/fluidbook/fluidbook.js | 62 +- js/libs/fluidbook/fluidbook.loader.js | 64 +- js/libs/fluidbook/fluidbook.nav.js | 14 +- js/libs/fluidbook/fluidbook.resize.js | 4 +- js/libs/fluidbook/fluidbook.support.js | 32 +- js/libs/fluidbook/views/fluidbook.index.js | 4 +- js/libs/gal/gal.filesystem.js | 262 ++++++++ js/libs/gal/gal.js | 321 +++++++++ js/libs/gsap/TimelineLite.js | 48 +- js/libs/gsap/TimelineMax.js | 51 +- js/libs/gsap/TweenLite.js | 90 ++- js/libs/gsap/TweenMax.js | 302 +++++---- js/libs/gsap/plugins/AttrPlugin.js | 9 +- js/libs/gsap/plugins/CSSPlugin.js | 173 +++-- js/libs/gsap/plugins/CSSRulePlugin.js | 12 +- js/libs/gsap/plugins/KineticPlugin.js | 6 +- js/libs/gsap/plugins/TextPlugin.js | 18 +- js/libs/gsap/utils/Draggable.js | 747 +++++++++++++++++++++ js/main.js | 34 +- style/fluidbook.css | 21 +- style/fonts/Ubuntu-B-webfont.woff | Bin 25168 -> 0 bytes style/fonts/Ubuntu-BI-webfont.woff | Bin 27996 -> 0 bytes style/fonts/Ubuntu-L-webfont.woff | Bin 25684 -> 0 bytes style/fonts/Ubuntu-LI-webfont.woff | Bin 29200 -> 0 bytes style/fonts/Ubuntu-M-webfont.woff | Bin 25756 -> 0 bytes style/fonts/Ubuntu-MI-webfont.woff | Bin 28500 -> 0 bytes style/fonts/Ubuntu-R-webfont.woff | Bin 25816 -> 0 bytes style/fonts/Ubuntu-RI-webfont.woff | Bin 28888 -> 0 bytes style/fonts/slkscr-webfont.woff | Bin 5892 -> 0 bytes 32 files changed, 1886 insertions(+), 396 deletions(-) create mode 100644 js/libs/gal/gal.filesystem.js create mode 100644 js/libs/gal/gal.js create mode 100644 js/libs/gsap/utils/Draggable.js delete mode 100644 style/fonts/Ubuntu-B-webfont.woff delete mode 100644 style/fonts/Ubuntu-BI-webfont.woff delete mode 100644 style/fonts/Ubuntu-L-webfont.woff delete mode 100644 style/fonts/Ubuntu-LI-webfont.woff delete mode 100644 style/fonts/Ubuntu-M-webfont.woff delete mode 100644 style/fonts/Ubuntu-MI-webfont.woff delete mode 100644 style/fonts/Ubuntu-R-webfont.woff delete mode 100644 style/fonts/Ubuntu-RI-webfont.woff delete mode 100644 style/fonts/slkscr-webfont.woff diff --git a/js/libs/fluidbook/fluidbook.bookmarks.js b/js/libs/fluidbook/fluidbook.bookmarks.js index dc35c8e0..cc121fdb 100644 --- a/js/libs/fluidbook/fluidbook.bookmarks.js +++ b/js/libs/fluidbook/fluidbook.bookmarks.js @@ -408,7 +408,7 @@ FluidbookBookmarks.prototype = { } index += '
'; - index += '
' + group.name + ''; + index += '
' + this.fluidbook.loader.getImage('data/thumbnails/p' + group.page + '.jpg') + '' + group.name + ''; if (this.fluidbook.bookmarks.enabled) { index += this.fluidbook.bookmarks.getBookmarkForPage(group.page, true, true); } @@ -426,7 +426,7 @@ FluidbookBookmarks.prototype = { for (i in pages) { var p = pages[i]; index += '
'; - index += '
' + this.fluidbook.physicalToVirtual(p) + ''; + index += '
' + this.fluidbook.loader.getImage('data/thumbnails/p' + p + '.jpg') + '' + this.fluidbook.physicalToVirtual(p) + ''; if (this.fluidbook.bookmarks.enabled) { index += this.fluidbook.bookmarks.getBookmarkForPage(p, true, true); } diff --git a/js/libs/fluidbook/fluidbook.coquillette.js b/js/libs/fluidbook/fluidbook.coquillette.js index 12b19d9c..d5ecbdc6 100644 --- a/js/libs/fluidbook/fluidbook.coquillette.js +++ b/js/libs/fluidbook/fluidbook.coquillette.js @@ -53,7 +53,7 @@ FluidbookCoquillette.prototype = { this.ctx.stroke(); }, pause: function() { - window.cancelAnimationFrame(this.raf); + TweenMax.killTweensOf(this); }, resize: function(ww, hh) { this.element.css({ diff --git a/js/libs/fluidbook/fluidbook.help.js b/js/libs/fluidbook/fluidbook.help.js index 21db77e5..07c2cc38 100644 --- a/js/libs/fluidbook/fluidbook.help.js +++ b/js/libs/fluidbook/fluidbook.help.js @@ -35,7 +35,7 @@ FluidbookHelp.prototype = { text = this.fluidbook.l10n.__('click once to zoom in, click again to zoom out') + '
' + this.fluidbook.l10n.__('roll the mouse wheel to zoom in/out'); } - help += '
'; + help += '
' + this.fluidbook.loader.getImage('data/images/help-' + name + '.' + ext, width * zoom, height * zoom); help += '

' + text + '

'; help += '
'; diff --git a/js/libs/fluidbook/fluidbook.js b/js/libs/fluidbook/fluidbook.js index 1a6b1951..a500a837 100644 --- a/js/libs/fluidbook/fluidbook.js +++ b/js/libs/fluidbook/fluidbook.js @@ -33,7 +33,7 @@ Fluidbook.prototype = { this.background = new FluidbookBackground(this); this.viewport = new FluidbookViewport(this.support) this.l10n = new FluidbookL10N(this, $_GET['lang']); - this.nav = new FluidbookNav(this); + this.video = new FluidbookVideo(this); this.bookmarks = new FluidbookBookmarks(this); this.index = new FluidbookIndex(this); @@ -48,6 +48,7 @@ Fluidbook.prototype = { this.displayOnePage = false; this.indexHTML = ''; this.transitionning = false; + this.gal = null; this.transitionAxis = 'x'; @@ -66,10 +67,8 @@ Fluidbook.prototype = { this.currentPage = -1; this.resize = new FluidbookResize(this); - this.help = new FluidbookHelp(this); this.coquillette = new FluidbookCoquillette(this); - this.stats = new FluidbookStats(this); this.stats.track(10); if (!this.support.isMobile) { @@ -83,6 +82,11 @@ Fluidbook.prototype = { this.displayLoader(); }, + reloadErrorImages: function() { + $('img').each(function() { + + }); + }, hideSplash: function() { if ($("#splash").length == 0) { return; @@ -96,12 +100,16 @@ Fluidbook.prototype = { this.ready(); $("#main").css('visibility', 'visible'); this.hideLoader(0, true); - $("#splash").css('opacity', 0).one(this.support.transitionendevents, function() { + $("#splash").css('opacity', 0).one(this.support.getTransitionEndEvent(), function() { $(this).remove(); }); }, ready: function() { + $("#main").css('display', 'block'); + this.nav = new FluidbookNav(this); + this.help = new FluidbookHelp(this); this.help.displayAtStartup(); + resize(); }, loadPlugins: function() { $.each(this.datas.plugins, function(k, plugin) { @@ -424,13 +432,16 @@ Fluidbook.prototype = { $this.beforeTransition(pageNr); // Do the transition - $(doublePage).addClass(nextFromClass + 'end').one($this.support.transitionendevents, function() { + $(doublePage).addClass(nextFromClass + 'end').one($this.support.getTransitionEndEvent(), function() { + if ($this.transitionning == false) { + return; + } if ($("#nextDoublePage").length == 0) { $("#pages").removeClass('_3dtransition'); - this.transitionning = false; + $this.transitionning = false; return; } - $(this).off($this.support.transitionendevents); + // Set the flat contents with the new page $this.loader.setContentsInDoublePage(doublePage, [pageNr, pageNr + 1], false, function() { $(doublePage).removeClass('_3d').removeClass(nextFromClass + 'start').removeClass(nextFromClass + 'end'); @@ -545,11 +556,13 @@ Fluidbook.prototype = { $this.loader.setContentsInDoublePage(doublePage, [pageNr, pageNr + 1], true, function() { $this.beforeTransition(pageNr); $("#currentDoublePage").addClass('_2d').addClass('axis_' + $this.transitionAxis).addClass(currentToClass); - $(doublePage).removeClass(nextFromClass).one($this.support.transitionendevents, function(event) { + $(doublePage).removeClass(nextFromClass).one($this.support.getTransitionEndEvent(), function(event) { + if ($this.transitionning == false) { + return; + } $("#currentDoublePage").remove(); $("#nextDoublePage").attr('id', 'currentDoublePage'); $this.afterTransition(pageNr); - $(this).off($this.support.transitionendevents); }); }); }); @@ -580,11 +593,13 @@ Fluidbook.prototype = { $this.loader.setContentsInDoublePage(doublePage, [pageNr, pageNr + 1], true, function() { $this.beforeTransition(pageNr); $("#currentDoublePage").addClass('axis_' + $this.transitionAxis).addClass('_2d').addClass(currentToClass); - $(doublePage).removeClass(nextFromClass).one($this.support.transitionendevents, function() { + $(doublePage).removeClass(nextFromClass).one($this.support.getTransitionEndEvent(), function() { + if ($this.transitionning == false) { + return; + } $("#currentDoublePage").remove(); $("#nextDoublePage").attr('id', 'currentDoublePage'); $this.afterTransition(pageNr); - $(this).off($this.support.transitionendevents); }); }); }); @@ -689,15 +704,22 @@ Fluidbook.prototype = { }, 20); }, _openView: function(view, param1, param2, callback) { + var $this = this; + if (this.gal != null && ['index', 'search', 'bookmark'].indexOf(view) >= 0) { + $(window).on('GALBundleLoaded', function(e, info) { + if (info.bundleName == 'thumbnails') { + $this.__openView(view, param1, param2, callback); + } + }); + this.gal.download('thumbnails'); + } else { + this.__openView(view, param1, param2, callback); + } + }, + __openView: function(view, param1, param2, callback) { var $this = this; var camelView = view.charAt(0).toUpperCase() + view.substr(1); - /*if ($('.mview:visible').length > 0) { - this.closeView(function() { - $this._openView(view, param1, param2, callback); - }); - return; - }*/ var cb = function() { $this.openingView(callback); }; @@ -755,7 +777,7 @@ Fluidbook.prototype = { $(mview).show().removeClass('animate').transform(from); setTimeout(function() { - $(mview).one($this.support.transitionendevents, function() { + $(mview).one($this.support.getTransitionEndEvent(), function() { $("#main").hide(); $('body').addClass('view'); $(mview).removeClass('animate'); @@ -844,7 +866,7 @@ Fluidbook.prototype = { view += '
'; view += markup; view += '
'; - + $("#view").append('
' + view + '
'); if (callback != undefined) { @@ -1036,7 +1058,7 @@ Fluidbook.prototype = { if (animate && this.support.transitions2d) { setTimeout(function() { - $(mview).one($this.support.transitionendevents, function() { + $(mview).one($this.support.getTransitionEndEvent(), function() { $(this).remove(); callback(); }).addClass('animate').transform(to); diff --git a/js/libs/fluidbook/fluidbook.loader.js b/js/libs/fluidbook/fluidbook.loader.js index 3859afb5..3b2be5e3 100644 --- a/js/libs/fluidbook/fluidbook.loader.js +++ b/js/libs/fluidbook/fluidbook.loader.js @@ -5,6 +5,7 @@ function FluidbookLoader(fluidbook) { this.links = []; this.toPreload = []; this.numPreload = 6; + this.imagesErrors = []; if (this.fluidbook.imagesVersion) { this.numPreload += 6; } @@ -47,8 +48,7 @@ FluidbookLoader.prototype = { return; } - var imgback = new Image(); - $(imgback).one('load', function() { + this.backgrounds[preloadingPage] = this.loadImage(this.getBackgroundURL(preloadingPage), null, null, null, function() { if ($this.fluidbook.vectorTexts) { $this._loadTexts(preloadingPage, function() { $this.preloadPages(); @@ -57,8 +57,6 @@ FluidbookLoader.prototype = { $this.preloadPages(); } }); - imgback.src = this.getBackgroundURL(preloadingPage); - this.backgrounds[preloadingPage] = imgback; }, preloadAround: function(page) { var min = Math.max(1, page - 1); @@ -137,7 +135,7 @@ FluidbookLoader.prototype = { } shade += '.png'; - $(page).children(".shade").html(''); + $(page).children(".shade").html(this.loadImage('images/' + shade, this.fluidbook.datas.width / 4, this.fluidbook.datas.height)); $(page).children('.clinks').html(this.fluidbook.datas.clinks[pageNr]); this.fluidbook.highlightSearchTerms(pageNr); callback(); @@ -159,8 +157,8 @@ FluidbookLoader.prototype = { } shade += '.png'; $(page).children('.clinks').html(this.fluidbook.datas.clinks[pageNr]); - $(page).children(".shade").html(''); -}, + $(page).children(".shade").html(this.loadImage('images/' + shade, this.fluidbook.datas.width / 4, this.fluidbook.datas.height)); + }, loadLeftPage: function(page, doublePage, callback) { if (page > 0) { this.loadPage(page, doublePage, 'left', callback); @@ -176,7 +174,7 @@ FluidbookLoader.prototype = { $(doublePage).find('.right').remove(); callback(); } -}, + }, getBackgroundURL: function(page) { var prefix = 'p'; if (this.fluidbook.imagesVersion) { @@ -200,12 +198,7 @@ FluidbookLoader.prototype = { if (this.backgrounds[page] != undefined) { callback(); } else { - var img = new Image(); - $(img).one('load', function() { - callback(); - }); - img.src = this.getBackgroundURL(page); - this.backgrounds[page] = img; + this.backgrounds[page] = this.loadImage(this.getBackgroundURL(page), null, null, null, callback); } }, loadTexts: function(pageNr, callback) { @@ -230,18 +223,47 @@ FluidbookLoader.prototype = { var w = this.fluidbook.datas.width / 0.75; var h = this.fluidbook.datas.height / 0.75; - var img = new Image(); - img.width = w * 2; - img.height = h * 2; - img.type = 'image/svg+xml'; - $(img).one('load', callback); - img.src = this.getTextsURL(pageNr); - this.texts[pageNr] = img; + this.texts[pageNr] = this.loadImage(this.getTextsURL(pageNr), w * 2, h * 2, 'image/svg+xml', callback); }, loadDatas: function(pageNr, callback) { var $this = this; this.loadTexts(pageNr, function() { $this.setBackground(pageNr, callback); }); + }, + getImage: function(src, width, height, type, callback) { + var img = this.loadImage(src, width, height, type, callback); + return $(img).get(0).outerHTML; + }, + loadImage: function(src, width, height, type, callback) { + var img = new Image(); + var $this = this; + if (callback && typeof callback == 'function') { + $(img).one('load', callback); + } + $(img).on('error', function() { + $this.imagesErrors.push(this); + }); + img.src = src; + if (width != undefined && width != null) { + img.width = width; + } + if (height != undefined && height != null) { + img.height = height; + } + if (type != undefined && type != null) { + img.type = type; + } + if (callback && typeof callback == 'function' && (img.complete || img.readyState == 'complete' || img.readyState == 4)) { + callback(); + } + + return $(img); + }, + retryErrorImages: function() { + $(this.imagesErrors).each(function() { + $(this).attr('src', $(this).attr('src')); + }); + this.imagesErrors = []; } }; \ No newline at end of file diff --git a/js/libs/fluidbook/fluidbook.nav.js b/js/libs/fluidbook/fluidbook.nav.js index d3120560..cec57c51 100644 --- a/js/libs/fluidbook/fluidbook.nav.js +++ b/js/libs/fluidbook/fluidbook.nav.js @@ -16,8 +16,7 @@ FluidbookNav.prototype = { if (this._dimensions[name] == undefined) { return ''; } - - return ''; + return this.fluidbook.loader.getImage(src, this._dimensions[name][0], this._dimensions[name][1]); }, addLink: function(name, href, id, help, before, c) { if ($("#nav").find('#' + id).length > 0) { @@ -60,17 +59,12 @@ FluidbookNav.prototype = { if (icon == 'home') { var homeURL = this.fluidbook.datas.home; if (this.fluidbook.datas.home == '%apphome%') { - homeURL = decodeURIComponent($_GET.home); + homeURL = decodeURIComponent(); } if (homeURL != '') { - this.addLink('nav-home', homeURL, 'home', 'home'); + this.addLink('nav-home', window.sessionStorage.getItem('apphome'), 'home', 'home'); } - $("#home").click(function() { - console.log('home click'); - window.history.go(-(window.history.length - 1)); - return false; - }); } else if (icon == 'index') { this.addLink('nav-index', '#/index', 'index', 'overview'); } else if (icon == 'chapters') { @@ -181,7 +175,7 @@ FluidbookNav.prototype = { $("#nav").append($("#search")); }, setAfterSearch: function() { - $("#nav").append('
'); + $("#nav").append('
' + this.fluidbook.loader.getImage('data/images/' + this.fluidbook.datas.afterSearch) + '
'); }, setInterface: function() { diff --git a/js/libs/fluidbook/fluidbook.resize.js b/js/libs/fluidbook/fluidbook.resize.js index 026bc9ae..6bf23440 100644 --- a/js/libs/fluidbook/fluidbook.resize.js +++ b/js/libs/fluidbook/fluidbook.resize.js @@ -133,7 +133,9 @@ FluidbookResize.prototype = { this.refw = fw; this.refh = fh; - this.fluidbook.help.resize(this.ww, this.hh, interfaceScale, navScale); + if (this.fluidbook.help) { + this.fluidbook.help.resize(this.ww, this.hh, interfaceScale, navScale); + } this.fluidbook.coquillette.resize(this.ww, this.hh); this.fluidbook.background.resize(this.ww, this.hh); diff --git a/js/libs/fluidbook/fluidbook.support.js b/js/libs/fluidbook/fluidbook.support.js index cb4189a5..d1ba7eab 100644 --- a/js/libs/fluidbook/fluidbook.support.js +++ b/js/libs/fluidbook/fluidbook.support.js @@ -7,10 +7,9 @@ function FluidbookSupport(fluidbook) { this.transitions3d = Modernizr.csstransforms3d && Modernizr.csstransitions && Modernizr.csstransformspreserve3d; this.transitions2d = Modernizr.csstransforms && Modernizr.csstransitions; - this.transitionendevents = ['transitionEnd', 'transitionend', 'mozTransitionEnd', 'webkitTransitionEnd', 'oTransitionEnd', 'msTransitionEnd'].join(' '); - + this.transitionendevent = null; this.initialResolution = 150; - + this.isMobile = isMobile(); this.SVG = Modernizr.svg && this.fluidbook.datas.mobileIconVector; @@ -27,6 +26,19 @@ function FluidbookSupport(fluidbook) { } FluidbookSupport.prototype = { + getTransitionEndEvent: function() { + if (this.transitionendevent == null) { + var transEndEventNames = { + 'WebkitTransition': 'webkitTransitionEnd', + 'MozTransition': 'transitionend', + 'OTransition': 'oTransitionEnd', + 'msTransition': 'MSTransitionEnd', + 'transition': 'transitionend' + }; + this.transitionendevent = transEndEventNames[ Modernizr.prefixed('transition') ]; + } + return this.transitionendevent; + }, hasNetwork: function() { if (navigator.onLine != undefined) { return navigator.onLine; @@ -115,14 +127,14 @@ FluidbookSupport.prototype = { var tzoom = DetectZoom.zoom(); var iz; if (this._orientation == 0) { - iz=this.initialZoomPortrait; - if(iz==0){ - iz=this.initialZoomPortrait=tzoom; + iz = this.initialZoomPortrait; + if (iz == 0) { + iz = this.initialZoomPortrait = tzoom; } - }else{ - iz=this.initialZoomLandscape; - if(iz==0){ - iz=this.initialZoomLandscape=tzoom; + } else { + iz = this.initialZoomLandscape; + if (iz == 0) { + iz = this.initialZoomLandscape = tzoom; } } return tzoom / iz; diff --git a/js/libs/fluidbook/views/fluidbook.index.js b/js/libs/fluidbook/views/fluidbook.index.js index 8255d3fd..1cdbb569 100644 --- a/js/libs/fluidbook/views/fluidbook.index.js +++ b/js/libs/fluidbook/views/fluidbook.index.js @@ -32,7 +32,7 @@ FluidbookIndex.prototype = { ix = ''; c = ''; if (i > 0) { - ix += '
' + this.fluidbook.physicalToVirtual(i) + ''; + ix += '
' + this.fluidbook.loader.getImage('data/thumbnails/p' + i + '.jpg') + '' + this.fluidbook.physicalToVirtual(i) + ''; if (this.fluidbook.bookmarks.enabled) { ix += this.fluidbook.bookmarks.getBookmarkForPage(i, true); } @@ -43,7 +43,7 @@ FluidbookIndex.prototype = { c = ' simple right'; } if (j < this.fluidbook.datas.pages) { - ix += '
' + this.fluidbook.physicalToVirtual(j) + ''; + ix += '
' + this.fluidbook.loader.getImage('data/thumbnails/p' + j + '.jpg') + '' + this.fluidbook.physicalToVirtual(j) + ''; if (this.fluidbook.bookmarks.enabled) { ix += this.fluidbook.bookmarks.getBookmarkForPage(j, true); } diff --git a/js/libs/gal/gal.filesystem.js b/js/libs/gal/gal.filesystem.js new file mode 100644 index 00000000..b5d3a290 --- /dev/null +++ b/js/libs/gal/gal.filesystem.js @@ -0,0 +1,262 @@ +/* + * Copyright 2011 Google Inc. All Rights Reserved. + + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/** + * @fileoverview The filesystem adapter used by Game Asset Loader. + * @author smus@google.com (Boris Smus) + */ + +(function(gal) { + var ROOT_DIR = 'gal'; + var DEFAULT_QUOTA = 1024 * 1024 * 100; + + function onError(error) { + var message; + switch (error.code) { + case FileError.NOT_FOUND_ERR: + message = 'not found'; + break; + case FileError.SECURITY_ERR: + message = 'security'; + break; + case FileError.ABORT_ERR: + message = 'abort'; + break; + case FileError.NOT_READABLE_ERR: + message = 'not readable'; + break; + case FileError.ENCODING_ERR: + message = 'encoding'; + break; + case FileError.NO_MODIFICATION_ALLOWED_ERR: + message = 'no modification allowed'; + break; + case FileError.INVALID_STATE_ERR: + message = 'invalid state'; + break; + case FileError.SYNTAX_ERR: + message = 'syntax'; + break; + case FileError.INVALID_MODIFICATION_ERR: + message = 'invalid modification'; + break; + case FileError.QUOTA_EXCEEDED_ERR: + message = 'quota exceeded'; + break; + case FileError.TYPE_MISMATCH_ERR: + message = 'type mismatch'; + break; + case FileError.PATH_EXISTS_ERR: + message = 'path exists'; + break; + + } + + + console.error('Filesystem error:', error.code + ' :: ' + message); + } + ; + + + + /** + * @private + * Helper to create file at path, as well as intermediate directories in the + * path. Behaves roughly like `mkdir -p` + * @param {DirectoryEntry} root Directory at the root of the gal. + * @param {array} folders Folder heirarchy to create. + * @param {function} callback Called when the directory structure is created + * @return DirectoryEntry to the directory that was just created. + */ + function createDir_(root, folders, callback) { + // Throw out './' or '/' and move on to prevent something like '/foo/.//bar'. + if (folders.length && (folders[0] === '.' || folders[0] === '')) { + folders = folders.slice(1); + } + + if (!folders.length) { + callback(root); + } + + + var f = folders.shift(); + + + root.getDirectory(f, {create: true}, function(dirEntry) { + if (folders.length > 0) { + createDir_(dirEntry, folders, callback); + } else { + callback(dirEntry); + } + }, onError); + } + ; + + /** + * @private + * Utility tools to emulate UNIX dirname. + * @param {string} path The path whose basename to get. + * @return {string} The contents of the path before the file name. + */ + function dirname_(path) { + var match = path.match(/(.*)\//); + return match && match[1] || ''; + } + ; + + /** + * @private + * Utility tools to emulate UNIX basename. + * @param {string} path The path whose basename to get. + * @return {string} The contents of the path after the file name. + */ + function basename_(path) { + return path.replace(/.*\//, ''); + } + ; + + + /** + * Class for serializing game assets (for GAL) using the filesystem API. + * @constructor + */ + function GALFS() { + // Table to store lookups from file path fragment to filesystem URL + this.lookupTable = {}; + } + ; + + /** + * Initializes the adapter. + * @param {function} callback The callback to call once the adapter has been + * initialized. + * @param {string} opt_quota The quota (in bytes) to request (optional). + */ + GALFS.prototype.init = function(callback, opt_quota) { + // requestFileSystem and storageInfo shims + var requestFileSystem = window.requestFileSystem || + window.webkitRequestFileSystem; + var storageInfo = window.storageInfo || window.webkitStorageInfo; + + var quota = opt_quota || DEFAULT_QUOTA; + + var that = this; + // Callback when the filesystem has been initialized + var onInitFs = function(fs) { + that.fs = fs; + + // Create a directory for the root of the GAL + fs.root.getDirectory(ROOT_DIR, {create: true}, function(dirEntry) { + that.root = dirEntry; + callback(); + }, onError); + }; + + // Callback when the filesystem API has granted quota + var quotaCallback = function(grantedBytes) { + var persistent = LocalFileSystem.PERSISTENT; + // Save grantedBytes in the adapter + that.grantedBytes = grantedBytes; + // Once quota is grantedBytes, initialize a filesystem + requestFileSystem(persistent, 0, onInitFs, onError); + }; + + if (storageInfo != undefined) { + // Get quota + storageInfo.requestQuota(window.PERSISTENT, quota, + quotaCallback, onError); + } else { + quotaCallback(0); + } + + }; + + /** + * Saves an asset at the given URL to the filesystem API callback when + * successfully saved. + * @param {string} key The key path to use for storing the asset. + * @param {string} url The URL to the asset. + * @param {function} callback The function to call when the asset was saved. + * @param {function} failCallback The function to call when an error occurred. + */ + GALFS.prototype.saveAsset = function(key, url, callback, failCallback) { + // BlobBuilder shim + var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder; + + var root = this.root; + var lookupTable = this.lookupTable; + + createDir_(root, dirname_(key).split('/'), function(dir) { + var file = basename_(key); + dir.getFile(file, {create: true}, function(fileEntry) { + var fileTransfer = new FileTransfer(); + fileTransfer.download(url, fileEntry.fullPath, function(entry) { + lookupTable[key] = entry.toURL(); + callback(); + }, failCallback); + }, failCallback); + }); + + }; + + /** + * Gets the filesystem path for the asset stored at the given URL. + * @param {string} key The key path to the asset. + * @return {string} URL to the filesystem. + */ + GALFS.prototype.getAssetUrl = function(key) { + return this.lookupTable[key]; + }; + + /** + * Checks if a file with the specified key exists in the filesystem. + * @param {string} key The key path to the asset. + * @param {function} callback The callback to call if the file exists. + * @param {function} failCallback The callback to call if the file + * doesn't exist. + */ + GALFS.prototype.checkAsset = function(key, callback, failCallback) { + var lookupTable = this.lookupTable; + this.root.getFile(key, {}, function(fileEntry) { + // Save the file in the lookup table. + lookupTable[key] = fileEntry.toURL(); + callback(); + }, failCallback); + }; + + /** + * Clears everything out of the root directory. Mostly for unit testing. + */ + GALFS.prototype.clear = function() { + // Remove the root directory + this.root.removeRecursively(function() { + }, onError); + + var that = this; + // And then recreate it + this.fs.root.getDirectory(ROOT_DIR, {create: true}, function(dirEntry) { + that.root = dirEntry; + }, onError); + }; + + if (!gal) { + throw 'Game asset loader needs to be loaded before loading the fs adapter'; + } + + gal.adapterClass = GALFS; + +}(GameAssetLoader)); diff --git a/js/libs/gal/gal.js b/js/libs/gal/gal.js new file mode 100644 index 00000000..8835c773 --- /dev/null +++ b/js/libs/gal/gal.js @@ -0,0 +1,321 @@ +/* + * Copyright 2011 Google Inc. All Rights Reserved. + + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/** + * @fileoverview Asset loader library. + * @author smus@google.com (Boris Smus) + */ +(function(exports) { + + /** + * @constructor + * @param {Object} manifest URL to manifest file. + */ + var GAL = function(manifest) { + this._manifest = manifest; + // Dictionary of arrays of all of the bundles contained in the manifest. + this.bundles = {}; + // Array of bundle names in the order that they appear in the manifest. + this.bundleOrder = []; + // Table of callbacks, per bundle. + this.loaded = {}; + this.progress = {}; + this.error = {}; + }; + + /** + * Initializes loader. + * @param {Function} callback called when the library finishes loading the + * manifest. + */ + GAL.prototype.init = function(callback) { + var that = this; + finishInit_.call(that, this._manifest, callback) + }; + + /** + * Downloads assets contained in the named bundle. + * @param {string} bundleName name of single bundle to download. + */ + GAL.prototype.download = function(bundleName) { + var bundle = this.bundles[bundleName]; + + if (!bundle) { + // Attempting to download invalid bundle. + throw "Invalid bundle specified"; + } + var that = this; + + + // If offline, check for downloaded resources, and if they exist, callback. + this.check(bundleName, function(result) { + if (result.success) { + // Already downloaded. Success! + fireCallback_(that.loaded, bundleName, { + success: true, + cached: true, + bundleName: bundleName + }); + } else { + if (!that.online()) { + // Otherwise, since we're offline, error out. + fireCallback_(that.error, bundleName, { + error: 'Missing resources cant be downloaded while offline' + }); + } else { + // Setup a loop via callback chaining. + (function loop(index) { + // If we've finished loading all of the assets in the bundle. + if (index == bundle.length) { + fireCallback_(that.loaded, bundleName, { + bundleName: bundleName, + success: true + }); + return; + } + + var key = bundle[index]; + // Get the full url to the asset. + var url = that.manifest.assetRoot + key; + // Fetch full url and store it locally. + that.adapter.saveAsset(key, url, function() { + fireCallback_(that.progress, bundleName, { + current: index + 1, + total: bundle.length + }); + // Iterate to the next file. + loop(index + 1); + }); + + })(0); + } + } + }); + }; + + + + + /** + * Adds a callback to fire when a bundle has been loaded. + * @param {string} opt_bundleName Name of bundle to monitor (if none specified, + * monitor all bundles). + * @param {function} callback Called after bundle was downloaded. + */ + GAL.prototype.onLoaded = function(opt_bundleName, callback) { + addCallback_(this.loaded, opt_bundleName, callback); + }; + + /** + * Adds a callback to fire when a bundle's downloading has progressed. + * @param {string} opt_bundleName Name of bundle to monitor (if none specified, + * monitor all bundles). + * @param {function} callback Called after bundle download progressed. + */ + GAL.prototype.onProgress = function(opt_bundleName, callback) { + addCallback_(this.progress, opt_bundleName, callback); + }; + + /** + * Adds a callback to fire when a bundle's downloading has failed + * @param {string} opt_bundleName Name of bundle to monitor (if none specified, + * monitor all bundles). + * @param {function} callback Called after bundle download failed. + */ + GAL.prototype.onError = function(opt_bundleName, callback) { + addCallback_(this.error, opt_bundleName, callback); + }; + + /** + * Checks if a bundle is already downloaded. + * @param {string} bundleName Name of bundle to check. + * @param {function} callback Called with the result. + */ + GAL.prototype.check = function(bundleName, callback) { + var bundle = this.bundles[bundleName]; + if (!bundle) { + callback({success: false}); + return; + } + + var adapter = this.adapter; + (function loop(index) { + // If we've finished loading all of the assets in the bundle. + if (index == bundle.length) { + callback({success: true}); + return; + } + var key = bundle[index]; + adapter.checkAsset(key, function() { + // Iterate to the next file. + loop(index + 1); + }, function() { + // Failure. + callback({success: false}); + }); + + })(0); + }; + + /** + * Gets URL to loaded asset. + * @param {string} assetPath path of the asset relative to the manifest + * root. + * @return {string} url to the asset in the local filesystem. + * @throws {exception} if the asset doesn't actually exist. + */ + GAL.prototype.get = function(assetPath) { + return this.adapter.getAssetUrl(assetPath) || null; + }; + + /** + * Gets the last cached time for an asset at a given path. + * @param {string} assetPath relative path of asset. + * @return {number} UNIX time of the last time the asset was cached. + */ + GAL.prototype.cacheTime = function(assetPath) { + // TODO(smus): implement me! + return Math.random(); + }; + + /** + * @return {Boolean} true iff the browser is online. + */ + GAL.prototype.online = function() { + return navigator.onLine; + }; + + GAL.prototype.getRootURL = function() { + return this.adapter.root.toURL(); + } + + + /** + * @private + * Sets the manifest and parses out bundles and bundle order. + * @param {function} callback Called when the adapter has initialized. + */ + function initAdapter_(callback) { + this.adapter = new GAL.adapterClass(); + this.adapter.init(function() { + callback(); + }); + } + + /** + * @private + * Fetches JSON at a URL and calls the callback with the parsed object. + * @param {object} manifest The manifest object. + */ + function setManifest_(manifest) { + this.manifest = manifest; + // Set this.bundles object and this.bundleOrder array + for (var i = 0, bundle; bundle = manifest.bundles[i]; ++i) { + this.bundles[bundle.name] = bundle.contents; + this.bundleOrder.push(bundle.name); + } + } + + /** + * @private + * Initializes the adapter and assigns the manifest. + * Starts downloading assets if the manifest is set to autoDownload. + * @param {object} manifest The manifest object. + * @param {function} callback Called when the initialization is finished. + */ + function finishInit_(manifest, callback) { + var context = this; + initAdapter_.call(context, function() { + setManifest_.call(context, manifest); + // Optionally, start auto-download. + if (manifest.autoDownload && context.online()) { + downloadAll_.call(context); + } + callback(); + }); + } + + /** + * @private + * Adds a callback associated with a bundle name. + * @param {object} callbacks an object associated with an event type + * (ex. bundle loaded, bundle load progress updated, bundle failed). + * @param {string} bundleName the name of the bundle to monitor. If set + * to "*", all bundles will be monitored. + * @param {function} callback the function to call. + */ + function addCallback_(callbacks, bundleName, callback) { + if (typeof bundleName == "function") { + // bundleName is optional, and may be a callback instead. + callback = bundleName; + bundleName = '*'; + } + if (!callbacks[bundleName]) { + // Add an empty array. + callbacks[bundleName] = []; + } + + callbacks[bundleName].push(callback); + } + + /** + * @private + * Fires callbacks of a given type for a certain bundle. + * @param {object} object dictionary of callbacks. + * @param {string} bundleName string with the name of the bundle. + * @param {object} params to call the callback with. + */ + function fireCallback_(callbacks, bundleName, params) { + // Fire the principle callbacks, indexed by given bundleName. + fireCallbackHelper_(callbacks, bundleName, params); + // Also fire all * callbacks. + fireCallbackHelper_(callbacks, '*', params); + } + function fireCallbackHelper_(object, bundleName, params) { + var callbacks = object[bundleName]; + if (callbacks) { + for (var i = 0, callback; callback = callbacks[i]; ++i) { + callbacks[i](params); + } + } + } + + /** + * @private + * Starts downloading all of the assets in the manifest, in order. + */ + function downloadAll_() { + var that = this; + // Start by downloading the first bundle, then download subsequent ones. + (function loop(bundleIndex) { + if (bundleIndex == that.bundleOrder.length) { + // We're done downloading stuff! + return; + } + var bundleName = that.bundleOrder[bundleIndex]; + that.onLoaded(bundleName, function() { + // Once bundle is loaded, load the next bundle. + loop(bundleIndex + 1); + }); + that.download(bundleName); + })(0); + } + + exports.GameAssetLoader = GAL; + +})(window); + diff --git a/js/libs/gsap/TimelineLite.js b/js/libs/gsap/TimelineLite.js index 1128f444..b56cf5f2 100644 --- a/js/libs/gsap/TimelineLite.js +++ b/js/libs/gsap/TimelineLite.js @@ -1,6 +1,6 @@ /*! - * VERSION: beta 1.9.8 - * DATE: 2013-06-05 + * VERSION: beta 1.10.1 + * DATE: 2013-07-10 * UPDATES AND DOCS AT: http://www.greensock.com * * @license Copyright (c) 2008-2013, GreenSock. All rights reserved. @@ -24,25 +24,17 @@ this._sortChildren = true; this._onUpdate = this.vars.onUpdate; var v = this.vars, - i = _paramProps.length, - j, a; - while (--i > -1) { - a = v[_paramProps[i]]; - if (a) { - j = a.length; - while (--j > -1) { - if (a[j] === "{self}") { - a = v[_paramProps[i]] = a.concat(); //copy the array in case the user referenced the same array in multiple timelines/tweens (each {self} should be unique) - a[j] = this; - } - } + val, p; + for (p in v) { + val = v[p]; + if (val instanceof Array) if (val.join("").indexOf("{self}") !== -1) { + v[p] = this._swapSelfInParams(val); } } if (v.tweens instanceof Array) { this.add(v.tweens, 0, v.align, v.stagger); } }, - _paramProps = ["onStartParams","onUpdateParams","onCompleteParams","onReverseCompleteParams","onRepeatParams"], _blankArray = [], _copy = function(vars) { var copy = {}, p; @@ -51,10 +43,16 @@ } return copy; }, + _pauseCallback = function(tween, callback, params, scope) { + tween._timeline.pause(tween._startTime); + if (callback) { + callback.apply(scope || tween._timeline, params || _blankArray); + } + }, _slice = _blankArray.slice, p = TimelineLite.prototype = new SimpleTimeline(); - TimelineLite.version = "1.9.8"; + TimelineLite.version = "1.10.1"; p.constructor = TimelineLite; p.kill()._gc = false; @@ -76,7 +74,7 @@ if (typeof(targets) === "string") { targets = TweenLite.selector(targets) || targets; } - if (!(targets instanceof Array) && targets.length && targets[0] && targets[0].nodeType && targets[0].style) { //senses if the targets object is a selector. If it is, we should translate it into an array. + if (!(targets instanceof Array) && targets.length && targets !== window && targets[0] && (targets[0] === window || (targets[0].nodeType && targets[0].style && !targets.nodeType))) { //senses if the targets object is a selector. If it is, we should translate it into an array. targets = _slice.call(targets, 0); } stagger = stagger || 0; @@ -235,6 +233,10 @@ this._labels[label] = this._parseTimeOrLabel(position); return this; }; + + p.addPause = function(position, callback, params, scope) { + return this.call(_pauseCallback, ["{self}", callback, params, scope], this, position); + }; p.removeLabel = function(label) { delete this._labels[label]; @@ -298,8 +300,7 @@ if (this._gc) { this._enabled(true, false); } - this._active = !this._paused; - var totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(), + var totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(), prevTime = this._time, prevStart = this._startTime, prevTimeScale = this._timeScale, @@ -345,10 +346,15 @@ } else if (!this._initted) { this._initted = true; } + + if (!this._active) if (!this._paused && this._time !== prevTime && time > 0) { + this._active = true; //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example. + } + if (prevTime === 0) if (this.vars.onStart) if (this._time !== 0) if (!suppressEvents) { this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || _blankArray); } - + if (this._time >= prevTime) { tween = this._first; while (tween) { @@ -356,7 +362,7 @@ if (this._paused && !prevPaused) { //in case a tween pauses the timeline when rendering break; } else if (tween._active || (tween._startTime <= this._time && !tween._paused && !tween._gc)) { - + if (!tween._reversed) { tween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force); } else { diff --git a/js/libs/gsap/TimelineMax.js b/js/libs/gsap/TimelineMax.js index 9c20e673..e42d34a9 100644 --- a/js/libs/gsap/TimelineMax.js +++ b/js/libs/gsap/TimelineMax.js @@ -1,6 +1,6 @@ /*! - * VERSION: beta 1.9.8 - * DATE: 2013-06-05 + * VERSION: beta 1.10.1 + * DATE: 2013-07-10 * UPDATES AND DOCS AT: http://www.greensock.com * * @license Copyright (c) 2008-2013, GreenSock. All rights reserved. @@ -12,6 +12,8 @@ (window._gsQueue || (window._gsQueue = [])).push( function() { + "use strict"; + window._gsDefine("TimelineMax", ["TimelineLite","TweenLite","easing.Ease"], function(TimelineLite, TweenLite, Ease) { var TimelineMax = function(vars) { @@ -37,7 +39,7 @@ p.constructor = TimelineMax; p.kill()._gc = false; - TimelineMax.version = "1.9.8"; + TimelineMax.version = "1.10.1"; p.invalidate = function() { this._yoyo = (this.vars.yoyo === true); @@ -102,7 +104,6 @@ if (this._gc) { this._enabled(true, false); } - this._active = !this._paused; var totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(), dur = this._duration, prevTime = this._time, @@ -238,6 +239,10 @@ } else if (!this._initted) { this._initted = true; } + + if (!this._active) if (!this._paused && this._totalTime !== prevTotalTime && time > 0) { + this._active = true; //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example. + } if (prevTotalTime === 0) if (this.vars.onStart) if (this._totalTime !== 0) if (!suppressEvents) { this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || _blankArray); @@ -459,25 +464,17 @@ this._sortChildren = true; this._onUpdate = this.vars.onUpdate; var v = this.vars, - i = _paramProps.length, - j, a; - while (--i > -1) { - a = v[_paramProps[i]]; - if (a) { - j = a.length; - while (--j > -1) { - if (a[j] === "{self}") { - a = v[_paramProps[i]] = a.concat(); //copy the array in case the user referenced the same array in multiple timelines/tweens (each {self} should be unique) - a[j] = this; - } - } + val, p; + for (p in v) { + val = v[p]; + if (val instanceof Array) if (val.join("").indexOf("{self}") !== -1) { + v[p] = this._swapSelfInParams(val); } } if (v.tweens instanceof Array) { this.add(v.tweens, 0, v.align, v.stagger); } }, - _paramProps = ["onStartParams","onUpdateParams","onCompleteParams","onReverseCompleteParams","onRepeatParams"], _blankArray = [], _copy = function(vars) { var copy = {}, p; @@ -486,10 +483,16 @@ } return copy; }, + _pauseCallback = function(tween, callback, params, scope) { + tween._timeline.pause(tween._startTime); + if (callback) { + callback.apply(scope || tween._timeline, params || _blankArray); + } + }, _slice = _blankArray.slice, p = TimelineLite.prototype = new SimpleTimeline(); - TimelineLite.version = "1.9.8"; + TimelineLite.version = "1.10.1"; p.constructor = TimelineLite; p.kill()._gc = false; @@ -511,7 +514,7 @@ if (typeof(targets) === "string") { targets = TweenLite.selector(targets) || targets; } - if (!(targets instanceof Array) && targets.length && targets[0] && targets[0].nodeType && targets[0].style) { //senses if the targets object is a selector. If it is, we should translate it into an array. + if (!(targets instanceof Array) && targets.length && targets !== window && targets[0] && (targets[0] === window || (targets[0].nodeType && targets[0].style && !targets.nodeType))) { //senses if the targets object is a selector. If it is, we should translate it into an array. targets = _slice.call(targets, 0); } stagger = stagger || 0; @@ -671,6 +674,10 @@ return this; }; + p.addPause = function(position, callback, params, scope) { + return this.call(_pauseCallback, ["{self}", callback, params, scope], this, position); + }; + p.removeLabel = function(label) { delete this._labels[label]; return this; @@ -733,7 +740,6 @@ if (this._gc) { this._enabled(true, false); } - this._active = !this._paused; var totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(), prevTime = this._time, prevStart = this._startTime, @@ -780,6 +786,11 @@ } else if (!this._initted) { this._initted = true; } + + if (!this._active) if (!this._paused && this._time !== prevTime && time > 0) { + this._active = true; //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example. + } + if (prevTime === 0) if (this.vars.onStart) if (this._time !== 0) if (!suppressEvents) { this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || _blankArray); } diff --git a/js/libs/gsap/TweenLite.js b/js/libs/gsap/TweenLite.js index cbab8978..6d902410 100644 --- a/js/libs/gsap/TweenLite.js +++ b/js/libs/gsap/TweenLite.js @@ -1,6 +1,6 @@ /*! - * VERSION: beta 1.9.8 - * DATE: 2013-06-05 + * VERSION: beta 1.10.1 + * DATE: 2013-07-10 * UPDATES AND DOCS AT: http://www.greensock.com * * @license Copyright (c) 2008-2013, GreenSock. All rights reserved. @@ -462,15 +462,23 @@ } return this; }; + + p._swapSelfInParams = function(params) { + var i = params.length, + copy = params.concat(); + while (--i > -1) { + if (params[i] === "{self}") { + copy[i] = this; + } + } + return copy; + }; //----Animation getters/setters -------------------------------------------------------- p.eventCallback = function(type, callback, params, scope) { - if (type == null) { - return null; - } else if (type.substr(0,2) === "on") { - var v = this.vars, - i; + if ((type || "").substr(0,2) === "on") { + var v = this.vars; if (arguments.length === 1) { return v[type]; } @@ -478,17 +486,8 @@ delete v[type]; } else { v[type] = callback; - v[type + "Params"] = params; + v[type + "Params"] = ((params instanceof Array) && params.join("").indexOf("{self}") !== -1) ? this._swapSelfInParams(params) : params; v[type + "Scope"] = scope; - if (params) { - i = params.length; - while (--i > -1) { - if (params[i] === "{self}") { - params = v[type + "Params"] = params.concat(); //copying the array avoids situations where the same array is passed to multiple tweens/timelines and {self} doesn't correctly point to each individual instance. - params[i] = this; - } - } - } } if (type === "onUpdate") { this._onUpdate = callback; @@ -557,13 +556,15 @@ time = totalDuration; } this._startTime = (this._paused ? this._pauseTime : tl._time) - ((!this._reversed ? time : totalDuration - time) / this._timeScale); - if (!tl._dirty) { //for performance improvement. If the parent's cache is already dirty, it already took care of marking the anscestors as dirty too, so skip the function call here. + if (!tl._dirty) { //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here. this._uncache(false); } - if (!tl._active) { - //in case any of the anscestors had completed but should now be enabled... + //in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The startTime of that child would get pushed out, but one of the ancestors may have completed. + if (tl._timeline) { while (tl._timeline) { - tl.totalTime(tl._totalTime, true); + if (tl._timeline._time !== (tl._startTime + tl._totalTime) / tl._timeScale) { + tl.totalTime(tl._totalTime, true); + } tl = tl._timeline; } } @@ -624,9 +625,10 @@ if (!_tickerActive && !value) { _ticker.wake(); } - var raw = this._timeline.rawTime(), + var tl = this._timeline, + raw = tl.rawTime(), elapsed = raw - this._pauseTime; - if (!value && this._timeline.smoothChildTiming) { + if (!value && tl.smoothChildTiming) { this._startTime += elapsed; this._uncache(false); } @@ -634,7 +636,7 @@ this._paused = value; this._active = (!value && this._totalTime > 0 && this._totalTime < this._totalDuration); if (!value && elapsed !== 0 && this._duration !== 0) { - this.render(this._totalTime, true, true); + this.render((tl.smoothChildTiming ? this._totalTime : (raw - this._startTime) / this._timeScale), true, true); //in case the target's properties changed via some other tween or manual update by the user, we should force a render. } } if (this._gc && !value) { @@ -756,14 +758,14 @@ */ var TweenLite = _class("TweenLite", function(target, duration, vars) { Animation.call(this, duration, vars); - + if (target == null) { throw "Cannot tween a null target."; } this.target = target = (typeof(target) !== "string") ? target : TweenLite.selector(target) || target; - var isSelector = (target.jquery || (target.length && target[0] && target[0].nodeType && target[0].style && !target.nodeType)), + var isSelector = (target.jquery || (target.length && target !== window && target[0] && (target[0] === window || (target[0].nodeType && target[0].style && !target.nodeType)))), overwrite = this.vars.overwrite, i, targ, targets; @@ -784,7 +786,7 @@ targets.splice(i+1, 1); //to avoid an endless loop (can't imagine why the selector would return a string, but just in case) } continue; - } else if (targ.length && targ[0] && targ[0].nodeType && targ[0].style && !targ.nodeType) { //in case the user is passing in an array of selector objects (like jQuery objects), we need to check one more level and pull things out if necessary. Also note that elements pass all the criteria regarding length and the first child having style, so we must also check to ensure the target isn't an HTML node itself. targets.splice(i--, 1); this._targets = targets = targets.concat(_slice.call(targ, 0)); continue; @@ -794,7 +796,7 @@ _applyOverwrite(targ, this, null, 1, this._siblings[i]); } } - + } else { this._propLookup = {}; this._siblings = _register(target, this, false); @@ -807,13 +809,13 @@ } }, true), _isSelector = function(v) { - return (v.length && v[0] && v[0].nodeType && v[0].style && !v.nodeType); + return (v.length && v !== window && v[0] && (v[0] === window || (v[0].nodeType && v[0].style && !v.nodeType))); //we cannot check "nodeType" if the target is window from within an iframe, otherwise it will trigger a security error in some browsers like Firefox. }, _autoCSS = function(vars, target) { var css = {}, p; for (p in vars) { - if (!_reservedProps[p] && (!(p in target) || p === "x" || p === "y" || p === "width" || p === "height" || p === "className") && (!_plugins[p] || (_plugins[p] && _plugins[p]._autoCSS))) { //note: elements contain read-only "x" and "y" properties. We should also prioritize editing css width/height rather than the element's properties. + if (!_reservedProps[p] && (!(p in target) || p === "x" || p === "y" || p === "width" || p === "height" || p === "className" || p === "border") && (!_plugins[p] || (_plugins[p] && _plugins[p]._autoCSS))) { //note: elements contain read-only "x" and "y" properties. We should also prioritize editing css width/height rather than the element's properties. css[p] = vars[p]; delete vars[p]; } @@ -831,7 +833,7 @@ p._firstPT = p._targets = p._overwrittenProps = p._startAt = null; p._notifyPluginsOfEnabled = false; - TweenLite.version = "1.9.8"; + TweenLite.version = "1.10.1"; TweenLite.defaultEase = p._ease = new Ease(null, null, 1, 1); TweenLite.defaultOverwrite = "auto"; TweenLite.ticker = _ticker; @@ -1050,19 +1052,14 @@ if (target == null) { return false; } - if (!this.vars.css) if (target.style) if (target.nodeType) if (_plugins.css) if (this.vars.autoCSS !== false) { //it's so common to use TweenLite/Max to animate the css of DOM elements, we assume that if the target is a DOM element, that's what is intended (a convenience so that users don't have to wrap things in css:{}, although we still recommend it for a slight performance boost and better specificity) + if (!this.vars.css) if (target.style) if (target !== window && target.nodeType) if (_plugins.css) if (this.vars.autoCSS !== false) { //it's so common to use TweenLite/Max to animate the css of DOM elements, we assume that if the target is a DOM element, that's what is intended (a convenience so that users don't have to wrap things in css:{}, although we still recommend it for a slight performance boost and better specificity). Note: we cannot check "nodeType" on the window inside an iframe. _autoCSS(this.vars, target); } for (p in this.vars) { - if (_reservedProps[p]) { - if (p === "onStartParams" || p === "onUpdateParams" || p === "onCompleteParams" || p === "onReverseCompleteParams" || p === "onRepeatParams") if ((a = this.vars[p])) { - i = a.length; - while (--i > -1) { - if (a[i] === "{self}") { - a = this.vars[p] = a.concat(); //copy the array in case the user referenced the same array in multiple tweens/timelines (each {self} should be unique) - a[i] = this; - } - } + v = this.vars[p]; + if (_reservedProps[p]) { + if (v instanceof Array) if (v.join("").indexOf("{self}") !== -1) { + this.vars[p] = v = this._swapSelfInParams(v, this); } } else if (_plugins[p] && (plugin = new _plugins[p]())._onInitTween(target, this.vars[p], this)) { @@ -1090,7 +1087,6 @@ } else { this._firstPT = propLookup[p] = pt = {_next:this._firstPT, t:target, p:p, f:(typeof(target[p]) === "function"), n:p, pg:false, pr:0}; pt.s = (!pt.f) ? parseFloat(target[p]) : target[ ((p.indexOf("set") || typeof(target["get" + p.substr(3)]) !== "function") ? p : "get" + p.substr(3)) ](); - v = this.vars[p]; pt.c = (typeof(v) === "string" && v.charAt(1) === "=") ? parseInt(v.charAt(0) + "1", 10) * Number(v.substr(2)) : (Number(v) - pt.s) || 0; } if (pt) if (pt._next) { @@ -1202,9 +1198,10 @@ } } - if (!this._active) if (!this._paused) { + if (!this._active) if (!this._paused && this._time !== prevTime && time >= 0) { this._active = true; //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done. } + if (prevTime === 0) { if (this._startAt) { if (time >= 0) { @@ -1440,17 +1437,18 @@ }, true); p = TweenPlugin.prototype; - TweenPlugin.version = "1.9.1"; + TweenPlugin.version = "1.10.1"; TweenPlugin.API = 2; p._firstPT = null; p._addTween = function(target, prop, start, end, overwriteProp, round) { var c, pt; - if (end != null && (c = (typeof(end) === "number" || end.charAt(1) !== "=") ? Number(end) - start : parseInt(end.charAt(0)+"1", 10) * Number(end.substr(2)))) { + if (end != null && (c = (typeof(end) === "number" || end.charAt(1) !== "=") ? Number(end) - start : parseInt(end.charAt(0) + "1", 10) * Number(end.substr(2)))) { this._firstPT = pt = {_next:this._firstPT, t:target, p:prop, s:start, c:c, f:(typeof(target[prop]) === "function"), n:overwriteProp || prop, r:round}; if (pt._next) { pt._next._prev = pt; } + return pt; } }; @@ -1461,7 +1459,7 @@ while (pt) { val = pt.c * v + pt.s; if (pt.r) { - val = (val + ((val > 0) ? 0.5 : -0.5)) >> 0; //about 4x faster than Math.round() + val = (val + ((val > 0) ? 0.5 : -0.5)) | 0; //about 4x faster than Math.round() } else if (val < min) if (val > -min) { //prevents issues with converting very small numbers to strings in the browser val = 0; } diff --git a/js/libs/gsap/TweenMax.js b/js/libs/gsap/TweenMax.js index 1579b079..68f55768 100644 --- a/js/libs/gsap/TweenMax.js +++ b/js/libs/gsap/TweenMax.js @@ -1,6 +1,6 @@ /*! - * VERSION: beta 1.9.8 - * DATE: 2013-06-05 + * VERSION: beta 1.10.1 + * DATE: 2013-07-10 * UPDATES AND DOCS AT: http://www.greensock.com * * Includes all of the following: TweenLite, TweenMax, TimelineLite, TimelineMax, EasePack, CSSPlugin, RoundPropsPlugin, BezierPlugin, AttrPlugin, DirectionalRotationPlugin @@ -28,12 +28,12 @@ this._dirty = true; //ensures that if there is any repeat, the totalDuration will get recalculated to accurately report it. }, _isSelector = function(v) { - return (v.jquery || (v.length && v[0] && v[0].nodeType && v[0].style && !v.nodeType)); + return (v.jquery || (v.length && v !== window && v[0] && (v[0] === window || (v[0].nodeType && v[0].style && !v.nodeType)))); //note: we cannot check "nodeType" on window from inside an iframe (some browsers throw a security error) }, p = TweenMax.prototype = TweenLite.to({}, 0.1, {}), _blankArray = []; - TweenMax.version = "1.9.8"; + TweenMax.version = "1.10.1"; p.constructor = TweenMax; p.kill()._gc = false; TweenMax.killTweensOf = TweenMax.killDelayedCallsTo = TweenLite.killTweensOf; @@ -216,7 +216,7 @@ } } - if (!this._active) if (!this._paused) { + if (!this._active) if (!this._paused && this._time !== prevTime && time >= 0) { this._active = true; //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done. } if (prevTotalTime === 0) { @@ -293,7 +293,7 @@ a = [], finalComplete = function() { if (vars.onComplete) { - vars.onComplete.apply(vars.onCompleteScope || this, vars.onCompleteParams || _blankArray); + vars.onComplete.apply(vars.onCompleteScope || this, arguments); } onCompleteAll.apply(onCompleteAllScope || this, onCompleteAllParams || _blankArray); }, @@ -439,12 +439,9 @@ }; var _changePause = function(pause, tweens, delayedCalls, timelines) { - if (tweens === undefined) { - tweens = true; - } - if (delayedCalls === undefined) { - delayedCalls = true; - } + tweens = (tweens !== false); + delayedCalls = (delayedCalls !== false); + timelines = (timelines !== false); var a = getAllTweens(timelines), allTrue = (tweens && delayedCalls && timelines), i = a.length, @@ -564,25 +561,17 @@ this._sortChildren = true; this._onUpdate = this.vars.onUpdate; var v = this.vars, - i = _paramProps.length, - j, a; - while (--i > -1) { - a = v[_paramProps[i]]; - if (a) { - j = a.length; - while (--j > -1) { - if (a[j] === "{self}") { - a = v[_paramProps[i]] = a.concat(); //copy the array in case the user referenced the same array in multiple timelines/tweens (each {self} should be unique) - a[j] = this; - } - } + val, p; + for (p in v) { + val = v[p]; + if (val instanceof Array) if (val.join("").indexOf("{self}") !== -1) { + v[p] = this._swapSelfInParams(val); } } if (v.tweens instanceof Array) { this.add(v.tweens, 0, v.align, v.stagger); } }, - _paramProps = ["onStartParams","onUpdateParams","onCompleteParams","onReverseCompleteParams","onRepeatParams"], _blankArray = [], _copy = function(vars) { var copy = {}, p; @@ -591,10 +580,16 @@ } return copy; }, + _pauseCallback = function(tween, callback, params, scope) { + tween._timeline.pause(tween._startTime); + if (callback) { + callback.apply(scope || tween._timeline, params || _blankArray); + } + }, _slice = _blankArray.slice, p = TimelineLite.prototype = new SimpleTimeline(); - TimelineLite.version = "1.9.8"; + TimelineLite.version = "1.10.1"; p.constructor = TimelineLite; p.kill()._gc = false; @@ -616,7 +611,7 @@ if (typeof(targets) === "string") { targets = TweenLite.selector(targets) || targets; } - if (!(targets instanceof Array) && targets.length && targets[0] && targets[0].nodeType && targets[0].style) { //senses if the targets object is a selector. If it is, we should translate it into an array. + if (!(targets instanceof Array) && targets.length && targets !== window && targets[0] && (targets[0] === window || (targets[0].nodeType && targets[0].style && !targets.nodeType))) { //senses if the targets object is a selector. If it is, we should translate it into an array. targets = _slice.call(targets, 0); } stagger = stagger || 0; @@ -776,6 +771,10 @@ return this; }; + p.addPause = function(position, callback, params, scope) { + return this.call(_pauseCallback, ["{self}", callback, params, scope], this, position); + }; + p.removeLabel = function(label) { delete this._labels[label]; return this; @@ -838,7 +837,6 @@ if (this._gc) { this._enabled(true, false); } - this._active = !this._paused; var totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(), prevTime = this._time, prevStart = this._startTime, @@ -885,6 +883,11 @@ } else if (!this._initted) { this._initted = true; } + + if (!this._active) if (!this._paused && this._time !== prevTime && time > 0) { + this._active = true; //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example. + } + if (prevTime === 0) if (this.vars.onStart) if (this._time !== 0) if (!suppressEvents) { this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || _blankArray); } @@ -1189,7 +1192,7 @@ p.constructor = TimelineMax; p.kill()._gc = false; - TimelineMax.version = "1.9.8"; + TimelineMax.version = "1.10.1"; p.invalidate = function() { this._yoyo = (this.vars.yoyo === true); @@ -1254,7 +1257,6 @@ if (this._gc) { this._enabled(true, false); } - this._active = !this._paused; var totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(), dur = this._duration, prevTime = this._time, @@ -1391,6 +1393,10 @@ this._initted = true; } + if (!this._active) if (!this._paused && this._totalTime !== prevTotalTime && time > 0) { + this._active = true; //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example. + } + if (prevTotalTime === 0) if (this.vars.onStart) if (this._totalTime !== 0) if (!suppressEvents) { this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || _blankArray); } @@ -2201,7 +2207,7 @@ p = CSSPlugin.prototype = new TweenPlugin("css"); p.constructor = CSSPlugin; - CSSPlugin.version = "1.9.8"; + CSSPlugin.version = "1.10.1"; CSSPlugin.API = 2; CSSPlugin.defaultTransformPerspective = 0; p = "px"; //we'll reuse the "p" variable to keep file size down @@ -2312,8 +2318,7 @@ t = cs.getPropertyValue(p.replace(_capsExp, "-$1").toLowerCase()); rv = (t || cs.length) ? t : cs[p]; //Opera behaves VERY strangely - length is usually 0 and cs[p] is the only way to get accurate results EXCEPT when checking for -o-transform which only works with cs.getPropertyValue()! } else if (t.currentStyle) { - cs = t.currentStyle; - rv = cs[p]; + rv = t.currentStyle[p]; } return (dflt != null && (!rv || rv === "none" || rv === "auto" || rv === "auto auto")) ? dflt : rv; }, @@ -3263,7 +3268,7 @@ a34 = a33*a34+tm.zOrigin-m[14]; } - //only parse from the matrix if we MUST because not only is it usually unnecessary due to the fact that we store the values in the _gsTransform object, but also because it's impossible to accurately interpret rotationX, rotationY, and rotationZ if all are applied, so it's much better to rely on what we store. However, we must parse the first time that an object is tweened. We also assume that if the position has changed, the user must have done some styling changes outside of CSSPlugin, thus we force a parse in that scenario. + //only parse from the matrix if we MUST because not only is it usually unnecessary due to the fact that we store the values in the _gsTransform object, but also because it's impossible to accurately interpret rotationX, rotationY, rotationZ, scaleX, and scaleY if all are applied, so it's much better to rely on what we store. However, we must parse the first time that an object is tweened. We also assume that if the position has changed, the user must have done some styling changes outside of CSSPlugin, thus we force a parse in that scenario. if (!rec || parse || tm.rotationX == null) { var a11 = m[0], a21 = m[1], a31 = m[2], a41 = m[3], a12 = m[4], a22 = m[5], a32 = m[6], a42 = m[7], @@ -3278,7 +3283,6 @@ t1 = a12*cos+a13*sin; t2 = a22*cos+a23*sin; t3 = a32*cos+a33*sin; - //t4 = a42*cos+a43*sin; a13 = a12*-sin+a13*cos; a23 = a22*-sin+a23*cos; a33 = a32*-sin+a33*cos; @@ -3286,7 +3290,6 @@ a12 = t1; a22 = t2; a32 = t3; - //a42 = t4; } //rotationY angle = tm.rotationY = Math.atan2(a13, a11); @@ -3297,15 +3300,12 @@ t1 = a11*cos-a13*sin; t2 = a21*cos-a23*sin; t3 = a31*cos-a33*sin; - //t4 = a41*cos-a43*sin; - //a13 = a11*sin+a13*cos; a23 = a21*sin+a23*cos; a33 = a31*sin+a33*cos; a43 = a41*sin+a43*cos; a11 = t1; a21 = t2; a31 = t3; - //a41 = t4; } //rotationZ angle = tm.rotation = Math.atan2(a21, a22); @@ -3465,19 +3465,16 @@ style.removeAttribute("filter"); } }, + _set3DTransformRatio = function(v) { var t = this.data, //refers to the element's _gsTransform object style = this.t.style, - perspective = t.perspective, - a11 = t.scaleX, a12 = 0, a13 = 0, a14 = 0, - a21 = 0, a22 = t.scaleY, a23 = 0, a24 = 0, - a31 = 0, a32 = 0, a33 = t.scaleZ, a34 = 0, - a41 = 0, a42 = 0, a43 = (perspective) ? -1 / perspective : 0, angle = t.rotation, - zOrigin = t.zOrigin, - rnd = 100000, - cos, sin, t1, t2, t3, t4, ffProp, n, sfx; - + sx = t.scaleX, + sy = t.scaleY, + sz = t.scaleZ, + a11, a12, a13, a14, a21, a22, a23, a24, a31, a32, a33, a34, a41, a42, a43, + perspective, zOrigin, rnd, cos, sin, t1, t2, t3, t4, ffProp, n, sfx; if (_isFirefox) { //Firefox has a bug that causes 3D elements to randomly disappear during animation unless a repaint is forced. One way to do this is change "top" or "bottom" by 0.05 which is imperceptible, so we go back and forth. Another way is to change the display to "none", read the clientTop, and then revert the display but that is much slower. ffProp = style.top ? "top" : style.bottom ? "bottom" : parseFloat(_getStyle(this.t, "top", null, false)) ? "bottom" : "top"; t1 = _getStyle(this.t, ffProp, null, false); @@ -3486,35 +3483,43 @@ t._ffFix = !t._ffFix; style[ffProp] = (t._ffFix ? n + 0.05 : n - 0.05) + sfx; } - if (angle || t.skewX) { - t1 = a11*Math.cos(angle); - t2 = a22*Math.sin(angle); - angle -= t.skewX; - a12 = a11*-Math.sin(angle); - a22 = a22*Math.cos(angle); - a11 = t1; - a21 = t2; - } else if (!t.rotationY && !t.rotationX && a33 === 1) { //if we're only translating and/or 2D scaling, this is faster... - style[_transformProp] = "translate3d(" + t.x + "px," + t.y + "px," + t.z +"px)" + ((a11 !== 1 || a22 !== 1) ? " scale(" + a11 + "," + a22 + ")" : ""); + cos = Math.cos(angle); + sin = Math.sin(angle); + a11 = cos; + a21 = sin; + if (t.skewX) { + angle -= t.skewX; + cos = Math.cos(angle); + sin = Math.sin(angle); + } + a12 = -sin; + a22 = cos; + } else if (!t.rotationY && !t.rotationX && sz === 1) { //if we're only translating and/or 2D scaling, this is faster... + style[_transformProp] = "translate3d(" + t.x + "px," + t.y + "px," + t.z +"px)" + ((sx !== 1 || sy !== 1) ? " scale(" + sx + "," + sy + ")" : ""); return; - } + } else { + a11 = a22 = 1; + a12 = a21 = 0; + } + a33 = 1; + a13 = a14 = a23 = a24 = a31 = a32 = a34 = a41 = a42 = 0; + perspective = t.perspective; + a43 = (perspective) ? -1 / perspective : 0; + zOrigin = t.zOrigin; + rnd = 100000; angle = t.rotationY; if (angle) { cos = Math.cos(angle); sin = Math.sin(angle); - t1 = a11*cos; - t2 = a21*cos; - t3 = a33*-sin; - t4 = a43*-sin; + a31 = a33*-sin; + a41 = a43*-sin; a13 = a11*sin; a23 = a21*sin; - a33 = a33*cos; + a33 *= cos; a43 *= cos; - a11 = t1; - a21 = t2; - a31 = t3; - a41 = t4; + a11 *= cos; + a21 *= cos; } angle = t.rotationX; if (angle) { @@ -3533,6 +3538,24 @@ a32 = t3; a42 = t4; } + if (sz !== 1) { + a13*=sz; + a23*=sz; + a33*=sz; + a43*=sz; + } + if (sy !== 1) { + a12*=sy; + a22*=sy; + a32*=sy; + a42*=sy; + } + if (sx !== 1) { + a11*=sx; + a21*=sx; + a31*=sx; + a41*=sx; + } if (zOrigin) { a34 -= zOrigin; a14 = a13*a34; @@ -3545,6 +3568,7 @@ a34 = (t1 = (a34 += t.z) - (a34 |= 0)) ? ((t1 * rnd + (t1 < 0 ? -0.5 : 0.5)) | 0) / rnd + a34 : a34; style[_transformProp] = "matrix3d(" + [ (((a11 * rnd) | 0) / rnd), (((a21 * rnd) | 0) / rnd), (((a31 * rnd) | 0) / rnd), (((a41 * rnd) | 0) / rnd), (((a12 * rnd) | 0) / rnd), (((a22 * rnd) | 0) / rnd), (((a32 * rnd) | 0) / rnd), (((a42 * rnd) | 0) / rnd), (((a13 * rnd) | 0) / rnd), (((a23 * rnd) | 0) / rnd), (((a33 * rnd) | 0) / rnd), (((a43 * rnd) | 0) / rnd), a14, a24, a34, (perspective ? (1 + (-a34 / perspective)) : 1) ].join(",") + ")"; }, + _set2DTransformRatio = function(v) { var t = this.data, //refers to the element's _gsTransform object targ = this.t, @@ -3571,7 +3595,7 @@ } }; - _registerComplexSpecialProp("transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,transformPerspective,directionalRotation,parseTransform", {parser:function(t, e, p, cssp, pt, plugin, vars) { + _registerComplexSpecialProp("transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,transformPerspective,directionalRotation,parseTransform,force3D", {parser:function(t, e, p, cssp, pt, plugin, vars) { if (cssp._transform) { return pt; } //only need to parse the transform once, and only if the browser supports it. var m1 = cssp._transform = _getTransform(t, _cs, true, vars.parseTransform), style = t.style, @@ -3620,7 +3644,12 @@ } } - has3D = (m1.z || m1.rotationX || m1.rotationY || m2.z || m2.rotationX || m2.rotationY || m2.perspective); + if (v.force3D != null) { + m1.force3D = v.force3D; + hasChange = true; + } + + has3D = (m1.force3D || m1.z || m1.rotationX || m1.rotationY || m2.z || m2.rotationX || m2.rotationY || m2.perspective); if (!has3D && v.scale != null) { m2.scaleZ = 1; //no need to tween scaleZ. } @@ -3644,15 +3673,15 @@ if (orig || (_supports3D && has3D && m1.zOrigin)) { //if anything 3D is happening and there's a transformOrigin with a z component that's non-zero, we must ensure that the transformOrigin's z-component is set to 0 so that we can manually do those calculations to get around Safari bugs. Even if the user didn't specifically define a "transformOrigin" in this particular tween (maybe they did it via css directly). if (_transformProp) { hasChange = true; - orig = (orig || _getStyle(t, p, _cs, false, "50% 50%")) + ""; //cast as string to avoid errors p = _transformOriginProp; + orig = (orig || _getStyle(t, p, _cs, false, "50% 50%")) + ""; //cast as string to avoid errors pt = new CSSPropTween(style, p, 0, 0, pt, -1, "transformOrigin"); pt.b = style[p]; pt.plugin = plugin; if (_supports3D) { copy = m1.zOrigin; orig = orig.split(" "); - m1.zOrigin = ((orig.length > 2) ? parseFloat(orig[2]) : copy) || 0; //Safari doesn't handle the z part of transformOrigin correctly, so we'll manually handle it in the _set3DTransformRatio() method. + m1.zOrigin = ((orig.length > 2 && !(copy !== 0 && orig[2] === "0px")) ? parseFloat(orig[2]) : copy) || 0; //Safari doesn't handle the z part of transformOrigin correctly, so we'll manually handle it in the _set3DTransformRatio() method. pt.xs0 = pt.e = style[p] = orig[0] + " " + (orig[1] || "50%") + " 0px"; //we must define a z value of 0px specifically otherwise iOS 5 Safari will stick with the old one (if one was defined)! pt = new CSSPropTween(m1, "zOrigin", 0, 0, pt, -1, pt.n); //we must create a CSSPropTween for the _gsTransform.zOrigin so that it gets reset properly at the beginning if the tween runs backward (as opposed to just setting m1.zOrigin here) pt.b = copy; @@ -3795,7 +3824,7 @@ //opacity-related var _setIEOpacityRatio = function(v) { var t = this.t, //refers to the element's style property - filters = t.filter, + filters = t.filter || _getStyle(this.data, "filter"), val = (this.s + this.c * v) | 0, skip; if (val === 100) { //for older versions of IE that need to use a filter to apply opacity, we should remove the filter if opacity hits 1 in order to improve performance, but make sure there isn't a transform (matrix) or gradient in the filters. @@ -3809,10 +3838,12 @@ } if (!skip) { if (this.xn1) { - t.filter = filters = filters || "alpha(opacity=100)"; //works around bug in IE7/8 that prevents changes to "visibility" from being applied properly if the filter is changed to a different alpha on the same frame. + t.filter = filters = filters || ("alpha(opacity=" + val + ")"); //works around bug in IE7/8 that prevents changes to "visibility" from being applied properly if the filter is changed to a different alpha on the same frame. } if (filters.indexOf("opacity") === -1) { //only used if browser doesn't support the standard opacity style property (IE 7 and 8) - t.filter += " alpha(opacity=" + val + ")"; //we round the value because otherwise, bugs in IE7/8 can prevent "visibility" changes from being applied properly. + if (val !== 0 || !this.xn1) { //bugs in IE7/8 won't render the filter properly if opacity is ADDED on the same frame/render as "visibility" changes (this.xn1 is 1 if this tween is an "autoAlpha" tween) + t.filter += " alpha(opacity=" + val + ")"; //we round the value because otherwise, bugs in IE7/8 can prevent "visibility" changes from being applied properly. + } } else { t.filter = filters.replace(_opacityExp, "opacity=" + val); } @@ -3821,22 +3852,16 @@ _registerComplexSpecialProp("opacity,alpha,autoAlpha", {defaultValue:"1", parser:function(t, e, p, cssp, pt, plugin) { var b = parseFloat(_getStyle(t, "opacity", _cs, false, "1")), style = t.style, - vb; + isAutoAlpha = (p === "autoAlpha"); e = parseFloat(e); - if (p === "autoAlpha") { - vb = _getStyle(t, "visibility", _cs); - if (b === 1 && vb === "hidden" && e !== 0) { //if visibility is initially set to "hidden", we should interpret that as intent to make opacity 0 (a convenience) - b = 0; - } - pt = new CSSPropTween(style, "visibility", 0, 0, pt, -1, null, false, 0, ((b !== 0) ? "visible" : "hidden"), ((e === 0) ? "hidden" : "visible")); - pt.xs0 = "visible"; - cssp._overwriteProps.push(pt.n); + if (isAutoAlpha && b === 1 && _getStyle(t, "visibility", _cs) === "hidden" && e !== 0) { //if visibility is initially set to "hidden", we should interpret that as intent to make opacity 0 (a convenience) + b = 0; } if (_supportsOpacity) { pt = new CSSPropTween(style, "opacity", b, e - b, pt); } else { pt = new CSSPropTween(style, "opacity", b * 100, (e - b) * 100, pt); - pt.xn1 = (p === "autoAlpha") ? 1 : 0; //we need to record whether or not this is an autoAlpha so that in the setRatio(), we know to duplicate the setting of the alpha in order to work around a bug in IE7 and IE8 that prevents changes to "visibility" from taking effect if the filter is changed to a different alpha(opacity) at the same time. Setting it to the SAME value first, then the new value works around the IE7/8 bug. + pt.xn1 = isAutoAlpha ? 1 : 0; //we need to record whether or not this is an autoAlpha so that in the setRatio(), we know to duplicate the setting of the alpha in order to work around a bug in IE7 and IE8 that prevents changes to "visibility" from taking effect if the filter is changed to a different alpha(opacity) at the same time. Setting it to the SAME value first, then the new value works around the IE7/8 bug. style.zoom = 1; //helps correct an IE issue. pt.type = 2; pt.b = "alpha(opacity=" + pt.s + ")"; @@ -3845,6 +3870,11 @@ pt.plugin = plugin; pt.setRatio = _setIEOpacityRatio; } + if (isAutoAlpha) { //we have to create the "visibility" PropTween after the opacity one in the linked list so that they run in the order that works properly in IE8 and earlier + pt = new CSSPropTween(style, "visibility", 0, 0, pt, -1, null, false, 0, ((b !== 0) ? "visible" : "hidden"), ((e === 0) ? "hidden" : "visible")); + pt.xs0 = "visible"; + cssp._overwriteProps.push(pt.n); + } return pt; }}); @@ -3916,17 +3946,20 @@ var _setClearPropsRatio = function(v) { if (v === 1 || v === 0) if (this.data._totalTime === this.data._totalDuration) { //this.data refers to the tween. Only clear at the END of the tween (remember, from() tweens make the ratio go from 1 to 0, so we can't just check that). - var all = (this.e === "all"), - s = this.t.style, - a = all ? s.cssText.split(";") : this.e.split(","), + if (this.e === "all") { + this.t.style.cssText = ""; + if (this.t._gsTransform) { + delete this.t._gsTransform; + } + return; + } + var s = this.t.style, + a = this.e.split(","), i = a.length, transformParse = _specialProps.transform.parse, p; while (--i > -1) { p = a[i]; - if (all) { - p = p.substr(0, p.indexOf(":")).split(" ").join(""); - } if (_specialProps[p]) { p = (_specialProps[p].parse === transformParse) ? _transformProp : _specialProps[p].p; //ensures that special properties use the proper browser-specific property name, like "scaleX" might be "-webkit-transform" or "boxShadow" might be "-moz-box-shadow" } @@ -3975,7 +4008,6 @@ _overwriteProps = this._overwriteProps; var style = target.style, v, pt, pt2, first, last, next, zIndex, tpt, threeD; - if (_reqSafariFix) if (style.zIndex === "") { v = _getStyle(target, "zIndex", _cs); if (v === "auto" || v === "") { @@ -4377,7 +4409,6 @@ return results; }; - TweenPlugin.activate([CSSPlugin]); return CSSPlugin; @@ -4486,8 +4517,9 @@ this._target = target; this._proxy = {}; for (p in value) { - this._addTween(this._proxy, p, parseFloat(target.getAttribute(p)), value[p], p); - this._overwriteProps.push(p); + if ( this._addTween(this._proxy, p, parseFloat(target.getAttribute(p)), value[p], p) ) { + this._overwriteProps.push(p); + } } return true; }, @@ -5397,14 +5429,22 @@ return this; }; + p._swapSelfInParams = function(params) { + var i = params.length, + copy = params.concat(); + while (--i > -1) { + if (params[i] === "{self}") { + copy[i] = this; + } + } + return copy; + }; + //----Animation getters/setters -------------------------------------------------------- p.eventCallback = function(type, callback, params, scope) { - if (type == null) { - return null; - } else if (type.substr(0,2) === "on") { - var v = this.vars, - i; + if ((type || "").substr(0,2) === "on") { + var v = this.vars; if (arguments.length === 1) { return v[type]; } @@ -5412,17 +5452,8 @@ delete v[type]; } else { v[type] = callback; - v[type + "Params"] = params; + v[type + "Params"] = ((params instanceof Array) && params.join("").indexOf("{self}") !== -1) ? this._swapSelfInParams(params) : params; v[type + "Scope"] = scope; - if (params) { - i = params.length; - while (--i > -1) { - if (params[i] === "{self}") { - params = v[type + "Params"] = params.concat(); //copying the array avoids situations where the same array is passed to multiple tweens/timelines and {self} doesn't correctly point to each individual instance. - params[i] = this; - } - } - } } if (type === "onUpdate") { this._onUpdate = callback; @@ -5491,13 +5522,15 @@ time = totalDuration; } this._startTime = (this._paused ? this._pauseTime : tl._time) - ((!this._reversed ? time : totalDuration - time) / this._timeScale); - if (!tl._dirty) { //for performance improvement. If the parent's cache is already dirty, it already took care of marking the anscestors as dirty too, so skip the function call here. + if (!tl._dirty) { //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here. this._uncache(false); } - if (!tl._active) { - //in case any of the anscestors had completed but should now be enabled... + //in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The startTime of that child would get pushed out, but one of the ancestors may have completed. + if (tl._timeline) { while (tl._timeline) { - tl.totalTime(tl._totalTime, true); + if (tl._timeline._time !== (tl._startTime + tl._totalTime) / tl._timeScale) { + tl.totalTime(tl._totalTime, true); + } tl = tl._timeline; } } @@ -5558,9 +5591,10 @@ if (!_tickerActive && !value) { _ticker.wake(); } - var raw = this._timeline.rawTime(), + var tl = this._timeline, + raw = tl.rawTime(), elapsed = raw - this._pauseTime; - if (!value && this._timeline.smoothChildTiming) { + if (!value && tl.smoothChildTiming) { this._startTime += elapsed; this._uncache(false); } @@ -5568,7 +5602,7 @@ this._paused = value; this._active = (!value && this._totalTime > 0 && this._totalTime < this._totalDuration); if (!value && elapsed !== 0 && this._duration !== 0) { - this.render(this._totalTime, true, true); + this.render((tl.smoothChildTiming ? this._totalTime : (raw - this._startTime) / this._timeScale), true, true); //in case the target's properties changed via some other tween or manual update by the user, we should force a render. } } if (this._gc && !value) { @@ -5697,7 +5731,7 @@ this.target = target = (typeof(target) !== "string") ? target : TweenLite.selector(target) || target; - var isSelector = (target.jquery || (target.length && target[0] && target[0].nodeType && target[0].style && !target.nodeType)), + var isSelector = (target.jquery || (target.length && target !== window && target[0] && (target[0] === window || (target[0].nodeType && target[0].style && !target.nodeType)))), overwrite = this.vars.overwrite, i, targ, targets; @@ -5718,7 +5752,7 @@ targets.splice(i+1, 1); //to avoid an endless loop (can't imagine why the selector would return a string, but just in case) } continue; - } else if (targ.length && targ[0] && targ[0].nodeType && targ[0].style && !targ.nodeType) { //in case the user is passing in an array of selector objects (like jQuery objects), we need to check one more level and pull things out if necessary. Also note that elements pass all the criteria regarding length and the first child having style, so we must also check to ensure the target isn't an HTML node itself. targets.splice(i--, 1); this._targets = targets = targets.concat(_slice.call(targ, 0)); continue; @@ -5741,13 +5775,13 @@ } }, true), _isSelector = function(v) { - return (v.length && v[0] && v[0].nodeType && v[0].style && !v.nodeType); + return (v.length && v !== window && v[0] && (v[0] === window || (v[0].nodeType && v[0].style && !v.nodeType))); //we cannot check "nodeType" if the target is window from within an iframe, otherwise it will trigger a security error in some browsers like Firefox. }, _autoCSS = function(vars, target) { var css = {}, p; for (p in vars) { - if (!_reservedProps[p] && (!(p in target) || p === "x" || p === "y" || p === "width" || p === "height" || p === "className") && (!_plugins[p] || (_plugins[p] && _plugins[p]._autoCSS))) { //note: elements contain read-only "x" and "y" properties. We should also prioritize editing css width/height rather than the element's properties. + if (!_reservedProps[p] && (!(p in target) || p === "x" || p === "y" || p === "width" || p === "height" || p === "className" || p === "border") && (!_plugins[p] || (_plugins[p] && _plugins[p]._autoCSS))) { //note: elements contain read-only "x" and "y" properties. We should also prioritize editing css width/height rather than the element's properties. css[p] = vars[p]; delete vars[p]; } @@ -5765,7 +5799,7 @@ p._firstPT = p._targets = p._overwrittenProps = p._startAt = null; p._notifyPluginsOfEnabled = false; - TweenLite.version = "1.9.8"; + TweenLite.version = "1.10.1"; TweenLite.defaultEase = p._ease = new Ease(null, null, 1, 1); TweenLite.defaultOverwrite = "auto"; TweenLite.ticker = _ticker; @@ -5984,19 +6018,14 @@ if (target == null) { return false; } - if (!this.vars.css) if (target.style) if (target.nodeType) if (_plugins.css) if (this.vars.autoCSS !== false) { //it's so common to use TweenLite/Max to animate the css of DOM elements, we assume that if the target is a DOM element, that's what is intended (a convenience so that users don't have to wrap things in css:{}, although we still recommend it for a slight performance boost and better specificity) + if (!this.vars.css) if (target.style) if (target !== window && target.nodeType) if (_plugins.css) if (this.vars.autoCSS !== false) { //it's so common to use TweenLite/Max to animate the css of DOM elements, we assume that if the target is a DOM element, that's what is intended (a convenience so that users don't have to wrap things in css:{}, although we still recommend it for a slight performance boost and better specificity). Note: we cannot check "nodeType" on the window inside an iframe. _autoCSS(this.vars, target); } for (p in this.vars) { + v = this.vars[p]; if (_reservedProps[p]) { - if (p === "onStartParams" || p === "onUpdateParams" || p === "onCompleteParams" || p === "onReverseCompleteParams" || p === "onRepeatParams") if ((a = this.vars[p])) { - i = a.length; - while (--i > -1) { - if (a[i] === "{self}") { - a = this.vars[p] = a.concat(); //copy the array in case the user referenced the same array in multiple tweens/timelines (each {self} should be unique) - a[i] = this; - } - } + if (v instanceof Array) if (v.join("").indexOf("{self}") !== -1) { + this.vars[p] = v = this._swapSelfInParams(v, this); } } else if (_plugins[p] && (plugin = new _plugins[p]())._onInitTween(target, this.vars[p], this)) { @@ -6024,7 +6053,6 @@ } else { this._firstPT = propLookup[p] = pt = {_next:this._firstPT, t:target, p:p, f:(typeof(target[p]) === "function"), n:p, pg:false, pr:0}; pt.s = (!pt.f) ? parseFloat(target[p]) : target[ ((p.indexOf("set") || typeof(target["get" + p.substr(3)]) !== "function") ? p : "get" + p.substr(3)) ](); - v = this.vars[p]; pt.c = (typeof(v) === "string" && v.charAt(1) === "=") ? parseInt(v.charAt(0) + "1", 10) * Number(v.substr(2)) : (Number(v) - pt.s) || 0; } if (pt) if (pt._next) { @@ -6136,9 +6164,10 @@ } } - if (!this._active) if (!this._paused) { + if (!this._active) if (!this._paused && this._time !== prevTime && time >= 0) { this._active = true; //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done. } + if (prevTime === 0) { if (this._startAt) { if (time >= 0) { @@ -6374,17 +6403,18 @@ }, true); p = TweenPlugin.prototype; - TweenPlugin.version = "1.9.1"; + TweenPlugin.version = "1.10.1"; TweenPlugin.API = 2; p._firstPT = null; p._addTween = function(target, prop, start, end, overwriteProp, round) { var c, pt; - if (end != null && (c = (typeof(end) === "number" || end.charAt(1) !== "=") ? Number(end) - start : parseInt(end.charAt(0)+"1", 10) * Number(end.substr(2)))) { + if (end != null && (c = (typeof(end) === "number" || end.charAt(1) !== "=") ? Number(end) - start : parseInt(end.charAt(0) + "1", 10) * Number(end.substr(2)))) { this._firstPT = pt = {_next:this._firstPT, t:target, p:prop, s:start, c:c, f:(typeof(target[prop]) === "function"), n:overwriteProp || prop, r:round}; if (pt._next) { pt._next._prev = pt; } + return pt; } }; @@ -6395,7 +6425,7 @@ while (pt) { val = pt.c * v + pt.s; if (pt.r) { - val = (val + ((val > 0) ? 0.5 : -0.5)) >> 0; //about 4x faster than Math.round() + val = (val + ((val > 0) ? 0.5 : -0.5)) | 0; //about 4x faster than Math.round() } else if (val < min) if (val > -min) { //prevents issues with converting very small numbers to strings in the browser val = 0; } diff --git a/js/libs/gsap/plugins/AttrPlugin.js b/js/libs/gsap/plugins/AttrPlugin.js index 2b8c8f49..e31e66bb 100644 --- a/js/libs/gsap/plugins/AttrPlugin.js +++ b/js/libs/gsap/plugins/AttrPlugin.js @@ -1,6 +1,6 @@ /*! - * VERSION: 0.1.0 - * DATE: 2013-02-22 + * VERSION: 0.2.0 + * DATE: 2013-07-10 * UPDATES AND DOCS AT: http://www.greensock.com * * @license Copyright (c) 2008-2013, GreenSock. All rights reserved. @@ -26,8 +26,9 @@ this._target = target; this._proxy = {}; for (p in value) { - this._addTween(this._proxy, p, parseFloat(target.getAttribute(p)), value[p], p); - this._overwriteProps.push(p); + if ( this._addTween(this._proxy, p, parseFloat(target.getAttribute(p)), value[p], p) ) { + this._overwriteProps.push(p); + } } return true; }, diff --git a/js/libs/gsap/plugins/CSSPlugin.js b/js/libs/gsap/plugins/CSSPlugin.js index a1a27833..83857b8c 100644 --- a/js/libs/gsap/plugins/CSSPlugin.js +++ b/js/libs/gsap/plugins/CSSPlugin.js @@ -1,6 +1,6 @@ /*! - * VERSION: beta 1.9.8 - * DATE: 2013-06-05 + * VERSION: beta 1.10.1 + * DATE: 2013-07-03 * UPDATES AND DOCS AT: http://www.greensock.com * * @license Copyright (c) 2008-2013, GreenSock. All rights reserved. @@ -28,7 +28,7 @@ p = CSSPlugin.prototype = new TweenPlugin("css"); p.constructor = CSSPlugin; - CSSPlugin.version = "1.9.8"; + CSSPlugin.version = "1.10.1"; CSSPlugin.API = 2; CSSPlugin.defaultTransformPerspective = 0; p = "px"; //we'll reuse the "p" variable to keep file size down @@ -139,8 +139,7 @@ t = cs.getPropertyValue(p.replace(_capsExp, "-$1").toLowerCase()); rv = (t || cs.length) ? t : cs[p]; //Opera behaves VERY strangely - length is usually 0 and cs[p] is the only way to get accurate results EXCEPT when checking for -o-transform which only works with cs.getPropertyValue()! } else if (t.currentStyle) { - cs = t.currentStyle; - rv = cs[p]; + rv = t.currentStyle[p]; } return (dflt != null && (!rv || rv === "none" || rv === "auto" || rv === "auto auto")) ? dflt : rv; }, @@ -1027,8 +1026,8 @@ return rv; }, priority:priority}); }; - - + + @@ -1090,7 +1089,7 @@ a34 = a33*a34+tm.zOrigin-m[14]; } - //only parse from the matrix if we MUST because not only is it usually unnecessary due to the fact that we store the values in the _gsTransform object, but also because it's impossible to accurately interpret rotationX, rotationY, and rotationZ if all are applied, so it's much better to rely on what we store. However, we must parse the first time that an object is tweened. We also assume that if the position has changed, the user must have done some styling changes outside of CSSPlugin, thus we force a parse in that scenario. + //only parse from the matrix if we MUST because not only is it usually unnecessary due to the fact that we store the values in the _gsTransform object, but also because it's impossible to accurately interpret rotationX, rotationY, rotationZ, scaleX, and scaleY if all are applied, so it's much better to rely on what we store. However, we must parse the first time that an object is tweened. We also assume that if the position has changed, the user must have done some styling changes outside of CSSPlugin, thus we force a parse in that scenario. if (!rec || parse || tm.rotationX == null) { var a11 = m[0], a21 = m[1], a31 = m[2], a41 = m[3], a12 = m[4], a22 = m[5], a32 = m[6], a42 = m[7], @@ -1105,7 +1104,6 @@ t1 = a12*cos+a13*sin; t2 = a22*cos+a23*sin; t3 = a32*cos+a33*sin; - //t4 = a42*cos+a43*sin; a13 = a12*-sin+a13*cos; a23 = a22*-sin+a23*cos; a33 = a32*-sin+a33*cos; @@ -1113,7 +1111,6 @@ a12 = t1; a22 = t2; a32 = t3; - //a42 = t4; } //rotationY angle = tm.rotationY = Math.atan2(a13, a11); @@ -1124,15 +1121,12 @@ t1 = a11*cos-a13*sin; t2 = a21*cos-a23*sin; t3 = a31*cos-a33*sin; - //t4 = a41*cos-a43*sin; - //a13 = a11*sin+a13*cos; a23 = a21*sin+a23*cos; a33 = a31*sin+a33*cos; a43 = a41*sin+a43*cos; a11 = t1; a21 = t2; a31 = t3; - //a41 = t4; } //rotationZ angle = tm.rotation = Math.atan2(a21, a22); @@ -1292,19 +1286,16 @@ style.removeAttribute("filter"); } }, + _set3DTransformRatio = function(v) { var t = this.data, //refers to the element's _gsTransform object style = this.t.style, - perspective = t.perspective, - a11 = t.scaleX, a12 = 0, a13 = 0, a14 = 0, - a21 = 0, a22 = t.scaleY, a23 = 0, a24 = 0, - a31 = 0, a32 = 0, a33 = t.scaleZ, a34 = 0, - a41 = 0, a42 = 0, a43 = (perspective) ? -1 / perspective : 0, angle = t.rotation, - zOrigin = t.zOrigin, - rnd = 100000, - cos, sin, t1, t2, t3, t4, ffProp, n, sfx; - + sx = t.scaleX, + sy = t.scaleY, + sz = t.scaleZ, + a11, a12, a13, a14, a21, a22, a23, a24, a31, a32, a33, a34, a41, a42, a43, + perspective, zOrigin, rnd, cos, sin, t1, t2, t3, t4, ffProp, n, sfx; if (_isFirefox) { //Firefox has a bug that causes 3D elements to randomly disappear during animation unless a repaint is forced. One way to do this is change "top" or "bottom" by 0.05 which is imperceptible, so we go back and forth. Another way is to change the display to "none", read the clientTop, and then revert the display but that is much slower. ffProp = style.top ? "top" : style.bottom ? "bottom" : parseFloat(_getStyle(this.t, "top", null, false)) ? "bottom" : "top"; t1 = _getStyle(this.t, ffProp, null, false); @@ -1313,35 +1304,43 @@ t._ffFix = !t._ffFix; style[ffProp] = (t._ffFix ? n + 0.05 : n - 0.05) + sfx; } - if (angle || t.skewX) { - t1 = a11*Math.cos(angle); - t2 = a22*Math.sin(angle); - angle -= t.skewX; - a12 = a11*-Math.sin(angle); - a22 = a22*Math.cos(angle); - a11 = t1; - a21 = t2; - } else if (!t.rotationY && !t.rotationX && a33 === 1) { //if we're only translating and/or 2D scaling, this is faster... - style[_transformProp] = "translate3d(" + t.x + "px," + t.y + "px," + t.z +"px)" + ((a11 !== 1 || a22 !== 1) ? " scale(" + a11 + "," + a22 + ")" : ""); + cos = Math.cos(angle); + sin = Math.sin(angle); + a11 = cos; + a21 = sin; + if (t.skewX) { + angle -= t.skewX; + cos = Math.cos(angle); + sin = Math.sin(angle); + } + a12 = -sin; + a22 = cos; + } else if (!t.rotationY && !t.rotationX && sz === 1) { //if we're only translating and/or 2D scaling, this is faster... + style[_transformProp] = "translate3d(" + t.x + "px," + t.y + "px," + t.z +"px)" + ((sx !== 1 || sy !== 1) ? " scale(" + sx + "," + sy + ")" : ""); return; - } + } else { + a11 = a22 = 1; + a12 = a21 = 0; + } + a33 = 1; + a13 = a14 = a23 = a24 = a31 = a32 = a34 = a41 = a42 = 0; + perspective = t.perspective; + a43 = (perspective) ? -1 / perspective : 0; + zOrigin = t.zOrigin; + rnd = 100000; angle = t.rotationY; if (angle) { cos = Math.cos(angle); sin = Math.sin(angle); - t1 = a11*cos; - t2 = a21*cos; - t3 = a33*-sin; - t4 = a43*-sin; + a31 = a33*-sin; + a41 = a43*-sin; a13 = a11*sin; a23 = a21*sin; - a33 = a33*cos; + a33 *= cos; a43 *= cos; - a11 = t1; - a21 = t2; - a31 = t3; - a41 = t4; + a11 *= cos; + a21 *= cos; } angle = t.rotationX; if (angle) { @@ -1360,6 +1359,24 @@ a32 = t3; a42 = t4; } + if (sz !== 1) { + a13*=sz; + a23*=sz; + a33*=sz; + a43*=sz; + } + if (sy !== 1) { + a12*=sy; + a22*=sy; + a32*=sy; + a42*=sy; + } + if (sx !== 1) { + a11*=sx; + a21*=sx; + a31*=sx; + a41*=sx; + } if (zOrigin) { a34 -= zOrigin; a14 = a13*a34; @@ -1372,6 +1389,7 @@ a34 = (t1 = (a34 += t.z) - (a34 |= 0)) ? ((t1 * rnd + (t1 < 0 ? -0.5 : 0.5)) | 0) / rnd + a34 : a34; style[_transformProp] = "matrix3d(" + [ (((a11 * rnd) | 0) / rnd), (((a21 * rnd) | 0) / rnd), (((a31 * rnd) | 0) / rnd), (((a41 * rnd) | 0) / rnd), (((a12 * rnd) | 0) / rnd), (((a22 * rnd) | 0) / rnd), (((a32 * rnd) | 0) / rnd), (((a42 * rnd) | 0) / rnd), (((a13 * rnd) | 0) / rnd), (((a23 * rnd) | 0) / rnd), (((a33 * rnd) | 0) / rnd), (((a43 * rnd) | 0) / rnd), a14, a24, a34, (perspective ? (1 + (-a34 / perspective)) : 1) ].join(",") + ")"; }, + _set2DTransformRatio = function(v) { var t = this.data, //refers to the element's _gsTransform object targ = this.t, @@ -1398,7 +1416,7 @@ } }; - _registerComplexSpecialProp("transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,transformPerspective,directionalRotation,parseTransform", {parser:function(t, e, p, cssp, pt, plugin, vars) { + _registerComplexSpecialProp("transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,transformPerspective,directionalRotation,parseTransform,force3D", {parser:function(t, e, p, cssp, pt, plugin, vars) { if (cssp._transform) { return pt; } //only need to parse the transform once, and only if the browser supports it. var m1 = cssp._transform = _getTransform(t, _cs, true, vars.parseTransform), style = t.style, @@ -1447,7 +1465,12 @@ } } - has3D = (m1.z || m1.rotationX || m1.rotationY || m2.z || m2.rotationX || m2.rotationY || m2.perspective); + if (v.force3D != null) { + m1.force3D = v.force3D; + hasChange = true; + } + + has3D = (m1.force3D || m1.z || m1.rotationX || m1.rotationY || m2.z || m2.rotationX || m2.rotationY || m2.perspective); if (!has3D && v.scale != null) { m2.scaleZ = 1; //no need to tween scaleZ. } @@ -1471,15 +1494,15 @@ if (orig || (_supports3D && has3D && m1.zOrigin)) { //if anything 3D is happening and there's a transformOrigin with a z component that's non-zero, we must ensure that the transformOrigin's z-component is set to 0 so that we can manually do those calculations to get around Safari bugs. Even if the user didn't specifically define a "transformOrigin" in this particular tween (maybe they did it via css directly). if (_transformProp) { hasChange = true; - orig = (orig || _getStyle(t, p, _cs, false, "50% 50%")) + ""; //cast as string to avoid errors p = _transformOriginProp; + orig = (orig || _getStyle(t, p, _cs, false, "50% 50%")) + ""; //cast as string to avoid errors pt = new CSSPropTween(style, p, 0, 0, pt, -1, "transformOrigin"); pt.b = style[p]; pt.plugin = plugin; if (_supports3D) { copy = m1.zOrigin; orig = orig.split(" "); - m1.zOrigin = ((orig.length > 2) ? parseFloat(orig[2]) : copy) || 0; //Safari doesn't handle the z part of transformOrigin correctly, so we'll manually handle it in the _set3DTransformRatio() method. + m1.zOrigin = ((orig.length > 2 && !(copy !== 0 && orig[2] === "0px")) ? parseFloat(orig[2]) : copy) || 0; //Safari doesn't handle the z part of transformOrigin correctly, so we'll manually handle it in the _set3DTransformRatio() method. pt.xs0 = pt.e = style[p] = orig[0] + " " + (orig[1] || "50%") + " 0px"; //we must define a z value of 0px specifically otherwise iOS 5 Safari will stick with the old one (if one was defined)! pt = new CSSPropTween(m1, "zOrigin", 0, 0, pt, -1, pt.n); //we must create a CSSPropTween for the _gsTransform.zOrigin so that it gets reset properly at the beginning if the tween runs backward (as opposed to just setting m1.zOrigin here) pt.b = copy; @@ -1622,7 +1645,7 @@ //opacity-related var _setIEOpacityRatio = function(v) { var t = this.t, //refers to the element's style property - filters = t.filter, + filters = t.filter || _getStyle(this.data, "filter"), val = (this.s + this.c * v) | 0, skip; if (val === 100) { //for older versions of IE that need to use a filter to apply opacity, we should remove the filter if opacity hits 1 in order to improve performance, but make sure there isn't a transform (matrix) or gradient in the filters. @@ -1636,10 +1659,12 @@ } if (!skip) { if (this.xn1) { - t.filter = filters = filters || "alpha(opacity=100)"; //works around bug in IE7/8 that prevents changes to "visibility" from being applied properly if the filter is changed to a different alpha on the same frame. + t.filter = filters = filters || ("alpha(opacity=" + val + ")"); //works around bug in IE7/8 that prevents changes to "visibility" from being applied properly if the filter is changed to a different alpha on the same frame. } if (filters.indexOf("opacity") === -1) { //only used if browser doesn't support the standard opacity style property (IE 7 and 8) - t.filter += " alpha(opacity=" + val + ")"; //we round the value because otherwise, bugs in IE7/8 can prevent "visibility" changes from being applied properly. + if (val !== 0 || !this.xn1) { //bugs in IE7/8 won't render the filter properly if opacity is ADDED on the same frame/render as "visibility" changes (this.xn1 is 1 if this tween is an "autoAlpha" tween) + t.filter += " alpha(opacity=" + val + ")"; //we round the value because otherwise, bugs in IE7/8 can prevent "visibility" changes from being applied properly. + } } else { t.filter = filters.replace(_opacityExp, "opacity=" + val); } @@ -1648,22 +1673,16 @@ _registerComplexSpecialProp("opacity,alpha,autoAlpha", {defaultValue:"1", parser:function(t, e, p, cssp, pt, plugin) { var b = parseFloat(_getStyle(t, "opacity", _cs, false, "1")), style = t.style, - vb; + isAutoAlpha = (p === "autoAlpha"); e = parseFloat(e); - if (p === "autoAlpha") { - vb = _getStyle(t, "visibility", _cs); - if (b === 1 && vb === "hidden" && e !== 0) { //if visibility is initially set to "hidden", we should interpret that as intent to make opacity 0 (a convenience) - b = 0; - } - pt = new CSSPropTween(style, "visibility", 0, 0, pt, -1, null, false, 0, ((b !== 0) ? "visible" : "hidden"), ((e === 0) ? "hidden" : "visible")); - pt.xs0 = "visible"; - cssp._overwriteProps.push(pt.n); + if (isAutoAlpha && b === 1 && _getStyle(t, "visibility", _cs) === "hidden" && e !== 0) { //if visibility is initially set to "hidden", we should interpret that as intent to make opacity 0 (a convenience) + b = 0; } if (_supportsOpacity) { pt = new CSSPropTween(style, "opacity", b, e - b, pt); } else { pt = new CSSPropTween(style, "opacity", b * 100, (e - b) * 100, pt); - pt.xn1 = (p === "autoAlpha") ? 1 : 0; //we need to record whether or not this is an autoAlpha so that in the setRatio(), we know to duplicate the setting of the alpha in order to work around a bug in IE7 and IE8 that prevents changes to "visibility" from taking effect if the filter is changed to a different alpha(opacity) at the same time. Setting it to the SAME value first, then the new value works around the IE7/8 bug. + pt.xn1 = isAutoAlpha ? 1 : 0; //we need to record whether or not this is an autoAlpha so that in the setRatio(), we know to duplicate the setting of the alpha in order to work around a bug in IE7 and IE8 that prevents changes to "visibility" from taking effect if the filter is changed to a different alpha(opacity) at the same time. Setting it to the SAME value first, then the new value works around the IE7/8 bug. style.zoom = 1; //helps correct an IE issue. pt.type = 2; pt.b = "alpha(opacity=" + pt.s + ")"; @@ -1672,6 +1691,11 @@ pt.plugin = plugin; pt.setRatio = _setIEOpacityRatio; } + if (isAutoAlpha) { //we have to create the "visibility" PropTween after the opacity one in the linked list so that they run in the order that works properly in IE8 and earlier + pt = new CSSPropTween(style, "visibility", 0, 0, pt, -1, null, false, 0, ((b !== 0) ? "visible" : "hidden"), ((e === 0) ? "hidden" : "visible")); + pt.xs0 = "visible"; + cssp._overwriteProps.push(pt.n); + } return pt; }}); @@ -1743,17 +1767,20 @@ var _setClearPropsRatio = function(v) { if (v === 1 || v === 0) if (this.data._totalTime === this.data._totalDuration) { //this.data refers to the tween. Only clear at the END of the tween (remember, from() tweens make the ratio go from 1 to 0, so we can't just check that). - var all = (this.e === "all"), - s = this.t.style, - a = all ? s.cssText.split(";") : this.e.split(","), + if (this.e === "all") { + this.t.style.cssText = ""; + if (this.t._gsTransform) { + delete this.t._gsTransform; + } + return; + } + var s = this.t.style, + a = this.e.split(","), i = a.length, transformParse = _specialProps.transform.parse, p; while (--i > -1) { p = a[i]; - if (all) { - p = p.substr(0, p.indexOf(":")).split(" ").join(""); - } if (_specialProps[p]) { p = (_specialProps[p].parse === transformParse) ? _transformProp : _specialProps[p].p; //ensures that special properties use the proper browser-specific property name, like "scaleX" might be "-webkit-transform" or "boxShadow" might be "-moz-box-shadow" } @@ -1786,8 +1813,8 @@ p = CSSPlugin.prototype; p._firstPT = null; - - //gets called when the tween renders for the first time. This kicks everything off, recording start/end values, etc. + + //gets called when the tween renders for the first time. This kicks everything off, recording start/end values, etc. p._onInitTween = function(target, vars, tween) { if (!target.nodeType) { //css is only for dom elements return false; @@ -1802,7 +1829,6 @@ _overwriteProps = this._overwriteProps; var style = target.style, v, pt, pt2, first, last, next, zIndex, tpt, threeD; - if (_reqSafariFix) if (style.zIndex === "") { v = _getStyle(target, "zIndex", _cs); if (v === "auto" || v === "") { @@ -1810,7 +1836,7 @@ style.zIndex = 0; } } - + if (typeof(vars) === "string") { first = style.cssText; v = _getAllStyles(target, _cs); @@ -1987,8 +2013,8 @@ } return pt; }; - - + + //gets called every time the tween updates, passing the new ratio (typically a value between 0 and 1, but not always (for example, if an Elastic.easeOut is used, the value can jump above 1 mid-tween). It will always start and 0 and end at 1. p.setRatio = function(v) { var pt = this._firstPT, @@ -2096,7 +2122,7 @@ } return pt; }; - + //we need to make sure that if alpha or autoAlpha is killed, opacity is too. And autoAlpha affects the "visibility" property. p._kill = function(lookup) { var copy = lookup, @@ -2204,10 +2230,9 @@ return results; }; - TweenPlugin.activate([CSSPlugin]); return CSSPlugin; - + }, true); }); if (window._gsDefine) { window._gsQueue.pop()(); } \ No newline at end of file diff --git a/js/libs/gsap/plugins/CSSRulePlugin.js b/js/libs/gsap/plugins/CSSRulePlugin.js index 36dfe9a8..49126f1d 100644 --- a/js/libs/gsap/plugins/CSSRulePlugin.js +++ b/js/libs/gsap/plugins/CSSRulePlugin.js @@ -1,6 +1,6 @@ /*! - * VERSION: beta 0.5 - * DATE: 2012-12-20 + * VERSION: beta 0.6.0 + * DATE: 2013-07-03 * UPDATES AND DOCS AT: http://www.greensock.com * * @license Copyright (c) 2008-2013, GreenSock. All rights reserved. @@ -47,7 +47,13 @@ a = []; } while (--i > -1) { - curSS = ss[i][ruleProp]; + //Firefox may throw insecure operation errors when css is loaded from other domains, so try/catch. + try { + curSS = ss[i][ruleProp]; + } catch (e) { + console.log(e); + continue; + } j = curSS.length; while (--j > -1) { cs = curSS[j]; diff --git a/js/libs/gsap/plugins/KineticPlugin.js b/js/libs/gsap/plugins/KineticPlugin.js index 2b14f80f..a3bd9390 100644 --- a/js/libs/gsap/plugins/KineticPlugin.js +++ b/js/libs/gsap/plugins/KineticPlugin.js @@ -1,6 +1,6 @@ /*! - * VERSION: 0.4.0 - * DATE: 2013-05-16 + * VERSION: 0.4.1 + * DATE: 2013-07-10 * UPDATES AND DOCS AT: http://www.greensock.com * * @license Copyright (c) 2008-2013, GreenSock. All rights reserved. @@ -18,7 +18,7 @@ _getterFuncs = {}, _setterFuncs = {}, _numExp = /(\d|\.)+/g, - _directionalRotationExp = /(?:_cw|_ccw|_short)/g, + _directionalRotationExp = /(?:_cw|_ccw|_short)/, _plugins = window._gsDefine.globals.com.greensock.plugins, _colorLookup = {aqua:[0,255,255], lime:[0,255,0], diff --git a/js/libs/gsap/plugins/TextPlugin.js b/js/libs/gsap/plugins/TextPlugin.js index b1aa7b82..e738b7e1 100644 --- a/js/libs/gsap/plugins/TextPlugin.js +++ b/js/libs/gsap/plugins/TextPlugin.js @@ -1,6 +1,6 @@ /*! - * VERSION: 0.4.0 - * DATE: 2013-05-16 + * VERSION: 0.5.0 + * DATE: 2013-07-10 * UPDATES AND DOCS AT: http://www.greensock.com * * @license Copyright (c) 2008-2013, GreenSock. All rights reserved. @@ -35,6 +35,7 @@ //called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run. init: function(target, value, tween) { + var i, shrt; if (!("innerHTML" in target)) { return false; } @@ -49,6 +50,12 @@ this._delimiter = value.delimiter || ""; this._original = _getText(target).replace(/\s+/g, " ").split(this._delimiter); this._text = value.value.replace(/\s+/g, " ").split(this._delimiter); + this._runBackwards = (tween.vars.runBackwards === true); + if (this._runBackwards) { + i = this._original; + this._original = this._text; + this._text = i; + } if (typeof(value.newClass) === "string") { this._newClass = value.newClass; this._hasClass = true; @@ -57,8 +64,8 @@ this._oldClass = value.oldClass; this._hasClass = true; } - var i = this._original.length - this._text.length, - shrt = (i < 0) ? this._original : this._text; + i = this._original.length - this._text.length, + shrt = (i < 0) ? this._original : this._text; this._fillChar = value.fillChar || (value.padSpace ? " " : ""); if (i < 0) { i = -i; @@ -76,6 +83,9 @@ } else if (ratio < 0) { ratio = 0; } + if (this._runBackwards) { + ratio = 1 - ratio; + } var l = this._text.length, i = (ratio * l + 0.5) | 0, applyNew, applyOld, str; diff --git a/js/libs/gsap/utils/Draggable.js b/js/libs/gsap/utils/Draggable.js new file mode 100644 index 00000000..7e5cc1a5 --- /dev/null +++ b/js/libs/gsap/utils/Draggable.js @@ -0,0 +1,747 @@ +/*! + * VERSION: 0.6.0 + * DATE: 2013-07-19 + * UPDATES AND DOCS AT: http://www.greensock.com + * + * @license Copyright (c) 2008-2013, GreenSock. All rights reserved. + * This work is subject to the terms at http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + */ +(window._gsQueue || (window._gsQueue = [])).push( function() { + + "use strict"; + + window._gsDefine("utils.Draggable", ["events.EventDispatcher","TweenLite"], function(EventDispatcher, TweenLite) { + + var tempVarsXY = {css:{}}, //speed optimization - we reuse the same vars object for x/y TweenLite.set() calls to minimize garbage collection tasks and improve performance. + tempVarsX = {css:{}}, + tempVarsY = {css:{}}, + tempVarsRotation = {css:{}}, + tempEvent = {}, //for populating with pageX/pageY in old versions of IE + doc = document, + docElement = doc.documentElement, + emptyArray = [], + emptyFunc = function() { return false; }, + RAD2DEG = 180 / Math.PI, + DEG2RAD = Math.PI / 180, + isOldIE = (doc.all && !doc.addEventListener), + prefix, + ThrowPropsPlugin, + + //just used for IE8 and earlier to normalize events and populate pageX/pageY + populateIEEvent = function(e, preventDefault) { + e = e || window.event; + tempEvent.pageX = e.clientX + doc.body.scrollLeft + docElement.scrollLeft; + tempEvent.pageY = e.clientY + doc.body.scrollTop + docElement.scrollTop; + if (preventDefault) { + e.returnValue = false; + } + return tempEvent; + }, + + checkPrefix = function(e, p) { + var s = e.style, + capped, i, a; + if (s[p] === undefined) { + a = ["O","Moz","ms","Ms","Webkit"]; + i = 5; + capped = p.charAt(0).toUpperCase() + p.substr(1); + while (--i > -1 && s[a[i]+capped] === undefined) { } + if (i < 0) { + return ""; + } + prefix = (i === 3) ? "ms" : a[i]; + p = prefix + capped; + } + return p; + }, + setStyle = function(e, p, value) { + var s = e.style; + if (s[p] === undefined) { + p = checkPrefix(e, p); + } + if (value == null) { + if (s.removeProperty) { + s.removeProperty(p.replace(/([A-Z])/g, "-$1").toLowerCase()); + } else { //note: old versions of IE use "removeAttribute()" instead of "removeProperty()" + s.removeAttribute(p); + } + } else if (s[p] !== undefined) { + s[p] = value; + } + }, + getComputedStyle = doc.defaultView ? doc.defaultView.getComputedStyle : emptyFunc, + getStyle = function(element, prop, keepUnits) { + var rv = (element._gsTransform || {})[prop], + cs; + if (rv || rv === 0) { + return rv; + } else if (element.style[prop]) { + rv = element.style[prop]; + } else if ((cs = getComputedStyle(element))) { + element = cs.getPropertyValue(prop.replace(/([A-Z])/g, "-$1").toLowerCase()); + rv = (element || cs.length) ? element : cs[prop]; //Opera behaves VERY strangely - length is usually 0 and cs[prop] is the only way to get accurate results EXCEPT when checking for -o-transform which only works with cs.getPropertyValue()! + } else if (element.currentStyle) { + rv = element.currentStyle[prop]; + } + return keepUnits ? rv : parseFloat(rv) || 0; + }, + addListener = function(element, type, func) { + if (element.addEventListener) { + element.addEventListener(type, func, false); + } else if (element.attachEvent) { + element.attachEvent("on" + type, func); + } + }, + removeListener = function(element, type, func) { + if (element.removeEventListener) { + element.removeEventListener(type, func); + } else if (element.detachEvent) { + element.detachEvent("on" + type, func); + } + }, + dispatchEvent = function(instance, type, callbackName) { + var vars = instance.vars, + callback = vars[callbackName], + listeners = instance._listeners[type]; + if (typeof(callback) === "function") { + callback.apply(vars[callbackName + "Scope"] || instance, vars[callbackName + "Params"] || emptyArray); + } + if (listeners) { + instance.dispatchEvent(type); + } + }, + getBounds = function(e) { + if (e === window) { + return { + top:(e.pageYOffset != null) ? e.pageYOffset : (doc.scrollTop != null) ? doc.scrollTop : doc.body.scrollTop || docElement.scrollTop || 0, + left:(e.pageXOffset != null) ? e.pageXOffset : (doc.scrollLeft != null) ? doc.scrollLeft : doc.body.scrollLeft || docElement.scrollLeft || 0, + width:(docElement ? docElement.clientWidth : e.innerWidth), + height:(docElement ? docElement.clientHeight : e.innerHeight) + }; + } + var width = e.offsetWidth, + height = e.offsetHeight, + top = e.offsetTop, + left = e.offsetLeft; + if (isOldIE && e._gsTransform) { + top -= e._gsTransform.y; + left -= e._gsTransform.x; + } + while ((e = e.offsetParent)) { + top += e.offsetTop; + left += e.offsetLeft; + } + return {top:top, left:left, width:width, height:height}; + }, + originProp = checkPrefix(doc.body, "transformOrigin").replace(/([A-Z])/g, "-$1").toLowerCase(), + transformProp = checkPrefix(doc.body, "transform"), + supports3D = (checkPrefix(doc.body, "perspective") !== ""), + use3DTransform = (transformProp && supports3D), + getTransformOriginOffset = function(e) { + var bounds = getBounds(e), + cs = getComputedStyle(e), + v = (originProp && cs) ? cs.getPropertyValue(originProp) : "50% 50%", + a = v.split(" "), + x = (v.indexOf("left") !== -1) ? "0%" : (v.indexOf("right") !== -1) ? "100%" : a[0], + y = (v.indexOf("top") !== -1) ? "0%" : (v.indexOf("bottom") !== -1) ? "100%" : a[1]; + if (y == null) { + y = "0"; + } else if (y === "center") { + y = "50%"; + } + if (x === "center" || isNaN(parseFloat(x))) { //remember, the user could flip-flop the values and say "bottom center" or "center bottom", etc. "center" is ambiguous because it could be used to describe horizontal or vertical, hence the isNaN(). If there's an "=" sign in the value, it's relative. + x = "50%"; + } + bounds.left += (x.indexOf("%") !== -1) ? bounds.width * parseFloat(x) / 100 : parseFloat(x); + bounds.top += (y.indexOf("%") !== -1) ? bounds.height * parseFloat(y) / 100 : parseFloat(y); + return bounds; + }, + isArrayLike = function(e) { + return (e.length && e[0] && ((e[0].nodeType && e[0].style && !e.nodeType) || (e[0].length && e[0][0]))) ? true : false; //could be an array of jQuery objects too, so accommodate that. + }, + flattenArray = function(a) { + var result = [], + l = a.length, + i, e, j; + for (i = 0; i < l; i++) { + e = a[i]; + if (isArrayLike(e)) { + j = e.length; + for (j = 0; j < e.length; j++) { + result.push(e[j]); + } + } else { + result.push(e); + } + } + return result; + }, + parseThrowProps = function(draggable, snap, max, min, factor) { + var vars = {}, + a, i, l; + if (snap) { + if (factor && snap instanceof Array) { //some data must be altered to make sense, like if the user passes in an array of rotational values in degrees, we must convert it to radians. Or for scrollLeft and scrollTop, we invert the values. + vars.end = a = []; + l = snap.length; + for (i = 0; i < l; i++) { + a[i] = snap[i] * factor; + } + } else if (typeof(snap) === "function") { + vars.end = function(value) { + return snap.call(draggable, value); //we need to ensure that we can scope the function call to the Draggable instance itself so that users can access important values like xMax, xMin, yMax, yMin, x, and y from within that function. + }; + } else { + vars.end = snap; + } + } + if (max || max === 0) { + vars.max = max; + } + if (min || min === 0) { + vars.min = min; + } + return vars; + }, + + addPaddingBR, + addPaddingLeft = (function() { //this function is in charge of analyzing browser behavior related to padding. It sets the addPaddingBR to true if the browser doesn't normally factor in the bottom or right padding on the element inside the scrolling area, and it sets addPaddingLeft to true if it's a browser that requires the extra offset (offsetLeft) to be added to the paddingRight (like Opera). + var div = doc.createElement("div"), + child = doc.createElement("div"), + childStyle = child.style, + val; + childStyle.display = "inline-block"; + childStyle.position = "relative"; + div.style.cssText = child.innerHTML = "width:90px; height:40px; padding:10px; overflow:auto; visibility: hidden"; + div.appendChild(child); + doc.body.appendChild(div); + addPaddingBR = (child.offsetHeight + 18 > div.scrollHeight); //div.scrollHeight should be child.offsetHeight + 20 because of the 10px of padding on each side, but some browsers ignore one side. We allow a 2px margin of error. + childStyle.width = "100%"; + if (!use3DTransform) { + childStyle.paddingRight = "500px"; + val = div.scrollLeft = div.scrollWidth - div.clientWidth; + childStyle.left = "-90px"; + val = (val !== div.scrollLeft); + } + doc.body.removeChild(div); + return val; + }()), + + //The ScrollProxy class wraps an element's contents into another div (we call it "content") that we either add padding when necessary or apply a translate3d() transform in order to overscroll (scroll past the boundaries). This allows us to simply set the scrollTop/scrollLeft (or top/left for easier reverse-axis orientation, which is what we do in Draggable) and it'll do all the work for us. For example, if we tried setting scrollTop to -100 on a normal DOM element, it wouldn't work - it'd look the same as setting it to 0, but if we set scrollTop of a ScrollProxy to -100, it'll give the correct appearance by either setting paddingTop of the wrapper to 100 or applying a 100-pixel translateY. + ScrollProxy = function(element) { + if (element.length && element[0]) { + element = element[0]; + } + var content = doc.createElement("div"), + style = content.style, + node = element.firstChild, + offsetTop = 0, + offsetLeft = 0, + prevTop = element.scrollTop, + prevLeft = element.scrollLeft, + extraPadRight = 0, + maxLeft = 0, + maxTop = 0, + elementWidth, elementHeight, contentHeight, nextNode; + + this.scrollTop = function(value, force) { + if (!arguments.length) { + return -this.top(); + } + this.top(-value, force); + }; + + this.scrollLeft = function(value, force) { + if (!arguments.length) { + return -this.left(); + } + this.left(-value, force); + }; + + this.left = function(value, force) { + if (!arguments.length) { + return -(element.scrollLeft + offsetLeft); + } + var dif = element.scrollLeft - prevLeft, + oldOffset = offsetLeft; + if ((dif > 2 || dif < -2) && !force) { //if the user interacts with the scrollbar (or something else scrolls it, like the mouse wheel), we should kill any tweens of the ScrollProxy. + prevLeft = element.scrollLeft; + TweenLite.killTweensOf(this, {left:1, scrollLeft:1}); + this.left(-prevLeft); + return; + } + value = -value; //invert because scrolling works in the opposite direction + if (value < 0) { + offsetLeft = (value - 0.5) | 0; + value = 0; + } else if (value > maxLeft) { + offsetLeft = (value - maxLeft) | 0; + value = maxLeft; + } else { + offsetLeft = 0; + } + if (offsetLeft || oldOffset) { + if (use3DTransform) { + style[transformProp] = "translate3d(" + -offsetLeft + "px," + -offsetTop + "px,0px)"; + } else { + style.left = -offsetLeft + "px"; + } + if (addPaddingLeft && offsetLeft + extraPadRight >= 0) { + style.paddingRight = offsetLeft + extraPadRight + "px"; + } + } + element.scrollLeft = value | 0; + prevLeft = element.scrollLeft; //don't merge this with the line above because some browsers adjsut the scrollLeft after it's set, so in order to be 100% accurate in tracking it, we need to ask the browser to report it. + }; + + this.top = function(value, force) { + if (!arguments.length) { + return -(element.scrollTop + offsetTop); + } + var dif = element.scrollTop - prevTop, + oldOffset = offsetTop; + if ((dif > 2 || dif < -2) && !force) { //if the user interacts with the scrollbar (or something else scrolls it, like the mouse wheel), we should kill any tweens of the ScrollProxy. + prevTop = element.scrollTop; + TweenLite.killTweensOf(this, {top:1, scrollTop:1}); + this.top(-prevTop); + return; + } + value = -value; //invert because scrolling works in the opposite direction + if (value < 0) { + offsetTop = (value - 0.5) | 0; + value = 0; + } else if (value > maxTop) { + offsetTop = (value - maxTop) | 0; + value = maxTop; + } else { + offsetTop = 0; + } + if (offsetTop || oldOffset) { + if (use3DTransform) { + style[transformProp] = "translate3d(" + -offsetLeft + "px," + -offsetTop + "px,0px)"; + } else { + style.top = -offsetTop + "px"; + } + } + element.scrollTop = value | 0; + prevTop = element.scrollTop; + }; + + this.maxScrollTop = function() { + return maxTop; + }; + + this.maxScrollLeft = function() { + return maxLeft; + }; + + this.disable = function() { + node = content.firstChild; + while (node) { + nextNode = node.nextSibling; + element.appendChild(node); + node = nextNode; + } + element.removeChild(content); + }; + + this.enable = function() { + node = element.firstChild; + if (node === content) { + return; + } + while (node) { + nextNode = node.nextSibling; + content.appendChild(node); + node = nextNode; + } + element.appendChild(content); + this.calibrate(); + }; + + this.calibrate = function(force) { + var widthMatches = (element.clientWidth === elementWidth), + x, y; + if (widthMatches && element.clientHeight === elementHeight && content.offsetHeight === contentHeight && !force) { + return; //no need to recalculate things if the width and height haven't changed. + } + if (offsetTop || offsetLeft) { + x = this.left(); + y = this.top(); + this.left(-element.scrollLeft); + this.top(-element.scrollTop); + } + //first, we need to remove any width constraints to see how the content naturally flows so that we can see if it's wider than the containing element. If so, we've got to record the amount of overage so that we can apply that as padding in order for browsers to correctly handle things. Then we switch back to a width of 100% (without that, some browsers don't flow the content correctly) + if (!widthMatches || force) { + style.display = "block"; + style.width = "auto"; + style.paddingRight = "0px"; + extraPadRight = Math.max(0, element.scrollWidth - element.clientWidth); + //if the content is wider than the container, we need to add the paddingLeft and paddingRight in order for things to behave correctly. + if (extraPadRight) { + extraPadRight += getStyle(element, "paddingLeft") + (addPaddingBR ? getStyle(element, "paddingRight") : 0); + } + } + style.display = "inline-block"; + style.position = "relative"; + style.overflow = "visible"; + style.width = "100%"; + style.paddingRight = extraPadRight + "px"; + //some browsers neglect to factor in the bottom padding when calculating the scrollHeight, so we need to add that padding to the content when that happens. Allow a 2px margin for error + if (addPaddingBR) { + style.paddingBottom = getStyle(element, "paddingBottom", true); + } + if (isOldIE) { + style.zoom = "1"; + } + elementWidth = element.clientWidth; + elementHeight = element.clientHeight; + maxLeft = element.scrollWidth - elementWidth; + maxTop = element.scrollHeight - elementHeight; + contentHeight = content.offsetHeight; + if (x || y) { + this.left(x); + this.top(y); + } + }; + + this.content = content; + this.element = element; + this.enable(); + }, + + + + + + Draggable = function(target, vars) { + EventDispatcher.call(this, target); + if (target.length && target[0]) { //in case the target is a selector object. + target = target[0]; + } + if (!ThrowPropsPlugin) { + ThrowPropsPlugin = (window.GreenSockGlobals || window).com.greensock.plugins.ThrowPropsPlugin; + } + this.vars = vars = vars || {}; + this.target = target; + this.x = this.y = 0; + var type = (vars.type || (isOldIE ? "top,left" : "x,y")).toLowerCase(), + xyMode = (type.indexOf("x") !== -1 || type.indexOf("y") !== -1), + rotationMode = (type.indexOf("rotation") !== -1), + xProp = xyMode ? "x" : "left", + yProp = xyMode ? "y" : "top", + allowX = (type.indexOf("x") !== -1 || type.indexOf("left") !== -1 || type === "scroll"), + allowY = (type.indexOf("y") !== -1 || type.indexOf("top") !== -1 || type === "scroll"), + self = this, + killProps = {}, + edgeTolerance = parseFloat(vars.edgeTolerance) || (1 - (parseFloat(vars.edgeResistance) || 0)), //legacy support for edgeTolerance (new, more intuitive name is edgeResistance which works the opposite) + scrollProxy, startMouseX, startMouseY, startElementX, startElementY, hasBounds, hasDragCallback, xMax, xMin, yMax, yMin, tempVars, cssVars, touch, touchID, rotationOffset, + onPress = function(e) { + if (isOldIE) { + e = populateIEEvent(e, true); + } else { + e.preventDefault(); + } + if (e.changedTouches) { //touch events store the data slightly differently + e = touch = e.changedTouches[0]; + touchID = e.identifier; + } else { + touch = null; + } + TweenLite.killTweensOf(scrollProxy || target, killProps); //in case the user tries to drag it before the last tween is done. + startMouseY = e.pageY; //record the starting x and y so that we can calculate the movement from the original in _onMouseMove + startMouseX = e.pageX; + if (rotationMode) { + rotationOffset = getTransformOriginOffset(target); + startElementX = rotationOffset.left; + startElementY = rotationOffset.top; + rotationOffset = Math.atan2(startElementY - startMouseY, startMouseX - startElementX); + } else if (scrollProxy) { + startElementY = scrollProxy.top(); + startElementX = scrollProxy.left(); + } else { + startElementY = getStyle(target, yProp); //record the starting top and left values so that we can just add the mouse's movement to them later. + startElementX = getStyle(target, xProp); + } + if (!rotationMode && !scrollProxy && vars.zIndexBoost !== false) { + target.style.zIndex = Draggable.zIndex++; + } + if (touch) { //note: on iOS, BOTH touchmove and mousemove are dispatched, but the mousemove has pageY and pageX of 0 which would mess up the calculations and needlessly hurt performance. + addListener(doc, "touchmove", onMove); //don't forget touch events + addListener(doc, "touchend", onRelease); + } else { + addListener(doc, "mousemove", onMove); //attach these to the document instead of the box itself so that if the user's mouse moves too quickly (and off of the box), things still work. + addListener(doc, "mouseup", onRelease); + } + self.isDragging = true; + hasDragCallback = !!(vars.onDrag || self._listeners.drag); + hasBounds = false; + if (scrollProxy) { + scrollProxy.calibrate(); + self.xMin = xMin = -scrollProxy.maxScrollLeft(); + self.yMin = yMin = -scrollProxy.maxScrollTop(); + self.xMax = xMax = self.yMax = yMax = 0; + hasBounds = true; + + } else if (!!vars.bounds && !rotationMode) { + var targetBounds = getBounds(target), + bounds = (vars.bounds.length && vars.bounds !== window && vars.bounds[0] && !vars.bounds.nodeType) ? getBounds(vars.bounds[0]) : (vars.bounds === window || vars.bounds.style) ? getBounds(vars.bounds) : vars.bounds; //could be a selector/jQuery object or a DOM element or a generic object like {top:0, left:100, width:1000, height:800} + self.xMin = xMin = (xyMode ? 0 : getStyle(target, "left")) + bounds.left - targetBounds.left; + self.yMin = yMin = (xyMode ? 0 : getStyle(target, "top")) + bounds.top - targetBounds.top; + self.xMax = xMax = xMin + (bounds.width - target.offsetWidth); + self.yMax = yMax = yMin + (bounds.height - target.offsetHeight); + if (xMin > xMax) { + self.xMin = xMax; + self.xMax = xMax = xMin; + xMin = self.xMin; + } + if (yMin > yMax) { + self.yMin = yMax; + self.yMax = yMax = yMin; + yMin = self.yMin; + } + hasBounds = true; + } + if (hasBounds) { + if (startElementX > xMax) { + startElementX = xMax + (startElementX - xMax) / edgeTolerance; + } else if (startElementX < xMin) { + startElementX = xMin - (xMin - startElementX) / edgeTolerance; + } + if (startElementY > yMax) { + startElementY = yMax + (startElementY - yMax) / edgeTolerance; + } else if (startElementY < yMin) { + startElementY = yMin - (yMin - startElementY) / edgeTolerance; + } + } + + if (!rotationMode) { + setStyle(target, "cursor", vars.cursor || "move"); + } + dispatchEvent(self, "dragstart", "onDragStart"); + return false; + }, + onMove = function(e) { + if (isOldIE) { + e = populateIEEvent(e, true); + } else { + e.preventDefault(); + } + var touches = e.changedTouches, + xChange, yChange, x, y, i; + if (touches) { //touch events store the data slightly differently + e = touches[0]; + if (e !== touch && e.identifier !== touchID) { //Usually changedTouches[0] will be what we're looking for, but in case it's not, look through the rest of the array...(and Android browsers don't reuse the event like iOS) + i = touches.length; + while (--i > -1 && (e = touches[i]).identifier !== touchID) {} + if (i < 0) { + return; + } + } + } + if (rotationMode) { + x = Math.atan2(startElementY - e.pageY, e.pageX - startElementX); + cssVars.rotation = "+=" + ((rotationOffset - x) * RAD2DEG); + TweenLite.set(target, tempVars); + rotationOffset = x; + } else { + yChange = (e.pageY - startMouseY), + xChange = (e.pageX - startMouseX), + x = (xChange > 2 || xChange < -2) ? startElementX + xChange : startElementX, + y = (yChange > 2 || yChange < -2) ? startElementY + yChange : startElementY; + if (hasBounds) { + if (x > xMax) { + x = xMax + (x - xMax) * edgeTolerance; + } else if (x < xMin) { + x = xMin + (x - xMin) * edgeTolerance; + } + if (y > yMax) { + y = yMax + (y - yMax) * edgeTolerance; + } else if (y < yMin) { + y = yMin + (y - yMin) * edgeTolerance; + } + } + self.x = x; + self.y = y; + if (scrollProxy) { + if (allowY) { + scrollProxy.top(y); + } + if (allowX) { + scrollProxy.left(x); + } + } else if (xyMode) { + if (allowY) { + cssVars.y = y; + } + if (allowX) { + cssVars.x = x; + } + TweenLite.set(target, tempVars); + } else { + if (allowY) { + target.style.top = y + "px"; + } + if (allowX) { + target.style.left = x + "px"; + } + } + } + if (hasDragCallback) { + dispatchEvent(self, "drag", "onDrag"); + } + return true; + }, + onRelease = function(e) { + if (isOldIE) { + e = populateIEEvent(e, false); + } + var touches = e.changedTouches, + throwProps = vars.throwProps, + xChange, yChange, i, snap, snapIsRaw; + if (touches) { //touch events store the data slightly differently + e = touches[0]; + if (e !== touch && e.identifier !== touchID) { //Usually changedTouches[0] will be what we're looking for, but in case it's not, look through the rest of the array...(and Android browsers don't reuse the event like iOS) + i = touches.length; + while (--i > -1 && (e = touches[i]).identifier !== touchID) {} + if (i < 0) { + return; + } + } + } + yChange = (e.pageY - startMouseY); + xChange = (e.pageX - startMouseX); + self.isDragging = false; + removeListener(doc, "mouseup", onRelease); + removeListener(doc, "touchend", onRelease); + removeListener(doc, "mousemove", onMove); + removeListener(doc, "touchmove", onMove); + if (throwProps && ThrowPropsPlugin) { + if (throwProps === true) { + snap = vars.snap || {}; + snapIsRaw = (snap instanceof Array || typeof(snap) === "function"); + throwProps = {resistance:(vars.resistance || 1000) / (rotationMode ? 100 : 1)}; + if (rotationMode) { + throwProps.rotation = parseThrowProps(self, snapIsRaw ? snap : snap.rotation, xMax, xMin, vars.useRadians ? null : DEG2RAD); + } else { + if (allowX) { + throwProps[xProp] = parseThrowProps(self, snapIsRaw ? snap : snap.x || snap.left || snap.scrollLeft, xMax, xMin, scrollProxy ? -1 : null); + } + if (allowY) { + throwProps[yProp] = parseThrowProps(self, snapIsRaw ? snap : snap.y || snap.top || snap.scrollTop, yMax, yMin, scrollProxy ? -1 : null); + } + } + } + ThrowPropsPlugin.to(scrollProxy || target, {throwProps:throwProps, ease:(vars.ease || Power3.easeOut), onComplete:vars.onComplete, onUpdate:vars.onUpdate}, vars.maxDuration || 2, vars.minDuration || 0.5, (vars.overshootTolerance === undefined) ? edgeTolerance + 0.2 : vars.overshootTolerance); + } + if (!rotationMode) { + setStyle(target, "cursor", vars.cursor || "move"); + } + if (xChange < 2 && xChange > -2 && yChange < 2 && yChange > -2) { + dispatchEvent(self, "click", "onClick"); + } + dispatchEvent(self, "dragend", "onDragEnd"); + }; + + this.enable = function() { + addListener(target, "mousedown", onPress); + addListener(target, "touchstart", onPress); + if (!rotationMode) { + setStyle(target, "cursor", vars.cursor || "move"); + } + setStyle(target, "userSelect", "none"); + setStyle(target, "touchCallout", "none"); + if (ThrowPropsPlugin) { + ThrowPropsPlugin.track(scrollProxy || target, (xyMode ? "x,y" : rotationMode ? "rotation" : "top,left")); + } + if (scrollProxy) { + scrollProxy.enable(); + } + }; + + this.disable = function() { + var dragging = this.isDragging; + if (!rotationMode) { + setStyle(target, "cursor", null); + } + TweenLite.killTweensOf(scrollProxy || target, killProps); //in case the user tries to drag it before the last tween is done. + setStyle(target, "userSelect", "text"); + setStyle(target, "touchCallout", "default"); + removeListener(target, "mousedown", onPress); + removeListener(target, "touchstart", onPress); + removeListener(doc, "mouseup", onRelease); + removeListener(doc, "touchend", onRelease); + removeListener(doc, "mousemove", onMove); + removeListener(doc, "touchmove", onMove); + if (ThrowPropsPlugin) { + ThrowPropsPlugin.untrack(scrollProxy || target, (xyMode ? "x,y" : rotationMode ? "rotation" : "top,left")); + } + if (scrollProxy) { + scrollProxy.disable(); + } + this.isDragging = false; + if (dragging) { + dispatchEvent(this, "dragend", "onDragEnd"); + } + }; + + if (type.indexOf("scroll") !== -1) { + scrollProxy = this.scrollProxy = new ScrollProxy(target); + if (target._gsTransform && target._gsTransform.z === 0.01) { + TweenLite.set(target, {z:0}); //if the element and the ScrollProxy's content share the same z transform, some Webkit browsers ignore mouse clicks on it. + TweenLite.set(target, {z:0}); + } + target.style.overflowY = allowY ? "auto" : "hidden"; + target.style.overflowX = allowX ? "auto" : "hidden"; + target = scrollProxy.content; + } + + // prevent IE from trying to drag an image and prevent text selection in IE + target.ondragstart = doc.onselectstart = target.onselectstart = emptyFunc; + TweenLite.set(target, {z:"+=0.01"}); //improve performance by forcing a GPU layer when possible + if (rotationMode) { + killProps.rotation = 1; + } else { + if (allowX) { + killProps.x = killProps.left = 1; + } + if (allowY) { + killProps.y = killProps.top = 1; + } + } + if (rotationMode) { + tempVars = tempVarsRotation; + cssVars = tempVars.css; + } else if (xyMode) { + tempVars = (allowX && allowY) ? tempVarsXY : allowX ? tempVarsX : tempVarsY; + cssVars = tempVars.css; + } + this.isDragging = false; + this.enable(); + }, + p = Draggable.prototype = new EventDispatcher(); + + p.constructor = Draggable; + Draggable.version = "0.6.0"; + Draggable.zIndex = 1000; + + Draggable.create = function(targets, vars) { + if (typeof(targets) === "string") { + targets = TweenLite.selector(targets); + } + var a = isArrayLike(targets) ? flattenArray(targets) : [targets], + i = a.length; + while (--i > -1) { + a[i] = new Draggable(a[i], vars); + } + return a; + }; + + return Draggable; + + }, true); + + +}); if (window._gsDefine) { window._gsQueue.pop()(); } \ No newline at end of file diff --git a/js/main.js b/js/main.js index 59aa1b1c..d1a958f1 100644 --- a/js/main.js +++ b/js/main.js @@ -6,6 +6,8 @@ var $_GET; var maskHashChange = false; var jsLibraries = []; var longpresstime = undefined; +var startAfterLoading = false; +var gal=null; $(function() { $_GET = parseGet(); @@ -48,7 +50,27 @@ function onAppResume() { } function onDeviceReady() { - init(); + var manifest = window.sessionStorage.getItem('manifest.' + DATAS.id); + if (manifest) { + gal = new GameAssetLoader(JSON.parse(manifest)); + gal.init(function() { + startAfterLoading = true; + init(); + }); + + gal.onLoaded(function(info) { + $(window).trigger('GALBundleLoaded', [info]); + }); + + $(window).on('GALBundleLoaded', function(e, info) { + if (info.bundleName === 'content_4') { + fluidbook.changeAddress(); + } + fluidbook.loader.retryErrorImages(); + }); + } else { + init(); + } } function loadJSLibrary(url, callback) { @@ -97,14 +119,18 @@ function init() { INITED = true; fluidbook = new Fluidbook(DATAS); + if (null != gal) { + fluidbook.gal = gal; + } fluidbook.loadPlugins(); fluidbook.loader.preloadPages(); desktopScale = 1; desktopScaleAmount = 1.5; - $("#main").css('display', 'block'); + if ($_GET.s == '1') { + $("#main").css('display', 'block'); $('html').addClass('screenshot'); } @@ -190,7 +216,9 @@ function initEvents() { fluidbook.pollZoom(); }, 250); - fluidbook.changeAddress(); + if (!startAfterLoading) { + fluidbook.changeAddress(); + } } function checkScroll() { diff --git a/style/fluidbook.css b/style/fluidbook.css index f0d53679..f677cd1b 100644 --- a/style/fluidbook.css +++ b/style/fluidbook.css @@ -1279,8 +1279,7 @@ a.button{ /* Webfonts*/ @font-face { font-family: 'Silkscreen'; - src: url('fonts/slkscr-webfont.woff') format('woff'), - url('fonts/slkscr-webfont.ttf') format('truetype'); + src: url('fonts/slkscr-webfont.ttf') format('truetype'); font-weight: normal; font-style: normal; @@ -1288,48 +1287,42 @@ a.button{ @font-face { font-family: 'Ubuntu'; - src: url('fonts/Ubuntu-R-webfont.woff') format('woff'), - url('fonts/Ubuntu-R-webfont.ttf') format('truetype'); + src: url('fonts/Ubuntu-R-webfont.ttf') format('truetype'); font-weight: 400; font-style: normal; } @font-face { font-family: 'Ubuntu'; - src: url('fonts/Ubuntu-RI-webfont.woff') format('woff'), - url('fonts/Ubuntu-RI-webfont.ttf') format('truetype'); + src: url('fonts/Ubuntu-RI-webfont.ttf') format('truetype'); font-weight: 400; font-style: italic; } @font-face { font-family: 'Ubuntu'; - src: url('fonts/Ubuntu-L-webfont.woff') format('woff'), - url('fonts/Ubuntu-L-webfont.ttf') format('truetype'); + src: url('fonts/Ubuntu-L-webfont.ttf') format('truetype'); font-weight:300; font-style: normal; } @font-face { font-family: 'Ubuntu'; - src: url('fonts/Ubuntu-LI-webfont.woff') format('woff'), - url('fonts/Ubuntu-LI-webfont.ttf') format('truetype'); + src: url('fonts/Ubuntu-LI-webfont.ttf') format('truetype'); font-weight: 300; font-style: italic; } @font-face { font-family: 'Ubuntu'; - src: url('fonts/Ubuntu-M-webfont.woff') format('woff'), - url('fonts/Ubuntu-M-webfont.ttf') format('truetype'); + src:url('fonts/Ubuntu-M-webfont.ttf') format('truetype'); font-weight: 600; font-style: normal; } @font-face { font-family: 'Ubuntu'; - src: url('fonts/Ubuntu-MI-webfont.woff') format('woff'), - url('fonts/Ubuntu-MI-webfont.ttf') format('truetype'); + src:url('fonts/Ubuntu-MI-webfont.ttf') format('truetype'); font-weight: 600; font-style: italic; } diff --git a/style/fonts/Ubuntu-B-webfont.woff b/style/fonts/Ubuntu-B-webfont.woff deleted file mode 100644 index d2752865f37b7f7e0b81789fcac9dafa5d94745a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25168 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 diff --git a/style/fonts/Ubuntu-BI-webfont.woff b/style/fonts/Ubuntu-BI-webfont.woff deleted file mode 100644 index 171b64fab533b565f7c30a07150de403d7d0c189..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27996 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 diff --git a/style/fonts/Ubuntu-LI-webfont.woff b/style/fonts/Ubuntu-LI-webfont.woff deleted file mode 100644 index 70ee056f6c19691f64ea3d23d3d5d73759d0d5f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29200 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 H;2|^s6PB)c diff --git a/style/fonts/Ubuntu-M-webfont.woff b/style/fonts/Ubuntu-M-webfont.woff deleted file mode 100644 index 72ce7ad4abd6069ada91b887a30de071d7bedcc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25756 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 diff --git a/style/fonts/Ubuntu-MI-webfont.woff b/style/fonts/Ubuntu-MI-webfont.woff deleted file mode 100644 index c1f6294d3161ff9ccd5191d417a4ecf291ba0b6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28500 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 diff --git a/style/fonts/Ubuntu-R-webfont.woff b/style/fonts/Ubuntu-R-webfont.woff deleted file mode 100644 index cb3dc6f1bd4ca7328fcd75e507249b22dad1bd3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25816 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 F8vw7@$!q`s diff --git a/style/fonts/slkscr-webfont.woff b/style/fonts/slkscr-webfont.woff deleted file mode 100644 index 6f18403a13406e881c3934dbebc7b45d1e3dbd8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5892 zcmaJ_WmJ?=yPcuaA%>D197=>4QW}PaQ5qzM?rsJwx)CW!rCVYM6+w_r0qO2;5D*c8 zJAB`|KklD<*4pcN_I~%X&N^qE_s>RaDk}qk0PLc}15n&m1@M3QUH^ZVva;S&008KM zRhjP4`+I0kMNvr^t3_csGZt)sLI9qoE=&-sm14Oh76$P)5<1qdmL6Db9m@x>^*P)K zO=#`s!v+B0V6Ym|e{hEX#m>Xt6{|I1JvG>B3#x~e*jsvIXYua#CHoI>0fhE00d`o; z9{{-L4giQoC03(y9c(Ra0063OtOtgL=-&*xRtKyI08rCoISUq05Qqrv;Oc{&qZY&R z1nfTZ3Lj1ST->eie7#t00gK}>(!@enOMmRX;Jb6M-2s>m=y$VpwZ&?8z7y@pVtsOVFzIayz*Zm@fSw!7(p`Q09aM2w`^4{Q z`p;Th*jQLB<603DP*_-5;I#{~*#S@K0mLXk8P@Zk@9%8ix3>1Two7E_=L839)5r@A zTdG=9S+wFZd8@}TFwuiq;21UdqP>MhvdtfyWL$vW8Ik{gW-To2f-D#alnE%ffxqb6 zUeZPovGH}X0l=14rPhY67=vIWLJ?sOxdC?E-pYyNW9UOe08jRB*KQ+k++QU8V!H|6 z!xab@EX{BTN_+$4Z|lW_rvIb?eCTZN?;dLF>l*AB=z+0uLm#m}vvIJtx5Y|94`!me zPs>8dK*LPUNSBk)D<_?R#~B-=Hii$#<$Ab-y$QSyz!~7of7VpHNy7v|u|N*O4ep#~ z6Q2dwWhCGng^Q}PRq?m?`dN$1&%QyeTcKJBwb-;ne>)R6aO)O64NV}0$^>ghrDTXi z=L<_p)_D(Q2qF6u%h8U_TV>v~sw-}xc3H2v3TKsq2uIJ~C@aslJ>U}+dcM*4>igR^ zJK+tD`*H!pCjAP^V;Z@%2VVmPWkXkFZU>|YLsRWCvyJT`(qXMHh1?vEMGB12*9h|( z2^2X&1b9qu{=7%8|2B0K<;w6`R45be0b!R-Cvb48d?PoOBT@KVCf(ZryoU^z> zwolQ+QqXilk58z@&m(95k;HVNy7w~h9!5VqByz2QIQ)z+S`eua7CQY$|!l{%LrG(kKez1}P-8_={&y{$F1eKws7BcH?jNDLH^Vp*d4zzvWe#`aLUf|q^y$i{)i>kw>z>+M;jB0bG1iR|4iKqG}Oe>vCgrY^^2xlAJyn>%aR}%OV|+QSB^U&$_+W z!mh5CHn8BLc7#VEv?279v($I_>3)O9`nSdH#hobr>=ObSQ{9`39ZEB3320^kea0d! zK=D9;5*9_*m6cD1SrY3A2i2n9gIBau5jE_Y#g2#X!6&W~E2Git8kzn7ihQ3!BA2r0 zq$PH{l%}(`JdMe=9nv>L8^m%iIDLepV;?*}@-zM>r;>w=WgvZZ@8eJBhjr^M^Jcux zBXqB;4StoEXV3fc%QSr73-URL+U@xH)nkdWibxSkB|xitLZ|K5XZ~iaaC>O!Z*hHS zfH*rYSV00E)z$g@+dil<*}?40amUwx$LOu?>pkcZYLlH0M~5vcHcEI8G*(ZvBNi8{ zAdx*PsB!9uGW1#hIRfOV2-$P-OXW!NQLjDm^b%!6K3@orpX}KE3q~Mruy-fT?wX^q z19gnN*p^}pD&(sC{OVFtTcXgA#SZyQ>1km;r{=C$%vcetSd!04-T<%!2VZtkS0fBF z)E6OX?PZis`{3%ttCf|%TVm3V82?nSw#hD9alQ@zY;8v`aw)kTue|8eu(gZ0`5?zCiRO`-p#p`92R#c<)p!@yeQ2L)&`4 z(6Dg*n_mN!)L)Dl_J~$mdnOeQtj)t#ulhTFCRFPB6$vK(C=iijL*tXl1i<+I#>r|3 zK60rsTt_4gC@nH?(&mkbABf9*oCuYlRN&T~0VSwP+Ln$*+5(PgH269i2XSNaCB*`@FNCAo7gE#Z&NZegml%0%k5e_g)(2V&^6eYf`_#v2qPA%{|m46 z9jk!L#+Z-2UPUPFgUKLVmXYkY^j|4N0o5jq2rrc`=^oi?6Rin=et0XP)QW|^0(ezn zZ-UxN_`!y~ecifP1|&%=P_Jc~2x3WmV#!^-U2PHhViqKN*@lNdg@09xQ8kF|$knIQ z=o?62tVM9{!>acQClwkO6#=Kf3#v3o!<2y9$guX0oStW0SAjJ&_;xjt<(d_IsVbr?J8n9OW(|I@DbM&VC_zzA?;EeHbS!05|~~=tx?|x5?YyF;3>_0qZiQ zUY2_0#DgAnB%{nib`omTO@1vU zis|uLNT^@2BM^DB2xOM3)(A(MKwp11d3*j4^>67$nNKXWuIm#q2l;ZJXMg9l2eZ1v z;q+1JAs)VJ$GB!XH71+_Fly6__JN4p+)SEKI75po`kUJ@yKK3->$-CiquD6C!K^Q; z)Yo{xxLY;qbS7QO!|(kux~L|o4XEGwywF>I5ARLO=&t~O9YtCfuG91lU!z6#k@gl_ z6T}yehk1n9=85fyIt>>lR)6lIJEl6iahj^eQZM|xw{k%2q`)EDgnnDs*`S!KRZm;o1qtUWF9H(I%|Z`V9AN< zJ>Ad;+KQrYqD6A!$W!{Tr(K4R2(M7JC;;12DTVMFy+tQf8reMs`J}d#q+5^8_-m zP+w~I{@{@MNe_|Ks^E{r!~}WeT}l>CUBC4Lk%Y7SU;L(xvd&SFnacMIPRRedS^JQt zuZ5*y(v&)k2R~wd~Bk=`l$wXXrO1F#--0e*9okINQp>a&h{z ze>a@38{__JJnMqI+uLyHRe2zhWHZ*WwOpmeZlD`Y?6cEx-p6UA#PSLuP*)sM;c4&= zWyf#e9Wzxwv5-1Jp3s=W&wq-XD)6Zpo!2+3zHE*K;Mb^R(LeGMFSOHUOf~y)B7*-w zSN?wS5Z~cE_0qxydWq(I{eg>kRv6sv3*#4OANQ-e4V8n=#CG@6m;o4HIS*x{v zz~y6CAI9Z8WEur8lYtO9^HzP8smg+(I*^dOUS(?q%&|{n`9Yz#x3;F(6h%88F~y>w zKfv5yLX4iA3P7C)MC(kqeQo{hfU$(lWRA3yUQlv1HR+0QD|xpJby0Rze|BLyK30|p ze)uEoim@}7rj0M`oSGif^QT|$;GR?Qu1>~nm7Z;*jOm{H{fNuQ+TB4f6M+T&0zQdx z*LrEIo~CL3eZD(UMZczlihA-kzpfi=&Un?m#KD1Yi#>_uNrI`W{=R1eN}e}cPs}#9 zE|ikd7;?|0CUf53b&Ay!zFdiceQJEtM|~P!lfNUOHr?)w8eCpOm45c!nm;XReUAga};N$xP=U1>90)T$fa=cYd1JoOPjsQ&s~h|ug{5yoS)$rG*ha^s18>6 z;Ex3;XzEGeB1`^#ItK?!F75`KXZxA>%_F-)KZtM#@i*yYhGC^wn+0wLC7B&xyrkSv zbHXh55~Y+_1yHFcL`Pkg@aiUV&U3V!+DOOb8pM>Cm+zx;#DvoaUjNmPgDwxg=;Fw` zSxaWJ`=+z64CzHaU24O7P&!8(m-6RVf73X|b)uTp#YZS0;njY=t=IICHjyY~N)J9> zHF*DX@C)~PJLue(0;Z`Fhx`cTrMW_q^FFwTBE3Ud(|voVG8MO%)=Hnq^=<7spUZti z9-2>HjQLOsj0RF&PUpIJ)FE>h<&cxwMEi$X+ZKxb8eyr zL}65K@tK_!rfTX7`bTl5W4?BT--e0Pcv&YhZ-`ikSm?14_=Lk`*DU{BN=5Uf!g$(N zi&l|cf=o`PlY{z7p^9;3yH1VFGSp>a_>)!dBjYcpg5`B2T5+JWX4A-qA897%z0!!@ zJ}C#}R+6er^mwIGrc;0(k1RsBWF>#vb7J=*f+WNRI z?sg5AfR(4EB1fb97F{tn*Ea7^S=?OCsp7xdv!Ze&x~X#F9qBgEYL}v?V&7rT+c71( zS+{ZD)`(ge?m|aB}L)8=}9mpdLC=HMX?SU}7ihkb^gRkH5%kgDi^SfGp3VcXHiOU9iZ2#WYwqF_cf#E_ zz;zIrx*AMd`-@}6Kv5PF0j!~Sw?+NpildAUUUWgK=j_s*?HP5A&sI)tegb8UnJw;4 zzu=2IWj5GZyQ%)GX#Z+LW-IZTT z@L9a*;qN}|YKgk0h{RK&>Var*4$%+2LXn|FQQ|1N2BQX=2I_`kkHA&WwT!OQ_^Bu~ z$Q(ASFchW+ck3V?U>UT`R;~d=_>J>iBlD@T z#w;0`DPWjaF8VGxxJ%B^04RX?j$m^HAQsqA0W0U<3I4OL2~Ra}5ES9Ec;uX6G=$q8 zfP6)28+^tY%H$Iq?(c$ZKgb|%VzE6dL@ezJe;OM(Adq+2H-CL6_R4|fPk408=W$@h z!AM~rl9x(vJl6$%MH6|2#T8qMJJ9Ql6E})7wVP@0qkjv;KNdXc^#^}yE=|acCY3qA zPDqNKJTr8HfswZLoeV-$w1qlei-W^WpaZv}e!Y0=W?_-YRjbdE1K-n5Kh$?hc%IGd z(5RR^*4Rtr2gOvS#Pevz0IMwx$TNiEoWo z6FFTR?M8uU2)X3F_YH85wYFH0EHEUDh#I0EC-zi$OrF=Zehk57 z>NBPQdvzw%%BDazRTU@LEk^xBuuE8o`^h6Js9GYYLMl_;4}oEv*he)_vS|!>v+h%woo2@G*j~)1I!mGU7UWNQMxFrC=;nwnw&ozYzSgC zL-v=yIJBeH=1W@)Qu=vaS2U44MIxV4Mf09I>CV=R77RLh&%RX9Jra3(q`UF;@9#fa zuLB+R49YCa-D-Zf!>oo76WDub0N#dUfNuau43U;$4G>5eCfrKZ56^k^lez -- 2.39.5