石头兔的城堡 » 日志 » 使评论框支持UBB代码的脚本及说明
使评论框支持UBB代码的脚本及说明
石头兔 发表于 2006-05-11 21:14:45
其中除了原有的表情图标的支持以外,新增加了UBB代码的支持。目前只添加了粗体、下划线、超链接、图片四中ubb代码的支持。
其实方法很笨,就是一个一个blockquote的搜索,按照正则表达式,找到符合条件的,就替换成对应的html代码,因此,认为这个东西效率一般。不过如果是在歪酷服务器端实现的话,效率会高一些,不过歪酷的服务器的负担也会重一些。
莫非这就是传说中的胖客户端么?
另外为了避免首页大量的代码让一些不熟悉代码的人感到头晕,于是不再放在首页,需要的,请看全文
于2006.5.9 21:56 编辑修正
修正内容:将用于ubb的正则表达式搜索的部分的反向引用中使用的如:、$4等符号重新添上。
由于歪酷系统的奇怪的问题(未知),无论是添加在模板中的或者是发表在日志中的(留言中的未测试)诸如、等字符串会变的很奇怪。第一次提交之后,显示是正常的,当进行再次编辑的时候,无论是模板还是日志,其中的这些字符串就都会不见了。此时无论是否进行改动,点击提交的话,就会让这些起关键作用的字符串丢失。
因此,在今天修改模板,加入两个图片连接的时候,就没有注意到。于是,导致丢失。
最惨的是,此日志由于发表之后经过数次编辑,导致其中的代码中的等也丢失了,因此,致使大家无法正常使用ubb功能。
此次进行一次修正,不知道是否可以正常显示。
结果只有在编辑的时候将美元符号用$的十六进制形式写。而且再次编辑之后估计就又不行了。真是麻烦。
开始厌烦了,这个该死的自作聪明的编辑器。
我已经被惹火了。不但是美元符号不见了,语法高亮的诸如color:#nnnnnn;之类的,大部分都变成了奇怪的color:rgb(nn,nn,nn);
什么烂东西。
算了,反正只好采取其他的办法,这个美元符号我是没办法弄上去了。下边代码中的'¥'符号,替换成ASCII码的美元符号即可。
于2006.5.11 21:12 添加
终于忍受不了了,这个东西和歪酷的系统感觉有些不兼容,时常出现奇怪的问题。于是把我的blog上的相关的代码注释掉了。
//---------------两个之间的代码是表情图标用的。转载、引用请注明出处,谢谢
//------------------ function addtext(s){
document.getElementsByTagName("textarea")[0].value = document.getElementsByTagName("textarea")[0].value + s
}
//------------------ //新增函数ubbClicked(n)。
//作用:点击各个ubb按钮时的事件响应函数
//弹出相应的提示的输入框,取得用户的输入,然后将格式化的ubb代码添加到评论框
function ubbClicked(n){
var v = document.getElementsByTagName("textarea")[0].value;
var s = ""; //用于保存用户输入(主)
var s1 = ""; //用于保存超链接情况时的链接文字
switch(n){//不同的ubb按钮
case 0://以此为例说明
s = prompt("请输入要加粗显示的文字:","");//产生输入提示框
if(s == null || s == "") return;//点击取消或者空输入的情况,则直接退出该函数
v = v + "[b]"+ s +"[/b]";//格式化ubb代码,并添加到评论框内容末尾
break;
case 1:
s = prompt("请输入要添加下划线的文字:","");
if(s == null || s == "") return;
v = v + "[u]" + s + "[/u]";
break;
case 2:
s = prompt("请输入超链接的完整URL:","");
if(s == null || s == "") return;
else{
s1 = prompt("请输入超链接显示的文字(留空则显示链接地址):","");
if(s1 == null) return;
if(s1 == ""){
v = v + "[url]"+ s +"[/url]";
}else{
v = v + "[url="+ s +"]" + s1 + "[/u]";
}
}
break;
case 3:
s = prompt("请输入图片的完整URL:","");
if(s == null || s == "") return;
v = v + "[img]" + s + "[/img]";
break;
default:
break;
}
//更新评论框内容
document.getElementsByTagName("textarea")[0].value = v;
}
if(document.getElementById("authcode_td1")){
var i, j;
//------------------ var urlBase = "http://foto.yculblog.com/booker/";
var smileyCode = new Array("[:-D]", "[:-)]", "[>_<]", "[:-(]", "[;-)]", "[*^_^*]", "[T_T]", "[-_-b]", "[:-O]", "[=_=]", "[#_#]", "[180]", "[@_@]", "[;-_-]", "[^.^]", "[XD]", "[-_-!!]");
var smileyReg = new Array(/\[:-D\]/g, /\[:-\)\]/g, /\[>_<\]/g, /\[:-\(\]/g, /\[;-\)\]/g, /\[\*\^_\^\*\]/g, /\[T_T\]/g, /\[-_-b\]/g, /\[:-O\]/g, /\[=_=\]/g, /\[#_#\]/g, /\[180\]/g, /\[@_@\]/g, /\[;-_-\]/g, /\[\^\.\^\]/g, /\[XD\]/g, /\[-_-!!\]/g);
var picName = new Array("m002", "m034", "m036", "m029", "m020", "m073", "m039", "m040", "m011", "m009", "m010", "m180", "m027", "m025", "m018", "m070", "m023");
//------------------ //新增的数组,保存正则表达式,用于匹配ubb代码
var ubbRegxs = new Array(/(\[b\])(.+)(\[\/b\])/ig, /(\[u\])(.+)(\[\/u\])/ig, /(\[url\])(.+)(\[\/url\])/ig, /(\[url=(.+)\])(.+)(\[\/url\])/ig, /(\[img\])(.+)(\[\/img\])/ig);
//------------------ var s2 = "";
for(i=0; i < picName.length; i++){
s2 = s2 + "<img src='" + urlBase+picName[i] + ".gif' alt='' style='cursor:pointer;' onclick='addtext(\"" + smileyCode[i] + "\");' />";
if(i>0&&i%6==0){
s2=s2+"<br />";
}
}
//------------------
//get target
var inputs = document.getElementsByTagName("input");
var td,tbs;
for(i=0; i < inputs.length; i++){
if(inputs[i].getAttribute("name") == "is_private"){
tbs = inputs[i].parentNode.parentNode.parentNode;
break;
}
}
//------------------ //Smiley
var trs = tbs.insertRow(5);
if(trs){
var tds = trs.insertCell(-1);
if(tds){
tds.innerHTML="图标";
tds.setAttribute("align","right");
tds.setAttribute("valign","top");
tds.style.paddingTop = "20px";
}
td = trs.insertCell(-1);
if(td){
td.innerHTML=s2;
}
}
//------------------ //UBB按钮生成部分
trs = tbs.insertRow(6);//在回复表单所在的表格中新建一行,行号为6
if(trs){
var tds = trs.insertCell(-1);//在该行末尾新建一个单元格
if(tds){
tds.innerHTML="UBB";//UBB标题文字
tds.setAttribute("align","right");//靠右对弃
tds.setAttribute("valign","top");//靠顶对弃
}
td = trs.insertCell(-1);//再在该行末尾新建一个单元格
if(td){
//为该单元格添加内容(四个按钮)
//按钮包含onclick事件
td.innerHTML = "<input type=\"button\" value=\"粗 体\" onclick=\"ubbClicked(0);return false;\"/> "
+ "<input type=\"button\" value=\"下划线\" onclick=\"ubbClicked(1);return false;\"/> "
+ "<input type=\"button\" value=\"超链接\" onclick=\"ubbClicked(2);return false;\"/> "
+ "<input type=\"button\" value=\"图 片\" onclick=\"ubbClicked(3);return false;\"/> ";
}
}
//parser
var blocks = document.getElementsByTagName("blockquote");
for(i=0; i < blocks.length; i++){
//------------------ for(j=0; j < smileyReg.length; j++)
blocks[i].innerHTML = blocks[i].innerHTML.replace( smileyReg[j], "<img src='" + urlBase + picName[j] + ".gif' alt='' />" );
//------------------ //新增内容,用于将回复中的ubb解析成对应的html
//使用正则表达式及正则表达式的反向引用
var s = blocks[i].innerHTML;
s = s.replace(ubbRegxs[0], "<b>¥2</b>");
s = s.replace(ubbRegxs[1], "<u>¥2</u>");
s = s.replace(ubbRegxs[4], "<img src=\"¥2\" />");
s = s.replace(ubbRegxs[2], "<a href=\"¥2\"></a>");
s = s.replace(ubbRegxs[3], "<a href=\"¥2\"></a>");
//此处开始处理ubb嵌套出现的问题
s = s.replace( /(<a href=")(.*)(<b>)([^"]*)(<\/b>)([^"]*)">(.*)<\/a>/ig, "<a href=\"¥2¥4¥6\">¥7</a>");
s = s.replace( /(<a href=")(.*)(<u>)([^"]*)(<\/u>)([^"]*)">(.*)<\/a>/ig, "<a href=\"¥2¥4¥6\">¥7</a>");
s = s.replace( /(<img src=")(.*)(<b>)([^"]*)(<\/b>)([^"]*)"\s*\/>/ig, "<img src=\"¥2¥4¥6\" />");
s = s.replace( /(<img src=")(.*)(<u>)([^"]*)(<\/u>)([^"]*)"\s*\/>/ig, "<img src=\"¥2¥4¥6\" />");
//更新回复内容
blocks[i].innerHTML = s;
}
} Edited By Booker @2006-05-08 14:01:48
Edited By Booker @2006-05-08 16:53:39
最新评论 浏览全部的20条评论 »
-
2006-05-10 09:43:46
我也记得,tikoshi回复的那篇也有上面他发的那张图片。
啊啊,我的回复,不知道下次会是什么[T_T]
-
2006-05-10 10:59:46
兔兄,这个是不是还不很稳定?如果是的话就等兔兄完善了我再来偷师[:-D]
毕竟插不进图片的遗憾比失去一条评论要少得多不知道丢失评论和这个ubb代码有什么关系,但是无论怎样,不应该影响到歪酷的数据库的内容才是啊。不过那条评论确实消失的无影无踪。
先不要用啦,一个是不稳定,一个是比较麻烦。[:-(] -
2006-05-10 13:55:58
真的奇怪哈[;-_-]
我记得我写了3条,中间那条有4个UBB测试的没了
是不是你不小心删啦?我绝对没有删除[:-(]
-
2006-05-11 20:20:08 http://hecate266.ycool.com/
超好玩的说……
[:-D]
用力的踩过~哈哈!诡异了,为什么这里的又有问题呢?
-
2006-05-12 11:56:02 http://kaka12345.tianyablog.com
网络全球化最明显的是带来地球村的显著特征,我绕来绕去,几个BLOG里看见不少熟银……[-_-b]
楼上的栗子[XD]
楼顶的ZERO[#_#]
链接的砚鼠[:-(]
不加你链接好像我就是外星人鸟[-_-!!]链吧链吧,网络还是很方便的。至少目前,给我省了不少的国际电话费。[;-)]
-
2006-05-12 14:43:34 http://momo33.ycool.com/
谢谢啦
呵呵
偶弄了几个钟头终于吧表情搬上去了
看的头好晕啊
这些代码……回过头来看看,我也头晕呢[@_@]
-
2006-07-09 18:05:07 http://booboocase.ycool.com/
我想问下怎样可以改用自己的表情?
我上传了要的图,把原来别人相册的地址也改了,表情对应的名字也OK,就是显示不了……
请教……
[>_<]看来我来晚了,你已经用上了
-
2006-09-13 23:21:57 http://tackey.ycool.com/
[=_=]我的表情图片一字排开了 把blog撑得很宽 应该怎么改呢?
看这篇,你需要改一下你每行显示图标的个数
-
2006-10-02 19:43:51 http://lovesoo.ycool.com/
[:-)]
谢谢~嗯?你要用这个么?
这个有问题的,最好不要用 -
2007-02-15 23:55:20 匿名 220.169.*.*
关注您很久了
请问我现在有 18个表情 想放2排
现在我第一排有9 个
第2排8个
多一个在第3排 具体的参数我还是不会
可以告诉我在什么地方调整吗?//这里是新增的变量,用于控制每行显示多少个图标,请适度。
var smileyPerLine = 7;
分行的地方改成下边一段:
/**********************自定义部分结束***************************/
var i, j;
var s2="";
for(i=0; i < picName.length; i++){
s2 = s2 + "<img src='" + urlBase+picName[i] + ".gif' alt='' style='cursor:pointer;' onclick='addtext(\"" + smileyCode[i] + "\");' />";
if((i+1)%smileyPerLine==0){
s2=s2+"<br />";
}
}




