Przeglądaj źródła

Editor: Validate userData JSON on key up.
@sole I hope this solution does the trick for you too ;)

Mr.doob 12 lat temu
rodzic
commit
fdf69e86c6

+ 15 - 1
editor/js/UI.js

@@ -35,7 +35,7 @@ UI.Element.prototype = {
 // properties
 
 var properties = [ 'position', 'left', 'top', 'right', 'bottom', 'width', 'height', 'border', 'borderLeft',
-'borderTop', 'borderRight', 'borderBottom', 'display', 'overflow', 'margin', 'marginLeft', 'marginTop', 'marginRight',
+'borderTop', 'borderRight', 'borderBottom', 'borderColor', 'display', 'overflow', 'margin', 'marginLeft', 'marginTop', 'marginRight',
 'marginBottom', 'padding', 'paddingLeft', 'paddingTop', 'paddingRight', 'paddingBottom', 'color',
 'backgroundColor', 'fontSize', 'fontWeight', 'textTransform', 'cursor' ];
 
@@ -221,6 +221,12 @@ UI.TextArea = function () {
 
 	this.onChangeCallback = null;
 
+	this.dom.addEventListener( 'keyup', function ( event ) {
+
+		if ( scope.onKeyUpCallback ) scope.onKeyUpCallback();
+
+	}, false );
+
 	this.dom.addEventListener( 'change', function ( event ) {
 
 		if ( scope.onChangeCallback ) scope.onChangeCallback();
@@ -247,6 +253,14 @@ UI.TextArea.prototype.setValue = function ( value ) {
 
 };
 
+UI.TextArea.prototype.onKeyUp = function ( callback ) {
+
+	this.onKeyUpCallback = callback;
+
+	return this;
+
+};
+
 UI.TextArea.prototype.onChange = function ( callback ) {
 
 	this.onChangeCallback = callback;

+ 20 - 1
editor/js/ui/Sidebar.Object3D.js

@@ -173,7 +173,23 @@ Sidebar.Object3D = function ( signals ) {
 	// user data
 
 	var objectUserDataRow = new UI.Panel();
-	var objectUserData = new UI.TextArea().setWidth( '150px' ).setColor( '#444' ).setFontSize( '12px' ).onChange( update );
+	var objectUserData = new UI.TextArea().setWidth( '150px' ).setHeight( '40px' ).setColor( '#444' ).setFontSize( '12px' ).onChange( update );
+	objectUserData.onKeyUp( function () {
+
+		try {
+
+			JSON.parse( objectUserData.getValue() );
+			objectUserData.setBorderColor( '#ccc' );
+			objectUserData.setBackgroundColor( '' );
+
+		} catch ( error ) {
+
+			objectUserData.setBorderColor( '#f00' );
+			objectUserData.setBackgroundColor( 'rgba(255,0,0,0.25)' );
+
+		}
+
+	} );
 
 	objectUserDataRow.add( new UI.Text( 'User data' ).setWidth( '90px' ).setColor( '#666' ) );
 	objectUserDataRow.add( objectUserData );
@@ -466,6 +482,9 @@ Sidebar.Object3D = function ( signals ) {
 
 			}
 
+			objectUserData.setBorderColor( '#ccc' );
+			objectUserData.setBackgroundColor( '' );
+
 			updateRows();
 			updateTransformRows();
 

+ 4 - 3
examples/js/loaders/SceneLoader2.js

@@ -255,9 +255,10 @@ THREE.SceneLoader2.prototype = {
 
 				}
 
-				object.name = data.name;
-				object.visible = data.visible;
-				object.userData = data.userData;
+				if ( data.name !== undefined ) object.name = data.name;
+				if ( data.visible !== undefined ) object.visible = data.visible;
+				if ( data.userData !== undefined ) object.userData = data.userData;
+
 				parent.add( object );
 
 				if ( data.children !== undefined ) {