/**
* @author dforrer / https://github.com/dforrer
*/
Sidebar.History = function ( editor ) {
var signals = editor.signals;
var history = editor.history;
var container = new UI.CollapsiblePanel();
container.setCollapsed( editor.config.getKey( 'ui/sidebar/history/collapsed' ) );
container.onCollapsedChange( function ( boolean ) {
editor.config.setKey( 'ui/sidebar/history/collapsed', boolean );
} );
container.addStatic( new UI.Text( 'HISTORY' ) );
// Actions
var objectActions = new UI.Select().setPosition( 'absolute' ).setRight( '8px' ).setFontSize( '11px' );
objectActions.setOptions( {
'Actions': 'Actions',
'Serialization': 'Serialize History?'
} );
objectActions.onClick( function ( event ) {
event.stopPropagation(); // Avoid panel collapsing
} );
objectActions.onChange( function ( event ) {
var currentValue = history.serializationEnabled ? 'yes' : 'no';
var response;
if ( ( response = prompt( 'Should the history be preserved across a browser refresh? (yes or no)', currentValue ) ) === null ) {
this.setValue( 'Actions' );
return;
}
if ( response.toLowerCase() === 'yes' ) {
alert( 'The history will be preserved across a browser refresh.' );
var lastUndoCmd = history.undos[ history.undos.length - 1 ];
var lastUndoId = ( lastUndoCmd !== undefined ) ? lastUndoCmd.id : 0;
editor.history.enableSerialization( lastUndoId );
} else {
alert( 'The history will NOT be preserved across a browser refresh.' );
editor.history.disableSerialization();
}
this.setValue( 'Actions' );
} );
container.addStatic( objectActions );
container.add( new UI.Break() );
var ignoreObjectSelectedSignal = false;
var outliner = new UI.Outliner( editor );
outliner.onChange( function () {
ignoreObjectSelectedSignal = true;
editor.history.goToState( parseInt( outliner.getValue() ) );
ignoreObjectSelectedSignal = false;
} );
outliner.onDblClick( function () {
//editor.focusById( parseInt( outliner.getValue() ) );
} );
container.add( outliner );
//
var refreshUI = function () {
var options = [];
var enumerator = 1;
( function addObjects( objects, pad ) {
for ( var i = 0, l = objects.length; i < l; i ++ ) {
var object = objects[ i ];
var html = pad + "" + enumerator ++ + ". Undo: " + object.name + "";
options.push( { value: object.id, html: html } );
}
} )( history.undos, ' ' );
( function addObjects( objects, pad ) {
for ( var i = objects.length - 1; i >= 0; i -- ) {
var object = objects[ i ];
var html = pad + "" + enumerator ++ + ". Redo: " + object.name + "";
options.push( { value: object.id, html: html } );
}
} )( history.redos, ' ' );
outliner.setOptions( options );
};
refreshUI();
// events
signals.editorCleared.add( refreshUI );
signals.historyChanged.add( refreshUI );
signals.historyChanged.add( function ( cmd ) {
outliner.setValue( cmd !== undefined ? cmd.id : null );
} );
return container;
};