I have been looking at the files from a Mozilla Firefox
add-on that has the ability to save pages. I am trying to find a way to make it
save a file type that it does save, but Firefox uses. The format type is MAFF. I
got some idea of how to and that this could be done from the maker of the
add-on’s website here.
iMacros thread
Document suggesting MAFF usage
I have questions related to the JavaScript I am trying to manipulate. It has been a while since
I have worked with JavaScript but it all coming back fast. I have two pieces of
code are that related to my questions, one is the suggested way to make Firefox save
MAFF format (code 1), and the other is snippet the JavaScript from the add-on.
My questions are:
-
I have notice the place where the add-on is accessing objects,
Firefox’s objects via its own written code, How would (code 1) use
the example (code 2) MAFF *.jsm information does it have to be
include at the top? Does it even need it? -
I see how the simple example uses some of the same component
classes, component interfaces ect. I have tracked them down in the
add-on (code 1) they seem similar and all equally present. It seems
as the MAFF (code block 2) is referring to its own use of the
browser persist object so is there a way to set up something like a
wbp variable that would use two of them at the same time? Or is
there a better way to do that. Will MAFF not use the one that is
there? The simpler example creates a new MafObject instance if there
are two libraries how will this work? Or could this work? And I am
not suggesting that from any point of know how I am asking how
because know it needs to used but I don’t know how -
I have already tested just adding he code to the area I am showing
here in the form it in something like if (type == “maff”) and all
places where it needs to be replaced. After trying it only creates a
file *.maff when really examined it was still a *.htm file, but how
could it this be written taken in account for what needs to happen
for this code to have what the MAFF format needs. -
There are files that I have tracked down that have dependent code in
them. Everything the simpler example seems to have it is present in
the add-on all over the place in different files. But can somebody
think of places that they know of that are necessary to update if
you are working with these dependencies like Mozilla’s component
classes and *.jsm imports.MacroPlayer.prototype.ActionTable["saveas"] = function (cmd) { var folder = imns.unwrap(this.expandVariables(cmd[2])); var type = imns.unwrap(this.expandVariables(cmd[1])).toLowerCase(); if (folder == "*") { folder = imns.Pref.getFilePref("defdownpath").path; } try { var f = imns.FIO.openNode(folder); } catch (e) { throw new RuntimeError("Wrong path "+folder, 932); } if (!f.exists()) throw new RuntimeError("Path "+folder+" does not exists", 932); var file = imns.unwrap(this.expandVariables(cmd[3])), t; var __doc_name = function(win) { var name = win.location.pathname; if (/\/([^\/]*)$/.test(name)) name = RegExp.$1; if (!name.length) { if (/^(?:www\.)(\S+)/.test(win.location.hostname)) name = RegExp.$1; } if (!name.length) name = win.document.title; if (!name.length) return "unknown"; if (/^(.*)\.(?:\w+)$/.test(name)) return RegExp.$1; return name; }; var re = new RegExp('\\s*[:*?|<>\\"/]+\\s*', "g"); if (type == "extract") { if (file == "*") { file = "extract.csv"; } else if (t = file.match(/^\+(.+)$/)) { file = "extract"+t[1]+".csv"; } file = file.replace(re, "_"); var data = this.getExtractData(); this.clearExtractData(); data = data.replace(/\"/g, '""'); data = '"'+data.replace(/\[EXTRACT\]/g, '","')+'"'; f = imns.FIO.openNode(folder); f.append(file); imns.FIO.appendTextFile(f, data+"\r\n"); } else { if (file == "*") { file = __doc_name(window.content); } else if (t = file.match(/^\+(.+)$/)) { file = __doc_name(window.content) + t[1]; } file = file.replace(re, "_"); var wbp = null, doc = window.content.document; wbp = imns.Cc['@mozilla.org/embedding/browser/nsWebBrowserPersist;1']; wbp = wbp.createInstance(imns.Ci.nsIWebBrowserPersist); var flags = wbp.PERSIST_FLAGS_REPLACE_EXISTING_FILES; wbp.persistFlags = flags; var f = imns.FIO.openNode(folder); if (type == "cpl") { if (!/html?$/.test(file)) file += ".htm"; f.append(file); var files_dir = f.path.replace(/\.html?$/, "_files"); files_dir = imns.FIO.openNode(files_dir); wbp.saveDocument(doc, f, files_dir, null, null, 0); } else if (type == "htm") { if (!/html?$/.test(file)) file += ".htm"; f.append(file); wbp.saveDocument(doc, f, null, null, null, 0); } else if (type == "txt") { if (!/\.\w+$/.test(file)) file += ".txt"; f.append(file); wbp.saveDocument(doc, f, null, "text/plain", wbp.ENCODE_FLAGS_FORMAT_FLOWED, 0); } else if (/^png|jpeg$/.test(type)) { this.savePageAsImage(window.content, file, f, type); } else { throw new BadParameter("iMacros for Firefox supports only "+ "CPL|HTM|TXT|EXTRACT|PNG|JPEG SAVEAS types"); } } }; var doc = gBrowser.contentDocument; var file = Components.classes["@mozilla.org/file/local;1"]. createInstance(Components.interfaces.nsILocalFile); file.initWithPath("C:\\My Documents\\Test.maff"); var format = "TypeMAFF"; var fileUri = Components. classes["@mozilla.org/network/io-service;1"]. getService(Components.interfaces.nsIIOService). newFileURI(file); var persistObject = new MafObjects.MafArchivePersist(null, format); persistObject.saveDocument(doc, fileUri);