效果图:

石头兔

石头兔
===========2006.5.23 更新===========
目前的代码有两种版本,一种是
td.innerHTML= td.innerHTML + s2;
将表情图标插在评论框上边的,
另一种是:
td = trs.insertCell(-1);
if(td){
td.innerHTML=s2;
}
针对这两种,首先,需要将代码中的inputs[i].getAttribute("name") == "is_private"中的is_private改成url。
然后对于第二种版本的代码,需要找到var trs = tbs.insertRow(5);一行,将其中的5改为你自己的行号。5的话,应该会在评论框的下边。
原因是不是因为“丢小纸条”,而是因为歪酷把评论“不公开”给去掉了,原来的代码中给表情图标定位是依赖于"不公开"的那个选框的。现在改掉了,改成url,也就是网址的输入框,不论如何,歪酷不会把这个也给去掉吧。
PS:歪酷是不是觉得版聊很猖狂,所以才给加上小纸条的呢?而且似乎小纸条也具有不公开的特性,所以歪酷就索性把不公开给去掉了。
--------------------------
首先,这个东西的功能很简单,就是在评论框上边的"不公开"后边的checkbox的表格单元中,新起一行,将表情图标的html代码(<img />)加进去。然后点击某个图标,就会在评论框中内容的最后加上该图标对应的表情代码(如[:-)])。评论发布后,程序的最后一段专门负责将所有评论(确切的说是所有blockquote)的内容中的表情代码替换成表情图标的html代码。
注意:只适用于所有图标文件来自同一地址同一目录。默认只适用于gif图标文件。若要使用jpg文件,请将代码中的gif替换成jpg。但是,此修改将变成只能使用jpg,而无法使用gif。若要混用,则将代码中的gif删除,在添加文件名的数组中,加上点号和扩展名,应该就可以了。不过估计这种情况十分少见,绝大大部分应该还是gif的。
至于这段脚本的添加位置,最好加在模板代码的包含了{ content }的标签的后边。
比如是<div>{ content }</div>之后,或者是<td>{ content }</td>之后(未经测试)
如果你实在不知道加在什么地方,那么加在模板的##FOOTER##之前应该也是可以的。
转载、使用请注明出处,谢谢
下边是全部代码的注释说明:
补充说明 :
虽然在回复别人的评论的时候,也是可以使用表情图标的,不过似乎必须得用表情代码代替。不能那么直观的点点就成。
考虑到一种解决办法,就是写一个Greasemonkey的javascript脚本,用于在管理回复的时候,在页面上显示出可以点击操作的表情图标。这个不是很难。
对于不知道Greasemonkey是什么的人,我只能很抱歉,如果你要回复别人的评论的时候用表情图标,就必须得用表情代码。值得庆幸的是,表情代码是可以自定义的。
再补:
关于使用不同网站的不同目录的不同格式的图片的问题:
首先,如果用不同格式的图片,把代码中的.gif删掉。然后用不同网站不同目录的图片的情况,请把urlBase的值设为空。然后在图片名的数组picName中,使用完整的图片的url就可以了。其实这个urlBase只是为了缩短代码长度。
看来兼容性还是不错的。
--------再补 2006.5.6--------
关于增加表情的问题。
首先,回复框的表情列表中的显示数量是由picName中的数量决定的。
其次,如果要增加表情,最好同时在picName、smileyCode和smileyReg中增加。这三者是对应的。要增加更多的图标,就得给出对应的smileyCode和smileyReg。表情代码(smileyCode)可以随便写,但是要在smileyReg中加上对应的正则表达式。
第三,要增加表情图标,请首先确定图标对应的表情代码,然后去简单的学习一下正则表达式,至少要知道正则表达式中有哪些关键字符。然后自己写出对应的正则表达式。虽说有句话叫“好人做到底,送佛送到西”,但是我选择另一句,叫做“授人以鱼不如授人以渔”。
第三,解释一下这个脚本的原理:点击图标,就在留言中插入对应的符号。而另外有一段程序,专门用于把这些符号重新显示成对应的图标。而替换的过程中,就是使用SmileyReg,找到对应的smileyCode,然后再替换成相应的picName。
第四,怀疑歪酷对回复框的后台代码进行了修改,导致原来的[ >_< ]变成了[ >_< ]。要正常显示,请将smileyReg里的/\[>_<\]/g改成/\[>_<\]/g。
目前的代码有两种版本,一种是
td.innerHTML= td.innerHTML + s2;
将表情图标插在评论框上边的,
另一种是:
td = trs.insertCell(-1);
if(td){
td.innerHTML=s2;
}
针对这两种,首先,需要将代码中的inputs[i].getAttribute("name") == "is_private"中的is_private改成url。
然后对于第二种版本的代码,需要找到var trs = tbs.insertRow(5);一行,将其中的5改为你自己的行号。5的话,应该会在评论框的下边。
原因是不是因为“丢小纸条”,而是因为歪酷把评论“不公开”给去掉了,原来的代码中给表情图标定位是依赖于"不公开"的那个选框的。现在改掉了,改成url,也就是网址的输入框,不论如何,歪酷不会把这个也给去掉吧。
PS:歪酷是不是觉得版聊很猖狂,所以才给加上小纸条的呢?而且似乎小纸条也具有不公开的特性,所以歪酷就索性把不公开给去掉了。
--------------------------
首先,这个东西的功能很简单,就是在评论框上边的"不公开"后边的checkbox的表格单元中,新起一行,将表情图标的html代码(<img />)加进去。然后点击某个图标,就会在评论框中内容的最后加上该图标对应的表情代码(如[:-)])。评论发布后,程序的最后一段专门负责将所有评论(确切的说是所有blockquote)的内容中的表情代码替换成表情图标的html代码。
注意:只适用于所有图标文件来自同一地址同一目录。默认只适用于gif图标文件。若要使用jpg文件,请将代码中的gif替换成jpg。但是,此修改将变成只能使用jpg,而无法使用gif。若要混用,则将代码中的gif删除,在添加文件名的数组中,加上点号和扩展名,应该就可以了。不过估计这种情况十分少见,绝大大部分应该还是gif的。
至于这段脚本的添加位置,最好加在模板代码的包含了{ content }的标签的后边。
比如是<div>{ content }</div>之后,或者是<td>{ content }</td>之后(未经测试)
如果你实在不知道加在什么地方,那么加在模板的##FOOTER##之前应该也是可以的。
转载、使用请注明出处,谢谢
下边是全部代码的注释说明:
| <script type="text/javascript"> <!-- //函数 addtext //用途 将参数s的内容作为字符串添加到评论框中。 function addtext(s){ //考虑到页面上只会有一个评论框存在,因此直接使用getElementsByTagName取得 //得到评论框对象后,将s添加到评论框内容的末尾。 document.getElementsByTagName("textarea")[0].value = document.getElementsByTagName("textarea")[0].value + s } //开始主程序 //判断是否在单篇日志的页面,判断方法是页面中是否有验证码 if(document.getElementById("authcode_td1")){ //判断成功 var i, j; //循环计数 //自定义参数之一: //用于指定图标文件地址的url路径,到最后一层文件夹为止 //也就是说这个url后边就是****.gif的图标文件了。 //可自定义。 var urlBase = "http://booker.yculblog.com/images/smiley/1/"; //自定义参数之二: //表情图片文件的文件名。紧接着上一参数,不包括点号和扩展名。 //注意:为了缩短代码长度,只考虑这些表情是来自同一地址的同一目录。 //可自定义。 var picName = new Array("1", "2", "3", "4", "5", "6", "7", "8", "10", "11", "19", "20"); //自定义参数之三: //数组,用于保存图标对应的代码,可自定义。 var smileyCode = new Array("[:-)]", "[:-(]", "[XD]", "[;-)]", "[*^_^*]", "[:-O]", "[o_O]", "[T_T]", "[-_-b]", "[:-D]", "[#_#]", "[^.^]"); //自定义参数之四: //这个最难,虽然说上边都很好自定义。但这个就有难度了。 //此参数为一个正则表达式数组。用于对应上边的表情代码。 //可自定义。 var smileyReg = new Array(/\[:-\)\]/g, /\[:-\(\]/g, /\[XD\]/g, /\[;-\)\]/g, /\[\*\^_\^\*\]/g, /\[:-O\]/g, /\[o_O\]/g, /\[T_T\]/g, /\[-_-b\]/g, /\[:-D\]/g, /\[#_#\]/g, /\[\^\.\^\]/g); //定义表情图表列表 var s2 ="<br />"; //根据图标的数量,用循环将所有图表的html代码加在一起 for(i=0; i < picName.length; i++){ //其中有定义了鼠标指针为手,加入了点击事件。 //点击事件调用最初定义的函数addtext s2 = s2 + "<img src='" + urlBase+picName[i] + ".gif' alt='' style='cursor:pointer;' onclick='addtext(\"" + smileyCode[i] + "\");' />"; } //定位 //获得当前脚本以前的html代码中的所有的input对象 var inputs = document.getElementsByTagName("input"); var td;//用于保存“不公开”选框外边的td对象 for(i=0; i < inputs.length; i++){ //如果该input对象的name属性为"is_private" //则就是我们要找的,取得其parentNode,也就是那个td对象 //中止循环 if(inputs[i].getAttribute("name") == "is_private"){ td = inputs[i].parentNode; break; } } //如果找到该td if(td){ //取得该td外的tr对象 var tr = td.parentNode; //将上边生成的表情图标列表添加到复选框的后边(有换行) td.innerHTML= td.innerHTML + s2; //将"不公开"三个字所在的表格设为纵向顶端对齐 tr.getElementsByTagName("td")[0].setAttribute("valign", "top"); //开始对已有评论中的表情代码进行替换 //由代码(如[:-)])到图片的html代码 //取得所有的blockquote,因此,也许存在误杀(正文中的blockquote) var blocks = document.getElementsByTagName("blockquote"); //二重循环,搜索每个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='' />" ); } } } //--> </script> |
补充说明 :
虽然在回复别人的评论的时候,也是可以使用表情图标的,不过似乎必须得用表情代码代替。不能那么直观的点点就成。
考虑到一种解决办法,就是写一个Greasemonkey的javascript脚本,用于在管理回复的时候,在页面上显示出可以点击操作的表情图标。这个不是很难。
对于不知道Greasemonkey是什么的人,我只能很抱歉,如果你要回复别人的评论的时候用表情图标,就必须得用表情代码。值得庆幸的是,表情代码是可以自定义的。
再补:
关于使用不同网站的不同目录的不同格式的图片的问题:
首先,如果用不同格式的图片,把代码中的.gif删掉。然后用不同网站不同目录的图片的情况,请把urlBase的值设为空。然后在图片名的数组picName中,使用完整的图片的url就可以了。其实这个urlBase只是为了缩短代码长度。
看来兼容性还是不错的。
--------再补 2006.5.6--------
关于增加表情的问题。
首先,回复框的表情列表中的显示数量是由picName中的数量决定的。
其次,如果要增加表情,最好同时在picName、smileyCode和smileyReg中增加。这三者是对应的。要增加更多的图标,就得给出对应的smileyCode和smileyReg。表情代码(smileyCode)可以随便写,但是要在smileyReg中加上对应的正则表达式。
第三,要增加表情图标,请首先确定图标对应的表情代码,然后去简单的学习一下正则表达式,至少要知道正则表达式中有哪些关键字符。然后自己写出对应的正则表达式。虽说有句话叫“好人做到底,送佛送到西”,但是我选择另一句,叫做“授人以鱼不如授人以渔”。
第三,解释一下这个脚本的原理:点击图标,就在留言中插入对应的符号。而另外有一段程序,专门用于把这些符号重新显示成对应的图标。而替换的过程中,就是使用SmileyReg,找到对应的smileyCode,然后再替换成相应的picName。
第四,怀疑歪酷对回复框的后台代码进行了修改,导致原来的[ >_< ]变成了[ >_< ]。要正常显示,请将smileyReg里的/\[>_<\]/g改成/\[>_<\]/g。




