guy
6 years ago
23 changed files with 84699 additions and 85586 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,592 +0,0 @@ |
|||||||
/** |
|
||||||
* guy |
|
||||||
* 最基础的dom操作 |
|
||||||
*/ |
|
||||||
BI.extend(jQuery.fn, { |
|
||||||
|
|
||||||
destroy: function () { |
|
||||||
this.remove(); |
|
||||||
if (BI.isIE() === true) { |
|
||||||
this[0].outerHTML = ""; |
|
||||||
} |
|
||||||
}, |
|
||||||
/** |
|
||||||
* 高亮显示 |
|
||||||
* @param text 必需 |
|
||||||
* @param keyword |
|
||||||
* @param py 必需 |
|
||||||
* @returns {*} |
|
||||||
* @private |
|
||||||
*/ |
|
||||||
__textKeywordMarked__: function (text, keyword, py) { |
|
||||||
if (!BI.isKey(keyword) || (text + "").length > 100) { |
|
||||||
return this.html(BI.htmlEncode(text)); |
|
||||||
} |
|
||||||
keyword = keyword + ""; |
|
||||||
keyword = BI.toUpperCase(keyword); |
|
||||||
var textLeft = (text || "") + ""; |
|
||||||
py = (py || BI.makeFirstPY(text)) + ""; |
|
||||||
if (py != null) { |
|
||||||
py = BI.toUpperCase(py); |
|
||||||
} |
|
||||||
this.empty(); |
|
||||||
while (true) { |
|
||||||
var tidx = BI.toUpperCase(textLeft).indexOf(keyword); |
|
||||||
var pidx = null; |
|
||||||
if (py != null) { |
|
||||||
pidx = py.indexOf(keyword); |
|
||||||
if (pidx >= 0) { |
|
||||||
pidx = pidx % text.length; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (tidx >= 0) { |
|
||||||
this.append(textLeft.substr(0, tidx)); |
|
||||||
this.append($("<span>").addClass("bi-keyword-red-mark") |
|
||||||
.html(BI.htmlEncode(textLeft.substr(tidx, keyword.length)))); |
|
||||||
|
|
||||||
textLeft = textLeft.substr(tidx + keyword.length); |
|
||||||
if (py != null) { |
|
||||||
py = py.substr(tidx + keyword.length); |
|
||||||
} |
|
||||||
} else if (pidx != null && pidx >= 0 && Math.floor(pidx / text.length) === Math.floor((pidx + keyword.length - 1) / text.length)) { |
|
||||||
this.append(textLeft.substr(0, pidx)); |
|
||||||
this.append($("<span>").addClass("bi-keyword-red-mark") |
|
||||||
.html(BI.htmlEncode(textLeft.substr(pidx, keyword.length)))); |
|
||||||
if (py != null) { |
|
||||||
py = py.substr(pidx + keyword.length); |
|
||||||
} |
|
||||||
textLeft = textLeft.substr(pidx + keyword.length); |
|
||||||
} else { |
|
||||||
this.append(textLeft); |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return this; |
|
||||||
}, |
|
||||||
|
|
||||||
getDomHeight: function (parent) { |
|
||||||
var clone = $(this).clone(); |
|
||||||
clone.appendTo($(parent || "body")); |
|
||||||
var height = clone.height(); |
|
||||||
clone.remove(); |
|
||||||
return height; |
|
||||||
}, |
|
||||||
|
|
||||||
// 是否有竖直滚动条
|
|
||||||
hasVerticalScroll: function () { |
|
||||||
return this.height() > 0 && this[0].clientWidth < this[0].offsetWidth; |
|
||||||
}, |
|
||||||
|
|
||||||
// 是否有水平滚动条
|
|
||||||
hasHorizonScroll: function () { |
|
||||||
return this.width() > 0 && this[0].clientHeight < this[0].offsetHeight; |
|
||||||
}, |
|
||||||
|
|
||||||
// 获取计算后的样式
|
|
||||||
getStyle: function (name) { |
|
||||||
var node = this[0]; |
|
||||||
var computedStyle = void 0; |
|
||||||
|
|
||||||
// W3C Standard
|
|
||||||
if (_global.getComputedStyle) { |
|
||||||
// In certain cases such as within an iframe in FF3, this returns null.
|
|
||||||
computedStyle = _global.getComputedStyle(node, null); |
|
||||||
if (computedStyle) { |
|
||||||
return computedStyle.getPropertyValue(BI.hyphenate(name)); |
|
||||||
} |
|
||||||
} |
|
||||||
// Safari
|
|
||||||
if (document.defaultView && document.defaultView.getComputedStyle) { |
|
||||||
computedStyle = document.defaultView.getComputedStyle(node, null); |
|
||||||
// A Safari bug causes this to return null for `display: none` elements.
|
|
||||||
if (computedStyle) { |
|
||||||
return computedStyle.getPropertyValue(BI.hyphenate(name)); |
|
||||||
} |
|
||||||
if (name === "display") { |
|
||||||
return "none"; |
|
||||||
} |
|
||||||
} |
|
||||||
// Internet Explorer
|
|
||||||
if (node.currentStyle) { |
|
||||||
if (name === "float") { |
|
||||||
return node.currentStyle.cssFloat || node.currentStyle.styleFloat; |
|
||||||
} |
|
||||||
return node.currentStyle[BI.camelize(name)]; |
|
||||||
} |
|
||||||
return node.style && node.style[BI.camelize(name)]; |
|
||||||
}, |
|
||||||
|
|
||||||
__isMouseInBounds__: function (e) { |
|
||||||
var offset2Body = this.get(0).getBoundingClientRect ? this.get(0).getBoundingClientRect() : this.offset(); |
|
||||||
var width = offset2Body.width || this.outerWidth(); |
|
||||||
var height = offset2Body.height || this.outerHeight(); |
|
||||||
return !(e.pageX < offset2Body.left || e.pageX > offset2Body.left + width |
|
||||||
|| e.pageY < offset2Body.top || e.pageY > offset2Body.top + height); |
|
||||||
}, |
|
||||||
|
|
||||||
__hasZIndexMask__: function (zindex) { |
|
||||||
return zindex && this.zIndexMask[zindex] != null; |
|
||||||
}, |
|
||||||
|
|
||||||
__buildZIndexMask__: function (zindex, domArray) { |
|
||||||
this.zIndexMask = this.zIndexMask || {};// 存储z-index的mask
|
|
||||||
this.indexMask = this.indexMask || [];// 存储mask
|
|
||||||
var mask = BI.createWidget({ |
|
||||||
type: "bi.center_adapt", |
|
||||||
cls: "bi-z-index-mask", |
|
||||||
items: domArray |
|
||||||
}); |
|
||||||
|
|
||||||
mask.element.css({"z-index": zindex}); |
|
||||||
BI.createWidget({ |
|
||||||
type: "bi.absolute", |
|
||||||
element: this, |
|
||||||
items: [{ |
|
||||||
el: mask, |
|
||||||
left: 0, |
|
||||||
right: 0, |
|
||||||
top: 0, |
|
||||||
bottom: 0 |
|
||||||
}] |
|
||||||
}); |
|
||||||
this.indexMask.push(mask); |
|
||||||
zindex && (this.zIndexMask[zindex] = mask); |
|
||||||
return mask.element; |
|
||||||
}, |
|
||||||
|
|
||||||
__releaseZIndexMask__: function (zindex) { |
|
||||||
if (zindex && this.zIndexMask[zindex]) { |
|
||||||
this.indexMask.remove(this.zIndexMask[zindex]); |
|
||||||
this.zIndexMask[zindex].destroy(); |
|
||||||
return; |
|
||||||
} |
|
||||||
this.indexMask = this.indexMask || []; |
|
||||||
var indexMask = this.indexMask.pop(); |
|
||||||
indexMask && indexMask.destroy(); |
|
||||||
} |
|
||||||
}); |
|
||||||
|
|
||||||
BI.extend(jQuery, { |
|
||||||
|
|
||||||
getLeftPosition: function (combo, popup, extraWidth) { |
|
||||||
return { |
|
||||||
left: combo.element.offset().left - popup.element.outerWidth() - (extraWidth || 0) |
|
||||||
}; |
|
||||||
}, |
|
||||||
|
|
||||||
getRightPosition: function (combo, popup, extraWidth) { |
|
||||||
var el = combo.element; |
|
||||||
return { |
|
||||||
left: el.offset().left + el.outerWidth() + (extraWidth || 0) |
|
||||||
}; |
|
||||||
}, |
|
||||||
|
|
||||||
getTopPosition: function (combo, popup, extraHeight) { |
|
||||||
return { |
|
||||||
top: combo.element.offset().top - popup.element.outerHeight() - (extraHeight || 0) |
|
||||||
}; |
|
||||||
}, |
|
||||||
|
|
||||||
getBottomPosition: function (combo, popup, extraHeight) { |
|
||||||
var el = combo.element; |
|
||||||
return { |
|
||||||
top: el.offset().top + el.outerHeight() + (extraHeight || 0) |
|
||||||
}; |
|
||||||
}, |
|
||||||
|
|
||||||
isLeftSpaceEnough: function (combo, popup, extraWidth) { |
|
||||||
return $.getLeftPosition(combo, popup, extraWidth).left >= 0; |
|
||||||
}, |
|
||||||
|
|
||||||
isRightSpaceEnough: function (combo, popup, extraWidth) { |
|
||||||
var viewBounds = popup.element.bounds(), windowBounds = $("body").bounds(); |
|
||||||
return $.getRightPosition(combo, popup, extraWidth).left + viewBounds.width <= windowBounds.width; |
|
||||||
}, |
|
||||||
|
|
||||||
isTopSpaceEnough: function (combo, popup, extraHeight) { |
|
||||||
return $.getTopPosition(combo, popup, extraHeight).top >= 0; |
|
||||||
}, |
|
||||||
|
|
||||||
isBottomSpaceEnough: function (combo, popup, extraHeight) { |
|
||||||
var viewBounds = popup.element.bounds(), windowBounds = $("body").bounds(); |
|
||||||
return $.getBottomPosition(combo, popup, extraHeight).top + viewBounds.height <= windowBounds.height; |
|
||||||
}, |
|
||||||
|
|
||||||
isRightSpaceLarger: function (combo) { |
|
||||||
var windowBounds = $("body").bounds(); |
|
||||||
return windowBounds.width - combo.element.offset().left - combo.element.bounds().width >= combo.element.offset().left; |
|
||||||
}, |
|
||||||
|
|
||||||
isBottomSpaceLarger: function (combo) { |
|
||||||
var windowBounds = $("body").bounds(); |
|
||||||
return windowBounds.height - combo.element.offset().top - combo.element.bounds().height >= combo.element.offset().top; |
|
||||||
}, |
|
||||||
|
|
||||||
getLeftAlignPosition: function (combo, popup, extraWidth) { |
|
||||||
var viewBounds = popup.element.bounds(), windowBounds = $("body").bounds(); |
|
||||||
var left = combo.element.offset().left + extraWidth; |
|
||||||
if (left + viewBounds.width > windowBounds.width) { |
|
||||||
left = windowBounds.width - viewBounds.width; |
|
||||||
} |
|
||||||
if (left < 0) { |
|
||||||
left = 0; |
|
||||||
} |
|
||||||
return { |
|
||||||
left: left |
|
||||||
}; |
|
||||||
}, |
|
||||||
|
|
||||||
getLeftAdaptPosition: function (combo, popup, extraWidth) { |
|
||||||
if ($.isLeftSpaceEnough(combo, popup, extraWidth)) { |
|
||||||
return $.getLeftPosition(combo, popup, extraWidth); |
|
||||||
} |
|
||||||
return { |
|
||||||
left: 0 |
|
||||||
}; |
|
||||||
}, |
|
||||||
|
|
||||||
getRightAlignPosition: function (combo, popup, extraWidth) { |
|
||||||
var comboBounds = combo.element.bounds(), viewBounds = popup.element.bounds(); |
|
||||||
var left = combo.element.offset().left + comboBounds.width - viewBounds.width - extraWidth; |
|
||||||
if (left < 0) { |
|
||||||
left = 0; |
|
||||||
} |
|
||||||
return { |
|
||||||
left: left |
|
||||||
}; |
|
||||||
}, |
|
||||||
|
|
||||||
getRightAdaptPosition: function (combo, popup, extraWidth) { |
|
||||||
if ($.isRightSpaceEnough(combo, popup, extraWidth)) { |
|
||||||
return $.getRightPosition(combo, popup, extraWidth); |
|
||||||
} |
|
||||||
return { |
|
||||||
left: $("body").bounds().width - popup.element.bounds().width |
|
||||||
}; |
|
||||||
}, |
|
||||||
|
|
||||||
getTopAlignPosition: function (combo, popup, extraHeight, needAdaptHeight) { |
|
||||||
var comboOffset = combo.element.offset(); |
|
||||||
var comboBounds = combo.element.bounds(), popupBounds = popup.element.bounds(), |
|
||||||
windowBounds = $("body").bounds(); |
|
||||||
var top, adaptHeight; |
|
||||||
if ($.isBottomSpaceEnough(combo, popup, -1 * comboBounds.height + extraHeight)) { |
|
||||||
top = comboOffset.top + extraHeight; |
|
||||||
} else if (needAdaptHeight) { |
|
||||||
top = comboOffset.top + extraHeight; |
|
||||||
adaptHeight = windowBounds.height - top; |
|
||||||
} else { |
|
||||||
top = windowBounds.height - popupBounds.height; |
|
||||||
if (top < extraHeight) { |
|
||||||
adaptHeight = windowBounds.height - extraHeight; |
|
||||||
} |
|
||||||
} |
|
||||||
if (top < extraHeight) { |
|
||||||
top = extraHeight; |
|
||||||
} |
|
||||||
return adaptHeight ? { |
|
||||||
top: top, |
|
||||||
adaptHeight: adaptHeight |
|
||||||
} : { |
|
||||||
top: top |
|
||||||
}; |
|
||||||
}, |
|
||||||
|
|
||||||
getTopAdaptPosition: function (combo, popup, extraHeight, needAdaptHeight) { |
|
||||||
var popupBounds = popup.element.bounds(), windowBounds = $("body").bounds(); |
|
||||||
if ($.isTopSpaceEnough(combo, popup, extraHeight)) { |
|
||||||
return $.getTopPosition(combo, popup, extraHeight); |
|
||||||
} |
|
||||||
if (needAdaptHeight) { |
|
||||||
return { |
|
||||||
top: 0, |
|
||||||
adaptHeight: combo.element.offset().top - extraHeight |
|
||||||
}; |
|
||||||
} |
|
||||||
if (popupBounds.height + extraHeight > windowBounds.height) { |
|
||||||
return { |
|
||||||
top: 0, |
|
||||||
adaptHeight: windowBounds.height - extraHeight |
|
||||||
}; |
|
||||||
} |
|
||||||
return { |
|
||||||
top: 0 |
|
||||||
}; |
|
||||||
}, |
|
||||||
|
|
||||||
getBottomAlignPosition: function (combo, popup, extraHeight, needAdaptHeight) { |
|
||||||
var comboOffset = combo.element.offset(); |
|
||||||
var comboBounds = combo.element.bounds(), popupBounds = popup.element.bounds(), |
|
||||||
windowBounds = $("body").bounds(); |
|
||||||
var top, adaptHeight; |
|
||||||
if ($.isTopSpaceEnough(combo, popup, -1 * comboBounds.height + extraHeight)) { |
|
||||||
top = comboOffset.top + comboBounds.height - popupBounds.height - extraHeight; |
|
||||||
} else if (needAdaptHeight) { |
|
||||||
top = 0; |
|
||||||
adaptHeight = comboOffset.top + comboBounds.height - extraHeight; |
|
||||||
} else { |
|
||||||
top = 0; |
|
||||||
if (popupBounds.height + extraHeight > windowBounds.height) { |
|
||||||
adaptHeight = windowBounds.height - extraHeight; |
|
||||||
} |
|
||||||
} |
|
||||||
if (top < 0) { |
|
||||||
top = 0; |
|
||||||
} |
|
||||||
return adaptHeight ? { |
|
||||||
top: top, |
|
||||||
adaptHeight: adaptHeight |
|
||||||
} : { |
|
||||||
top: top |
|
||||||
}; |
|
||||||
}, |
|
||||||
|
|
||||||
getBottomAdaptPosition: function (combo, popup, extraHeight, needAdaptHeight) { |
|
||||||
var comboOffset = combo.element.offset(); |
|
||||||
var comboBounds = combo.element.bounds(), popupBounds = popup.element.bounds(), |
|
||||||
windowBounds = $("body").bounds(); |
|
||||||
if ($.isBottomSpaceEnough(combo, popup, extraHeight)) { |
|
||||||
return $.getBottomPosition(combo, popup, extraHeight); |
|
||||||
} |
|
||||||
if (needAdaptHeight) { |
|
||||||
return { |
|
||||||
top: comboOffset.top + comboBounds.height + extraHeight, |
|
||||||
adaptHeight: windowBounds.height - comboOffset.top - comboBounds.height - extraHeight |
|
||||||
}; |
|
||||||
} |
|
||||||
if (popupBounds.height + extraHeight > windowBounds.height) { |
|
||||||
return { |
|
||||||
top: extraHeight, |
|
||||||
adaptHeight: windowBounds.height - extraHeight |
|
||||||
}; |
|
||||||
} |
|
||||||
return { |
|
||||||
top: windowBounds.height - popupBounds.height - extraHeight |
|
||||||
}; |
|
||||||
}, |
|
||||||
|
|
||||||
getCenterAdaptPosition: function (combo, popup) { |
|
||||||
var comboOffset = combo.element.offset(); |
|
||||||
var comboBounds = combo.element.bounds(), popupBounds = popup.element.bounds(), |
|
||||||
windowBounds = $("body").bounds(); |
|
||||||
var left; |
|
||||||
if (comboOffset.left + comboBounds.width / 2 + popupBounds.width / 2 > windowBounds.width) { |
|
||||||
left = windowBounds.width - popupBounds.width; |
|
||||||
} else { |
|
||||||
left = comboOffset.left + comboBounds.width / 2 - popupBounds.width / 2; |
|
||||||
} |
|
||||||
if (left < 0) { |
|
||||||
left = 0; |
|
||||||
} |
|
||||||
return { |
|
||||||
left: left |
|
||||||
}; |
|
||||||
}, |
|
||||||
|
|
||||||
getMiddleAdaptPosition: function (combo, popup) { |
|
||||||
var comboOffset = combo.element.offset(); |
|
||||||
var comboBounds = combo.element.bounds(), popupBounds = popup.element.bounds(), |
|
||||||
windowBounds = $("body").bounds(); |
|
||||||
var top; |
|
||||||
if (comboOffset.top + comboBounds.height / 2 + popupBounds.height / 2 > windowBounds.height) { |
|
||||||
top = windowBounds.height - popupBounds.height; |
|
||||||
} else { |
|
||||||
top = comboOffset.top + comboBounds.height / 2 - popupBounds.height / 2; |
|
||||||
} |
|
||||||
if (top < 0) { |
|
||||||
top = 0; |
|
||||||
} |
|
||||||
return { |
|
||||||
top: top |
|
||||||
}; |
|
||||||
}, |
|
||||||
|
|
||||||
getComboPositionByDirections: function (combo, popup, extraWidth, extraHeight, needAdaptHeight, directions) { |
|
||||||
extraWidth || (extraWidth = 0); |
|
||||||
extraHeight || (extraHeight = 0); |
|
||||||
var i, direct; |
|
||||||
var leftRight = [], topBottom = []; |
|
||||||
var isNeedAdaptHeight = false, tbFirst = false, lrFirst = false; |
|
||||||
var left, top, pos; |
|
||||||
for (i = 0; i < directions.length; i++) { |
|
||||||
direct = directions[i]; |
|
||||||
switch (direct) { |
|
||||||
case "left": |
|
||||||
leftRight.push(direct); |
|
||||||
break; |
|
||||||
case "right": |
|
||||||
leftRight.push(direct); |
|
||||||
break; |
|
||||||
case "top": |
|
||||||
topBottom.push(direct); |
|
||||||
break; |
|
||||||
case "bottom": |
|
||||||
topBottom.push(direct); |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
for (i = 0; i < directions.length; i++) { |
|
||||||
direct = directions[i]; |
|
||||||
switch (direct) { |
|
||||||
case "left": |
|
||||||
if (!isNeedAdaptHeight) { |
|
||||||
var tW = tbFirst ? extraHeight : extraWidth, tH = tbFirst ? 0 : extraHeight; |
|
||||||
if ($.isLeftSpaceEnough(combo, popup, tW)) { |
|
||||||
left = $.getLeftPosition(combo, popup, tW).left; |
|
||||||
if (topBottom[0] === "bottom") { |
|
||||||
pos = $.getTopAlignPosition(combo, popup, tH, needAdaptHeight); |
|
||||||
pos.dir = "left,bottom"; |
|
||||||
} else { |
|
||||||
pos = $.getBottomAlignPosition(combo, popup, tH, needAdaptHeight); |
|
||||||
pos.dir = "left,top"; |
|
||||||
} |
|
||||||
if (tbFirst) { |
|
||||||
pos.change = "left"; |
|
||||||
} |
|
||||||
pos.left = left; |
|
||||||
return pos; |
|
||||||
} |
|
||||||
} |
|
||||||
lrFirst = true; |
|
||||||
break; |
|
||||||
case "right": |
|
||||||
if (!isNeedAdaptHeight) { |
|
||||||
var tW = tbFirst ? extraHeight : extraWidth, tH = tbFirst ? extraWidth : extraHeight; |
|
||||||
if ($.isRightSpaceEnough(combo, popup, tW)) { |
|
||||||
left = $.getRightPosition(combo, popup, tW).left; |
|
||||||
if (topBottom[0] === "bottom") { |
|
||||||
pos = $.getTopAlignPosition(combo, popup, tH, needAdaptHeight); |
|
||||||
pos.dir = "right,bottom"; |
|
||||||
} else { |
|
||||||
pos = $.getBottomAlignPosition(combo, popup, tH, needAdaptHeight); |
|
||||||
pos.dir = "right,top"; |
|
||||||
} |
|
||||||
if (tbFirst) { |
|
||||||
pos.change = "right"; |
|
||||||
} |
|
||||||
pos.left = left; |
|
||||||
return pos; |
|
||||||
} |
|
||||||
} |
|
||||||
lrFirst = true; |
|
||||||
break; |
|
||||||
case "top": |
|
||||||
var tW = lrFirst ? extraHeight : extraWidth, tH = lrFirst ? extraWidth : extraHeight; |
|
||||||
if ($.isTopSpaceEnough(combo, popup, tH)) { |
|
||||||
top = $.getTopPosition(combo, popup, tH).top; |
|
||||||
if (leftRight[0] === "right") { |
|
||||||
pos = $.getLeftAlignPosition(combo, popup, tW, needAdaptHeight); |
|
||||||
pos.dir = "top,right"; |
|
||||||
} else { |
|
||||||
pos = $.getRightAlignPosition(combo, popup, tW); |
|
||||||
pos.dir = "top,left"; |
|
||||||
} |
|
||||||
if (lrFirst) { |
|
||||||
pos.change = "top"; |
|
||||||
} |
|
||||||
pos.top = top; |
|
||||||
return pos; |
|
||||||
} |
|
||||||
if (needAdaptHeight) { |
|
||||||
isNeedAdaptHeight = true; |
|
||||||
} |
|
||||||
tbFirst = true; |
|
||||||
break; |
|
||||||
case "bottom": |
|
||||||
var tW = lrFirst ? extraHeight : extraWidth, tH = lrFirst ? extraWidth : extraHeight; |
|
||||||
if ($.isBottomSpaceEnough(combo, popup, tH)) { |
|
||||||
top = $.getBottomPosition(combo, popup, tH).top; |
|
||||||
if (leftRight[0] === "right") { |
|
||||||
pos = $.getLeftAlignPosition(combo, popup, tW, needAdaptHeight); |
|
||||||
pos.dir = "bottom,right"; |
|
||||||
} else { |
|
||||||
pos = $.getRightAlignPosition(combo, popup, tW); |
|
||||||
pos.dir = "bottom,left"; |
|
||||||
} |
|
||||||
if (lrFirst) { |
|
||||||
pos.change = "bottom"; |
|
||||||
} |
|
||||||
pos.top = top; |
|
||||||
return pos; |
|
||||||
} |
|
||||||
if (needAdaptHeight) { |
|
||||||
isNeedAdaptHeight = true; |
|
||||||
} |
|
||||||
tbFirst = true; |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
switch (directions[0]) { |
|
||||||
case "left": |
|
||||||
case "right": |
|
||||||
if ($.isRightSpaceLarger(combo)) { |
|
||||||
left = $.getRightAdaptPosition(combo, popup, extraWidth).left; |
|
||||||
} else { |
|
||||||
left = $.getLeftAdaptPosition(combo, popup, extraWidth).left; |
|
||||||
} |
|
||||||
if (topBottom[0] === "bottom") { |
|
||||||
pos = $.getTopAlignPosition(combo, popup, extraHeight, needAdaptHeight); |
|
||||||
pos.left = left; |
|
||||||
pos.dir = directions[0] + ",bottom"; |
|
||||||
return pos; |
|
||||||
} |
|
||||||
pos = $.getBottomAlignPosition(combo, popup, extraHeight, needAdaptHeight); |
|
||||||
pos.left = left; |
|
||||||
pos.dir = directions[0] + ",top"; |
|
||||||
return pos; |
|
||||||
default : |
|
||||||
if ($.isBottomSpaceLarger(combo)) { |
|
||||||
pos = $.getBottomAdaptPosition(combo, popup, extraHeight, needAdaptHeight); |
|
||||||
} else { |
|
||||||
pos = $.getTopAdaptPosition(combo, popup, extraHeight, needAdaptHeight); |
|
||||||
} |
|
||||||
if (leftRight[0] === "right") { |
|
||||||
left = $.getLeftAlignPosition(combo, popup, extraWidth, needAdaptHeight).left; |
|
||||||
pos.left = left; |
|
||||||
pos.dir = directions[0] + ",right"; |
|
||||||
return pos; |
|
||||||
} |
|
||||||
left = $.getRightAlignPosition(combo, popup, extraWidth).left; |
|
||||||
pos.left = left; |
|
||||||
pos.dir = directions[0] + ",left"; |
|
||||||
return pos; |
|
||||||
} |
|
||||||
}, |
|
||||||
|
|
||||||
|
|
||||||
getComboPosition: function (combo, popup, extraWidth, extraHeight, needAdaptHeight, directions, offsetStyle) { |
|
||||||
extraWidth || (extraWidth = 0); |
|
||||||
extraHeight || (extraHeight = 0); |
|
||||||
var bodyHeight = $("body").bounds().height - extraHeight; |
|
||||||
var maxHeight = Math.min(popup.attr("maxHeight") || bodyHeight, bodyHeight); |
|
||||||
popup.resetHeight && popup.resetHeight(maxHeight); |
|
||||||
var position = $.getComboPositionByDirections(combo, popup, extraWidth, extraHeight, needAdaptHeight, directions || ["bottom", "top", "right", "left"]); |
|
||||||
switch (offsetStyle) { |
|
||||||
case "center": |
|
||||||
if (position.change) { |
|
||||||
var p = $.getMiddleAdaptPosition(combo, popup); |
|
||||||
position.top = p.top; |
|
||||||
} else { |
|
||||||
var p = $.getCenterAdaptPosition(combo, popup); |
|
||||||
position.left = p.left; |
|
||||||
} |
|
||||||
break; |
|
||||||
case "middle": |
|
||||||
if (position.change) { |
|
||||||
var p = $.getCenterAdaptPosition(combo, popup); |
|
||||||
position.left = p.left; |
|
||||||
} else { |
|
||||||
var p = $.getMiddleAdaptPosition(combo, popup); |
|
||||||
position.top = p.top; |
|
||||||
} |
|
||||||
break; |
|
||||||
} |
|
||||||
if (needAdaptHeight === true) { |
|
||||||
popup.resetHeight && popup.resetHeight(Math.min(bodyHeight - position.top, maxHeight)); |
|
||||||
} |
|
||||||
return position; |
|
||||||
} |
|
||||||
}); |
|
@ -0,0 +1,22 @@ |
|||||||
|
// BI请求
|
||||||
|
_.extend(BI, { |
||||||
|
|
||||||
|
ajax: function (option) { |
||||||
|
option || (option = {}); |
||||||
|
var async = option.async; |
||||||
|
option.data = BI.cjkEncodeDO(option.data || {}); |
||||||
|
|
||||||
|
$.ajax({ |
||||||
|
url: option.url, |
||||||
|
type: "POST", |
||||||
|
data: option.data, |
||||||
|
async: async, |
||||||
|
error: option.error, |
||||||
|
complete: function (res, status) { |
||||||
|
if (BI.isFunction(option.complete)) { |
||||||
|
option.complete(BI.jsonDecode(res.responseText), status); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
}); |
@ -0,0 +1,254 @@ |
|||||||
|
/** |
||||||
|
* 对DOM操作的通用函数 |
||||||
|
* @type {{}} |
||||||
|
*/ |
||||||
|
BI.DOM = {}; |
||||||
|
BI.extend(BI.DOM, { |
||||||
|
|
||||||
|
/** |
||||||
|
* 把dom数组或元素悬挂起来,使其不对html产生影响 |
||||||
|
* @param dom |
||||||
|
*/ |
||||||
|
hang: function (doms) { |
||||||
|
if (BI.isEmpty(doms)) { |
||||||
|
return; |
||||||
|
} |
||||||
|
var frag = document.createDocumentFragment(); |
||||||
|
BI.each(doms, function (i, dom) { |
||||||
|
dom instanceof BI.Widget && (dom = dom.element); |
||||||
|
dom instanceof $ && dom[0] && frag.appendChild(dom[0]); |
||||||
|
}); |
||||||
|
return frag; |
||||||
|
}, |
||||||
|
|
||||||
|
isExist: function (obj) { |
||||||
|
return BI.Widget._renderEngine.createElement("body").find(obj.element).length > 0; |
||||||
|
}, |
||||||
|
|
||||||
|
// 预加载图片
|
||||||
|
preloadImages: function (srcArray, onload) { |
||||||
|
var count = 0, images = []; |
||||||
|
|
||||||
|
function complete () { |
||||||
|
count++; |
||||||
|
if (count >= srcArray.length) { |
||||||
|
onload(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
BI.each(srcArray, function (i, src) { |
||||||
|
images[i] = new Image(); |
||||||
|
images[i].src = src; |
||||||
|
images[i].onload = function () { |
||||||
|
complete(); |
||||||
|
}; |
||||||
|
images[i].onerror = function () { |
||||||
|
complete(); |
||||||
|
}; |
||||||
|
}); |
||||||
|
}, |
||||||
|
|
||||||
|
isColor: function (color) { |
||||||
|
return color && (this.isRGBColor(color) || this.isHexColor(color)); |
||||||
|
}, |
||||||
|
|
||||||
|
isRGBColor: function (color) { |
||||||
|
if (!color) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
return color.substr(0, 3) === "rgb"; |
||||||
|
}, |
||||||
|
|
||||||
|
isHexColor: function (color) { |
||||||
|
if (!color) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
return color[0] === "#" && color.length === 7; |
||||||
|
}, |
||||||
|
|
||||||
|
isDarkColor: function (hex) { |
||||||
|
if (!hex || !this.isHexColor(hex)) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
var rgb = this.rgb2json(this.hex2rgb(hex)); |
||||||
|
var grayLevel = Math.round(rgb.r * 0.299 + rgb.g * 0.587 + rgb.b * 0.114); |
||||||
|
if (grayLevel < 192/** 网上给的是140**/) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
}, |
||||||
|
|
||||||
|
// 获取对比颜色
|
||||||
|
getContrastColor: function (color) { |
||||||
|
if (!color || !this.isColor(color)) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
if (this.isDarkColor(color)) { |
||||||
|
return "#ffffff"; |
||||||
|
} |
||||||
|
return "#1a1a1a"; |
||||||
|
}, |
||||||
|
|
||||||
|
rgb2hex: function (rgbColour) { |
||||||
|
if (!rgbColour || rgbColour.substr(0, 3) != "rgb") { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
var rgbValues = rgbColour.match(/\d+(\.\d+)?/g); |
||||||
|
var red = BI.parseInt(rgbValues[0]); |
||||||
|
var green = BI.parseInt(rgbValues[1]); |
||||||
|
var blue = BI.parseInt(rgbValues[2]); |
||||||
|
|
||||||
|
var hexColour = "#" + this.int2hex(red) + this.int2hex(green) + this.int2hex(blue); |
||||||
|
|
||||||
|
return hexColour; |
||||||
|
}, |
||||||
|
|
||||||
|
rgb2json: function (rgbColour) { |
||||||
|
if (!rgbColour) { |
||||||
|
return {}; |
||||||
|
} |
||||||
|
if (!this.isRGBColor(rgbColour)) { |
||||||
|
return {}; |
||||||
|
} |
||||||
|
var rgbValues = rgbColour.match(/\d+(\.\d+)?/g); |
||||||
|
return { |
||||||
|
r: BI.parseInt(rgbValues[0]), |
||||||
|
g: BI.parseInt(rgbValues[1]), |
||||||
|
b: BI.parseInt(rgbValues[2]) |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
rgba2json: function (rgbColour) { |
||||||
|
if (!rgbColour) { |
||||||
|
return {}; |
||||||
|
} |
||||||
|
var rgbValues = rgbColour.match(/\d+(\.\d+)?/g); |
||||||
|
return { |
||||||
|
r: BI.parseInt(rgbValues[0]), |
||||||
|
g: BI.parseInt(rgbValues[1]), |
||||||
|
b: BI.parseInt(rgbValues[2]), |
||||||
|
a: BI.parseFloat(rgbValues[3]) |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
json2rgb: function (rgb) { |
||||||
|
if (!BI.isKey(rgb.r) || !BI.isKey(rgb.g) || !BI.isKey(rgb.b)) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
return "rgb(" + rgb.r + "," + rgb.g + "," + rgb.b + ")"; |
||||||
|
}, |
||||||
|
|
||||||
|
json2rgba: function (rgba) { |
||||||
|
if (!BI.isKey(rgba.r) || !BI.isKey(rgba.g) || !BI.isKey(rgba.b)) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
return "rgba(" + rgba.r + "," + rgba.g + "," + rgba.b + "," + rgba.a + ")"; |
||||||
|
}, |
||||||
|
|
||||||
|
int2hex: function (strNum) { |
||||||
|
var hexdig = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"]; |
||||||
|
|
||||||
|
return hexdig[strNum >>> 4] + "" + hexdig[strNum & 15]; |
||||||
|
}, |
||||||
|
|
||||||
|
hex2rgb: function (color) { |
||||||
|
if (!color) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
if (!this.isHexColor(color)) { |
||||||
|
return color; |
||||||
|
} |
||||||
|
var tempValue = "rgb(", colorArray; |
||||||
|
|
||||||
|
if (color.length === 7) { |
||||||
|
colorArray = [BI.parseInt("0x" + color.substring(1, 3)), |
||||||
|
BI.parseInt("0x" + color.substring(3, 5)), |
||||||
|
BI.parseInt("0x" + color.substring(5, 7))]; |
||||||
|
} else if (color.length === 4) { |
||||||
|
colorArray = [BI.parseInt("0x" + color.substring(1, 2)), |
||||||
|
BI.parseInt("0x" + color.substring(2, 3)), |
||||||
|
BI.parseInt("0x" + color.substring(3, 4))]; |
||||||
|
} |
||||||
|
tempValue += colorArray[0] + ","; |
||||||
|
tempValue += colorArray[1] + ","; |
||||||
|
tempValue += colorArray[2] + ")"; |
||||||
|
|
||||||
|
return tempValue; |
||||||
|
}, |
||||||
|
|
||||||
|
rgba2rgb: function (rgbColour, BGcolor) { |
||||||
|
if (BI.isNull(BGcolor)) { |
||||||
|
BGcolor = 1; |
||||||
|
} |
||||||
|
if (rgbColour.substr(0, 4) != "rgba") { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
var rgbValues = rgbColour.match(/\d+(\.\d+)?/g); |
||||||
|
if (rgbValues.length < 4) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
var R = BI.parseFloat(rgbValues[0]); |
||||||
|
var G = BI.parseFloat(rgbValues[1]); |
||||||
|
var B = BI.parseFloat(rgbValues[2]); |
||||||
|
var A = BI.parseFloat(rgbValues[3]); |
||||||
|
|
||||||
|
return "rgb(" + Math.floor(255 * (BGcolor * (1 - A )) + R * A) + "," + |
||||||
|
Math.floor(255 * (BGcolor * (1 - A )) + G * A) + "," + |
||||||
|
Math.floor(255 * (BGcolor * (1 - A )) + B * A) + ")"; |
||||||
|
}, |
||||||
|
|
||||||
|
getTextSizeWidth: function (text, fontSize) { |
||||||
|
var span = BI.Widget._renderEngine.createElement("<span></span>").addClass("text-width-span").appendTo("body"); |
||||||
|
|
||||||
|
if (fontSize == null) { |
||||||
|
fontSize = 12; |
||||||
|
} |
||||||
|
fontSize = fontSize + "px"; |
||||||
|
|
||||||
|
span.css("font-size", fontSize).text(text); |
||||||
|
|
||||||
|
var width = span.width(); |
||||||
|
span.remove(); |
||||||
|
|
||||||
|
return width; |
||||||
|
}, |
||||||
|
|
||||||
|
// 获取滚动条的宽度
|
||||||
|
getScrollWidth: function () { |
||||||
|
if (this._scrollWidth == null) { |
||||||
|
var ul = BI.Widget._renderEngine.createElement("<div>").width(50).height(50).css({ |
||||||
|
position: "absolute", |
||||||
|
top: "-9999px", |
||||||
|
overflow: "scroll" |
||||||
|
}).appendTo("body"); |
||||||
|
this._scrollWidth = ul[0].offsetWidth - ul[0].clientWidth; |
||||||
|
ul.destroy(); |
||||||
|
} |
||||||
|
return this._scrollWidth; |
||||||
|
}, |
||||||
|
|
||||||
|
getImage: function (param, fillStyle, backgroundColor) { |
||||||
|
var canvas = document.createElement("canvas"); |
||||||
|
var ratio = 2; |
||||||
|
BI.Widget._renderEngine.createElement("body").append(canvas); |
||||||
|
var w = BI.DOM.getTextSizeWidth(param, 14) + 6; |
||||||
|
canvas.width = w * ratio; |
||||||
|
canvas.height = 24 * ratio; |
||||||
|
var ctx = canvas.getContext("2d"); |
||||||
|
// ctx.fillStyle = "#EAF2FD";
|
||||||
|
ctx.font = 12 * ratio + "px Georgia"; |
||||||
|
ctx.fillStyle = fillStyle || "#3D4D66"; |
||||||
|
ctx.textBaseline = "middle"; |
||||||
|
ctx.fillText(param, 6 * ratio, 12 * ratio); |
||||||
|
BI.Widget._renderEngine.createElement(canvas).destroy(); |
||||||
|
var backColor = backgroundColor || "#EAF2FD"; |
||||||
|
// IE可以放大缩小所以要固定最大最小宽高
|
||||||
|
return { |
||||||
|
width: w, |
||||||
|
height: 24, |
||||||
|
src: canvas.toDataURL("image/png"), |
||||||
|
style: "background-color: " + backColor + ";vertical-align: middle; margin: 0 3px; width:" + w + "px;height: 24px; max-width:" + w + "px;max-height: 24px; min-width:" + w + "px;min-height: 24px", |
||||||
|
param: param |
||||||
|
}; |
||||||
|
} |
||||||
|
}); |
@ -0,0 +1,125 @@ |
|||||||
|
// 浏览器相关方法
|
||||||
|
_.extend(BI, { |
||||||
|
isIE: function () { |
||||||
|
if(!_global.navigator) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
if (this.__isIE == null) { |
||||||
|
this.__isIE = /(msie|trident)/i.test(navigator.userAgent.toLowerCase()); |
||||||
|
} |
||||||
|
return this.__isIE; |
||||||
|
}, |
||||||
|
|
||||||
|
getIEVersion: function () { |
||||||
|
if(!_global.navigator) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
if (this.__IEVersion != null) { |
||||||
|
return this.__IEVersion; |
||||||
|
} |
||||||
|
var version = 0; |
||||||
|
var agent = navigator.userAgent.toLowerCase(); |
||||||
|
var v1 = agent.match(/(?:msie\s([\w.]+))/); |
||||||
|
var v2 = agent.match(/(?:trident.*rv:([\w.]+))/); |
||||||
|
if (v1 && v2 && v1[1] && v2[1]) { |
||||||
|
version = Math.max(v1[1] * 1, v2[1] * 1); |
||||||
|
} else if (v1 && v1[1]) { |
||||||
|
version = v1[1] * 1; |
||||||
|
} else if (v2 && v2[1]) { |
||||||
|
version = v2[1] * 1; |
||||||
|
} else { |
||||||
|
version = 0; |
||||||
|
} |
||||||
|
return this.__IEVersion = version; |
||||||
|
}, |
||||||
|
|
||||||
|
isIE9Below: function () { |
||||||
|
if (!BI.isIE()) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
return this.getIEVersion() < 9; |
||||||
|
}, |
||||||
|
|
||||||
|
isEdge: function () { |
||||||
|
if(!_global.navigator) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
return /edge/i.test(navigator.userAgent.toLowerCase()); |
||||||
|
}, |
||||||
|
|
||||||
|
isChrome: function () { |
||||||
|
if(!_global.navigator) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
return /chrome/i.test(navigator.userAgent.toLowerCase()); |
||||||
|
}, |
||||||
|
|
||||||
|
isFireFox: function () { |
||||||
|
if(!_global.navigator) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
return /firefox/i.test(navigator.userAgent.toLowerCase()); |
||||||
|
}, |
||||||
|
|
||||||
|
isOpera: function () { |
||||||
|
if(!_global.navigator) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
return /opera/i.test(navigator.userAgent.toLowerCase()); |
||||||
|
}, |
||||||
|
|
||||||
|
isSafari: function () { |
||||||
|
if(!_global.navigator) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
return /safari/i.test(navigator.userAgent.toLowerCase()); |
||||||
|
}, |
||||||
|
|
||||||
|
isKhtml: function () { |
||||||
|
if(!_global.navigator) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
return /Konqueror|Safari|KHTML/i.test(navigator.userAgent); |
||||||
|
}, |
||||||
|
|
||||||
|
isMac: function () { |
||||||
|
if(!_global.navigator) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
return /macintosh|mac os x/i.test(navigator.userAgent); |
||||||
|
}, |
||||||
|
|
||||||
|
isWindows: function () { |
||||||
|
if(!_global.navigator) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
return /windows|win32/i.test(navigator.userAgent); |
||||||
|
}, |
||||||
|
|
||||||
|
isSupportCss3: function (style) { |
||||||
|
if(!_global.document) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
var prefix = ["webkit", "Moz", "ms", "o"], |
||||||
|
i, len, |
||||||
|
humpString = [], |
||||||
|
htmlStyle = document.documentElement.style, |
||||||
|
_toHumb = function (string) { |
||||||
|
return string.replace(/-(\w)/g, function ($0, $1) { |
||||||
|
return $1.toUpperCase(); |
||||||
|
}); |
||||||
|
}; |
||||||
|
|
||||||
|
for (i in prefix) { |
||||||
|
humpString.push(_toHumb(prefix[i] + "-" + style)); |
||||||
|
} |
||||||
|
humpString.push(_toHumb(style)); |
||||||
|
|
||||||
|
for (i = 0, len = humpString.length; i < len; i++) { |
||||||
|
if (humpString[i] in htmlStyle) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
}); |
@ -0,0 +1,424 @@ |
|||||||
|
if(jQuery) { |
||||||
|
BI.extend(jQuery, { |
||||||
|
|
||||||
|
getLeftPosition: function (combo, popup, extraWidth) { |
||||||
|
return { |
||||||
|
left: combo.element.offset().left - popup.element.outerWidth() - (extraWidth || 0) |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
getRightPosition: function (combo, popup, extraWidth) { |
||||||
|
var el = combo.element; |
||||||
|
return { |
||||||
|
left: el.offset().left + el.outerWidth() + (extraWidth || 0) |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
getTopPosition: function (combo, popup, extraHeight) { |
||||||
|
return { |
||||||
|
top: combo.element.offset().top - popup.element.outerHeight() - (extraHeight || 0) |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
getBottomPosition: function (combo, popup, extraHeight) { |
||||||
|
var el = combo.element; |
||||||
|
return { |
||||||
|
top: el.offset().top + el.outerHeight() + (extraHeight || 0) |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
isLeftSpaceEnough: function (combo, popup, extraWidth) { |
||||||
|
return $.getLeftPosition(combo, popup, extraWidth).left >= 0; |
||||||
|
}, |
||||||
|
|
||||||
|
isRightSpaceEnough: function (combo, popup, extraWidth) { |
||||||
|
var viewBounds = popup.element.bounds(), windowBounds = $("body").bounds(); |
||||||
|
return $.getRightPosition(combo, popup, extraWidth).left + viewBounds.width <= windowBounds.width; |
||||||
|
}, |
||||||
|
|
||||||
|
isTopSpaceEnough: function (combo, popup, extraHeight) { |
||||||
|
return $.getTopPosition(combo, popup, extraHeight).top >= 0; |
||||||
|
}, |
||||||
|
|
||||||
|
isBottomSpaceEnough: function (combo, popup, extraHeight) { |
||||||
|
var viewBounds = popup.element.bounds(), windowBounds = $("body").bounds(); |
||||||
|
return $.getBottomPosition(combo, popup, extraHeight).top + viewBounds.height <= windowBounds.height; |
||||||
|
}, |
||||||
|
|
||||||
|
isRightSpaceLarger: function (combo) { |
||||||
|
var windowBounds = $("body").bounds(); |
||||||
|
return windowBounds.width - combo.element.offset().left - combo.element.bounds().width >= combo.element.offset().left; |
||||||
|
}, |
||||||
|
|
||||||
|
isBottomSpaceLarger: function (combo) { |
||||||
|
var windowBounds = $("body").bounds(); |
||||||
|
return windowBounds.height - combo.element.offset().top - combo.element.bounds().height >= combo.element.offset().top; |
||||||
|
}, |
||||||
|
|
||||||
|
getLeftAlignPosition: function (combo, popup, extraWidth) { |
||||||
|
var viewBounds = popup.element.bounds(), windowBounds = $("body").bounds(); |
||||||
|
var left = combo.element.offset().left + extraWidth; |
||||||
|
if (left + viewBounds.width > windowBounds.width) { |
||||||
|
left = windowBounds.width - viewBounds.width; |
||||||
|
} |
||||||
|
if (left < 0) { |
||||||
|
left = 0; |
||||||
|
} |
||||||
|
return { |
||||||
|
left: left |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
getLeftAdaptPosition: function (combo, popup, extraWidth) { |
||||||
|
if ($.isLeftSpaceEnough(combo, popup, extraWidth)) { |
||||||
|
return $.getLeftPosition(combo, popup, extraWidth); |
||||||
|
} |
||||||
|
return { |
||||||
|
left: 0 |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
getRightAlignPosition: function (combo, popup, extraWidth) { |
||||||
|
var comboBounds = combo.element.bounds(), viewBounds = popup.element.bounds(); |
||||||
|
var left = combo.element.offset().left + comboBounds.width - viewBounds.width - extraWidth; |
||||||
|
if (left < 0) { |
||||||
|
left = 0; |
||||||
|
} |
||||||
|
return { |
||||||
|
left: left |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
getRightAdaptPosition: function (combo, popup, extraWidth) { |
||||||
|
if ($.isRightSpaceEnough(combo, popup, extraWidth)) { |
||||||
|
return $.getRightPosition(combo, popup, extraWidth); |
||||||
|
} |
||||||
|
return { |
||||||
|
left: $("body").bounds().width - popup.element.bounds().width |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
getTopAlignPosition: function (combo, popup, extraHeight, needAdaptHeight) { |
||||||
|
var comboOffset = combo.element.offset(); |
||||||
|
var comboBounds = combo.element.bounds(), popupBounds = popup.element.bounds(), |
||||||
|
windowBounds = $("body").bounds(); |
||||||
|
var top, adaptHeight; |
||||||
|
if ($.isBottomSpaceEnough(combo, popup, -1 * comboBounds.height + extraHeight)) { |
||||||
|
top = comboOffset.top + extraHeight; |
||||||
|
} else if (needAdaptHeight) { |
||||||
|
top = comboOffset.top + extraHeight; |
||||||
|
adaptHeight = windowBounds.height - top; |
||||||
|
} else { |
||||||
|
top = windowBounds.height - popupBounds.height; |
||||||
|
if (top < extraHeight) { |
||||||
|
adaptHeight = windowBounds.height - extraHeight; |
||||||
|
} |
||||||
|
} |
||||||
|
if (top < extraHeight) { |
||||||
|
top = extraHeight; |
||||||
|
} |
||||||
|
return adaptHeight ? { |
||||||
|
top: top, |
||||||
|
adaptHeight: adaptHeight |
||||||
|
} : { |
||||||
|
top: top |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
getTopAdaptPosition: function (combo, popup, extraHeight, needAdaptHeight) { |
||||||
|
var popupBounds = popup.element.bounds(), windowBounds = $("body").bounds(); |
||||||
|
if ($.isTopSpaceEnough(combo, popup, extraHeight)) { |
||||||
|
return $.getTopPosition(combo, popup, extraHeight); |
||||||
|
} |
||||||
|
if (needAdaptHeight) { |
||||||
|
return { |
||||||
|
top: 0, |
||||||
|
adaptHeight: combo.element.offset().top - extraHeight |
||||||
|
}; |
||||||
|
} |
||||||
|
if (popupBounds.height + extraHeight > windowBounds.height) { |
||||||
|
return { |
||||||
|
top: 0, |
||||||
|
adaptHeight: windowBounds.height - extraHeight |
||||||
|
}; |
||||||
|
} |
||||||
|
return { |
||||||
|
top: 0 |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
getBottomAlignPosition: function (combo, popup, extraHeight, needAdaptHeight) { |
||||||
|
var comboOffset = combo.element.offset(); |
||||||
|
var comboBounds = combo.element.bounds(), popupBounds = popup.element.bounds(), |
||||||
|
windowBounds = $("body").bounds(); |
||||||
|
var top, adaptHeight; |
||||||
|
if ($.isTopSpaceEnough(combo, popup, -1 * comboBounds.height + extraHeight)) { |
||||||
|
top = comboOffset.top + comboBounds.height - popupBounds.height - extraHeight; |
||||||
|
} else if (needAdaptHeight) { |
||||||
|
top = 0; |
||||||
|
adaptHeight = comboOffset.top + comboBounds.height - extraHeight; |
||||||
|
} else { |
||||||
|
top = 0; |
||||||
|
if (popupBounds.height + extraHeight > windowBounds.height) { |
||||||
|
adaptHeight = windowBounds.height - extraHeight; |
||||||
|
} |
||||||
|
} |
||||||
|
if (top < 0) { |
||||||
|
top = 0; |
||||||
|
} |
||||||
|
return adaptHeight ? { |
||||||
|
top: top, |
||||||
|
adaptHeight: adaptHeight |
||||||
|
} : { |
||||||
|
top: top |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
getBottomAdaptPosition: function (combo, popup, extraHeight, needAdaptHeight) { |
||||||
|
var comboOffset = combo.element.offset(); |
||||||
|
var comboBounds = combo.element.bounds(), popupBounds = popup.element.bounds(), |
||||||
|
windowBounds = $("body").bounds(); |
||||||
|
if ($.isBottomSpaceEnough(combo, popup, extraHeight)) { |
||||||
|
return $.getBottomPosition(combo, popup, extraHeight); |
||||||
|
} |
||||||
|
if (needAdaptHeight) { |
||||||
|
return { |
||||||
|
top: comboOffset.top + comboBounds.height + extraHeight, |
||||||
|
adaptHeight: windowBounds.height - comboOffset.top - comboBounds.height - extraHeight |
||||||
|
}; |
||||||
|
} |
||||||
|
if (popupBounds.height + extraHeight > windowBounds.height) { |
||||||
|
return { |
||||||
|
top: extraHeight, |
||||||
|
adaptHeight: windowBounds.height - extraHeight |
||||||
|
}; |
||||||
|
} |
||||||
|
return { |
||||||
|
top: windowBounds.height - popupBounds.height - extraHeight |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
getCenterAdaptPosition: function (combo, popup) { |
||||||
|
var comboOffset = combo.element.offset(); |
||||||
|
var comboBounds = combo.element.bounds(), popupBounds = popup.element.bounds(), |
||||||
|
windowBounds = $("body").bounds(); |
||||||
|
var left; |
||||||
|
if (comboOffset.left + comboBounds.width / 2 + popupBounds.width / 2 > windowBounds.width) { |
||||||
|
left = windowBounds.width - popupBounds.width; |
||||||
|
} else { |
||||||
|
left = comboOffset.left + comboBounds.width / 2 - popupBounds.width / 2; |
||||||
|
} |
||||||
|
if (left < 0) { |
||||||
|
left = 0; |
||||||
|
} |
||||||
|
return { |
||||||
|
left: left |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
getMiddleAdaptPosition: function (combo, popup) { |
||||||
|
var comboOffset = combo.element.offset(); |
||||||
|
var comboBounds = combo.element.bounds(), popupBounds = popup.element.bounds(), |
||||||
|
windowBounds = $("body").bounds(); |
||||||
|
var top; |
||||||
|
if (comboOffset.top + comboBounds.height / 2 + popupBounds.height / 2 > windowBounds.height) { |
||||||
|
top = windowBounds.height - popupBounds.height; |
||||||
|
} else { |
||||||
|
top = comboOffset.top + comboBounds.height / 2 - popupBounds.height / 2; |
||||||
|
} |
||||||
|
if (top < 0) { |
||||||
|
top = 0; |
||||||
|
} |
||||||
|
return { |
||||||
|
top: top |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
getComboPositionByDirections: function (combo, popup, extraWidth, extraHeight, needAdaptHeight, directions) { |
||||||
|
extraWidth || (extraWidth = 0); |
||||||
|
extraHeight || (extraHeight = 0); |
||||||
|
var i, direct; |
||||||
|
var leftRight = [], topBottom = []; |
||||||
|
var isNeedAdaptHeight = false, tbFirst = false, lrFirst = false; |
||||||
|
var left, top, pos; |
||||||
|
for (i = 0; i < directions.length; i++) { |
||||||
|
direct = directions[i]; |
||||||
|
switch (direct) { |
||||||
|
case "left": |
||||||
|
leftRight.push(direct); |
||||||
|
break; |
||||||
|
case "right": |
||||||
|
leftRight.push(direct); |
||||||
|
break; |
||||||
|
case "top": |
||||||
|
topBottom.push(direct); |
||||||
|
break; |
||||||
|
case "bottom": |
||||||
|
topBottom.push(direct); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
for (i = 0; i < directions.length; i++) { |
||||||
|
direct = directions[i]; |
||||||
|
switch (direct) { |
||||||
|
case "left": |
||||||
|
if (!isNeedAdaptHeight) { |
||||||
|
var tW = tbFirst ? extraHeight : extraWidth, tH = tbFirst ? 0 : extraHeight; |
||||||
|
if ($.isLeftSpaceEnough(combo, popup, tW)) { |
||||||
|
left = $.getLeftPosition(combo, popup, tW).left; |
||||||
|
if (topBottom[0] === "bottom") { |
||||||
|
pos = $.getTopAlignPosition(combo, popup, tH, needAdaptHeight); |
||||||
|
pos.dir = "left,bottom"; |
||||||
|
} else { |
||||||
|
pos = $.getBottomAlignPosition(combo, popup, tH, needAdaptHeight); |
||||||
|
pos.dir = "left,top"; |
||||||
|
} |
||||||
|
if (tbFirst) { |
||||||
|
pos.change = "left"; |
||||||
|
} |
||||||
|
pos.left = left; |
||||||
|
return pos; |
||||||
|
} |
||||||
|
} |
||||||
|
lrFirst = true; |
||||||
|
break; |
||||||
|
case "right": |
||||||
|
if (!isNeedAdaptHeight) { |
||||||
|
var tW = tbFirst ? extraHeight : extraWidth, tH = tbFirst ? extraWidth : extraHeight; |
||||||
|
if ($.isRightSpaceEnough(combo, popup, tW)) { |
||||||
|
left = $.getRightPosition(combo, popup, tW).left; |
||||||
|
if (topBottom[0] === "bottom") { |
||||||
|
pos = $.getTopAlignPosition(combo, popup, tH, needAdaptHeight); |
||||||
|
pos.dir = "right,bottom"; |
||||||
|
} else { |
||||||
|
pos = $.getBottomAlignPosition(combo, popup, tH, needAdaptHeight); |
||||||
|
pos.dir = "right,top"; |
||||||
|
} |
||||||
|
if (tbFirst) { |
||||||
|
pos.change = "right"; |
||||||
|
} |
||||||
|
pos.left = left; |
||||||
|
return pos; |
||||||
|
} |
||||||
|
} |
||||||
|
lrFirst = true; |
||||||
|
break; |
||||||
|
case "top": |
||||||
|
var tW = lrFirst ? extraHeight : extraWidth, tH = lrFirst ? extraWidth : extraHeight; |
||||||
|
if ($.isTopSpaceEnough(combo, popup, tH)) { |
||||||
|
top = $.getTopPosition(combo, popup, tH).top; |
||||||
|
if (leftRight[0] === "right") { |
||||||
|
pos = $.getLeftAlignPosition(combo, popup, tW, needAdaptHeight); |
||||||
|
pos.dir = "top,right"; |
||||||
|
} else { |
||||||
|
pos = $.getRightAlignPosition(combo, popup, tW); |
||||||
|
pos.dir = "top,left"; |
||||||
|
} |
||||||
|
if (lrFirst) { |
||||||
|
pos.change = "top"; |
||||||
|
} |
||||||
|
pos.top = top; |
||||||
|
return pos; |
||||||
|
} |
||||||
|
if (needAdaptHeight) { |
||||||
|
isNeedAdaptHeight = true; |
||||||
|
} |
||||||
|
tbFirst = true; |
||||||
|
break; |
||||||
|
case "bottom": |
||||||
|
var tW = lrFirst ? extraHeight : extraWidth, tH = lrFirst ? extraWidth : extraHeight; |
||||||
|
if ($.isBottomSpaceEnough(combo, popup, tH)) { |
||||||
|
top = $.getBottomPosition(combo, popup, tH).top; |
||||||
|
if (leftRight[0] === "right") { |
||||||
|
pos = $.getLeftAlignPosition(combo, popup, tW, needAdaptHeight); |
||||||
|
pos.dir = "bottom,right"; |
||||||
|
} else { |
||||||
|
pos = $.getRightAlignPosition(combo, popup, tW); |
||||||
|
pos.dir = "bottom,left"; |
||||||
|
} |
||||||
|
if (lrFirst) { |
||||||
|
pos.change = "bottom"; |
||||||
|
} |
||||||
|
pos.top = top; |
||||||
|
return pos; |
||||||
|
} |
||||||
|
if (needAdaptHeight) { |
||||||
|
isNeedAdaptHeight = true; |
||||||
|
} |
||||||
|
tbFirst = true; |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
switch (directions[0]) { |
||||||
|
case "left": |
||||||
|
case "right": |
||||||
|
if ($.isRightSpaceLarger(combo)) { |
||||||
|
left = $.getRightAdaptPosition(combo, popup, extraWidth).left; |
||||||
|
} else { |
||||||
|
left = $.getLeftAdaptPosition(combo, popup, extraWidth).left; |
||||||
|
} |
||||||
|
if (topBottom[0] === "bottom") { |
||||||
|
pos = $.getTopAlignPosition(combo, popup, extraHeight, needAdaptHeight); |
||||||
|
pos.left = left; |
||||||
|
pos.dir = directions[0] + ",bottom"; |
||||||
|
return pos; |
||||||
|
} |
||||||
|
pos = $.getBottomAlignPosition(combo, popup, extraHeight, needAdaptHeight); |
||||||
|
pos.left = left; |
||||||
|
pos.dir = directions[0] + ",top"; |
||||||
|
return pos; |
||||||
|
default : |
||||||
|
if ($.isBottomSpaceLarger(combo)) { |
||||||
|
pos = $.getBottomAdaptPosition(combo, popup, extraHeight, needAdaptHeight); |
||||||
|
} else { |
||||||
|
pos = $.getTopAdaptPosition(combo, popup, extraHeight, needAdaptHeight); |
||||||
|
} |
||||||
|
if (leftRight[0] === "right") { |
||||||
|
left = $.getLeftAlignPosition(combo, popup, extraWidth, needAdaptHeight).left; |
||||||
|
pos.left = left; |
||||||
|
pos.dir = directions[0] + ",right"; |
||||||
|
return pos; |
||||||
|
} |
||||||
|
left = $.getRightAlignPosition(combo, popup, extraWidth).left; |
||||||
|
pos.left = left; |
||||||
|
pos.dir = directions[0] + ",left"; |
||||||
|
return pos; |
||||||
|
} |
||||||
|
}, |
||||||
|
|
||||||
|
|
||||||
|
getComboPosition: function (combo, popup, extraWidth, extraHeight, needAdaptHeight, directions, offsetStyle) { |
||||||
|
extraWidth || (extraWidth = 0); |
||||||
|
extraHeight || (extraHeight = 0); |
||||||
|
var bodyHeight = $("body").bounds().height - extraHeight; |
||||||
|
var maxHeight = Math.min(popup.attr("maxHeight") || bodyHeight, bodyHeight); |
||||||
|
popup.resetHeight && popup.resetHeight(maxHeight); |
||||||
|
var position = $.getComboPositionByDirections(combo, popup, extraWidth, extraHeight, needAdaptHeight, directions || ["bottom", "top", "right", "left"]); |
||||||
|
switch (offsetStyle) { |
||||||
|
case "center": |
||||||
|
if (position.change) { |
||||||
|
var p = $.getMiddleAdaptPosition(combo, popup); |
||||||
|
position.top = p.top; |
||||||
|
} else { |
||||||
|
var p = $.getCenterAdaptPosition(combo, popup); |
||||||
|
position.left = p.left; |
||||||
|
} |
||||||
|
break; |
||||||
|
case "middle": |
||||||
|
if (position.change) { |
||||||
|
var p = $.getCenterAdaptPosition(combo, popup); |
||||||
|
position.left = p.left; |
||||||
|
} else { |
||||||
|
var p = $.getMiddleAdaptPosition(combo, popup); |
||||||
|
position.top = p.top; |
||||||
|
} |
||||||
|
break; |
||||||
|
} |
||||||
|
if (needAdaptHeight === true) { |
||||||
|
popup.resetHeight && popup.resetHeight(Math.min(bodyHeight - position.top, maxHeight)); |
||||||
|
} |
||||||
|
return position; |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
@ -0,0 +1,224 @@ |
|||||||
|
if (jQuery) { |
||||||
|
(function ($) { |
||||||
|
// richer:容器在其各个边缘留出的空间
|
||||||
|
if (!$.fn.insets) { |
||||||
|
$.fn.insets = function () { |
||||||
|
var p = this.padding(), |
||||||
|
b = this.border(); |
||||||
|
return { |
||||||
|
top: p.top, |
||||||
|
bottom: p.bottom + b.bottom + b.top, |
||||||
|
left: p.left, |
||||||
|
right: p.right + b.right + b.left |
||||||
|
}; |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
// richer:获取 && 设置jQuery元素的边界
|
||||||
|
if (!$.fn.bounds) { |
||||||
|
$.fn.bounds = function (value) { |
||||||
|
var tmp = {hasIgnoredBounds: true}; |
||||||
|
|
||||||
|
if (value) { |
||||||
|
if (!isNaN(value.x)) { |
||||||
|
tmp.left = value.x; |
||||||
|
} |
||||||
|
if (!isNaN(value.y)) { |
||||||
|
tmp.top = value.y; |
||||||
|
} |
||||||
|
if (value.width != null) { |
||||||
|
tmp.width = (value.width - (this.outerWidth(true) - this.width())); |
||||||
|
tmp.width = (tmp.width >= 0) ? tmp.width : value.width; |
||||||
|
// fix chrome
|
||||||
|
// tmp.width = (tmp.width >= 0) ? tmp.width : 0;
|
||||||
|
} |
||||||
|
if (value.height != null) { |
||||||
|
tmp.height = value.height - (this.outerHeight(true) - this.height()); |
||||||
|
tmp.height = (tmp.height >= 0) ? tmp.height : value.height; |
||||||
|
// fix chrome
|
||||||
|
// tmp.height = (tmp.height >= 0) ? tmp.height : value.0;
|
||||||
|
} |
||||||
|
this.css(tmp); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
// richer:注意此方法只对可见元素有效
|
||||||
|
tmp = this.position(); |
||||||
|
return { |
||||||
|
x: tmp.left, |
||||||
|
y: tmp.top, |
||||||
|
// richer:这里计算外部宽度和高度的时候,都不包括边框
|
||||||
|
width: this.outerWidth(), |
||||||
|
height: this.outerHeight() |
||||||
|
}; |
||||||
|
|
||||||
|
}; |
||||||
|
} |
||||||
|
})(jQuery); |
||||||
|
|
||||||
|
BI.extend(jQuery.fn, { |
||||||
|
|
||||||
|
destroy: function () { |
||||||
|
this.remove(); |
||||||
|
if (BI.isIE() === true) { |
||||||
|
this[0].outerHTML = ""; |
||||||
|
} |
||||||
|
}, |
||||||
|
/** |
||||||
|
* 高亮显示 |
||||||
|
* @param text 必需 |
||||||
|
* @param keyword |
||||||
|
* @param py 必需 |
||||||
|
* @returns {*} |
||||||
|
* @private |
||||||
|
*/ |
||||||
|
__textKeywordMarked__: function (text, keyword, py) { |
||||||
|
if (!BI.isKey(keyword) || (text + "").length > 100) { |
||||||
|
return this.html(BI.htmlEncode(text)); |
||||||
|
} |
||||||
|
keyword = keyword + ""; |
||||||
|
keyword = BI.toUpperCase(keyword); |
||||||
|
var textLeft = (text || "") + ""; |
||||||
|
py = (py || BI.makeFirstPY(text)) + ""; |
||||||
|
if (py != null) { |
||||||
|
py = BI.toUpperCase(py); |
||||||
|
} |
||||||
|
this.empty(); |
||||||
|
while (true) { |
||||||
|
var tidx = BI.toUpperCase(textLeft).indexOf(keyword); |
||||||
|
var pidx = null; |
||||||
|
if (py != null) { |
||||||
|
pidx = py.indexOf(keyword); |
||||||
|
if (pidx >= 0) { |
||||||
|
pidx = pidx % text.length; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (tidx >= 0) { |
||||||
|
this.append(textLeft.substr(0, tidx)); |
||||||
|
this.append($("<span>").addClass("bi-keyword-red-mark") |
||||||
|
.html(BI.htmlEncode(textLeft.substr(tidx, keyword.length)))); |
||||||
|
|
||||||
|
textLeft = textLeft.substr(tidx + keyword.length); |
||||||
|
if (py != null) { |
||||||
|
py = py.substr(tidx + keyword.length); |
||||||
|
} |
||||||
|
} else if (pidx != null && pidx >= 0 && Math.floor(pidx / text.length) === Math.floor((pidx + keyword.length - 1) / text.length)) { |
||||||
|
this.append(textLeft.substr(0, pidx)); |
||||||
|
this.append($("<span>").addClass("bi-keyword-red-mark") |
||||||
|
.html(BI.htmlEncode(textLeft.substr(pidx, keyword.length)))); |
||||||
|
if (py != null) { |
||||||
|
py = py.substr(pidx + keyword.length); |
||||||
|
} |
||||||
|
textLeft = textLeft.substr(pidx + keyword.length); |
||||||
|
} else { |
||||||
|
this.append(textLeft); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return this; |
||||||
|
}, |
||||||
|
|
||||||
|
getDomHeight: function (parent) { |
||||||
|
var clone = $(this).clone(); |
||||||
|
clone.appendTo($(parent || "body")); |
||||||
|
var height = clone.height(); |
||||||
|
clone.remove(); |
||||||
|
return height; |
||||||
|
}, |
||||||
|
|
||||||
|
// 是否有竖直滚动条
|
||||||
|
hasVerticalScroll: function () { |
||||||
|
return this.height() > 0 && this[0].clientWidth < this[0].offsetWidth; |
||||||
|
}, |
||||||
|
|
||||||
|
// 是否有水平滚动条
|
||||||
|
hasHorizonScroll: function () { |
||||||
|
return this.width() > 0 && this[0].clientHeight < this[0].offsetHeight; |
||||||
|
}, |
||||||
|
|
||||||
|
// 获取计算后的样式
|
||||||
|
getStyle: function (name) { |
||||||
|
var node = this[0]; |
||||||
|
var computedStyle = void 0; |
||||||
|
|
||||||
|
// W3C Standard
|
||||||
|
if (_global.getComputedStyle) { |
||||||
|
// In certain cases such as within an iframe in FF3, this returns null.
|
||||||
|
computedStyle = _global.getComputedStyle(node, null); |
||||||
|
if (computedStyle) { |
||||||
|
return computedStyle.getPropertyValue(BI.hyphenate(name)); |
||||||
|
} |
||||||
|
} |
||||||
|
// Safari
|
||||||
|
if (document.defaultView && document.defaultView.getComputedStyle) { |
||||||
|
computedStyle = document.defaultView.getComputedStyle(node, null); |
||||||
|
// A Safari bug causes this to return null for `display: none` elements.
|
||||||
|
if (computedStyle) { |
||||||
|
return computedStyle.getPropertyValue(BI.hyphenate(name)); |
||||||
|
} |
||||||
|
if (name === "display") { |
||||||
|
return "none"; |
||||||
|
} |
||||||
|
} |
||||||
|
// Internet Explorer
|
||||||
|
if (node.currentStyle) { |
||||||
|
if (name === "float") { |
||||||
|
return node.currentStyle.cssFloat || node.currentStyle.styleFloat; |
||||||
|
} |
||||||
|
return node.currentStyle[BI.camelize(name)]; |
||||||
|
} |
||||||
|
return node.style && node.style[BI.camelize(name)]; |
||||||
|
}, |
||||||
|
|
||||||
|
__isMouseInBounds__: function (e) { |
||||||
|
var offset2Body = this.get(0).getBoundingClientRect ? this.get(0).getBoundingClientRect() : this.offset(); |
||||||
|
var width = offset2Body.width || this.outerWidth(); |
||||||
|
var height = offset2Body.height || this.outerHeight(); |
||||||
|
return !(e.pageX < offset2Body.left || e.pageX > offset2Body.left + width |
||||||
|
|| e.pageY < offset2Body.top || e.pageY > offset2Body.top + height); |
||||||
|
}, |
||||||
|
|
||||||
|
__hasZIndexMask__: function (zindex) { |
||||||
|
return zindex && this.zIndexMask[zindex] != null; |
||||||
|
}, |
||||||
|
|
||||||
|
__buildZIndexMask__: function (zindex, domArray) { |
||||||
|
this.zIndexMask = this.zIndexMask || {};// 存储z-index的mask
|
||||||
|
this.indexMask = this.indexMask || [];// 存储mask
|
||||||
|
var mask = BI.createWidget({ |
||||||
|
type: "bi.center_adapt", |
||||||
|
cls: "bi-z-index-mask", |
||||||
|
items: domArray |
||||||
|
}); |
||||||
|
|
||||||
|
mask.element.css({"z-index": zindex}); |
||||||
|
BI.createWidget({ |
||||||
|
type: "bi.absolute", |
||||||
|
element: this, |
||||||
|
items: [{ |
||||||
|
el: mask, |
||||||
|
left: 0, |
||||||
|
right: 0, |
||||||
|
top: 0, |
||||||
|
bottom: 0 |
||||||
|
}] |
||||||
|
}); |
||||||
|
this.indexMask.push(mask); |
||||||
|
zindex && (this.zIndexMask[zindex] = mask); |
||||||
|
return mask.element; |
||||||
|
}, |
||||||
|
|
||||||
|
__releaseZIndexMask__: function (zindex) { |
||||||
|
if (zindex && this.zIndexMask[zindex]) { |
||||||
|
this.indexMask.remove(this.zIndexMask[zindex]); |
||||||
|
this.zIndexMask[zindex].destroy(); |
||||||
|
return; |
||||||
|
} |
||||||
|
this.indexMask = this.indexMask || []; |
||||||
|
var indexMask = this.indexMask.pop(); |
||||||
|
indexMask && indexMask.destroy(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
@ -1,58 +0,0 @@ |
|||||||
if (jQuery) { |
|
||||||
(function ($) { |
|
||||||
// richer:容器在其各个边缘留出的空间
|
|
||||||
if (!$.fn.insets) { |
|
||||||
$.fn.insets = function () { |
|
||||||
var p = this.padding(), |
|
||||||
b = this.border(); |
|
||||||
return { |
|
||||||
top: p.top, |
|
||||||
bottom: p.bottom + b.bottom + b.top, |
|
||||||
left: p.left, |
|
||||||
right: p.right + b.right + b.left |
|
||||||
}; |
|
||||||
}; |
|
||||||
} |
|
||||||
|
|
||||||
// richer:获取 && 设置jQuery元素的边界
|
|
||||||
if (!$.fn.bounds) { |
|
||||||
$.fn.bounds = function (value) { |
|
||||||
var tmp = {hasIgnoredBounds: true}; |
|
||||||
|
|
||||||
if (value) { |
|
||||||
if (!isNaN(value.x)) { |
|
||||||
tmp.left = value.x; |
|
||||||
} |
|
||||||
if (!isNaN(value.y)) { |
|
||||||
tmp.top = value.y; |
|
||||||
} |
|
||||||
if (value.width != null) { |
|
||||||
tmp.width = (value.width - (this.outerWidth(true) - this.width())); |
|
||||||
tmp.width = (tmp.width >= 0) ? tmp.width : value.width; |
|
||||||
// fix chrome
|
|
||||||
// tmp.width = (tmp.width >= 0) ? tmp.width : 0;
|
|
||||||
} |
|
||||||
if (value.height != null) { |
|
||||||
tmp.height = value.height - (this.outerHeight(true) - this.height()); |
|
||||||
tmp.height = (tmp.height >= 0) ? tmp.height : value.height; |
|
||||||
// fix chrome
|
|
||||||
// tmp.height = (tmp.height >= 0) ? tmp.height : value.0;
|
|
||||||
} |
|
||||||
this.css(tmp); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
// richer:注意此方法只对可见元素有效
|
|
||||||
tmp = this.position(); |
|
||||||
return { |
|
||||||
x: tmp.left, |
|
||||||
y: tmp.top, |
|
||||||
// richer:这里计算外部宽度和高度的时候,都不包括边框
|
|
||||||
width: this.outerWidth(), |
|
||||||
height: this.outerHeight() |
|
||||||
}; |
|
||||||
|
|
||||||
}; |
|
||||||
} |
|
||||||
})(jQuery); |
|
||||||
} |
|
Loading…
Reference in new issue