Javascript实例教程(19) 使用HoTMetal(5)


Posted in Javascript onDecember 23, 2006

 

HoTMetal中使用javascript

5.怎样编写脚本来检查上次修改的日期

在本节教程中你将可以学到怎样编写一个宏来检查是否有任何的程序已经利用HoTMetaL中修改过一个文件。这个宏包括了以下几个检查的更新特性:On_Document_Open_Complete、On_Document_Activate和 On_Application_Activate。在前面的教程中,这些宏的名字已经被预定义了,所以这里不能对它们进行修改。这些名字指定了事件来触发宏。这个event-macro关联是隐含的,所以不能通过任何手段来对它进行改写。当我们打开一个文档的时候,比如On_Document_Open_Complete,它总是在完成文件打开的时候被调用的。以下是具体的定义: <MACRO name="On_Document_Open_Complete" lang="JScript"><![CDATA[

var name = ActiveDocument.LocalFullName;

if (Application.ReadableFileExists(name)) { // if document has never been saved, do nothing

Application.Run("On_Document_Save");

}

]]></MACRO>

我们首先提取当前文件夹的文件名:name = ActiveDocument.LocalFullName,然后检查可读的文件是否存在;接着我们运行宏On_Document_Save,这个宏On_Document_Save示范了微软的FileSystemObject作为ActiveX控件的使用方法,这是一个在JavaScript中。这个宏的主要思想是更新文档的LastMod属性以反应磁盘上文档的当前事件:

<MACRO name="On_Document_Save" lang="JScript"<>![CDATA[

var fso = new ActiveXObject("Scripting.FileSystemObject");

var f = fso.GetFile(ActiveDocument.LocalFullName);

var mod = Date.parse(f.DateLastModified);

var props = ActiveDocument.CustomDocumentProperties;

if (props.count != 0) {

props.Add("LastMod", mod);

}

]]></MACRO>

这个宏从FileSystemObject创建了一个ActiveX控件,它包括了微软的脚本库: var fso = new ActiveXObject("Scripting.FileSystemObject");

我们可以通过以下的语句来从磁盘得到文件的属性:f = fso.GetFile(name),然后提取出文件最后一次修改的事件:mod = Date.parse(f.DateLastModified)。我们通过调用ActiveDocument的CustomDocumentProperties 属性来创建了一个用户定义的属性集:props。然后我们利用mod属性来对这个集进行初始化,这时它的数值为"LastMode"。

HoTMetal中使用Javascript

5.怎样编写脚本来检查上次修改的日期

这个On_Document_Activate宏是检查磁盘上的文件是否有与利用HoTMetaL编辑的当前文档相同的上次修改的日期。它提示用户该做什么以防日期不匹配。以下是这个宏的具体代码:

<MACRO name="On_Document_Activate" lang="JScript" id="44" tooltip="Hide_On_Document_Activate"

desc="Runs Macro: Hide_On_Document_Activate"><![CDATA[

// Do this for local documents only

if (ActiveDocument.FullName == ActiveDocument.LocalFullName) {

var name = ActiveDocument.LocalFullName;

if (Application.ReadableFileExists(name)) { // if document has never been saved, do nothing

var fso = new ActiveXObject("Scripting.FileSystemObject");

var f = fso.GetFile(name);

var newMod = Date.parse(f.DateLastModified);

var props = ActiveDocument.CustomDocumentProperties;

if (props.count != 0) {

oldMod = props.Item("LastMod").value;

if (oldMod != newMod) {

var Yes = 6;

var No = 7;

var msg = "The disk version of this document has changed from the\n";

msg += "version in memory. Do you want to re-open the document?";

var ret = Application.MessageBox(msg, 36, "Document Changed");

if (ret == Yes) {

ActiveDocument.Reload();

}

// Reset the timestamp regardless of the user's response

// This will prevent the dialog from always showing

Application.Run("On_Document_Open_Complete");

}

}

}

}

]]></MACRO>

我们再检查文件是否装载了: ActiveDocument.FullName == ActiveDocument.LocalFullName。然后我们验证一下文件是否被保存到磁盘中: Application.ReadableFileExists(name). 类似于前面的On_Document_Open_Complete 宏,我们创建一个ActiveX控件并且提取出文件的上次修改的日期,代码如下:

var fso = new ActiveXObject("Scripting.FileSystemObject");

var f = fso.GetFile(name);

var newMod = Date.parse(f.DateLastModified);
HoTMetal中使用Javascript

5.怎样编写脚本来检查上次修改的日期

接着,我们调用当前文档的定制属性集:props = ActiveDocument.CustomDocumentProperties 并且检查这个属性的数字是否不等于零。我们已经在前面的On_Document_Open_Complete 宏中已经保存了,并将它赋值给oldMod:

oldMod = props.Item("LastMod").value

当我们发现oldMod (来自打开的文档) and newMod (来自磁盘)之间的矛盾的时候,我们应该告诉用户是否从磁盘上转载了这个文件:

var Yes = 6;

var No = 7;

var msg = "The disk version of this document has changed from the\n";

msg += "version in memory. Do you want to re-open the document?";

var ret = Application.MessageBox(msg, 36, "Document Changed");

if (ret == Yes) {

ActiveDocument.Reload();

}

最后,我们通过模仿打开的操作来重置当前文档的日期:

Application.Run("On_Document_Open_Complete");

我们想扩展这个更新特性的检查并触发它,而不管在这个文档是当前的还是当这个应用程序是当前的。这时我们可以定义On_Application_Activate宏,这个宏只是调用上面的宏:

<MACRO name="On_Application_Activate" lang="JScript"><![CDATA[

Application.Run("On_Document_Activate");

]]></MACRO>

现在我们需要复制On_Document_Save功能到On_Document_SaveAs宏:

<MACRO name="On_Document_SaveAs" lang="JScript"<>![CDATA[

Application.Run("On_Document_Save");

]]></MACRO>

最后还是对它进行一下测试吧。先在HotMetaL PRO 6.0中打开一个文档。并在你喜欢的编辑器中打开相同的文档。并在任何地方插入一个空格符再将它保存到磁盘中。当你切换到HoTMetaL应用程序,你将可以得到如图1的信息。

Javascript实例教程(19) 使用HoTMetal(5)

(图1)

Javascript 相关文章推荐
jquery删除数据记录时的弹出提示效果
May 06 Javascript
关闭页面window.location事件未执行的原因及解决方法
Sep 01 Javascript
Javascript中arguments和arguments.callee的区别浅析
Apr 24 Javascript
javascript简单实现滑动菜单效果的方法
Jul 27 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
Nov 29 Javascript
Bootstrap+jfinal实现省市级联下拉菜单
May 30 Javascript
svg动画之动态描边效果
Feb 22 Javascript
JavaScript 基础表单验证示例(纯Js实现)
Jul 20 Javascript
Vue.js递归组件构建树形菜单
Dec 24 Javascript
微信小程序实现文字从右向左无限滚动
Nov 18 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
Aug 10 Javascript
antd table按表格里的日期去排序操作
Nov 17 Javascript
Javascript实例教程(19) 使用HoTMetal(4)
Dec 23 #Javascript
Javascript实例教程(19) 使用HoTMetal(3)
Dec 23 #Javascript
Javascript实例教程(19) 使用HoTMetal(2)
Dec 23 #Javascript
Javascript实例教程(19) 使用HoTMetal(1)
Dec 23 #Javascript
用于自动添加Digg This!按钮的JavaScript
Dec 23 #Javascript
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
Dec 22 #Javascript
获取Javscript执行函数名称的方法
Dec 22 #Javascript
You might like
第六节--访问属性和方法
2006/11/16 PHP
PHP中的strtr函数使用介绍(str_replace)
2011/10/20 PHP
php多文件上传功能实现原理及代码
2013/04/18 PHP
解决PHP超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
解析CodeIgniter自定义配置文件
2013/06/18 PHP
PHP 前加at符合@的作用解析
2015/07/31 PHP
Yii2.0预定义的别名功能小结
2016/07/04 PHP
完美解决thinkphp唯一索引重复时出错的问题
2017/03/31 PHP
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
基于jquery的图片懒加载js
2010/06/30 Javascript
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
深入浅析JavaScript面向对象和原型函数
2016/02/06 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
Canvas放置反弹效果随机图形(实例)
2017/08/17 Javascript
Vue实现点击显示不同图片的效果
2019/08/10 Javascript
js实现移动端tab切换时下划线滑动效果
2019/09/08 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
介绍Python的@property装饰器的用法
2015/04/28 Python
python单元测试unittest实例详解
2015/05/11 Python
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
python模拟事件触发机制详解
2018/01/19 Python
浅谈python中真正关闭socket的方法
2018/12/18 Python
对python字典过滤条件的实例详解
2019/01/22 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
美国女性服饰销售网站:Nasty Gal(坏女孩)
2016/07/26 全球购物
琳达·法罗眼镜英国官网:Linda Farrow英国
2021/01/19 全球购物
运动会入场词200字
2014/02/15 职场文书
《充气雨衣》教学反思
2014/04/07 职场文书
2015年南京大屠杀纪念日活动总结
2015/03/24 职场文书
python数字图像处理数据类型及颜色空间转换
2022/06/28 Python
Python+pyaudio实现音频控制示例详解
2022/07/23 Python