📄 csdnscriptworkshop.js
字号:
/*//
标题:UBB插件容器对象
设计:王集鹄
版权:CSDN.NET
版本:20081105
//*/
///////Begin 公用函数
/// <summary>
/// 设置Cookie值
/// </summary>
/// <param name="name">Cookie变量名</param>
/// <param name="value">Cookie值</param>
/// <param name="days">保存的天数</param>
function setCookie(name, value, days) {
var expires = "";
if (days) {
var d = new Date();
d.setTime(d.getTime() + days * 24 * 60 * 60 * 1000);
expires = "; expires=" + d.toGMTString();
}
document.cookie = name + "=" + value + expires + "; path=/";
}
/// <summary>
/// 获取Cookie值
/// </summary>
/// <param name="name">Cookie变量名</param>
/// <returns>返回获取到的Cookie值</returns>
function getCookie(name) {
var re = new RegExp("(\;|^)[^;]*(" + name + ")\=([^;]*)(;|$)");
var res = re.exec(document.cookie);
return res != null ? res[3] : null;
}
/// <summary>
/// 调用脚本
/// </summary>
/// <param name="url">脚本地址</param>
/// <param name="loaded">载入后调用的方法</param>
/// <param name="loaded">异常后调用的方法</param>
/// <param name="charset">脚本字节编码</param>
function callScript(url, loaded, error, charset) {
var script = document.createElement("script");
if (typeof charset == "string") script.charset = charset;
script.onreadystatechange = function() {
switch (this.readyState) {
case "complete":
case "loaded":
if (typeof loaded == "function") loaded();
if (script.parentNode) script.parentNode.removeChild(script);
break;
}
}
script.onload = function() {
if (typeof loaded == "function") loaded();
if (script.parentNode) script.parentNode.removeChild(script);
}
script.onerror = function() {
if (typeof error == "function") error();
if (script.parentNode) script.parentNode.removeChild(script);
}
script.type = "text/javascript";
script.defer = "true";
script.src = url;
var parent = document.getElementsByTagName("HEAD")[0] || document.documentElement;
parent.insertBefore(script, parent.firstChild);
}
/// <summary>
/// 执行http请求
/// </summary>
/// <param name="url">链接地址</param>
/// <param name="type">请求类型</param>
/// <param name="loaded">载入后调用的方法</param>
function requestHttp(url, type, loaded) {
if (typeof loaded != "function") return;
var xmlhttp = typeof XMLHttpRequest == "undefined" ?
new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
loaded(xmlhttp);
}
xmlhttp.open(typeof type == "string" ? type : "GET", url, true);
xmlhttp.send(null);
}
/// <summary>
/// 获得元素的绝对坐标
/// </summary>
/// <param name="element">HTML元素</param>
function absolutePoint(element) {
var result = { x: element.offsetLeft, y: element.offsetTop };
element = element.offsetParent;
while (element) {
result.x += element.offsetLeft;
result.y += element.offsetTop;
element = element.offsetParent;
}
return result;
}
/// <summary>
/// 添加事件
/// </summary>
/// <param name="target">载体</param>
/// <param name="type">事件类型</param>
/// <param name="func">事件函数</param>
function addEventHandler(target, type, func) {
if (target.addEventListener)
target.addEventListener(type, func, false);
else if (target.attachEvent)
target.attachEvent("on" + type, func);
else target["on" + type] = func;
}
/// <summary>
/// 移除事件
/// </summary>
/// <param name="target">载体</param>
/// <param name="type">事件类型</param>
/// <param name="func">事件函数</param>
function removeEventHandler(target, type, func) {
if (target.removeEventListener)
target.removeEventListener(type, func, false);
else if (target.detachEvent)
target.detachEvent("on" + type, func);
else delete target["on" + type];
}
///////End 公用函数
var CsdnScriptWorkshop = {
/// <summary>
/// 接口版本,推荐访问
/// </summary>
interfaceVersion: "1.0",
/// <summary>
/// 是否初始化过,拒绝访问
/// </summary>
initialized: false,
/// <summary>
/// 工具条,拒绝访问
/// </summary>
toolbar: null,
/// <summary>
/// 当前区域 p:post发帖页面 r:reply回复页面
/// </summary>
page: "n",
/// <summary>
/// 初始化,拒绝访问
/// </summary>
initialize: function() {
if (this.initialized) return;
if (typeof CsdnScriptPlugins == "undefined") return;
if ((/^[^\?]+PostTopic.aspx/i).test(window.location))
this.page = "p";
else if ((/^[^\?]+ReplyTopic.aspx/i).test(window.location))
this.page = "r";
var menubar = document.getElementById("CsdnUbbEditorMenubar_CsdnUbb_0");
if (!menubar) return;
this.initialized = true;
this.toolbar = document.createElement("div");
this.toolbar.className = menubar.className;
this.toolbar.style.backgroundImage = "url(/EditorControl/MzUBB/CsdnUbbEditor/bgMenubar2.gif)";
this.toolbar.style.marginTop = "2px";
this.toolbar.style.marginBottom = "-2px";
menubar.parentNode.insertBefore(this.toolbar, menubar.nextSibling);
var url = getCookie("CsdnScriptPlugin999.url");
if (url) CsdnScriptPlugins["CsdnScriptPlugin999"].url = url;
if (typeof CsdnUbbEditor != "undefined") {
var toolbar = this.toolbar;
CsdnUbbEditor.disable = function(input, hashcode) {
var editor = CsdnUbbEditor.instance(hashcode);
editor.menubar.style.display = input.checked ? "none" : "";
toolbar.style.display = input.checked ? "none" : "";
}
}
var pluginCount = 0;
for (var name in CsdnScriptPlugins) {
if (CsdnScriptPlugins[name].pages.indexOf(CsdnScriptWorkshop.page) >= 0)
pluginCount++;
}
this.addButton(
"管理UBB插件",
"/PointForum/ui/images/jscript.gif",
function() {
if (typeof LogClickCount == "function") LogClickCount("button", 65);
if (typeof CsdnScriptPlugins != "object") return;
var htmlDialog = "<table style=\"width:100%;height:" + (pluginCount + 1) * 30 + "px;background:#9B9B9B;\" border=\"0\" cellpadding=\"2\" cellspacing=\"1\"><tr><td style=\"background:White\"><strong>插件名</strong></td><td style=\"background:White;\"><strong>作者</strong></td><td align=\"center\" colspan=\"2\" style=\"background:White;\"><strong>功能</strong></td></tr>\n";
for (var name in CsdnScriptPlugins) {
if (CsdnScriptPlugins[name].pages.indexOf(CsdnScriptWorkshop.page) < 0) continue;
if (name == "CsdnScriptPlugin999") {
htmlDialog += "<tr>";
htmlDialog += "<td colspan=\"2\" style=\"background:White;color:Green;\">本机插件URL:<input id=\"text_" + name + "\" type=\"text\" value=\"" + CsdnScriptPlugins[name].url + "\" style=\"width:200px;\" /></td>";
htmlDialog += "<td style=\"background:White;\"><a id=\"button_" + name + "_load\" href=\"javascript:void(0);\">装载</a></td>";
htmlDialog += "<td style=\"background:White;\"><a id=\"button_" + name + "_free\" href=\"javascript:void(0);\">卸载</a></td>"
htmlDialog += "</tr>";
} else {
htmlDialog += "<tr>";
htmlDialog += "<td style=\"background:White;\"><a href=\"" + CsdnScriptPlugins[name].help + "\" target=\"_blank\">" + CsdnScriptPlugins[name].caption + "</a></td>";
htmlDialog += "<td style=\"background:White;\"><a href=http://hi.csdn.net/" + CsdnScriptPlugins[name].designer + " target=\"_blank\">" + CsdnScriptPlugins[name].designer + "</a></td>";
htmlDialog += "<td style=\"background:White;\"><a id=\"button_" + name + "_load\" href=\"javascript:void(0);\">装载</a></td>";
htmlDialog += "<td style=\"background:White;\"><a id=\"button_" + name + "_free\" href=\"javascript:void(0);\">卸载</a></td>"
htmlDialog += "</tr>";
}
}
htmlDialog += "</table>";
htmlDialog += "<div style=\"float:right;margin:7px 12px 0 0;\"><a href=\"/PointForum/ui/scripts/Csdn/Plugin/PluginHelp.htm\" style=\"margin-right:100px;color:Blue;\" target=\"_blank\" onclick=\"LogClickCount(this, 66);\">如何编写自己的插件?</a><input type=\"button\" class=\"button\" value=\"关闭\" onclick=\"CsdnScriptWorkshop.closeDialog();\" /></div>";
var point = absolutePoint(this);
CsdnScriptWorkshop.showDialog("管理UBB插件", htmlDialog, point.x, point.y + 18, 500, (pluginCount + 1) * 30 + 100);
for (var name in CsdnScriptPlugins) {
CsdnScriptWorkshop.changeButton(name);
}
}
);
for (var name in CsdnScriptPlugins) {
if (CsdnScriptPlugins[name].pages.indexOf(CsdnScriptWorkshop.page) < 0) continue;
if (getCookie(name) == "loaded")
this.loadPlugin(name);
}
},
/// <summary>
/// 装载UBB插件对象,拒绝访问
/// </summary>
/// <param name="plugin">脚本对象</param>
/// <returns>返回是否载入成功</returns>
loadPlugin: function(name) {
if (CsdnScriptPlugins[name].download && CsdnScriptPlugins[name].plugin) { // 已经下载
var plugin = CsdnScriptPlugins[name].plugin;
if (plugin.interfaceVersion != this.interfaceVersion) return false;
if (typeof plugin.load != "function") return false;
if (plugin.loaded) return false; // 已装载
if (name == "CsdnScriptPlugin999")
setCookie(name + ".url", CsdnScriptPlugins[name].url, 7);
setCookie(name, "loaded", 7);
plugin.load();
plugin.loaded = true;
CsdnScriptWorkshop.changeButton(name);
} else { // 下载脚本
//TODO : 显示 loading...
if (CsdnScriptPlugins[name].loading) return;
if (name == "CsdnScriptPlugin999") {
var input = document.getElementById("text_" + name);
if (input) {
if (input.value.length <= 0) {
setCookie(name, "", -1);
setCookie(name + ".url", "", -1);
alert("无效的URL。");
return;
}
CsdnScriptPlugins[name].url = input.value;
}
}
if (CsdnScriptPlugins[name].url.length <= 0) return;
CsdnScriptPlugins[name].loading = true;
CsdnScriptWorkshop.changeButton(name);
var timer = window.setTimeout(function() { // 处理载入超时
setCookie(name, "", -1);
CsdnScriptPlugins[name].plugin = null;
CsdnScriptPlugins[name].download = false;
CsdnScriptPlugins[name].loading = false;
CsdnScriptWorkshop.changeButton(name);
alert("装载超时。");
}, 10000);
if (name != "CsdnScriptPlugin999") // 非自定义采用ajax
{
requestHttp(CsdnScriptPlugins[name].url, "GET", function(xmlhttp) {
try {
eval(xmlhttp.responseText);
eval("CsdnScriptPlugins[\"" + name + "\"].plugin = " + name + ";");
CsdnScriptPlugins[name].download = true;
CsdnScriptWorkshop.loadPlugin(name);
} catch (e) {
CsdnScriptPlugins[name].plugin = null;
CsdnScriptPlugins[name].download = false;
setCookie(name, "", -1);
alert("插件装载出现异常。--" + e.message);
} finally {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -