Introduction
Back in JavaScript Regular Expression Tester, I said that I could save all of the editable attributes in the interface externally using JSON. Now I will explain how.
Additional requirements
You will need opensave.dll from the download code found in this old article. The file opensave.dll provides the open/save dialogue box for opening and saving files from within this application, and the instructions for installing/registering the DLL file are within the text of that article. You will also find that I reference the following files from that archive: file_open.GIF, file_open_pressed.GIF, file_save.GIF, and file_save_pressed.GIF.
Points of Interest
I have implemented this in an HTA, or HTML Application. This is a browser window that looks like a normal Windows application and has full access to locally scriptable components (in other words, without browser security). In addition to the files from the original article, two new files are required to make the regular expressions that are being worked on to be saved. The first file, regex2.hta, calls in the second file, menu3.htm, as an additional frame. You can think of this first file as replacing the original regex2.htm, or that it replaces the parent frame. The second file, menu3.htm, contains the interface and functions for loading and for saving the data to and from the disk. The file JSON.js contains the functions for exporting the RegExTest
object as text. It converts the object into a JavaScript Notation Object, or a string literal of the object. That means that one call of the eval()
function gives us our object back when reading it from the disk. One function call to stringify()
(from JSON.js) is all we need to export our object as text to save it to disk.
The actual code for loading and for saving looks like this:
var strFilename = "RegEx.ret";
function open_file() {
strFilename = myFileObject.getFilename('open',strFilename,
'*.ret','RegEx Test Files (*.ret)')
if (strFilename != '') {
var aa = myFileObject.loadFile(strFilename);
eval('top.RegExTest = ' + aa + ';');
} else {
strFilename = "RegEx.ret"
};
top.CopyDown();
};
function save_file () {
top.CopyUp();
if (strFilename == '') {strFilename = "RegEx.ret"};
var strNewFilename = myFileObject.getFilename("save",
strFilename,"*.ret","RegEx Test Files (*.ret)")
if (strNewFilename != "") {
if (!myFileObject.saveFile(strNewFilename, stringify(top.RegExTest))) {
alert("failed to save file");
} else {
strFilename = strNewFilename;
};
};
};
File Contents
filename |
Description |
regex2.hta |
Parent frame, RegExTest object |
support/menu3.htm |
Interface and functions for saving/loading the RegExTest object to/from disk |
others |
See my other article for details |
History
First posted 2004-10-20.