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 相关文章推荐
JavaScript随机排序(随即出牌)
Sep 17 Javascript
JS前端框架关于重构的失败经验分享
Mar 17 Javascript
jQuery 三击事件实现代码
Sep 11 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
Nov 23 Javascript
vue使用drag与drop实现拖拽的示例代码
Sep 07 Javascript
详解vue组件基础
May 04 Javascript
vue 本地环境跨域请求proxyTable的方法
Sep 19 Javascript
Vue实现回到顶部和底部动画效果
Jul 31 Javascript
layui 弹出层值回传解决方式
Nov 14 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
Feb 27 Javascript
如何阻止移动端浏览器点击图片浏览
Aug 29 Javascript
JavaScript实现网页下拉菜单效果
Nov 20 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
真正的ZIP文件操作类(php)
2007/07/21 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
2013/08/07 PHP
php使用ob_start()实现图片存入变量的方法
2014/11/14 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
PHP实现支持CURL字符串证书传输的方法
2019/03/23 PHP
php转换上传word文件为PDF的方法【基于COM组件】
2019/06/10 PHP
很可爱的输入框
2008/08/03 Javascript
细品javascript 寻址,闭包,对象模型和相关问题
2009/04/27 Javascript
JavaScript 学习笔记(十二) dom
2010/01/21 Javascript
ExtJS中文乱码之GBK格式编码解决方案及代码
2013/01/20 Javascript
js获取checkbox复选框选中的选项实例
2014/08/24 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
2014/09/26 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
javascript的几种写法总结
2016/09/30 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
详解vue2.0 不同屏幕适配及px与rem转换问题
2018/02/23 Javascript
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
python使用正则表达式替换匹配成功的组
2017/11/17 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
2019/08/10 Python
关于Python-faker的函数效果一览
2019/11/28 Python
Python3+Selenium+Chrome实现自动填写WPS表单
2020/02/12 Python
通过python 执行 nohup 不生效的解决
2020/04/16 Python
Django使用rest_framework写出API
2020/05/21 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
美工的岗位职责
2013/11/14 职场文书
优秀毕业生就业推荐信
2014/05/22 职场文书
四风对照检查材料思想汇报
2014/09/20 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
在Windows下安装配置CPU版的PyTorch的方法
2021/04/02 Python
win10更新失败无限重启解决方法
2022/04/19 数码科技
Python编写冷笑话生成器
2022/04/20 Python
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL