⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csdnscriptworkshop.js

📁 关于断言的一篇小文章
💻 JS
📖 第 1 页 / 共 2 页
字号:
/*//
标题: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 + -