forked from fanruan/fineui
guy
6 years ago
23 changed files with 84630 additions and 85517 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