📄 sscorlib.debug.js
字号:
dt = new Date(Date.UTC(dt.getUTCFullYear(), dt.getUTCMonth(), dt.getUTCDate(),
dt.getUTCHours(), dt.getUTCMinutes(), dt.getUTCSeconds(), dt.getUTCMilliseconds()));
}
re.lastIndex = 0;
while (true) {
var index = re.lastIndex;
var match = re.exec(format);
sb.append(format.slice(index, match ? match.index : format.length));
if (!match) {
break;
}
var fs = match[0];
var part = fs;
switch (fs) {
case 'dddd':
part = dtf.dayNames[dt.getDay()];
break;
case 'ddd':
part = dtf.shortDayNames[dt.getDay()];
break;
case 'dd':
part = dt.getDay().toString().padLeft(2, '0');
break;
case 'd':
part = dt.getDay();
break;
case 'MMMM':
part = dtf.monthNames[dt.getMonth()];
break;
case 'MMM':
part = dtf.shortMonthNames[dt.getMonth()];
break;
case 'MM':
part = (dt.getMonth() + 1).toString().padLeft(2, '0');
break;
case 'M':
part = (dt.getMonth() + 1);
break;
case 'yyyy':
part = dt.getFullYear();
break;
case 'yy':
part = (dt.getFullYear() % 100).toString().padLeft(2, '0');
break;
case 'y':
part = (dt.getFullYear() % 100);
break;
case 'h': case 'hh':
part = dt.getHours() % 12;
if (!part) {
part = '12';
}
else if (fs == 'hh') {
part = part.toString().padLeft(2, '0');
}
break;
case 'HH':
part = dt.getHours().toString().padLeft(2, '0');
break;
case 'H':
part = dt.getHours();
break;
case 'mm':
part = dt.getMinutes().toString().padLeft(2, '0');
break;
case 'm':
part = dt.getMinutes();
break;
case 'ss':
part = dt.getSeconds().toString().padLeft(2, '0');
break;
case 's':
part = dt.getSeconds();
break;
case 't': case 'tt':
part = (dt.getHours() < 12) ? dtf.amDesignator : dtf.pmDesignator;
if (fs == 't') {
part = part.charAt(0);
}
break;
case 'fff':
part = dt.getMilliseconds().toString().padLeft(3, '0');
break;
case 'ff':
part = dt.getMilliseconds().toString().padLeft(3).substr(0, 2);
break;
case 'f':
part = dt.getMilliseconds().toString().padLeft(3).charAt(0);
break;
case 'z':
part = dt.getTimezoneOffset() / 60;
part = ((part >= 0) ? '-' : '+') + Math.floor(Math.abs(part));
break;
case 'zz': case 'zzz':
part = dt.getTimezoneOffset() / 60;
part = ((part >= 0) ? '-' : '+') + Math.floor(Math.abs(part)).toString().padLeft(2, '0');
if (fs == 'zzz') {
part += dtf.timeSeparator + Math.abs(dt.getTimezoneOffset() % 60).toString().padLeft(2, '0');
}
break;
}
sb.append(part);
}
return sb.toString();
}
///////////////////////////////////////////////////////////////////////////////
// Error Extensions
Error.__typeName = 'Error';
Error.create = function Error$create(message, userData, innerException) {
var e = new Error(message);
if (userData) {
e.userData = userData;
}
if (innerException) {
e.innerException = innerException;
}
return e;
}
///////////////////////////////////////////////////////////////////////////////
// Debug Extensions
if (!Debug._fail) {
Debug._fail = function Debug$_fail(message) {
Debug.writeln(message);
eval('debugger;');
}
}
Debug.assert = function Debug$assert(condition, message) {
if (!condition) {
message = 'Assert failed: ' + message;
if (confirm(message + '\r\n\r\nBreak into debugger?')) {
Debug._fail(message);
}
}
}
Debug._dumpCore = function Debug$_dumpCore(sb, object, name, indentation, dumpedObjects) {
if (object === null) {
sb.appendLine(indentation + name + ': null');
return;
}
switch (typeof(object)) {
case 'undefined':
sb.appendLine(indentation + name + ': undefined');
break;
case 'number':
case 'string':
case 'boolean':
sb.appendLine(indentation + name + ': ' + object);
break;
default:
if (Date.isInstance(object) || RegExp.isInstance(object)) {
sb.appendLine(indentation + name + ': ' + object);
break;
}
if (dumpedObjects.contains(object)) {
sb.appendLine(indentation + name + ': ...');
break;
}
dumpedObjects.add(object);
var type = Type.getInstanceType(object);
var typeName = type.get_fullName();
var recursiveIndentation = indentation + ' ';
if (IArray.isInstance(object)) {
sb.appendLine(indentation + name + ': {' + typeName + '}');
var length = object.getLength();
for (var i = 0; i < length; i++) {
Debug._dumpCore(sb, object.getItem(i), '[' + i + ']', recursiveIndentation, dumpedObjects);
}
}
else {
var td = TypeDescriptor._getObjectDescriptor(object);
if (!td) {
if (object.tagName) {
sb.appendLine(indentation + name + ': <' + object.tagName + '>');
var attributes = object.attributes;
for (var i = 0; i < attributes.length; i++) {
var attrValue = attributes[i].nodeValue;
if (attrValue) {
Debug._dumpCore(sb, attrValue, attributes[i].nodeName, recursiveIndentation, dumpedObjects);
}
}
}
else {
sb.appendLine(indentation + name + ': {' + typeName + '}');
for (var field in object) {
var v = object[field];
if (!Function.isInstance(v)) {
Debug._dumpCore(sb, v, field, recursiveIndentation, dumpedObjects);
}
}
}
}
else {
sb.appendLine(indentation + name + ': {' + typeName + '}');
var properties = td._properties;
if (properties) {
for (var prop in properties) {
var propValue = TypeDescriptor.getProperty(object, prop);
Debug._dumpCore(sb, propValue, prop, recursiveIndentation, dumpedObjects);
}
}
}
}
dumpedObjects.remove(object);
break;
}
}
Debug.dump = function Debug$dump(object, name) {
if ((!name || !name.length) && (object !== null)) {
name = Type.getInstanceType(object).get_fullName();
}
if (!name || !name.length) {
return;
}
var sb = new StringBuilder();
Debug._dumpCore(sb, object, name, '', []);
Debug.writeLine(sb.toString());
}
Debug.fail = function Debug$fail(message) {
Debug._fail(message);
}
Debug.inspect = function Debug$inspect(object, name) {
var dumped = false;
if (window.debugService) {
dumped = window.debugService.inspect(name, object);
}
if (!dumped) {
Debug.dump(object, name);
}
}
Debug.writeLine = function Debug$writeLine(message) {
if (window.debugService) {
window.debugService.trace(message);
return;
}
Debug.writeln(message);
var traceTextBox = $('_traceTextBox');
if (traceTextBox) {
traceTextBox.value = traceTextBox.value + '\r\n' + message;
}
}
Debug.__typeName = 'Debug';
///////////////////////////////////////////////////////////////////////////////
// Type System Implementation
var Type = Function;
Type.__typeName = 'Type';
var __Namespace = function(name) {
this.__typeName = name;
}
__Namespace.prototype = {
__namespace: true,
getName: function() {
return this.__typeName;
}
}
Type.createNamespace = function Type$createNamespace(name) {
if (!window.__namespaces) {
window.__namespaces = {};
}
if (!window.__rootNamespaces) {
window.__rootNamespaces = [];
}
if (window.__namespaces[name]) {
return;
}
var ns = window;
var nameParts = name.split('.');
for (var i = 0; i < nameParts.length; i++) {
var part = nameParts[i];
var nso = ns[part];
if (!nso) {
ns[part] = nso = new __Namespace(nameParts.slice(0, i + 1).join('.'));
if (i == 0) {
window.__rootNamespaces.add(nso);
}
}
ns = nso;
}
window.__namespaces[name] = ns;
}
Type.prototype.createClass = function Type$createClass(name, baseType, interfaceType) {
this.prototype.constructor = this;
this.__typeName = name;
this.__class = true;
this.__baseType = baseType || Object;
if (baseType) {
this.__basePrototypePending = true;
}
if (interfaceType) {
this.__interfaces = [];
for (var i = 2; i < arguments.length; i++) {
interfaceType = arguments[i];
this.__interfaces.add(interfaceType);
}
}
}
Type.prototype.createInterface = function Type$createInterface(name) {
this.__typeName = name;
this.__interface = true;
}
Type.prototype.createEnum = function Type$createEnum(name, flags) {
for (var field in this.prototype) {
this[field] = this.prototype[field];
}
this.__typeName = name;
this.__enum = true;
if (flags) {
this.__flags = true;
}
}
Type.prototype.setupBase = function Type$setupBase() {
if (this.__basePrototypePending) {
var baseType = this.__baseType;
if (baseType.__basePrototypePending) {
baseType.setupBase();
}
for (var memberName in baseType.prototype) {
var memberValue = baseType.prototype[memberName];
if (!this.prototype[memberName]) {
this.prototype[memberName] = memberValue;
}
}
delete this.__basePrototypePending;
}
}
Type.prototype.constructBase = function Type$constructBase(instance, args) {
if (this.__basePrototypePending) {
this.setupBase();
}
if (!args) {
this.__baseType.apply(instance);
}
else {
this.__baseType.apply(instance, args);
}
}
Type.prototype.callBase = function Type$callBase(instance, name, args) {
var baseMethod = this.__baseType.prototype[name];
if (!args) {
return baseMethod.apply(instance);
}
else {
return baseMethod.apply(instance, args);
}
}
Type.prototype.get_baseType = function Type$get_baseType() {
return this.__baseType || null;
}
Type.prototype.get_fullName = function Type$get_fullName() {
return this.__typeName;
}
Type.prototype.get_name = function Type$get_name() {
var fullName = this.__typeName;
var nsIndex = fullName.lastIndexOf('.');
if (nsIndex > 0) {
return fullName.substr(nsIndex + 1);
}
return fullName;
}
Type.prototype.isInstance = function Type$isInstance(instance) {
if (isNullOrUndefined(instance)) {
return false;
}
if ((this == Object) || (instance instanceof this)) {
return true;
}
var type = Type.getInstanceType(instance);
return this.isAssignableFrom(type);
}
Type.prototype.isAssignableFrom = function Type$isAssignableFrom(type) {
if ((this == Object) || (this == type)) {
return true;
}
if (this.__class) {
var baseType = type.__baseType;
while (baseType) {
if (this == baseType) {
return true;
}
baseType = baseType.__baseType;
}
}
else if (this.__interface) {
var interfaces = type.__interfaces;
if (interfaces && interfaces.contains(this)) {
return true;
}
var baseType = type.__baseType;
while (baseType) {
interfaces = baseType.__interfaces;
if (interfaces && interfaces.contains(this)) {
return true;
}
baseType = baseType.__baseType;
}
}
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -