仰视. 寻找视野外的色彩.发现了天空.它悬挂着彩虹...
 
 
« 上一篇: 捡来的维尼 下一篇: sweet deguri 可以做签名的可爱插图 »
呀。 @ 2006-05-23 19:29

效果图:


石头兔

===========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##之前应该也是可以的。

转载、使用请注明出处,谢谢

下边是全部代码的注释说明:
<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。

第四,怀疑歪酷对回复框的后台代码进行了修改,导致原来的[ >_< ]变成了[ &gt;_&lt; ]。要正常显示,请将smileyReg里的/\[>_<\]/g改成/\[&gt;_&lt;\]/g。



最新评论


ggggg

2007-12-26 16:05 匿名 203.212.*.*



ssss

2008-12-02 11:34 匿名 123.127.*.*


评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定