[Pkg-mozext-commits] [SCM] iceweasel extension that enables customization of webpages with user scripts branch, master, updated. debian/0.9.11-1-2-g808196f
Andrea Veri
av at src.gnome.org
Thu Sep 29 21:06:58 UTC 2011
The following commit has been merged in the master branch:
commit 808196f92227bbe802a9d82b766734ffc5e57ba5
Author: Andrea Veri <av at src.gnome.org>
Date: Thu Sep 29 23:07:12 2011 +0200
Import new upstream release. (0.9.12)
diff --git a/chrome.manifest b/chrome.manifest
index fba1675..6b95a6c 100644
--- a/chrome.manifest
+++ b/chrome.manifest
@@ -58,6 +58,7 @@ locale greasemonkey ru-RU jar:chrome/greasemonkey.jar!/locale/ru-RU/
locale greasemonkey si-LK jar:chrome/greasemonkey.jar!/locale/si-LK/
locale greasemonkey sr jar:chrome/greasemonkey.jar!/locale/sr/
locale greasemonkey sv-SE jar:chrome/greasemonkey.jar!/locale/sv-SE/
+locale greasemonkey tr jar:chrome/greasemonkey.jar!/locale/tr/
locale greasemonkey tr-TR jar:chrome/greasemonkey.jar!/locale/tr-TR/
locale greasemonkey uk jar:chrome/greasemonkey.jar!/locale/uk/
locale greasemonkey uk-UA jar:chrome/greasemonkey.jar!/locale/uk-UA/
diff --git a/chrome/greasemonkey.jar!/content/addons.js b/chrome/greasemonkey.jar!/content/addons.js
index 20ca7dd..ed33fa7 100644
--- a/chrome/greasemonkey.jar!/content/addons.js
+++ b/chrome/greasemonkey.jar!/content/addons.js
@@ -8,13 +8,13 @@ var gUserscriptsView = null;
var GM_os;
(function() {
var xulRuntime = Components
- .classes["@mozilla.org/xre/app-info;1"]
+ .classes['@mozilla.org/xre/app-info;1']
.getService(Components.interfaces.nsIXULRuntime);
GM_os = xulRuntime.OS;
})();
-(function() {
+(function private_scope() {
var _origShowView;
function ourShowView(aView) {
if ('userscripts' == aView) {
@@ -26,6 +26,8 @@ function ourShowView(aView) {
if ('userscripts' == gView) gView = null;
_origShowView(aView);
+
+ if ('updates' == aView) greasemonkeyAddons.showScriptUpdates();
}
};
window.GM_overrideShowView = function() {
@@ -36,37 +38,110 @@ window.GM_overrideShowView = function() {
};
GM_overrideShowView();
-// Set up an "observer" on the config, to keep the displayed items up to date
+var _origInstallUpdates = installUpdatesAll;
+installUpdatesAll = function() {
+ var chromeWin = GM_util.getBrowserWindow();
+ var children = gExtensionsView.children;
+ for (var i = 0, child = null; child = children[i]; i++) {
+ if (!/^urn:greasemonkey:update:item:/.test(child.id)) continue;
+
+ var checkbox = document.getAnonymousElementByAttribute(
+ child, 'anonid', 'includeUpdate');
+ if (!checkbox) continue;
+
+ checkbox.setAttribute('anonid', 'includeScriptUpdate');
+ if (checkbox.checked) {
+ var script = GM_config.getScriptById(child.getAttribute('addonId'));
+ script.installUpdate(chromeWin);
+ }
+ }
+
+ _origInstallUpdates();
+};
+
+var _origBuildContextMenu = buildContextMenu;
+buildContextMenu = function(event) {
+ _origBuildContextMenu(event);
+
+ var selectedItem = gExtensionsView.selectedItem;
+ if (/^urn:greasemonkey:update:item:/.test(selectedItem.id)) {
+ document.getElementById('menuitem_homepage_clone')
+ .setAttribute('hidden', true);
+ document.getElementById('menuitem_about_clone')
+ .setAttribute('hidden', true);
+ document.getElementById('menuseparator_1_clone')
+ .setAttribute('hidden', true);
+ document.getElementById('menuitem_installUpdate_clone')
+ .setAttribute('command', 'cmd_userscript_installUpdate');
+ }
+};
+
+// Set up an 'observer' on the config, to keep the displayed items up to date
// with their actual state.
var observer = {
- notifyEvent: function(script, event, data) {
- if (event == "install") {
- var beforeNode = data > -1 ? gUserscriptsView.childNodes[data] : null;
- var item = greasemonkeyAddons.addScriptToList(script, beforeNode);
- if (gView == "userscripts") gUserscriptsView.selectedItem = item;
+ notifyEvent: function(script, event, data, aView) {
+ if ('undefined' == typeof aView) var aView = gView;
+
+ var currentViewNode = null;
+ if ('updates' == aView) {
+ currentViewNode = gExtensionsView;
+ this.notifyEvent(script, event, data, 'userscripts');
+ } else if ('userscripts' == aView) {
+ currentViewNode = gUserscriptsView;
+ }
+
+ if ('userscripts' == aView && 'install' == event) {
+ var beforeNode = data > -1 ? currentViewNode.childNodes[data] : null;
+ var item = greasemonkeyAddons.listitemForScript(script);
item.setAttribute('newAddon', 'true');
+ currentViewNode.insertBefore(item, beforeNode);
+ if ('userscripts' == gView) gUserscriptsView.selectedItem = item;
return;
+ } else if ('updates' == aView && 'install' == event) {
+ var node = document.getElementById('urn:greasemonkey:'
+ + (aView == 'updates' ? 'update:' : '') + 'item:' + script.id);
+ if (node) currentViewNode.removeChild(node);
+ if (currentViewNode.children.length == 0) {
+ showView('userscripts');
+ document.getElementById('updates-view').hidden = true;
+ }
+ return;
+ } else if ('updates' == aView && 'update-found' == event) {
+ var node = greasemonkeyAddons.listitemForScript(script, true);
+ node.setAttribute('typeName', 'update');
+ currentViewNode.insertBefore(node, null);
}
- // find the script's node
- var node = document.getElementById('urn:greasemonkey:item:'+script.id);
- if (!node) return;
+ var node = document.getElementById('urn:greasemonkey:'
+ + (aView == 'updates' ? 'update:' : '') + 'item:' + script.id);
+ if (!node || !currentViewNode) return;
switch (event) {
- case "edit-enabled":
+ case 'edit-enabled':
node.setAttribute('isDisabled', !data);
break;
- case "uninstall":
- gUserscriptsView.removeChild(node);
+ case 'update-found':
+ node.setAttribute('updateable', 'true');
+ node.setAttribute('availableUpdateVersion', data.version);
+ node.setAttribute('availableUpdateURL', data.url);
+ node.setAttribute('providesUpdatesSecurely', data.secure.toString());
+ node.setAttribute('updateAvailableMsg',
+ 'Version ' + data.version + ' is available.');
+ document.getElementById('updates-view').hidden = false;
+ showView('updates');
+ break;
+ case 'uninstall':
+ currentViewNode.removeChild(node);
break;
- case "move":
+ case 'move':
gUserscriptsView.removeChild(node);
gUserscriptsView.insertBefore(node, gUserscriptsView.childNodes[data]);
greasemonkeyAddons.reselectLastSelected();
break;
- case "modified":
- var item = greasemonkeyAddons.listitemForScript(script);
- gUserscriptsView.replaceChild(item, node);
+ case 'modified':
+ var item = greasemonkeyAddons.listitemForScript(
+ script, 'updates' == aView);
+ currentViewNode.replaceChild(item, node);
break;
}
}
@@ -114,6 +189,12 @@ window.addEventListener('load', function() {
setTimeout(showView, 0, 'userscripts');
}
}
+
+ var scripts = GM_config.getMatchingScripts(
+ function (script) { return script.updateAvailable; });
+ if (scripts.length > 0) {
+ document.getElementById('updates-view').hidden = false;
+ }
}, false);
window.addEventListener('unload', function() {
@@ -137,7 +218,7 @@ var greasemonkeyAddons = {
document.getElementById('viewGroup')
.setAttribute('last-selected', 'userscripts');
var userscriptsRadio = document.getElementById('userscripts-view');
- var viewGroup = document.getElementById("viewGroup");
+ var viewGroup = document.getElementById('viewGroup');
viewGroup.selectedItem = userscriptsRadio;
greasemonkeyAddons.reselectLastSelected();
gView='userscripts';
@@ -154,6 +235,18 @@ var greasemonkeyAddons = {
gExtensionsView.focus();
},
+ showScriptUpdates: function() {
+ var scripts = GM_config.getMatchingScripts(
+ function (script) { return script.updateAvailable; });
+
+ // Add a list item for each script.
+ for (var i = 0, script = null; script = scripts[i]; i++) {
+ var item = greasemonkeyAddons.listitemForScript(script, true);
+ item.setAttribute('typeName', 'update');
+ gExtensionsView.insertBefore(item, null);
+ }
+ },
+
updateLastSelected: function() {
if (!gUserscriptsView.selectedItem) return;
var userscriptsRadio = document.getElementById('userscripts-view');
@@ -194,7 +287,7 @@ var greasemonkeyAddons = {
}, 0);
},
- listitemForScript: function(script) {
+ listitemForScript: function(script, updateView) {
var item = document.createElement('richlistitem');
// Setting these attributes inherits the values into the same place they
@@ -204,8 +297,20 @@ var greasemonkeyAddons = {
item.setAttribute('description', script.description);
item.setAttribute('version', script.version);
item.setAttribute('iconURL', script.icon.fileURL);
- item.setAttribute('id', 'urn:greasemonkey:item:'+script.id);
+ item.setAttribute('id', 'urn:greasemonkey:'
+ + (updateView ? 'update:' : '') + 'item:' + script.id);
item.setAttribute('isDisabled', !script.enabled);
+
+ if (script.updateAvailable) {
+ item.setAttribute('updateable', 'true');
+ item.setAttribute('availableUpdateVersion', script._updateVersion);
+ item.setAttribute('availableUpdateURL', script._downloadURL);
+ item.setAttribute('satisfiesDependencies', 'true');
+ item.setAttribute('updateAvailableMsg',
+ 'Version ' + script._updateVersion + ' is available.');
+ item.setAttribute('providesUpdatesSecurely', script.updateIsSecure);
+ }
+
if (script.id in GM_uninstallQueue) {
item.setAttribute('opType', 'needs-uninstall');
}
@@ -220,25 +325,32 @@ var greasemonkeyAddons = {
},
findSelectedScript: function() {
- if (!gUserscriptsView.selectedItem) return null;
- var scripts = GM_config.scripts;
- var selectedScriptId = gUserscriptsView.selectedItem.getAttribute('addonId');
- for (var i = 0, script = null; script = scripts[i]; i++) {
- if (selectedScriptId == script.id) {
- return script;
- }
+ var currentViewNode = null;
+ if ('updates' == gView) {
+ currentViewNode = gExtensionsView;
+ } else if ('userscripts' == gView) {
+ currentViewNode = gUserscriptsView;
}
- return null;
+ if (!currentViewNode || !currentViewNode.selectedItem) return null;
+ var selectedScriptId = currentViewNode.selectedItem.getAttribute('addonId');
+ return GM_config.getScriptById(selectedScriptId) || null;
},
doCommand: function(command) {
var script = greasemonkeyAddons.findSelectedScript();
if (!script) {
- dump("greasemonkeyAddons.doCommand() could not find selected script.\n");
+ dump('greasemonkeyAddons.doCommand() could not find selected script.\n');
return;
}
- var selectedListitem = gUserscriptsView.selectedItem;
+ var currentViewNode = null;
+ if ('updates' == gView) {
+ currentViewNode = gExtensionsView;
+ } else if ('userscripts' == gView) {
+ currentViewNode = gUserscriptsView;
+ }
+
+ var selectedListitem = currentViewNode.selectedItem;
switch (command) {
case 'cmd_userscript_edit':
GM_util.openInEditor(script);
@@ -290,13 +402,16 @@ var greasemonkeyAddons = {
delete(GM_uninstallQueue[script.id]);
GM_config.uninstall(script);
break;
+ case 'cmd_userscript_checkUpdate':
+ script.checkForRemoteUpdate(true);
+ break;
}
},
buildContextMenu: function(aEvent) {
var script = greasemonkeyAddons.findSelectedScript();
if (!script) {
- dump("greasemonkeyAddons.buildContextMenu() could not find selected script.\n");
+ dump('greasemonkeyAddons.buildContextMenu() could not find selected script.\n');
return;
}
@@ -317,11 +432,12 @@ var greasemonkeyAddons = {
}
var standardItems = [
- 'move_up', 'move_down', 'move_top', 'move_bottom', 'sort',
- 'move_separator',
- 'edit', 'show',
- 'edit_separator',
- 'uninstall'];
+ 'move_up', 'move_down', 'move_top', 'move_bottom', 'sort',
+ 'move_separator',
+ 'edit', 'show',
+ 'edit_separator',
+ 'checkUpdate',
+ 'uninstall'];
var uninstallItems = ['uninstall_now', 'cancelUninstall'];
// Set everything hidden now, reveal the right selection below.
@@ -341,23 +457,24 @@ var greasemonkeyAddons = {
// these values.
// Todo: better fix.
setTimeout(function() {
- setElementDisabledByID('userscript_context_move_up', atTop);
- setElementDisabledByID('userscript_context_move_down', atBottom);
- setElementDisabledByID('userscript_context_move_top', atTop);
- setElementDisabledByID('userscript_context_move_bottom', atBottom);
- setElementDisabledByID('userscript_context_sort', (atTop && atBottom));
- }, 0);
+ setElementDisabledByID('userscript_context_move_up', atTop);
+ setElementDisabledByID('userscript_context_move_down', atBottom);
+ setElementDisabledByID('userscript_context_move_top', atTop);
+ setElementDisabledByID('userscript_context_move_bottom', atBottom);
+ setElementDisabledByID('userscript_context_sort', (atTop && atBottom));
+ }, 0);
}
},
onKeypress: function(aEvent) {
- var viewGroup = document.getElementById("viewGroup");
+ var viewGroup = document.getElementById('viewGroup');
switch (aEvent.keyCode) {
case aEvent.DOM_VK_LEFT:
case aEvent.DOM_VK_RIGHT:
- let nextFlag = (aEvent.keyCode == aEvent.DOM_VK_RIGHT);
- if (getComputedStyle(viewGroup, "").direction == "rtl")
+ var nextFlag = (aEvent.keyCode == aEvent.DOM_VK_RIGHT);
+ if ('rtl' == getComputedStyle(viewGroup, '').direction) {
nextFlag = !nextFlag;
+ }
viewGroup.checkAdjacentElement(nextFlag);
break;
default:
@@ -392,7 +509,7 @@ var greasemonkeyDragObserver = {
} else if ('application/x-moz-file' == dropData.flavour.contentType) {
url = GM_util.getUriFromFile(dropData.data).spec;
}
- dump("Dropped url: ["+url+"]\n");
+ dump('Dropped url: ['+url+']\n');
if (url && url.match(/\.user\.js$/)) {
// TODO: Make this UI appear in the add-ons win, rather than the browser?
GM_util.installUri(GM_util.uriFromUrl(url));
diff --git a/chrome/greasemonkey.jar!/content/addons.xml b/chrome/greasemonkey.jar!/content/addons.xml
index 63e1c22..0abe5cc 100644
--- a/chrome/greasemonkey.jar!/content/addons.xml
+++ b/chrome/greasemonkey.jar!/content/addons.xml
@@ -66,16 +66,6 @@
tooltiptext="&cmd.cancelUninstall.tooltip;"
command="cmd_userscript_uninstall_cancel"
/>
-
- <!--
- Todo: Make install/upgrade buttons like extensions if/when added.
- <xul:button class="installShow cancelInstallButton" label="&cancelInstall.label;"
- accesskey="&cancelInstall.accesskey;" tooltiptext="&cmd.cancelInstall.tooltip;"
- command="cmd_cancelInstall"/>
- <xul:button class="upgradeShow cancelUpgradeButton" label="&cancelUpgrade.label;"
- accesskey="&cancelUpgrade.accesskey;" tooltiptext="&cmd.cancelUpgrade.tooltip;"
- command="cmd_cancelUpgrade"/>
- -->
</xul:hbox>
</xul:vbox>
</xul:hbox>
diff --git a/chrome/greasemonkey.jar!/content/addons.xul b/chrome/greasemonkey.jar!/content/addons.xul
index d9f8379..b7e9f52 100644
--- a/chrome/greasemonkey.jar!/content/addons.xul
+++ b/chrome/greasemonkey.jar!/content/addons.xul
@@ -42,14 +42,12 @@
</notificationbox>
<hbox id="commandBarBottom">
- <!--
<button id="findUpdatesUserscripts"
insertafter="checkUpdatesAllButton"
label="&cmd.checkUpdatesAll.label;"
accesskey="&cmd.checkUpdatesAll.accesskey;"
- disabled="true"
+ oncommand="GM_config.checkScriptsForRemoteUpdates();"
/>
- -->
<label id="getMoreUserscripts" class="text-link"
insertafter="getMore"
@@ -72,6 +70,7 @@
<command id="cmd_userscript_edit"/>
<command id="cmd_userscript_options"/>
<command id="cmd_userscript_show"/>
+ <command id="cmd_userscript_checkUpdate"/>
<command id="cmd_userscript_enable"/>
<command id="cmd_userscript_disable"/>
<command id="cmd_userscript_uninstall"/>
@@ -128,14 +127,14 @@
<menuseparator/>
+ <menuitem id="userscript_context_checkUpdate" command="cmd_userscript_checkUpdate"
+ label="&cmd.checkUpdate.label;" accesskey="&cmd.checkUpdate.accesskey;"/>
<!--
Todo: Make install/upgrade menu items like extensions if/when added.
<menuitem id="userscript_context_cancelInstall" command="cmd_cancelInstall"
label="&cmd.cancelInstall.label;" accesskey="&cmd.cancelInstall.accesskey;"/>
<menuitem id="userscript_context_cancelUpgrade" command="cmd_cancelUpgrade"
label="&cmd.cancelUpgrade.label;" accesskey="&cmd.cancelUpgrade.accesskey;"/>
- <menuitem id="userscript_context_checkUpdate" command="cmd_checkUpdate"
- label="&cmd.checkUpdate.label;" accesskey="&cmd.checkUpdate.accesskey;"/>
-->
<menuitem id="userscript_context_enable" command="cmd_userscript_enable"
@@ -145,8 +144,6 @@
<!--
Todo: as above.
- <menuitem id="userscript_context_installUpdate" command="cmd_installUpdate"
- label="&cmd.installUpdate.label;" accesskey="&cmd.installUpdate.accesskey;"/>
<menuitem id="userscript_context_includeUpdate" command="cmd_includeUpdate"
label="&cmd.includeUpdate.label;" accesskey="&cmd.includeUpdate.accesskey;"
type="checkbox"/>
diff --git a/chrome/greasemonkey.jar!/content/addons4-overlay.js b/chrome/greasemonkey.jar!/content/addons4-overlay.js
index d1f0766..e83a4ec 100644
--- a/chrome/greasemonkey.jar!/content/addons4-overlay.js
+++ b/chrome/greasemonkey.jar!/content/addons4-overlay.js
@@ -39,7 +39,7 @@ gViewController.loadView = function(aViewId) {
// with their actual state.
var observer = {
notifyEvent: function observer_notifyEvent(script, event, data) {
- if (userScriptViewId != gViewController.currentViewId) return;
+ if (!isScriptView()) return;
var addon = ScriptAddonFactoryByScript(script);
switch (event) {
@@ -47,7 +47,7 @@ var observer = {
gListView.addItem(addon);
setEmptyWarningVisible();
break;
- case "edit-enabled":
+ case 'edit-enabled':
addon.userDisabled = !data;
var item = gListView.getListItemForID(addon.id);
item.setAttribute('active', data);
@@ -76,6 +76,10 @@ function addonIsInstalledScript(aAddon) {
return true;
};
+function isScriptView() {
+ return 'addons://list/user-script' == gViewController.currentViewId;
+}
+
function addonExecutesNonFirst(aAddon) {
if (!aAddon) return false;
if (SCRIPT_ADDON_TYPE != aAddon.type) return false;
diff --git a/chrome/greasemonkey.jar!/content/addons4-overlay.xul b/chrome/greasemonkey.jar!/content/addons4-overlay.xul
index cb00869..3133b3f 100644
--- a/chrome/greasemonkey.jar!/content/addons4-overlay.xul
+++ b/chrome/greasemonkey.jar!/content/addons4-overlay.xul
@@ -8,6 +8,8 @@
%greasemonkeyDTD;
<!ENTITY % greasemonkeyAddonsDTD SYSTEM "chrome://greasemonkey/locale/gm-addons.dtd">
%greasemonkeyAddonsDTD;
+<!ENTITY % extensionsDTD SYSTEM "chrome://mozapps/locale/extensions/extensions.dtd">
+%extensionsDTD;
]>
<overlay id="greasemonkey-browser-overlay"
@@ -30,32 +32,35 @@
<command id="cmd_userscript_execute_sooner" />
<command id="cmd_userscript_execute_later" />
<command id="cmd_userscript_execute_last" />
+ <command id="cmd_userscript_showItemPreferences" />
</commandset>
<menupopup id="addonitem-popup">
- <menuitem id="menuitem_userscript_edit" command="cmd_userscript_edit"
+ <menuitem command="cmd_userscript_edit"
label="&Edit;" accesskey="&Edit.accesskey;" type="user-script"
/>
- <menuitem id="menuitem_userscript_show" command="cmd_userscript_show"
+ <menuitem command="cmd_userscript_show"
label="&Show;" accesskey="&Show.accesskey;" type="user-script"
/>
<menuseparator type="user-script"/>
- <menuitem id="menuitem_userscript_execute_first"
- command="cmd_userscript_execute_first"
+ <menuitem command="cmd_userscript_execute_first"
label="&ExecuteFirst;" type="user-script"
/>
- <menuitem id="menuitem_userscript_execute_sooner"
- command="cmd_userscript_execute_sooner"
+ <menuitem command="cmd_userscript_execute_sooner"
label="&ExecuteSooner;" type="user-script"
/>
- <menuitem id="menuitem_userscript_execute_later"
- command="cmd_userscript_execute_later"
+ <menuitem command="cmd_userscript_execute_later"
label="&ExecuteLater;" type="user-script"
/>
- <menuitem id="menuitem_userscript_execute_last"
- command="cmd_userscript_execute_last"
+ <menuitem command="cmd_userscript_execute_last"
label="&ExecuteLast;" type="user-script"
/>
+
+ <menuseparator type="user-script"/>
+
+ <menuitem command="cmd_findItemUpdates" type="user-script"
+ label="&cmd.findUpdates.label;" accesskey="&cmd.findUpdates.accesskey;"
+ />
</menupopup>
<vbox id="list-view">
diff --git a/chrome/greasemonkey.jar!/content/addons4.xul b/chrome/greasemonkey.jar!/content/addons4.xul
index c00bb05..1265500 100755
--- a/chrome/greasemonkey.jar!/content/addons4.xul
+++ b/chrome/greasemonkey.jar!/content/addons4.xul
@@ -5,13 +5,19 @@
<!-- Just injects the Firefox 4+ specific addons integration code. -->
<script type="application/x-javascript"><![CDATA[
window.addEventListener('load', function() {
-Components.utils.import("resource://greasemonkey/addons4.js");
-GM_addonsStartup();
+var addons = {};
+Components.utils.import("resource://greasemonkey/addons4.js", addons);
+addons.GM_addonsStartup();
}, true);
-// Open the addons manager in Firefox >= 4.0
+// Open the scripts manager in Firefox >= 4.0
function GM_OpenScriptsMgr() {
BrowserOpenAddonsMgr('addons://list/user-script');
}
+
+// Open the updates manager in Firefox >= 4.0
+function GM_OpenUpdatesMgr() {
+ BrowserOpenAddonsMgr('addons://updates/available');
+}
]]></script>
</overlay>
diff --git a/chrome/greasemonkey.jar!/content/browser.js b/chrome/greasemonkey.jar!/content/browser.js
index 6d9c016..673e8ce 100644
--- a/chrome/greasemonkey.jar!/content/browser.js
+++ b/chrome/greasemonkey.jar!/content/browser.js
@@ -223,16 +223,6 @@ GM_BrowserUI.installCurrentScript = function() {
GM_BrowserUI.scriptDownloader_.installScript();
};
-GM_BrowserUI.installScript = function(script){
- GM_util.getService().config.install(script);
-
- var tools = {};
- Components.utils.import("resource://greasemonkey/GM_notification.js", tools);
- tools.GM_notification(
- "'" + script.name + "' "
- + GM_BrowserUI.bundle.getString("statusbar.installed"));
-};
-
/**
* The browser XUL has unloaded. Destroy references/watchers/listeners.
*/
diff --git a/chrome/greasemonkey.jar!/content/browser.xul b/chrome/greasemonkey.jar!/content/browser.xul
index 6b124d1..2f448f9 100644
--- a/chrome/greasemonkey.jar!/content/browser.xul
+++ b/chrome/greasemonkey.jar!/content/browser.xul
@@ -55,6 +55,7 @@
<menupopup
onpopupshowing="GM_showPopup(event);"
onclick="GM_popupClicked(event);"
+ oncontextmenu="event.preventDefault();"
oncommand="event.stopPropagation();"
>
<menuitem class='gm-enabled-item'
diff --git a/chrome/greasemonkey.jar!/content/config.js b/chrome/greasemonkey.jar!/content/config.js
index 5653255..9cd6437 100644
--- a/chrome/greasemonkey.jar!/content/config.js
+++ b/chrome/greasemonkey.jar!/content/config.js
@@ -174,8 +174,11 @@ Config.prototype.parse = function(source, uri, updateScript) {
case "namespace":
case "description":
case "version":
+ case "updateURL":
script["_" + header] = value;
break;
+ case "installURL":
+ script._downloadURL = value;
case "include":
script._includes.push(value);
break;
@@ -266,6 +269,10 @@ Config.prototype.parse = function(source, uri, updateScript) {
}
}
+ if (!script.updateURL && script._downloadURL) {
+ script.updateURL = script._downloadURL;
+ }
+
// if no meta info, default to reasonable values
if (!script._name) {
var name = (uri && uri.spec) || (updateScript && updateScript.filename);
@@ -290,17 +297,18 @@ Config.prototype.parse = function(source, uri, updateScript) {
return script;
};
-Config.prototype.install = function(script) {
- var existingIndex = this._find(script);
- if (existingIndex > -1) {
+Config.prototype.install = function(script, oldScript) {
+ var existingIndex = this._find(oldScript || script);
+ if (!oldScript) oldScript = this.scripts[existingIndex];
+
+ if (oldScript) {
// Save the old script's state.
- var oldScript = this._scripts[existingIndex];
script._enabled = oldScript.enabled;
script.userExcludes = oldScript.userExcludes;
script.userIncludes = oldScript.userIncludes;
// Uninstall the old script.
- this.uninstall(this._scripts[existingIndex], true);
+ this.uninstall(oldScript, true);
}
script._initFile(script._tempFile);
@@ -398,11 +406,12 @@ Config.prototype.getMatchingScripts = function(testFunc) {
return this._scripts.filter(testFunc);
};
-Config.prototype.updateModifiedScripts = function(safeWin, chromeWin) {
+Config.prototype.updateModifiedScripts = function(aWhen, aSafeWin, aChromeWin) {
// Find any updated scripts or scripts with delayed injection
var scripts = this.getMatchingScripts(
function (script) {
- return script.isModified() || 0 != script.pendingExec.length;
+ return script.runAt == aWhen
+ && (script.isModified() || 0 != script.pendingExec.length);
});
if (0 == scripts.length) return;
@@ -411,18 +420,50 @@ Config.prototype.updateModifiedScripts = function(safeWin, chromeWin) {
var oldScriptId = new String(script.id);
var parsedScript = this.parse(
script.textContent, GM_util.uriFromUrl(script._downloadURL), !!script);
- script.updateFromNewScript(parsedScript, safeWin, chromeWin);
+ script.updateFromNewScript(parsedScript, aSafeWin, aChromeWin);
this._changed(script, "modified", oldScriptId, true);
} else {
// We are already downloading dependencies for this script
// so add its window to the list
- script.pendingExec.push({'safeWin': safeWin, 'chromeWin': chromeWin});
+ script.pendingExec.push({'safeWin': aSafeWin, 'chromeWin': aChromeWin});
}
}
this._save();
};
+Config.prototype._notifyUpdates = function() {
+ var scripts = this.getMatchingScripts(
+ function (script) { return script.updateAvailable; });
+ if (0 == scripts.length) return;
+
+ GM_util.getBrowserWindow().GM_OpenUpdatesMgr();
+};
+
+Config.prototype.checkScriptsForRemoteUpdates = function(scripts) {
+ var forced = false;
+ if ('undefined' == typeof scripts) {
+ forced = true;
+ var scripts = this.getMatchingScripts(function (script) {
+ return !script.updateAvailable &&
+ script.updateURL &&
+ script.enabled;
+ });
+ }
+
+ scripts.forEach(function(script) {
+ script.checkForRemoteUpdate(forced);
+ });
+};
+
+Config.prototype.getScriptById = function(scriptId) {
+ for (var i = 0, script = null; script = this.scripts[i]; i++) {
+ if (scriptId == script.id) {
+ return script;
+ }
+ }
+};
+
/**
* Checks whether the version has changed since the last run and performs
* any necessary upgrades.
diff --git a/chrome/greasemonkey.jar!/content/menucommander.js b/chrome/greasemonkey.jar!/content/menucommander.js
index 8c6d263..4c61ad8 100644
--- a/chrome/greasemonkey.jar!/content/menucommander.js
+++ b/chrome/greasemonkey.jar!/content/menucommander.js
@@ -21,14 +21,18 @@ GM_MenuCommander.onPopupShowing = function(aMenuPopup) {
// Add menu items for commands for the active window.
var haveCommands = false;
- GM_BrowserUI.gmSvc.withAllMenuCommandsForWindowId(
- GM_util.windowId(gBrowser.contentWindow),
- function(index, command) {
- if (command.frozen) return;
- aMenuPopup.insertBefore(
- GM_MenuCommander.createMenuItem(command),
- aMenuPopup.firstChild);
- haveCommands = true;
- });
+ var windowId = GM_util.windowId(gBrowser.contentWindow);
+
+ if(windowId) {
+ GM_BrowserUI.gmSvc.withAllMenuCommandsForWindowId(
+ windowId,
+ function(index, command) {
+ if (command.frozen) return;
+ aMenuPopup.insertBefore(
+ GM_MenuCommander.createMenuItem(command),
+ aMenuPopup.firstChild);
+ haveCommands = true;
+ });
+ }
aMenuPopup.parentNode.disabled = !haveCommands;
};
diff --git a/chrome/greasemonkey.jar!/content/options.js b/chrome/greasemonkey.jar!/content/options.js
index ad0ac08..3c99c02 100644
--- a/chrome/greasemonkey.jar!/content/options.js
+++ b/chrome/greasemonkey.jar!/content/options.js
@@ -2,15 +2,48 @@ Components.utils.import('resource://greasemonkey/prefmanager.js');
Components.utils.import('resource://greasemonkey/util.js');
function GM_loadOptions() {
- document.getElementById("check-uninstall")
- .checked = GM_prefRoot.getValue("uninstallPreferences");
- document.getElementById("globalExcludes")
+ document.getElementById('check-uninstall')
+ .checked = GM_prefRoot.getValue('uninstallPreferences');
+
+ document.getElementById('globalExcludes')
.pages = GM_util.getService().config.globalExcludes;
+
+ document.getElementById('check-update')
+ .checked = GM_prefRoot.getValue('enableUpdateChecking');
+ document.getElementById('secure-update')
+ .checked = GM_prefRoot.getValue('requireSecureUpdates');
+
+ document.getElementById('slide-updateInterval')
+ .value = GM_prefRoot.getValue('minDaysBetweenUpdateChecks');
+
+ GM_setMinUpdateIntervalLabel();
+ GM_onChangeUpdateChecking();
}
function GM_saveOptions(checkbox) {
- GM_prefRoot.setValue("uninstallPreferences",
- !!document.getElementById("check-uninstall").checked);
+ GM_prefRoot.setValue('uninstallPreferences',
+ !!document.getElementById('check-uninstall').checked);
GM_util.getService().config.globalExcludes =
- document.getElementById("globalExcludes").pages;
+ document.getElementById('globalExcludes').pages;
+ GM_prefRoot.setValue('enableUpdateChecking',
+ !!document.getElementById('check-update').checked);
+ GM_prefRoot.setValue('requireSecureUpdates',
+ !!document.getElementById('secure-update').checked);
+ GM_prefRoot.setValue("minDaysBetweenUpdateChecks", GM_getMinUpdateDays());
+}
+
+function GM_getMinUpdateDays() {
+ return parseInt(document.getElementById('slide-updateInterval').value);
+}
+
+function GM_onChangeUpdateChecking() {
+ var enabled = document.getElementById('check-update').checked;
+ document.getElementById('secure-update').disabled = !enabled;
+ document.getElementById('slide-updateInterval').disabled = !enabled;
+ document.getElementById('label-slide-updateInterval').disabled = !enabled;
+}
+
+function GM_setMinUpdateIntervalLabel() {
+ document.getElementById('txt-updateInterval')
+ .setAttribute('value', GM_getMinUpdateDays());
}
diff --git a/chrome/greasemonkey.jar!/content/options.xul b/chrome/greasemonkey.jar!/content/options.xul
index 3f7f85f..d77a713 100644
--- a/chrome/greasemonkey.jar!/content/options.xul
+++ b/chrome/greasemonkey.jar!/content/options.xul
@@ -39,6 +39,24 @@
<caption label="&options.globalExcludes;" />
<cludes id="globalExcludes" />
</groupbox>
+
+ <groupbox>
+ <caption label="&UpdateChecking;" />
+ <checkbox id="check-update" label="&EnableUpdateChecking;"
+ oncommand="GM_onChangeUpdateChecking()" />
+ <hbox>
+ <separator orient="vertical" />
+ <checkbox id="secure-update" label="&RequireSecureUpdates;" />
+ </hbox>
+ <label value="&UpdateInterval;" control="slide-updateInterval"
+ id="label-slide-updateInterval" />
+ <hbox>
+ <scale id="slide-updateInterval" flex="1"
+ orient="horizontal" min="1" max="30"
+ onchange="GM_setMinUpdateIntervalLabel()"/>
+ <label id="txt-updateInterval" />
+ </hbox>
+ </groupbox>
</vbox>
</dialog>
diff --git a/chrome/greasemonkey.jar!/content/script.js b/chrome/greasemonkey.jar!/content/script.js
index 09f2d2e..0246e1d 100644
--- a/chrome/greasemonkey.jar!/content/script.js
+++ b/chrome/greasemonkey.jar!/content/script.js
@@ -7,8 +7,9 @@ Components.utils.import('resource://greasemonkey/util.js');
function Script(configNode) {
this._observers = [];
- this._downloadURL = null; // Only for scripts not installed
- this._tempFile = null; // Only for scripts not installed
+ this._downloadURL = null;
+ this._updateURL = null;
+ this._tempFile = null;
this._basedir = null;
this._filename = null;
this._modified = null;
@@ -34,6 +35,9 @@ function Script(configNode) {
this._dependFail = false;
this._runAt = null;
this._rawMeta = null;
+ this._lastUpdateCheck = null;
+ this.updateAvailable = null;
+ this._updateVersion = null;
this.pendingExec = [];
if (configNode) this._loadFromConfigNode(configNode);
@@ -155,6 +159,30 @@ function Script_getFile() {
return file;
});
+Script.prototype.__defineGetter__('updateURL',
+function Script_getUpdateURL() { return this._updateURL; });
+Script.prototype.__defineSetter__('updateURL',
+function Script_setUpdateURL(url) {
+ if (!url && !this._downloadURL) return null;
+
+ if (!url) url = this._downloadURL;
+
+ // US.o gets special treatment for being so large
+ var usoURL = url.match(/^(https?:\/\/userscripts.org\/[^?]*\.user\.js)\??/);
+ if (usoURL) {
+ this._updateURL = usoURL[1].replace(/\.user\.js$/,".meta.js");
+ } else {
+ this._updateURL = url;
+ }
+});
+
+Script.prototype.__defineGetter__('updateIsSecure',
+function Script_getUpdateIsSecure() {
+ if (!this._downloadURL) return null;
+
+ return /^https/.test(this._downloadURL);
+});
+
Script.prototype.__defineGetter__('_basedirFile',
function Script_getBasedirFile() {
var file = GM_util.scriptDir();
@@ -174,14 +202,6 @@ function Script_getFileURL() { return GM_util.getUriFromFile(this.file).spec; })
Script.prototype.__defineGetter__('textContent',
function Script_getTextContent() { return GM_util.getContents(this.file); });
-Script.prototype.__defineGetter__('size',
-function Script_getSize() {
- var size = this.file.fileSize;
- for each (var r in this._requires) size += r.file.fileSize;
- for each (var r in this._resources) size += r.file.fileSize;
- return size;
-});
-
Script.prototype._initFileName = function(name, useExt) {
var ext = "";
name = name.toLowerCase();
@@ -210,6 +230,7 @@ Script.prototype._loadFromConfigNode = function(node) {
this._filename = node.getAttribute("filename");
this._basedir = node.getAttribute("basedir") || ".";
this._downloadURL = node.getAttribute("installurl") || null;
+ this.updateURL = node.getAttribute("updateurl") || null;
if (!this.fileExists(this._basedirFile)) return;
if (!this.fileExists(this.file)) return;
@@ -232,6 +253,19 @@ Script.prototype._loadFromConfigNode = function(node) {
this._version = node.getAttribute("version");
}
+ if (!node.getAttribute("updateAvailable")
+ || !node.getAttribute("lastUpdateCheck")
+ ) {
+ this.updateAvailable = false;
+ this._lastUpdateCheck = this._modified;
+
+ GM_util.getService().config._changed(this, "modified", null);
+ } else {
+ this.updateAvailable = node.getAttribute("updateAvailable") == 'true';
+ this._updateVersion = node.getAttribute("updateVersion") || null;
+ this._lastUpdateCheck = node.getAttribute("lastUpdateCheck");
+ }
+
for (var i = 0, childNode; childNode = node.childNodes[i]; i++) {
switch (childNode.nodeName) {
case "Include":
@@ -343,11 +377,21 @@ Script.prototype.toConfigNode = function(doc) {
scriptNode.setAttribute("basedir", this._basedir);
scriptNode.setAttribute("modified", this._modified);
scriptNode.setAttribute("dependhash", this._dependhash);
+ scriptNode.setAttribute("updateAvailable", this.updateAvailable);
+ scriptNode.setAttribute("lastUpdateCheck", this._lastUpdateCheck);
if (this._downloadURL) {
scriptNode.setAttribute("installurl", this._downloadURL);
}
+ if (this._updateURL) {
+ scriptNode.setAttribute("updateurl", this._updateURL);
+ }
+
+ if (this._updateVersion) {
+ scriptNode.setAttribute("updateVersion", this._updateVersion);
+ }
+
if (this.icon.filename) {
scriptNode.setAttribute("icon", this.icon.filename);
}
@@ -355,6 +399,10 @@ Script.prototype.toConfigNode = function(doc) {
return scriptNode;
};
+Script.prototype.toString = function() {
+ return '[Greasemonkey Script ' + this.id + ']';
+};
+
Script.prototype._initFile = function(tempFile) {
var name = this._initFileName(this._name, false);
this._basedir = name;
@@ -435,6 +483,8 @@ Script.prototype.updateFromNewScript = function(newScript, safeWin, chromeWin) {
this._runAt = newScript._runAt;
this._unwrap = newScript._unwrap;
this._version = newScript._version;
+ this._downloadURL = newScript._downloadURL;
+ this._updateURL = newScript._updateURL;
var dependhash = GM_util.sha1(newScript._rawMeta);
if (dependhash != this._dependhash && !newScript._dependFail) {
@@ -452,13 +502,132 @@ Script.prototype.updateFromNewScript = function(newScript, safeWin, chromeWin) {
if (!nextFile.equals(this.file)) nextFile.remove(true);
}
- // Store window references for late injection
- this.pendingExec.push({'safeWin': safeWin, 'chromeWin': chromeWin});
+ // Store window references for late injection.
+ if ('document-start' == this._runAt) {
+ GM_util.logError(
+ this.id + "\nNot running at document-start; waiting for update ...",
+ true);
+ this.pendingExec.push('document-start update');
+ } else {
+ this.pendingExec.push({'safeWin': safeWin, 'chromeWin': chromeWin});
+ }
- // Redownload dependencies.
+ // Re-download dependencies. The timeout guarantees that it will
+ // reliably complete after the normal document-end time. (See #1402; going
+ // from some -> no requires means this is a short-circuit call.)
var scriptDownloader = new GM_ScriptDownloader(null, null, null);
- scriptDownloader.startUpdateScript(this);
+ GM_util.timeout(0, GM_hitch(scriptDownloader, 'startUpdateScript', this));
+ }
+};
+
+Script.prototype.checkForRemoteUpdate = function(aForced, aCallback) {
+ var callback = aCallback || function() {};
+
+ if (this.updateAvailable) return callback(true);
+ if (!this._updateURL) return callback(false);
+
+ var ioService = Components.classes["@mozilla.org/network/io-service;1"]
+ .getService(Components.interfaces.nsIIOService);
+ var scheme = ioService.extractScheme(this._updateURL);
+ switch (scheme) {
+ case 'about':
+ case 'chrome':
+ case 'file':
+ // These schemes are explicitly never OK!
+ return callback(false);
+ case 'ftp':
+ case 'http':
+ // These schemes are OK only if the user opts in.
+ if (GM_prefRoot.getValue('requireSecureUpdates')) {
+ return callback(false);
+ }
+ break;
+ case 'https':
+ // HTTPs is always OK.
+ break;
+ default:
+ // Anything not listed: default to not allow.
+ return callback(false);
+ }
+
+ var currentTime = new Date().getTime();
+
+ if (!aForced) {
+ if (!GM_prefRoot.getValue("enableUpdateChecking")) return callback(false);
+
+ var minIntervalDays = GM_prefRoot.getValue("minDaysBetweenUpdateChecks");
+ if (isNaN(minIntervalDays) || minIntervalDays < 1) minIntervalDays = 1;
+ var minIntervalMs = 86400000 * minIntervalDays;
+ var nextUpdateTime = parseInt(this._lastUpdateCheck, 10) + minIntervalMs;
+ if (currentTime <= nextUpdateTime) return callback(false);
+ }
+
+ var lastCheck = this._lastUpdateCheck;
+ this._lastUpdateCheck = currentTime;
+
+
+ var req = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
+ .createInstance(Components.interfaces.nsIXMLHttpRequest);
+ req.open("GET", this.updateURL, true);
+ req.onload = GM_util.hitch(
+ this, "checkRemoteVersion", req, callback);
+ req.onerror = GM_util.hitch(
+ this, "checkRemoteVersionErr", lastCheck, callback);
+ req.send(null);
+};
+
+Script.prototype.checkRemoteVersion = function(req, aCallback) {
+ if (req.status != 200 && req.status != 0) return aCallback(false);
+
+ var source = req.responseText;
+ var newScript = GM_util.getService().config.parse(source);
+ var remoteVersion = newScript.version;
+ if (!remoteVersion) return aCallback(false);
+
+ var versionChecker = Components
+ .classes["@mozilla.org/xpcom/version-comparator;1"]
+ .getService(Components.interfaces.nsIVersionComparator);
+
+ if (versionChecker.compare(this._version, remoteVersion) >= 0) {
+ return aCallback(false);
+ }
+
+ this.updateAvailable = true;
+ this._updateVersion = remoteVersion;
+ // TODO: Remove this _changed() call when em:minVersion >= 4.0.
+ this._changed("update-found", {
+ version: remoteVersion,
+ url: this._downloadURL,
+ secure: this.updateIsSecure
+ });
+ GM_util.getService().config._save();
+ aCallback(true);
+};
+
+Script.prototype.checkRemoteVersionErr = function(lastCheck, aCallback) {
+ // Set the time back.
+ this._lastUpdateCheck = lastCheck;
+ GM_util.getService().config._save();
+ aCallback(false);
+};
+
+Script.prototype.installUpdate = function(aChromeWin, aCallback) {
+ var oldScriptId = new String(this.id);
+ function updateAddons(aNewScript) {
+ // Timeout puts this update after core code has removed the download
+ // progress bar. It causes an open add-ons manager to be updated with the
+ // new script details.
+ GM_util.timeout(
+ 0, GM_util.hitch(GM_util.getService().config, '_changed',
+ aNewScript, 'modified', oldScriptId));
}
+ var uri = GM_util.uriFromUrl(this._downloadURL);
+ var scriptDownloader = new GM_ScriptDownloader(aChromeWin, uri, null);
+ scriptDownloader.replacedScript = this;
+ scriptDownloader.installOnCompletion_ = true;
+ scriptDownloader.onInstall(GM_util.hitch(this, updateAddons));
+ if (aCallback) scriptDownloader.onInstall(aCallback);
+ scriptDownloader.startDownload();
};
Script.prototype.allFiles = function() {
diff --git a/chrome/greasemonkey.jar!/content/scriptdownloader.js b/chrome/greasemonkey.jar!/content/scriptdownloader.js
index 5557a8c..bfc8ff7 100644
--- a/chrome/greasemonkey.jar!/content/scriptdownloader.js
+++ b/chrome/greasemonkey.jar!/content/scriptdownloader.js
@@ -21,6 +21,9 @@ GM_ScriptDownloader = function(win, uri, bundle, contentWin) {
this._oldScriptId = null;
this.updateScript = false;
+ this.replacedScript = null;
+
+ this._onInstallCallbacks = [];
};
GM_ScriptDownloader.prototype.startInstall = function() {
@@ -43,7 +46,7 @@ GM_ScriptDownloader.prototype.startViewScript = function(uri) {
GM_ScriptDownloader.prototype.startDownload = function() {
GM_util.getService().ignoreNextScript();
- this.req_ = new XMLHttpRequest();
+ this.req_ = new this.win_.XMLHttpRequest();
this.req_.overrideMimeType("text/plain");
this.req_.open("GET", this.uri_.spec, true);
this.req_.onreadystatechange = GM_util.hitch(this, "checkContentTypeBeforeDownload");
@@ -88,17 +91,15 @@ GM_ScriptDownloader.prototype.checkContentTypeBeforeDownload = function () {
GM_ScriptDownloader.prototype.handleScriptDownloadComplete = function() {
try {
- // If loading from file, status might be zero on success
+ // If loading from file, status might be zero on success.
if (this.req_.status != 200 && this.req_.status != 0) {
- // NOTE: Unlocalized string
+ // TODO: Unlocalized string.
alert("Error loading user script:\n" +
- this.req_.status + ": " +
- this.req_.statusText);
+ this.req_.status + ": " + this.req_.statusText);
return;
}
var source = this.req_.responseText;
-
this.script = GM_util.getService().config.parse(source, this.uri_);
var file = Components.classes["@mozilla.org/file/directory_service;1"]
@@ -111,9 +112,6 @@ GM_ScriptDownloader.prototype.handleScriptDownloadComplete = function() {
Components.interfaces.nsILocalFile.NORMAL_FILE_TYPE, GM_constants.fileMask);
this.tempFiles_.push(file);
- function handleWriteComplete() {
- }
-
GM_util.writeToFile(source, file,
GM_util.hitch(this, 'handleScriptDownloadWriteComplete', file));
} catch (e) {
@@ -126,9 +124,11 @@ GM_ScriptDownloader.prototype.handleScriptDownloadComplete = function() {
GM_ScriptDownloader.prototype.handleScriptDownloadWriteComplete = function(file) {
this.script.setDownloadedFile(file);
- window.setTimeout(GM_util.hitch(this, "fetchDependencies"), 0);
+ this.win_.setTimeout(GM_util.hitch(this, "fetchDependencies"), 0);
- if (this.installing_) {
+ if (this.installOnCompletion_) {
+ // Unattended install (i.e. remote script update), no UI.
+ } else if (this.installing_) {
this.showInstallDialog();
} else {
this.showScriptView();
@@ -271,9 +271,17 @@ GM_ScriptDownloader.prototype.finishInstall = function() {
var pendingExecAry = this.script.pendingExec;
this.script.pendingExec = [];
while (pendingExec = pendingExecAry.shift()) {
+ if ('document-start update' == pendingExec) {
+ GM_util.logError(
+ this.script.id + '\n... script update complete (will run next time).',
+ true);
+ continue;
+ }
if (pendingExec.safeWin.closed) continue;
var url = pendingExec.safeWin.location.href;
- if (GM_util.scriptMatchesUrlAndRuns(this.script, url)) {
+ var shouldRun = GM_util.scriptMatchesUrlAndRuns(
+ this.script, url, this.script.runAt);
+ if (shouldRun) {
GM_util.getService().injectScripts(
[this.script], url, pendingExec.safeWin, pendingExec.chromeWin);
}
@@ -297,11 +305,21 @@ function(script, dep, msg) {
}
};
-GM_ScriptDownloader.prototype.installScript = function(){
+GM_ScriptDownloader.prototype.installScript = function() {
if (this.dependencyError) {
alert(this.dependencyError);
- } else if(this.dependenciesLoaded_) {
- this.win_.GM_BrowserUI.installScript(this.script);
+ } else if (this.dependenciesLoaded_) {
+ GM_util.getService().config.install(this.script, this.replacedScript);
+
+ var tools = {};
+ Components.utils.import("resource://greasemonkey/GM_notification.js", tools);
+ tools.GM_notification(
+ "'" + this.script.name + "' "
+ + this.win_.GM_BrowserUI.bundle.getString("statusbar.installed"));
+
+ this._onInstallCallbacks.forEach(GM_util.hitch(this, function(callback) {
+ callback(this.script);
+ }));
} else {
this.installOnCompletion_ = true;
}
@@ -309,10 +327,18 @@ GM_ScriptDownloader.prototype.installScript = function(){
GM_ScriptDownloader.prototype.cleanupTempFiles = function() {
for (var i = 0, file = null; file = this.tempFiles_[i]; i++) {
- file.remove(false);
+ try {
+ file.remove(false);
+ } catch (e) {
+ // Ignore, go to next.
+ }
}
};
+GM_ScriptDownloader.prototype.onInstall = function(callback) {
+ this._onInstallCallbacks.push(callback);
+};
+
GM_ScriptDownloader.prototype.showInstallDialog = function(timer) {
if (!timer) {
// otherwise, the status bar stays in the loading state.
diff --git a/chrome/greasemonkey.jar!/content/scriptrequire.js b/chrome/greasemonkey.jar!/content/scriptrequire.js
index e208018..a807c65 100644
--- a/chrome/greasemonkey.jar!/content/scriptrequire.js
+++ b/chrome/greasemonkey.jar!/content/scriptrequire.js
@@ -4,8 +4,8 @@ Components.utils.import('resource://greasemonkey/util.js');
function ScriptRequire(script) {
this._script = script;
- this._downloadURL = null; // Only for scripts not installed
- this._tempFile = null; // Only for scripts not installed
+ this._downloadURL = null;
+ this._tempFile = null;
this._filename = null;
this.type = "require";
this.updateScript = false;
diff --git a/chrome/greasemonkey.jar!/content/scriptresource.js b/chrome/greasemonkey.jar!/content/scriptresource.js
index 7ef3abb..5402b06 100644
--- a/chrome/greasemonkey.jar!/content/scriptresource.js
+++ b/chrome/greasemonkey.jar!/content/scriptresource.js
@@ -3,8 +3,8 @@ Components.utils.import('resource://greasemonkey/util.js');
function ScriptResource(script) {
this._script = script || null;
- this._downloadURL = null; // Only for scripts not installed
- this._tempFile = null; // Only for scripts not installed
+ this._downloadURL = null;
+ this._tempFile = null;
this._filename = null;
this._mimetype = null;
this._charset = null;
diff --git a/chrome/greasemonkey.jar!/content/statusbar.xul b/chrome/greasemonkey.jar!/content/statusbar.xul
index c6e8536..efdeee7 100644
--- a/chrome/greasemonkey.jar!/content/statusbar.xul
+++ b/chrome/greasemonkey.jar!/content/statusbar.xul
@@ -17,6 +17,7 @@
<menupopup id="gm-status-popup"
onpopupshowing="GM_showPopup(event);"
onclick="GM_popupClicked(event);"
+ oncontextmenu="event.preventDefault();"
>
<menuseparator class="scripts-framed-point" collapsed="true" />
<menuseparator class="scripts-sep" />
diff --git a/chrome/greasemonkey.jar!/locale/ca-AD/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/ca-AD/gm-addons.dtd
index d444a7d..bd35cf6 100644
--- a/chrome/greasemonkey.jar!/locale/ca-AD/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/ca-AD/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Execute last">
<!ENTITY ExecuteLater "Execute later">
<!ENTITY ExecuteSooner "Execute sooner">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Move Down">
<!ENTITY MoveDown.accesskey "D">
<!ENTITY MoveToBottom "Move To Bottom">
diff --git a/chrome/greasemonkey.jar!/locale/ca-AD/gm-browser.properties b/chrome/greasemonkey.jar!/locale/ca-AD/gm-browser.properties
index 81d47ad..70d0b80 100644
--- a/chrome/greasemonkey.jar!/locale/ca-AD/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/ca-AD/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Please choose your preferred text editor first
editor.please_pick_executable=Please pick an executable application to use to edit user scripts.
editor.could_not_launch=Could not launch editor.
newscript.noname=Please provide a name for your script.
-newscript.nonamespace=Please provide a valid namespace URI for your script.\n(e.g. "http://userscripts.org/users/useridnumber")
-newscript.exists=A script with that name is already installed.\nOK to overwrite?
+newscript.nonamespace=Please provide a valid namespace URI for your script.n(e.g. "http://userscripts.org/users/useridnumber")
+newscript.exists=A script with that name is already installed.nOK to overwrite?
diff --git a/chrome/greasemonkey.jar!/locale/ca-AD/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/ca-AD/greasemonkey.dtd
index 6a60d07..820c8f1 100644
--- a/chrome/greasemonkey.jar!/locale/ca-AD/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/ca-AD/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "User Scripts">
<!ENTITY Uninstall "Uninstall">
<!ENTITY AlsoUninstallPrefs "Also uninstall associated preferences">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "No installed scripts run on this page.">
<!ENTITY greasemonkey.youhavenoscripts "You don't have any user scripts installed">
<!ENTITY greasemonkey.getuserscripts "Get user scripts">
diff --git a/chrome/greasemonkey.jar!/locale/cs/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/cs/gm-addons.dtd
index 228d992..2bf28d0 100644
--- a/chrome/greasemonkey.jar!/locale/cs/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/cs/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Spustit poslední">
<!ENTITY ExecuteLater "Spustit později">
<!ENTITY ExecuteSooner "Spustit dříve">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Posunout níže">
<!ENTITY MoveDown.accesskey "n">
<!ENTITY MoveToBottom "Posunout úplně dolů">
diff --git a/chrome/greasemonkey.jar!/locale/cs/gm-browser.properties b/chrome/greasemonkey.jar!/locale/cs/gm-browser.properties
index 94f9f4b..f58f080 100644
--- a/chrome/greasemonkey.jar!/locale/cs/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/cs/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Nejprve zvolte váš oblíbený textový editor
editor.please_pick_executable=Prosím vložte spustitelnou aplikaci, která se použije pro úprav textových souborů.
editor.could_not_launch=Nelze spustit editor.
newscript.noname=Prosím poskytněte název vašeho skriptu.
-newscript.nonamespace=Prosím poskytněte správný jmenný prostor pro váš skript.\n(např. "http://userscripts.org/users/useridnumber")
-newscript.exists=Skript s tímto jménem je již nainstalován.\nPřejete si ho přepsat?
+newscript.nonamespace=Prosím poskytněte správný jmenný prostor pro váš skript.n(např. "http://userscripts.org/users/useridnumber")
+newscript.exists=Skript s tímto jménem je již nainstalován.nPřejete si ho přepsat?
diff --git a/chrome/greasemonkey.jar!/locale/cs/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/cs/greasemonkey.dtd
index 7e5fc53..9e59efc 100644
--- a/chrome/greasemonkey.jar!/locale/cs/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/cs/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Uživatelské skripty">
<!ENTITY Uninstall "Odinstalovat">
<!ENTITY AlsoUninstallPrefs "Odinstalovat i přidružená nastavení">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "No installed scripts run on this page.">
<!ENTITY greasemonkey.youhavenoscripts "Nemáte nainstalované uživatelské skripty">
<!ENTITY greasemonkey.getuserscripts "Získat uživatelské skripty">
diff --git a/chrome/greasemonkey.jar!/locale/da/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/da/gm-addons.dtd
index d7bba38..8ba52aa 100644
--- a/chrome/greasemonkey.jar!/locale/da/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/da/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Kør sidst">
<!ENTITY ExecuteLater "Kør senere">
<!ENTITY ExecuteSooner "Kør før">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Flyt op">
<!ENTITY MoveDown.accesskey "D">
<!ENTITY MoveToBottom "Flyt til bunden">
diff --git a/chrome/greasemonkey.jar!/locale/da/gm-browser.properties b/chrome/greasemonkey.jar!/locale/da/gm-browser.properties
index d8867c0..0a47c7e 100644
--- a/chrome/greasemonkey.jar!/locale/da/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/da/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Venligst vælg dit foretrukne tekstredigeringsprogram først
editor.please_pick_executable=Vælg venligst et program til at bruge til at redigere user sripts.
editor.could_not_launch=Kunne ikke åbne tekstredigeringsprogram.
newscript.noname=Venligst navngiv dit script.
-newscript.nonamespace=Giv venligst en valid "nameespace" URL til dit script.\n(e.g. "http://userscripts.org/users/useridnumber")
-newscript.exists=Et script med dette navn er allerede installeret.\nOK at overskrive?
+newscript.nonamespace=Giv venligst en valid "nameespace" URL til dit script.n(e.g. "http://userscripts.org/users/useridnumber")
+newscript.exists=Et script med dette navn er allerede installeret.nOK at overskrive?
diff --git a/chrome/greasemonkey.jar!/locale/da/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/da/greasemonkey.dtd
index 67fd225..08e85f5 100644
--- a/chrome/greasemonkey.jar!/locale/da/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/da/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "User Scripts">
<!ENTITY Uninstall "Afinstaller">
<!ENTITY AlsoUninstallPrefs "Også afinstallere tilhørende indstilliner">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "Ingen installerede scripts køres på denne side.">
<!ENTITY greasemonkey.youhavenoscripts "Du har ikke nogen user scripts installeret">
<!ENTITY greasemonkey.getuserscripts "Find user scripts">
diff --git a/chrome/greasemonkey.jar!/locale/de/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/de/gm-addons.dtd
index 461b904..daa29b4 100644
--- a/chrome/greasemonkey.jar!/locale/de/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/de/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Zuletzt ausführen">
<!ENTITY ExecuteLater "Später ausführen">
<!ENTITY ExecuteSooner "Früher ausführen">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Nach unten verschieben">
<!ENTITY MoveDown.accesskey "u">
<!ENTITY MoveToBottom "Ans Ende verschieben">
diff --git a/chrome/greasemonkey.jar!/locale/de/gm-browser.properties b/chrome/greasemonkey.jar!/locale/de/gm-browser.properties
index cfe46d8..cb06999 100644
--- a/chrome/greasemonkey.jar!/locale/de/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/de/gm-browser.properties
@@ -13,9 +13,9 @@ alert.fromURI=Benutzerskript wird heruntergeladen…
alert.fromURI.failure=Das Benutzerskript konnte nicht heruntergeladen werden
alert.success=wurde erfolgreich installiert.
alert.failure=Fehler bei der Installation des Benutzerskripts:
-editor.prompt=Bitte wählen Sie zunächst Ihren bevorzugten Text-Editor aus (z.B. "C:\\Windows\\notepad.exe")
+editor.prompt=Bitte wählen Sie zunächst Ihren bevorzugten Text-Editor aus (z.B. "C:Windowsnotepad.exe")
editor.please_pick_executable=Bitte wählen Sie eine ausführbare Anwendung zur Bearbeitung der Benutzerskripte aus.
editor.could_not_launch=Text-Editor konnte nicht gestartet werden.
newscript.noname=Bitte geben Sie einen Namen für Ihr Skript an.
newscript.nonamespace=Bitte geben Sie einen Namensraum für Ihr Skript an.
-newscript.exists=Ein Skript gleichen Namens ist bereits installiert.\nMöchten Sie dieses überschreiben?
+newscript.exists=Ein Skript gleichen Namens ist bereits installiert.nMöchten Sie dieses überschreiben?
diff --git a/chrome/greasemonkey.jar!/locale/de/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/de/greasemonkey.dtd
index f659ac9..1de43cf 100644
--- a/chrome/greasemonkey.jar!/locale/de/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/de/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Benutzerskripte">
<!ENTITY Uninstall "Deinstallieren">
<!ENTITY AlsoUninstallPrefs "Zugehörige Einstellungen ebenfalls entfernen">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "Es werden keine installierten Skripte auf dieser Seite ausgeführt.">
<!ENTITY greasemonkey.youhavenoscripts "Sie haben noch keine Benutzerskripte installiert">
<!ENTITY greasemonkey.getuserscripts "Benutzerskripte hinzufügen…">
diff --git a/chrome/greasemonkey.jar!/locale/en-US/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/en-US/gm-addons.dtd
index d444a7d..bd35cf6 100644
--- a/chrome/greasemonkey.jar!/locale/en-US/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/en-US/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Execute last">
<!ENTITY ExecuteLater "Execute later">
<!ENTITY ExecuteSooner "Execute sooner">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Move Down">
<!ENTITY MoveDown.accesskey "D">
<!ENTITY MoveToBottom "Move To Bottom">
diff --git a/chrome/greasemonkey.jar!/locale/en-US/gm-browser.properties b/chrome/greasemonkey.jar!/locale/en-US/gm-browser.properties
index 81d47ad..70d0b80 100644
--- a/chrome/greasemonkey.jar!/locale/en-US/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/en-US/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Please choose your preferred text editor first
editor.please_pick_executable=Please pick an executable application to use to edit user scripts.
editor.could_not_launch=Could not launch editor.
newscript.noname=Please provide a name for your script.
-newscript.nonamespace=Please provide a valid namespace URI for your script.\n(e.g. "http://userscripts.org/users/useridnumber")
-newscript.exists=A script with that name is already installed.\nOK to overwrite?
+newscript.nonamespace=Please provide a valid namespace URI for your script.n(e.g. "http://userscripts.org/users/useridnumber")
+newscript.exists=A script with that name is already installed.nOK to overwrite?
diff --git a/chrome/greasemonkey.jar!/locale/en-US/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/en-US/greasemonkey.dtd
index 6a60d07..820c8f1 100644
--- a/chrome/greasemonkey.jar!/locale/en-US/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/en-US/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "User Scripts">
<!ENTITY Uninstall "Uninstall">
<!ENTITY AlsoUninstallPrefs "Also uninstall associated preferences">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "No installed scripts run on this page.">
<!ENTITY greasemonkey.youhavenoscripts "You don't have any user scripts installed">
<!ENTITY greasemonkey.getuserscripts "Get user scripts">
diff --git a/chrome/greasemonkey.jar!/locale/es-AR/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/es-AR/gm-addons.dtd
index 30ddc8a..ac0c712 100644
--- a/chrome/greasemonkey.jar!/locale/es-AR/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/es-AR/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Ejecutar último">
<!ENTITY ExecuteLater "Ejecutar después">
<!ENTITY ExecuteSooner "Ejecutar antes">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Mover abajo">
<!ENTITY MoveDown.accesskey "b">
<!ENTITY MoveToBottom "Mover al final">
diff --git a/chrome/greasemonkey.jar!/locale/es-AR/gm-browser.properties b/chrome/greasemonkey.jar!/locale/es-AR/gm-browser.properties
index 6a966e0..8c6f787 100644
--- a/chrome/greasemonkey.jar!/locale/es-AR/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/es-AR/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Por favor, primero elija su editor de texto preferido
editor.please_pick_executable=Por favor, elija una aplicación ejecutable para editar los scripts.
editor.could_not_launch=No se pudo iniciar el editor.
newscript.noname=Por favor, proporcione un nombre para su script.
-newscript.nonamespace=Sírvase proporcionar una URI válida para su script.\n (por ejemplo, "http://userscripts.org/users/useridnumber")
-newscript.exists=Un script con ese nombre ya está instalado.\n¿Aceptar para sobrescribir?
+newscript.nonamespace=Sírvase proporcionar una URI válida para su script.n (por ejemplo, "http://userscripts.org/users/useridnumber")
+newscript.exists=Un script con ese nombre ya está instalado.n¿Aceptar para sobrescribir?
diff --git a/chrome/greasemonkey.jar!/locale/es-AR/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/es-AR/greasemonkey.dtd
index 361032d..5f5bcd9 100644
--- a/chrome/greasemonkey.jar!/locale/es-AR/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/es-AR/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Scripts">
<!ENTITY Uninstall "Desinstalar">
<!ENTITY AlsoUninstallPrefs "También desinstalar las preferencias asociadas">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "No installed scripts run on this page.">
<!ENTITY greasemonkey.youhavenoscripts "You don't have any user scripts installed">
<!ENTITY greasemonkey.getuserscripts "Get user scripts">
diff --git a/chrome/greasemonkey.jar!/locale/es-ES/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/es-ES/gm-addons.dtd
index 1cad5c2..9e8b12f 100644
--- a/chrome/greasemonkey.jar!/locale/es-ES/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/es-ES/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "ejecutar al final">
<!ENTITY ExecuteLater "ejecutar despues">
<!ENTITY ExecuteSooner "ejecutar pronto">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "mover hacia abajo">
<!ENTITY MoveDown.accesskey "D">
<!ENTITY MoveToBottom "mover el boton">
diff --git a/chrome/greasemonkey.jar!/locale/es-ES/gm-browser.properties b/chrome/greasemonkey.jar!/locale/es-ES/gm-browser.properties
index 81d47ad..70d0b80 100644
--- a/chrome/greasemonkey.jar!/locale/es-ES/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/es-ES/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Please choose your preferred text editor first
editor.please_pick_executable=Please pick an executable application to use to edit user scripts.
editor.could_not_launch=Could not launch editor.
newscript.noname=Please provide a name for your script.
-newscript.nonamespace=Please provide a valid namespace URI for your script.\n(e.g. "http://userscripts.org/users/useridnumber")
-newscript.exists=A script with that name is already installed.\nOK to overwrite?
+newscript.nonamespace=Please provide a valid namespace URI for your script.n(e.g. "http://userscripts.org/users/useridnumber")
+newscript.exists=A script with that name is already installed.nOK to overwrite?
diff --git a/chrome/greasemonkey.jar!/locale/es-ES/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/es-ES/greasemonkey.dtd
index 6a60d07..820c8f1 100644
--- a/chrome/greasemonkey.jar!/locale/es-ES/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/es-ES/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "User Scripts">
<!ENTITY Uninstall "Uninstall">
<!ENTITY AlsoUninstallPrefs "Also uninstall associated preferences">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "No installed scripts run on this page.">
<!ENTITY greasemonkey.youhavenoscripts "You don't have any user scripts installed">
<!ENTITY greasemonkey.getuserscripts "Get user scripts">
diff --git a/chrome/greasemonkey.jar!/locale/es-MX/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/es-MX/gm-addons.dtd
index 475f19b..6945f69 100644
--- a/chrome/greasemonkey.jar!/locale/es-MX/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/es-MX/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Ejecutar al final">
<!ENTITY ExecuteLater "Ejecutar después">
<!ENTITY ExecuteSooner "Ejecutar pronto">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Mover hacia abajo">
<!ENTITY MoveDown.accesskey "D">
<!ENTITY MoveToBottom "Mover al final">
diff --git a/chrome/greasemonkey.jar!/locale/es-MX/gm-browser.properties b/chrome/greasemonkey.jar!/locale/es-MX/gm-browser.properties
index f3184be..50f7a22 100644
--- a/chrome/greasemonkey.jar!/locale/es-MX/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/es-MX/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Por favor primero seleciona tu editor de texto preferido
editor.please_pick_executable=Elija una aplicación ejecutable para editar los scripts.
editor.could_not_launch=No se pudo cargar el Editor.
newscript.noname=Dale nombre a tu Script.
-newscript.nonamespace=Da una URI válida para tu Script.\n(e.g. "http://userscripts.org/users/useridnumber")
-newscript.exists=Existe un Script con el mismo nombre .\n¿Reemplazarlo?
+newscript.nonamespace=Da una URI válida para tu Script.n(e.g. "http://userscripts.org/users/useridnumber")
+newscript.exists=Existe un Script con el mismo nombre .n¿Reemplazarlo?
diff --git a/chrome/greasemonkey.jar!/locale/es-MX/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/es-MX/greasemonkey.dtd
index 746cc56..87b47a4 100644
--- a/chrome/greasemonkey.jar!/locale/es-MX/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/es-MX/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Scripts">
<!ENTITY Uninstall "Desinstalar">
<!ENTITY AlsoUninstallPrefs "También desinstalar preferencias asociadas">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "No installed scripts run on this page.">
<!ENTITY greasemonkey.youhavenoscripts "You don't have any user scripts installed">
<!ENTITY greasemonkey.getuserscripts "Get user scripts">
diff --git a/chrome/greasemonkey.jar!/locale/es/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/es/gm-addons.dtd
index 69359fa..f9f88f0 100644
--- a/chrome/greasemonkey.jar!/locale/es/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/es/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Ejecutar al ultimo">
<!ENTITY ExecuteLater "Ejecutar luego">
<!ENTITY ExecuteSooner "Ejecutar pronto">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Mover abajo">
<!ENTITY MoveDown.accesskey "M">
<!ENTITY MoveToBottom "Mover al Final">
diff --git a/chrome/greasemonkey.jar!/locale/es/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/es/greasemonkey.dtd
index 880ccd9..b5bd5fa 100644
--- a/chrome/greasemonkey.jar!/locale/es/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/es/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Script de Usuario(secuencia de comandos)">
<!ENTITY Uninstall "Desinstalar">
<!ENTITY AlsoUninstallPrefs "También desinstalar preferencias asociadas">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "No installed scripts run on this page.">
<!ENTITY greasemonkey.youhavenoscripts "You don't have any user scripts installed">
<!ENTITY greasemonkey.getuserscripts "Get user scripts">
diff --git a/chrome/greasemonkey.jar!/locale/et-EE/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/et-EE/gm-addons.dtd
index 9690675..40b9ef2 100644
--- a/chrome/greasemonkey.jar!/locale/et-EE/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/et-EE/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Execute last">
<!ENTITY ExecuteLater "Execute later">
<!ENTITY ExecuteSooner "Execute sooner">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Liiguta Allapoole">
<!ENTITY MoveDown.accesskey "D">
<!ENTITY MoveToBottom "Liiguta Viimaseks">
diff --git a/chrome/greasemonkey.jar!/locale/et-EE/gm-browser.properties b/chrome/greasemonkey.jar!/locale/et-EE/gm-browser.properties
index 79233ec..fede79a 100644
--- a/chrome/greasemonkey.jar!/locale/et-EE/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/et-EE/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Please choose your preferred text editor first
editor.please_pick_executable=Please pick an executable application to use to edit user scripts.
editor.could_not_launch=Could not launch editor.
newscript.noname=Please provide a name for your script.
-newscript.nonamespace=Please provide a valid namespace URI for your script.\n(e.g. "http://userscripts.org/users/useridnumber")
-newscript.exists=A script with that name is already installed.\nOK to overwrite?
+newscript.nonamespace=Please provide a valid namespace URI for your script.n(e.g. "http://userscripts.org/users/useridnumber")
+newscript.exists=A script with that name is already installed.nOK to overwrite?
diff --git a/chrome/greasemonkey.jar!/locale/et-EE/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/et-EE/greasemonkey.dtd
index 6f22700..c4d6b1a 100644
--- a/chrome/greasemonkey.jar!/locale/et-EE/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/et-EE/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Kasutajaskriptid">
<!ENTITY Uninstall "Eemalda">
<!ENTITY AlsoUninstallPrefs "Also uninstall associated preferences">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "No installed scripts run on this page.">
<!ENTITY greasemonkey.youhavenoscripts "You don't have any user scripts installed">
<!ENTITY greasemonkey.getuserscripts "Get user scripts">
diff --git a/chrome/greasemonkey.jar!/locale/fa-IR/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/fa-IR/gm-addons.dtd
index 9ff07f2..2e3fa67 100644
--- a/chrome/greasemonkey.jar!/locale/fa-IR/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/fa-IR/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "اجرای آخرین">
<!ENTITY ExecuteLater "دیرتر اجرا شود">
<!ENTITY ExecuteSooner "زود تر اجرا شود">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "حرکت به پایین">
<!ENTITY MoveDown.accesskey "ح">
<!ENTITY MoveToBottom "حرکت به انتها">
diff --git a/chrome/greasemonkey.jar!/locale/fa-IR/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/fa-IR/greasemonkey.dtd
index 8a85600..28f152b 100644
--- a/chrome/greasemonkey.jar!/locale/fa-IR/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/fa-IR/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "دستنویس های کاربری">
<!ENTITY Uninstall "عزل">
<!ENTITY AlsoUninstallPrefs "همچنین حذف تنظیمات وابسته">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "دستنویس ای که در این صفحه اجرا شود موجود نیست.">
<!ENTITY greasemonkey.youhavenoscripts "شما هیچ دستنویس نسب شده ای ندارید">
<!ENTITY greasemonkey.getuserscripts "دریافت دستنویس های کاربری">
diff --git a/chrome/greasemonkey.jar!/locale/fi-FI/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/fi-FI/gm-addons.dtd
index 481c244..829ef2c 100644
--- a/chrome/greasemonkey.jar!/locale/fi-FI/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/fi-FI/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Suorita viimeisenä">
<!ENTITY ExecuteLater "Suorita myöhemmin">
<!ENTITY ExecuteSooner "Suorita aiemmin">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Siirrä alaspäin">
<!ENTITY MoveDown.accesskey "A">
<!ENTITY MoveToBottom "Siirrä loppuun">
diff --git a/chrome/greasemonkey.jar!/locale/fi-FI/gm-browser.properties b/chrome/greasemonkey.jar!/locale/fi-FI/gm-browser.properties
index bd87a2a..ea82034 100644
--- a/chrome/greasemonkey.jar!/locale/fi-FI/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/fi-FI/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Valitse ensin haluamasi tekstieditori
editor.please_pick_executable=Valitse ohjelma jota haluat käyttää skriptien muokkaamiseen.
editor.could_not_launch=Tekstieditorin käynnistys epäonnistui.
newscript.noname=Anna skriptillesi nimi.
-newscript.nonamespace=Anna skriptillesi kelvollinen nimiavaruus-URI.\n(esim. "http://userscripts.org/users/<käyttäjänumero>")
-newscript.exists=Samanniminen skripti on jo asennettuna.\nKorvataanko?
+newscript.nonamespace=Anna skriptillesi kelvollinen nimiavaruus-URI.n(esim. "http://userscripts.org/users/<käyttäjänumero>")
+newscript.exists=Samanniminen skripti on jo asennettuna.nKorvataanko?
diff --git a/chrome/greasemonkey.jar!/locale/fi-FI/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/fi-FI/greasemonkey.dtd
index 9bd2824..db2d6b0 100644
--- a/chrome/greasemonkey.jar!/locale/fi-FI/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/fi-FI/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Skriptit">
<!ENTITY Uninstall "Poisto">
<!ENTITY AlsoUninstallPrefs "Poista myös skriptin asetukset">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "Mitään skripteistä ei ajeta tällä sivulla.">
<!ENTITY greasemonkey.youhavenoscripts "Sinulla ei ole yhtään skriptiä asennettuna">
<!ENTITY greasemonkey.getuserscripts "Hanki skriptejä">
diff --git a/chrome/greasemonkey.jar!/locale/fr/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/fr/gm-addons.dtd
index ee807e9..97df9ba 100644
--- a/chrome/greasemonkey.jar!/locale/fr/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/fr/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Exécuter en dernier">
<!ENTITY ExecuteLater "Exécuter plus tard">
<!ENTITY ExecuteSooner "Exécuter plus tôt">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Descendre">
<!ENTITY MoveDown.accesskey "D">
<!ENTITY MoveToBottom "Descendre tout en bas">
diff --git a/chrome/greasemonkey.jar!/locale/fr/gm-browser.properties b/chrome/greasemonkey.jar!/locale/fr/gm-browser.properties
index b917ca2..4d5cf5d 100644
--- a/chrome/greasemonkey.jar!/locale/fr/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/fr/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Veuillez d'abord choisir votre éditeur de texte préféré
editor.please_pick_executable=Veuillez choisir l'application exécutable à utiliser pour modifier les scripts utilisateur.
editor.could_not_launch=Lancement de l'éditeur impossible.
newscript.noname=Veuillez donner un nom à votre script.
-newscript.nonamespace=Veuillez fournir un espace de nom URI valide pour votre script.\n(par exemple. "http://userscripts.org/users/useridnumber")
-newscript.exists=Un script avec ce nom est déjà installé.\nL'écraser?
+newscript.nonamespace=Veuillez fournir un espace de nom URI valide pour votre script.n(par exemple. "http://userscripts.org/users/useridnumber")
+newscript.exists=Un script avec ce nom est déjà installé.nL'écraser?
diff --git a/chrome/greasemonkey.jar!/locale/fr/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/fr/greasemonkey.dtd
index 57ef4d9..9b49c8b 100644
--- a/chrome/greasemonkey.jar!/locale/fr/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/fr/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Scripts Utilisateur">
<!ENTITY Uninstall "Désinstaller">
<!ENTITY AlsoUninstallPrefs "Désinstalle également les préférences associées">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "Aucun script installé n'est exécuté sur cette page.">
<!ENTITY greasemonkey.youhavenoscripts "Vous avez aucun scripts d'installé">
<!ENTITY greasemonkey.getuserscripts "Obtenir des scripts utilisateur">
diff --git a/chrome/greasemonkey.jar!/locale/gl-ES/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/gl-ES/gm-addons.dtd
index a0bab82..c2cfd50 100644
--- a/chrome/greasemonkey.jar!/locale/gl-ES/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/gl-ES/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Executar último">
<!ENTITY ExecuteLater "Executar máis tarde">
<!ENTITY ExecuteSooner "Executar antes">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Mover abaixo">
<!ENTITY MoveDown.accesskey "D">
<!ENTITY MoveToBottom "Mover ao fondo">
diff --git a/chrome/greasemonkey.jar!/locale/gl-ES/gm-browser.properties b/chrome/greasemonkey.jar!/locale/gl-ES/gm-browser.properties
index c4a9a36..84cf404 100644
--- a/chrome/greasemonkey.jar!/locale/gl-ES/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/gl-ES/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Escolla primeiro o editor de texto que prefira
editor.please_pick_executable=Seleccione o executable do aplicativo que desexa para editar os scripts.
editor.could_not_launch=Non foi posible iniciar o editor.
newscript.noname=Introduza un nome para o script.
-newscript.nonamespace=Introduza un URI de espazo de nome válido para o script.\n(p.e. "http://userscripts.org/users/useridnumber")
-newscript.exists=Xa hai instalado un script con ese nome\nDesexa sobrescribilo?
+newscript.nonamespace=Introduza un URI de espazo de nome válido para o script.n(p.e. "http://userscripts.org/users/useridnumber")
+newscript.exists=Xa hai instalado un script con ese nomenDesexa sobrescribilo?
diff --git a/chrome/greasemonkey.jar!/locale/gl-ES/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/gl-ES/greasemonkey.dtd
index 82c477f..4563a34 100644
--- a/chrome/greasemonkey.jar!/locale/gl-ES/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/gl-ES/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Scripts">
<!ENTITY Uninstall "Desinstalar">
<!ENTITY AlsoUninstallPrefs "Tamén desinstalar as preferencias asociadas">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "Ningún script instalado en execución.">
<!ENTITY greasemonkey.youhavenoscripts "Non ten scripts de usuario instalados">
<!ENTITY greasemonkey.getuserscripts "Obter scripts">
diff --git a/chrome/greasemonkey.jar!/locale/he-IL/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/he-IL/gm-addons.dtd
index d85e800..cbc78e5 100644
--- a/chrome/greasemonkey.jar!/locale/he-IL/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/he-IL/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "בצע בסוף">
<!ENTITY ExecuteLater "בצע מאוחר יותר">
<!ENTITY ExecuteSooner "בצע מוקדם יותר">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "הזז למטה">
<!ENTITY MoveDown.accesskey "ט">
<!ENTITY MoveToBottom "הזז לסוף הרשימה">
diff --git a/chrome/greasemonkey.jar!/locale/he-IL/gm-browser.properties b/chrome/greasemonkey.jar!/locale/he-IL/gm-browser.properties
index 90a71d8..7a3ac60 100644
--- a/chrome/greasemonkey.jar!/locale/he-IL/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/he-IL/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=נא בחר תחילה את עורך הטקסט המועדף על
editor.please_pick_executable=נא לבחור יישום בר-הפעלה לשימוש עריכת סקריפטים של משתמש
editor.could_not_launch=אין אפשרות להפעיל את העורך
newscript.noname=נא לבחור שם עבור הסקריפט שלך
-newscript.nonamespace=נא לבחור כתובת אינטרנט תקינה עבור הסקריפט שלך.\n(כגון: "http://userscripts.org/users/useridnumber")
-newscript.exists=סקריפט עם שם זה כבר מותקן.\nלהחליף אותו?
+newscript.nonamespace=נא לבחור כתובת אינטרנט תקינה עבור הסקריפט שלך.n(כגון: "http://userscripts.org/users/useridnumber")
+newscript.exists=סקריפט עם שם זה כבר מותקן.nלהחליף אותו?
diff --git a/chrome/greasemonkey.jar!/locale/he-IL/gm-cludes.dtd b/chrome/greasemonkey.jar!/locale/he-IL/gm-cludes.dtd
index a2c1e4d..1fdb583 100644
--- a/chrome/greasemonkey.jar!/locale/he-IL/gm-cludes.dtd
+++ b/chrome/greasemonkey.jar!/locale/he-IL/gm-cludes.dtd
@@ -3,6 +3,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
">
<!ENTITY promptForNewPage.title "הוסף דף">
<!ENTITY promptForNewPage.defVal "http://example.com/*">
@@ -11,6 +29,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
">
<!ENTITY promptForEdit.title "ערוך דף">
<!ENTITY button.add "הוסף...">
diff --git a/chrome/greasemonkey.jar!/locale/he-IL/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/he-IL/greasemonkey.dtd
index 9b01f57..c445ae5 100644
--- a/chrome/greasemonkey.jar!/locale/he-IL/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/he-IL/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "סקריפטים של משתמש">
<!ENTITY Uninstall "הסר">
<!ENTITY AlsoUninstallPrefs "הסר גם את העדפות המשויכות לסקריפט משתמש זה">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "לא קיימים סקריפטים מותקנים פעילים בדף זה.">
<!ENTITY greasemonkey.youhavenoscripts "לא מותקנים אצלך סקריפטים של משתמש">
<!ENTITY greasemonkey.getuserscripts "השג סקריפטים של משתמש">
diff --git a/chrome/greasemonkey.jar!/locale/hu/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/hu/gm-addons.dtd
index e040116..5bc5165 100644
--- a/chrome/greasemonkey.jar!/locale/hu/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/hu/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Végrehajtás utolsóként">
<!ENTITY ExecuteLater "Végrehajtás később">
<!ENTITY ExecuteSooner "Végrehajtás előbb">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Mozgatás lefele">
<!ENTITY MoveDown.accesskey "l">
<!ENTITY MoveToBottom "Mozgatás legalulra">
diff --git a/chrome/greasemonkey.jar!/locale/hu/gm-browser.properties b/chrome/greasemonkey.jar!/locale/hu/gm-browser.properties
index 9a05acd..e9f1914 100644
--- a/chrome/greasemonkey.jar!/locale/hu/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/hu/gm-browser.properties
@@ -18,4 +18,4 @@ editor.please_pick_executable=Válasszon ki egy alkalmazást amivel a parancsfá
editor.could_not_launch=A szerkesztő indítása sikertelen
newscript.noname=Kérlek adjon egy nevet a parancsfájlnak.
newscript.nonamespace=Kérlek adjon meg egy szabványos névtér URI-t a parancsfájlhoz.
-newscript.exists=Már létezik parancsfájl ezzel a névvel.\nOK a felülíráshoz?
+newscript.exists=Már létezik parancsfájl ezzel a névvel.nOK a felülíráshoz?
diff --git a/chrome/greasemonkey.jar!/locale/hu/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/hu/greasemonkey.dtd
index bd56252..8dd0668 100644
--- a/chrome/greasemonkey.jar!/locale/hu/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/hu/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Parancsfájlok">
<!ENTITY Uninstall "Eltávolítás">
<!ENTITY AlsoUninstallPrefs "Hozzákapcsolódó beállítások eltávolítása">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "Ezen az oldalon nem futnak telepített parancsfájlok.">
<!ENTITY greasemonkey.youhavenoscripts "Nincsenek parancsfájlok telepítve">
<!ENTITY greasemonkey.getuserscripts "Töltsön le parancsfájlokat!">
diff --git a/chrome/greasemonkey.jar!/locale/it-IT/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/it-IT/gm-addons.dtd
index d444a7d..bd35cf6 100644
--- a/chrome/greasemonkey.jar!/locale/it-IT/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/it-IT/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Execute last">
<!ENTITY ExecuteLater "Execute later">
<!ENTITY ExecuteSooner "Execute sooner">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Move Down">
<!ENTITY MoveDown.accesskey "D">
<!ENTITY MoveToBottom "Move To Bottom">
diff --git a/chrome/greasemonkey.jar!/locale/it-IT/gm-browser.properties b/chrome/greasemonkey.jar!/locale/it-IT/gm-browser.properties
index 5997e14..9610ec0 100644
--- a/chrome/greasemonkey.jar!/locale/it-IT/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/it-IT/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Come prima operazione, selezionare l'editor testuale desiderato
editor.please_pick_executable=Selezionare un'applicazione eseguibile da utilizzare per la modifica degli script utente.
editor.could_not_launch=Impossibile avviare l'editor.
newscript.noname=Fornire un nome per lo script.
-newscript.nonamespace=Fornire un URI namespace valido per lo script.\n(es.: "http://userscripts.org/users/useridnumber")
-newscript.exists=Uno script con quel nome è già installato.\nSovrasciverlo?
+newscript.nonamespace=Fornire un URI namespace valido per lo script.n(es.: "http://userscripts.org/users/useridnumber")
+newscript.exists=Uno script con quel nome è già installato.nSovrasciverlo?
diff --git a/chrome/greasemonkey.jar!/locale/it-IT/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/it-IT/greasemonkey.dtd
index 9d868ae..7ad7b8e 100644
--- a/chrome/greasemonkey.jar!/locale/it-IT/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/it-IT/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "User Scripts">
<!ENTITY Uninstall "Disinstalla">
<!ENTITY AlsoUninstallPrefs "Disinstalla anche le preferenze associate">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "No installed scripts run on this page.">
<!ENTITY greasemonkey.youhavenoscripts "You don't have any user scripts installed">
<!ENTITY greasemonkey.getuserscripts "Get user scripts">
diff --git a/chrome/greasemonkey.jar!/locale/ja-JP/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/ja-JP/gm-addons.dtd
index 63cd3e0..c2df07f 100644
--- a/chrome/greasemonkey.jar!/locale/ja-JP/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/ja-JP/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "最後に実行">
<!ENTITY ExecuteLater "後で実行">
<!ENTITY ExecuteSooner "先に実行">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "下へ移動">
<!ENTITY MoveDown.accesskey "D">
<!ENTITY MoveToBottom "最後へ移動">
diff --git a/chrome/greasemonkey.jar!/locale/ja-JP/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/ja-JP/greasemonkey.dtd
index cd0dba7..f92a518 100644
--- a/chrome/greasemonkey.jar!/locale/ja-JP/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/ja-JP/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "ユーザスクリプト">
<!ENTITY Uninstall "削除">
<!ENTITY AlsoUninstallPrefs "関連付けられた設定も削除">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "このページで実行するスクリプトはインストールされていません。">
<!ENTITY greasemonkey.youhavenoscripts "スクリプトが何もインストールされていません">
<!ENTITY greasemonkey.getuserscripts "スクリプトを入手">
diff --git a/chrome/greasemonkey.jar!/locale/ko-KR/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/ko-KR/gm-addons.dtd
index 5916a6f..93bffd3 100644
--- a/chrome/greasemonkey.jar!/locale/ko-KR/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/ko-KR/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "마지막에 실행">
<!ENTITY ExecuteLater "나중에 실행">
<!ENTITY ExecuteSooner "일찍 실행">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "아래로 이동">
<!ENTITY MoveDown.accesskey "D">
<!ENTITY MoveToBottom "맨 아래로 이동">
diff --git a/chrome/greasemonkey.jar!/locale/ko-KR/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/ko-KR/greasemonkey.dtd
index 79cc5c6..c359576 100644
--- a/chrome/greasemonkey.jar!/locale/ko-KR/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/ko-KR/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "유저 스크립트">
<!ENTITY Uninstall "삭제">
<!ENTITY AlsoUninstallPrefs "관련된 환경 설정도 삭제">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "No installed scripts run on this page.">
<!ENTITY greasemonkey.youhavenoscripts "You don't have any user scripts installed">
<!ENTITY greasemonkey.getuserscripts "Get user scripts">
diff --git a/chrome/greasemonkey.jar!/locale/nl/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/nl/gm-addons.dtd
index ff54805..fae8607 100644
--- a/chrome/greasemonkey.jar!/locale/nl/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/nl/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Als laatste uitvoeren">
<!ENTITY ExecuteLater "Later uitvoeren">
<!ENTITY ExecuteSooner "Eerder uitvoeren">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Omlaag">
<!ENTITY MoveDown.accesskey "L">
<!ENTITY MoveToBottom "Onderaan plaatsen">
diff --git a/chrome/greasemonkey.jar!/locale/nl/gm-browser.properties b/chrome/greasemonkey.jar!/locale/nl/gm-browser.properties
index 1c4102e..a557640 100644
--- a/chrome/greasemonkey.jar!/locale/nl/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/nl/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Kies eerst de tekstverwerker van uw voorkeur
editor.please_pick_executable=Kies een uitvoerbare toepassing die u wilt gebruiken om gebruikersscripts te bewerken.
editor.could_not_launch=Kan de tekstverwerker niet starten.
newscript.noname=Geef een naam op voor uw script.
-newscript.nonamespace=Geef een geldige namespace-URI voor uw script op.\n(b.v. “http://userscripts.org/users/useridnumber”)
-newscript.exists=Er is al een script met die naam geïnstalleerd.\nMag dit overschreven worden?
+newscript.nonamespace=Geef een geldige namespace-URI voor uw script op.n(b.v. “http://userscripts.org/users/useridnumber”)
+newscript.exists=Er is al een script met die naam geïnstalleerd.nMag dit overschreven worden?
diff --git a/chrome/greasemonkey.jar!/locale/nl/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/nl/greasemonkey.dtd
index 545fb39..1c05247 100644
--- a/chrome/greasemonkey.jar!/locale/nl/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/nl/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Gebruikersscripts">
<!ENTITY Uninstall "Deïnstalleren">
<!ENTITY AlsoUninstallPrefs "Bijbehorende instellingen ook verwijderen">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "Op deze pagina draaien geen geïnstalleerde scripts.">
<!ENTITY greasemonkey.youhavenoscripts "Er zijn geen gebruikersscripts geïnstalleerd">
<!ENTITY greasemonkey.getuserscripts "Verkrijg gebruikersscripts">
diff --git a/chrome/greasemonkey.jar!/locale/pl/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/pl/gm-addons.dtd
index 45813a6..02a7d36 100644
--- a/chrome/greasemonkey.jar!/locale/pl/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/pl/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Wykonaj jako ostatni">
<!ENTITY ExecuteLater "Wykonaj później">
<!ENTITY ExecuteSooner "Wykonaj wcześniej">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Przenieś w dół">
<!ENTITY MoveDown.accesskey "P">
<!ENTITY MoveToBottom "Przenieś na dół">
diff --git a/chrome/greasemonkey.jar!/locale/pl/gm-browser.properties b/chrome/greasemonkey.jar!/locale/pl/gm-browser.properties
index 0bbc7e5..19c55b6 100644
--- a/chrome/greasemonkey.jar!/locale/pl/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/pl/gm-browser.properties
@@ -12,10 +12,10 @@ greeting.btnAccess=I
alert.fromURI=Pobieranie skryptu…
alert.fromURI.failure=Nie można pobrać skryptu
alert.success=Zainstalowano
-alert.failure=Wystąpił błąd podczas instalacji skryptu:\n
+alert.failure=Wystąpił błąd podczas instalacji skryptu:n
editor.prompt=Wybierz najpierw preferowany edytor tekstu
editor.please_pick_executable=Wskaż plik wykonywalny aplikacji używanej do edycji skryptów.
editor.could_not_launch=Nie można otworzyć edytora.
newscript.noname=Wprowadź nazwę skryptu.
-newscript.nonamespace=Wprowadź lokalizację skryptu.\n(Np. http://userscripts.org/users/useridnumber)
-newscript.exists=Skrypt o takiej nazwie jest już zainstalowany.\nZastąpić skrypt?
+newscript.nonamespace=Wprowadź lokalizację skryptu.n(Np. http://userscripts.org/users/useridnumber)
+newscript.exists=Skrypt o takiej nazwie jest już zainstalowany.nZastąpić skrypt?
diff --git a/chrome/greasemonkey.jar!/locale/pl/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/pl/greasemonkey.dtd
index 8f334be..242ead9 100644
--- a/chrome/greasemonkey.jar!/locale/pl/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/pl/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Skrypty">
<!ENTITY Uninstall "Odinstaluj">
<!ENTITY AlsoUninstallPrefs "Odinstaluj również skojarzone ustawienia">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "Na tej stronie nie ma zainstalowanych skryptów do uruchomienia.">
<!ENTITY greasemonkey.youhavenoscripts "Nie masz zainstalowanych żadnych skryptów użytkownika">
<!ENTITY greasemonkey.getuserscripts "Pobierz skrypty">
diff --git a/chrome/greasemonkey.jar!/locale/pt-BR/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/pt-BR/gm-addons.dtd
index 4ef9b0d..6e1bde7 100644
--- a/chrome/greasemonkey.jar!/locale/pt-BR/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/pt-BR/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Executar por último">
<!ENTITY ExecuteLater "Executar depois">
<!ENTITY ExecuteSooner "Executar antes">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Mover Para Baixo">
<!ENTITY MoveDown.accesskey "B">
<!ENTITY MoveToBottom "Mover Para o Fim">
diff --git a/chrome/greasemonkey.jar!/locale/pt-BR/gm-browser.properties b/chrome/greasemonkey.jar!/locale/pt-BR/gm-browser.properties
index 684ec21..81c596b 100644
--- a/chrome/greasemonkey.jar!/locale/pt-BR/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/pt-BR/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Favor escolher seu editor de texto preferido primeiro
editor.please_pick_executable=Favor escolher um aplicativo executável para usar para editar scripts de usuário.
editor.could_not_launch=Não foi possível abrir o editor.
newscript.noname=Favor atribuir um nome ao seu script.
-newscript.nonamespace=Favor fornecer um namespace válido para seu script.\n(p. ex. "http://userscripts.org/users/useridnumber")
-newscript.exists=Um script com este nome já está instalado.\nSobrescrever?
+newscript.nonamespace=Favor fornecer um namespace válido para seu script.n(p. ex. "http://userscripts.org/users/useridnumber")
+newscript.exists=Um script com este nome já está instalado.nSobrescrever?
diff --git a/chrome/greasemonkey.jar!/locale/pt-BR/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/pt-BR/greasemonkey.dtd
index 0581b7f..9f31b30 100644
--- a/chrome/greasemonkey.jar!/locale/pt-BR/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/pt-BR/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Scripts de Usuário">
<!ENTITY Uninstall "Desinstalar">
<!ENTITY AlsoUninstallPrefs "Desinstalar também configurações associadas">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "Nenhum script instalado será executado nessa página.">
<!ENTITY greasemonkey.youhavenoscripts "Você não possui nenhum script de usuário instalado">
<!ENTITY greasemonkey.getuserscripts "Obter scripts de usuário">
diff --git a/chrome/greasemonkey.jar!/locale/ro-RO/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/ro-RO/gm-addons.dtd
index d444a7d..bd35cf6 100644
--- a/chrome/greasemonkey.jar!/locale/ro-RO/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/ro-RO/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Execute last">
<!ENTITY ExecuteLater "Execute later">
<!ENTITY ExecuteSooner "Execute sooner">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Move Down">
<!ENTITY MoveDown.accesskey "D">
<!ENTITY MoveToBottom "Move To Bottom">
diff --git a/chrome/greasemonkey.jar!/locale/ro-RO/gm-browser.properties b/chrome/greasemonkey.jar!/locale/ro-RO/gm-browser.properties
index b09d669..60ab5f8 100644
--- a/chrome/greasemonkey.jar!/locale/ro-RO/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/ro-RO/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Please choose your preferred text editor first
editor.please_pick_executable=Please pick an executable application to use to edit user scripts.
editor.could_not_launch=Could not launch editor.
newscript.noname=Please provide a name for your script.
-newscript.nonamespace=Please provide a valid namespace URI for your script.\n(e.g. "http://userscripts.org/users/useridnumber")
-newscript.exists=A script with that name is already installed.\nOK to overwrite?
+newscript.nonamespace=Please provide a valid namespace URI for your script.n(e.g. "http://userscripts.org/users/useridnumber")
+newscript.exists=A script with that name is already installed.nOK to overwrite?
diff --git a/chrome/greasemonkey.jar!/locale/ro-RO/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/ro-RO/greasemonkey.dtd
index 6a60d07..820c8f1 100644
--- a/chrome/greasemonkey.jar!/locale/ro-RO/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/ro-RO/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "User Scripts">
<!ENTITY Uninstall "Uninstall">
<!ENTITY AlsoUninstallPrefs "Also uninstall associated preferences">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "No installed scripts run on this page.">
<!ENTITY greasemonkey.youhavenoscripts "You don't have any user scripts installed">
<!ENTITY greasemonkey.getuserscripts "Get user scripts">
diff --git a/chrome/greasemonkey.jar!/locale/ru-RU/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/ru-RU/gm-addons.dtd
index b8cc1fe..c90de30 100644
--- a/chrome/greasemonkey.jar!/locale/ru-RU/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/ru-RU/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Выполнять последним">
<!ENTITY ExecuteLater "Выполнять позднее">
<!ENTITY ExecuteSooner "Выполнять ранее">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Переместить ниже">
<!ENTITY MoveDown.accesskey "и">
<!ENTITY MoveToBottom "Переместить в конец">
diff --git a/chrome/greasemonkey.jar!/locale/ru-RU/gm-browser.properties b/chrome/greasemonkey.jar!/locale/ru-RU/gm-browser.properties
index f73eb8f..7daf9ce 100644
--- a/chrome/greasemonkey.jar!/locale/ru-RU/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/ru-RU/gm-browser.properties
@@ -13,9 +13,9 @@ alert.fromURI=Загружается скрипт...
alert.fromURI.failure=Невозможно загрузить скрипт
alert.success=успешно установлен.
alert.failure=Ошибка при установке скрипта:
-editor.prompt=Выберите текстовый редактор (напр. "c:\\windows\\notepad.exe")
+editor.prompt=Выберите текстовый редактор (напр. "c:windowsnotepad.exe")
editor.please_pick_executable=Выберите приложение для редактирования скриптов.
editor.could_not_launch=Невозможно запустить редактор.
newscript.noname=Задайте имя для вашего скрипта.
newscript.nonamespace=Задайте пространство для вашего скрипта.
-newscript.exists=Скрипт с таким же названием уже установлен.\nПерезаписать?
+newscript.exists=Скрипт с таким же названием уже установлен.nПерезаписать?
diff --git a/chrome/greasemonkey.jar!/locale/ru-RU/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/ru-RU/greasemonkey.dtd
index 191e603..fb0b57b 100644
--- a/chrome/greasemonkey.jar!/locale/ru-RU/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/ru-RU/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Пользовательские скрипты">
<!ENTITY Uninstall "Удалить">
<!ENTITY AlsoUninstallPrefs "Также удалить все связанные настройки">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "No installed scripts run on this page.">
<!ENTITY greasemonkey.youhavenoscripts "You don't have any user scripts installed">
<!ENTITY greasemonkey.getuserscripts "Get user scripts">
diff --git a/chrome/greasemonkey.jar!/locale/ru/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/ru/gm-addons.dtd
index cd59b7a..8ac04f7 100644
--- a/chrome/greasemonkey.jar!/locale/ru/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/ru/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Выполнять последним">
<!ENTITY ExecuteLater "Выполнять позднее">
<!ENTITY ExecuteSooner "Выполнять ранее">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Переместить ниже">
<!ENTITY MoveDown.accesskey "и">
<!ENTITY MoveToBottom "Переместить в конец">
diff --git a/chrome/greasemonkey.jar!/locale/ru/gm-browser.properties b/chrome/greasemonkey.jar!/locale/ru/gm-browser.properties
index 09e7eec..39f0000 100644
--- a/chrome/greasemonkey.jar!/locale/ru/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/ru/gm-browser.properties
@@ -13,9 +13,9 @@ alert.fromURI=Скрипт загружается…
alert.fromURI.failure=Невозможно загрузить скрипт
alert.success=успешно установлен.
alert.failure=Ошибка при установке скрипта:
-editor.prompt=Выберите текстовый редактор (напр. "c:\\windows\\notepad.exe")
+editor.prompt=Выберите текстовый редактор (напр. "c:windowsnotepad.exe")
editor.please_pick_executable=Выберите приложение для редактирования скриптов.
editor.could_not_launch=Невозможно запустить редактор.
newscript.noname=Задайте имя для вашего скрипта.
newscript.nonamespace=Задайте пространство для вашего скрипта.
-newscript.exists=Скрипт с таким именем уже установлен.\nПерезаписать?
+newscript.exists=Скрипт с таким именем уже установлен.nПерезаписать?
diff --git a/chrome/greasemonkey.jar!/locale/ru/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/ru/greasemonkey.dtd
index 84233d2..4bcb694 100644
--- a/chrome/greasemonkey.jar!/locale/ru/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/ru/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Пользовательские скрипты">
<!ENTITY Uninstall "Удаление">
<!ENTITY AlsoUninstallPrefs "Также удалять настройки скриптов">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "Для этой страницы нет скриптов">
<!ENTITY greasemonkey.youhavenoscripts "У вас не установлено ни одного скрипта">
<!ENTITY greasemonkey.getuserscripts "Скачать скрипты">
diff --git a/chrome/greasemonkey.jar!/locale/si-LK/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/si-LK/gm-addons.dtd
index a3aa18f..1eeed0a 100644
--- a/chrome/greasemonkey.jar!/locale/si-LK/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/si-LK/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "අවසානයට ක්රියාකරවන්න">
<!ENTITY ExecuteLater "පසුව ක්රියාත්මක කරන්න">
<!ENTITY ExecuteSooner "ඉක්මනින් ක්රියාත්මක කරන්න">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "පහලට යවන්න">
<!ENTITY MoveDown.accesskey "D">
<!ENTITY MoveToBottom "අවසානයට යවන්න">
diff --git a/chrome/greasemonkey.jar!/locale/si-LK/gm-browser.properties b/chrome/greasemonkey.jar!/locale/si-LK/gm-browser.properties
index 47ecc44..4f7a52f 100644
--- a/chrome/greasemonkey.jar!/locale/si-LK/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/si-LK/gm-browser.properties
@@ -18,4 +18,4 @@ editor.please_pick_executable=පරිශීලක ස්ක්රිප්
editor.could_not_launch=වදන් සකසනය (Editor) ක්රියාත්මක කල නොහැක
newscript.noname=කරුනාකර ඔබගේ ස්ක්රිප්ටයට නමක් ලබාදෙන්න
newscript.nonamespace=කරුනාකර ඔබගේ පරිශීලක ස්ක්රිටයට වලංගු නාමාවකාශය URI යක් ලබාදෙන්න (උ.දා. "http://userscripts.org/users/useridnumber")
-newscript.exists=මෙම නමින් දැනටමත් වෙන ස්ක්රිප්ටයක් පවතී.\nඋඩින් ලිවීම සදහා OK ක්ලික් කරන්න ?
+newscript.exists=මෙම නමින් දැනටමත් වෙන ස්ක්රිප්ටයක් පවතී.nඋඩින් ලිවීම සදහා OK ක්ලික් කරන්න ?
diff --git a/chrome/greasemonkey.jar!/locale/si-LK/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/si-LK/greasemonkey.dtd
index 7f0d573..402fdcc 100644
--- a/chrome/greasemonkey.jar!/locale/si-LK/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/si-LK/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "පරිශීලක ස්ක්රිප්ට්">
<!ENTITY Uninstall "ඉවත් කරන්න">
<!ENTITY AlsoUninstallPrefs "එසේම ආශ්රිත අභිමතද ඉවත් කරන්න">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "No installed scripts run on this page.">
<!ENTITY greasemonkey.youhavenoscripts "You don't have any user scripts installed">
<!ENTITY greasemonkey.getuserscripts "Get user scripts">
diff --git a/chrome/greasemonkey.jar!/locale/sr/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/sr/gm-addons.dtd
index 5eae54a..6593598 100644
--- a/chrome/greasemonkey.jar!/locale/sr/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/sr/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Изврши последњу">
<!ENTITY ExecuteLater "Изврши касније">
<!ENTITY ExecuteSooner "Изврши раније">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Помери надоле">
<!ENTITY MoveDown.accesskey "Д">
<!ENTITY MoveToBottom "Помери на крај">
diff --git a/chrome/greasemonkey.jar!/locale/sr/gm-browser.properties b/chrome/greasemonkey.jar!/locale/sr/gm-browser.properties
index a08f791..c12a2dc 100644
--- a/chrome/greasemonkey.jar!/locale/sr/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/sr/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Прво изаберите жељени уређивач текс
editor.please_pick_executable=Изаберите извршну датотеку програма којег желите користити за уређивање корисничких скрипти.
editor.could_not_launch=Није могуће покренути уређивач.
newscript.noname=Унесите назив своје скрипте.
-newscript.nonamespace=Унесите важећу адресу ваше скрипте.\n(нпр. http://userscripts.org/users/useridnumber)
+newscript.nonamespace=Унесите важећу адресу ваше скрипте.n(нпр. http://userscripts.org/users/useridnumber)
newscript.exists=Скрипта са тим именом већ постоји. Желите ли да је препишете?
diff --git a/chrome/greasemonkey.jar!/locale/sr/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/sr/greasemonkey.dtd
index 9548102..336a2b9 100644
--- a/chrome/greasemonkey.jar!/locale/sr/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/sr/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Корисничке скрипте">
<!ENTITY Uninstall "Уклони">
<!ENTITY AlsoUninstallPrefs "Уклони и подешавања">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "Ни једна скрипта се не покреће на овој станици">
<!ENTITY greasemonkey.youhavenoscripts "Није инсталирана ни једна корисничка скрипта">
<!ENTITY greasemonkey.getuserscripts "Набави коприсничке скрипте">
diff --git a/chrome/greasemonkey.jar!/locale/sv-SE/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/sv-SE/gm-addons.dtd
index 3967ecf..1d0858a 100644
--- a/chrome/greasemonkey.jar!/locale/sv-SE/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/sv-SE/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Kör sist">
<!ENTITY ExecuteLater "Kör senare">
<!ENTITY ExecuteSooner "Kör tidigare">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Flytta nedåt">
<!ENTITY MoveDown.accesskey "n">
<!ENTITY MoveToBottom "Flytta nederst">
diff --git a/chrome/greasemonkey.jar!/locale/sv-SE/gm-browser.properties b/chrome/greasemonkey.jar!/locale/sv-SE/gm-browser.properties
index 591a5f2..48d1085 100644
--- a/chrome/greasemonkey.jar!/locale/sv-SE/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/sv-SE/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Var vänlig välj först det textredigeringsprogram du föredrar
editor.please_pick_executable=Var vänlig välj ett körbart program att använda till att redigera användarskript.
editor.could_not_launch=Kunde inte starta redigeringsprogrammet.
newscript.noname=Var vänlig ange ett namn på ditt skript.
-newscript.nonamespace=Var vänlig ange en giltig namnrymds-URI för ditt skript.\n(t.ex. "http://userscripts.org/users/användarensidnummer")
-newscript.exists=Ett skript med det namnet har redan installerats.\nSkall det ersättas?
+newscript.nonamespace=Var vänlig ange en giltig namnrymds-URI för ditt skript.n(t.ex. "http://userscripts.org/users/användarensidnummer")
+newscript.exists=Ett skript med det namnet har redan installerats.nSkall det ersättas?
diff --git a/chrome/greasemonkey.jar!/locale/sv-SE/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/sv-SE/greasemonkey.dtd
index 991377a..488c7bb 100644
--- a/chrome/greasemonkey.jar!/locale/sv-SE/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/sv-SE/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Användarskript">
<!ENTITY Uninstall "Avinstallera">
<!ENTITY AlsoUninstallPrefs "Avinstallera även associerade inställningar">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "Inga installerade skript körs på denna sida.">
<!ENTITY greasemonkey.youhavenoscripts "Du har inga installerade användarskript">
<!ENTITY greasemonkey.getuserscripts "Hämta användarskript">
diff --git a/chrome/greasemonkey.jar!/locale/tr-TR/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/tr-TR/gm-addons.dtd
index 030e6f5..7a2d8a9 100644
--- a/chrome/greasemonkey.jar!/locale/tr-TR/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/tr-TR/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Son Yürüt">
<!ENTITY ExecuteLater "Sonra yürüt">
<!ENTITY ExecuteSooner "Er geç yürüt">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Aşağı Taşı">
<!ENTITY MoveDown.accesskey "D">
<!ENTITY MoveToBottom "En alta Taşı">
diff --git a/chrome/greasemonkey.jar!/locale/tr-TR/gm-browser.properties b/chrome/greasemonkey.jar!/locale/tr-TR/gm-browser.properties
index 7a472c1..e8f9ffb 100644
--- a/chrome/greasemonkey.jar!/locale/tr-TR/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/tr-TR/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Lütfen önce tercih edilen metin editörünü seçin
editor.please_pick_executable=Lütfen kullanıcı betiklerini düzenlemek için çalıştırılabilir bir uygulama alın.
editor.could_not_launch=Editör başlatılamadı.
newscript.noname=Betiğinize bir isim verin.
-newscript.nonamespace=Betiğiniz için geçerli bir URL verin.\n(örneğin "http://userscripts.org/users/useridnumber")
-newscript.exists=Bu isimde bir betik zaten yüklü.\nÜzerine yazılsın mı?
+newscript.nonamespace=Betiğiniz için geçerli bir URL verin.n(örneğin "http://userscripts.org/users/useridnumber")
+newscript.exists=Bu isimde bir betik zaten yüklü.nÜzerine yazılsın mı?
diff --git a/chrome/greasemonkey.jar!/locale/tr-TR/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/tr-TR/greasemonkey.dtd
index 60e5e05..0d29a1f 100644
--- a/chrome/greasemonkey.jar!/locale/tr-TR/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/tr-TR/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Kullanıcı Betikleri">
<!ENTITY Uninstall "Kaldır">
<!ENTITY AlsoUninstallPrefs "Ayrıca ilişkili tercihleri kaldır">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "Bu sayfada çalışan yüklenmiş betikler yok">
<!ENTITY greasemonkey.youhavenoscripts "Yüklü bir kullanıcı betiğiniz yok">
<!ENTITY greasemonkey.getuserscripts "Kullanıcı betikleri al">
diff --git a/chrome/greasemonkey.jar!/locale/tr-TR/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/tr/gm-addons.dtd
similarity index 95%
copy from chrome/greasemonkey.jar!/locale/tr-TR/gm-addons.dtd
copy to chrome/greasemonkey.jar!/locale/tr/gm-addons.dtd
index 030e6f5..7a2d8a9 100644
--- a/chrome/greasemonkey.jar!/locale/tr-TR/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/tr/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Son Yürüt">
<!ENTITY ExecuteLater "Sonra yürüt">
<!ENTITY ExecuteSooner "Er geç yürüt">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Aşağı Taşı">
<!ENTITY MoveDown.accesskey "D">
<!ENTITY MoveToBottom "En alta Taşı">
diff --git a/chrome/greasemonkey.jar!/locale/tr-TR/gm-addons.properties b/chrome/greasemonkey.jar!/locale/tr/gm-addons.properties
similarity index 100%
copy from chrome/greasemonkey.jar!/locale/tr-TR/gm-addons.properties
copy to chrome/greasemonkey.jar!/locale/tr/gm-addons.properties
diff --git a/chrome/greasemonkey.jar!/locale/tr-TR/gm-browser.properties b/chrome/greasemonkey.jar!/locale/tr/gm-browser.properties
similarity index 80%
copy from chrome/greasemonkey.jar!/locale/tr-TR/gm-browser.properties
copy to chrome/greasemonkey.jar!/locale/tr/gm-browser.properties
index 7a472c1..b708759 100644
--- a/chrome/greasemonkey.jar!/locale/tr-TR/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/tr/gm-browser.properties
@@ -3,7 +3,7 @@ menuitem.new=Yeni Kullanıcı Betiği
menuitem.install=Bu Kullanıcı Betiğini Yükle
tooltip.disabled=Greasemonkey devre dışı.
tooltip.enabled=Greasemonkey etkin.
-tooltip.loading=Yükleniyor ...
+tooltip.loading=Yükleniyor...
statusbar.installed=başarıyla yüklendi
install.msg=Aşağıdaki Greasemonkey kullanıcı betiğini yüklemek için:
greeting.msg=Bu bir Greasemonkey kullacı betiği.Kullanmaya başlamak için kura tıklayın.
@@ -17,5 +17,5 @@ editor.prompt=Lütfen önce tercih edilen metin editörünü seçin
editor.please_pick_executable=Lütfen kullanıcı betiklerini düzenlemek için çalıştırılabilir bir uygulama alın.
editor.could_not_launch=Editör başlatılamadı.
newscript.noname=Betiğinize bir isim verin.
-newscript.nonamespace=Betiğiniz için geçerli bir URL verin.\n(örneğin "http://userscripts.org/users/useridnumber")
-newscript.exists=Bu isimde bir betik zaten yüklü.\nÜzerine yazılsın mı?
+newscript.nonamespace=Betiğiniz için geçerli bir URL verin.n(örneğin "http://userscripts.org/users/useridnumber")
+newscript.exists=Bu isimde bir betik zaten yüklü.nÜzerine yazılsın mı?
diff --git a/chrome/greasemonkey.jar!/locale/tr-TR/gm-cludes.dtd b/chrome/greasemonkey.jar!/locale/tr/gm-cludes.dtd
similarity index 90%
copy from chrome/greasemonkey.jar!/locale/tr-TR/gm-cludes.dtd
copy to chrome/greasemonkey.jar!/locale/tr/gm-cludes.dtd
index c1fcc8f..ebe7cd2 100644
--- a/chrome/greasemonkey.jar!/locale/tr-TR/gm-cludes.dtd
+++ b/chrome/greasemonkey.jar!/locale/tr/gm-cludes.dtd
@@ -3,10 +3,10 @@
<!ENTITY promptForNewPage.defVal "http://example.com/*">
<!ENTITY promptForEdit.msg "Aşağıdaki sayfanın URL'sini değiştirin. Joker (*) karakteri kullanarak birden fazla sayfa belirtebilirsiniz.">
<!ENTITY promptForEdit.title "Sayfa Düzenle">
-<!ENTITY button.add "Ekle ...">
+<!ENTITY button.add "Ekle...">
<!ENTITY button.addUserExclude "Bir kullanıcı ekle">
<!ENTITY button.addUserInclude "Bir kullanıcı ekle">
-<!ENTITY button.edit "Düzenle ...">
+<!ENTITY button.edit "Düzenle...">
<!ENTITY button.remove "Kaldır">
<!ENTITY label.grpIncluded "Dahil Sayfalar">
<!ENTITY label.grpExcluded "Hariç Sayfalar">
diff --git a/chrome/greasemonkey.jar!/locale/tr-TR/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/tr/greasemonkey.dtd
similarity index 82%
copy from chrome/greasemonkey.jar!/locale/tr-TR/greasemonkey.dtd
copy to chrome/greasemonkey.jar!/locale/tr/greasemonkey.dtd
index 60e5e05..4788de8 100644
--- a/chrome/greasemonkey.jar!/locale/tr-TR/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/tr/greasemonkey.dtd
@@ -2,9 +2,9 @@
<!ENTITY menu.install.accesskey "I">
<!ENTITY menu.show "Kullanıcı betik kaynağını gör">
<!ENTITY menu.show.accesskey "V">
-<!ENTITY menu.commands "Kullanıcı Betik Komutları ...">
+<!ENTITY menu.commands "Kullanıcı Betik Komutları...">
<!ENTITY menu.commands.accesskey "C">
-<!ENTITY menu.new "Yeni Kullanıcı Betiği ...">
+<!ENTITY menu.new "Yeni Kullanıcı Betiği...">
<!ENTITY menu.new.accesskey "N">
<!ENTITY menu.manage "Kullanıcı Betiklerini Yönet...">
<!ENTITY menu.manage.accesskey "M">
@@ -29,9 +29,13 @@
<!ENTITY userscripts "Kullanıcı Betikleri">
<!ENTITY Uninstall "Kaldır">
<!ENTITY AlsoUninstallPrefs "Ayrıca ilişkili tercihleri kaldır">
-<!ENTITY greasemonkey.noscriptshere "Bu sayfada çalışan yüklenmiş betikler yok">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
+<!ENTITY greasemonkey.noscriptshere "Bu sayfada çalışan yüklenmiş betikler yok.">
<!ENTITY greasemonkey.youhavenoscripts "Yüklü bir kullanıcı betiğiniz yok">
<!ENTITY greasemonkey.getuserscripts "Kullanıcı betikleri al">
-<!ENTITY scriptprefs.title "Greasemonkey Kullanıcı Betik Tercihleri -!">
+<!ENTITY scriptprefs.title "Greasemonkey Kullanıcı Betik Tercihleri -!!">
<!ENTITY scriptprefs.usersettings "Kullanıcı Ayarları">
<!ENTITY scriptprefs.scriptsettings "Betik Ayarları">
diff --git a/chrome/greasemonkey.jar!/locale/tr-TR/greasemonkey.properties b/chrome/greasemonkey.jar!/locale/tr/greasemonkey.properties
similarity index 100%
copy from chrome/greasemonkey.jar!/locale/tr-TR/greasemonkey.properties
copy to chrome/greasemonkey.jar!/locale/tr/greasemonkey.properties
diff --git a/chrome/greasemonkey.jar!/locale/uk-UA/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/uk-UA/gm-addons.dtd
index d444a7d..bd35cf6 100644
--- a/chrome/greasemonkey.jar!/locale/uk-UA/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/uk-UA/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Execute last">
<!ENTITY ExecuteLater "Execute later">
<!ENTITY ExecuteSooner "Execute sooner">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Move Down">
<!ENTITY MoveDown.accesskey "D">
<!ENTITY MoveToBottom "Move To Bottom">
diff --git a/chrome/greasemonkey.jar!/locale/uk-UA/gm-browser.properties b/chrome/greasemonkey.jar!/locale/uk-UA/gm-browser.properties
index 81d47ad..70d0b80 100644
--- a/chrome/greasemonkey.jar!/locale/uk-UA/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/uk-UA/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=Please choose your preferred text editor first
editor.please_pick_executable=Please pick an executable application to use to edit user scripts.
editor.could_not_launch=Could not launch editor.
newscript.noname=Please provide a name for your script.
-newscript.nonamespace=Please provide a valid namespace URI for your script.\n(e.g. "http://userscripts.org/users/useridnumber")
-newscript.exists=A script with that name is already installed.\nOK to overwrite?
+newscript.nonamespace=Please provide a valid namespace URI for your script.n(e.g. "http://userscripts.org/users/useridnumber")
+newscript.exists=A script with that name is already installed.nOK to overwrite?
diff --git a/chrome/greasemonkey.jar!/locale/uk-UA/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/uk-UA/greasemonkey.dtd
index e38b1da..547d7d5 100644
--- a/chrome/greasemonkey.jar!/locale/uk-UA/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/uk-UA/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "User Scripts">
<!ENTITY Uninstall "Uninstall">
<!ENTITY AlsoUninstallPrefs "Also uninstall associated preferences">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "Жоден зі встановлених скриптів не працює на цій сторінці.">
<!ENTITY greasemonkey.youhavenoscripts "You don't have any user scripts installed">
<!ENTITY greasemonkey.getuserscripts "Get user scripts">
diff --git a/chrome/greasemonkey.jar!/locale/uk/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/uk/gm-addons.dtd
index 3c7463a..3ef1d23 100644
--- a/chrome/greasemonkey.jar!/locale/uk/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/uk/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "Виконувати останнім">
<!ENTITY ExecuteLater "Виконувати пізніше">
<!ENTITY ExecuteSooner "Виконувати раніше">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "Нижче">
<!ENTITY MoveDown.accesskey "Н">
<!ENTITY MoveToBottom "Донизу">
diff --git a/chrome/greasemonkey.jar!/locale/uk/gm-browser.properties b/chrome/greasemonkey.jar!/locale/uk/gm-browser.properties
index 6c20c5d..3df3be4 100644
--- a/chrome/greasemonkey.jar!/locale/uk/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/uk/gm-browser.properties
@@ -13,9 +13,9 @@ alert.fromURI=Завантажується скрипт…
alert.fromURI.failure=Неможливо завантажити скрипт
alert.success=успішно встановлено.
alert.failure=Помилка під час встановлення скрипту:
-editor.prompt=Виберіть текстовий редактор (напр. "c:\\windows\\notepad.exe")
+editor.prompt=Виберіть текстовий редактор (напр. "c:windowsnotepad.exe")
editor.please_pick_executable=Будь ласка вкажіть програму котрою редагувати скрипти.
editor.could_not_launch=Не можу запустити редактора.
newscript.noname=Будь ласка, назвіть ваш скрипт.
-newscript.nonamespace=Будь ласка, вкажіть простір імен для вашого скрипту.\n(напр. "http://userscripts.org/users/номер")
-newscript.exists=Скрипт з таким іменем вже встановлено.\nБажаєте перезаписати?
+newscript.nonamespace=Будь ласка, вкажіть простір імен для вашого скрипту.n(напр. "http://userscripts.org/users/номер")
+newscript.exists=Скрипт з таким іменем вже встановлено.nБажаєте перезаписати?
diff --git a/chrome/greasemonkey.jar!/locale/uk/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/uk/greasemonkey.dtd
index 5570f51..9554809 100644
--- a/chrome/greasemonkey.jar!/locale/uk/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/uk/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "Скрипти">
<!ENTITY Uninstall "Вилучити">
<!ENTITY AlsoUninstallPrefs "Вилучити також пов'язані налаштування">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "Жоден зі встановлених скриптів не працює на цій сторінці.">
<!ENTITY greasemonkey.youhavenoscripts "Жодних скриптів не встановлено">
<!ENTITY greasemonkey.getuserscripts "Отримати користувацькі скрипти">
diff --git a/chrome/greasemonkey.jar!/locale/zh-CN/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/zh-CN/gm-addons.dtd
index ca11889..3ca4756 100644
--- a/chrome/greasemonkey.jar!/locale/zh-CN/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/zh-CN/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "最后执行">
<!ENTITY ExecuteLater "稍后执行">
<!ENTITY ExecuteSooner "稍早执行">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "下移">
<!ENTITY MoveDown.accesskey "D">
<!ENTITY MoveToBottom "移至最后">
diff --git a/chrome/greasemonkey.jar!/locale/zh-CN/gm-browser.properties b/chrome/greasemonkey.jar!/locale/zh-CN/gm-browser.properties
index a9da510..fcf95bc 100644
--- a/chrome/greasemonkey.jar!/locale/zh-CN/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/zh-CN/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=请先选择您喜欢用的文本编辑器
editor.please_pick_executable=请选择一个可执行程序用来编辑用户脚本。
editor.could_not_launch=无法启动编辑器。
newscript.noname=请为您的脚本命名。
-newscript.nonamespace=请为您的脚本提供一个有效的命名空间。\n(例如 [http://userscripts.org/users/useridnumber])
-newscript.exists=已安装了同名的脚本。\n覆盖同名的脚本?
+newscript.nonamespace=请为您的脚本提供一个有效的命名空间。n(例如 [http://userscripts.org/users/useridnumber])
+newscript.exists=已安装了同名的脚本。n覆盖同名的脚本?
diff --git a/chrome/greasemonkey.jar!/locale/zh-CN/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/zh-CN/greasemonkey.dtd
index 53d646f..55f89b9 100644
--- a/chrome/greasemonkey.jar!/locale/zh-CN/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/zh-CN/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "用户脚本">
<!ENTITY Uninstall "卸载">
<!ENTITY AlsoUninstallPrefs "同时清除相关的首选项设置">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "在此页面上没有已安装的脚本运行。">
<!ENTITY greasemonkey.youhavenoscripts "您没有安装任何用户脚本">
<!ENTITY greasemonkey.getuserscripts "获取用户脚本">
diff --git a/chrome/greasemonkey.jar!/locale/zh-TW/gm-addons.dtd b/chrome/greasemonkey.jar!/locale/zh-TW/gm-addons.dtd
index ffc81c1..b18f2f4 100644
--- a/chrome/greasemonkey.jar!/locale/zh-TW/gm-addons.dtd
+++ b/chrome/greasemonkey.jar!/locale/zh-TW/gm-addons.dtd
@@ -5,6 +5,8 @@
<!ENTITY ExecuteLast "最後執行">
<!ENTITY ExecuteLater "較晚執行">
<!ENTITY ExecuteSooner "較早執行">
+<!ENTITY FindUpdate "Find Update">
+<!ENTITY InstallUpdate "Install Update">
<!ENTITY MoveDown "下移">
<!ENTITY MoveDown.accesskey "D">
<!ENTITY MoveToBottom "移到最下面">
diff --git a/chrome/greasemonkey.jar!/locale/zh-TW/gm-browser.properties b/chrome/greasemonkey.jar!/locale/zh-TW/gm-browser.properties
index 8c82593..9a24247 100644
--- a/chrome/greasemonkey.jar!/locale/zh-TW/gm-browser.properties
+++ b/chrome/greasemonkey.jar!/locale/zh-TW/gm-browser.properties
@@ -17,5 +17,5 @@ editor.prompt=請先選擇您常用的純文字編輯器
editor.please_pick_executable=請挑一個可執行程式來編輯使用者腳本。
editor.could_not_launch=無法執行編輯器。
newscript.noname=請輸入您的使用者腳本的名稱。
-newscript.nonamespace=請為您的腳本提供一個有效的命名空間 URI。\n(例如「http://userscripts.org/users/useridnumber」)
-newscript.exists=已安裝了一個同名的腳本。\n確定要覆蓋嗎?
+newscript.nonamespace=請為您的腳本提供一個有效的命名空間 URI。n(例如「http://userscripts.org/users/useridnumber」)
+newscript.exists=已安裝了一個同名的腳本。n確定要覆蓋嗎?
diff --git a/chrome/greasemonkey.jar!/locale/zh-TW/greasemonkey.dtd b/chrome/greasemonkey.jar!/locale/zh-TW/greasemonkey.dtd
index bfd6627..10fb81c 100644
--- a/chrome/greasemonkey.jar!/locale/zh-TW/greasemonkey.dtd
+++ b/chrome/greasemonkey.jar!/locale/zh-TW/greasemonkey.dtd
@@ -29,6 +29,10 @@
<!ENTITY userscripts "使用者腳本">
<!ENTITY Uninstall "腳本移除設定">
<!ENTITY AlsoUninstallPrefs "同時移除相關偏好設定">
+<!ENTITY UpdateChecking "Update Checking">
+<!ENTITY EnableUpdateChecking "Enable automatic update checking of scripts">
+<!ENTITY UpdateInterval "Minimum number of days between update checks">
+<!ENTITY RequireSecureUpdates "Require secure updates">
<!ENTITY greasemonkey.noscriptshere "沒有任何在此頁面執行的腳本。">
<!ENTITY greasemonkey.youhavenoscripts "您尚未安裝任何腳本">
<!ENTITY greasemonkey.getuserscripts "取得使用者腳本">
diff --git a/components/greasemonkey.js b/components/greasemonkey.js
index 1c15669..121f661 100644
--- a/components/greasemonkey.js
+++ b/components/greasemonkey.js
@@ -25,7 +25,9 @@ var gExtensionPath = (function() {
} catch (e) { dump(e+'\n'+uneval(e)+'\n\n'); return 'x'; }
})();
-var gMaxJSVersion = "1.6";
+// Only a particular set of strings are allowed. See: http://goo.gl/ex2LJ
+var gMaxJSVersion = "1.8";
+
var gMenuCommands = [];
var gStartupHasRun = false;
@@ -64,6 +66,53 @@ function GM_apiLeakCheck(apiName) {
return true;
}
+function createSandbox(
+ aScript, aContentWin, aChromeWin, aFirebugConsole, aUrl
+) {
+ var unsafeWin = aContentWin.wrappedJSObject;
+ var sandbox = new Components.utils.Sandbox(aContentWin);
+
+ if (GM_util.compareFirefoxVersion("4.0") < 0) {
+ // Fixes .. something confusing. Must be before __proto__ assignment.
+ // See #1192
+ sandbox.document = aContentWin.document;
+ }
+
+ sandbox.__proto__ = aContentWin;
+ sandbox.unsafeWindow = unsafeWin;
+ sandbox.XPathResult = Ci.nsIDOMXPathResult;
+
+ // Temporary workaround for #1318. TODO: Remove when upstream bug fixed.
+ sandbox.alert = alert;
+
+ sandbox.console = aFirebugConsole ? aFirebugConsole : new GM_console(aScript);
+
+ var imp = sandbox.importFunction;
+ imp(function(css) { GM_addStyle(aContentWin.document, css); }, 'GM_addStyle');
+ imp(GM_util.hitch(new GM_ScriptLogger(aScript), 'log'), 'GM_log');
+ imp(GM_util.hitch(null, openInTab, aContentWin, aChromeWin), 'GM_openInTab');
+ imp(GM_util.hitch(null, registerMenuCommand, aContentWin, aChromeWin, aScript),
+ 'GM_registerMenuCommand');
+
+ var scriptStorage = new GM_ScriptStorage(aScript);
+ imp(GM_util.hitch(scriptStorage, 'deleteValue'), 'GM_deleteValue');
+ imp(GM_util.hitch(scriptStorage, 'getValue'), 'GM_getValue');
+ imp(GM_util.hitch(scriptStorage, 'setValue'), 'GM_setValue');
+
+ var scriptResources = new GM_Resources(aScript);
+ imp(GM_util.hitch(scriptResources, 'getResourceURL'), 'GM_getResourceURL');
+ imp(GM_util.hitch(scriptResources, 'getResourceText'), 'GM_getResourceText');
+
+ // The .importMethod() is safe because it can't return object values (I
+ // think?) -- but sometimes we want to, so in that case do a straight assign.
+ sandbox.GM_listValues = GM_util.hitch(scriptStorage, 'listValues');
+ sandbox.GM_xmlhttpRequest = GM_util.hitch(
+ new GM_xmlhttpRequester(aContentWin, aChromeWin, aUrl),
+ 'contentStartRequest');
+
+ return sandbox;
+}
+
function findError(script, lineNumber) {
var start = 0;
var end = 1;
@@ -110,6 +159,66 @@ function isTempScript(uri) {
return file.parent.equals(tmpDir) && file.leafName != "newscript.user.js";
}
+function openInTab(safeContentWin, chromeWin, url, aLoadInBackground) {
+ if (!GM_apiLeakCheck("GM_openInTab")) {
+ return undefined;
+ }
+ if ('undefined' == typeof aLoadInBackground) aLoadInBackground = null;
+
+ var browser = chromeWin.gBrowser;
+ var tabs = browser.mTabs /* Firefox <=3.6 */ || browser.tabs /* >=4.0 */;
+ var currentTab = tabs[
+ browser.getBrowserIndexForDocument(safeContentWin.document)];
+ var newTab = browser.loadOneTab(url, {'inBackground': aLoadInBackground});
+ var newWin = GM_windowForTab(newTab, browser);
+
+ var afterCurrent = Cc["@mozilla.org/preferences-service;1"]
+ .getService(Ci.nsIPrefService)
+ .getBranch("browser.tabs.")
+ .getBoolPref("insertRelatedAfterCurrent");
+ if (afterCurrent) {
+ browser.moveTabTo(newTab, currentTab._tPos + 1);
+ }
+
+ return newWin;
+};
+
+function registerMenuCommand(
+ wrappedContentWin, chromeWin, script,
+ commandName, commandFunc, accessKey, unused, accessKey2
+) {
+ if (!GM_apiLeakCheck("GM_registerMenuCommand")) {
+ return;
+ }
+
+ if (wrappedContentWin.top != wrappedContentWin) {
+ // Only register menu commands for the top level window.
+ return;
+ }
+
+ // Legacy support: if all five parameters were specified, (from when two
+ // were for accelerators) use the last one as the access key.
+ if ('undefined' != typeof accessKey2) {
+ accessKey = accessKey2;
+ }
+
+ if (accessKey
+ && (("string" != typeof accessKey) || (accessKey.length != 1))
+ ) {
+ throw new Error('Error with menu command "'
+ + commandName + '": accessKey must be a single character');
+ }
+
+ var command = {
+ name: commandName,
+ accessKey: accessKey,
+ commandFunc: commandFunc,
+ contentWindow: wrappedContentWin,
+ contentWindowId: GM_util.windowId(wrappedContentWin),
+ frozen: false};
+ gMenuCommands.push(command);
+};
+
function runScriptInSandbox(code, sandbox, script) {
try {
GM_runScript(code, sandbox, gMaxJSVersion);
@@ -165,9 +274,8 @@ function startup() {
loader.loadSubScript("chrome://greasemonkey/content/scriptdownloader.js");
loader.loadSubScript("chrome://greasemonkey/content/third-party/mpl-utils.js");
- // Firefox 3.6 and higher supports 1.8.
- if (GM_util.compareFirefoxVersion("3.6") >= 0) {
- gMaxJSVersion = "1.8";
+ if (GM_util.compareFirefoxVersion("4.0") >= 0) {
+ gMaxJSVersion = "ECMAv5";
}
// Firefox <4 reports a different stack.fileName for the module.
@@ -208,70 +316,6 @@ service.prototype.QueryInterface = XPCOMUtils.generateQI([
Ci.nsIContentPolicy
]);
-/////////////////////////////////// Privates ///////////////////////////////////
-
-service.prototype._openInTab = function(
- safeContentWin, chromeWin, url, aLoadInBackground
-) {
- if (!GM_apiLeakCheck("GM_openInTab")) {
- return undefined;
- }
- if ('undefined' == typeof aLoadInBackground) aLoadInBackground = null;
-
- var browser = chromeWin.gBrowser;
- var tabs = browser.mTabs /* Firefox <=3.6 */ || browser.tabs /* >=4.0 */;
- var currentTab = tabs[
- browser.getBrowserIndexForDocument(safeContentWin.document)];
- var newTab = browser.loadOneTab(url, {'inBackground': aLoadInBackground});
- var newWin = GM_windowForTab(newTab, browser);
-
- var afterCurrent = Cc["@mozilla.org/preferences-service;1"]
- .getService(Ci.nsIPrefService)
- .getBranch("browser.tabs.")
- .getBoolPref("insertRelatedAfterCurrent");
- if (afterCurrent) {
- browser.moveTabTo(newTab, currentTab._tPos + 1);
- }
-
- return newWin;
-};
-
-service.prototype._registerMenuCommand = function(
- wrappedContentWin, chromeWin, script,
- commandName, commandFunc, accessKey, unused, accessKey2
-) {
- if (!GM_apiLeakCheck("GM_registerMenuCommand")) {
- return;
- }
-
- if (wrappedContentWin.top != wrappedContentWin) {
- // Only register menu commands for the top level window.
- return;
- }
-
- // Legacy support: if all five parameters were specified, (from when two
- // were for accelerators) use the last one as the access key.
- if ('undefined' != typeof accessKey2) {
- accessKey = accessKey2;
- }
-
- if (accessKey
- && (("string" != typeof accessKey) || (accessKey.length != 1))
- ) {
- throw new Error('Error with menu command "'
- + commandName + '": accessKey must be a single character');
- }
-
- var command = {
- name: commandName,
- accessKey: accessKey,
- commandFunc: commandFunc,
- contentWindow: wrappedContentWin,
- contentWindowId: GM_util.windowId(wrappedContentWin),
- frozen: false};
- gMenuCommands.push(command);
-};
-
/////////////////////////////// nsIContentPolicy ///////////////////////////////
service.prototype.shouldLoad = function(ct, cl, org, ctx, mt, ext) {
@@ -343,7 +387,7 @@ service.prototype.contentDestroyed = function(contentWindowId) {
if (closed || (command.contentWindowId == contentWindowId)) {
gMenuCommands.splice(index, 1);
}
- });
+ }, true);
};
service.prototype.contentFrozen = function(contentWindowId) {
@@ -365,14 +409,15 @@ service.prototype.runScripts = function(
if (!GM_util.getEnabled() || !GM_util.isGreasemonkeyable(url)) return;
if (GM_prefRoot.getValue('enableScriptRefreshing')) {
- this._config.updateModifiedScripts(aWrappedContentWin, aChromeWin);
+ this._config.updateModifiedScripts(aRunWhen, aWrappedContentWin, aChromeWin);
}
var scripts = this.config.getMatchingScripts(function(script) {
- return GM_util.scriptMatchesUrlAndRuns(script, url, aRunWhen);
- });
+ return GM_util.scriptMatchesUrlAndRuns(script, url, aRunWhen);
+ });
if (scripts.length > 0) {
this.injectScripts(scripts, url, aWrappedContentWin, aChromeWin);
+ this._config.checkScriptsForRemoteUpdates(scripts);
}
};
@@ -383,62 +428,11 @@ service.prototype.ignoreNextScript = function() {
service.prototype.injectScripts = function(
scripts, url, wrappedContentWin, chromeWin
) {
- var sandbox;
- var script;
- var logger;
- var console;
- var storage;
- var xmlhttpRequester;
- var resources;
- var unsafeContentWin = wrappedContentWin.wrappedJSObject;
var firebugConsole = getFirebugConsole(wrappedContentWin, chromeWin);
- for (var i = 0; script = scripts[i]; i++) {
- sandbox = new Components.utils.Sandbox(wrappedContentWin);
-
- logger = new GM_ScriptLogger(script);
-
- console = firebugConsole ? firebugConsole : new GM_console(script);
-
- storage = new GM_ScriptStorage(script);
- xmlhttpRequester = new GM_xmlhttpRequester(
- wrappedContentWin, chromeWin, url);
- resources = new GM_Resources(script);
-
- sandbox.unsafeWindow = unsafeContentWin;
-
- // hack XPathResult since that is so commonly used
- sandbox.XPathResult = Ci.nsIDOMXPathResult;
-
- // add our own APIs
- sandbox.GM_addStyle = function(css) {
- GM_addStyle(wrappedContentWin.document, css);
- };
- sandbox.GM_log = GM_util.hitch(logger, "log");
- sandbox.console = console;
- sandbox.GM_setValue = GM_util.hitch(storage, "setValue");
- sandbox.GM_getValue = GM_util.hitch(storage, "getValue");
- sandbox.GM_deleteValue = GM_util.hitch(storage, "deleteValue");
- sandbox.GM_listValues = GM_util.hitch(storage, "listValues");
- sandbox.GM_getResourceURL = GM_util.hitch(resources, "getResourceURL");
- sandbox.GM_getResourceText = GM_util.hitch(resources, "getResourceText");
- sandbox.GM_openInTab = GM_util.hitch(
- this, "_openInTab", wrappedContentWin, chromeWin);
- sandbox.GM_xmlhttpRequest = GM_util.hitch(xmlhttpRequester,
- "contentStartRequest");
- sandbox.GM_registerMenuCommand = GM_util.hitch(
- this, "_registerMenuCommand", wrappedContentWin, chromeWin, script);
-
- // Re-wrap the window before assigning it to the sandbox.__proto__
- // This is a workaround for a bug in which the Security Manager
- // vetoes the use of eval.
- sandbox.__proto__ = new XPCNativeWrapper(unsafeContentWin);
-
- Components.utils.evalInSandbox(
- "var document = window.document;", sandbox);
-
- // Temporary workaround for #1318. TODO: Remove when upstream bug fixed.
- sandbox.alert = alert;
+ for (var i = 0, script = null; script = scripts[i]; i++) {
+ var sandbox = createSandbox(
+ script, wrappedContentWin, chromeWin, firebugConsole, url);
var requires = [];
var offsets = [];
@@ -468,14 +462,16 @@ service.prototype.injectScripts = function(
};
service.prototype.withAllMenuCommandsForWindowId = function(
- contentWindowId, callback
+ aContentWindowId, aCallback, aForce
) {
+ if(!aContentWindowId && !aForce) return;
+
var l = gMenuCommands.length - 1;
for (var i = l, command = null; command = gMenuCommands[i]; i--) {
- if (!contentWindowId
- || (command.contentWindowId == contentWindowId)
+ if (aForce
+ || (command.contentWindowId == aContentWindowId)
) {
- callback(i, command);
+ aCallback(i, command);
}
}
};
diff --git a/defaults/preferences/greasemonkey.js b/defaults/preferences/greasemonkey.js
index af7ce6c..166ef40 100644
--- a/defaults/preferences/greasemonkey.js
+++ b/defaults/preferences/greasemonkey.js
@@ -4,5 +4,8 @@ pref("greasemonkey.globalExcludes", '[]');
pref("greasemonkey.unmhtIsGreaseable", false);
pref("greasemonkey.enableScriptRefreshing", true);
pref("greasemonkey.uninstallPreferences", true);
+pref("greasemonkey.enableUpdateChecking", false);
+pref("greasemonkey.minDaysBetweenUpdateChecks", 7);
+pref("greasemonkey.requireSecureUpdates", true);
pref("greasemonkey.haveInsertedToolbarbutton", false);
pref("greasemonkey.logChrome", false);
diff --git a/install.rdf b/install.rdf
index dc6c2f6..e9977c4 100644
--- a/install.rdf
+++ b/install.rdf
@@ -6,7 +6,7 @@
<Description about="urn:mozilla:install-manifest">
<em:id>{e4a8a97b-f2ed-450b-b12d-ee082ba24781}</em:id>
- <em:version>0.9.11</em:version>
+ <em:version>0.9.12</em:version>
<em:creator>Aaron Boodman; http://youngpup.net/</em:creator>
<em:homepageURL>http://www.greasespot.net/</em:homepageURL>
<em:optionsURL>chrome://greasemonkey/content/options.xul</em:optionsURL>
@@ -38,6 +38,7 @@
<em:contributor>Nikolas Coukouma; http://atrus.org/</em:contributor>
<em:contributor>Ori Avtallon</em:contributor>
<em:contributor>Pak Kei (logo); http://arkidect.com/</em:contributor>
+ <em:contributor>Sam Larison; http://samlarison.com/</em:contributor>
<em:contributor>Sergio Abreu; http://sitedosergio.sitesbr.net/</em:contributor>
<em:contributor>Tommi Rautava</em:contributor>
diff --git a/modules/addons4.js b/modules/addons4.js
index 482facc..6f2e7fb 100755
--- a/modules/addons4.js
+++ b/modules/addons4.js
@@ -8,7 +8,9 @@
// Module exported symbols.
var EXPORTED_SYMBOLS = [
'GM_addonsStartup', 'SCRIPT_ADDON_TYPE',
- 'ScriptAddonFactoryByScript', 'ScriptAddonReplaceScript'];
+ 'ScriptAddonFactoryByScript', 'ScriptAddonReplaceScript',
+ 'ScriptInstallFactoryByAddon',
+ ];
////////////////////////////////////////////////////////////////////////////////
// Module level imports / constants / globals.
@@ -44,6 +46,19 @@ var AddonProvider = {
});
aCallback(scriptAddons);
}
+ },
+
+ getInstallsByTypes: function(aTypes, aCallback) {
+ var scriptInstalls = [];
+ GM_util.getService().config.scripts.forEach(function(script) {
+ if (!script.updateAvailable) return;
+
+ var aAddon = ScriptAddonFactoryByScript(script);
+ var scriptInstall = aAddon._installer || new ScriptInstall(aAddon);
+
+ scriptInstalls.push(scriptInstall);
+ });
+ aCallback(scriptInstalls);
}
};
@@ -79,7 +94,6 @@ function ScriptAddon(aScript) {
this.version = this._script.version;
this.description = this._script.description;
this.iconURL = this._script.icon.fileURL;
- this.size = this._script.size;
this.updateDate = this._script.modifiedDate;
}
@@ -95,13 +109,15 @@ ScriptAddon.prototype.scope = AddonManager.SCOPE_PROFILE;
ScriptAddon.prototype.name = null;
ScriptAddon.prototype.creator = null;
ScriptAddon.prototype.pendingOperations = 0;
+ScriptAddon.prototype.applyBackgroundUpdates = AddonManager.AUTOUPDATE_DISABLE;
+ScriptAddon.prototype.operationsRequiringRestart = AddonManager.OP_NEEDS_RESTART_NONE;
// Optional attributes
ScriptAddon.prototype.description = null;
-ScriptAddon.prototype.size = null;
// Private and custom attributes.
ScriptAddon.prototype._script = null;
+ScriptAddon.prototype._installer = null;
ScriptAddon.prototype.__defineGetter__('executionIndex',
function ScriptAddon_getExecutionIndex() {
@@ -115,7 +131,7 @@ function ScriptAddon_getIsActive() {
});
ScriptAddon.prototype.__defineGetter__('optionsURL',
-function ScriptAddon_getIsActive() {
+function ScriptAddon_getOptionsURL() {
return 'chrome://greasemonkey/content/scriptprefs.xul#' + this._script.id;
});
@@ -143,6 +159,7 @@ function ScriptAddon_getPermissions() {
perms |= this.userDisabled
? AddonManager.PERM_CAN_ENABLE
: AddonManager.PERM_CAN_DISABLE;
+ if (this._script.updateURL) perms |= AddonManager.PERM_CAN_UPGRADE;
return perms;
});
@@ -150,16 +167,21 @@ ScriptAddon.prototype.isCompatibleWith = function() {
return true;
};
-ScriptAddon.prototype.findUpdates = function(aListener) {
- if ('onNoCompatibilityUpdateAvailable' in aListener) {
- aListener.onNoCompatibilityUpdateAvailable(this);
- }
- if ('onNoUpdateAvailable' in aListener) {
- aListener.onNoUpdateAvailable(this);
- }
- if ('onUpdateFinished' in aListener) {
- aListener.onUpdateFinished(this);
+ScriptAddon.prototype.findUpdates = function(aListener, aReason) {
+ function updateCallback(aAvailable) {
+ if (aAvailable) {
+ var scriptInstall = ScriptInstallFactoryByAddon(this);
+ AddonManagerPrivate.callAddonListeners("onNewInstall", scriptInstall);
+ aListener.onUpdateAvailable(this, scriptInstall);
+ } else {
+ aListener.onNoUpdateAvailable(this);
+ }
}
+ this._script.checkForRemoteUpdate(true, GM_util.hitch(this, updateCallback));
+};
+
+ScriptAddon.prototype.toString = function() {
+ return '[ScriptAddon object ' + this.id + ']';
};
ScriptAddon.prototype.uninstall = function() {
@@ -179,6 +201,60 @@ ScriptAddon.prototype.performUninstall = function() {
delete ScriptAddonCache[this.id];
};
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+var ScriptInstallCache = {};
+function ScriptInstallFactoryByAddon(aAddon) {
+ if (!(aAddon.id in ScriptInstallCache)) {
+ ScriptInstallCache[aAddon.id] = new ScriptInstall(aAddon);
+ }
+ return ScriptInstallCache[aAddon.id];
+}
+
+function ScriptInstall(aAddon) {
+ this._script = aAddon._script;
+ aAddon._installer = this;
+
+ this.name = this._script.name;
+ this.version = this._script.version;
+ this.iconURL = this._script.icon.fileURL;
+ this.existingAddon = aAddon;
+}
+
+// Required attributes.
+ScriptInstall.prototype.addon = null;
+ScriptInstall.prototype.error = null;
+ScriptInstall.prototype.file = null;
+ScriptInstall.prototype.maxProgress = -1;
+ScriptInstall.prototype.pendingOperations = 0;
+ScriptInstall.prototype.progress = -1;
+ScriptInstall.prototype.releaseNotesURI = null;
+ScriptInstall.prototype.sourceURI = null;
+ScriptInstall.prototype.state = AddonManager.STATE_AVAILABLE;
+ScriptInstall.prototype.type = 'user-script';
+
+// Private and custom attributes.
+ScriptInstall.prototype._script = null;
+
+ScriptInstall.prototype.install = function() {
+ function installCallback() {
+ AddonManagerPrivate.callAddonListeners(
+ 'onInstallEnded', this, this.existingAddon);
+ }
+
+ AddonManagerPrivate.callAddonListeners('onInstallStarted', this);
+ var chromeWin = GM_util.getBrowserWindow();
+ this._script.installUpdate(chromeWin, GM_util.hitch(this, installCallback));
+};
+
+ScriptInstall.prototype.cancel = function() {};
+ScriptInstall.prototype.addListener = function() {};
+ScriptInstall.prototype.removeListener = function() {};
+
+ScriptInstall.prototype.toString = function() {
+ return '[ScriptInstall object ' + this._script.id + ']';
+};
+
////////////////////////////////////////////////////////////////////////////////
var WindowObserver = {
diff --git a/modules/third-party/MatchPattern.js b/modules/third-party/MatchPattern.js
index 1be4f39..e95e639 100644
--- a/modules/third-party/MatchPattern.js
+++ b/modules/third-party/MatchPattern.js
@@ -40,8 +40,8 @@
var EXPORTED_SYMBOLS = ['MatchPattern'];
-Components.utils.import("resource://gre/modules/NetUtil.jsm");
Components.utils.import("resource://greasemonkey/third-party/convert2RegExp.js");
+Components.utils.import("resource://greasemonkey/util.js");
var validSchemes = ['http', 'https', 'ftp', 'file'];
var REG_HOST = /^(?:\*\.)?[^*\/]+$|^\*$|^$/;
diff --git a/modules/util/getEditor.js b/modules/util/getEditor.js
index b2cd81f..d47c392 100644
--- a/modules/util/getEditor.js
+++ b/modules/util/getEditor.js
@@ -1,6 +1,13 @@
Components.utils.import('resource://greasemonkey/prefmanager.js');
+Components.utils.import('resource://greasemonkey/util.js');
const EXPORTED_SYMBOLS = ['getEditor'];
+var stringBundle = Components
+ .classes["@mozilla.org/intl/stringbundle;1"]
+ .getService(Components.interfaces.nsIStringBundleService)
+ .createBundle("chrome://greasemonkey/locale/gm-browser.properties");
+const EDITOR_PROMPT = stringBundle.GetStringFromName("editor.prompt");
+const PICK_EXE = stringBundle.GetStringFromName("editor.please_pick_executable");
function getEditor(change) {
var editorPath = GM_prefRoot.getValue("editor");
@@ -9,7 +16,7 @@ function getEditor(change) {
var editor;
try {
editor = Components.classes["@mozilla.org/file/local;1"]
- .createInstance(Components.interfaces.nsILocalFile);
+ .createInstance(Components.interfaces.nsILocalFile);
editor.followLinks = true;
editor.initWithPath(editorPath);
} catch (e) {
@@ -30,10 +37,10 @@ function getEditor(change) {
while (true) {
var nsIFilePicker = Components.interfaces.nsIFilePicker;
var filePicker = Components.classes["@mozilla.org/filepicker;1"]
- .createInstance(nsIFilePicker);
+ .createInstance(nsIFilePicker);
- filePicker.init(window, GM_stringBundle.GetStringFromName("editor.prompt"),
- nsIFilePicker.modeOpen);
+ filePicker.init(
+ GM_util.getBrowserWindow(), EDITOR_PROMPT, nsIFilePicker.modeOpen);
filePicker.appendFilters(nsIFilePicker.filterApplication);
filePicker.appendFilters(nsIFilePicker.filterAll);
@@ -46,7 +53,7 @@ function getEditor(change) {
GM_prefRoot.setValue("editor", filePicker.file.path);
return filePicker.file;
} else {
- alert(GM_stringBundle.GetStringFromName("editor.please_pick_executable"));
+ alert(PICK_EXE);
}
}
}
diff --git a/modules/util/hitch.js b/modules/util/hitch.js
index ba53619..b0ad646 100644
--- a/modules/util/hitch.js
+++ b/modules/util/hitch.js
@@ -1,8 +1,15 @@
const EXPORTED_SYMBOLS = ['hitch'];
-function hitch(obj, meth) {
- if (!obj[meth]) {
- throw "method '" + meth + "' does not exist on object '" + obj + "'";
+function hitch(obj, method) {
+ if (obj && method && ('string' == typeof method)) {
+ if (!obj[method]) {
+ throw "method '" + method + "' does not exist on object '" + obj + "'";
+ }
+ method = obj[method];
+ } else if ('function' == typeof method) {
+ obj = obj || {};
+ } else {
+ throw "Invalid arguments to GM_util.hitch().";
}
var staticArgs = Array.prototype.splice.call(arguments, 2, arguments.length);
@@ -17,6 +24,6 @@ function hitch(obj, meth) {
// invoke the original function with the correct this obj and the combined
// list of static and dynamic arguments.
- return obj[meth].apply(obj, args);
+ return method.apply(obj, args);
};
}
diff --git a/modules/util/timeout.js b/modules/util/timeout.js
new file mode 100644
index 0000000..a2d3d42
--- /dev/null
+++ b/modules/util/timeout.js
@@ -0,0 +1,11 @@
+Components.utils.import('resource://greasemonkey/util.js');
+
+const EXPORTED_SYMBOLS = ['timeout'];
+
+function timeout(aDelay, aCallback) {
+ var timer = Components.classes["@mozilla.org/timer;1"]
+ .createInstance(Components.interfaces.nsITimer);
+ timer.initWithCallback(
+ {'notify': aCallback}, aDelay,
+ Components.interfaces.nsITimer.TYPE_ONE_SHOT);
+}
diff --git a/modules/util/writeToFile.js b/modules/util/writeToFile.js
index 29da4ad..07f93f7 100644
--- a/modules/util/writeToFile.js
+++ b/modules/util/writeToFile.js
@@ -12,9 +12,6 @@ const converter = Components
.createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
converter.charset = "UTF-8";
-const ostream = Components
- .classes["@mozilla.org/network/safe-file-output-stream;1"]
- .createInstance(Components.interfaces.nsIFileOutputStream);
/** Given string data and an nsIFile, write it safely to that file. */
function writeToFile(aData, aFile, aCallback) {
@@ -24,6 +21,9 @@ function writeToFile(aData, aFile, aCallback) {
// Create a temporary file (stream) to hold the data.
var tmpFile = aFile.clone();
tmpFile.createUnique(NORMAL_FILE_TYPE, GM_constants.fileMask);
+ var ostream = Components
+ .classes["@mozilla.org/network/safe-file-output-stream;1"]
+ .createInstance(Components.interfaces.nsIFileOutputStream);
ostream.init(tmpFile, STREAM_FLAGS, GM_constants.fileMask, 0);
NetUtil.asyncCopy(istream, ostream, function(status) {
--
iceweasel extension that enables customization of webpages with user scripts
More information about the Pkg-mozext-commits
mailing list