Update firerecord.js

Added the playback function, which at the moment displays the script line by line in a for loop when the play button is clicked. also formatted code slightly
This commit is contained in:
David Westgate 2013-04-28 13:52:58 -03:00
parent d3edd458a0
commit edb54b86e1

View File

@ -4,533 +4,495 @@ var loadx = null;
var page = null; var page = null;
window.addEventListener("load", function load(event) { window.addEventListener("load", function load(event) {
window.removeEventListener("load", load, false); //remove listener, no longer needed window.removeEventListener("load", load, false); // remove listener, no
firerecord.init(); // longer needed
firerecord.init();
}, false); }, false);
var firerecord = function() {
var firerecord = function () { var prefManager = Components.classes["@mozilla.org/preferences-service;1"]
var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); .getService(Components.interfaces.nsIPrefBranch);
return { return {
init: function () { init : function() {
getBrowser().addEventListener("load", function (){alert("loaded");}); getBrowser().addEventListener("load", function() {
var appcontent = document.getElementById("appcontent"); // browser alert("loaded");
if (appcontent) { });
appcontent.addEventListener("DOMContentLoaded", firerecord.run, true); var appcontent = document.getElementById("appcontent"); // browser
} if (appcontent) {
}, appcontent.addEventListener("DOMContentLoaded", firerecord.run,
true);
//Rylan
running: function (){
if(recordingx){
recordingx = false;
alert("Stop Listen");
openUILinkIn(window.content.location.href,"current");
//document.location.reload();
//closes all tabs on firefox.
}
else{
recordingx = true;
alert("Start Listen");
//createFile("Initialize New Test File");
firerecord.run();
}
},
openfile: function(){
path = io.openPath();
},
newfile: function(){
path = io.newPath();
createFile();
},
//rylan
/*file: function(){
const nsIFilePicker = Components.interfaces.nsIFilePicker;
var fp = Components.classes["@mozilla.org/filepicker;1"]
.createInstance(nsIFilePicker);
fp.init(window, "Dialog Title", nsIFilePicker.modeOpen);
fp.appendFilters(nsIFilePicker.filterAll | nsIFilePicker.filterText);
var rv = fp.show();
if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
var file = fp.file;
// Get the path as string. Note that you usually won't
// need to work with the string paths.
path = fp.file.path;
// work with returned nsILocalFile...
} }
},*/
//rylan
checkpage: function(readloc){
page = window.content.location.href;
if (page != readloc){
openUILinkIn(readloc,"current");
}
}, },
//rylan // Rylan
readr: function(){ running : function() {
var a= "http://rt.com/news/"; if (recordingx) {
var b= "A"; recordingx = false;
var c= "http://rt.com/news/ukraine-tymoshenko-pardon-request-508/"; alert("Stop Listen");
openUILinkIn(window.content.location.href, "current");
// document.location.reload();
// closes all tabs on firefox.
} else {
recordingx = true;
alert("Start Listen");
// createFile("Initialize New Test File");
firerecord.run();
}
},
openfile : function() {
path = io.openPath();
},
newfile : function() {
path = io.newPath();
io.createFile(path);
},
// rylan
/*
* file: function(){ const nsIFilePicker =
* Components.interfaces.nsIFilePicker;
*
* var fp = Components.classes["@mozilla.org/filepicker;1"]
* .createInstance(nsIFilePicker); fp.init(window, "Dialog Title",
* nsIFilePicker.modeOpen); fp.appendFilters(nsIFilePicker.filterAll |
* nsIFilePicker.filterText);
*
* var rv = fp.show(); if (rv == nsIFilePicker.returnOK || rv ==
* nsIFilePicker.returnReplace) { var file = fp.file; // Get the path as
* string. Note that you usually won't // need to work with the string
* paths. path = fp.file.path; // work with returned nsILocalFile...
* } },
*/
// rylan
checkpage : function(readloc) {
page = window.content.location.href;
if (page != readloc) {
openUILinkIn(readloc, "current");
}
},
// rylan
readr : function() {
var a = "http://rt.com/news/";
var b = "A";
var c = "http://rt.com/news/ukraine-tymoshenko-pardon-request-508/";
var d = "null"; var d = "null";
var e = "null"; var e = "null";
var f = "null"; var f = "null";
setTimeout(function(){firerecord.checkpage(a);},5000); setTimeout(function() {
setTimeout(function(){firerecord.fire(b,c,d,e,f);},8000); firerecord.checkpage(a);
//setTimeout(function(){firerecord.fireExp();},8000); }, 5000);
setTimeout(function() {
firerecord.fire(b, c, d, e, f);
}, 8000);
// setTimeout(function(){firerecord.fireExp();},8000);
}, },
// David
//rylan playback : function() {
nullCheck: function(elem){ var playThis = io.getLine(path);
if(!elem.href){ for(var i = 0; i < playThis.length; i++)
elem.href = "null"; {
} alert(playThis[i]);
if(!elem.name){
elem.name = "null";
}
if(!elem.type){
elem.type= "null";
}
if(!elem.value){
elem.value= "null";
}
if(!elem.form){
elem.form= "null";
}
if(!elem.length){
elem.length= "null";
}
if(!elem.target){
elem.target = "null";
}
if(!elem.action){
elem.action= "null";
}
if(!elem.src){
elem.src= "null";
}
if(!elem.charset){
elem.charset= "null";
}
if(!elem.text){
elem.text= "null";
}
if(!elem.index){
elem.index= "null";
}
if(!elem.size){
elem.size= "null";
}
if(!elem.summary){
elem.summary= "null";
}
if(!elem.caption){
elem.caption= "null";
}
return elem;
},
/*
//rylan
fireExp: function(){
var all = content.document.getElementsByTagName("A");
for (var i = 0; i < all.length; ++i) {
var elem = all[i];
if (i==62){
var obj = document.createEvent("MouseEvents");
obj.initEvent("click", true, true);
elem.dispatchEvent(obj);
}
} }
},*/ },
//rylan // rylan
fire: function(b,c,d,e,f){ nullCheck : function(elem) {
if (!elem.href) {
elem.href = "null";
}
if (!elem.name) {
elem.name = "null";
}
if (!elem.type) {
elem.type = "null";
}
if (!elem.value) {
elem.value = "null";
}
if (!elem.form) {
elem.form = "null";
}
if (!elem.length) {
elem.length = "null";
}
if (!elem.target) {
elem.target = "null";
}
if (!elem.action) {
elem.action = "null";
}
if (!elem.src) {
elem.src = "null";
}
if (!elem.charset) {
elem.charset = "null";
}
if (!elem.text) {
elem.text = "null";
}
if (!elem.index) {
elem.index = "null";
}
if (!elem.size) {
elem.size = "null";
}
if (!elem.summary) {
elem.summary = "null";
}
if (!elem.caption) {
elem.caption = "null";
}
return elem;
},
/*
*
* //rylan fireExp: function(){ var all =
* content.document.getElementsByTagName("A"); for (var i = 0; i <
* all.length; ++i) { var elem = all[i]; if (i==62){ var obj =
* document.createEvent("MouseEvents"); obj.initEvent("click", true,
* true); elem.dispatchEvent(obj); } } },
*/
// rylan
fire : function(b, c, d, e, f) {
var all = content.document.getElementsByTagName(b); var all = content.document.getElementsByTagName(b);
for (var i = 0; i < all.length; ++i) { for ( var i = 0; i < all.length; ++i) {
var elem = all[i]; var elem = all[i];
elem = firerecord.nullCheck(elem); elem = firerecord.nullCheck(elem);
switch (elem.tagName) { switch (elem.tagName) {
//All of these cases need null checks for each attribute. // All of these cases need null checks for each attribute.
case "A": case "A":
if (elem.href == c){ if (elem.href == c) {
var obj = document.createEvent("MouseEvents"); var obj = document.createEvent("MouseEvents");
obj.initEvent("click", true, true); obj.initEvent("click", true, true);
elem.dispatchEvent(obj); elem.dispatchEvent(obj);
} }
break; break;
case "BUTTON": case "BUTTON":
if (elem.name == c && elem.type == d && elem.value == e && elem.form == f) if (elem.name == c && elem.type == d && elem.value == e
{ && elem.form == f) {
var obj = document.createEvent("MouseEvents"); var obj = document.createEvent("MouseEvents");
obj.initEvent("click", true, true); obj.initEvent("click", true, true);
elem.dispatchEvent(obj); elem.dispatchEvent(obj);
} }
break; break;
case "FORM": case "FORM":
if (elem.name == c && elem.length == d && elem.target == e && elem.action == f) if (elem.name == c && elem.length == d && elem.target == e
{ && elem.action == f) {
var obj = document.createEvent("MouseEvents"); var obj = document.createEvent("MouseEvents");
obj.initEvent("click", true, true); obj.initEvent("click", true, true);
elem.dispatchEvent(obj); elem.dispatchEvent(obj);
} }
break; break;
case "IMG": case "IMG":
if (elem.name == c && elem.src == d) if (elem.name == c && elem.src == d) {
{ var obj = document.createEvent("MouseEvents");
var obj = document.createEvent("MouseEvents"); obj.initEvent("click", true, true);
obj.initEvent("click", true, true); elem.dispatchEvent(obj);
elem.dispatchEvent(obj); }
} break;
break; case "INPUT":
case "INPUT": if (elem.name == c && elem.type == d && elem.value == e) {
if (elem.name == c && elem.type == d && elem.value == e) var obj = document.createEvent("MouseEvents");
{ obj.initEvent("click", true, true);
var obj = document.createEvent("MouseEvents"); elem.dispatchEvent(obj);
obj.initEvent("click", true, true); }
elem.dispatchEvent(obj); break;
} case "LINK":
break; if (elem.href == c && elem.type == d && elem.charset == e) {
case "LINK": var obj = document.createEvent("MouseEvents");
if (elem.href == c && elem.type == d && elem.charset == e) obj.initEvent("click", true, true);
{ elem.dispatchEvent(obj);
var obj = document.createEvent("MouseEvents"); }
obj.initEvent("click", true, true); break;
elem.dispatchEvent(obj); case "OPTION":
} if (elem.text == c && elem.value == d && elem.index == e) {
break; var obj = document.createEvent("MouseEvents");
case "OPTION": obj.initEvent("click", true, true);
if (elem.text == c && elem.value == d && elem.index == e) elem.dispatchEvent(obj);
{ }
var obj = document.createEvent("MouseEvents"); break;
obj.initEvent("click", true, true); case "SELECT":
elem.dispatchEvent(obj); if (elem.type == c && elem.name == d && elem.size == e) {
} var obj = document.createEvent("MouseEvents");
break; obj.initEvent("click", true, true);
case "SELECT": elem.dispatchEvent(obj);
if (elem.type == c && elem.name == d && elem.size == e) }
{ break;
var obj = document.createEvent("MouseEvents"); case "TABLE":
obj.initEvent("click", true, true); if (elem.summary == c && elem.caption == d) {
elem.dispatchEvent(obj); var obj = document.createEvent("MouseEvents");
} obj.initEvent("click", true, true);
break; elem.dispatchEvent(obj);
case "TABLE": }
if (elem.summary == c && elem.caption == d) break;
{ case "TEXTAREA":
var obj = document.createEvent("MouseEvents"); if (elem.name == c && elem.type == d && elem.value == e) {
obj.initEvent("click", true, true); var obj = document.createEvent("MouseEvents");
elem.dispatchEvent(obj); obj.initEvent("click", true, true);
} elem.dispatchEvent(obj);
break; }
case "TEXTAREA": break;
if (elem.name == c && elem.type == d && elem.value == e)
{ }
var obj = document.createEvent("MouseEvents");
obj.initEvent("click", true, true);
elem.dispatchEvent(obj);
}
break;
}
} }
}, },
run : function () {
var head = content.document.getElementsByTagName("head")[0],
style = content.document.getElementById("link-target-finder-style"),
all = content.document.getElementsByTagName("*"),
foundElements = 0;
var info = new Array(); // Made this global run : function() {
var Recording = true; // Just need this until we finish with the the buttons.
if (!style) { var head = content.document.getElementsByTagName("head")[0], style = content.document
style = content.document.createElement("link"); .getElementById("link-target-finder-style"), all = content.document
style.id = "link-target-finder-style"; .getElementsByTagName("*"), foundElements = 0;
style.type = "text/css";
style.rel = "stylesheet";
style.href = "chrome://firerecord/skin/skin.css";
head.appendChild(style);
}
// Find all elements attributes and add a listener var info = new Array(); // Made this global
//----------------------------------------------------------- var Recording = true; // Just need this until we finish with the
// Add author(s) to this section. Who did this? David and Peter? // the buttons.
for (var i = 0; i < all.length; ++i) {
//Define the classname variable
elm = all[i];
//deleted local call to new array info
var validtags = ["A", "BUTTON", "FORM", "IMG", "INPUT", "LINK", "OPTION", "SELECT", "TABLE", "TEXTAREA"];
//Add a click event listener to all the valid tags.
if (validtags.indexOf(all[i].tagName) < 0) continue;
info[0] = all[i].tagName;
//Feel free to change this to a for each... if (!style) {
if(recordingx){ style = content.document.createElement("link");
switch (info[0]) { style.id = "link-target-finder-style";
//All of these cases need null checks for each attribute. style.type = "text/css";
case "INPUT": style.rel = "stylesheet";
style.href = "chrome://firerecord/skin/skin.css";
elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected"; head.appendChild(style);
elm.addEventListener("keyup", handleType, false);
break;
case "A":
elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;
case "BUTTON":
elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;
case "FORM":
elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;
case "IMG":
elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;
/*case "INPUT":
elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;*/
case "LINK":
elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;
case "OPTION":
elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;
case "SELECT":
elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;
case "TABLE":
elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;
case "TEXTAREA":
elm.className += ((elm.className.length > 0) ? " " : "") + "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;
}
}
}
//----------------------------------------------------------------
}
};
//rylan
function handleEvent(e) {
var targ;
if (!e) {
var e = window.event;
}
if (e.target) {
targ = e.target;
}
else if (e.srcElement) {
targ = e.srcElement;
}
//---------------------------------------------------------------------
//_____________________________________________________________________
var taginfo = new Array();
taginfo[0] = targ.tagName;
var countr;
//Feel free to change this to a for each...
switch (taginfo[0]) {
//All of these cases need null checks for each attribute.
case "A":
taginfo[1] = targ.href;
break;
case "BUTTON":
taginfo[1] = targ.name;
taginfo[2] = targ.type;
taginfo[3] = targ.value;
taginfo[4] = targ.form;
break;
case "FORM":
taginfo[1] = targ.name;
taginfo[2] = targ.length;
taginfo[3] = targ.target;
taginfo[4] = targ.action;
break;
case "IMG":
taginfo[1] = targ.name;
taginfo[2] = targ.src;
break;
/*case "INPUT":
taginfo[1] = targ.name;
taginfo[2] = targ.type;
taginfo[3] = targ.value;
break;*/
case "LINK":
taginfo[1] = targ.href;
taginfo[2] = targ.type;
taginfo[3] = targ.charset;
break;
case "OPTION":
taginfo[1] = targ.text;
taginfo[2] = targ.value;
taginfo[3] = targ.index;
break;
case "SELECT":
taginfo[1] = targ.type;
taginfo[2] = targ.name;
taginfo[3] = targ.size;
break;
case "TABLE":
taginfo[1] = targ.summary;
taginfo[2] = targ.caption;
break;
case "TEXTAREA":
taginfo[1] = targ.name;
taginfo[2] = targ.type;
taginfo[3] = targ.value;
break;
}
if(!taginfo[1]){
taginfo[1]= "null";
}
if(!taginfo[2]){
taginfo[2]= "null";
}
if(!taginfo[3]){
taginfo[3]= "null";
}
if(!taginfo[4]){
taginfo[4]= "null";
}
/*
var positionFind = content.document.getElementsByTagName(taginfo[0]);
for (var i = 0; i < positionFind.length; ++i) {
if (targ = positionFind[i]){
taginfo[5] = i;
} }
// Find all elements attributes and add a listener
// -----------------------------------------------------------
// Add author(s) to this section. Who did this? David and Peter?
for ( var i = 0; i < all.length; ++i) {
// Define the classname variable
elm = all[i];
// deleted local call to new array info
var validtags = [ "A", "BUTTON", "FORM", "IMG", "INPUT",
"LINK", "OPTION", "SELECT", "TABLE", "TEXTAREA" ];
// Add a click event listener to all the valid tags.
if (validtags.indexOf(all[i].tagName) < 0)
continue;
info[0] = all[i].tagName;
// Feel free to change this to a for each...
if (recordingx) {
switch (info[0]) {
// All of these cases need null checks for each attribute.
case "INPUT":
elm.className += ((elm.className.length > 0) ? " " : "")
+ "link-target-finder-selected";
elm.addEventListener("keyup", handleType, false);
break;
case "A":
elm.className += ((elm.className.length > 0) ? " " : "")
+ "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;
case "BUTTON":
elm.className += ((elm.className.length > 0) ? " " : "")
+ "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;
case "FORM":
elm.className += ((elm.className.length > 0) ? " " : "")
+ "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;
case "IMG":
elm.className += ((elm.className.length > 0) ? " " : "")
+ "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;
/*
* case "INPUT":
*
* elm.className += ((elm.className.length > 0) ? " " : "") +
* "link-target-finder-selected";
* elm.addEventListener("click", handleEvent, false); break;
*/
case "LINK":
elm.className += ((elm.className.length > 0) ? " " : "")
+ "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;
case "OPTION":
elm.className += ((elm.className.length > 0) ? " " : "")
+ "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;
case "SELECT":
elm.className += ((elm.className.length > 0) ? " " : "")
+ "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;
case "TABLE":
elm.className += ((elm.className.length > 0) ? " " : "")
+ "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;
case "TEXTAREA":
elm.className += ((elm.className.length > 0) ? " " : "")
+ "link-target-finder-selected";
elm.addEventListener("click", handleEvent, false);
break;
}
}
}
// ----------------------------------------------------------------
} }
alert(taginfo[5]);*/
};
// rylan
var contents = taginfo.join(' :: ')+"\n"; function handleEvent(e) {
var targ;
io.appendPath(path, window.content.location.href+"\n"); if (!e) {
var e = window.event;
}
if (e.target) {
targ = e.target;
} else if (e.srcElement) {
targ = e.srcElement;
}
// ---------------------------------------------------------------------
// _____________________________________________________________________
var taginfo = new Array();
taginfo[0] = targ.tagName;
var countr;
// Feel free to change this to a for each...
switch (taginfo[0]) {
// All of these cases need null checks for each attribute.
case "A":
taginfo[1] = targ.href;
break;
case "BUTTON":
taginfo[1] = targ.name;
taginfo[2] = targ.type;
taginfo[3] = targ.value;
taginfo[4] = targ.form;
break;
case "FORM":
taginfo[1] = targ.name;
taginfo[2] = targ.length;
taginfo[3] = targ.target;
taginfo[4] = targ.action;
break;
case "IMG":
taginfo[1] = targ.name;
taginfo[2] = targ.src;
break;
/*
* case "INPUT": taginfo[1] = targ.name; taginfo[2] = targ.type;
* taginfo[3] = targ.value;
*
* break;
*/
case "LINK":
taginfo[1] = targ.href;
taginfo[2] = targ.type;
taginfo[3] = targ.charset;
break;
case "OPTION":
taginfo[1] = targ.text;
taginfo[2] = targ.value;
taginfo[3] = targ.index;
break;
case "SELECT":
taginfo[1] = targ.type;
taginfo[2] = targ.name;
taginfo[3] = targ.size;
break;
case "TABLE":
taginfo[1] = targ.summary;
taginfo[2] = targ.caption;
break;
case "TEXTAREA":
taginfo[1] = targ.name;
taginfo[2] = targ.type;
taginfo[3] = targ.value;
break;
}
if (!taginfo[1]) {
taginfo[1] = "null";
}
if (!taginfo[2]) {
taginfo[2] = "null";
}
if (!taginfo[3]) {
taginfo[3] = "null";
}
if (!taginfo[4]) {
taginfo[4] = "null";
}
/*
* var positionFind = content.document.getElementsByTagName(taginfo[0]);
* for (var i = 0; i < positionFind.length; ++i) { if (targ =
* positionFind[i]){ taginfo[5] = i;
* } } alert(taginfo[5]);
*/
var contents = taginfo.join(' :: ') + "\n";
io.appendPath(path, window.content.location.href + "\n");
io.appendPath(path, contents); io.appendPath(path, contents);
e.cancelBubble = true;
};
}(); e.cancelBubble = true;
function createFile() { }
;
alert("created File");
var file1 = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file1.initWithPath(path);
//alert("create file nullcheck" +file1.toString());
var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
// use 0x02 | 0x10 to open file for appending.
foStream.init(file1, 0x02 | 0x08 | 0x20, 438, 0);
var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].
createInstance(Components.interfaces.nsIConverterOutputStream);
converter.init(foStream, "UTF-8", 0, 0);
converter.close(); // this closes foStream
}
function appendFile(contents) { }();
alert("appended File");
var file1 = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file1.initWithPath(path);
//alert("append file nullcheck: "+file1.toString());
var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
// use 0x02 | 0x10 to open file for appending.
foStream.init(file1, 0x02 | 0x10, 438, 0);
var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].
createInstance(Components.interfaces.nsIConverterOutputStream);
converter.init(foStream, "UTF-8", 0, 0);
converter.writeString(contents);
converter.close();
}
function handleType(e) { function handleType(e) {
var targ; var targ;
if (!e) { if (!e) {
var e = window.event; var e = window.event;
} }
if (e.target) { if (e.target) {
targ = e.target; targ = e.target;
} } else if (e.srcElement) {
else if (e.srcElement) { targ = e.srcElement;
targ = e.srcElement; }
} alert("Type Changed");
alert("Type Changed"); e.cancelBubble = true;
e.cancelBubble = true;
} }