📄 sscorlib.debug.js
字号:
//! Script# Core Runtime
//! Copyright (c) 2007, Nikhil Kothari. All Rights Reserved.
//! http://projects.nikhilk.net
//!
///////////////////////////////////////////////////////////////////////////////
// Globals
function isUndefined(o) {
return (o === undefined);
}
function isNull(o) {
return (o === null);
}
function isNullOrUndefined(o) {
return (o === null) || (o === undefined);
}
function $(id) {
return document.getElementById(id);
}
document.getElementsBySelector = function getElementsBySelector(cssSelector, root) {
var all = root ? root.getElementsByTagName('*') : document.getElementsByTagName('*');
var matches = [];
// Create a stylesheet we'll use to insert a CSS rule into to do the matching.
// This is created just once.
var styleSheet = document.getElementsBySelector.styleSheet;
if (!styleSheet) {
var styleSheetNode = document.createElement('style');
styleSheetNode.type = 'text/css';
document.getElementsByTagName('head')[0].appendChild(styleSheetNode);
styleSheet = styleSheetNode.styleSheet || styleSheetNode.sheet;
document.getElementsBySelector.styleSheet = styleSheet;
}
if (window.navigator.userAgent.indexOf('MSIE') >= 0) {
// Add the rule that will be used to match elements
styleSheet.addRule(cssSelector, 'ssCssMatch:true', 0);
for (var i = all.length - 1; i >= 0; i--) {
var element = all[i];
// Find elements that contain the special css attribute, i.e.
// the elements that match the specified selector.
if (element.currentStyle.ssCssMatch) {
matches[matches.length] = element;
}
}
styleSheet.removeRule(0);
}
else {
var matchValue = document.getElementsBySelector.matchValue;
if (!matchValue) {
matchValue = (window.navigator.userAgent.indexOf('Opera') >= 0) ? '"ssCssMatch"' : 'ssCssMatch 1';
document.getElementsBySelector.matchValue = matchValue;
}
// Add the rule that will be used to match elements
styleSheet.insertRule(cssSelector + ' { counter-increment: ssCssMatch }', 0);
var docView = document.defaultView;
for (var i = all.length - 1; i >= 0; i--) {
var element = all[i];
// Find elements that contain the special css attribute, i.e.
// the elements that match the specified selector.
if (docView.getComputedStyle(element, null).counterIncrement === matchValue) {
matches[matches.length] = element;
}
}
styleSheet.deleteRule(0);
}
if (matches.length > 1) {
matches.reverse();
}
return matches;
}
///////////////////////////////////////////////////////////////////////////////
// Object Extensions
Object.__typeName = 'Object';
Object.__baseType = null;
Object.parse = function Object$parse(s) {
return eval(s);
}
Object.getKeyCount = function Object$getKeyCount(d) {
var count = 0;
for (var n in d) {
count++;
}
return count;
}
Object.clearKeys = function Object$clearKeys(d) {
for (var n in d) {
delete d[n];
}
}
Object.keyExists = function Object$keyExists(d, key) {
return d[key] !== undefined;
}
///////////////////////////////////////////////////////////////////////////////
// Function Extensions
Function.parse = function Function$parse(s) {
if (!Function._parseCache) {
Function._parseCache = { };
}
var fn = Function._parseCache[s];
if (!fn) {
try {
eval('fn = ' + s);
if (typeof(fn) != 'function') {
fn = null;
}
else {
Function._parseCache[s] = fn;
}
}
catch (ex) {
}
}
return fn;
}
///////////////////////////////////////////////////////////////////////////////
// Boolean Extensions
Boolean.__typeName = 'Boolean';
Boolean.parse = function Boolean$parse(s) {
return (s.toLowerCase() == 'true');
}
///////////////////////////////////////////////////////////////////////////////
// Number Extensions
Number.__typeName = 'Number';
Number.parse = function Number$parse(s) {
if (!s || !s.length) {
return 0;
}
if ((s.indexOf('.') >= 0) || (s.indexOf('e') >= 0) ||
s.endsWith('f') || s.endsWith('F')) {
return parseFloat(s);
}
return parseInt(s);
}
Number.prototype.format = function Number$format(format, useLocale) {
if (isNullOrUndefined(format) ||
(format.length == 0) || (format == 'i')) {
if (useLocale) {
return this.toLocaleString();
}
else {
return this.toString();
}
}
return this._netFormat(format, useLocale);
}
Number._commaFormat = function Number$_commaFormat(number, groups, decimal, comma) {
var decimalPart = null;
var decimalIndex = number.indexOf(decimal);
if (decimalIndex > 0) {
decimalPart = number.substr(decimalIndex);
number = number.substr(0, decimalIndex);
}
var negative = number.startsWith('-');
if (negative) {
number = number.substr(1);
}
var groupIndex = 0;
var groupSize = groups[groupIndex];
if (number.length < groupSize) {
return decimalPart ? number + decimalPart : number;
}
var index = number.length;
var s = '';
var done = false;
while (!done) {
var length = groupSize;
var startIndex = index - length;
if (startIndex < 0) {
groupSize += startIndex;
length += startIndex;
startIndex = 0;
done = true;
}
if (!length) {
break;
}
var part = number.substr(startIndex, length);
if (s.length) {
s = part + comma + s;
}
else {
s = part;
}
index -= length;
if (groupIndex < groups.length - 1) {
groupIndex++;
groupSize = groups[groupIndex];
}
}
if (negative) {
s = '-' + s;
}
return decimalPart ? s + decimalPart : s;
}
Number.prototype._netFormat = function Number$_netFormat(format, useLocale) {
var nf = useLocale ? CultureInfo.Current.numberFormat : CultureInfo.Neutral.numberFormat;
var s = '';
var precision = -1;
if (format.length > 1) {
precision = parseInt(format.substr(1));
}
var fs = format.charAt(0);
switch (fs) {
case 'd': case 'D':
s = parseInt(Math.abs(this)).toString();
if (precision != -1) {
s = s.padLeft(precision, '0');
}
if (this < 0) {
s = '-' + s;
}
break;
case 'x': case 'X':
s = parseInt(Math.abs(this)).toString(16);
if (fs == 'X') {
s = s.toUpperCase();
}
if (precision != -1) {
s = s.padLeft(precision, '0');
}
break;
case 'e': case 'E':
if (precision == -1) {
s = this.toExponential();
}
else {
s = this.toExponential(precision);
}
if (fs == 'E') {
s = s.toUpperCase();
}
break;
case 'f': case 'F':
case 'n': case 'N':
if (precision == -1) {
precision = nf.numberDecimalDigits;
}
s = this.toFixed(precision).toString();
if (precision && (nf.numberDecimalSeparator != '.')) {
var index = s.indexOf('.');
s = s.substr(0, index) + nf.numberDecimalSeparator + s.substr(index + 1);
}
if ((fs == 'n') || (fs == 'N')) {
s = Number._commaFormat(s, nf.numberGroupSizes, nf.numberDecimalSeparator, nf.numberGroupSeparator);
}
break;
case 'c': case 'C':
if (precision == -1) {
precision = nf.currencyDecimalDigits;
}
s = Math.abs(this).toFixed(precision).toString();
if (precision && (nf.currencyDecimalSeparator != '.')) {
var index = s.indexOf('.');
s = s.substr(0, index) + nf.currencyDecimalSeparator + s.substr(index + 1);
}
s = Number._commaFormat(s, nf.currencyGroupSizes, nf.currencyDecimalSeparator, nf.currencyGroupSeparator);
if (this < 0) {
s = String.format(nf.currencyNegativePattern, s);
}
else {
s = String.format(nf.currencyPositivePattern, s);
}
break;
case 'p': case 'P':
if (precision == -1) {
precision = nf.percentDecimalDigits;
}
s = (Math.abs(this) * 100.0).toFixed(precision).toString();
if (precision && (nf.percentDecimalSeparator != '.')) {
var index = s.indexOf('.');
s = s.substr(0, index) + nf.percentDecimalSeparator + s.substr(index + 1);
}
s = Number._commaFormat(s, nf.percentGroupSizes, nf.percentDecimalSeparator, nf.percentGroupSeparator);
if (this < 0) {
s = String.format(nf.percentNegativePattern, s);
}
else {
s = String.format(nf.percentPositivePattern, s);
}
break;
}
return s;
}
///////////////////////////////////////////////////////////////////////////////
// Math Extensions
Math.truncate = function Math$truncate(n) {
return (n >= 0) ? Math.floor(n) : Math.ceil(n);
}
///////////////////////////////////////////////////////////////////////////////
// String Extensions
String.__typeName = 'String';
String.Empty = '';
String.compare = function String$compare(s1, s2, ignoreCase) {
if (ignoreCase) {
if (s1) {
s1 = s1.toUpperCase();
}
if (s2) {
s2 = s2.toUpperCase();
}
}
s1 = s1 || '';
s2 = s2 || '';
if (s1 == s2) {
return 0;
}
if (s1 < s2) {
return -1;
}
return 1;
}
String.prototype.compareTo = function String$compareTo(s, ignoreCase) {
return String.compare(this, s, ignoreCase);
}
String.prototype.endsWith = function String$endsWith(suffix) {
if (!suffix.length) {
return true;
}
if (suffix.length > this.length) {
return false;
}
return (this.substr(this.length - suffix.length) == suffix);
}
String.equals = function String$equals1(s1, s2, ignoreCase) {
return String.compare(s1, s2, ignoreCase) == 0;
}
String._format = function String$_format(format, values, useLocale) {
if (!String._formatRE) {
String._formatRE = /(\{[^\}^\{]+\})/g;
}
return format.replace(String._formatRE,
function(str, m) {
var index = parseInt(m.substr(1));
var value = values[index + 1];
if (isNullOrUndefined(value)) {
return '';
}
if (value.format) {
var formatSpec = null;
var formatIndex = m.indexOf(':');
if (formatIndex > 0) {
formatSpec = m.substring(formatIndex + 1, m.length - 1);
}
return value.format.call(value, formatSpec, useLocale);
}
else {
if (useLocale) {
return value.toLocaleString();
}
return value.toString();
}
});
}
String.format = function String$format(format) {
return String._format(format, arguments, /* useLocale */ false);
}
String.fromChar = function String$fromChar(ch, count) {
var s = ch;
for (var i = 1; i < count; i++) {
s += ch;
}
return s;
}
String.prototype.htmlDecode = function String$htmlDecode() {
if (!String._htmlDecRE) {
String._htmlDecMap = { '&': '&', '<': '<', '>': '>', '"': '"' };
String._htmlDecRE = /(&|<|>|")/gi;
}
var s = this;
s = s.replace(String._htmlDecRE,
function String$htmlDecode$replace(str, m) {
return String._htmlDecMap[m];
});
return s;
}
String.prototype.htmlEncode = function String$htmlEncode() {
if (!String._htmlEncRE) {
String._htmlEncMap = { '&': '&', '<': '<', '>': '>', '"': '"' };
String._htmlEncRE = /([&<>"])/g;
}
var s = this;
if (String._htmlEncRE.test(s)) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -