Skip to content

Commit

Permalink
Merge branch 'master' into issue-281
Browse files Browse the repository at this point in the history
  • Loading branch information
erikvold committed Jul 31, 2011
2 parents 859d1b2 + 4181f0f commit d69d2f1
Show file tree
Hide file tree
Showing 48 changed files with 749 additions and 198 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Expand Up @@ -8,4 +8,8 @@ LOCAL.*
REMOTE.*
build
*.DS_Store
*.py
*.rb
*.sh
node_modules

21 changes: 21 additions & 0 deletions README.md
@@ -0,0 +1,21 @@
# About

Scriptish is a userscript manager for Firefox, forked from Greasemonkey.


# Requirements

* Using Scriptish: Firefox 4+
* Building an XPI: Unix shell


# Links

* [Website](http://scriptish.org)
* [Blog](http://scriptish.org/blog)
* [Addons.Mozilla.Org (AMO)](https://addons.mozilla.org/en-US/firefox/addon/scriptish)
* [Userscripts](http://userscripts.org)
* [Wiki](http://github.com/scriptish/scriptish/wiki)
* [Issues](http://github.com/scriptish/scriptish/issues)
* [Google Group](http://groups.google.com/group/scriptish)
* [Source Code](http://github.com/scriptish/scriptish)
20 changes: 0 additions & 20 deletions README.txt

This file was deleted.

1 change: 1 addition & 0 deletions extension/chrome.manifest
Expand Up @@ -9,6 +9,7 @@ content scriptish content/
resource scriptish modules/
skin scriptish classic/1.0 skin/
style chrome://global/content/customizeToolbar.xul chrome://scriptish/skin/browser.css
style chrome://global/content/customizeToolbar.xul chrome://scriptish/content/third-party/firebug/startButton.css

overlay chrome://browser/content/browser.xul chrome://scriptish/content/browser.xul
overlay chrome://browser/content/scratchpad.xul chrome://scriptish/content/scratchpad.xul
Expand Down
8 changes: 4 additions & 4 deletions extension/content/aboutScriptish.html
Expand Up @@ -32,7 +32,7 @@ <h1>About:Scriptish</h1>
<header class="secondary">
<h2>Learn</h2>
</header>
<p>Check out the <a href="https://github.com/erikvold/scriptish/wiki">Scriptish wiki</a>
<p>Check out the <a href="https://github.com/scriptish/scriptish/wiki">Scriptish wiki</a>
to learn about Scriptish and how to use it.</p>
<p>There are many resources from which you can obtain users scripts, most notably <a href="http://userscripts.org/">userscripts.org</a>.<br>
Please <strong>be careful</strong> when installing user scripts, as they can introduce significant security and privacy issues.
Expand All @@ -45,9 +45,9 @@ <h2>Help Out</h2>
</header>
<p>There are many ways you can help out with Scriptish:</p>
<ul>
<li><a href="https://github.com/erikvold/scriptish/issues">Report a bug</a></li>
<li><a href="https://github.com/erikvold/scriptish/issues">Request a feature</a></li>
<li>Like coding? <a href="https://github.com/erikvold/scriptish">Fork us!</a></li>
<li><a href="https://github.com/scriptish/scriptish/issues">Report a bug</a></li>
<li><a href="https://github.com/scriptish/scriptish/issues">Request a feature</a></li>
<li>Like coding? <a href="https://github.com/scriptish/scriptish">Fork us!</a></li>
</ul>
</section>

Expand Down
9 changes: 9 additions & 0 deletions extension/content/addonstab.xul
Expand Up @@ -3,6 +3,9 @@
<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript" src="chrome://scriptish/content/js/addonstab.js" />

<commandset id="globalCommandSet">
<command id="cmd_scriptish_installFromFile"/>
</commandset>
<commandset id="viewCommandSet">
<!-- looks a little convoluted, but is required for the list-view
controls binding to work correctly.
Expand Down Expand Up @@ -57,4 +60,10 @@
<spacer class="alert-spacer-after"/>
</vbox>
</vbox>

<menupopup id="utils-menu">
<menuitem id="scriptish-installFromFile"
command="cmd_scriptish_installFromFile"
insertafter="utils-installFromFile"/>
</menupopup>
</overlay>
8 changes: 6 additions & 2 deletions extension/content/browser.xul
@@ -1,5 +1,6 @@
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://scriptish/skin/browser.css" type="text/css"?>
<?xml-stylesheet href="chrome://scriptish/content/third-party/firebug/startButton.css" type="text/css"?>

<overlay id="scriptish-browser-overlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
Expand All @@ -8,15 +9,18 @@
<broadcasterset id="mainBroadcasterSet">
<broadcaster id="scriptish-options-brd"/>
<broadcaster id="scriptish-tb-popup-brd"/>
<broadcaster id="scriptish-button-brd"/>
<broadcaster id="scriptish-button-brd"
showScripts="true"
scriptCount="0"
persist="showScripts"/>
<broadcaster id="scriptish-tb-cmds-brd"/>
<broadcaster id="scriptish-tb-new-us-brd"/>
<broadcaster id="scriptish-tb-show-us-brd"/>
<broadcaster id="scriptish-tb-enabled-brd"/>
</broadcasterset>

<menupopup id="menu_ToolsPopup">
<menu id="scriptish_general_menu" insertbefore="javascriptConsole"/>
<menu id="scriptish_general_menu"/>
</menupopup>
<menupopup id="taskPopup">
<menu id="scriptish_general_menu" insertbefore="downloadMgr"/>
Expand Down
72 changes: 71 additions & 1 deletion extension/content/js/addonstab.js
Expand Up @@ -4,12 +4,15 @@ Cu.import("resource://scriptish/constants.js", tools);
Cu.import("resource://scriptish/prefmanager.js");
Cu.import("resource://scriptish/logging.js");
Cu.import("resource://scriptish/scriptish.js");
Cu.import("resource://scriptish/utils/Scriptish_stringBundle.js");
Cu.import("resource://scriptish/utils/Scriptish_ExtendedStringBundle.js");
Cu.import("resource://scriptish/utils/Scriptish_installUri.js");
Cu.import("resource://scriptish/utils/Scriptish_openInEditor.js");
Cu.import("resource://scriptish/utils/Scriptish_stringBundle.js");
Cu.import("resource://scriptish/third-party/Scriptish_openFolder.js");
Cu.import("resource://scriptish/addonprovider.js");

const RE_USERSCRIPT = /^.*\.user(?:-\d+)?\.js$/i;

var Scriptish_bundle = new Scriptish_ExtendedStringBundle(gStrings.ext);
Scriptish_bundle.strings["header-userscript"] = Scriptish_stringBundle("userscripts");
gStrings.ext = Scriptish_bundle;
Expand All @@ -24,6 +27,67 @@ window.addEventListener("load", function() {
return true;
}

var oldDD = gDragDrop.onDrop;
gDragDrop.onDrop = function(aEvt) {
var dt = aEvt.dataTransfer;
var uris = [];

function handleStrType(type, i) {
let url = dt.mozGetDataAt(type, i);
if (url) {
url = url.trim().match(/$[^\n\r\t]*/)[0];
if (!RE_USERSCRIPT.test(url)) return false;
uris.push(Services.io.newURI(url));
removeType(type, i);
return true;
}
return false;
}
function removeType(type, i) {
dt.mozClearDataAt(type, i);
}

for (var i = dt.mozItemCount - 1; ~i; i--) {
if (handleStrType("text/uri-list", i)) continue;
if (handleStrType("text/x-moz-url", i)) continue;

let file = dt.mozGetDataAt("application/x-moz-file", i);
if (file) {
let uri = Services.io.newFileURI(file);
if (!RE_USERSCRIPT.test(uri.spec)) return;
uris.push(uri);
removeType("application/x-moz-file", i);
continue;
}
}

uris.forEach(function(uri) {
Scriptish_installUri(uri);
});

oldDD(aEvt)
}

gViewController.commands.cmd_scriptish_installFromFile = {
isEnabled: function() {
return true;
},
doCommand: function() {
var nsIFilePicker = Ci.nsIFilePicker;
var fp = tools.Instances.fp;
fp.init(
window,
Scriptish_stringBundle("installFromFile"),
nsIFilePicker.modeOpen);
fp.appendFilter(Scriptish_stringBundle("userscript"), "*.js");
fp.appendFilters(nsIFilePicker.filterAll);

if (fp.show() != nsIFilePicker.returnOK || !fp.file.exists())
return;

Scriptish_installUri(tools.Services.io.newFileURI(fp.file));
}
};
gViewController.commands.cmd_scriptish_userscript_edit = {
isEnabled: addonIsInstalledScript,
doCommand: function(aAddon) { Scriptish_openInEditor(aAddon, window); }
Expand Down Expand Up @@ -74,6 +138,12 @@ window.addEventListener("load", function() {
$("scriptish-detail-contrib-description").textContent =
Scriptish_stringBundle("contributions.description");

// localize install us from file menuitem
let (mi = $("scriptish-installFromFile")) {
mi.setAttribute("label", Scriptish_stringBundle("installFromFile"));
mi.setAttribute("accesskey", Scriptish_stringBundle("installFromFile.ak"));
}

function onViewChanged() {
let de = document.documentElement;
let view = /^addons:\/\/([^/]+)(?:\/([^/]+)?)?$/.exec(gViewController.currentViewId);
Expand Down
44 changes: 35 additions & 9 deletions extension/content/js/browser.js
Expand Up @@ -28,8 +28,22 @@ Scriptish_BrowserUI.QueryInterface = tools.XPCOMUtils.generateQI([
Ci.nsISupports, Ci.nsISupportsWeakReference, Ci.nsIWebProgressListener]);

Scriptish_BrowserUI.tbBtnSetup = function() {
$("scriptish-button-brd").setAttribute(
"onclick", "Scriptish_BrowserUIM.onIconClick(event)");
function updateShowScripts() {
tbBtnBrd.setAttribute("showScripts",
Scriptish_prefRoot.getValue("toolbarbutton.showScripts")
&& Scriptish_prefRoot.getValue("enabled")
);
}

var tbBtnBrd = $("scriptish-button-brd");
tbBtnBrd.setAttribute("onclick", "Scriptish_BrowserUIM.onIconClick(event)");
updateShowScripts();
Scriptish_prefRoot.watch("enabled", updateShowScripts);
Scriptish_prefRoot.watch("toolbarbutton.showScripts", updateShowScripts);
window.addEventListener("unload", function() {
Scriptish_prefRoot.unwatch("enabled", updateShowScripts);
Scriptish_prefRoot.unwatch("toolbarbutton.showScripts", updateShowScripts);
}, false);

var sbCmdsEle = $("scriptish-tb-cmds-brd");
sbCmdsEle.setAttribute("label", Scriptish_stringBundle("menu.commands"));
Expand All @@ -51,12 +65,19 @@ Scriptish_BrowserUI.tbBtnSetup = function() {
var sbPopUp = $("scriptish-tb-popup-brd");
sbPopUp.setAttribute("onclick",
"Scriptish_popupClicked(event);event.stopPropagation();");
sbPopUp.setAttribute("onpopupshowing", "Scriptish_showPopup(event);");
sbPopUp.setAttribute("onpopupshowing", "Scriptish_setupPopup();");

// update enabled icon
Scriptish_BrowserUIM.refreshStatus();

delete Scriptish_BrowserUI["tbBtnSetup"];

Scriptish_setupPopup();
gBrowser.addProgressListener({
onLocationChange: function(aProgress, aRequest, aURI) {
Scriptish_setupPopup();
}
});
}

/**
Expand Down Expand Up @@ -228,7 +249,6 @@ Scriptish_BrowserUI.reattachMenuCmds = function() {
* leak it's memory.
*/
Scriptish_BrowserUI.chromeUnload = function() {
Scriptish_prefRoot.unwatch("enabled", this.statusWatcher);
gBrowser.removeProgressListener(this);
delete this.menuCommanders;
}
Expand Down Expand Up @@ -307,8 +327,10 @@ function Scriptish_popupClicked(aEvt) {
/**
* Handles a Scriptish menu popup event
*/
function Scriptish_showPopup(aEvent) Scriptish.getConfig(function(config) {
function Scriptish_setupPopup() Scriptish.getConfig(function(config) {
var $ = function(aID) document.getElementById(aID);
var popup = $("scriptish-tb-popup");
if (!popup) return;
Scriptish_BrowserUI.reattachMenuCmds();

function okURL(url) (
Expand All @@ -334,11 +356,10 @@ function Scriptish_showPopup(aEvent) Scriptish.getConfig(function(config) {
popup.insertBefore(mi, tail);
}

var popup = aEvent.target;
var tail = $("scriptish-tb-no-scripts-sep");

// remove all the scripts from the list
for (var i = popup.childNodes.length - 1; i >= 0; i--) {
for (var i = popup.childNodes.length - 1; ~i; i--) {
var node = popup.childNodes[i];
if (node.script || node.getAttribute("value") == "hack")
popup.removeChild(node);
Expand Down Expand Up @@ -374,8 +395,13 @@ function Scriptish_showPopup(aEvent) Scriptish.getConfig(function(config) {
}
runsOnTop.forEach(appendScriptToPopup);

var totalScriptCount = frameScriptLen + runsOnTop.length;
function isEnabled(aScript) aScript.enabled;
var enabledScriptCount = runsOnTop.filter(isEnabled).length + runsFramed.filter(isEnabled).length;
$("scriptish-button").setAttribute("scriptCount", enabledScriptCount);

let (menuitem = $("scriptish-tb-no-scripts")) {
let collapsed = menuitem.collapsed = !!(frameScriptLen + runsOnTop.length);
let collapsed = menuitem.collapsed = !!totalScriptCount;
if (collapsed) return;

// determine the correct label
Expand All @@ -388,4 +414,4 @@ function Scriptish_showPopup(aEvent) Scriptish.getConfig(function(config) {
label = Scriptish_stringBundle("statusbar.noScripts.notfound");
menuitem.setAttribute("label", label);
}
})
});
13 changes: 9 additions & 4 deletions extension/content/options.xul
Expand Up @@ -51,17 +51,22 @@
<preference id="pref-enablePopupNotifications" name="extensions.scriptish.enabledNotifications.popup" type="bool"/>
<preference id="pref-enableSlidingNotifications" name="extensions.scriptish.enabledNotifications.sliding" type="bool"/>
<preference id="pref-enableCopyDownloadURL" name="extensions.scriptish.enableCopyDownloadURL" type="bool"/>
<preference id="pref-toolbarbutton-showScripts" name="extensions.scriptish.toolbarbutton.showScripts" type="bool"/>
<preference id="pref-useDefaultLocale" name="extensions.scriptish.useDefaultLocale" type="bool"/>
</preferences>
<groupbox>
<caption label="options.translation" localize="label"/>
<checkbox preference="pref-useDefaultLocale" label="options.translation.useEnglish" localize="label"/>
</groupbox>
<groupbox>
<caption label="options.toolbarbutton" localize="label"/>
<checkbox preference="pref-toolbarbutton-showScripts" label="options.toolbarbutton.showScripts" localize="label"/>
</groupbox>
<groupbox>
<caption label="options.notifications" localize="label"/>
<checkbox preference="pref-enablePopupNotifications" label="options.notifications.popup.enable" tooltiptext="options.notifications.whenDisabled" localize="label,tooltiptext"/>
<checkbox preference="pref-enableSlidingNotifications" label="options.notifications.sliding.enable" tooltiptext="options.notifications.whenDisabled" localize="label,tooltiptext"/>
</groupbox>
<groupbox>
<caption label="options.translation" localize="label"/>
<checkbox preference="pref-useDefaultLocale" label="options.translation.useEnglish" localize="label"/>
</groupbox>
<groupbox>
<caption label="options.addonsManager" localize="label"/>
<checkbox preference="pref-enableCopyDownloadURL" label="options.enableCopyDownloadURL" localize="label"/>
Expand Down
22 changes: 19 additions & 3 deletions extension/content/tests/testPatternCollection.js
Expand Up @@ -396,8 +396,14 @@ test("tainted backref", 2, function() {
var pc = new PatternCollection();
pc.addPattern("foo");
pc.addPattern("bar");
pc.addPattern("/(foo)bad\\1/i");
pc.addPattern("/(foo)baz\\1/i");
equal(pc.merged.source, undefined, "tainted");
if (optimized) {
equal(pc.merged.source, "(?:^(?:bar$|foo$))|(?:(foo)bad\\1)|(?:(foo)baz\\1)", "tainted");
}
else {
equal(pc.merged.source, "(?:^foo$)|(?:^bar$)|(?:(foo)bad\\1)|(?:(foo)baz\\1)", "tainted");
}
equal(pc.test("foobazfoo"), true, "test");
});

Expand All @@ -408,7 +414,12 @@ test("tainted \\x escape", function() {
pc.addPattern("foo");
pc.addPattern("bar");
pc.addPattern("/(foo)baz\\x25/i");
equal(pc.merged.source, undefined, "tainted");
if (optimized) {
equal(pc.merged.source, "(?:^(?:bar$|foo$))|(?:(foo)baz\\x25)", "tainted");
}
else {
equal(pc.merged.source, "(?:^foo$)|(?:^bar$)|(?:(foo)baz\\x25)", "tainted");
}
equal(pc.test("foobaz\x25"), true, "test");
});

Expand All @@ -419,7 +430,12 @@ test("tainted \\u escape", function() {
pc.addPattern("foo");
pc.addPattern("bar");
pc.addPattern("/(foo)baz\\u0025/i");
equal(pc.merged.source, undefined, "tainted");
if (optimized) {
equal(pc.merged.source, "(?:^(?:bar$|foo$))|(?:(foo)baz\\u0025)", "tainted");
}
else {
equal(pc.merged.source, "(?:^foo$)|(?:^bar$)|(?:(foo)baz\\u0025)", "tainted");
}
equal(pc.test("foobaz\u0025"), true, "test");
});

Expand Down

0 comments on commit d69d2f1

Please sign in to comment.