Skip to content

Commit

Permalink
1. Got rid of duplicate load-failed popup spawn.
Browse files Browse the repository at this point in the history
2. Fixed event manager recursive event firing failure (kind of a hack).
3. Two routes for failed loads implemented.
  • Loading branch information
secretrobotron committed Dec 6, 2011
1 parent 183d9dd commit 6b40581
Show file tree
Hide file tree
Showing 7 changed files with 159 additions and 27 deletions.
9 changes: 7 additions & 2 deletions butter/src/core/eventmanager.js
Expand Up @@ -94,8 +94,13 @@ THE SOFTWARE.
} //if

if ( type ) {
var theseListeners = listeners[ type ];
if ( theseListeners ) {
var theseListeners;
//copy the listeners to make sure they're all called
if ( listeners[ type ] ) {
theseListeners = [];
for ( var i=0, l=listeners[ type ].length; i<l; ++i ) {
theseListeners.push( listeners[ type ][ i ] );
} //for
var e = preparedEvent || {
currentTarget: target || that,
target: target || that,
Expand Down
9 changes: 7 additions & 2 deletions butter/src/previewer/media.js
Expand Up @@ -38,19 +38,24 @@
onTimeout = prepareOptions.timeout || onError,
popcornOptions = prepareOptions.popcornOptions;

function failureWrapper( e ) {
_interruptLoad = true;
onError( e );
} //failureWrapper

function popcornSuccess( popcorn ) {
onSuccess({
popcorn: popcorn
});
} //popcornSuccess

that.prepareMedia( that.findMediaType(), onError );
that.prepareMedia( that.findMediaType(), failureWrapper );
try {
that.createPopcorn( that.generatePopcornString( { options: popcornOptions } ) );
that.waitForPopcorn( popcornSuccess, onTimeout, 100 );
}
catch( e ) {
onError( e );
failureWrapper( e );
} //try
}; //prepare

Expand Down
2 changes: 0 additions & 2 deletions butter/src/previewer/module.js
Expand Up @@ -108,8 +108,6 @@

server.listen( "link", "error", function( e ) {
if ( e.data.type === "media-loading" ) {
that.destroy();
previewIframe.src = "";
butter.dispatch( "previewerfail" );
onfail && onfail( that );
} else {
Expand Down
41 changes: 38 additions & 3 deletions js/button-manager.js
Expand Up @@ -4,8 +4,13 @@

var ButtonManager = function() {
var buttons = {},
sets = {},
that = this;

this.addSet = function( name, set ) {
sets[ name ] = set;
}; //addSet

this.add = function( name, button, functions ) {
if ( typeof( button ) === "string" ) {
button = document.getElementById( button );
Expand Down Expand Up @@ -38,17 +43,29 @@
} //if
}; //add

function doBind( button, funcName, func ) {
var wrapperFunc = func;
if ( funcName === "click" ) {
wrapperFunc = function( e ) {
if ( !button.disabled ) {
func( e );
} //if
}; //wrapperFunc
}
button.bind( funcName, wrapperFunc );
} //doBind

this.bind = function( name, fnName, fn ) {
var button = buttons[ name ];
if ( fnName ) {
button.bind( fnName, fn );
doBind( button, fnName, fn );
}
else {
var functions = button.functions;
if ( functions ) {
for ( var func in functions ) {
if ( functions.hasOwnProperty( func ) ) {
button.bind( func, functions[ func ] );
doBind( button, func, functions[ func ] );
} //if
} //for
} //if
Expand All @@ -72,12 +89,30 @@
} //if
}; //unbind

this.toggle = function( name, state ) {
function doToggle( name, state ) {
if ( buttons[ name ] ) {
$( buttons[ name ].button ).attr( "disabled", "true" );
buttons[ name ].disabled = true;
} //if
} //doToggle

this.toggle = function( name, state ) {
if ( name === "string" ) {
doToggle( name, state );
}
else {
for ( var i=0; i<name.length; ++i ) {
doToggle( name[ i ], state );
} //for
} //if
}; //toggle

this.toggleSet = function( name, state ) {
if ( sets[ name ] ) {
that.toggle( sets[ name ], state );
} //if
}; //toggleSet

this.init = function() {
}; //init

Expand Down
60 changes: 57 additions & 3 deletions js/popcorn-maker.js
Expand Up @@ -44,9 +44,29 @@
this.currentProject = {
guid: utils.getUUID(),
preview: undefined,
template: undefined
template: undefined,
mediaErrorState: {},
initialized: false
}; //currentProject

// horrible, horrible hack. must replace later
this.state = "initializing";

Object.defineProperty( this, "isMediaBroken", {
get: function() {
return Object.keys( mediaErrorState ).length > 0;
}
});

Object.defineProperty( this, "mediaAccessAllowed", {
get: function() {
return that.isMediaBroken
&& that.currentProject.initialized
&& that.currentProject.preview
&& that.currentProject.template;
}
});

var init = function( e ) {
_butter = e.data;

Expand Down Expand Up @@ -92,6 +112,8 @@
onClose: function(){
}
});

that.state = "ready";
}; //init

Object.defineProperty( that, "popupManager", { get: function() { return _popupManager; } } );
Expand Down Expand Up @@ -177,6 +199,7 @@
that.currentProject.preview.destroy();
delete that.currentProject.preview;
delete that.currentProject.template;
that.currentProject.initialized = false;
} //if
}; //destroyCurrentPreview

Expand Down Expand Up @@ -224,6 +247,7 @@
that.toggleLoadingScreen( true );
that.toggleKeyboardFunctions( false );
_popupManager.hidePopups();
that.currentProject.initialized = false;
that.createPreview({
template: template,
projectData: projectData.project,
Expand All @@ -242,6 +266,7 @@
that.toggleLoadingScreen( true );
that.toggleKeyboardFunctions( false );
that.destroyCurrentPreview();
that.currentProject.initialized = false;
that.createPreview({
template: _templateManager.find( { template: projectOptions.template } ),
defaultMedia: projectOptions.defaultMedia,
Expand Down Expand Up @@ -269,6 +294,8 @@
defaultMedia = projectData.project.media[ 0 ].url;
} //if

that.currentProject.initialized = false;

that.createPreview({
template: _templateManager.find( { root: projectData.template } ) || _templateManager.templates[ 0 ],
defaultMedia: defaultMedia,
Expand All @@ -282,6 +309,7 @@
}; //importProject

this.createPreview = function( previewOptions ) {
that.state = "create-preview";
that.destroyCurrentPreview();
that.currentProject.preview = new _butter.previewer.Preview({
template: previewOptions.template.template,
Expand All @@ -290,6 +318,8 @@
onload: function( preview ) {
that.currentProject.template = previewOptions.template
that.buildRegistry( _butter.currentMedia.registry );
that.currentProject.initialized = true;
_buttonManager.toggleSet( "preview", true );
if ( previewOptions.onload ) {
previewOptions.onload( preview );
}
Expand All @@ -299,13 +329,37 @@
that.toggleKeyboardFunctions( true );
}, //onload
onfail: function( preview ) {
that.toggleLoadingScreen( false );
that.toggleKeyboardFunctions( true );
_popupManager.showPopup( "load-failed" );
}
}); //Preview
}; //createPreview

_buttonManager.addSet( "all", [
"add-project",
"change-title",
"change-url",
"confirm-delete-project",
"confirm-load",
"create-new",
"credits",
"delete-project",
"edit-projects",
"import-json",
"load-project",
"open-help",
"popup-close",
"publish-project",
"retry-load",
"save-project",
"save-project-data",
"show-html",
"show-json",
"timeout-keep-waiting",
"timeout-retry-load",
"wizard-add-project",
"wizard-create-new"
]);

} //PopcornMaker

return PopcornMaker;
Expand Down
52 changes: 43 additions & 9 deletions js/preview.js
Expand Up @@ -15,33 +15,67 @@
// force the iframe's source to be nothing
previewIframe.src = '';

var failureState = false;

pm.butter.listen( "previewerfail", function() {
failureState = true;
pm.toggleLoadingScreen( false );
popupManager.hidePopups();
popupManager.showPopup( "load-failed" );
});

var timedOutMedia;
pm.butter.listen( "previewertimeout", function( e ) {
timedOutMedia = e.data;
pm.toggleLoadingScreen( false );
popupManager.showPopup( "load-timeout" );
if ( !failureState ) {
pm.currentProject.mediaErrorState[ e.data ] = "timeout";
timedOutMedia = e.data;
pm.toggleLoadingScreen( false );
popupManager.hidePopups();
popupManager.showPopup( "load-timeout" );
} //if
});

pm.butter.listen( "mediaadded", function( e ) {
failureState = false;
});

pm.butter.listen( "mediacontentchanged", function( e ) {
failureState = false;
});

pm.butter.listen( "mediaready", function( e ) {
delete pm.currentProject.mediaErrorState[ e.data.id ];
pm.state = "ready";
failureState = false;
});

buttonManager.add( "retry-load", $( "#retry-load" ), {
click: function() {
pm.destroyCurrentPreview();
pm.toggleLoadingScreen( false );
popupManager.hidePopups();
popupManager.showPopup( "add-project" );
if ( !pm.currentProject.initialized ) {
pm.destroyCurrentPreview();
} //if
if ( pm.state === "change-media" ) {
popupManager.showPopup( "change-media" );
}
else {
popupManager.showPopup( "add-project" );
}
}
});

buttonManager.add( "timeout-retry-load", $( "#timeout-retry-load" ), {
click: function() {
pm.destroyCurrentPreview();
pm.toggleLoadingScreen( false );
popupManager.hidePopups();
popupManager.showPopup( "add-project" );
if ( !pm.currentProject.initialized ) {
pm.destroyCurrentPreview();
} //if
if ( pm.state === "change-media" ) {
popupManager.showPopup( "change-media" );
}
else {
popupManager.showPopup( "add-project" );
}
}
});

Expand Down
13 changes: 7 additions & 6 deletions js/timeline.js
Expand Up @@ -62,6 +62,7 @@
$('li.edit a.edit-timeline-media').click(function(){
pm.popupManager.hidePopups();
$('#url').val( pm.butter.currentMedia.url );
pm.state = "change-media";
pm.popupManager.showPopup( "change-media" );
});

Expand Down Expand Up @@ -133,7 +134,7 @@

var zoom = function( delta ) {

if ( pm.currentProject.preview ) {
if ( pm.mediaAccessAllowed ) {
var newZoom = butter.timeline.zoom( delta ),
scrubberLeft = checkScrubber();

Expand All @@ -152,7 +153,7 @@

var mouseEvent = function( event ) {

if ( pm.currentProject.preview && event.shiftKey ) {
if ( pm.mediaAccessAllowed && event.shiftKey ) {

event.preventDefault();
slideValue = zoom( event.detail || event.wheelDelta );
Expand All @@ -166,7 +167,7 @@

tracksDiv.addEventListener( "scroll", function( event ) {

if ( pm.currentProject.preview ) {
if ( pm.mediaAccessAllowed ) {
var scrubberLeft = checkScrubber();

if ( scrubberLeft - 5 > scrubberContainer.offsetWidth || scrubberLeft < 0 ) {
Expand All @@ -183,7 +184,7 @@

scrubberContainer.addEventListener( "mousedown", function( event ) {

if ( pm.currentProject.preview ) {
if ( pm.mediaAccessAllowed ) {

scrubberClicked = true;
butter.targettedEvent = undefined;
Expand All @@ -198,7 +199,7 @@

document.addEventListener( "mousemove", function( event ) {

if ( scrubberClicked && pm.currentProject.preview ) {
if ( scrubberClicked && pm.mediaAccessAllowed ) {

var scrubberPos = event.pageX - scrubberContainer.offsetLeft - 22 + tracksDiv.scrollLeft;

Expand Down Expand Up @@ -458,7 +459,7 @@
}, false);

document.getElementsByClassName( "play-btn" )[ 0 ].addEventListener( "click", function( event ) {
if ( pm.currentProject.preview ) {
if ( pm.mediaAccessAllowed ) {
pm.currentProject.preview.playing ? pm.currentProject.preview.pause() : pm.currentProject.preview.play();
} //if
}, false);
Expand Down

0 comments on commit 6b40581

Please sign in to comment.