[mapguide-commits] r7939 - in sandbox/jng/fusion_robust_error_handling_templates: aqua limegold maroon slate turquoiseyellow

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Thu Nov 28 04:58:22 PST 2013


Author: jng
Date: 2013-11-28 04:58:22 -0800 (Thu, 28 Nov 2013)
New Revision: 7939

Modified:
   sandbox/jng/fusion_robust_error_handling_templates/aqua/index.html
   sandbox/jng/fusion_robust_error_handling_templates/limegold/index.html
   sandbox/jng/fusion_robust_error_handling_templates/maroon/index.html
   sandbox/jng/fusion_robust_error_handling_templates/slate/index.html
   sandbox/jng/fusion_robust_error_handling_templates/turquoiseyellow/index.html
Log:
Fusion ticket 576: Update the 5 templates as follows:
 - Add a showErrorDialog() function to display error messages in a Jx.Dialog instead of using an alert()
 - Update the default error handler to check for Fusion.DetailedError instances
 - For Fusion.DetailedError instances, construct a formatted summary of the error for display in a Jx.Dialog

Modified: sandbox/jng/fusion_robust_error_handling_templates/aqua/index.html
===================================================================
--- sandbox/jng/fusion_robust_error_handling_templates/aqua/index.html	2013-11-28 10:42:03 UTC (rev 7938)
+++ sandbox/jng/fusion_robust_error_handling_templates/aqua/index.html	2013-11-28 12:58:22 UTC (rev 7939)
@@ -82,20 +82,20 @@
         });
 
     main.addEvent('sizeChange', function(){
-		if (dOverviewMap.domObj.getStyle('display') != 'none'){
-			dOverviewMap.show();
-		}
-		if (dLegend.domObj.getStyle('display') != 'none'){
-			dLegend.show();
-		}
+        if (dOverviewMap.domObj.getStyle('display') != 'none'){
+            dOverviewMap.show();
+        }
+        if (dLegend.domObj.getStyle('display') != 'none'){
+            dLegend.show();
+        }
         if (dTasks.domObj.getStyle('display') != 'none'){
-			dTasks.show();
-		}
+            dTasks.show();
+        }
         if (dSelection.domObj.getStyle('display') != 'none'){
-			dSelection.show();
-		}
+            dSelection.show();
+        }
 
-	});
+    });
     main.resize();
 
     Fusion.registerForEvent(Fusion.Event.FUSION_INITIALIZED, fusionInitialized);
@@ -103,69 +103,73 @@
     Fusion.initialize();
 }
 
+var showErrorDialog = function(msg) {
+    var errorDialog = new Jx.Dialog({
+        label: "Fusion Error",
+        image: "images/icons/error.png",
+        width: 800,
+        height: 400,
+        modal: true,
+        resize: true,
+        move: true,
+        content: msg
+    });
+    errorDialog.show();
+};
+
 var fusionError = function(eventId, error) {
-    var errorMessage = error.toString();
-    var readableMessage = '';
+    if (error instanceof Fusion.DetailedError) {
+        var fmtStack = "";
+        for (var i = 0; i < error.stack.length; i++) {
+            var stackFrame = error.stack[i];
+            fmtStack += " - " + (stackFrame.func != "" ? stackFrame.func : "?") + " at " + stackFrame.url + " (line: " + stackFrame.line + ")";
+            fmtStack += "\n";
+        }
+        var message = OpenLayers.i18n("detailedErrorTemplateHtml", {
+            name: error.name,
+            source: error.url,
+            message: error.message,
+            stacktrace: fmtStack
+        });
+        showErrorDialog(message);
+        console.log('Fusion Error: \n' + message);
+    } else {
+        var errorMessage = error.toString();
+        var readableMessage = '';
 
-    //Case 1: For dealing with Function: convertXML (fusion.js)
-    //******************************************
-    //        xml2json: function(callback, r, json) {
-    //      if (json) {
-    //        var o;
-    //        eval("o="+r.responseText);
-    //        callback(o);
-    //      } else {
-    //      if (r.status >= 400) {
-    //          Fusion.reportError(new Fusion.Error(Fusion.Error.FATAL,
-    //              'xml2json: invalid XML document: ' + r.transport.responseText + " : " + r.request.url));
-    //          return;
-    //      }
-    //******************************************
-    var tagStart = '<h2>';
-    var tagEnd = '</h2>';
-    var indexStart = errorMessage.indexOf(tagStart);
-    var indexEnd = errorMessage.indexOf(tagEnd, tagStart);
-    if (indexStart != -1 && indexEnd != -1) {
-        readableMessage = errorMessage.substring(indexStart + tagStart.length, indexEnd);
-        readableMessage = readableMessage.replace(/\\n/g, '\n');
-        readableMessage = readableMessage.replace(/\\t/g, '\t');
-        readableMessage = readableMessage.replace(/\\'/g, '\'');
-    }
+        //Case 1: For dealing with Function: convertXML (fusion.js)
+        //******************************************
+        //        xml2json: function(callback, r, json) {
+        //      if (json) {
+        //        var o;
+        //        eval("o="+r.responseText);
+        //        callback(o);
+        //      } else {
+        //      if (r.status >= 400) {
+        //          Fusion.reportError(new Fusion.Error(Fusion.Error.FATAL,
+        //              'xml2json: invalid XML document: ' + r.transport.responseText + " : " + r.request.url));
+        //          return;
+        //      }
+        //******************************************
+        var tagStart = '<h2>';
+        var tagEnd = '</h2>';
+        var indexStart = errorMessage.indexOf(tagStart);
+        var indexEnd = errorMessage.indexOf(tagEnd, tagStart);
+        if (indexStart != -1 && indexEnd != -1) {
+            readableMessage = errorMessage.substring(indexStart + tagStart.length, indexEnd);
+            readableMessage = readableMessage.replace(/\\n/g, '\n');
+            readableMessage = readableMessage.replace(/\\t/g, '\t');
+            readableMessage = readableMessage.replace(/\\'/g, '\'');
+        }
 
-    //Case 2: For dealing with Function: ajaxException. (fusion.js)
-    //******************************************
-    //        ajaxException: function(r, e) {
-    //        this.reportError(new Fusion.Error(Fusion.Error.WARNING, 
-    //            OpenLayers.i18n('ajaxError', {'exception':e.message, 
-    //                                          'filename':e.fileName, 
-    //                                          'line':e.lineNumber,
-    //                                          'response': r.transport.responseText
-    //                                          })));
-    //    },
-    //******************************************
-    if (readableMessage == '') {
-        var ajaxCallback = 'WARNING: Exception occurred in AJAX callback.';
-        var responseError = 'Response: ERROR: ';
-        var indexAjaxCallback = errorMessage.indexOf(ajaxCallback);
-        var indexResponseError = errorMessage.indexOf(responseError);
-        if (indexAjaxCallback != -1 && indexResponseError != -1) {
-            var indexReturn = errorMessage.indexOf('\n', indexResponseError);
-            if (indexReturn != -1) {
-                readableMessage = errorMessage.substring(indexResponseError + responseError.length, indexReturn);
-                readableMessage = readableMessage.replace(/\\n/g, '\n');
-                readableMessage = readableMessage.replace(/\\t/g, '\t');
-                readableMessage = readableMessage.replace(/\\'/g, '\'');
-            }
+        if (readableMessage != '') {
+            showErrorDialog(readableMessage);
         }
+        else {
+            showErrorDialog('Fusion Error: \n' + errorMessage);
+        }
+        console.log('Fusion Error: \n' + errorMessage);
     }
-
-    if (readableMessage != '') {
-        alert(readableMessage);
-    }
-    else {
-        alert('Fusion Error: \n' + errorMessage);
-    }
-    console.log('Fusion Error: \n' + errorMessage);
 }
 
 var fusionInitialized = function() {

Modified: sandbox/jng/fusion_robust_error_handling_templates/limegold/index.html
===================================================================
--- sandbox/jng/fusion_robust_error_handling_templates/limegold/index.html	2013-11-28 10:42:03 UTC (rev 7938)
+++ sandbox/jng/fusion_robust_error_handling_templates/limegold/index.html	2013-11-28 12:58:22 UTC (rev 7939)
@@ -76,87 +76,91 @@
         contentId: 'SelectionPanel'
     });
 
-  tabbox1.add(tab1, tab2, tab3);
+    tabbox1.add(tab1, tab2, tab3);
 
-  var tabbox2 = new Jx.TabBox({parent: splitter2.elements[1]});
+    var tabbox2 = new Jx.TabBox({parent: splitter2.elements[1]});
 
-  var tab4 = new Jx.Tab({
-      label: OpenLayers.i18n('ovmapTitle'),
-      contentId: 'OverviewMap'});
+    var tab4 = new Jx.Tab({
+        label: OpenLayers.i18n('ovmapTitle'),
+        contentId: 'OverviewMap'});
 
-  tabbox2.add(tab4);
+    tabbox2.add(tab4);
 
-  main.resize();
+    main.resize();
 
-  Fusion.registerForEvent(Fusion.Event.FUSION_INITIALIZED, fusionInitialized);
-  Fusion.registerForEvent(Fusion.Event.FUSION_ERROR, fusionError);
-  Fusion.initialize();
+    Fusion.registerForEvent(Fusion.Event.FUSION_INITIALIZED, fusionInitialized);
+    Fusion.registerForEvent(Fusion.Event.FUSION_ERROR, fusionError);
+    Fusion.initialize();
 
 }
 
+var showErrorDialog = function(msg) {
+    var errorDialog = new Jx.Dialog({
+        label: "Fusion Error",
+        image: "images/icons/error.png",
+        width: 800,
+        height: 400,
+        modal: true,
+        resize: true,
+        move: true,
+        content: msg
+    });
+    errorDialog.show();
+};
+
 var fusionError = function(eventId, error) {
-    var errorMessage = error.toString();
-    var readableMessage = '';
+    if (error instanceof Fusion.DetailedError) {
+        var fmtStack = "";
+        for (var i = 0; i < error.stack.length; i++) {
+            var stackFrame = error.stack[i];
+            fmtStack += " - " + (stackFrame.func != "" ? stackFrame.func : "?") + " at " + stackFrame.url + " (line: " + stackFrame.line + ")";
+            fmtStack += "\n";
+        }
+        var message = OpenLayers.i18n("detailedErrorTemplateHtml", {
+            name: error.name,
+            source: error.url,
+            message: error.message,
+            stacktrace: fmtStack
+        });
+        showErrorDialog(message);
+        console.log('Fusion Error: \n' + message);
+    } else {
+        var errorMessage = error.toString();
+        var readableMessage = '';
 
-    //Case 1: For dealing with Function: convertXML (fusion.js)
-    //******************************************
-    //        xml2json: function(callback, r, json) {
-    //      if (json) {
-    //        var o;
-    //        eval("o="+r.responseText);
-    //        callback(o);
-    //      } else {
-    //      if (r.status >= 400) {
-    //          Fusion.reportError(new Fusion.Error(Fusion.Error.FATAL,
-    //              'xml2json: invalid XML document: ' + r.transport.responseText + " : " + r.request.url));
-    //          return;
-    //      }
-    //******************************************
-    var tagStart = '<h2>';
-    var tagEnd = '</h2>';
-    var indexStart = errorMessage.indexOf(tagStart);
-    var indexEnd = errorMessage.indexOf(tagEnd, tagStart);
-    if (indexStart != -1 && indexEnd != -1) {
-        readableMessage = errorMessage.substring(indexStart + tagStart.length, indexEnd);
-        readableMessage = readableMessage.replace(/\\n/g, '\n');
-        readableMessage = readableMessage.replace(/\\t/g, '\t');
-        readableMessage = readableMessage.replace(/\\'/g, '\'');
-    }
+        //Case 1: For dealing with Function: convertXML (fusion.js)
+        //******************************************
+        //        xml2json: function(callback, r, json) {
+        //      if (json) {
+        //        var o;
+        //        eval("o="+r.responseText);
+        //        callback(o);
+        //      } else {
+        //      if (r.status >= 400) {
+        //          Fusion.reportError(new Fusion.Error(Fusion.Error.FATAL,
+        //              'xml2json: invalid XML document: ' + r.transport.responseText + " : " + r.request.url));
+        //          return;
+        //      }
+        //******************************************
+        var tagStart = '<h2>';
+        var tagEnd = '</h2>';
+        var indexStart = errorMessage.indexOf(tagStart);
+        var indexEnd = errorMessage.indexOf(tagEnd, tagStart);
+        if (indexStart != -1 && indexEnd != -1) {
+            readableMessage = errorMessage.substring(indexStart + tagStart.length, indexEnd);
+            readableMessage = readableMessage.replace(/\\n/g, '\n');
+            readableMessage = readableMessage.replace(/\\t/g, '\t');
+            readableMessage = readableMessage.replace(/\\'/g, '\'');
+        }
 
-    //Case 2: For dealing with Function: ajaxException. (fusion.js)
-    //******************************************
-    //        ajaxException: function(r, e) {
-    //        this.reportError(new Fusion.Error(Fusion.Error.WARNING, 
-    //            OpenLayers.i18n('ajaxError', {'exception':e.message, 
-    //                                          'filename':e.fileName, 
-    //                                          'line':e.lineNumber,
-    //                                          'response': r.transport.responseText
-    //                                          })));
-    //    },
-    //******************************************
-    if (readableMessage == '') {
-        var ajaxCallback = 'WARNING: Exception occurred in AJAX callback.';
-        var responseError = 'Response: ERROR: ';
-        var indexAjaxCallback = errorMessage.indexOf(ajaxCallback);
-        var indexResponseError = errorMessage.indexOf(responseError);
-        if (indexAjaxCallback != -1 && indexResponseError != -1) {
-            var indexReturn = errorMessage.indexOf('\n', indexResponseError);
-            if (indexReturn != -1) {
-                readableMessage = errorMessage.substring(indexResponseError + responseError.length, indexReturn);
-                readableMessage = readableMessage.replace(/\\n/g, '\n');
-                readableMessage = readableMessage.replace(/\\t/g, '\t');
-                readableMessage = readableMessage.replace(/\\'/g, '\'');
-            }
+        if (readableMessage != '') {
+            showErrorDialog(readableMessage);
         }
+        else {
+            showErrorDialog('Fusion Error: \n' + errorMessage);
+        }
+        console.log('Fusion Error: \n' + errorMessage);
     }
-
-    if (readableMessage != '') {
-        alert(readableMessage);
-    }
-    else {
-        alert('Fusion Error: \n' + errorMessage);
-    }
-    console.log('Fusion Error: \n' + errorMessage);
 }
 
 var fusionInitialized = function() {

Modified: sandbox/jng/fusion_robust_error_handling_templates/maroon/index.html
===================================================================
--- sandbox/jng/fusion_robust_error_handling_templates/maroon/index.html	2013-11-28 10:42:03 UTC (rev 7938)
+++ sandbox/jng/fusion_robust_error_handling_templates/maroon/index.html	2013-11-28 12:58:22 UTC (rev 7939)
@@ -80,104 +80,108 @@
         ]
     });
 
-  /* create dynamic content */
-  panel1 = new Jx.Panel({
-      label: OpenLayers.i18n('legendTitle'),
-      collapse: true,
-      maximize: true,
-      contentId: 'Legend'});
-  panel1.content.id = 'Legend';
+    /* create dynamic content */
+    panel1 = new Jx.Panel({
+        label: OpenLayers.i18n('legendTitle'),
+        collapse: true,
+        maximize: true,
+        contentId: 'Legend'});
+    panel1.content.id = 'Legend';
 
-  panel2 = new Jx.Panel({
-      label: OpenLayers.i18n('selectionPanelTitle'),
-      collapse: true,
-      maximize: true,
-      contentId: 'SelectionPanel'});
+    panel2 = new Jx.Panel({
+        label: OpenLayers.i18n('selectionPanelTitle'),
+        collapse: true,
+        maximize: true,
+        contentId: 'SelectionPanel'});
 
-  panel3 = new Jx.Panel({
-      label: OpenLayers.i18n('taskPaneTitle'),
-      collapse: true,
-      maximize: true,
-      contentId: 'TaskPane'});
+    panel3 = new Jx.Panel({
+        label: OpenLayers.i18n('taskPaneTitle'),
+        collapse: true,
+        maximize: true,
+        contentId: 'TaskPane'});
 
-  panel4 = new Jx.Panel({
-      label: OpenLayers.i18n('ovmapTitle'),
-      collapse: true,
-      maximize: true,
-      contentId: 'OverviewMap'});
+    panel4 = new Jx.Panel({
+        label: OpenLayers.i18n('ovmapTitle'),
+        collapse: true,
+        maximize: true,
+        contentId: 'OverviewMap'});
 
-  panelman = new Jx.PanelSet({parent: splitter.elements[1], panels: [panel1, panel2, panel3, panel4]});
+    panelman = new Jx.PanelSet({parent: splitter.elements[1], panels: [panel1, panel2, panel3, panel4]});
 
-  main.resize();
+    main.resize();
 
-  Fusion.registerForEvent(Fusion.Event.FUSION_INITIALIZED, fusionInitialized);
-  Fusion.registerForEvent(Fusion.Event.FUSION_ERROR, fusionError);
-  Fusion.initialize();
+    Fusion.registerForEvent(Fusion.Event.FUSION_INITIALIZED, fusionInitialized);
+    Fusion.registerForEvent(Fusion.Event.FUSION_ERROR, fusionError);
+    Fusion.initialize();
 }
 
+var showErrorDialog = function(msg) {
+    var errorDialog = new Jx.Dialog({
+        label: "Fusion Error",
+        image: "images/icons/error.png",
+        width: 800,
+        height: 400,
+        modal: true,
+        resize: true,
+        move: true,
+        content: msg
+    });
+    errorDialog.show();
+};
+
 var fusionError = function(eventId, error) {
-    var errorMessage = error.toString();
-    var readableMessage = '';
+    if (error instanceof Fusion.DetailedError) {
+        var fmtStack = "";
+        for (var i = 0; i < error.stack.length; i++) {
+            var stackFrame = error.stack[i];
+            fmtStack += " - " + (stackFrame.func != "" ? stackFrame.func : "?") + " at " + stackFrame.url + " (line: " + stackFrame.line + ")";
+            fmtStack += "\n";
+        }
+        var message = OpenLayers.i18n("detailedErrorTemplateHtml", {
+            name: error.name,
+            source: error.url,
+            message: error.message,
+            stacktrace: fmtStack
+        });
+        showErrorDialog(message);
+        console.log('Fusion Error: \n' + message);
+    } else {
+        var errorMessage = error.toString();
+        var readableMessage = '';
 
-    //Case 1: For dealing with Function: convertXML (fusion.js)
-    //******************************************
-    //        xml2json: function(callback, r, json) {
-    //      if (json) {
-    //        var o;
-    //        eval("o="+r.responseText);
-    //        callback(o);
-    //      } else {
-    //      if (r.status >= 400) {
-    //          Fusion.reportError(new Fusion.Error(Fusion.Error.FATAL,
-    //              'xml2json: invalid XML document: ' + r.transport.responseText + " : " + r.request.url));
-    //          return;
-    //      }
-    //******************************************
-    var tagStart = '<h2>';
-    var tagEnd = '</h2>';
-    var indexStart = errorMessage.indexOf(tagStart);
-    var indexEnd = errorMessage.indexOf(tagEnd, tagStart);
-    if (indexStart != -1 && indexEnd != -1) {
-        readableMessage = errorMessage.substring(indexStart + tagStart.length, indexEnd);
-        readableMessage = readableMessage.replace(/\\n/g, '\n');
-        readableMessage = readableMessage.replace(/\\t/g, '\t');
-        readableMessage = readableMessage.replace(/\\'/g, '\'');
-    }
+        //Case 1: For dealing with Function: convertXML (fusion.js)
+        //******************************************
+        //        xml2json: function(callback, r, json) {
+        //      if (json) {
+        //        var o;
+        //        eval("o="+r.responseText);
+        //        callback(o);
+        //      } else {
+        //      if (r.status >= 400) {
+        //          Fusion.reportError(new Fusion.Error(Fusion.Error.FATAL,
+        //              'xml2json: invalid XML document: ' + r.transport.responseText + " : " + r.request.url));
+        //          return;
+        //      }
+        //******************************************
+        var tagStart = '<h2>';
+        var tagEnd = '</h2>';
+        var indexStart = errorMessage.indexOf(tagStart);
+        var indexEnd = errorMessage.indexOf(tagEnd, tagStart);
+        if (indexStart != -1 && indexEnd != -1) {
+            readableMessage = errorMessage.substring(indexStart + tagStart.length, indexEnd);
+            readableMessage = readableMessage.replace(/\\n/g, '\n');
+            readableMessage = readableMessage.replace(/\\t/g, '\t');
+            readableMessage = readableMessage.replace(/\\'/g, '\'');
+        }
 
-    //Case 2: For dealing with Function: ajaxException. (fusion.js)
-    //******************************************
-    //        ajaxException: function(r, e) {
-    //        this.reportError(new Fusion.Error(Fusion.Error.WARNING, 
-    //            OpenLayers.i18n('ajaxError', {'exception':e.message, 
-    //                                          'filename':e.fileName, 
-    //                                          'line':e.lineNumber,
-    //                                          'response': r.transport.responseText
-    //                                          })));
-    //    },
-    //******************************************
-    if (readableMessage == '') {
-        var ajaxCallback = 'WARNING: Exception occurred in AJAX callback.';
-        var responseError = 'Response: ERROR: ';
-        var indexAjaxCallback = errorMessage.indexOf(ajaxCallback);
-        var indexResponseError = errorMessage.indexOf(responseError);
-        if (indexAjaxCallback != -1 && indexResponseError != -1) {
-            var indexReturn = errorMessage.indexOf('\n', indexResponseError);
-            if (indexReturn != -1) {
-                readableMessage = errorMessage.substring(indexResponseError + responseError.length, indexReturn);
-                readableMessage = readableMessage.replace(/\\n/g, '\n');
-                readableMessage = readableMessage.replace(/\\t/g, '\t');
-                readableMessage = readableMessage.replace(/\\'/g, '\'');
-            }
+        if (readableMessage != '') {
+            showErrorDialog(readableMessage);
         }
+        else {
+            showErrorDialog('Fusion Error: \n' + errorMessage);
+        }
+        console.log('Fusion Error: \n' + errorMessage);
     }
-
-    if (readableMessage != '') {
-        alert(readableMessage);
-    }
-    else {
-        alert('Fusion Error: \n' + errorMessage);
-    }
-    console.log('Fusion Error: \n' + errorMessage);
 }
 
 var fusionInitialized = function() {

Modified: sandbox/jng/fusion_robust_error_handling_templates/slate/index.html
===================================================================
--- sandbox/jng/fusion_robust_error_handling_templates/slate/index.html	2013-11-28 10:42:03 UTC (rev 7938)
+++ sandbox/jng/fusion_robust_error_handling_templates/slate/index.html	2013-11-28 12:58:22 UTC (rev 7939)
@@ -98,69 +98,73 @@
     dOverviewMap.open();
 }
 
+var showErrorDialog = function(msg) {
+    var errorDialog = new Jx.Dialog({
+        label: "Fusion Error",
+        image: "images/icons/error.png",
+        width: 800,
+        height: 400,
+        modal: true,
+        resize: true,
+        move: true,
+        content: msg
+    });
+    errorDialog.show();
+};
+
 var fusionError = function(eventId, error) {
-    var errorMessage = error.toString();
-    var readableMessage = '';
+    if (error instanceof Fusion.DetailedError) {
+        var fmtStack = "";
+        for (var i = 0; i < error.stack.length; i++) {
+            var stackFrame = error.stack[i];
+            fmtStack += " - " + (stackFrame.func != "" ? stackFrame.func : "?") + " at " + stackFrame.url + " (line: " + stackFrame.line + ")";
+            fmtStack += "\n";
+        }
+        var message = OpenLayers.i18n("detailedErrorTemplateHtml", {
+            name: error.name,
+            source: error.url,
+            message: error.message,
+            stacktrace: fmtStack
+        });
+        showErrorDialog(message);
+        console.log('Fusion Error: \n' + message);
+    } else {
+        var errorMessage = error.toString();
+        var readableMessage = '';
 
-    //Case 1: For dealing with Function: convertXML (fusion.js)
-    //******************************************
-    //        xml2json: function(callback, r, json) {
-    //      if (json) {
-    //        var o;
-    //        eval("o="+r.responseText);
-    //        callback(o);
-    //      } else {
-    //      if (r.status >= 400) {
-    //          Fusion.reportError(new Fusion.Error(Fusion.Error.FATAL,
-    //              'xml2json: invalid XML document: ' + r.transport.responseText + " : " + r.request.url));
-    //          return;
-    //      }
-    //******************************************
-    var tagStart = '<h2>';
-    var tagEnd = '</h2>';
-    var indexStart = errorMessage.indexOf(tagStart);
-    var indexEnd = errorMessage.indexOf(tagEnd, tagStart);
-    if (indexStart != -1 && indexEnd != -1) {
-        readableMessage = errorMessage.substring(indexStart + tagStart.length, indexEnd);
-        readableMessage = readableMessage.replace(/\\n/g, '\n');
-        readableMessage = readableMessage.replace(/\\t/g, '\t');
-        readableMessage = readableMessage.replace(/\\'/g, '\'');
-    }
+        //Case 1: For dealing with Function: convertXML (fusion.js)
+        //******************************************
+        //        xml2json: function(callback, r, json) {
+        //      if (json) {
+        //        var o;
+        //        eval("o="+r.responseText);
+        //        callback(o);
+        //      } else {
+        //      if (r.status >= 400) {
+        //          Fusion.reportError(new Fusion.Error(Fusion.Error.FATAL,
+        //              'xml2json: invalid XML document: ' + r.transport.responseText + " : " + r.request.url));
+        //          return;
+        //      }
+        //******************************************
+        var tagStart = '<h2>';
+        var tagEnd = '</h2>';
+        var indexStart = errorMessage.indexOf(tagStart);
+        var indexEnd = errorMessage.indexOf(tagEnd, tagStart);
+        if (indexStart != -1 && indexEnd != -1) {
+            readableMessage = errorMessage.substring(indexStart + tagStart.length, indexEnd);
+            readableMessage = readableMessage.replace(/\\n/g, '\n');
+            readableMessage = readableMessage.replace(/\\t/g, '\t');
+            readableMessage = readableMessage.replace(/\\'/g, '\'');
+        }
 
-    //Case 2: For dealing with Function: ajaxException. (fusion.js)
-    //******************************************
-    //        ajaxException: function(r, e) {
-    //        this.reportError(new Fusion.Error(Fusion.Error.WARNING,
-    //            OpenLayers.i18n('ajaxError', {'exception':e.message,
-    //                                          'filename':e.fileName,
-    //                                          'line':e.lineNumber,
-    //                                          'response': r.transport.responseText
-    //                                          })));
-    //    },
-    //******************************************
-    if (readableMessage == '') {
-        var ajaxCallback = 'WARNING: Exception occurred in AJAX callback.';
-        var responseError = 'Response: ERROR: ';
-        var indexAjaxCallback = errorMessage.indexOf(ajaxCallback);
-        var indexResponseError = errorMessage.indexOf(responseError);
-        if (indexAjaxCallback != -1 && indexResponseError != -1) {
-            var indexReturn = errorMessage.indexOf('\n', indexResponseError);
-            if (indexReturn != -1) {
-                readableMessage = errorMessage.substring(indexResponseError + responseError.length, indexReturn);
-                readableMessage = readableMessage.replace(/\\n/g, '\n');
-                readableMessage = readableMessage.replace(/\\t/g, '\t');
-                readableMessage = readableMessage.replace(/\\'/g, '\'');
-            }
+        if (readableMessage != '') {
+            showErrorDialog(readableMessage);
         }
+        else {
+            showErrorDialog('Fusion Error: \n' + errorMessage);
+        }
+        console.log('Fusion Error: \n' + errorMessage);
     }
-
-    if (readableMessage != '') {
-        alert(readableMessage);
-    }
-    else {
-        alert('Fusion Error: \n' + errorMessage);
-    }
-    console.log('Fusion Error: \n' + errorMessage);
 }
 
 var fusionInitialized = function() {

Modified: sandbox/jng/fusion_robust_error_handling_templates/turquoiseyellow/index.html
===================================================================
--- sandbox/jng/fusion_robust_error_handling_templates/turquoiseyellow/index.html	2013-11-28 10:42:03 UTC (rev 7938)
+++ sandbox/jng/fusion_robust_error_handling_templates/turquoiseyellow/index.html	2013-11-28 12:58:22 UTC (rev 7939)
@@ -77,73 +77,75 @@
     Fusion.registerForEvent(Fusion.Event.FUSION_INITIALIZED, fusionInitialized);
     Fusion.registerForEvent(Fusion.Event.FUSION_ERROR, fusionError);
     Fusion.initialize();
+}
 
+var showErrorDialog = function(msg) {
+    var errorDialog = new Jx.Dialog({
+        label: "Fusion Error",
+        image: "images/icons/error.png",
+        width: 800,
+        height: 400,
+        modal: true,
+        resize: true,
+        move: true,
+        content: msg
+    });
+    errorDialog.show();
+};
 
-}
-
 var fusionError = function(eventId, error) {
-    var errorMessage = error.toString();
-    var readableMessage = '';
+    if (error instanceof Fusion.DetailedError) {
+        var fmtStack = "";
+        for (var i = 0; i < error.stack.length; i++) {
+            var stackFrame = error.stack[i];
+            fmtStack += " - " + (stackFrame.func != "" ? stackFrame.func : "?") + " at " + stackFrame.url + " (line: " + stackFrame.line + ")";
+            fmtStack += "\n";
+        }
+        var message = OpenLayers.i18n("detailedErrorTemplateHtml", {
+            name: error.name,
+            source: error.url,
+            message: error.message,
+            stacktrace: fmtStack
+        });
+        showErrorDialog(message);
+        console.log('Fusion Error: \n' + message);
+    } else {
+        var errorMessage = error.toString();
+        var readableMessage = '';
 
-    //Case 1: For dealing with Function: convertXML (fusion.js)
-    //******************************************
-    //        xml2json: function(callback, r, json) {
-    //      if (json) {
-    //        var o;
-    //        eval("o="+r.responseText);
-    //        callback(o);
-    //      } else {
-    //      if (r.status >= 400) {
-    //          Fusion.reportError(new Fusion.Error(Fusion.Error.FATAL,
-    //              'xml2json: invalid XML document: ' + r.transport.responseText + " : " + r.request.url));
-    //          return;
-    //      }
-    //******************************************
-    var tagStart = '<h2>';
-    var tagEnd = '</h2>';
-    var indexStart = errorMessage.indexOf(tagStart);
-    var indexEnd = errorMessage.indexOf(tagEnd, tagStart);
-    if (indexStart != -1 && indexEnd != -1) {
-        readableMessage = errorMessage.substring(indexStart + tagStart.length, indexEnd);
-        readableMessage = readableMessage.replace(/\\n/g, '\n');
-        readableMessage = readableMessage.replace(/\\t/g, '\t');
-        readableMessage = readableMessage.replace(/\\'/g, '\'');
-    }
+        //Case 1: For dealing with Function: convertXML (fusion.js)
+        //******************************************
+        //        xml2json: function(callback, r, json) {
+        //      if (json) {
+        //        var o;
+        //        eval("o="+r.responseText);
+        //        callback(o);
+        //      } else {
+        //      if (r.status >= 400) {
+        //          Fusion.reportError(new Fusion.Error(Fusion.Error.FATAL,
+        //              'xml2json: invalid XML document: ' + r.transport.responseText + " : " + r.request.url));
+        //          return;
+        //      }
+        //******************************************
+        var tagStart = '<h2>';
+        var tagEnd = '</h2>';
+        var indexStart = errorMessage.indexOf(tagStart);
+        var indexEnd = errorMessage.indexOf(tagEnd, tagStart);
+        if (indexStart != -1 && indexEnd != -1) {
+            readableMessage = errorMessage.substring(indexStart + tagStart.length, indexEnd);
+            readableMessage = readableMessage.replace(/\\n/g, '\n');
+            readableMessage = readableMessage.replace(/\\t/g, '\t');
+            readableMessage = readableMessage.replace(/\\'/g, '\'');
+        }
 
-    //Case 2: For dealing with Function: ajaxException. (fusion.js)
-    //******************************************
-    //        ajaxException: function(r, e) {
-    //        this.reportError(new Fusion.Error(Fusion.Error.WARNING, 
-    //            OpenLayers.i18n('ajaxError', {'exception':e.message, 
-    //                                          'filename':e.fileName, 
-    //                                          'line':e.lineNumber,
-    //                                          'response': r.transport.responseText
-    //                                          })));
-    //    },
-    //******************************************
-    if (readableMessage == '') {
-        var ajaxCallback = 'WARNING: Exception occurred in AJAX callback.';
-        var responseError = 'Response: ERROR: ';
-        var indexAjaxCallback = errorMessage.indexOf(ajaxCallback);
-        var indexResponseError = errorMessage.indexOf(responseError);
-        if (indexAjaxCallback != -1 && indexResponseError != -1) {
-            var indexReturn = errorMessage.indexOf('\n', indexResponseError);
-            if (indexReturn != -1) {
-                readableMessage = errorMessage.substring(indexResponseError + responseError.length, indexReturn);
-                readableMessage = readableMessage.replace(/\\n/g, '\n');
-                readableMessage = readableMessage.replace(/\\t/g, '\t');
-                readableMessage = readableMessage.replace(/\\'/g, '\'');
-            }
+        if (readableMessage != '') {
+            showErrorDialog(readableMessage);
         }
+        else {
+            showErrorDialog('Fusion Error: \n' + errorMessage);
+        }
+        console.log('Fusion Error: \n' + errorMessage);
     }
-
-    if (readableMessage != '') {
-        alert(readableMessage);
-    }
-    else {
-        alert('Fusion Error: \n' + errorMessage);
-    }
-    console.log('Fusion Error: \n' + errorMessage);
 }
 
 var fusionInitialized = function() {



More information about the mapguide-commits mailing list