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 相关文章推荐
js每次Title显示不同的名言
Sep 25 Javascript
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
May 31 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
Jul 22 Javascript
javascript面向对象之对象的深入理解
Jan 13 Javascript
关于Jquery中的bind(),on()绑定事件方式总结
Oct 26 Javascript
JS匿名函数实例分析
Nov 26 Javascript
Vue实现购物车功能
Apr 27 Javascript
Angular.js指令学习中一些重要属性的用法教程
May 24 Javascript
React 组件渲染和更新的实现代码示例
Feb 21 Javascript
es6 symbol的实现方法示例
Apr 02 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
May 12 Javascript
vue修饰符.capture和.self的区别
Apr 22 Vue.js
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/10/09 PHP
ThinkPHP令牌验证实例
2014/06/18 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
2011/02/26 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
2015/03/18 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
2018/07/07 Javascript
mac上配置Android环境变量的方法
2018/07/08 Javascript
Vue监听数据渲染DOM完以后执行某个函数详解
2018/09/11 Javascript
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
Python实现优先级队列结构的方法详解
2016/06/02 Python
mac下pycharm设置python版本的图文教程
2018/06/13 Python
python列表,字典,元组简单用法示例
2019/07/11 Python
对python3中的RE(正则表达式)-详细总结
2019/07/23 Python
Python如何在DataFrame增加数值
2020/02/14 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
python和php哪个更适合写爬虫
2020/06/22 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
sklearn中的交叉验证的实现(Cross-Validation)
2021/02/22 Python
今天学到的CSS最新技术(与图片背景相关)
2012/12/24 HTML / CSS
EGO Shoes美国/加拿大:英国时髦鞋类品牌
2018/08/04 全球购物
基督教卡片、励志礼品、家居装饰等:DaySpring
2018/10/12 全球购物
StubHub希腊:购买体育赛事、音乐会和剧院门票
2019/08/03 全球购物
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
通用C#笔试题附答案
2016/11/26 面试题
应届毕业生自我鉴定范文
2013/12/27 职场文书
入学申请自荐信范文
2014/02/26 职场文书
社保转移委托书范本
2014/10/08 职场文书
学校师德师风整改措施
2014/10/27 职场文书
战马观后感
2015/06/08 职场文书
环保建议书作文400字
2015/09/14 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
初中政治教师教学反思
2016/02/23 职场文书