📄 common.js
字号:
// 重设验证码
function validateReset (id) {
// 重设验证码
var p = $(id);
if (!p) return;
var img = p.getElementsByTagName('img')[0];
if (!img) return;
if (!img._src) img._src = img.src;
img.src = img._src + '&rnd=' + Math.random();
}
// 重新加载图片
function reloadImage (th) {
if (!th._src) th._src = th.src;
var src = th._src + (th._src.indexOf('?') > -1 ? '&' : '?');
th.src = src + 'rnd=' + Math.random();
}
/// 页面事件处理
// 当前注册的执行列表
DomEvent.events = {};
// 存放上一次的注册列表
DomEvent.list = [];
// 标识不存放在DomEvent.list
DomEvent.saved = true;
// 标识是否可执行事件
DomEvent.EventExecuteAble = true;
// 标识是否可执行事件,并只执行此方法
DomEvent.EventExecuteFunc = new Function();
function DomEvent () {
var isShift, isCtrl, isAlt;
var type = 0;
function keyEvent (e) {
// 执行次数
var num = 0;
// 记录独立回车次数
var EnterNum = 0;
isShift = e.shiftKey;
isCtrl = e.ctrlKey;
isAlt = e.altKey;
var es = DomEvent.events;
for (var item in es) {
if ((!es[item][0].isShift && !es[item][0].isCtrl && !es[item][0].isAlt && !isShift && !isCtrl && !isAlt && es[item][0].keyCode == e.keyCode && e.keyCode == 13 && (type = 1)) ||
(isShift && isShift == es[item][0].isShift && es[item][0].keyCode == e.keyCode && (type = 2)) ||
(isCtrl && isCtrl == es[item][0].isCtrl && es[item][0].keyCode == e.keyCode && (type = 3)) ||
(isAlt && isAlt == es[item][0].isAlt && es[item][0].keyCode == e.keyCode && (type = 4))) {
///
num++;
if (type == 1 && !DomEvent.EventExecuteAble) {
DomEvent.EventExecuteFunc && DomEvent.EventExecuteFunc();
return false;
}
if (type == 1 && $EO(e).tagName.toLowerCase() == 'textarea') {
if (Widget.InfoNum == 1) {
Events.CancelAll(e);
DomEvent.DefaultClose();
}
return false;
}
if (Widget.InfoNum == 1) {
DomEvent.DefaultClose();
Events.CancelAll(e);
return false;
}
else {
if (type == 1 && es[item][2] && $(es[item][2]) && $(es[item][2]).type == 'submit')
continue;
if (es[item][2] && $(es[item][2]))
es[item][1].call($(es[item][2]));
else
es[item][1]();
}
}
}
}
if (Browser.IsOpera)
Events.AttachEvent(document, 'keypress', keyEvent);
else
Events.AttachEvent(document, 'keydown', keyEvent);
DomEvent.AttachDefault();
}
// 注册默认`enter`关闭警告层
DomEvent.AttachDefault = function () {
DomEvent.events['InfoClose_' + Global.Random()] = [
{
isShift: false,
isCtrl: false,
isAlt: false,
keyCode: 13
},
DomEvent.DefaultClose
];
};
// 关闭警告框
DomEvent.DefaultClose = function () {
Widget && Widget.InfoClose();
AjaxRequest.IsSubmited = false;
};
// 清除当前已注册的事件
// `retrieve`重新注册上一次的事件
DomEvent.Clear = function (retrieve) {
this.events = {};
this.saved = false;
if (retrieve) {
this.saved = true;
for (var i = 0, len = this.list.length; i < len; i++) {
var l = this.list[i];
setShortcut.apply(null, l);
}
}
// 默认需要的事件
DomEvent.AttachDefault();
};
// 注册按钮事件并注册快捷方式
function setShortcut (buttonName, eventName, shortcut, func) {
buttonName = buttonName && buttonName.id || buttonName;
// 暂存
this.saved && this.list.push([buttonName, eventName, shortcut, func]);
if (typeof shortcut == 'string') shortcut = [shortcut.toLowerCase()];
for (var i = 0, len = shortcut.length; i < len; i++) {
var arr = /(shift|ctrl|alt)\+([a-z0-9]+)/i.exec(shortcut[i]);
if (!arr && shortcut[i] != 'enter') return;
if (shortcut[i] == 'enter') arr = ['', '', 'enter'];
arr[1] = arr[1].toLowerCase();
arr[2] = arr[2].toLowerCase();
var _shortcut = {
isShift:arr[1] == 'shift',
isCtrl:arr[1] == 'ctrl',
isAlt:arr[1] == 'alt',
keyCode:arr[2] == 'enter' ? 13 : arr[2].charCodeAt(0)
};
if (_shortcut.keyCode >= 97 && _shortcut.keyCode <= 121) {
_shortcut.keyCode -= 32;
}//alert(Dumper(_shortcut));
// 判断是否重复注册
var hasAttach = false;
for (var item in DomEvent.events) {
if (!item[1]) continue;
if (item[1].toString() == func.toString()
&& item[0].isShift == _shortcut.isShift
&& item[0].isCtrl == _shortcut.isCtrl
&& item[0].isAlt == _shortcut.isAlt
&& item[0].keyCode == _shortcut.key) {
///
hasAttach = true;
break;
}
}
//alert(Dumper(DomEvent.events) + '\n\n' + Dumper([_shortcut, func, buttonName]) + '\n\n' + Dumper(shortcut) + ' ' + arr[1]);
// 快捷事件
if (!hasAttach)
DomEvent.events[buttonName + '_' + Global.Random()] = [_shortcut, func, buttonName];
}
// 按钮事件,并防止二次提交
var but = buttonName && $(buttonName);
but && Events.AttachEvent(but, eventName, func);
}
/// 帖子内容脚本调用
// 复制
function ubbCopy (th) {
var txt = th.parentNode.parentNode.getElementsByTagName('code')[0].innerHTML;
txt = txt.replace(/</g, '<');
txt = txt.replace(/>/g, '>');
txt = txt.replace(/ /g, ' ');
txt = txt.replace(/&/g, '&');
copyToClipboard(txt);
}
// 运行
function ubbRun (th) {
var txt = th.parentNode.parentNode.getElementsByTagName('code')[0].innerHTML;
var win = window.open('about:blank');
txt = txt.replace(/</g, '<');
txt = txt.replace(/>/g, '>');
txt = txt.replace(/&/g, '&');
win.document.open();
win.document.write(txt);
win.document.close();
}
// 用户中心,隐藏菜单
function hideMenu (menu) {
Events.AttachEvent(menu, 'click', function () {
this.style.visibility = 'hidden';
Events.AttachEvent(this, 'click', arguments.callee);
});
}
// 用户中心,左边菜单项选中状态
function selectedMenuItem () {
var sidebar = $('sidebar_content');
if (!sidebar) return;
var links = sidebar.getElementsByTagName('a');
for (var i = links.length - 1; i > -1; i--) {
if (location.href.indexOf(links[i].href) > -1) {
CSS.AddClass(links[i], 'current');
break;
}
}
}
// 设置提交按钮为可用
function undisabledSubmit () {
var inputs = document.getElementsByTagName('input');
for (var i = 0, len = inputs.length; i < len; i++) {
if (inputs[i].type == 'submit') inputs[i].disabled = false;
}
}
// post提交到新地址
function postTo (url) {
document.forms[0].action = url;
document.forms[0].submit();
}
// 跳转到新地址
function go (url) {
location.href = url;
}
// reload
/*
地址一样
1. 没有锚点,location.href
2. 有锚点
*/
function Reload (url) {
var href = Url.ClearAnchor(location.href);
var arr = /^http(?:s)?:\/\/[^\/]+\:(\d+)\//i.exec(href);
var _url = '://' + location.host + (arr && arr[1] ? ':' + arr[1] : '') + Url.ClearAnchor(url);
// 地址一致
if (href == 'http' + _url || href == 'https' + _url) {
// url没有锚点
if (url.indexOf('#') == -1) {
location.href = url;
}
// url有锚点
else {
location.href = '/go.aspx?url=' + encodeURIComponent(url);
}
}
// 地址不一致
else {
location.href = url;
}
}
// 开启IM
function QQChat (qq) {
openFile('Tencent://Message/?menu=yes&exe=&uin=' + qq + '&websiteName=bbsmax&info=');
}
function WLMChat (msn) {
openFile('msnim:chat?contact=' + msn);
}
function WangWang (id) {
openFile('wangwang:SendIM?' + id + '&uid_t=' + id);
}
function Skype (id) {
openFile('skype:' + id + '?call');
}
function Gtalk (gmail) {
openFile('gtalk:chat?jid=' + gmail);
}
function openFile (url) {
var self = arguments.callee;
var frame = self.frame;
if (!frame) {
frame = self.frame = oNode.CreateIframe('im_' + Global.Random());
oNode.AddNode(frame);
frame.style.display = 'none';
}
window.open(url, frame.name);
}
/*
onload
*/
Events.AttachEvent(window, 'load', function () {
if(typeof(pageID)!='undefined')
pageID = pageID.toLowerCase();
//blockMenu();
DomEvent();
selectedMenuItem();
undisabledSubmit();
///
//Url.GotoAnchor(Url.GetAnchor());
});
// 在线用户信息
onlineUserTip.xOffset = 2;
onlineUserTip.yOffset = 2;
onlineUserTip.Event = false;
onlineUserTip.flow = null;
onlineUserTip.hasOver = false;
onlineUserTip.nonHideUser = false;
onlineUserTip.interval = 0;
onlineUserTip.delay = 200;
onlineUserTip.userLoading = false;
onlineUserTip.userLoaded = false;
onlineUserTip.guestLoading = false;
onlineUserTip.guestLoaded = false;
function onlineUserTip (th, id) {
var isUser = false, isGuest = false;
var _id = id;
if (/.{32}/.test(id)) {
isGuest = true;
id = 'online_guest_' + id;
}
else {
isUser = true;
id = 'online_user_' + id;
}
// loading user
if (isUser && !onlineUserTip.userLoading) {
onlineUserTip.userLoading = true;
AjaxRequest.Render('', 'ap_online_users', function () {
onlineUserTip.userLoaded = true;
onlineUserTip(th, _id);
});
}
// loading guest
if (isGuest && !onlineUserTip.guestLoading) {
onlineUserTip.guestLoading = true;
AjaxRequest.Render('', 'ap_online_guests', function () {
onlineUserTip.guestLoaded = true;
onlineUserTip(th, _id);
});
}
if (!onlineUserTip.userLoaded && isUser || !onlineUserTip.guestLoaded && isGuest)
return;
var flow = onlineUserTip.flow;
if (!flow) {
flow = onlineUserTip.flow = PopUp.Panel($('online_tip'));
PopUp.AddPopUp(flow);
PopUp.AddMask(flow);
flow.onmouseover = function () {clearTimeout(onlineUserTip.interval)};
flow.onmouseout = function () {
onlineUserTip.interval = setTimeout(function () {
onlineUserTip.hide(flow);
}, onlineUserTip.delay)
};
}
var obj = $(id);
if (!obj) return;
if (isUser && !obj.isChange) {
obj.isChange = true;
var userName = obj.getElementsByTagName('li')[0];
oNode.RemoveNode(userName);
if (userName.innerHTML.Trim() != '') {
obj.isShow = true;
var li = oNode.CreateNode('li');
oNode.AddNode(li, obj);
CSS.AddClass(li, 'member-info-buttons');
li.innerHTML = $('online_tip_btn').innerHTML.replace(/\{nickname\}/gi, userName.innerHTML);
var info = li.getElementsByTagName('a')[2];
if (info) info.href = info.href.replace(/userid=\d+/i, 'UserID=' + _id);
else li.style.display = 'none';
}
}
onlineUserTip.nonHideUser = isUser && obj.isShow;
flow.getElementsByTagName('ul')[0].innerHTML = obj.innerHTML;
if (!th.isCreate) {
th.isCreate = true;
th.onmouseout = function () {
onlineUserTip.hasOver = false;
if (onlineUserTip.nonHideUser) {
onlineUserTip.interval = setTimeout(function () {
onlineUserTip.hide(flow);
}, onlineUserTip.delay);
}
else {
onlineUserTip.hide(flow);
}
};
}
onlineUserTip.hasOver = true;
onlineUserTip.hasShow = false;
clearTimeout(onlineUserTip.interval);
if (!onlineUserTip.Event) {
onlineUserTip.Event = true;
flow.style.display = '';
Events.AttachEvent(document, 'mousemove', function (e) {
if (!onlineUserTip.hasOver) return;
var obj = $EO(e);
var isOver = false;
while (obj) {
if (obj.onmouseover && /onlineUserTip/.test(obj.onmouseover.toString())) {
isOver = true;
break;
}
obj = obj.parentNode;
}
if (!isOver) return;
onlineUserTip.hasShow || onlineUserTip.show(e, onlineUserTip.flow);
if (onlineUserTip.nonHideUser)
onlineUserTip.hasShow = true;
});
}
}
onlineUserTip.show = function (e, flow) {
var x = e.clientX + onlineUserTip.xOffset;
var y = e.clientY + onlineUserTip.yOffset;
var W = Global.GetClientWidth();
var H = Global.GetClientHeight();
var w = flow.offsetWidth;
var h = flow.offsetHeight;
if (x + w > W) {
x = e.clientX - w - onlineUserTip.xOffset;
}
if (x < 0) x = 0;
if (y + h > H) {
y = e.clientY - h - onlineUserTip.yOffset;
}
if (y < 0) y = 0;
x += Global.GetScrollLeft();
y += Global.GetScrollTop();
PopUp.SetXY(flow, x, y);
};
onlineUserTip.hide = function (flow) {
flow.style.left = '-1000px';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -