惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Microsoft Security Blog
Microsoft Security Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
V
Visual Studio Blog
宝玉的分享
宝玉的分享
IT之家
IT之家
人人都是产品经理
人人都是产品经理
T
The Blog of Author Tim Ferriss
I
InfoQ
B
Blog RSS Feed
T
Threatpost
博客园_首页
M
MIT News - Artificial intelligence
Spread Privacy
Spread Privacy
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Know Your Adversary
Know Your Adversary
U
Unit 42
Engineering at Meta
Engineering at Meta
C
Cyber Attacks, Cyber Crime and Cyber Security
月光博客
月光博客
Scott Helme
Scott Helme
T
Tor Project blog
有赞技术团队
有赞技术团队
AWS News Blog
AWS News Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Last Week in AI
Last Week in AI
S
Schneier on Security
Vercel News
Vercel News
博客园 - Franky
C
Cybersecurity and Infrastructure Security Agency CISA
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
L
LangChain Blog
爱范儿
爱范儿
Google DeepMind News
Google DeepMind News
The GitHub Blog
The GitHub Blog
雷峰网
雷峰网
Latest news
Latest news
C
CXSECURITY Database RSS Feed - CXSecurity.com
Hugging Face - Blog
Hugging Face - Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
G
GRAHAM CLULEY
S
Security Affairs
A
About on SuperTechFans
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
大猫的无限游戏
大猫的无限游戏
W
WeLiveSecurity
Cisco Talos Blog
Cisco Talos Blog
罗磊的独立博客

博客园 - ocean

系统升级日记(4):如何快速的修改Infopath中的各种URL 系统升级日记(3)- 升级SharePoint解决方案和Infopath 系统升级日记(2)- 升级到SharePoint Server 2013 系统升级日记(1)- 升级到SQL Server 2012 一边是招人难,一边是找工作难,这个世界真的很有意思 SharePoint2010-CustomAction中的ContentTypeId属性已经消失了 office2010和sharepoint2010可以下载了? 一个子目录里放100W个文件及SQL Server File Stream中放100W文件,会怎么样? Prism2.0之自定义ModuleCatalog(for Silverlight) Teched2008 DEV301 ADO.NET Data Service资料下载 Teched 2008课程:ADO.NET Data Service & UC开发概览 我的基于Silverlight2的相册,也刚刚升级到了RTW了。 很囧,请大家不要给我留言 在MOSS中实现自动上传图片 在Windows Server2008中运行MOSS不能启动Excel Service的问题 我也谈谈执行力 微软新技术巡展活动 将网站从WSS2.0升级到WSS3.0的心得 借宝地宣传一下:海洋工作室sps2007版用户系统正式运行!
在MOSS中给增强型RTF字段增加按钮
ocean · 2008-08-01 · via 博客园 - ocean

很多人会抱怨MOSS默认的讨论区比较弱,比起大部分BBS来说,确实少了很多功能。实际上对于MOSS的讨论区来说,已经是一个树型结构了, 我们只要稍加改善,就能够让讨论区更完善一些。

昨天中午和同事讨论起这个话题,认为讨论区只要要改进4个地方:

  • 1:贴图,也就是能否在编辑帖子的时候,同时上传图片,并且贴到正文里面。这个我在前几天的blog里面已经讲了,这个功能已经实现了, 大家可以参考:在MOSS中实现自动上传图片
  • 2:有头像,这个功能MOSS本身就有。大家看我的讨论区,我的帖子就有我的头像,当然现在还不允许大家自己设置头像,我想以后我会实现这个功能。
  • 3:有签名,能够在发帖的时候增加签名档,这个是需要改进的地方。也是我考虑下一步去实现的。
  • 4:能够贴表情,也就是类似QQ,MSN一样,能有贴表情的按钮。

    今天我们就讲讲如何实现第4个,首先看贴图:

    这张图截自我的网站的讨论区, http://www.oceanstudio.net/Lists/SharePoint3/AllItems.aspx,大家可以自己去看实际效果,当然为了防止恶意灌水,本讨论区需要注册。

    我的实现方式很简单,讨论区默认的正文输入框是一个增强型的RTF,我做的就是在上面加了一个按钮。

    上篇Blog我们曾经讲过,如果要替换掉整个编辑器,我只要重写RTE_ConvertTextAreaToRichEdit()这个函数就可以了。但是有时我只希望增加一两个按钮,如何做呢?

    FullHtml,也就是增强型RTF的工具栏的按钮,都在RTE_FullHtmlToolBarDefinitionFactory()这个函数里面定义这,这里面有一个toolbar变量,我们只要在合适 的位置,增加我们的按钮就可以,我把它加入到插入图片的按钮后面,向toolbar加入按钮的时候,首先要生成一个新按钮,按钮有三种:

  • 1:ExecCmdButton,这属于命令按钮,就是点中按钮后没有多余界面出来,比如copy,paste,cut等
  • 2: JScriptButton,这些都会弹出对话框,比如“插入图片”,“插入链接”这些按钮等
  • 3:SpecialButton,这些就是类似我做的这个插入表情的按钮,它会有一个下拉单,让你选择,另外还有就是选择“前景色”,“背景色”的这些按钮。就是类似下图这样的。
    //////////////////////自定义按钮///////////////////////////
    //增加表情按钮
    toolBar.push(
    new C_RTE_TB_SpecialButton(
    g_strRTEInsertEmoticonMnemonic,
    RTE_GenerateInsertEmoticonToolBarButtonHtml,
    true,
    new C_RTE_TB_SetEnabledAlways()));
    ///////////////////////////////////////////////////////////
    

    创建好按钮后,就要生成这个按钮的主体html,这个我们定义一个新函数:RTE_GenerateInsertEmoticonToolBarButtonHtml。生成完按钮主体后, 就要生成那个表情选择器,这个选择器我也创建了一个新函数RTE_DD_OpenInsertEmoticonSelector。选择器实际上有现成的一些函数可以调用。 这个函数就是:RTE_DD_GenerateMenuItemHtml,每个MenuItem就是一个表情按钮。通过这些已经预定好的函数生成选择器后,你会发现你不用去设定位置, 它会自动的在你的按钮的下方出现。

    当你的按钮出来之后,你需要做的就是点击按钮返回的动作,这个动作会调用RTE_ExecuteCommandOnSelection这个函数,在这个函数里面,执行了 docEditor.execCommand()函数,执行插入图像的动作,每个表情就是一个图片。

    if (strCommand == "InsertEmoticon") {
    docEditor.execCommand("InsertImage", fUserInterface,
    RTE_GetServerRelativeImageUrl("Emoticon/" + strValue));
    }
    

    这里提醒大家注意一下的就是,我们的toolbar是在一个Iframe里面的,所以点击了表情按钮之后,实际上的函数调用发生在Iframe内部,如果你想让它调用 父框架的函数,那么请使用parent或者top。这个按钮我一共花了3个小时,但是这个小问题就花了我1个小时的时间,之后才恍然大悟想起来表情按钮都是在Iframe中。

    当然实际上做一个按钮不需要那么长时间,除了刚刚的那个Iframe问题之外,我还花了一些时间来收集表情图片,并且一个一个的写到数组里面,这个也属于个体力活。

    当我们给这个工具栏加上按钮后,那么每个字段,只要采用了增强RTF型,就会有这个插入表情的功能。

    本篇blog首发:oceanstudio-blog

    欢迎访问海洋工作室