/** * @author mrdoob / http://mrdoob.com/ */ 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' ) ); 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.type.substring( 3, object.type.length ).replace(/([a-z])([A-Z])/g, '$1 $2') + ""; 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.type.substring( 3, object.type.length ).replace(/([a-z])([A-Z])/g, '$1 $2') + ""; 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; };