📄 common.js
字号:
/// from a specified element and has a matching signature as $addHandlers
/// </remarks>
for (var name in events) {
$removeHandler(element, name, events[name]);
}
},
overlaps : function(r1, r2) {
/// <summary>
/// Determine if two rectangles overlap
/// </summary>
/// <param name="r1" type="Object">
/// Rectangle
/// </param>
/// <param name="r2" type="Object">
/// Rectangle
/// </param>
/// <returns type="Boolean">
/// True if the rectangles overlap, false otherwise
/// </returns>
return r1.x < (r2.x + r2.width)
&& r2.x < (r1.x + r1.width)
&& r1.y < (r2.y + r2.height)
&& r2.y < (r1.y + r1.height);
},
containsPoint : function(rect, x, y) {
/// <summary>
/// Tests whether a point (x,y) is contained within a rectangle
/// </summary>
/// <param name="rect" type="Object">The rectangle</param>
/// <param name="x" type="Number">The x coordinate of the point</param>
/// <param name="y" type="Number">The y coordinate of the point</param>
return x >= rect.x && x < (rect.x + rect.width) && y >= rect.y && y < (rect.y + rect.height);
},
isKeyDigit : function(keyCode) {
/// <summary>
/// Gets whether the supplied key-code is a digit
/// </summary>
/// <param name="keyCode" type="Number" integer="true">The key code of the event (from Sys.UI.DomEvent)</param>
/// <returns type="Boolean" />
return (0x30 <= keyCode && keyCode <= 0x39);
},
isKeyNavigation : function(keyCode) {
/// <summary>
/// Gets whether the supplied key-code is a navigation key
/// </summary>
/// <param name="keyCode" type="Number" integer="true">The key code of the event (from Sys.UI.DomEvent)</param>
/// <returns type="Boolean" />
return (Sys.UI.Key.left <= keyCode && keyCode <= Sys.UI.Key.down);
},
padLeft : function(text, size, ch, truncate) {
/// <summary>
/// Pads the left hand side of the supplied text with the specified pad character up to the requested size
/// </summary>
/// <param name="text" type="String">The text to pad</param>
/// <param name="size" type="Number" integer="true" optional="true">The size to pad the text (default is 2)</param>
/// <param name="ch" type="String" optional="true">The single character to use as the pad character (default is ' ')</param>
/// <param name="truncate" type="Boolean" optional="true">Whether to truncate the text to size (default is false)</param>
return $common._pad(text, size || 2, ch || ' ', 'l', truncate || false);
},
padRight : function(text, size, ch, truncate) {
/// <summary>
/// Pads the right hand side of the supplied text with the specified pad character up to the requested size
/// </summary>
/// <param name="text" type="String">The text to pad</param>
/// <param name="size" type="Number" integer="true" optional="true">The size to pad the text (default is 2)</param>
/// <param name="ch" type="String" optional="true">The single character to use as the pad character (default is ' ')</param>
/// <param name="truncate" type="Boolean" optional="true">Whether to truncate the text to size (default is false)</param>
return $common._pad(text, size || 2, ch || ' ', 'r', truncate || false);
},
_pad : function(text, size, ch, side, truncate) {
/// <summary>
/// Pads supplied text with the specified pad character up to the requested size
/// </summary>
/// <param name="text" type="String">The text to pad</param>
/// <param name="size" type="Number" integer="true">The size to pad the text</param>
/// <param name="ch" type="String">The single character to use as the pad character</param>
/// <param name="side" type="String">Either 'l' or 'r' to siginfy whether to pad the Left or Right side respectively</param>
/// <param name="truncate" type="Boolean">Whether to truncate the text to size</param>
text = text.toString();
var length = text.length;
var builder = new Sys.StringBuilder();
if (side == 'r') {
builder.append(text);
}
while (length < size) {
builder.append(ch);
length++;
}
if (side == 'l') {
builder.append(text);
}
var result = builder.toString();
if (truncate && result.length > size) {
if (side == 'l') {
result = result.substr(result.length - size, size);
} else {
result = result.substr(0, size);
}
}
return result;
},
__DOMEvents : {
focusin : { eventGroup : "UIEvents", init : function(e, p) { e.initUIEvent("focusin", true, false, window, 1); } },
focusout : { eventGroup : "UIEvents", init : function(e, p) { e.initUIEvent("focusout", true, false, window, 1); } },
activate : { eventGroup : "UIEvents", init : function(e, p) { e.initUIEvent("activate", true, true, window, 1); } },
focus : { eventGroup : "UIEvents", init : function(e, p) { e.initUIEvent("focus", false, false, window, 1); } },
blur : { eventGroup : "UIEvents", init : function(e, p) { e.initUIEvent("blur", false, false, window, 1); } },
click : { eventGroup : "MouseEvents", init : function(e, p) { e.initMouseEvent("click", true, true, window, 1, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } },
dblclick : { eventGroup : "MouseEvents", init : function(e, p) { e.initMouseEvent("click", true, true, window, 2, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } },
mousedown : { eventGroup : "MouseEvents", init : function(e, p) { e.initMouseEvent("mousedown", true, true, window, 1, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } },
mouseup : { eventGroup : "MouseEvents", init : function(e, p) { e.initMouseEvent("mouseup", true, true, window, 1, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } },
mouseover : { eventGroup : "MouseEvents", init : function(e, p) { e.initMouseEvent("mouseover", true, true, window, 1, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } },
mousemove : { eventGroup : "MouseEvents", init : function(e, p) { e.initMouseEvent("mousemove", true, true, window, 1, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } },
mouseout : { eventGroup : "MouseEvents", init : function(e, p) { e.initMouseEvent("mousemove", true, true, window, 1, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } },
load : { eventGroup : "HTMLEvents", init : function(e, p) { e.initEvent("load", false, false); } },
unload : { eventGroup : "HTMLEvents", init : function(e, p) { e.initEvent("unload", false, false); } },
select : { eventGroup : "HTMLEvents", init : function(e, p) { e.initEvent("select", true, false); } },
change : { eventGroup : "HTMLEvents", init : function(e, p) { e.initEvent("change", true, false); } },
submit : { eventGroup : "HTMLEvents", init : function(e, p) { e.initEvent("submit", true, true); } },
reset : { eventGroup : "HTMLEvents", init : function(e, p) { e.initEvent("reset", true, false); } },
resize : { eventGroup : "HTMLEvents", init : function(e, p) { e.initEvent("resize", true, false); } },
scroll : { eventGroup : "HTMLEvents", init : function(e, p) { e.initEvent("scroll", true, false); } }
},
tryFireRawEvent : function(element, rawEvent) {
/// <summary>
/// Attempts to fire a raw DOM event on an element
/// </summary>
/// <param name="element" type="Sys.UI.DomElement">The element to fire the event</param>
/// <param name="rawEvent" type="Object">The raw DOM event object to fire. Must not be Sys.UI.DomEvent</param>
/// <returns type="Boolean">True if the event was successfully fired, otherwise false</returns>
try {
if (element.fireEvent) {
element.fireEvent("on" + rawEvent.type, rawEvent);
return true;
} else if (element.dispatchEvent) {
element.dispatchEvent(rawEvent);
return true;
}
} catch (e) {
}
return false;
},
tryFireEvent : function(element, eventName, properties) {
/// <summary>
/// Attempts to fire a DOM event on an element
/// </summary>
/// <param name="element" type="Sys.UI.DomElement">The element to fire the event</param>
/// <param name="eventName" type="String">The name of the event to fire (without an 'on' prefix)</param>
/// <param name="properties" type="Object">Properties to add to the event</param>
/// <returns type="Boolean">True if the event was successfully fired, otherwise false</returns>
try {
if (document.createEventObject) {
var e = document.createEventObject();
$common.applyProperties(e, properties || {});
element.fireEvent("on" + eventName, e);
return true;
} else if (document.createEvent) {
var def = $common.__DOMEvents[eventName];
if (def) {
var e = document.createEvent(def.eventGroup);
def.init(e, properties || {});
element.dispatchEvent(e);
return true;
}
}
} catch (e) {
}
return false;
},
wrapElement : function(innerElement, newOuterElement, newInnerParentElement) {
/// <summary>
/// Wraps an inner element with a new outer element at the same DOM location as the inner element
/// </summary>
/// <param name="innerElement" type="Sys.UI.DomElement">The element to be wrapped</param>
/// <param name="newOuterElement" type="Sys.UI.DomElement">The new parent for the element</param>
/// <returns />
var parent = innerElement.parentNode;
parent.replaceChild(newOuterElement, innerElement);
(newInnerParentElement || newOuterElement).appendChild(innerElement);
},
unwrapElement : function(innerElement, oldOuterElement) {
/// <summary>
/// Unwraps an inner element from an outer element at the same DOM location as the outer element
/// </summary>
/// <param name="innerElement" type="Sys.UI.DomElement">The element to be wrapped</param>
/// <param name="newOuterElement" type="Sys.UI.DomElement">The new parent for the element</param>
/// <returns />
var parent = oldOuterElement.parentNode;
if (parent != null) {
$common.removeElement(innerElement);
parent.replaceChild(innerElement, oldOuterElement);
}
},
removeElement : function(element) {
/// <summary>
/// Removes an element from the DOM tree
/// </summary>
/// <param name="element" type="Sys.UI.DomElement">The element to be removed</param>
/// <returns />
var parent = element.parentNode;
if (parent != null) {
parent.removeChild(element);
}
},
applyProperties : function(target, properties) {
/// <summary>
/// Quick utility method to copy properties from a template object to a target object
/// </summary>
/// <param name="target" type="Object">The object to apply to</param>
/// <param name="properties" type="Object">The template to copy values from</param>
for (var p in properties) {
var pv = properties[p];
if (pv != null && Object.getType(pv)===Object) {
var tv = target[p];
$common.applyProperties(tv, pv);
} else {
target[p] = pv;
}
}
},
createElementFromTemplate : function(template, appendToParent, nameTable) {
/// <summary>
/// Creates an element for the current document based on a template object
/// </summary>
/// <param name="template" type="Object">The template from which to create the element</param>
/// <param name="appendToParent" type="Sys.UI.DomElement" optional="true" mayBeNull="true">A DomElement under which to append this element</param>
/// <param name="nameTable" type="Object" optional="true" mayBeNull="true">An object to use as the storage for the element using template.name as the key</param>
/// <returns type="Sys.UI.DomElement" />
/// <remarks>
/// This method is useful if you find yourself using the same or similar DomElement constructions throughout a class. You can even set the templates
/// as static properties for a type to cut down on overhead. This method is often called with a JSON style template:
/// <code>
/// var elt = $common.createElementFromTemplate({
/// nodeName : "div",
/// properties : {
/// style : {
/// height : "100px",
/// width : "100px",
/// backgroundColor : "white"
/// },
/// expandoAttribute : "foo"
/// },
/// events : {
/// click : function() { alert("foo"); },
/// mouseover : function() { elt.backgroundColor = "silver"; },
/// mouseout : function() { elt.backgroundColor = "white"; }
/// },
/// cssClasses : [ "class0", "class1" ],
/// visible : true,
/// opacity : .5
/// }, someParent);
/// </code>
/// </remarks>
// if we wish to override the name table we do so here
if (typeof(template.nameTable)!='undefined') {
var newNameTable = template.nameTable;
if (String.isInstanceOfType(newNameTable)) {
newNameTable = nameTable[newNameTable];
}
if (newNameTable != null) {
nameTable = newNameTable;
}
}
// get a name for the element in the nameTable
var elementName = null;
if (typeof(template.name)!=='undefined') {
elementName = template.name;
}
// create or acquire the element
var elt = document.createElement(template.nodeName);
// if our element is named, add it to the name table
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -