package com.smartgwt.client.util; //credit Fred Sauer. The original code comes from gwt-log public class LogUtil { // The SC Framework already installs an onerror() handler for browsers that support // the error object in onerror(), and this is sufficient for reporting in both // production and development modes of GWT. So only install a handler here if onerror() // is not supported by the framework as the standard means of error reporting. public static native void setJSNIErrorHandler() /*-{ if (!$wnd.isc.Log.supportsOnError && !$wnd.isc.Log.fallThroughToOnError) { var oldOnError = $wnd.onerror; $wnd.onerror = function(msg, url, line, column) { var result, oldResult; try { result = @com.smartgwt.client.util.LogUtil::handleOnError(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Integer;)(msg, url, line, column); } finally { oldResult = oldOnError && oldOnError(msg, url, line, column); } if (result != null) return result; if (oldResult != null) return oldResult; }; } if (window != $wnd && window.onerror == null) { window.onerror = $wnd.onerror; } }-*/; // There's No need to attempt to handle an error argument here as this API is only called // for those browsers that don't report errors in the SC Framework using onerror(), which // are precisely those browsers that don't pass the error argument. private static boolean handleOnError(String msg, String url, int line, Integer column) { String message = "Uncaught JavaScript exception: " + msg + " in " + url + ", line " + line; if (column != null) message += ", column " + column; SC.logWarn(message); return true; } public static native void addSGWTLoggerCategories() /*-{ var defaultCategories = $wnd.isc.DebugTarget.getPrototype().DEFAULT_CATEGORIES; var sgwtCategories = new $wnd.Array( {name: "configProperties", predecessor: "loadTime", description: "Tracks and alerts when config properties are applied incorrectly"} ); for (var i = 0; i < sgwtCategories.length; i = j) { var currentCategories = new $wnd.Array(), predecessor = sgwtCategories[i].predecessor; for (var j = i; j < sgwtCategories.length; j++) { if (j > i && sgwtCategories[j].predecessor != predecessor && sgwtCategories[j].predecessor != null) break; currentCategories.add(sgwtCategories[j]); } var position = defaultCategories.findIndex("name", predecessor); if (position >= 0) defaultCategories.addListAt(currentCategories, position + 1); else defaultCategories.addList (currentCategories); } }-*/; }