ubb.js

来自「asp的bbs程序」· JavaScript 代码 · 共 1,023 行 · 第 1/3 页

JS
1,023
字号
    downText : {},
    // 多媒体,ubb模式转为可视化显示
    multimediaUbbToHtmlView : function (str, isXHTML) {
        // <img class="flash" src="" _src="" _type="" width="" height="" />
        // <img class="media" src="" _src="" _type="" width="" height="" />
        str = str.replace(/\[(flash|wmv|wav|wma|rm|ra|mp3|mov)([^\]]*?)\]([\s\S]+?)\[\/\1\]/gi, function (str, type, args, src) {
            var width = '', height = '', auto = '';
            if (args) {
                args = args.replace('=', '');
                var _args = args.split(',');
                args = '';
                if (_args.length > 1) {
                    _args[0] = _args[0] || 400;
                    _args[1] = getH(_args[1]);
                    
                    if (Browser.IsIE) {
                        width = 'style="width:' + _args[0] + (_args[0].indexOf('%') > -1 ? '' : 'px') + ';';
                        height = 'height:' + _args[1] + (_args[1].indexOf('%') > -1 ? '' : 'px') + ';"';
                    }
                    else {
                        width = ' width="' + _args[0] + '"';
                        height = ' height="' + _args[1] + '"';
                    }
                    auto = type != 'flash' && _args[2] ? ' _auto="' + _args[2] + '"' : '';
                }
                args = width + height + auto;
            }
            else {
                if (Browser.IsIE)
                    args = ' style="width:400px;height:' + getH() + 'px;"';
                else
                    args = ' width="400" height="' + getH() + '"';
            }

            function getH (h) {
                switch (type) {
                    case 'ra':
                    case 'wma':
                    case 'mp3':
                        h = h || 36;
                        break;
                    case 'flash':
                    case 'rm':
                    case 'rmvb':
                    case 'wmv':
                    case 'mov':
                        h = h || 300;
                        break;
                }
                return h;
            }

            isXHTML || (src = UBB.replaceSignToUrl(src));
            return '<img ' + args + ' _src="' + src + '" _type="' + type + '" src="images/transparent.gif" class="embedobject-' + (type == 'flash' ? 'flash' : 'media') + '" />';
        });
        
        //str = this.downtagUbbToHtmlCode(str);

        return str;
    },
    // 多媒体,ubb模式转为html代码显示
    multimediaUbbToHtmlCode : function (str) {
        /*
            /\[flash\]\[\/flash\]/i;
            /\[wmv\]\[\/wmv\]/i;
            /\[wav\]\[\/wav\]/i;
            /\[wma\]\[\/wma\]/i;
            /\[rm\]\[\/rm\]/i;
            /\[ra\]\[\/ra\]/i;
            /\[mov\]\[\/wmv\]/i;
            /\[mp3\]\[\/mp3\]/i;
        */

        return str;
    },
    // 多媒体,html模式转为ubb模式
    multimediaHtmlToUbb : function (str) {
        // flash
        str = str.replace(/<img[^>]+?class="embedobject\-flash"[^>]*?>/gi, function (str) {
            var arr = /_src="([^"]*?)"/i.exec(str);
            var src = arr && arr[1] ? arr[1] : '';
            
            // Gecko...
            arr = /width="([^"]*?)"/i.exec(str);
            var w = arr && arr[1] ? arr[1] : 0;
            arr = /height="([^"]*?)"/i.exec(str);
            var h = arr && arr[1] ? arr[1] : 0;
            
            // IE...
            arr = /width:\s*(\d+(?:px|%))/i.exec(str);
            if (arr && arr[1]) w = arr[1].replace('px', '');
            arr = /height:\s*(\d+(?:px|%))/i.exec(str);
            if (arr && arr[1]) h = arr[1].replace('px', '');;

            src = UBB.replaceUrlToSign(src);
            if (!w && !h || w == 400 && h == 300)
                str = '[flash]' + src + '[/flash]';
            else
                str = '[flash=' + w + ',' + h + ']' + src + '[/flash]';
            return str;
        });
        // media
        str = str.replace(/<img[^>]+?class="embedobject\-media"[^>]*?>/gi, function (str) {
            var arr = /_src="([^"]*?)"/i.exec(str);
            var src = arr && arr[1] ? arr[1] : '';
            
            // Gecko...
            arr = /width="([^"]*?)"/i.exec(str);
            var w = arr && arr[1] ? arr[1] : 0;
            arr = /height="([^"]*?)"/i.exec(str);
            var h = arr && arr[1] ? arr[1] : 0;
            
            // IE...
            arr = /width:\s*(\d+(?:px|%))/i.exec(str);
            if (arr && arr[1]) w = arr[1].replace('px', '');
            arr = /height:\s*(\d+(?:px|%))/i.exec(str);
            if (arr && arr[1]) h = arr[1].replace('px', '');;
            
            arr = /_type="([^"]*?)"/i.exec(str);
            var type = arr && arr[1] ? arr[1] : '';
            arr = /_auto="([^"]*?)"/i.exec(str);
            var auto = arr && arr[1] ? arr[1] : '';

            var _h;
            switch (type) {
                case 'ra':
                case 'wma':
                case 'mp3':
                    _h = 36;
                    break;
                case 'flash':
                case 'rm':
                case 'rmvb':
                case 'wmv':
                case 'mov':
                    _h = 300;
                    break;
            }

            var arg = (w && h && !(w == 400 && h == _h) ? '=' + w + (h ? ',' + h : '') : '');
            if (arg != '' && auto != '') {
                arg += ',' + auto;
            }
            else if (arg == '' && auto != '') {
                arg = '=' + auto;
            }
            
            src = UBB.replaceUrlToSign(src);
            str = '[' + type + arg + ']' + src + '[/' + type + ']';
            
            return str;
        });
        
        //str = this.downtagHtmlToUbb(str);

        return str;
    },
    
    /// 转换多媒体
    mediaUBBUrlToSign : function (str) {
        str = str.replace(/(\[(flash|wmv|wav|wma|rm|ra|mp3|mov)([^\]]*?)\])([\s\S]+?)(\[\/\2\])/gi, function (str, l1, l2, l3, m, r) {
            m = UBB.replaceUrlToSign(m);
            return l1 + m + r;
        });
        return str;
    },

    /// 转换图片, WYSIWYG <=> XHTML
    // XHTML => WYSIWYG
    imageHTMLSignToUrl : function (str) {
        str = str.replace(/(<img[^>]+?src=")([^"]+?)("[^>]*?\/?>)/gi, function (str, l, m, r) {
            m = UBB.replaceSignToUrl(m);
            return l + m + r;
        });
        return str;
    },
    // WYSIWYG => XHTML
    imageHTMLUrlToSign : function (str) {
        str = str.replace(/(<img[^>]+?src=")([^"]+?)("[^>]*?\/?>)/gi, function (str, l, m, r) {
            m = UBB.replaceUrlToSign(m);
            return l + m + r;
        });
        
        // link
        str = this.linkHTMLUrlToSign(str);
        return str;
    },
    // UBB => WYSIWYG,XHTML
    imageUBBSignToUrl : function (str) {
        str = str.replace(/(\[img[^\]]*\])([\s\S]+?)(\[\/img\])/gi, function (str, l, m, r) {
            m = UBB.replaceSignToUrl(m);
            return l + m + r;
        });
        return str;
    },
    imageUBBUrlToSign : function (str) {
        str = str.replace(/(\[img[^\]]*\])([\s\S]+?)(\[\/img\])/gi, function (str, l, m, r) {
            m = UBB.replaceUrlToSign(m);
            return l + m + r;
        });
        
        // link
        str = this.linkUBBUrlToSign(str);
        return str;
    },
    
    // 转换链接
    linkHTMLUrlToSign : function (str) {
        str = str.replace(/(<a[^>]+?href=")([^"]+?)("[^>]*?>[\s\S]+?<\/a>)/gi, function (str, l, m, r) {
            m = UBB.replaceUrlToSign(m);
            return l + m + r;
        });
        return str;
    },
    linkUBBUrlToSign : function (str) {
        str = str.replace(/(\[url=)([^\]]+?)(\][\s\S]+?)(\[\/url\])/gi, function (str, l1, l2, m, r) {
            l2 = UBB.replaceUrlToSign(l2);
            return l1 + l2 + m + r;
        });
        return str;
    },
    
    /// 转换url地址
    urlMode : {},
    // 判断是否当前网站的url
    replaceUrlToSign : function (url) {
        if (/^http:/i.test(url) && !(new RegExp('^http:\/\/' + location.host, 'i')).test(url)) return url;

        url = url.replace(/[\s\S]*outputfile\.aspx\?fileid=([0-9a-z]{8}[0-9a-z]{4}[0-9a-z]{4}[0-9a-z]{4}[0-9a-z]{12})[\s\S]*/i, '#file:$1#');
        url = url.replace(/[\s\S]*outputfile\.aspx\?fileid=(\d+)[\s\S]*/i, '#file:$1#');
        url = url.replace(/[\s\S]*attachment\.aspx\?id=(\d+)[\s\S]*/i, function (str, fileid) {
            var mode = /(?:\?|&)(mode=.+?)(?:&|$)/i.exec(str);
            mode && mode[1] && (UBB.urlMode[fileid] = mode[1]);
            return '#attach:' + fileid + '#';
        });

        return url;
    },
    replaceSignToUrl : function (sign) {
        sign = sign.replace(/#file:([0-9a-z]{8}[0-9a-z]{4}[0-9a-z]{4}[0-9a-z]{4}[0-9a-z]{12})#/i, 'outputfile.aspx?fileid=$1');
        sign = sign.replace(/#file:(\d+)#/i, 'outputfile.aspx?fileid=$1');
        sign = sign.replace(/#attach:(\d+)#/i, function (str, fileid) {
            return 'attachment.aspx?id=' + fileid + '&' + UBB.urlMode[fileid];
        });
        
        return sign;
    },

    ///
    // [code]内部代码暂存
    codeStore : function (str, codes) {
        str = str.replace(/\[code\]\[\/code\]/gi, '');
        while (/\[code\](?:(?!\[code\])[\s\S])+?\[\/code\]/i.test(str)) {
            str = str.replace(/\[code\]((?:(?!\[code\])[\s\S])*?)\[\/code\]/i, function (str, m1) {
                codes.push(m1);
                return '\x02';
            });
        }
        return str;
    },

    // [code]内部代码恢复
    codeRestore : function (str, codes, type) {
        var i = 0;
        while (/\x02/i.test(str)) {
            str = str.replace(/\x02/i, '[code]' + (type == 'html' ? this.changeHtmlEntities(codes[i]) : this.unchangeHtmlEntities(codes[i])) + '[/code]');
            i++
        }
        return str;
    },
    
    // 提取属性值
    extractValue : function (str) {
        str = str.replace(/"|'/g, '');
        str = str.split('=')[1];
        return str;
    },

    // 移除换行
    removeCrlf : function (str) {
        return this.replaceSpace(str.replace(/\r\n|\r|\n/g, ''));
    },
    replaceSpace : function (str) {
        return str.replace(/ /g, '\x01');
    },
    retrieveSpace : function (str) {
        return str.replace(/\x01/g, ' ');
    },

    // 替换空格
    replaceSpaceToNbsp : function (str) {
        str = str.replace(/ /g, '&nbsp;');
        return str;
    },

    // 替换空格
    replaceNbspToSpace : function (str) {
        str = str.replace(/&nbsp;/g, ' ');
        return str;
    },
    
    // 转义
    changeHtmlEntities : function (str) {
        str = str.replace(/&/g, '&amp;');
        str = str.replace(/ /g, '&nbsp;');
        str = str.replace(/</g, '&lt;');
        str = str.replace(/>/g, '&gt;');
        str = str.replace(/\r\n|\r|\n/g, '<br />');
        return str;
    },

    // 反转义
    unchangeHtmlEntities : function (str) {
        str = str.replace(/&nbsp;/g, ' ');
        str = str.replace(/&lt;/g, '<');
        str = str.replace(/&gt;/g, '>');
        str = str.replace(/&amp;/g, '&');
        str = str.replace(/<br[^>]*?>/gi, '\r\n');
        return str;
    },

    // 移除其它标签
    htmlEntities : function (str) {
        str = str.replace(/&/g, '&amp;');
        str = str.replace(/</g, '&lt;');
        str = str.replace(/>/g, '&gt;');
        return str;
    },
    unhtmlEntities : function (str) {
        str = str.replace(/&lt;/g, '<');
        str = str.replace(/&gt;/g, '>');
        str = str.replace(/&amp;/g, '&');
        return str;
    },

    // 移除其它标签
    removeHtmlTag : function (html) {
        html = html.replace(/<\/?[^>]+?>/g, '');
        return html;
    }
};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?