unknown 5 лет назад
Родитель
Сommit
6673f0d80c
1 измененных файлов с 50 добавлено и 21 удалено
  1. 50 21
      o2web/source/x_component_cms_DictionaryDesigner/Dictionary.js

+ 50 - 21
o2web/source/x_component_cms_DictionaryDesigner/Dictionary.js

@@ -69,19 +69,13 @@ MWF.xApplication.cms.DictionaryDesigner.Dictionary = new Class({
         this.scriptPage = this.designTab.addTab(this.designTabScriptAreaNode, "JSON");
         this.scriptPage = this.designTab.addTab(this.designTabScriptAreaNode, "JSON");
         this.designPage.showTabIm = function(callback){
         this.designPage.showTabIm = function(callback){
             if( _self.scriptEditor && _self.isChanged){
             if( _self.scriptEditor && _self.isChanged){
-                try{
-                    var value = _self.scriptEditor.getValue();
-                    var v = JSON.parse(value);
-
+                if( _self.getEditorValidData() !== false ){
                     if (!this.isShow){
                     if (!this.isShow){
                         this.tab.pages.each(function(page){
                         this.tab.pages.each(function(page){
                             if (page.isShow) page.hideIm();
                             if (page.isShow) page.hideIm();
                         });
                         });
                         this.showIm(callback);
                         this.showIm(callback);
                     }
                     }
-
-                }catch (e) {
-                    _self.designer.notice( _self.designer.lp.notice.jsonParseError, "error", _self.node, {"x": "left", "y": "bottom"});
                 }
                 }
             }else{
             }else{
                 if (!this.isShow){
                 if (!this.isShow){
@@ -107,18 +101,53 @@ MWF.xApplication.cms.DictionaryDesigner.Dictionary = new Class({
         }.bind(this));
         }.bind(this));
         this.designPage.addEvent("postShow", function(){
         this.designPage.addEvent("postShow", function(){
             if( this.scriptEditor && this.isChanged){
             if( this.scriptEditor && this.isChanged){
-                try{
-                    var value = this.scriptEditor.getValue();
-                    this.data.data = JSON.parse(value);
+                var data = this.getEditorValidData();
+                if( data !== false ){
+                    this.data.data = data;
                     this.reload();
                     this.reload();
                     this.isChanged = false;
                     this.isChanged = false;
-                }catch (e) {
-                    this.designer.notice( this.designer.lp.notice.jsonParseError, "error", this.node, {"x": "left", "y": "bottom"});
                 }
                 }
             }
             }
             this.fireEvent("resize");
             this.fireEvent("resize");
         }.bind(this));
         }.bind(this));
     },
     },
+    getEditorValidData : function( silence ){
+        if( !this.scriptEditor.validated() ){
+            if(!silence)this.designer.notice( this.designer.lp.notice.editorNotValidated, "error", this.node, {"x": "left", "y": "bottom"});
+            return false;
+        }
+        try{
+            var value = this.scriptEditor.getValue();
+            var v = JSON.parse(value);
+            if( !this.checkValid(v, silence) ){
+                return false;
+            }
+            return v;
+        }catch (e) {
+            if(!silence)this.designer.notice( this.designer.lp.notice.jsonParseError, "error", this.node, {"x": "left", "y": "bottom"});
+            return false;
+        }
+    },
+    checkValid( obj, silence ){
+        if( typeOf(obj) !== "object" ){
+            return true;
+        }
+        for (var key in obj) {
+            if( !key || key.trim() === "" ){
+                if(!silence)this.designer.notice(this.designer.lp.notice.emptyObjectKey, "error", this.node, {"x": "left", "y": "bottom"});
+                return false;
+            }
+            if (!isNaN(parseFloat(key))){
+                if(!silence)this.designer.notice(this.designer.lp.notice.numberObjectKey, "error", this.node, {"x": "left", "y": "bottom"});
+                return false;
+            }
+
+            if( typeOf(obj[key]) === "object" ){
+                if( !this.checkValid( obj[key] ) )return false;
+            }
+        }
+        return true;
+    },
     loadScriptEditor:function(){
     loadScriptEditor:function(){
         var value = JSON.stringify(this.data.data, null, "\t");
         var value = JSON.stringify(this.data.data, null, "\t");
         this.scriptEditor = new MWF.widget.JavascriptEditor(this.scriptNode, {"option": {"value": value, "mode" : "json" }});
         this.scriptEditor = new MWF.widget.JavascriptEditor(this.scriptNode, {"option": {"value": value, "mode" : "json" }});
@@ -243,10 +272,11 @@ MWF.xApplication.cms.DictionaryDesigner.Dictionary = new Class({
 
 
             if( this.scriptPage.isShow ){
             if( this.scriptPage.isShow ){
                 if( this.scriptEditor ){
                 if( this.scriptEditor ){
-                    try{
-                        var value = this.scriptEditor.getValue();
-                        this.data.data = JSON.parse(value);
-                    }catch (e) {
+
+                    var data = this.getEditorValidData( true );
+                    if( data !== false ){
+                        this.data.data = data;
+                    }else{
                         return false;
                         return false;
                     }
                     }
                 }
                 }
@@ -284,11 +314,10 @@ MWF.xApplication.cms.DictionaryDesigner.Dictionary = new Class({
 
 
                 if( this.scriptPage.isShow ){
                 if( this.scriptPage.isShow ){
                     if( this.scriptEditor ){
                     if( this.scriptEditor ){
-                        try{
-                            var value = this.scriptEditor.getValue();
-                            this.data.data = JSON.parse(value);
-                        }catch (e) {
-                            this.designer.notice( this.designer.lp.notice.jsonParseError, "error", this.node, {"x": "left", "y": "bottom"});
+                         var data = this.getEditorValidData();
+                        if( data !== false ){
+                            this.data.data = data;
+                        }else{
                             return false;
                             return false;
                         }
                         }
                     }
                     }