From 9af1202d7ab9f942850ee72929f2fa90898f9dcb Mon Sep 17 00:00:00 2001 From: Rylan doherty Date: Sat, 4 May 2013 04:40:41 -0400 Subject: [PATCH] Update firerecord Added Key Listener for specific Keys. Edits to HandleType, HandleEvent, run(recording click and type events) and fire. Altered the format to handle any properties associated with the element. Fire also confirms every property. Changed the recording process to also include if it was a click, typing, or key event to result in easier playback. removed a few functions also. --- chrome/content/fireio.js | 4 +- chrome/content/firerecord.js | 696 +++++++++++++++-------------------- 2 files changed, 298 insertions(+), 402 deletions(-) diff --git a/chrome/content/fireio.js b/chrome/content/fireio.js index 378e10a..45508a4 100644 --- a/chrome/content/fireio.js +++ b/chrome/content/fireio.js @@ -29,7 +29,7 @@ var io = { @see Mozilla Developer Network Example */ appendPath: function (path, contents) { - alert("appended File"); + var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); file.initWithPath(path); // alert("append file nullcheck: "+file1.toString()); @@ -67,7 +67,7 @@ var io = { @see Mozilla Developer Network Example */ createFile: function (path) { - alert("created File"); + var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); file.initWithPath(path); var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); diff --git a/chrome/content/firerecord.js b/chrome/content/firerecord.js index dad9469..24b2dca 100644 --- a/chrome/content/firerecord.js +++ b/chrome/content/firerecord.js @@ -1,430 +1,326 @@ /* -@author Ian Hickey, Rylan Doherty, David Westgate, Peter Atashian +@author Ian Hickey, Rylan Doherty, David Westgate, William Jellesma, Peter Atashian @fileOverview The event listener, event handler, script writer, and script executer functions of firerecord */ -var recordingx = false; +var recording2 = false; var path = null; -var loadx = null; var page = null; +var i = 0; +var line1 = new Array(); +var line2 = new Array(); +var playThis; window.addEventListener("load", function load(event) { - window.removeEventListener("load", load, false); // remove listener, no - // longer needed + window.removeEventListener("load", load, false); firerecord.init(); }, false); + var firerecord = function () { - var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); + var prefManager = Components.classes["@mozilla.org/preferences-service;1"] + .getService(Components.interfaces.nsIPrefBranch); return { - init: function () { - getBrowser().addEventListener("load", function () { - alert("loaded"); - }); - var appcontent = document.getElementById("appcontent"); // browser - if (appcontent) { - appcontent.addEventListener("DOMContentLoaded", firerecord.run, true); - } - }, - /* @author rylan - */ - running: function () { - if (recordingx) { - recordingx = false; - alert("Stop Listen"); - openUILinkIn(window.content.location.href, "current"); - } else { - recordingx = true; - alert("Start Listen"); - firerecord.run(); - } - }, - openfile: function () { - path = io.openPath(); - }, - newfile: function () { - path = io.newPath(); - io.createFile(path); - }, + init : function() { + var appcontent = document.getElementById("appcontent"); // browser + if (appcontent) { + appcontent.addEventListener("DOMContentLoaded", firerecord.run, + true); + } + }, /* - @author rylan + @author Rylan */ - checkpage: function (readloc) { - page = window.content.location.href; - if (page != readloc) { - openUILinkIn(readloc, "current"); - } - }, + running : function() { + if (recording2) { + recording2 = false; + alert("Stop Listen"); + openUILinkIn(window.content.location.href, "current"); + } else { + recording2 = true; + alert("Start Listen"); + firerecord.run(); + } + }, + openfile : function() { + path = io.openPath(); + }, + newfile : function() { + path = io.newPath(); + io.createFile(path); + }, + /* - @author rylan, David + @author Rylan */ - playback: function () { - var wait = true; - var playThis = io.getScript(path); - var line1 = new Array(); - var line2 = new Array(); - for (var i = 0; i < playThis.length; i += 2) { - line1 = playThis[i]; - line2 = playThis[i + 1].split(' :: '); - while (true) { - if (document.readyState == "complete") { - firerecord.checkpage(line1); - break; - } - } - - setTimeout(function () { - this.wait = false - }, 1000); - while (true) { - alert(wait); - if(wait == false) - break; - - } + checkpage : function() { + page = window.content.location.href; + if (page != line1) + openUILinkIn(line1, "current"); - wait = true; - while (true) { - if (document.readyState == "complete") { - firerecord.fire(line2[0], line2[1], line2[2], line2[3], line2[4]); - break; - } - } - - setTimeout(function () { - wait = false; - }, 1000); - while (true) { - if(wait == false) + setTimeout(function(){ + firerecord.fire(); + },5000); + }, + + /* + @author Rylan, David + */ + playback : function() { + i = 0; + playThis = io.getScript(path); + line1 = playThis[0]; + line2 = playThis[0+1].split(' :: '); + firerecord.checkpage(); + }, + + /* + @author Rylan + */ + fire : function() { + if (line2[0]=="key"){ + var obj = document.createEvent("KeyboardEvent"); + obj.initKeyEvent('keydown', true, true, window, false, false, false, false, 8, 0); + document.dispatchEvent(obj); + } + else{ + var all = content.document.getElementsByTagName(line2[1]); + for ( var n = 0; n < all.length; n++) { + var elem = all[n]; + var searchCount = 0; + if(line2[0]=="click") + searchCount = 2; + else if(line2[0]=="type") + searchCount = 3; + var finding = false; + while(searchCount 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; - } - } - } - - } + run : function() { + + var head = content.document.getElementsByTagName("head")[0], style = content.document + .getElementById("link-target-finder-style"), all = content.document + .getElementsByTagName("*"), foundElements = 0; + var Recording = true; + var info = new Array(); + if (!style) { + style = content.document.createElement("link"); + style.id = "link-target-finder-style"; + style.type = "text/css"; + style.rel = "stylesheet"; + style.href = "chrome://firerecord/skin/skin.css"; + head.appendChild(style); + } + + if (recording2) { + window.content.addEventListener("keyup", handleKey, false); + for ( var i = 0; i < all.length; ++i) { + elm = all[i]; + var validtags = [ "A", "BUTTON", "FORM", "IMG", "INPUT", + "LINK", "OPTION", "SELECT", "TABLE", "TEXTAREA" ]; + info[0] = all[i].tagName; + if (validtags.indexOf(info[0]) == -1) + continue; + else{ + if ( (elm.type == "text"||elm.type =="password") && info[0] == "INPUT"){ + elm.className += ((elm.className.length > 0) ? " " : "") + + "link-target-finder-selected"; + elm.addEventListener("change", handleType, false); + } + else{ + elm.className += ((elm.className.length > 0) ? " " : "") + + "link-target-finder-selected"; + elm.addEventListener("click", handleEvent, false); + } + } + } + } + } }; + /* - @author rylan - @description handles events + @author Rylan + @description handles click events */ 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 contents = taginfo.join(' :: ') + "\n"; - io.appendPath(path, window.content.location.href + "\n"); - io.appendPath(path, contents); - e.cancelBubble = true; - }; -}(); + var targ; + if (!e) { + var e = window.event; + } + if (e.target) { + targ = e.target; + } else if (e.srcElement) { + targ = e.srcElement; + } + var eleArray= ["href","name","id","type","value","form","length", + "target","action","src","charset","text","index", + "caption","size","summary"]; + var validtags = [ "A", "BUTTON", "FORM", "IMG", "INPUT", + "LINK", "OPTION", "SELECT", "TABLE", "TEXTAREA" ]; + var toWrite = new Array(); + toWrite[0] = "click"; + toWrite[1] = targ.tagName; + var countWrite = 2; + var eleCount = 0; + var eleHolder; + if (validtags.indexOf(toWrite[1]) == -1) + { + + } + else{ + while(eleCount