[Pkg-mozext-commits] [nosquint] 26/47: Import of 2.1b1 release into git
David Prévot
taffit at moszumanska.debian.org
Tue Apr 28 01:41:18 UTC 2015
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to annotated tag 2.1.6
in repository nosquint.
commit d5eef87cacb9d80625ebd68056bb8270732cd060
Author: Jason Tackaberry <tack at urandom.ca>
Date: Fri Jan 13 19:41:14 2012 -0500
Import of 2.1b1 release into git
---
src/chrome.manifest | 3 +
src/chrome.manifest.in | 3 +
src/components/about-handler.js | 28 +
src/content/about.html | 207 ++++
src/content/browser.js | 224 +++-
src/content/cmd.js | 35 +-
src/content/dlg-site.js | 8 +-
src/content/init.js | 15 +
src/content/interfaces.js | 126 ++-
src/content/lib.js | 34 +-
src/content/overlay.xul | 25 +-
src/content/prefs.js | 113 +-
src/content/two-level-tlds | 2008 +++++++++++++++++++++++++++++++++-
src/content/zoommanager.js | 2 +
src/defaults/preferences/nosquint.js | 3 +-
src/icon.png | Bin 0 -> 4967 bytes
src/icon64.png | Bin 0 -> 6786 bytes
src/install.rdf | 7 +-
src/skin/box-grunge.png | Bin 0 -> 3290 bytes
src/skin/icon96.png | Bin 0 -> 13452 bytes
src/skin/statusbar-shot.jpg | Bin 0 -> 2003 bytes
src/skin/toolbar-shot.jpg | Bin 0 -> 4975 bytes
22 files changed, 2726 insertions(+), 115 deletions(-)
diff --git a/src/chrome.manifest b/src/chrome.manifest
index 8fe1d1e..0f4da6f 100644
--- a/src/chrome.manifest
+++ b/src/chrome.manifest
@@ -7,3 +7,6 @@ locale nosquint en-US locale/en-US/
skin nosquint classic/1.0 skin/
style chrome://global/content/customizeToolbar.xul chrome://nosquint/skin/toolbar.css
+
+component {d0d9afd9-ef86-46fe-8a39-87c44dbce919} components/about-handler.js
+contract @mozilla.org/network/protocol/about;1?what=nosquint {d0d9afd9-ef86-46fe-8a39-87c44dbce919}
diff --git a/src/chrome.manifest.in b/src/chrome.manifest.in
index bc2ae92..1235729 100644
--- a/src/chrome.manifest.in
+++ b/src/chrome.manifest.in
@@ -7,3 +7,6 @@ locale nosquint en-US ${JAR}locale/en-US/
skin nosquint classic/1.0 ${JAR}skin/
style chrome://global/content/customizeToolbar.xul chrome://nosquint/skin/toolbar.css
+
+component {d0d9afd9-ef86-46fe-8a39-87c44dbce919} components/about-handler.js
+contract @mozilla.org/network/protocol/about;1?what=nosquint {d0d9afd9-ef86-46fe-8a39-87c44dbce919}
diff --git a/src/components/about-handler.js b/src/components/about-handler.js
new file mode 100644
index 0000000..ac77401
--- /dev/null
+++ b/src/components/about-handler.js
@@ -0,0 +1,28 @@
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
+
+function Aboutnosquint() {}
+
+Aboutnosquint.prototype = {
+ classDescription: "about:nosquint",
+ contractID: "@mozilla.org/network/protocol/about;1?what=nosquint",
+ classID: Components.ID("{d0d9afd9-ef86-46fe-8a39-87c44dbce919}"),
+ QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]),
+
+ getURIFlags: function(aURI) {
+ return Ci.nsIAboutModule.ALLOW_SCRIPT;
+ },
+
+ newChannel: function(aURI) {
+ let ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
+ let channel = ios.newChannel("chrome://nosquint/content/about.html", null, null);
+ channel.originalURI = aURI;
+ return channel;
+ }
+};
+
+if (XPCOMUtils.generateNSGetFactory)
+ var NSGetFactory = XPCOMUtils.generateNSGetFactory([Aboutnosquint]);
+else
+ var NSGetModule = XPCOMUtils.generateNSGetModule([Aboutnosquint]);
diff --git a/src/content/about.html b/src/content/about.html
new file mode 100644
index 0000000..009d856
--- /dev/null
+++ b/src/content/about.html
@@ -0,0 +1,207 @@
+<html>
+<head>
+ <title>About NoSquint</title>
+ <style>
+ h1 {
+ font-family: tahoma, sans-serif;
+ font-size: 50px;
+ padding: 0;
+ margin-left: -40px;
+ }
+
+ a:link, a:visited {
+ text-decoration: none;
+ color: #0489b7;
+ }
+
+ a:hover, a:active {
+ text-decoration: underline;
+ }
+
+
+ #outer {
+ width: 80%;
+ margin: 0 auto;
+ }
+
+ div.box {
+ padding: 20px 0;
+ width: 100%;
+ margin: 40px 0 0;
+ background: #f9f9f9 url(chrome://nosquint/skin/box-grunge.png) 0 0 repeat-x;
+ border: 1px solid #dbe5ea;
+ -moz-border-radius: 10px;
+ border-radius: 10px;
+ -moz-box-shadow: 0 2px 3px rgba(0,0,0,0.05);
+ }
+
+ div.box:nth-child(2) {
+ margin: -65px 0 0;
+ padding: 30px 0;
+ }
+
+ div.box h2 {
+ color: #303030;
+ font-size: 150%;
+ margin: 0 0 10px;
+ font-family: georgia,serif;
+ font-weight: normal;
+ font-style: italic;
+ }
+
+ div.col > img {
+ display: block;
+ margin: 0 auto;
+ max-width: 100%;
+ }
+
+ div.box div.col {
+ float: left;
+ padding: 1px 0;
+ margin-left: 3%;
+ width: 29%;
+ font-size: 100%;
+ color: #6D7581;
+ }
+
+ </style>
+</head>
+<body>
+
+<div id='outer'>
+ <h1>
+ <img src="chrome://nosquint/skin/icon96.png" align='absmiddle' />
+ <span style='color: #b73636'>NoSquint</span> <span style='color: #666' id='version1'></1span>
+ </h1>
+ <div class='box'>
+ <div class='col'>
+ <h2>Welcome!</h2>
+ <p>Thanks for installing NoSquint <span id='version2'></span>!</p>
+ <p> NoSquint improves your browsing experience by giving you the tools you need to combat
+ small fonts and unreadable colors on the web. </p>
+ <p>You can always find the <a href='https://urandom.ca/nosquint/'>latest version</a> online.</p>
+ </div>
+ <div class='col'>
+ <h2>Toolbar Buttons</h2>
+ <img src='chrome://nosquint/skin/toolbar-shot.jpg' />
+ <p id='toolbar-add-upgrade'>Did you know there are zoom buttons for the toolbar?</p>
+ <p id='toolbar-remove-upgrade'>The toolbar zoom buttons can be added and removed at any time.</p>
+ <p id='toolbar-remove-firstrun'>Because you're running NoSquint for the first time, zoom buttons have been added to your toolbar.</p>
+ <p id='toolbar-remove'>
+ <button id="toolbar-buttons-toggle">Add Toolbar Buttons</button>
+ </div>
+ <div class='col'>
+ <h2>Customize Your Toolbar</h2>
+ <p>Not happy with the default placement of the toolbar buttons?</p>
+ <p>Firefox lets you customize your toolbars. You can drag the buttons to a different position,
+ or even to another toolbar.</p>
+ <button id="toolbar-buttons-customize">Customize Toolbar</button>
+ </div>
+ <div style='clear: both; margin-bottom: 40px'></div>
+
+
+ <div class='col'>
+ <h2>Getting Started</h2>
+ <p>If your status bar is visible, you should see the NoSquint icon in the bottom corner.</p>
+ <img src='chrome://nosquint/skin/statusbar-shot.jpg' />
+ <p>Clicking this icon with the left, middle, or right mouse buttons will provide different
+ options. Go ahead and try!
+ <p>Try starting with NoSquint's global settings.<p>
+ <button id="global-settings">NoSquint Global Settings</button>
+ </div>
+ <div class='col'>
+ <h2>How do I zoom?</h2>
+ <p style='margin-bottom: 0'>All the standard zoom shortcuts are supported:</p>
+ <ul style='margin-top: 5px'>
+ <li>Zoom in/out toolbar buttons</li>
+ <li>Ctrl-mousewheel</li>
+ <li>Ctrl-plus and ctrl-minus</li>
+ </ul>
+ </p>
+ <p>Here's a tip: middle clicking on the toolbar buttons will reset the zoom level.</p>
+ <p>And another tip: pressing the shift key with any zoom shortcut will use a different zoom method (text-only by default).</p>
+ </div>
+ <div class='col'>
+ <h2>Firefox 4</h2>
+ <p>As of version 4, Firefox natively includes zoom buttons for the toolbar. If you're using Firefox 4, you may have noticed that NoSquint automatically replaced its old buttons with the native ones. Don't worry, they still work like before!</p>
+ <p>In order to best interact with NoSquint, Firefox's new Addon Bar (which replaces the old status bar) should be enabled. NoSquint will enable it for you when you upgrade.</p>
+
+ </div>
+ <div style='clear: both'></div>
+ </div>
+
+</div>
+
+
+<script type="application/x-javascript">
+var storage = Application.storage.get('nosquint-global', null);
+var NSQ = storage.NoSquint;
+var initialized = false;
+
+function $(id) {
+ return document.getElementById(id);
+}
+
+function update_toolbar_blurb(current) {
+ $('toolbar-remove-firstrun').style.display =
+ $('toolbar-remove-upgrade').style.display =
+ $('toolbar-add-upgrade').style.display = 'none';
+ $(current).style.display = '';
+
+ if (current == 'toolbar-add-upgrade')
+ $('toolbar-buttons-toggle').innerHTML= 'Add Toolbar Buttons';
+ else
+ $('toolbar-buttons-toggle').innerHTML = 'Remove Toolbar Buttons';
+}
+
+window.onload = function() {
+ if (initialized || !NSQ.prefs.currentVersion)
+ return;
+
+ var upgrading = NSQ.prefs.currentVersion != NSQ.prefs.lastVersion;
+ var [tbver, where] = NSQ.browser.checkToolbar();
+
+ if (upgrading && tbver == 3 && !NSQ.is3x()) {
+ // Version 3 buttons, running ff 4 or later, so replace.
+ NSQ.browser.modifyToolbar(3, where);
+ update_toolbar_blurb('toolbar-remove-upgrade');
+ } else if (NSQ.prefs.lastVersion == '0' && tbver == 0) {
+ // First install, add buttons.
+ NSQ.browser.modifyToolbar(1);
+ NSQ.cmd.showToolbarPanel();
+ update_toolbar_blurb('toolbar-remove-firstrun');
+ } else if (tbver)
+ update_toolbar_blurb('toolbar-remove-upgrade');
+ else
+ update_toolbar_blurb('toolbar-add-upgrade');
+
+ $('version1').innerHTML = $('version2').innerHTML = NSQ.prefs.currentVersion;
+
+ if (!NSQ.is3x() && upgrading)
+ NSQ.browser.enableAddonBar();
+
+ NSQ.prefs.lastVersion = NSQ.prefs.currentVersion;
+ initialized = true;
+}
+
+$('toolbar-buttons-toggle').onclick = function() {
+ var [hasButtons, where] = NSQ.browser.checkToolbar();
+ NSQ.browser.modifyToolbar(hasButtons ? 2 : 1);
+ if (!hasButtons) {
+ NSQ.cmd.showToolbarPanel();
+ update_toolbar_blurb('toolbar-remove-upgrade');
+ } else
+ update_toolbar_blurb('toolbar-add-upgrade');
+}
+
+$('toolbar-buttons-customize').onclick = function() {
+ NSQ.browser.customizeToolbar();
+}
+
+$('global-settings').onclick = function() {
+ NSQ.cmd.openGlobalSettings();
+}
+
+</script>
+</body>
+</html>
diff --git a/src/content/browser.js b/src/content/browser.js
index 5574395..cfd01ea 100644
--- a/src/content/browser.js
+++ b/src/content/browser.js
@@ -10,6 +10,7 @@ NoSquint.browser = NoSquint.ns(function() { with (NoSquint) {
var zoomAllTimer = null; // Timer for queueZoomAll()
var styleAllTimer = null; // Timer for queueStyleAll()
var updateStatusTimer = null; // Timer for queueUpdateStatus()
+ var tooltipDirty = false; // True if tooltip needs updating on hover
this.init = function() {
this.gBrowser = gBrowser;
@@ -51,14 +52,121 @@ NoSquint.browser = NoSquint.ns(function() { with (NoSquint) {
gBrowser.tabContainer.addEventListener('TabOpen', this.handleTabOpen, false);
gBrowser.tabContainer.addEventListener('TabSelect', this.handleTabSelect, false);
gBrowser.tabContainer.addEventListener('TabClose', this.handleTabClose, false);
-
+
this.zoomAll(null, true);
+ this.styleAll(null);
+
+ this.hookZoomButtonsForReset();
+ NoSquint.prefs.checkVersionChange();
};
this.destroy = function() {
+ if (NSQ.storage.dialogs.site)
+ NSQ.storage.dialogs.site.die();
+
+ gBrowser.tabContainer.removeEventListener('TabOpen', this.handleTabOpen, false);
+ gBrowser.tabContainer.removeEventListener('TabSelect', this.handleTabSelect, false);
+ gBrowser.tabContainer.removeEventListener('TabClose', this.handleTabClose, false);
+ window.removeEventListener('DOMMouseScroll', this.handleMouseScroll, false);
+ };
+
+ this.hookZoomButtonsForReset = function() {
+ if ($('zoom-out-button')) {
+ $('zoom-out-button').onclick = $('zoom-in-button').onclick =
+ function(event) {
+ if (event.button == 1)
+ NoSquint.cmd.buttonReset(event);
+ };
+
+ /* TODO
+ $('zoom-out-button').addEventListener('DOMMouseScroll', function(event) {
+ // Implement wheel zooming over button here.
+ }, false);
+ */
+ }
+ };
+
+ /* Turns on the Addon Bar (Firefox 4)
+ */
+ this.enableAddonBar = function() {
+ var bar = $('addon-bar');
+ setToolbarVisibility(bar, true);
+ };
+
+ /* Checks whether the zoom buttons are added to any toolbar. Returns a
+ * 2-tuple [ver, where], where 'ver' is version (3 being NoSquint's, 4
+ * being Firefox 4's native buttons) and where is the index within the
+ * toolbar here the first button was found.
+ */
+ this.checkToolbar = function() {
+ var [ver, button] = [4, $('zoom-controls')];
+ if (!button)
+ var [ver, button] = [3, $('nosquint-button-reduce')];
+ if (!button)
+ var [ver, button] = [3, $('nosquint-button-enlarge')];
+ if (!button)
+ return [0, null];
+ else {
+ var toolbar = button.parentNode;
+ var set = toolbar.currentSet.split(',');
+ return [ver, set.indexOf(button.id)];
+ }
+ };
+
+ /* Adds or removes zoom buttons to the toolbar. Action is a bitmask with
+ * 1 being add, 2 being remove, and where is the position on the navbar to
+ * add the buttons. If where is not passed, a good default will be chosen.
+ */
+ this.modifyToolbar = function(action, where) {
+ function remove(button) {
+ if (!button)
+ return;
+ var toolbar = button.parentNode;
+ var set = toolbar.currentSet.split(',');
+ set.splice(set.indexOf(button.id), 1);
+ toolbar.currentSet = set.join(',');
+ toolbar.setAttribute('currentset', set.join(','));
+ document.persist(toolbar.id, 'currentset');
+ }
+
+ if (action & 2) {
+ remove($('nosquint-button-reduce'));
+ remove($('nosquint-button-enlarge'));
+ remove($('nosquint-button-reset'));
+ remove($('zoom-controls'));
+ }
+
+ if (action & 1) {
+ var navbar = $('nav-bar');
+ var set = navbar.currentSet.split(',');
+ if (where === undefined || where === null) {
+ where = set.indexOf('search-container') + 1;
+ if (where == 0)
+ where = set.length;
+ }
+ var ids = is3x() ? 'nosquint-button-reduce,nosquint-button-enlarge' : 'zoom-controls';
+ set = set.slice(0, where).concat(ids).concat(set.slice(where));
+ navbar.currentSet = set.join(',');
+ navbar.setAttribute('currentset', set.join(','));
+ document.persist(navbar.id, 'currentset');
+ this.hookZoomButtonsForReset();
+ }
+
+ try {
+ BrowserToolboxCustomizeDone(true);
+ }
+ catch (e) {}
+ };
+
+
+ /* Pops up the customize toolbar window.
+ */
+ this.customizeToolbar = function() {
+ return BrowserCustomizeToolbar();
};
+
/* Event handlers. Reminder: 'this' will not be NSQ.browser
*/
@@ -69,8 +177,7 @@ NoSquint.browser = NoSquint.ns(function() { with (NoSquint) {
var browser = gBrowser.selectedBrowser;
var text = full = false;
var increment = NSQ.prefs.zoomIncrement * (event.detail < 0 ? 1 : -1);
- //var img = isImage(browser);
- var img = false;
+ var img = isImage(browser);
if (NSQ.prefs.wheelZoomInvert)
increment *= -1;
@@ -80,11 +187,8 @@ NoSquint.browser = NoSquint.ns(function() { with (NoSquint) {
else
text = Math.round((browser.markupDocumentViewer.textZoom * 100) + increment);
- //if (!img || !browser.getUserData('nosquint').site) {
- if (!img) {
- NSQ.browser.zoom(browser, text, full);
- NSQ.browser.saveCurrentZoom();
- }
+ NSQ.browser.zoom(browser, text, full);
+ NSQ.browser.saveCurrentZoom();
}
event.stopPropagation();
event.preventDefault();
@@ -162,10 +266,53 @@ NoSquint.browser = NoSquint.ns(function() { with (NoSquint) {
};
+ this.updateStatusTooltip = function() {
+ if (!tooltipDirty)
+ return;
+ tooltipDirty = false;
+
+ // Get cached sitename for current browser.
+ var browser = gBrowser.selectedBrowser;
+ var site = browser.getUserData('nosquint').site;
+ var text = Math.round(browser.markupDocumentViewer.textZoom * 100);
+ var full = Math.round(browser.markupDocumentViewer.fullZoom * 100);
+
+ var e = $('nosquint-status');
+ // updateStatusTooltip() won't be called unless site is not null.
+ $('nosquint-status-tooltip-site').value = site.replace(/%20/g, ' ');
+ $('nosquint-status-tooltip-full').value = full + '%';
+ $('nosquint-status-tooltip-text').value = text + '%';
+
+ var style = this.getStyleForBrowser(browser);
+ var label = $('nosquint-status-tooltip-textcolor');
+ label.style.color = style.colorText || 'inherit';
+ label.style.backgroundColor = style.colorBackground || 'inherit';
+ label.value = (style.colorText || style.colorBackground) ? 'Sample' : 'Site Controlled';
+
+ var vis = $('nosquint-status-tooltip-vis-link');
+ var unvis = $('nosquint-status-tooltip-unvis-link');
+ unvis.value = vis.value = '';
+ vis.style.color = vis.style.textDecoration = 'inherit';
+ unvis.style.color = unvis.style.textDecoration = 'inherit';
+
+ if (!style.linksUnvisited && !style.linksVisited)
+ unvis.value = 'Site Controlled';
+ else {
+ for (let [attr, elem] in items({'linksUnvisited': unvis, 'linksVisited': vis})) {
+ if (style[attr]) {
+ elem.value = attr.replace('links', '');
+ elem.style.color = style[attr];
+ elem.style.textDecoration = style.linksUnderline ? 'underline' : 'inherit';
+ }
+ }
+ }
+ };
+
/* Updates the status panel and tooltip to reflect current site name
* and zoom levels.
*/
this.updateStatus = function() {
+ // Get cached sitename for current browser.
var browser = gBrowser.selectedBrowser;
var site = browser.getUserData('nosquint').site;
// Disable/enable context menu item.
@@ -180,45 +327,20 @@ NoSquint.browser = NoSquint.ns(function() { with (NoSquint) {
// Pref indicates we're hiding status panel, no sense in updating.
return;
- var text = Math.round(browser.markupDocumentViewer.textZoom * 100);
- var full = Math.round(browser.markupDocumentViewer.fullZoom * 100);
- var [text_default, full_default] = NSQ.prefs.getZoomDefaults();
-
var e = $('nosquint-status');
if (site) {
+ var text = Math.round(browser.markupDocumentViewer.textZoom * 100);
+ var full = Math.round(browser.markupDocumentViewer.fullZoom * 100);
+ var [text_default, full_default] = NSQ.prefs.getZoomDefaults(site);
+
if (NSQ.prefs.fullZoomPrimary)
- e.label = full + '%' + (text == 100 ? '' : (' / ' + text + '%'));
+ e.label = full + '%' + (text == text_default ? '' : (' / ' + text + '%'));
else
- e.label = text + '%' + (full == 100 ? '' : (' / ' + full + '%'));
- $('nosquint-status-tooltip-site').value = site.replace(/%20/g, ' ');
- $('nosquint-status-tooltip-full').value = full + '%';
- $('nosquint-status-tooltip-text').value = text + '%';
-
- var style = this.getStyleForBrowser(browser);
- var label = $('nosquint-status-tooltip-textcolor');
- label.style.color = style.colorText || 'inherit';
- label.style.backgroundColor = style.colorBackground || 'inherit';
- label.value = (style.colorText || style.colorBackground) ? 'Sample' : 'Site Controlled';
-
- var vis = $('nosquint-status-tooltip-vis-link');
- var unvis = $('nosquint-status-tooltip-unvis-link');
- unvis.value = vis.value = '';
- vis.style.color = vis.style.textDecoration = 'inherit';
- unvis.style.color = unvis.style.textDecoration = 'inherit';
-
- if (!style.linksUnvisited && !style.linksVisited)
- unvis.value = 'Site Controlled';
- else {
- for (let [attr, elem] in items({'linksUnvisited': unvis, 'linksVisited': vis})) {
- if (style[attr]) {
- elem.value = attr.replace('links', '');
- elem.style.color = style[attr];
- elem.style.textDecoration = style.linksUnderline ? 'underline' : 'inherit';
- }
- }
- }
+ e.label = text + '%' + (full == full_default ? '' : (' / ' + full + '%'));
+
$('nosquint-status-tooltip').style.display = '';
e.style.fontStyle = e.style.opacity = 'inherit';
+ tooltipDirty = true;
} else {
$('nosquint-status-tooltip').style.display = 'none';
e.label = 'N/A';
@@ -228,6 +350,7 @@ NoSquint.browser = NoSquint.ns(function() { with (NoSquint) {
*/
e.style.opacity = 0.5;
e.style.fontStyle = 'italic';
+ tooltipDirty = false;
}
};
@@ -252,13 +375,15 @@ NoSquint.browser = NoSquint.ns(function() { with (NoSquint) {
*/
this.getZoomForBrowser = function(browser) {
var site = browser.getUserData('nosquint').site;
- if (site === null) {
+ debug('getZoomForBrowser(): site=' + site);
+ if (site === undefined) {
site = this.getSiteFromBrowser(browser);
browser.getUserData('nosquint').site = site;
+ debug('getZoomForBrowser(): after getSiteFromBrowser(), site=' + site);
}
var [text, full] = NSQ.prefs.getZoomForSite(site);
- var [text_default, full_default] = NSQ.prefs.getZoomDefaults();
+ var [text_default, full_default] = NSQ.prefs.getZoomDefaults(site);
return [text || text_default, full || full_default];
};
@@ -281,6 +406,8 @@ NoSquint.browser = NoSquint.ns(function() { with (NoSquint) {
this.attach = function(browser) {
var listener = new NSQ.interfaces.ProgressListener(browser);
browser.addProgressListener(listener, CI.nsIWebProgress.NOTIFY_STATE_DOCUMENT);
+ debug('attach(): attached browser URI=' + browser.docShell.document.URL);
+
var userData = {
listener: listener,
stylers: []
@@ -288,6 +415,8 @@ NoSquint.browser = NoSquint.ns(function() { with (NoSquint) {
browser.setUserData('nosquint', userData, null);
browser.addEventListener('DOMFrameContentLoaded', function(event) {
+ if (!event.target.contentWindow)
+ return;
var styler = NSQ.browser.getDocumentStyler(browser, event.target.contentWindow.document);
styler();
browser.getUserData('nosquint').stylers.push(styler);
@@ -302,7 +431,7 @@ NoSquint.browser = NoSquint.ns(function() { with (NoSquint) {
*/
this.zoom = function(browser, text, full) {
if (!browser || (text == false && full == false))
- return;
+ return false;
var t0 = new Date().getTime();
if (text == null || full == null) {
@@ -312,8 +441,8 @@ NoSquint.browser = NoSquint.ns(function() { with (NoSquint) {
if (full == null)
full = full || site_full;
// Only zoom web content, not chrome or plugins (e.g. PDF)
- if (!browser.getUserData('nosquint').site)
- [text, full] = [100, 100];
+ //if (!browser.getUserData('nosquint').site)
+ // [text, full] = [100, 100];
}
debug("zoom(): text=" + text + ", full=" + full);
@@ -325,6 +454,7 @@ NoSquint.browser = NoSquint.ns(function() { with (NoSquint) {
this.queueUpdateStatus();
var t1 = new Date().getTime();
debug('zoom(): took ' + (t1-t0));
+ return true;
};
/* Updates the zoom levels for all tabs; each tab is set to the levels
@@ -371,7 +501,7 @@ NoSquint.browser = NoSquint.ns(function() { with (NoSquint) {
this.getCSSFromStyle = function(style) {
var css = '';
if (style.colorText || style.colorBackground || style.colorBackgroundImages) {
- css += 'body,p,div,span,center,blockquote,h1,h2,h3,h4,h5,table,tr,th,td,iframe,a,b,i {';
+ css += 'body,p,div,span,font,ul,li,center,blockquote,h1,h2,h3,h4,h5,table,tr,th,td,iframe,a,b,i {';
if (style.colorText)
css += 'color: ' + style.colorText + ' !important;';
if (style.colorBackground)
diff --git a/src/content/cmd.js b/src/content/cmd.js
index eba119a..d33ea56 100644
--- a/src/content/cmd.js
+++ b/src/content/cmd.js
@@ -16,6 +16,8 @@ NoSquint.cmd = NoSquint.ns(function() { with (NoSquint) {
};
this.buttonReset = function(event) {
+ //event.stopPropagation();
+ //event.preventDefault();
NSQ.cmd.reset();
};
@@ -37,8 +39,9 @@ NoSquint.cmd = NoSquint.ns(function() { with (NoSquint) {
};
this.reset = function() {
- var [text, full] = NSQ.prefs.getZoomDefaults();
- var viewer = getBrowser().mCurrentBrowser.markupDocumentViewer;
+ var browser = getBrowser().mCurrentBrowser;
+ var [text, full] = NSQ.prefs.getZoomDefaults(NSQ.browser.getSiteFromBrowser(browser));
+ var viewer = browser.markupDocumentViewer;
var updated = false;
if (Math.round(viewer.textZoom * 100.0) != text)
@@ -119,10 +122,15 @@ NoSquint.cmd = NoSquint.ns(function() { with (NoSquint) {
else if (event.button == 1)
// Middle click, open global prefs.
return NSQ.cmd.openGlobalSettings();
+ }
+
+ this.statusPanelPrepareMenu = function(event) {
+ if (event.button != 2)
+ // Not a right click.
+ return;
- /* Right click. Setup the context menu according to the current
- * browser tab: the site name is set, and the appropriate radio
- * menuitems get selected.
+ /* Setup the context menu according to the current browser tab: the
+ * site name is set, and the appropriate radio menuitems get selected.
*/
var popup = $('nosquint-status-popup');
var browser = gBrowser.selectedBrowser;
@@ -145,7 +153,7 @@ NoSquint.cmd = NoSquint.ns(function() { with (NoSquint) {
for (let child in iter(popup_full.childNodes))
child.setAttribute('checked', child.label.replace(/%/, '') == current_full);
- popup.openPopupAtScreen(event.screenX, event.screenY, true);
+ //popup.openPopupAtScreen(event.screenX, event.screenY, true);
};
@@ -161,7 +169,7 @@ NoSquint.cmd = NoSquint.ns(function() { with (NoSquint) {
var dlg = NSQ.storage.dialogs.site;
if (dlg)
return dlg.setBrowser(NSQ.browser, browser);
- window.openDialog('chrome://nosquint/content/dlg-site.xul', null, 'chrome', NSQ.browser, browser);
+ window.openDialog('chrome://nosquint/content/dlg-site.xul', 'nsqSite', 'chrome', NSQ.browser, browser);
};
@@ -178,7 +186,18 @@ NoSquint.cmd = NoSquint.ns(function() { with (NoSquint) {
host += ':' + browser.currentURI.port;
} catch (err) {};
var url = host + browser.currentURI.path;
- window.openDialog('chrome://nosquint/content/dlg-global.xul', null, 'chrome', url);
+ window.openDialog('chrome://nosquint/content/dlg-global.xul', 'nsqGlobal', 'chrome', url);
+ };
+
+ this.showToolbarPanel = function() {
+ var panel = $('nosquint-toolbar-buttons-notify');
+ var anchor = $('zoom-out-button');
+ if (!anchor)
+ anchor = $('nosquint-button-reduce');
+ panel.openPopup(anchor, 'after_start', 0, 0, false, false, null);
+ defer(5000, function() {
+ panel.hidePopup();
+ });
};
}});
diff --git a/src/content/dlg-site.js b/src/content/dlg-site.js
index b314cc1..039e373 100644
--- a/src/content/dlg-site.js
+++ b/src/content/dlg-site.js
@@ -69,9 +69,11 @@ NoSquint.dialogs.site = NoSquint.ns(function() { with (NoSquint) {
for (let [id, defcolor] in items(NSQ.prefs.defaultColors)) {
$(id).parentNode.childNodes[1].color = (!style || style[id] == '0' ? defcolor : style[id]);
- $(id).checked = (!style || style[id] == '0' ? false : true);
+ $(id).checked = Boolean(style && style[id] && style[id] != '0');
this.colorChecked.apply($(id));
}
+ for (let attr in iter(['colorBackgroundImages', 'linksUnderline']))
+ $(attr).checked = Boolean(style && style[attr] && style[attr] != '0');
window.focus();
window.sizeToContent();
};
@@ -115,7 +117,7 @@ NoSquint.dialogs.site = NoSquint.ns(function() { with (NoSquint) {
};
this.buttonUseDefault = function(target) {
- var [text, full] = NSQ.prefs.getZoomDefaults();
+ var [text, full] = NSQ.prefs.getZoomDefaults(this.site);
var input = $(target.id.replace('button', 'level'));
input.value = (input.id == 'text-zoom-level' ? text : full);
input.onchange();
@@ -160,7 +162,7 @@ NoSquint.dialogs.site = NoSquint.ns(function() { with (NoSquint) {
style.enabled = style.enabled || Boolean(style[attr]);
}
for (let attr in iter(['colorBackgroundImages', 'linksUnderline'])) {
- style[attr] = $(attr).checked;
+ style[attr] = Boolean($(attr).checked);
style.enabled = style.enabled || Boolean(style[attr]);
}
}
diff --git a/src/content/init.js b/src/content/init.js
index c571967..c379173 100644
--- a/src/content/init.js
+++ b/src/content/init.js
@@ -18,16 +18,31 @@ NoSquint = {
return scope;
},
+ /* This function is the load handler. It calls init() on all namespaces
+ * previously registered with ns(), which happens for most .js files that
+ * are loaded via the overlay.
+ *
+ * Consequently, init() for each namespace should be kept light so as not
+ * to adversely affect load times.
+ *
+ * Currently initialization takes about 5-10ms with ff4 on my fairly peppy
+ * Thinkpad (i7 M 620 2.67GHz), which isn't horrible, but there's room for
+ * improvement.
+ */
init: function() {
if (NoSquint._initialized)
return;
NoSquint._initialized = true;
+ //var t0 = new Date().getTime();
for (let i = 0; i < NoSquint.namespaces.length; i++) {
+ //var t1 = new Date().getTime();
var scope = NoSquint.namespaces[i];
if (scope.init !== undefined)
scope.init();
+ //dump(scope.id + " init took " + (new Date().getTime() - t1) + "\n");
}
+ //dump("Total init took: " + (new Date().getTime() - t0) + "\n");
},
destroy: function() {
diff --git a/src/content/interfaces.js b/src/content/interfaces.js
index 5a9fdbe..dfb4867 100644
--- a/src/content/interfaces.js
+++ b/src/content/interfaces.js
@@ -6,11 +6,16 @@ NoSquint.interfaces = NoSquint.ns(function() { with (NoSquint) {
/* Specifies at which state we will try to zoom and style the page. With
* 3.5+, we can style early with STATE_TRANSFERRING. With 3.0, we seem to
* have style later at STATE_STOP in order to get reliable results. (In 3.0
- * using STATE_TRANSFERRING, on e.g. youtube.com the search bar is improperly
- * rendered.
+ * using STATE_TRANSFERRING, on e.g. youtube.com the search bar is
+ * improperly rendered. [And this, quite perplexingly, is caused by
+ * accessing doc.documentElement in NSQ.browser.style()])
*/
var stateFlag = is30() ? Components.interfaces.nsIWebProgressListener.STATE_STOP
: Components.interfaces.nsIWebProgressListener.STATE_TRANSFERRING;
+ /* XXX: if we use STATE_STOP, the move-tab-between-windows kludge below stops
+ * working.
+ */
+ //var stateFlag = Components.interfaces.nsIWebProgressListener.STATE_STOP;
/* Listener used to receive notifications when a new URI is about to be loaded.
* TODO: when support for Firefox 3.0 is dropped, use:
@@ -49,7 +54,7 @@ NoSquint.interfaces = NoSquint.ns(function() { with (NoSquint) {
// New document on the same site.
return;
- debug("onLocationChange(): old=" + userData.site + "new=" + site + ", uri=" + uri.spec);
+ debug("onLocationChange(): old=" + userData.site + ", new=" + site + ", uri=" + uri.spec);
/* Update timestamp for site. This isn't _quite_ perfect because
* the timestamp is only updated for the first page load on that site
* rather than the last. But it should be good enough in practice, and
@@ -66,6 +71,8 @@ NoSquint.interfaces = NoSquint.ns(function() { with (NoSquint) {
* onStateChange the way styling is currently hooked.
* XXX: 3.6 private browsing mode exhibits some problems, so zooming
* is back in onStateChange.
+ * https://support.mozilla.com/en-US/forum/1/563849
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=526828
*/
NSQ.browser.zoom(this.browser);
@@ -86,14 +93,33 @@ NoSquint.interfaces = NoSquint.ns(function() { with (NoSquint) {
var contentType = this.browser.docShell.document.contentType;
if (this.contentType != contentType) {
this.contentType = contentType;
+ var userData = this.browser.getUserData('nosquint');
if (isChrome(this.browser)) {
- this.browser.getUserData('nosquint').site = null;
+ // Content type is changed and it's now chrome. Unzoom (or
+ // zoom to 100%)
+ userData.site = null;
NSQ.browser.zoom(this.browser, 100, 100);
+ } else if (userData.site === null) {
+ // Was considered chrome, but now isn't. Rezoom/style.
+ delete userData.site;
+ NSQ.browser.zoom(this.browser);
+ this.styleApplied = NSQ.browser.style(this.browser);
}
} else if (state & stateFlag) {
if (!this.zoomApplied) {
this.zoomApplied = true;
- NSQ.browser.zoom(this.browser);
+ if (NSQ.browser.observer.inPrivateBrowsing) {
+ /* In private browsing mode, Firefox does not honor
+ * siteSpecific=false and resets the zoom level back to
+ * 100% after every page load (bug #526828). So we
+ * must resort to this retarded hack, queuing a zoom in
+ * 100ms. This seems to work ok empirically, but a race
+ * is theoretically possible. *grmbl*
+ */
+ var b = this.browser;
+ setTimeout(function() NSQ.browser.zoom(b), 100);
+ } else
+ NSQ.browser.zoom(this.browser);
}
if (!this.styleApplied) {
if (!isChrome(this.browser) || isImage(this.browser))
@@ -101,7 +127,46 @@ NoSquint.interfaces = NoSquint.ns(function() { with (NoSquint) {
else
this.styleApplied = true;
}
+ } else if (state & Components.interfaces.nsIWebProgressListener.STATE_IS_DOCUMENT &&
+ this.browser.getUserData('nosquint').site == null && !is30()) {
+ /* Kludge: when moving a tab from one window to another, the
+ * listener previously created and attached in
+ * NSQ.browser.attach() seems to either stop working or gets
+ * implicitly detached somewhere afterward. The tab gets
+ * created initially as about:blank, so NoSquint thinks it's
+ * chrome. The tab gets updated for the proper site, but since
+ * the listener isn't working, NoSquint doesn't hear about it.
+ *
+ * The specific magical incantation to deal with this seems to
+ * be handling STATE_IS_DOCUMENT when site=null. After a 0ms
+ * timer, we try to re-add this listener ('this'). If it
+ * fails, we assume the listener from attach() is still there
+ * and everything is cool after all. Otherwise, regenerate the
+ * site name and rezooms/style.
+ *
+ * This seems to solve the problem, but feels like a nasty volatile
+ * hack to work around what is probably a firefox bug, and will
+ * likely break in the future. It doesn't seem to be necessary
+ * with 3.0, but is with 3.5+.
+ */
+ var browser = this.browser;
+ var listener = this;
+ setTimeout(function() {
+ try {
+ browser.addProgressListener(listener, CI.nsIWebProgress.NOTIFY_STATE_DOCUMENT);
+ } catch (err) {
+ // Assume ProgressListener was already attached after all, so
+ // we don't need to do anything.
+ return;
+ }
+ browser.getUserData('nosquint').listener = listener;
+ // Forces getZoomForBrowser() (via zoom()) to redetermine site name.
+ delete browser.getUserData('nosquint').site;
+ NSQ.browser.zoom(browser);
+ NSQ.browser.style(browser);
+ }, 0);
}
+
},
onProgressChange: function() 0,
@@ -137,7 +202,13 @@ NoSquint.interfaces = NoSquint.ns(function() { with (NoSquint) {
_hook: function() {
this._os.addObserver(this, "private-browsing", false);
this._os.addObserver(this, "quit-application-granted", false);
- this._os.addObserver(this, "em-action-requested", false);
+ if (is3x())
+ this._os.addObserver(this, "em-action-requested", false);
+ else {
+ Components.utils.import("resource://gre/modules/AddonManager.jsm");
+ AddonManager.addAddonListener(this);
+ }
+
try {
var pbs = Components.classes["@mozilla.org/privatebrowsing;1"]
.getService(Components.interfaces.nsIPrivateBrowsingService);
@@ -145,6 +216,7 @@ NoSquint.interfaces = NoSquint.ns(function() { with (NoSquint) {
} catch(ex) {
// ignore exceptions in older versions of Firefox
}
+
this._hooked = true;
},
@@ -154,6 +226,28 @@ NoSquint.interfaces = NoSquint.ns(function() { with (NoSquint) {
this._hooked = false;
},
+ onDisabling: function(addon, needsRestart) {
+ if (addon.id != 'nosquint at urandom.ca' || NSQ.storage.disabled)
+ return;
+
+ NSQ.storage.disabled = true;
+ if (popup('confirm', NSQ.strings.disableTitle, NSQ.strings.disablePrompt) == 1) {
+ // Clicked no
+ } else
+ NSQ.prefs.setSiteSpecific(true);
+ },
+
+ onUninstalling: function(addon, needsRestart) {
+ return this.onDisabling(addon, needsRestart);
+ },
+
+ onOperationCancelled: function(addon) {
+ if (addon.id != 'nosquint at urandom.ca' || NSQ.storage.disabled != true)
+ return;
+ NSQ.prefs.setSiteSpecific(false);
+ NSQ.storage.disabled = false;
+ },
+
observe: function (subject, topic, data) {
switch (topic) {
case "private-browsing":
@@ -177,27 +271,19 @@ NoSquint.interfaces = NoSquint.ns(function() { with (NoSquint) {
this._unhook();
break;
+ // This is for ff 3.x; just dispatch to the 4.x handlers.
case "em-action-requested":
switch (data) {
case "item-disabled":
case "item-uninstalled":
- var item = subject.QueryInterface(Components.interfaces.nsIUpdateItem);
- if (item.id != 'nosquint at urandom.ca' || NSQ.storage.disabled)
- break;
-
- NSQ.storage.disabled = true;
- if (popup('confirm', NSQ.strings.disableTitle, NSQ.strings.disablePrompt) == 1) {
- // Clicked no
- } else
- NSQ.prefs.setSiteSpecific(true);
+ var addon = subject.QueryInterface(Components.interfaces.nsIUpdateItem);
+ this.onDisabling(addon, true);
break;
case "item-cancel-action":
- var item = subject.QueryInterface(Components.interfaces.nsIUpdateItem);
- if (item.id != 'nosquint at urandom.ca' || NSQ.storage.disabled != true)
- break;
- NSQ.prefs.setSiteSpecific(false);
- NSQ.storage.disabled = false;
+ var addon = subject.QueryInterface(Components.interfaces.nsIUpdateItem);
+ this.onOperationCancelled(addon);
+ break;
}
break;
}
diff --git a/src/content/lib.js b/src/content/lib.js
index 1163140..dd9308f 100644
--- a/src/content/lib.js
+++ b/src/content/lib.js
@@ -6,26 +6,33 @@
* exists once, and is referenced for each window. (In contrast, doing
* Application.storage.set('foo', [1,2]) will store a copy of the list.)
*/
- var extstorage = Application.extensions.get('nosquint at urandom.ca').storage;
- this.storage = extstorage.get('global', null);
+ this.storage = Application.storage.get('nosquint-global', null);
if (this.storage === null) {
// Initialize global defaults.
this.storage = {
disabled: false,
quitting: false,
origSiteSpecific: null,
- dialogs: {}
+ dialogs: {},
+ NoSquint: NoSquint
};
- extstorage.set('global', this.storage);
+ Application.storage.set('nosquint-global', this.storage);
}
-
this.is30 = function() {
return Application.version.substr(0, 4) == '3.0.';
};
this.is36 = function() {
- return Application.version.substr(0, 4) >= '3.6.';
+ return Application.version.substr(0, 4) == '3.6.';
+ };
+
+ this.is3x = function() {
+ return Application.version.substr(0, 4) < '4.0';
+ };
+
+ this.is40 = function() {
+ return Application.version.substr(0, 4) >= '4.0.';
};
this.$ = function(id, doc) {
@@ -75,7 +82,7 @@
this.getBaseDomainFromHost = function(host) {
if (this.storage.TLDs === undefined) {
// First window opened, so parse from stored list, which is
- // borrowed from http://www.surbl.org/two-level-tlds
+ // borrowed from http://george.surbl.org/two-level-tlds
this.storage.TLDs = {};
for each (let line in this.readLines('chrome://nosquint/content/two-level-tlds'))
this.storage.TLDs[line] = true;
@@ -106,6 +113,7 @@
this.isChrome = function(browser) {
var document = browser.docShell.document;
+ //this.debug('isChrome(): URL=' + document.URL + ', spec=' + browser.currentURI.spec + ', contentType=' + document.contentType);
if (document.URL == undefined)
return true;
@@ -122,13 +130,14 @@
return true;
// A couple other common cases.
- if (document.URL == undefined || document.URL.substr(0, 6) == 'about:')
- return true;
if (document.contentType == 'text/html' || document.contentType == 'application/xhtml+xml')
return false;
+ if (document.URL == undefined || document.URL.substr(0, 6) == 'about:')
+ return true;
// Less common cases that we'll cover with the more expensive regexp.
return document.contentType.search(/^text\/(plain|css|xml|javascript)/) != 0;
+ //return document.contentType.search(/^text\/(plain|css|xml|javascript)|image\//) != 0;
};
this.isImage = function(browser) {
@@ -217,4 +226,11 @@
}
};
+ this.defer = function(delay, callback) {
+ var timer = setTimeout(function() {
+ callback();
+ clearTimeout(timer);
+ }, delay);
+ };
+
}).apply(NoSquint);
diff --git a/src/content/overlay.xul b/src/content/overlay.xul
index cc12c52..b1bf066 100644
--- a/src/content/overlay.xul
+++ b/src/content/overlay.xul
@@ -19,9 +19,11 @@
<toolbarpalette id="BrowserToolbarPalette">
<toolbarbutton id="nosquint-button-reduce" class="toolbarbutton-1"
label="Zoom Out" tooltiptext="Zoom out"
+ onclick="if (event.button == 1) NoSquint.cmd.buttonReset(event)"
oncommand="NoSquint.cmd.buttonReduce(event);" />
<toolbarbutton id="nosquint-button-enlarge" class="toolbarbutton-1"
label="Zoom In" tooltiptext="Zoom in"
+ onclick="if (event.button == 1) NoSquint.cmd.buttonReset(event)"
oncommand="NoSquint.cmd.buttonEnlarge(event);" />
<toolbarbutton id="nosquint-button-reset" class="toolbarbutton-1"
label="Reset Zoom" tooltiptext="Reset Zoom"
@@ -37,9 +39,9 @@
<commandset id="mainCommandSet">
<command id="cmd_noSquintPrefs" oncommand="NoSquint.cmd.openGlobalSettings()" />
- <command id="cmd_fullZoomEnlarge" oncommand="NoSquint.cmd.enlargePrimary()" />
- <command id="cmd_fullZoomReduce" oncommand="NoSquint.cmd.reducePrimary()" />
- <command id="cmd_fullZoomReset" oncommand="NoSquint.cmd.reset()" />
+ <command id="cmd_fullZoomEnlarge" oncommand="NoSquint.cmd.buttonEnlarge(event)" />
+ <command id="cmd_fullZoomReduce" oncommand="NoSquint.cmd.buttonReduce(event)" />
+ <command id="cmd_fullZoomReset" oncommand="NoSquint.cmd.buttonReset(event)" />
<command id="cmd_noSquintEnlargeSecondary" oncommand="NoSquint.cmd.enlargeSecondary()" />
<command id="cmd_noSquintReduceSecondary" oncommand="NoSquint.cmd.reduceSecondary()" />
</commandset>
@@ -50,7 +52,7 @@
</popup>
<statusbar id="status-bar">
- <tooltip id="nosquint-status-tooltip" orient="vertical">
+ <tooltip id="nosquint-status-tooltip" orient="vertical" onpopupshowing="NoSquint.browser.updateStatusTooltip()">
<grid>
<columns>
<column />
@@ -131,14 +133,21 @@
<menuitem type="radio" name="text" label="150%" />
</menupopup>
</menu>
- <menuitem id="nosquint-status-reset" label="&ns.menu.reset.label;" onclick="NoSquint.cmd.reset()" />
- <menuitem label="&ns.menu.siteSettings.label;" onclick="NoSquint.cmd.openSiteSettings()" />
+ <menuitem id="nosquint-status-reset" label="&ns.menu.reset.label;" oncommand="NoSquint.cmd.reset()" />
+ <menuitem label="&ns.menu.siteSettings.label;" oncommand="NoSquint.cmd.openSiteSettings()" />
<menuseparator />
- <menuitem label="&ns.menu.globalSettings.label;" onclick="NoSquint.cmd.openGlobalSettings()" />
+ <menuitem label="&ns.menu.globalSettings.label;" oncommand="NoSquint.cmd.openGlobalSettings()" />
</menupopup>
+ <panel id="nosquint-toolbar-buttons-notify" type="arrow" fade="slow" style="padding:0.5em">
+ <description value="Zoom buttons have been added to your toolbar." />
+ </panel>
+
+
<statusbarpanel class="statusbarpanel-iconic-text" id="nosquint-status" label="100%"
- onclick="NoSquint.cmd.statusPanelClick(event)"
+ onclick="return NoSquint.cmd.statusPanelClick(event)"
+ onmousedown="return NoSquint.cmd.statusPanelPrepareMenu(event)"
+ context="nosquint-status-popup"
src="chrome://nosquint/skin/icon-statusbar-16.png"
tooltip="nosquint-status-tooltip" />
</statusbar>
diff --git a/src/content/prefs.js b/src/content/prefs.js
index 5f6c003..fda15b1 100644
--- a/src/content/prefs.js
+++ b/src/content/prefs.js
@@ -22,6 +22,15 @@ NoSquint.prefs = NoSquint.ns(function() { with(NoSquint) {
linksVisited: '#551a8b'
};
+ /* Active window we can use for window methods (e.g. setTimeout). Because
+ * NSQ.prefs is a singleton, it could be that the window we initialized
+ * with has been closed. In that case, setTimeout will fail with
+ * NS_ERROR_NOT_INITIALIZED. So we keep a reference to an available
+ * window here we can call window.* methods with, and if the window
+ * goes away, we find a new one using foreachNSQ().
+ */
+ this.window = window;
+
// Pref service.
var svc = Components.classes["@mozilla.org/preferences-service;1"].getService(
Components.interfaces.nsIPrefService);
@@ -94,6 +103,11 @@ NoSquint.prefs = NoSquint.ns(function() { with(NoSquint) {
};
this.destroy = function() {
+ if (this.rememberSites)
+ // In case the window shutting down is the one whose saveTimer is
+ // associated with, we should finish any pending save now.
+ this.finishPendingSaveSiteList();
+
if (!NSQ.storage.quitting)
// NSQ.prefs is a singleton so we only ever truly destroy on app
// shutdown.
@@ -102,18 +116,32 @@ NoSquint.prefs = NoSquint.ns(function() { with(NoSquint) {
branchNS.removeObserver('', this);
branchBZ.removeObserver('', this);
- if (this.rememberSites)
- this.finishPendingSaveSiteList();
- else
+ if (!this.rememberSites)
// Per-site setting storage disabled.
branchNS.setCharPref('sites', '');
this.setSiteSpecific(origSiteSpecific);
+ this.save();
+ };
+
+
+ /* Invoke a window method, such as setTimeout. We need to do this indirectly
+ * because NSQ.prefs is a singleton, and the window NSQ.prefs initialized with
+ * may not actually still be alive.
+ */
+ this.winFunc = function(func) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ try {
+ return this.window[func].apply(this.window, args);
+ } catch (e) {
+ // Presumably NS_ERROR_NOT_INITIALIZED. TODO: verify.
+ this.window = foreachNSQ(function() false);
+ return this.window[func].apply(this.window, args);
+ }
};
this.setSiteSpecific = function(value) {
branchBZ.setBoolPref('siteSpecific', value);
- this.save();
};
this.preload = function() {
@@ -136,6 +164,7 @@ NoSquint.prefs = NoSquint.ns(function() { with(NoSquint) {
// Not a pref change.
return;
+ debug('observe(): data=' + data);
switch (data) {
case 'siteSpecific':
if (branchBZ.getBoolPref('siteSpecific') == false || NSQ.storage.disabled || NSQ.storage.quitting)
@@ -424,7 +453,6 @@ NoSquint.prefs = NoSquint.ns(function() { with(NoSquint) {
var remove = [];
var now = new Date();
for (let [site, settings] in items(this.sites)) {
- //for (let [site, settings] in Iterator(this.sites)) {
if (!settings)
continue
var [text, timestamp, counter, full] = settings;
@@ -442,7 +470,7 @@ NoSquint.prefs = NoSquint.ns(function() { with(NoSquint) {
// Fire timer once a day.
if (pruneTimer == null)
- pruneTimer = setTimeout(function() { pruneTimer = null; NSQ.prefs.pruneSites(); }, 24*60*60*1000);
+ pruneTimer = this.winFunc('setTimeout', function() { pruneTimer = null; NSQ.prefs.pruneSites(); }, 24*60*60*1000);
};
@@ -460,7 +488,7 @@ NoSquint.prefs = NoSquint.ns(function() { with(NoSquint) {
if (levels) {
// Update record with specified levels.
- var [text_default, full_default] = this.getZoomDefaults();
+ var [text_default, full_default] = this.getZoomDefaults(site);
var [text, full] = levels;
// Default zooms are stored as 0.
record[0] = text == text_default ? 0 : text;
@@ -523,7 +551,7 @@ NoSquint.prefs = NoSquint.ns(function() { with(NoSquint) {
* needlessly iterating over the sites array.
*/
debug("queueSaveSiteList(): delay=" + this.saveDelay);
- saveTimer = setTimeout(function() NSQ.prefs.saveSiteList(), this.saveDelay);
+ saveTimer = this.winFunc('setTimeout', function() NSQ.prefs.saveSiteList(), this.saveDelay);
};
@@ -551,7 +579,7 @@ NoSquint.prefs = NoSquint.ns(function() { with(NoSquint) {
branchNS.setCharPref('sites', sites.join(' '));
this.save();
debug("saveSiteList(): took: " + (new Date().getTime() - t0) + "ms");
- clearTimeout(saveTimer);
+ this.winFunc('clearTimeout', saveTimer);
saveTimer = null;
};
@@ -563,7 +591,7 @@ NoSquint.prefs = NoSquint.ns(function() { with(NoSquint) {
if (saveTimer === null)
return false;
- clearTimeout(saveTimer);
+ this.winFunc('clearTimeout', saveTimer);
saveTimer = null;
return true;
};
@@ -585,7 +613,9 @@ NoSquint.prefs = NoSquint.ns(function() { with(NoSquint) {
/* Returns a 2-tuple [text_default, full_default] representing the default
* zoom levels.
*/
- this.getZoomDefaults = function() {
+ this.getZoomDefaults = function(site) {
+ if (!site || site.substr(0, 6) == 'about:')
+ return [100, 100];
return [this.textZoomLevel, this.fullZoomLevel];
};
@@ -599,6 +629,14 @@ NoSquint.prefs = NoSquint.ns(function() { with(NoSquint) {
if (!URI)
return null;
+ /* It's a bit ugly to hard-code the 'about' case here. But make it
+ * not-ugly would require some significant reworking of the site
+ * name logic.
+ */
+ if (URI.scheme == 'about')
+ // Truncate path after non-word character (e.g. ?foo=bar is stripped)
+ return URI.scheme + ':' + URI.path.replace(/\W.*$/, '');
+
var uri_host = URI.asciiHost;
var uri_path = URI.path;
@@ -765,4 +803,57 @@ NoSquint.prefs = NoSquint.ns(function() { with(NoSquint) {
}
});
};
+
+
+ this.checkVersionChange = function() {
+ this.lastVersion = branchNS.getCharPref('version');
+ function callback(addon) {
+ NSQ.prefs.currentVersion = addon.version;
+ var found = false;
+ foreachNSQ(function(NSQ) {
+ for (let browser in iter(NSQ.browser.gBrowser.browsers)) {
+ if (browser.currentURI.spec == 'about:nosquint') {
+ /* With ff4, fetching the addon object is asynchronous, and with ff3, we
+ * defer this callback also (so as not to take the startup hit), so any
+ * previously opened about:nosquint tabs (which may be reopened on startup)
+ * may be loaded before NSQ.prefs.currentVersion is set. This quasi-hack
+ * (re)triggers the 'load' event on the window so that the necessary
+ * elements get updated.
+ */
+ var evt = document.createEvent('HTMLEvents');
+ evt.initEvent('load', true, false);
+ browser.contentWindow.dispatchEvent(evt);
+ // XXX: see note below about version comparison.
+ if (addon.version != NSQ.prefs.lastVersion && !found) {
+ NSQ.browser.gBrowser.selectedTab = browser;
+ found = true;
+ }
+ }
+ }
+ });
+
+ /* XXX: if we change this to > rather than !=, we need to be smarter than
+ * a simple lexographic comparison, because '2.1b1' > '2.1' which isn't
+ * expected behaviour.
+ */
+ if (addon.version != NSQ.prefs.lastVersion) {
+ if (!found)
+ NSQ.browser.gBrowser.selectedTab = gBrowser.addTab('about:nosquint');
+ branchNS.setCharPref('version', addon.version);
+ NoSquint.prefs.save();
+ }
+ };
+
+ if (is3x()) {
+ /* Because this.checkVersionChange() is called during init of NSQ.browser,
+ * and Application.extensions.get() is synchronous, defer this call.
+ */
+ defer(0, function() callback(Application.extensions.get('nosquint at urandom.ca')));
+ } else {
+ Components.utils.import("resource://gre/modules/AddonManager.jsm");
+ AddonManager.getAddonByID('nosquint at urandom.ca', callback);
+ }
+ };
+
+
}});
diff --git a/src/content/two-level-tlds b/src/content/two-level-tlds
index 379f194..814ba59 100644
--- a/src/content/two-level-tlds
+++ b/src/content/two-level-tlds
@@ -1,4 +1,25 @@
+0.bg
+1.bg
+110mb.com
+150m.com
+163.to
+1blu.de
+2.bg
2000.hu
+3.bg
+4.bg
+5.bg
+6.bg
+6a.org
+6bone.pl
+7.bg
+8.bg
+9.bg
+9k.com
+a.bg
+a.se
+aa.no
+aarborte.no
ab.ca
ab.se
abo.pa
@@ -7,6 +28,7 @@ ac.am
ac.at
ac.bd
ac.be
+ac.ci
ac.cn
ac.com
ac.cr
@@ -27,16 +49,20 @@ ac.ke
ac.kr
ac.lk
ac.ma
+ac.me
+ac.mu
ac.mw
ac.ng
ac.nz
ac.om
ac.pa
ac.pg
+ac.pr
ac.rs
ac.ru
ac.rw
ac.se
+ac.sz
ac.th
ac.tj
ac.tz
@@ -47,140 +73,483 @@ ac.yu
ac.za
ac.zm
ac.zw
+aca.pro
+academy.museum
+accident-investigation.aero
+accident-prevention.aero
act.au
ad.jp
+addr.com
adm.br
adult.ht
adv.br
adygeya.ru
+ae.org
+aejrie.no
aero.mv
aero.tt
+aerobatic.aero
+aeroclub.aero
+aerodrome.aero
aeroport.fr
+afjord.no
+ag.it
+agdenes.no
+agents.aero
agr.br
agrar.hu
+agriculture.museum
+agrigento.it
+agrinet.tn
agro.pl
ah.cn
+ah.no
aichi.jp
aid.pl
+aip.ee
+air-surveillance.aero
+air-traffic-control.aero
+air.museum
+aircraft.aero
+airguard.museum
+airline.aero
+airport.aero
+airtraffic.aero
ak.us
akita.jp
+aknoluokta.no
+akrehamn.no
+al.it
+al.no
al.us
+alabama.museum
+alaheadju.no
aland.fi
+alaska.museum
alderney.gg
+alessandria.it
+alesund.no
+algard.no
+alstahaug.no
alt.na
alt.za
+alta.no
altai.ru
+altervista.org
+alto-adige.it
+altoadige.it
+alvdal.no
am.br
+amber.museum
+ambulance.aero
+ambulance.museum
+american.museum
+americana.museum
+americanantiques.museum
+americanart.museum
+amli.no
+amot.no
+amsterdam.museum
amur.ru
amursk.ru
+amusement.aero
+an.it
+ancona.it
+and.museum
+andasuolo.no
+andebu.no
+andoy.no
+angelfire.com
+annefrank.museum
+anthro.museum
+anthropology.museum
+antiques.museum
+ao.it
aomori.jp
+aosta.it
+aoste.it
+ap.it
+appspot.com
+aq.it
+aquarium.museum
+aquila.it
+ar.com
+ar.it
ar.us
+arboretum.museum
+archaeological.museum
+archaeology.museum
+architecture.museum
+ardal.no
+aremark.no
+arendal.no
+arezzo.it
arkhangelsk.ru
army.mil
+arna.no
arq.br
art.br
art.do
art.dz
art.ht
+art.museum
art.pl
+artanddesign.museum
+artcenter.museum
+artdeco.museum
+arteducation.museum
+artgallery.museum
arts.co
+arts.museum
+arts.nf
arts.ro
arts.ve
+artsandcrafts.museum
+as.us
+ascoli-piceno.it
+ascolipiceno.it
+aseral.no
+asker.no
+askim.no
+askoy.no
+askvoll.no
+asmatart.museum
asn.au
asn.lv
+asnes.no
ass.dz
+ass.km
+assassination.museum
assedic.fr
+assisi.museum
assn.lk
+asso.ci
asso.dz
asso.fr
asso.gp
asso.ht
+asso.km
+asso.ma
asso.mc
asso.re
+asso.ws
+association.aero
+association.museum
+asti.it
astrakhan.ru
+astronomy.museum
+at.it
+at.lv
+at.pn
+at.tc
at.tf
at.tt
+ath.cx
+atlanta.museum
atm.pl
ato.br
au.com
+au.ms
+au.pn
+au.tc
au.tt
+audnedaln.no
+augustow.pl
+aukra.no
+aure.no
+aurland.no
+aurskog-holand.no
+austevoll.no
+austin.museum
+australia.museum
+austrheim.no
+author.aero
auto.pl
+automotive.museum
+av.it
av.tr
+avellino.it
+averoy.no
+aviation.museum
avocat.fr
avoues.fr
+axis.museum
az.us
+a�roport.ci
+b.bg
+b.se
+ba.it
+babia-gora.pl
+badaddja.no
+badajoz.museum
+baghdad.museum
+bahcavuotna.no
+bahccavuotna.no
+bahn.museum
+baidar.no
baikal.ru
+bajddar.no
+balat.no
+bale.museum
+balestrand.no
+ballangen.no
+ballooning.aero
+balsan.it
+balsfjord.no
+baltimore.museum
+bamble.no
+bar.pro
+barcelona.museum
+bardu.no
+bari.it
+barletta-andria-trani.it
+barlettaandriatrani.it
barreau.fr
+barum.no
+baseball.museum
+basel.museum
bashkiria.ru
+baths.museum
+batsfjord.no
+bauern.museum
bbs.tr
bc.ca
bd.se
+be.tc
be.tt
+bearalvahki.no
+beardu.no
+beauxarts.museum
+bedzin.pl
+beeldengeluid.museum
+beiarn.no
bel.tr
+belau.pw
belgie.be
belgorod.ru
+bellevue.museum
+belluno.it
+benevento.it
+berg.no
+bergamo.it
+bergbau.museum
+bergen.no
+berkeley.museum
+berlevag.no
+berlin.museum
+bern.museum
+beskidy.pl
+bg.it
+bg.tc
bg.tf
+bi.it
+bialowieza.pl
bialystok.pl
bib.ve
+bible.museum
+bielawa.pl
+biella.it
+bieszczady.pl
+bievat.no
+bilbao.museum
+bill.museum
+bindal.no
bio.br
bir.ru
+birdart.museum
+birkenes.no
+birthplace.museum
biz.az
biz.bh
biz.cy
biz.et
biz.fj
+biz.ki
biz.ly
biz.mv
+biz.mw
biz.nr
biz.om
biz.pk
biz.pl
biz.pr
biz.tj
+biz.tm
biz.tr
biz.tt
+biz.ua
biz.vn
bj.cn
+bjarkoy.no
+bjerkreim.no
+bjugn.no
+bl.it
bl.uk
+blog.br
+blog.com
+blog.ru
+blog4ever.com
+blogspot.com
bmd.br
+bn.it
+bo.it
+bodo.no
+bokn.no
+boleslawiec.pl
+bologna.it
bolt.hu
+bolzano.it
+bomlo.no
+bonn.museum
+boston.museum
+botanical.museum
+botanicalgarden.museum
+botanicgarden.museum
+botany.museum
bourse.za
+bozen.it
br.com
+br.it
+br.ms
+br.tc
brand.se
+brandywinevalley.museum
+brasil.museum
+bravehost.com
+bravepages.com
+bremanger.no
+brescia.it
+brindisi.it
+bristol.museum
british-library.uk
+british.museum
+britishcolumbia.museum
+broadcast.museum
+broker.aero
+bronnoy.no
+bronnoysund.no
+brumunddal.no
+brunel.museum
+brussel.museum
+brussels.museum
+bruxelles.museum
bryansk.ru
+bryne.no
+bs.it
+bu.no
+budejju.no
+building.museum
+burghof.museum
buryatia.ru
+bus.museum
busan.kr
+bushey.museum
+by.ru
+bydgoszcz.pl
+bygland.no
+bykle.no
+bytom.pl
+bz.it
+c.bg
+c.la
c.se
+ca.it
+ca.na
+ca.pn
ca.tf
ca.tt
ca.us
+caa.aero
+cadaques.museum
+cagliari.it
+cahcesuolo.no
+california.museum
+caltanissetta.it
+cambridge.museum
+campobasso.it
+can.br
+can.museum
+canada.museum
+capebreton.museum
+cargo.aero
+carrier.museum
+cartoonart.museum
+casadelamoneda.museum
+caserta.it
casino.hu
+castle.museum
+castres.museum
+catania.it
+catanzaro.it
+catering.aero
+cb.it
cbg.ru
cc.bh
+cc.cc
+cc.na
cci.fr
+ce.it
+ce.ms
+celtic.museum
+center.museum
+certification.aero
+ch.it
+ch.lv
+ch.pn
+ch.tc
ch.tf
ch.vu
chambagri.fr
+championship.aero
+charter.aero
+chat.ru
+chattanooga.museum
chel.ru
+cheltenham.museum
chelyabinsk.ru
cherkassy.ua
chernigov.ua
chernovtsy.ua
+chesapeakebay.museum
chiba.jp
+chicago.museum
+chieti.it
+children.museum
+childrens.museum
+childrensgarden.museum
+chiropractic.museum
chirurgiens-dentistes.fr
chita.ru
+chocolate.museum
+christiansburg.museum
chukotka.ru
chungbuk.kr
chungnam.kr
chuvashia.ru
+cieszyn.pl
cim.br
+cincinnati.museum
+cinema.museum
+circus.museum
city.hu
city.za
+civilaviation.aero
+civilisation.museum
+civilization.museum
+civilwar.museum
+cjb.net
ck.ua
+cl.it
+clickbank.net
+clinton.museum
+clock.museum
+club.aero
club.tw
cmw.ru
cn.com
+cn.it
+cn.ms
+cn.pn
cn.ua
cng.br
cnt.br
@@ -190,35 +559,50 @@ co.am
co.ao
co.at
co.ba
+co.bi
co.bw
+co.cc
+co.ci
co.ck
co.cr
+co.cu
co.dk
co.ee
co.fk
co.gg
+co.gy
co.hu
co.id
co.il
co.im
co.in
co.ir
+co.it
co.je
co.jp
co.ke
+co.kg
co.kr
+co.lc
co.ls
co.ma
+co.me
co.mu
co.mw
co.mz
+co.na
co.nz
co.om
+co.pn
+co.pw
co.rs
co.rw
+co.sh
co.st
+co.sz
co.th
co.tj
+co.tm
co.tt
co.tv
co.tz
@@ -233,6 +617,15 @@ co.yu
co.za
co.zm
co.zw
+coal.museum
+coastaldefence.museum
+cody.museum
+coldwar.museum
+collection.museum
+colonialwilliamsburg.museum
+coloradoplateau.museum
+columbia.museum
+columbus.museum
com.ac
com.ae
com.af
@@ -249,15 +642,18 @@ com.ba
com.bb
com.bd
com.bh
+com.bi
com.bm
com.bn
com.bo
com.br
com.bs
com.bt
+com.by
com.bz
com.cd
com.ch
+com.ci
com.cn
com.co
com.cu
@@ -282,16 +678,20 @@ com.gp
com.gr
com.gt
com.gu
+com.gy
com.hk
com.hn
com.hr
com.ht
com.io
+com.iq
+com.is
com.jm
com.jo
com.kg
com.kh
com.ki
+com.km
com.kw
com.ky
com.kz
@@ -305,6 +705,7 @@ com.lv
com.ly
com.mg
com.mk
+com.ml
com.mm
com.mn
com.mo
@@ -344,13 +745,17 @@ com.sc
com.sd
com.sg
com.sh
+com.sl
com.st
com.sv
com.sy
com.tj
+com.tm
com.tn
+com.to
com.tr
com.tt
+com.tv
com.tw
com.ua
com.uy
@@ -362,53 +767,146 @@ com.vn
com.vu
com.ws
com.ye
+communication.museum
+communications.museum
+community.museum
+como.it
+computer.museum
+computerhistory.museum
conf.au
conf.lv
+conference.aero
+congresodelalengua3.ar
consulado.st
+consultant.aero
+consulting.aero
+contemporary.museum
+contemporaryart.museum
+control.aero
+convent.museum
coop.br
coop.ht
+coop.km
coop.mv
coop.mw
coop.tt
+copenhagen.museum
+corp.st
+corporation.museum
+corvette.museum
+cosenza.it
+costume.museum
+council.aero
+countryestate.museum
+county.museum
cpa.pro
cq.cn
+cr.it
+crafts.museum
+cranbrook.museum
+creation.museum
+cremona.it
+crew.aero
cri.nz
crimea.ua
+crotone.it
+cs.it
csiro.au
+ct.it
ct.us
cul.na
+cultural.museum
+culturalcenter.museum
+culture.museum
+cuneo.it
cv.ua
+cyber.museum
+cymru.museum
+cyt.cu
+cz.cc
+cz.it
+cz.tc
cz.tf
+czeladz.pl
+czest.pl
+d.bg
d.se
daegu.kr
daejeon.kr
dagestan.ru
+dali.museum
+dallas.museum
+database.museum
+davvenjarga.no
+davvesiida.no
dc.us
+ddr.museum
de.com
+de.ki
+de.lv
+de.ms
de.net
+de.pn
+de.tc
de.tf
de.tt
de.us
de.vu
+deatnu.no
+decorativearts.museum
+defense.tn
+delaware.museum
+delmenhorst.museum
+denmark.museum
+dep.no
+depot.museum
+design.aero
+design.museum
+detroit.museum
+dgca.aero
+dielddanuorri.no
+dinosaur.museum
+discovery.museum
+divtasvuodna.no
+divttasvuotna.no
dk.org
+dk.tc
dk.tt
+dlugoleka.pl
dn.ua
dnepropetrovsk.ua
dni.us
dns.be
+dolls.museum
donetsk.ua
+donna.no
+donostia.museum
+dovre.no
dp.ua
dpn.br
+dr.na
dr.tr
+drammen.no
+drangedal.no
+drobak.no
+dr�bak.no
dudinka.ru
+durham.museum
+dyroy.no
e-burg.ru
+e.bg
e.se
+e12.ve
e164.arpa
+eastafrica.museum
+eastcoast.museum
ebiz.tw
ecn.br
ed.ao
+ed.ci
ed.cr
ed.jp
+ed.pw
edu.ac
edu.af
edu.ai
@@ -422,11 +920,15 @@ edu.ba
edu.bb
edu.bd
edu.bh
+edu.bi
edu.bm
edu.bn
edu.bo
edu.br
+edu.bs
edu.bt
+edu.bz
+edu.ci
edu.ck
edu.cn
edu.co
@@ -443,6 +945,7 @@ edu.et
edu.ge
edu.gh
edu.gi
+edu.gn
edu.gp
edu.gr
edu.gt
@@ -452,21 +955,30 @@ edu.hn
edu.ht
edu.hu
edu.in
+edu.iq
+edu.is
edu.it
edu.jm
edu.jo
edu.kg
edu.kh
+edu.ki
+edu.km
+edu.kn
edu.kw
edu.ky
edu.kz
+edu.la
edu.lb
edu.lc
edu.lk
edu.lr
edu.lv
edu.ly
+edu.me
edu.mg
+edu.mk
+edu.ml
edu.mm
edu.mn
edu.mo
@@ -487,6 +999,7 @@ edu.pf
edu.ph
edu.pk
edu.pl
+edu.pn
edu.pr
edu.ps
edu.pt
@@ -502,16 +1015,21 @@ edu.sd
edu.sg
edu.sh
edu.sk
+edu.sl
edu.st
edu.sv
+edu.sy
+edu.tc
edu.tf
edu.tj
+edu.to
edu.tr
edu.tt
edu.tw
edu.ua
edu.uk
edu.uy
+edu.vc
edu.ve
edu.vi
edu.vn
@@ -520,92 +1038,283 @@ edu.ws
edu.ye
edu.yu
edu.za
+educ.ar
+education.museum
+educational.museum
+educator.aero
edunet.tn
+egersund.no
+egyptian.museum
ehime.jp
+eid.no
+eidfjord.no
+eidsberg.no
+eidskog.no
+eidsvoll.no
+eigersund.no
+eisenbahn.museum
ekloges.cy
+elblag.pl
+elburg.museum
+elk.pl
+elvendrell.museum
+elverum.no
embaixada.st
+embroidery.museum
+emergency.aero
+en.it
+encyclopedic.museum
+enebakk.no
eng.br
+eng.pro
+engerdal.no
+engine.aero
+engineer.aero
+england.museum
+enna.it
ens.tn
+entertainment.aero
+entomology.museum
+environment.museum
+environmentalconservation.museum
+epilepsy.museum
+equipment.aero
ernet.in
erotica.hu
erotika.hu
es.kr
+es.pn
+es.tc
+es.tl
es.tt
esp.br
+essex.museum
+est.pr
+estate.museum
etc.br
+ethnology.museum
eti.br
+etne.no
+etnedal.no
eu.com
+eu.im
+eu.int
eu.org
+eu.tc
eu.tf
eu.tt
eun.eg
+euro.tm
+evenassi.no
+evenes.no
+evje-og-hornnes.no
+exchange.aero
+exeter.museum
+exhibition.museum
experts-comptables.fr
+express.aero
+extra.hu
+f.bg
f.se
fam.pk
+family.museum
far.br
fareast.ru
+farm.museum
+farmequipment.museum
+farmers.museum
+farmstead.museum
+farsund.no
+fauske.no
fax.nr
+fc.it
+fe.it
fed.us
+federation.aero
+fedje.no
+fermo.it
+ferrara.it
+fet.no
+fetsund.no
+fg.it
fgov.be
fh.se
fhs.no
fhsk.se
fhv.se
fi.cr
+fi.it
fie.ee
+field.museum
+figueres.museum
+filatelia.museum
film.hu
+film.museum
fin.ec
fin.tn
+fineart.museum
+finearts.museum
+finland.museum
+finnoy.no
+firenze.it
firm.co
firm.ht
firm.in
+firm.nf
firm.ro
firm.ve
+fitjar.no
fj.cn
+fjaler.no
+fjell.no
fl.us
+fla.no
+flakstad.no
+flanders.museum
+flatanger.no
+flekkefjord.no
+flesberg.no
+flight.aero
+flog.br
+flora.no
+florence.it
+florida.museum
+floro.no
fm.br
+fm.no
fnd.br
+foggia.it
folkebibl.no
+folldal.no
+force.museum
+forde.no
+forli-cesena.it
+forlicesena.it
+forsand.no
+fortmissoula.museum
+fortworth.museum
forum.hu
+fosnes.no
fot.br
+foundation.museum
+fr.it
+fr.ms
+fr.pn
+fr.tc
fr.tt
fr.vu
+frana.no
+francaise.museum
+frankfurt.museum
+franziskaner.museum
+fredrikstad.no
+free.fr
+freehostia.com
+freemasonry.museum
+freeservercity.com
+frei.no
+freiburg.museum
+freight.aero
+fribourg.museum
+frog.museum
+frogn.no
+froland.no
from.hr
+front.ru
+frosinone.it
+frosta.no
+froya.no
fst.br
+fuel.aero
fukui.jp
fukuoka.jp
fukushima.jp
+fundacio.museum
+funpic.de
+fuoisku.no
+fuossko.no
+furniture.museum
+fusa.no
+fx.to
fylkesbibl.no
+fyresdal.no
+g.bg
g.se
g12.br
ga.us
+gaivuotna.no
+gallery.museum
+galsa.no
game.tw
games.hu
+gamvik.no
+gangaviika.no
gangwon.kr
+garden.museum
+gateway.museum
+gaular.no
+gausdal.no
gb.com
gb.net
+gbr.me
gc.ca
gd.cn
gda.pl
gdansk.pl
+gdynia.pl
+ge.it
geek.nz
+geelvinck.museum
+gemological.museum
gen.in
gen.nz
gen.tr
+genoa.it
+genova.it
+geocities.com
+geocities.jp
+geology.museum
geometre-expert.fr
+georgia.museum
+get.cu
+getmyip.com
ggf.br
+giehtavuoatna.no
+giessen.museum
gifu.jp
+gigazu.net
+gildeskal.no
+giske.no
+gjemnes.no
+gjerdrum.no
+gjerstad.no
+gjesdal.no
+gjovik.no
+glas.museum
+glass.museum
+gliding.aero
+gliwice.pl
+glogow.pl
+gloppen.no
gmina.pl
+gmxhome.de
+gniezno.pl
+go.ci
+go.com
go.cr
go.id
+go.it
go.jp
go.ke
go.kr
+go.pw
+go.ro
go.th
go.tj
go.tz
go.ug
gob.bo
+gob.cl
gob.do
gob.es
gob.gt
@@ -616,12 +1325,23 @@ gob.pa
gob.pe
gob.pk
gob.sv
+gob.ve
+gobiernoelectronico.ar
gok.pk
+gol.no
gon.pk
+googlegroups.com
+googlepages.com
gop.pk
+gorge.museum
+gorizia.it
+gorlice.pl
gos.pk
+gouv.ci
gouv.fr
gouv.ht
+gouv.km
+gouv.ml
gouv.rw
gov.ac
gov.ae
@@ -630,6 +1350,7 @@ gov.ai
gov.al
gov.am
gov.ar
+gov.as
gov.au
gov.az
gov.ba
@@ -640,10 +1361,15 @@ gov.bh
gov.bm
gov.bo
gov.br
+gov.bs
gov.bt
gov.by
+gov.bz
+gov.cd
gov.ch
gov.ck
+gov.cl
+gov.cm
gov.cn
gov.co
gov.cu
@@ -653,6 +1379,7 @@ gov.dm
gov.do
gov.dz
gov.ec
+gov.ee
gov.eg
gov.er
gov.et
@@ -672,7 +1399,9 @@ gov.il
gov.im
gov.in
gov.io
+gov.iq
gov.ir
+gov.is
gov.it
gov.je
gov.jm
@@ -680,9 +1409,13 @@ gov.jo
gov.jp
gov.kg
gov.kh
+gov.ki
+gov.km
+gov.kn
gov.kw
gov.ky
gov.kz
+gov.la
gov.lb
gov.lc
gov.li
@@ -693,11 +1426,16 @@ gov.lu
gov.lv
gov.ly
gov.ma
+gov.me
gov.mg
+gov.mk
+gov.ml
gov.mm
gov.mn
gov.mo
+gov.mr
gov.mt
+gov.mu
gov.mv
gov.mw
gov.my
@@ -708,6 +1446,7 @@ gov.om
gov.ph
gov.pk
gov.pl
+gov.pn
gov.pr
gov.ps
gov.pt
@@ -723,9 +1462,12 @@ gov.sd
gov.sg
gov.sh
gov.sk
+gov.sl
gov.st
gov.sy
gov.tj
+gov.tl
+gov.tm
gov.tn
gov.to
gov.tp
@@ -735,6 +1477,7 @@ gov.tv
gov.tw
gov.ua
gov.uk
+gov.vc
gov.ve
gov.vi
gov.vn
@@ -743,16 +1486,37 @@ gov.ye
gov.za
gov.zm
gov.zw
+government.aero
+government.pn
govt.nz
+gr.it
gr.jp
+grajewo.pl
+gran.no
+grandrapids.museum
+grane.no
+granvin.no
+gratangen.no
+gratishost.com
+graz.museum
greta.fr
+grimstad.no
+grong.no
+grosseto.it
+groundhandling.aero
+group.aero
grozny.ru
grp.lk
+grue.no
gs.cn
gsm.pl
+gu.us
gub.uy
guernsey.gg
+guernsey.museum
+gulen.no
gunma.jp
+guovdageaidnu.no
gv.ao
gv.at
gwangju.kr
@@ -761,44 +1525,140 @@ gyeongbuk.kr
gyeonggi.kr
gyeongnam.kr
gz.cn
+h.bg
h.se
ha.cn
+ha.no
+habmer.no
+hadsel.no
+hagebostad.no
+halden.no
+halloffame.museum
+halsa.no
+hamar.no
+hamaroy.no
+hamburg.museum
+hammarfeasta.no
+hammerfest.no
+handson.museum
+hanggliding.aero
+hapmir.no
+haram.no
+hareid.no
+harstad.no
+harvestcelebration.museum
+hasvik.no
+hattfjelldal.no
+haugesund.no
+hawaii.museum
hb.cn
he.cn
+health.museum
health.vn
+heimatunduhren.museum
+hellas.museum
+helloweb.eu
+helsinki.museum
+hembygdsforbund.museum
+hemne.no
+hemnes.no
+hemsedal.no
herad.no
+heritage.museum
hi.cn
hi.us
hiroshima.jp
+histoire.museum
+historical.museum
+historicalsociety.museum
+historichouses.museum
+historisch.museum
+historisches.museum
+history.museum
+historyofscience.museum
+hitra.no
+hjartdal.no
+hjelmeland.no
hk.cn
+hk.ms
+hk.tc
hl.cn
+hl.no
+hm.no
hn.cn
+hobol.no
+hof.no
hokkaido.jp
+hokksund.no
+hol.no
+hole.no
+holmestrand.no
+holtalen.no
+home.pl
+home.ro
+homebuilt.aero
+homeip.net
+honefoss.no
+hornindal.no
+horology.museum
+horten.no
+host.sk
+hostevo.com
+hotbox.ru
hotel.hu
hotel.lk
+hotmail.ru
+house.museum
+hoyanger.no
+hoylandet.no
hs.kr
hu.com
+hu.tc
+hu2.ru
huissier-justice.fr
+humanities.museum
+hurdal.no
+hurum.no
+hut2.ru
+hvaler.no
+hyllestad.no
hyogo.jp
+i.bg
+i.ph
i.se
ia.us
ibaraki.jp
+ibelgique.com
+ibestad.no
+iblogger.org
+ic.cz
icnet.uk
id.au
id.fj
id.ir
id.lv
id.ly
+id.ru
id.us
idf.il
idn.sg
+idoo.com
idrett.no
idv.hk
idv.tw
+ie.tc
+iespana.es
if.ua
+ifrance.com
+il.im
il.us
+ilawa.pl
+illustration.museum
+im.it
+imageandsound.museum
imb.br
-in-addr.arpa
+imperia.it
+in.na
in.rs
in.th
in.ua
@@ -811,8 +1671,14 @@ ind.gt
ind.in
ind.je
ind.tn
+inderoy.no
+indian.museum
+indiana.museum
+indianapolis.museum
+indianmarket.museum
inf.br
inf.cu
+inf.mk
info.au
info.az
info.bh
@@ -824,8 +1690,14 @@ info.et
info.fj
info.ht
info.hu
+info.ki
+info.la
+info.ms
info.mv
+info.na
+info.nf
info.nr
+info.pk
info.pl
info.pr
info.ro
@@ -838,69 +1710,139 @@ info.vn
ing.pa
ingatlan.hu
inima.al
+insurance.aero
int.am
int.ar
int.az
int.bo
+int.ci
int.co
+int.is
+int.la
int.lk
int.mv
int.mw
int.pt
int.ru
int.rw
+int.tc
int.tf
int.tj
int.tt
int.ve
int.vn
+intelligence.museum
+interactive.museum
+interia.pl
+interii.pl
intl.tn
ip6.arpa
+iquebec.com
+iraq.museum
+irc.pl
iris.arpa
irkutsk.ru
+iron.museum
+is.it
isa.us
+isernia.it
ishikawa.jp
isla.pr
+isleofman.museum
+isuisse.com
it.ao
+it.pn
+it.tc
it.tt
+its.me
ivano-frankivsk.ua
ivanovo.ru
+iveland.no
+ivgu.no
iwate.jp
+iwebsource.com
iwi.nz
iz.hr
izhevsk.ru
+j.bg
jamal.ru
+jamison.museum
+jan-mayen.no
jar.ru
+jaworzno.pl
+jefferson.museum
jeju.kr
+jelenia-gora.pl
jeonbuk.kr
jeonnam.kr
jersey.je
+jerusalem.museum
+jessheim.no
jet.uk
+jevnaker.no
+jewelry.museum
+jewish.museum
+jewishart.museum
+jfk.museum
+jgora.pl
+jimdo.com
+jino-net.ru
jl.cn
jobs.tt
jogasz.hu
+jolster.no
+jondal.no
jor.br
+jorpeland.no
joshkar-ola.ru
+journal.aero
+journalism.museum
+journalist.aero
+jp.pn
+jpn.com
js.cn
+judaica.museum
+judygarland.museum
+juedisches.museum
+juif.museum
+jur.pro
+jus.br
jx.cn
k-uralsk.ru
+k.bg
k.se
k12.ec
k12.il
k12.tr
+k12.vi
+kafjord.no
kagawa.jp
kagoshima.jp
+kalisz.pl
kalmykia.ru
kaluga.ru
kamchatka.ru
kanagawa.jp
kanazawa.jp
+karasjohka.no
+karasjok.no
+karate.museum
karelia.ru
+karikatur.museum
+karlsoy.no
+karmoy.no
+karpacz.pl
+kartuzy.pl
+kaszuby.pl
katowice.pl
+kautokeino.no
kawasaki.jp
kazan.ru
+kazimierz-dolny.pl
kchr.ru
kemerovo.ru
+kepno.pl
+ketrzyn.pl
kg.kr
kh.ua
khabarovsk.ru
@@ -909,77 +1851,244 @@ kharkov.ua
kherson.ua
khmelnitskiy.ua
khv.ru
+kickme.to
+kids.museum
kids.us
kiev.ua
+kimsufi.com
+kirkenes.no
kirov.ru
kirovograd.ua
kitakyushu.jp
+klabu.no
+klepp.no
+klodzko.pl
km.ua
kms.ru
kobe.jp
+kobierzyce.pl
kochi.jp
+koebenhavn.museum
+koeln.museum
koenig.ru
+kolobrzeg.pl
komforb.se
komi.ru
kommunalforbund.se
kommune.no
komvux.se
+kongsberg.no
+kongsvinger.no
+konin.pl
+konskowola.pl
konyvelo.hu
+kopervik.no
kostroma.ru
+kr.com
+kr.it
+kr.tc
kr.ua
+kraanghke.no
+kragero.no
krakow.pl
krasnoyarsk.ru
+kristiansand.no
+kristiansund.no
+krodsherad.no
+krokstadelva.no
ks.ua
ks.us
kuban.ru
kumamoto.jp
+kunst.museum
+kunstsammlung.museum
+kunstunddesign.museum
kurgan.ru
kursk.ru
kustanai.ru
+kutno.pl
kuzbass.ru
kv.ua
+kvafjord.no
+kvalsund.no
+kvam.no
+kvanangen.no
+kvinesdal.no
+kvinnherad.no
+kviteseid.no
+kvitsoy.no
+kwik.to
ky.us
kyonggi.kr
kyoto.jp
+l.bg
+l.se
+la-spezia.it
la.us
+laakesvuemie.no
+labor.museum
+labour.museum
+lahppi.no
+lajolla.museum
lakas.hu
lanarb.se
lanbib.se
+lancashire.museum
+land.ru
+landes.museum
+langevag.no
+lans.museum
+lapy.pl
+laquila.it
+lardal.no
+larsson.museum
+larvik.no
+laspezia.it
+latina.it
+lavagis.no
+lavangen.no
law.pro
law.za
+lc.it
+le.it
+lea?gaviika.no
+leangaviika.no
+leasing.aero
+lebesby.no
+lebork.pl
+lecce.it
+lecco.it
+legnica.pl
+leikanger.no
+leirfjord.no
+leirvik.no
+leka.no
+leksvik.no
lel.br
+lenvik.no
+lerdal.no
+lesja.no
+levanger.no
+lewismiller.museum
+lezajsk.pl
lg.jp
lg.ua
+li.it
+lib.ee
+lier.no
+lierne.no
+lillehammer.no
+lillesand.no
+limanowa.pl
+lincoln.museum
+lindas.no
+lindesnes.no
+linz.museum
lipetsk.ru
-lkd.co.im
+livejournal.com
+living.museum
+livinghistory.museum
+livorno.it
ln.cn
+lo.it
+loabat.no
+localhistory.museum
+lodi.it
+lodingen.no
lodz.pl
-ltd.co.im
+logistics.aero
+lom.no
+lomza.pl
+london.museum
+loppa.no
+lorenskog.no
+losangeles.museum
+loten.no
+louvre.museum
+lowicz.pl
+loyalist.museum
+lt.it
ltd.cy
ltd.gg
ltd.gi
ltd.je
ltd.lk
ltd.uk
+lu.it
+lubin.pl
lublin.pl
+lucca.it
+lucerne.museum
lugansk.ua
+lukow.pl
+lund.no
+lunner.no
+luroy.no
+luster.no
lutsk.ua
+luxembourg.museum
+luzern.museum
lviv.ua
+lyngdal.no
+lyngen.no
+m.bg
m.se
ma.us
+macerata.it
+mad.museum
+madrid.museum
magadan.ru
+magazine.aero
magnitka.ru
mail.pl
+mail.ru
+mail15.su
+mail2k.ru
+mail333.su
+maintenance.aero
+malatvuopmi.no
+malbork.pl
+mallorca.museum
+malopolska.pl
+malselv.no
+malvik.no
+manchester.museum
+mandal.no
+mansion.museum
+mansions.museum
+mantova.it
+manx.museum
maori.nz
+marburg.museum
mari-el.ru
mari.ru
marine.ru
+maritime.museum
+maritimo.museum
+marker.no
+marketplace.aero
+marnardal.no
+maryland.museum
+marylhurst.museum
+masfjorden.no
+masoy.no
+massa-carrara.it
+massacarrara.it
mat.br
+matera.it
matsuyama.jp
+matta-varjjat.no
+mazowsze.pl
+mazury.pl
mb.ca
+mbone.pl
+mc.it
+md.ci
md.us
+me.it
me.uk
me.us
+mecon.ar
med.br
med.ec
med.ee
@@ -987,16 +2096,39 @@ med.ht
med.ly
med.om
med.pa
+med.pl
med.pro
med.sa
med.sd
medecin.fr
+medecin.km
+media.aero
media.hu
+media.museum
media.pl
+medical.museum
+medizinhistorisches.museum
+meeres.museum
+meland.no
+meldal.no
+melhus.no
+meloy.no
+memorial.museum
+meraker.no
+mesaverde.museum
+messina.it
+mi.it
mi.th
mi.us
miasta.pl
+michigan.museum
+microlight.aero
+midatlantic.museum
+midsund.no
+midtre-gauldal.no
mie.jp
+mielec.pl
+mielno.pl
mil.ac
mil.ae
mil.am
@@ -1007,6 +2139,7 @@ mil.bd
mil.bo
mil.br
mil.by
+mil.cn
mil.co
mil.do
mil.ec
@@ -1021,9 +2154,11 @@ mil.hn
mil.id
mil.in
mil.io
+mil.iq
mil.jo
mil.kg
mil.kh
+mil.km
mil.kr
mil.kw
mil.kz
@@ -1047,67 +2182,158 @@ mil.se
mil.sh
mil.sk
mil.st
+mil.sy
mil.tj
+mil.tm
+mil.to
mil.tr
mil.tw
mil.uk
mil.uy
+mil.vc
mil.ve
mil.ye
mil.za
+milan.it
+milano.it
+military.museum
+mill.museum
+mincom.tn
+mine.nu
+miners.museum
+mining.museum
+minnesota.museum
+missile.museum
+missoula.museum
miyagi.jp
miyazaki.jp
+mjondalen.no
mk.ua
+mn.it
mn.us
+mo-i-rana.no
mo.cn
+mo.it
mo.us
+moareke.no
mob.nr
+mobi.gp
+mobi.na
mobi.tt
mobil.nr
mobile.nr
mod.gi
mod.om
mod.uk
+modalen.no
+modelling.aero
+modena.it
+modern.museum
+modum.no
+molde.no
+moma.museum
+money.museum
+monmouth.museum
+monticello.museum
+montreal.museum
+monza.it
+mooo.com
mordovia.ru
+moscow.museum
+mosjoen.no
+moskenes.no
mosreg.ru
+moss.no
+mosvik.no
+motorcycle.museum
+mr.no
+mragowo.pl
+ms.it
ms.kr
ms.us
msk.ru
+mt.it
mt.us
+muenchen.museum
+muenster.museum
+mulhouse.museum
+muncie.museum
muni.il
+muosat.no
murmansk.ru
mus.br
+museet.museum
museum.mn
museum.mv
museum.mw
museum.no
museum.om
museum.tt
+museumcenter.museum
+museumvereniging.museum
music.mobi
+music.museum
+mx.na
+mx.tc
mytis.ru
+myvnc.com
+n.bg
n.se
+na.by
+na.it
+naamesjevuemie.no
+nacion.ar
nagano.jp
nagasaki.jp
nagoya.jp
nakhodka.ru
+naklo.pl
nalchik.ru
+namdalseid.no
name.ae
name.az
name.cy
name.et
name.fj
name.hr
+name.jo
+name.mk
name.mv
name.my
+name.na
name.pr
name.tj
name.tr
name.tt
name.vn
+namsos.no
+namsskogan.no
+nannestad.no
+naples.it
+napoli.it
nara.jp
+narod.ru
+naroy.no
+narviika.no
+narvik.no
nat.tn
national-library-scotland.uk
+national.museum
+nationalfirearms.museum
+nationalheritage.museum
+nativeamerican.museum
+naturalhistory.museum
+naturalhistorymuseum.museum
+naturalsciences.museum
naturbruksgymn.se
+nature.museum
+naturhistorisches.museum
+natuurwetenschappen.museum
+naumburg.museum
+naustdal.no
+naval.museum
+navigation.aero
+navuotna.no
navy.mil
nb.ca
nc.us
@@ -1115,10 +2341,19 @@ nd.us
ne.jp
ne.ke
ne.kr
+ne.pw
ne.tz
ne.ug
ne.us
+nebraska.museum
+nedre-eiker.no
nel.uk
+neostrada.pl
+nesna.no
+nesodden.no
+nesoddtangen.no
+nesseby.no
+nesset.no
net.ac
net.ae
net.af
@@ -1143,6 +2378,7 @@ net.bt
net.bz
net.cd
net.ch
+net.ci
net.ck
net.cn
net.co
@@ -1164,6 +2400,7 @@ net.gp
net.gr
net.gt
net.gu
+net.gy
net.hk
net.hn
net.ht
@@ -1172,7 +2409,9 @@ net.il
net.im
net.in
net.io
+net.iq
net.ir
+net.is
net.je
net.jm
net.jo
@@ -1180,6 +2419,7 @@ net.jp
net.kg
net.kh
net.ki
+net.kn
net.kw
net.ky
net.kz
@@ -1193,8 +2433,12 @@ net.lu
net.lv
net.ly
net.ma
+net.me
+net.mk
+net.ml
net.mm
net.mo
+net.ms
net.mt
net.mu
net.mv
@@ -1216,6 +2460,7 @@ net.pg
net.ph
net.pk
net.pl
+net.pn
net.pr
net.ps
net.pt
@@ -1229,14 +2474,19 @@ net.sc
net.sd
net.sg
net.sh
+net.sl
net.st
net.sy
+net.tc
net.tf
net.th
net.tj
+net.tm
net.tn
+net.to
net.tr
net.tt
+net.tv
net.tw
net.ua
net.uk
@@ -1250,8 +2500,19 @@ net.vu
net.ws
net.ye
net.za
+netfirms.com
+netsolhost.com
+neues.museum
new.ke
+newhampshire.museum
+newjersey.museum
+newmail.ru
+newmexico.museum
+newport.museum
news.hu
+newspaper.museum
+newyork.museum
+nextmail.ru
nf.ca
ngo.lk
ngo.ph
@@ -1259,21 +2520,31 @@ ngo.pl
ngo.za
nh.us
nhs.uk
+nic.ar
nic.im
nic.in
nic.tt
nic.uk
+niepce.museum
nieruchomosci.pl
+nightmail.ru
niigata.jp
nikolaev.ua
+ning.com
+nissedal.no
+nittedal.no
nj.us
nkz.ru
nl.ca
+nl.no
nls.uk
nm.cn
+nm.ru
nm.us
nnov.ru
no.com
+no.it
+no.tc
nom.ad
nom.ag
nom.br
@@ -1281,6 +2552,7 @@ nom.co
nom.es
nom.fk
nom.fr
+nom.km
nom.mg
nom.ni
nom.pa
@@ -1288,31 +2560,62 @@ nom.pe
nom.pl
nom.re
nom.ro
+nom.sh
nom.ve
nom.za
nome.pt
+nord-aurdal.no
+nord-fron.no
+nord-odal.no
+norddal.no
+nordkapp.no
+nordre-land.no
+nordreisa.no
+nore-og-uvdal.no
+norfolk.museum
norilsk.ru
+north.museum
not.br
notaires.fr
+notaires.km
+notlong.com
+notodden.no
+notteroy.no
nov.ru
+novara.it
novosibirsk.ru
+nowaruda.pl
+nrw.museum
ns.ca
nsk.ru
nsn.us
nsw.au
nt.au
nt.ca
+nt.no
nt.ro
ntr.br
nu.ca
+nu.it
+nuernberg.museum
nui.hu
+nuoro.it
+nuremberg.museum
nv.us
nx.cn
ny.us
+nyc.museum
+nyny.museum
+nysa.pl
+o.bg
o.se
+oceanographic.museum
+oceanographique.museum
od.ua
+odda.no
odessa.ua
odo.br
+of.no
off.ai
og.ao
oh.us
@@ -1320,23 +2623,46 @@ oita.jp
ok.us
okayama.jp
okinawa.jp
+oksnes.no
+ol.no
+olawa.pl
+olecko.pl
+olkusz.pl
olsztyn.pl
+omaha.museum
+omasvuotna.no
omsk.ru
on.ca
+one.pl
+online.museum
+ontario.museum
+openair.museum
+opoczno.pl
opole.pl
+oppdal.no
+oppegard.no
or.at
+or.bi
+or.ci
or.cr
or.id
+or.it
or.jp
or.ke
or.kr
+or.mu
+or.na
+or.pw
or.th
or.tz
or.ug
or.us
+oregon.museum
+oregontrail.museum
orenburg.ru
org.ac
org.ae
+org.af
org.ag
org.ai
org.al
@@ -1349,6 +2675,7 @@ org.ba
org.bb
org.bd
org.bh
+org.bi
org.bm
org.bn
org.bo
@@ -1359,6 +2686,7 @@ org.bw
org.bz
org.cd
org.ch
+org.ci
org.ck
org.cn
org.co
@@ -1392,7 +2720,9 @@ org.il
org.im
org.in
org.io
+org.iq
org.ir
+org.is
org.je
org.jm
org.jo
@@ -1400,6 +2730,8 @@ org.jp
org.kg
org.kh
org.ki
+org.km
+org.kn
org.kw
org.ky
org.kz
@@ -1414,8 +2746,10 @@ org.lu
org.lv
org.ly
org.ma
+org.me
org.mg
org.mk
+org.ml
org.mm
org.mn
org.mo
@@ -1439,6 +2773,7 @@ org.pf
org.ph
org.pk
org.pl
+org.pn
org.pr
org.ps
org.pt
@@ -1447,6 +2782,7 @@ org.qa
org.ro
org.rs
org.ru
+org.rw
org.sa
org.sb
org.sc
@@ -1454,13 +2790,18 @@ org.sd
org.se
org.sg
org.sh
+org.sl
org.st
org.sv
org.sy
+org.sz
org.tj
+org.tm
org.tn
+org.to
org.tr
org.tt
+org.tv
org.tw
org.ua
org.uk
@@ -1477,115 +2818,357 @@ org.yu
org.za
org.zm
org.zw
+oristano.it
+orkanger.no
+orkdal.no
+orland.no
+orskog.no
+orsta.no
oryol.ru
osaka.jp
+osen.no
oskol.ru
+oslo.no
+osoyro.no
+osteroy.no
+oster�y.no
+ostre-toten.no
+ostroda.pl
+ostroleka.pl
+ostrowiec.pl
+ostrowwlkp.pl
+otago.museum
otc.au
+other.nf
+overhalla.no
+ovh.net
+ovre-eiker.no
+oxford.museum
+oyer.no
+oygarden.no
+oystre-slidre.no
oz.au
+p.bg
+p.se
+pa.it
pa.us
+pacific.museum
+paderborn.museum
+padova.it
+padua.it
+page.tl
+palace.museum
palana.ru
+paleo.museum
+palermo.it
+palmsprings.museum
+panama.museum
+parachuting.aero
+paragliding.aero
+paris.museum
parliament.cy
parliament.uk
+parma.it
parti.se
+pasadena.museum
+passenger-association.aero
+pavia.it
pb.ao
+pc.it
pc.pl
+pd.it
pe.ca
+pe.it
pe.kr
penza.ru
per.kh
+per.la
+per.nf
per.sg
perm.ru
perso.ht
+perso.tc
+perso.tn
+perugia.it
+pesaro-urbino.it
+pesarourbino.it
+pescara.it
+pg.it
+ph.tc
pharmacien.fr
+pharmaciens.km
+pharmacy.museum
+philadelphia.museum
+philadelphiaarea.museum
+philately.museum
+phoenix.museum
+photography.museum
+pi.it
+piacenza.it
+pila.pl
+pilot.aero
+pilots.museum
+pisa.it
+pisem.su
+pistoia.it
+pisz.pl
+pittsburgh.museum
+pl.tc
pl.tf
pl.ua
-plc.co.im
+planetarium.museum
+plantation.museum
+plants.museum
+plaza.museum
plc.ly
plc.uk
plo.ps
+pn.it
+po.it
+pochta.ru
+pochtamt.ru
+podhale.pl
+podlasie.pl
pol.dz
pol.ht
pol.tr
police.uk
+polkowice.pl
poltava.ua
+pomorskie.pl
+pomorze.pl
+pop3.ru
+pordenone.it
+porsanger.no
+porsangu.no
+porsgrunn.no
port.fr
+portal.museum
+portland.museum
+portlligat.museum
+posts-and-telecommunications.museum
+potenza.it
powiat.pl
poznan.pl
pp.az
pp.ru
pp.se
+pp.ua
ppg.br
+pr.it
+pr.us
+prato.it
prd.fr
+prd.km
prd.mg
+preservation.museum
+presidio.museum
+press.aero
press.cy
press.ma
+press.museum
press.se
+presse.ci
presse.fr
+presse.km
pri.ee
principe.st
priv.at
priv.hu
+priv.me
priv.no
priv.pl
pro.ae
+pro.az
pro.br
pro.cy
pro.ec
pro.fj
pro.ht
pro.mv
+pro.na
pro.om
pro.pr
+pro.tc
pro.tt
pro.vn
+proboards.com
+prochowice.pl
+production.aero
+prof.pr
+project.museum
+promocion.ar
+prserv.net
+pruszkow.pl
+przeworsk.pl
psc.br
psi.br
pskov.ru
+pt.it
ptz.ru
+pu.it
pub.sa
publ.pt
+public.museum
+pubol.museum
+pulawy.pl
+pv.it
pvt.ge
pyatigorsk.ru
+pz.it
+q.bg
qc.ca
qc.com
qh.cn
qld.au
qsl.br
+quebec.museum
+r.bg
+r.se
+ra.it
+rade.no
+radikal.ru
+radom.pl
+radoy.no
+ragusa.it
+rahkkeravju.no
+raholt.no
+railroad.museum
+railway.museum
+raisa.no
+rakkestad.no
+ralingen.no
+rana.no
+randaberg.no
+rauma.no
+ravenna.it
+rawa-maz.pl
+rbcmail.ru
+rc.it
+re.it
re.kr
realestate.pl
rec.br
rec.co
+rec.nf
rec.ro
rec.ve
+recreation.aero
red.sv
+redirectme.net
+reggio-calabria.it
+reggio-emilia.it
+reggiocalabria.it
+reggioemilia.it
reklam.hu
rel.ht
rel.pl
+rendalen.no
+rennebu.no
+rennesoy.no
+repbody.aero
+republika.pl
+res.aero
res.in
+research.aero
+research.museum
+resistance.museum
+retina.ar
+rg.it
+ri.it
ri.us
+rieti.it
+riik.ee
+rimini.it
+rindal.no
+ringebu.no
+ringerike.no
+ringsaker.no
+riodejaneiro.museum
+risor.no
+rissa.no
+rl.no
+rm.it
+rm.ru
+rn.it
rnd.ru
rnrt.tn
rns.tn
rnu.tn
+ro.im
+ro.it
+roan.no
+rochester.museum
+rockart.museum
+rodoy.no
+rollag.no
+roma.it
+roma.museum
+rome.it
+romsa.no
+romskog.no
+roros.no
+rost.no
+rotorcraft.aero
+rovigo.it
rovno.ua
+royken.no
+royrvik.no
rs.ba
ru.com
+ru.tc
ru.tf
rubtsovsk.ru
+ruovat.no
+russia.museum
rv.ua
ryazan.ru
+rybnik.pl
+rygge.no
+rzeszow.pl
+s.bg
s.se
sa.au
sa.com
sa.cr
+sa.it
+safety.aero
saga.jp
+saintlouis.museum
saitama.jp
sakhalin.ru
+salangen.no
+salat.no
+salem.museum
+salerno.it
+saltdal.no
+salvadordali.museum
+salzburg.museum
samara.ru
+samnanger.no
+sandefjord.no
+sandiego.museum
+sandnes.no
+sandnessjoen.no
+sandoy.no
+sanfrancisco.museum
+sanok.pl
+santabarbara.museum
+santacruz.museum
+santafe.museum
saotome.st
+sapo.pt
sapporo.jp
saratov.ru
sark.gg
+sarpsborg.no
+saskatchewan.museum
+sassari.it
+satx.museum
+sauda.no
+sauherad.no
+savannahga.museum
+savona.it
sc.cn
sc.ke
sc.kr
@@ -1596,6 +3179,7 @@ sch.gg
sch.id
sch.ir
sch.je
+sch.jo
sch.lk
sch.ly
sch.ng
@@ -1604,186 +3188,586 @@ sch.sa
sch.sd
sch.uk
sch.zm
+schlesisches.museum
+schoenbrunn.museum
+schokoladen.museum
school.fj
+school.museum
+school.na
school.nz
school.za
+schweiz.museum
sci.eg
+science-fiction.museum
+science.museum
+scienceandhistory.museum
+scienceandindustry.museum
+sciencecenter.museum
+sciencecenters.museum
+sciencehistory.museum
+sciences.museum
+sciencesnaturelles.museum
+scientist.aero
+scotland.museum
sd.cn
sd.us
se.com
+se.net
+se.tc
se.tt
+seaport.museum
sebastopol.ua
sec.ps
+sejny.pl
+sel.no
+selbu.no
+selfip.com
+selfip.net
+selje.no
+seljord.no
sendai.jp
seoul.kr
+servebbs.com
+serveftp.com
+services.aero
+settlement.museum
+settlers.museum
sex.hu
sex.pl
+sf.no
sg.tf
sh.cn
+shell.museum
+sherbrooke.museum
shiga.jp
shimane.jp
shizuoka.jp
shop.ht
shop.hu
+shop.ms
shop.pl
+shop.tc
+show.aero
+shutterfly.com
+si.it
+sibenik.museum
+siellak.no
+siena.it
+sigdal.no
+siljan.no
+silk.museum
simbirsk.ru
+siracusa.it
+sirdal.no
+site.tc
sk.ca
+skanit.no
+skanland.no
+skaun.no
+skedsmo.no
+skedsmokorset.no
+ski.museum
+ski.no
+skien.no
+skierva.no
+skiptvet.no
+skjak.no
+skjervoy.no
sklep.pl
+skoczow.pl
+skodje.no
+skole.museum
+skydiving.aero
+slask.pl
+slattum.no
+sld.cu
sld.do
sld.pa
slg.br
slupsk.pl
+smola.no
smolensk.ru
+smtp.ru
sn.cn
+snaase.no
+snasa.no
+snillfjord.no
+snoasa.no
snz.ru
+so.it
soc.lk
+societe.st
+society.museum
+software.aero
+sogndal.no
+sogne.no
+sokndal.no
+sol.ru
+sola.no
+sologne.museum
+solund.no
+somna.no
+sondre-land.no
+sondrio.it
+songdalen.no
+sopot.pl
+sor-aurdal.no
+sor-fron.no
+sor-odal.no
+sor-varanger.no
+sorfold.no
soros.al
+sorreisa.no
+sortland.no
+sorum.no
sos.pl
+sosblog.com
+sosnowiec.pl
+soundandvision.museum
+southcarolina.museum
+southwest.museum
+sp.it
+space.museum
spb.ru
+spjelkavik.no
sport.hu
+spy.museum
+spydeberg.no
+square.museum
+sr.it
srv.br
+ss.it
sshn.se
+st.no
+stadt.museum
+stalbans.museum
+stalowa-wola.pl
+stange.no
+starachowice.pl
+stargard.pl
+starnberg.museum
stat.no
+state.museum
+stateofdelaware.museum
+stathelle.no
+station.museum
+stavanger.no
+stavern.no
stavropol.ru
+steam.museum
+steiermark.museum
+steigen.no
+steinkjer.no
+stjohn.museum
+stjordal.no
+stjordalshalsen.no
+stockholm.museum
+stokke.no
+stor-elvdal.no
+stord.no
+stordal.no
store.co
+store.nf
store.ro
store.st
store.ve
+storfjord.no
+stpetersburg.museum
+strand.no
+stranda.no
+stryn.no
+student.aero
+stuttgart.museum
stv.ru
+suedtirol.it
+suisse.museum
+sula.no
+suldal.no
suli.hu
sumy.ua
+sund.no
+sunndal.no
+surgeonshall.museum
surgut.ru
+surnadal.no
+surrey.museum
+suwalki.pl
+sv.it
+svalbard.no
+sveio.no
+svelvik.no
+svizzera.museum
+sweden.museum
+swidnica.pl
+swiebodzin.pl
+swinoujscie.pl
sx.cn
+sydney.museum
+sykkylven.no
syzran.ru
szczecin.pl
+szczytno.pl
szex.hu
szkola.pl
+szm.com
+t.bg
t.se
+t3.to
+t35.com
+t35.net
+ta.it
takamatsu.jp
tambov.ru
+tana.no
+tananger.no
+tank.museum
+taranto.it
targi.pl
+tarnobrzeg.pl
tas.au
tatarstan.ru
+taxi.aero
+tcm.museum
+te.it
te.ua
tec.ve
+technology.museum
tel.no
tel.nr
tel.tr
telecom.na
+telekommunikation.museum
telememo.au
+television.museum
+teramo.it
+terni.it
ternopil.ua
test.ru
+texas.museum
+textile.museum
+tgory.pl
+th.tc
+theater.museum
+time.museum
+time.no
+timekeeping.museum
+tingvoll.no
+tinn.no
tirana.al
tj.cn
+tjeldsund.no
+tjome.no
tld.am
tlf.nr
tm.cy
tm.fr
tm.hu
+tm.km
tm.mc
tm.mg
tm.mt
+tm.no
tm.pl
tm.ro
tm.se
tm.za
tmp.br
+tn.it
tn.us
+to.it
tochigi.jp
+tokke.no
tokushima.jp
tokyo.jp
+tolga.no
tom.ru
tomsk.ru
+tonsberg.no
+topology.museum
+torino.it
+torino.museum
+torsken.no
torun.pl
tottori.jp
+touch.museum
tourism.pl
tourism.tn
+town.museum
toyama.jp
tozsde.hu
+tp.it
+tr.it
+tr.no
+trader.aero
+trading.aero
+trainer.aero
+trana.no
+tranby.no
+tranoy.no
+transport.museum
+trapani.it
travel.pl
travel.tt
trd.br
+tree.museum
+trentino.it
+trento.it
+treviso.it
+trieste.it
+tripod.com
+troandin.no
+trogstad.no
+trolley.museum
+tromsa.no
+tromso.no
+trondheim.no
+trust.museum
+trustee.museum
+trysil.no
+ts.it
tsaritsyn.ru
tsk.ru
tula.ru
tur.br
+tur.cu
+turek.pl
+turen.tn
+turin.it
turystyka.pl
tuva.ru
tv.bo
tv.br
+tv.it
+tv.na
tv.sd
+tvedestrand.no
tver.ru
tw.cn
tx.us
+tychy.pl
+tydal.no
+tynset.no
+tysfjord.no
+tysnes.no
+tysvar.no
+tysv�r.no
tyumen.ru
+u.bg
u.se
+ua.tc
+uba.ar
+ucoz.ru
+ud.it
+udine.it
udm.ru
udmurtia.ru
+uhren.museum
uk.com
uk.net
+uk.pn
+uk.tc
+uk.to
uk.tt
ulan-ude.ru
+ullensaker.no
+ullensvang.no
+ulm.museum
ulsan.kr
+ulvik.no
unam.na
unbi.ba
+unblog.fr
+undersea.museum
+union.aero
uniti.al
+university.museum
+unjarga.no
+unj�rga.no
+unlugar.com
unsa.ba
upt.al
uri.arpa
+url.st
urn.arpa
us.com
+us.ms
+us.na
+us.tc
us.tf
+us.to
us.tt
+usa.museum
+usantiques.museum
+usarts.museum
+uscountryestate.museum
+usculture.museum
+usdecorativearts.museum
+usenet.pl
+usgarden.museum
+ushistory.museum
+ushuaia.museum
+uslivinghistory.museum
+ustka.pl
ut.us
+utah.museum
utazas.hu
+utsira.no
utsunomiya.jp
uu.mt
+uvic.museum
uy.com
+uz.ua
uzhgorod.ua
+v.bg
+va.it
+va.no
va.us
+vaapste.no
+vadso.no
+vaga.no
+vagan.no
+vagsoy.no
+vaksdal.no
+valle.no
+valley.museum
+vang.no
+vantaa.museum
+vanylven.no
+vardo.no
+varese.it
+varggat.no
+varoy.no
vatican.va
+vb.it
+vc.it
vdonsk.ru
+ve.it
+vefsn.no
+vega.no
+vegarshei.no
+veg�rshei.no
+venezia.it
+venice.it
+vennesla.no
+verbania.it
+vercelli.it
+verdal.no
+verona.it
+verran.no
+versailles.museum
+vestby.no
+vestnes.no
+vestre-slidre.no
+vestre-toten.no
+vestvagoy.no
vet.br
veterinaire.fr
+veterinaire.km
+vevelstad.no
+vf.no
vgs.no
+vi.it
+vi.us
+vibo-valentia.it
+vibovalentia.it
vic.au
+vicenza.it
video.hu
+vik.no
+viking.museum
+vikna.no
+village.museum
+vindafjord.no
vinnica.ua
+virginia.museum
+virtual.museum
+virtuel.museum
+viterbo.it
+vlaanderen.museum
vladikavkaz.ru
vladimir.ru
vladivostok.ru
+vlog.br
vn.ua
+voagat.no
+volda.no
volgograd.ru
+volkenkunde.museum
vologda.ru
voronezh.ru
+voss.no
+vossevangen.no
+vr.it
vrn.ru
+vt.it
vt.us
+vv.it
vyatka.ru
+w.bg
w.se
wa.au
wa.us
wakayama.jp
+walbrzych.pl
+wales.museum
+wallonie.museum
+war.museum
+warmia.pl
warszawa.pl
+washingtondc.museum
+watch-and-clock.museum
+watchandclock.museum
waw.pl
+we.bs
weather.mobi
+web-soft.ru
web.co
web.do
web.id
web.lk
+web.nf
web.pk
web.tj
web.tr
web.ve
web.za
+webcindario.com
+webs.com
+weebly.com
+wegrow.pl
+western.museum
+westfalen.museum
+whaling.museum
+whsites.net
wi.us
+wielun.pl
+wiki.br
+wildlife.museum
+williamsburg.museum
+windmill.museum
+wlocl.pl
+wloclawek.pl
+wodzislaw.pl
+wolomin.pl
+wordpress.com
+workinggroup.aero
+works.aero
+workshop.museum
wroc.pl
wroclaw.pl
+ws.na
wv.us
www.ro
wy.us
+wz.cz
+x.bg
x.se
+xanga.com
+xf.cz
xj.cn
+xorg.pl
xz.cn
+y.bg
y.se
yakutia.ru
yamagata.jp
@@ -1795,15 +3779,31 @@ yekaterinburg.ru
yk.ca
yn.cn
yokohama.jp
+york.museum
+yorkshire.museum
+yosemite.museum
+youth.museum
yuzhno-sakhalinsk.ru
+z.bg
z.se
+z8.ru
za.com
+za.net
+za.org
za.pl
+zachpomor.pl
+zagan.pl
+zakopane.pl
zaporizhzhe.ua
+zarow.pl
zgora.pl
+zgorzelec.pl
zgrad.ru
zhitomir.ua
zj.cn
zlg.br
+zmail.ru
+zoological.museum
+zoology.museum
zp.ua
zt.ua
diff --git a/src/content/zoommanager.js b/src/content/zoommanager.js
index ed2365c..055b82e 100644
--- a/src/content/zoommanager.js
+++ b/src/content/zoommanager.js
@@ -57,6 +57,8 @@ ZoomManager.enlarge = NoSquint.cmd.enlargePrimary;
ZoomManager.reduce = NoSquint.cmd.reducePrimary;
ZoomManager.reset = NoSquint.cmd.reset;
+/*
FullZoom.enlarge = NoSquint.cmd.enlargeFullZoom;
FullZoom.reduce = NoSquint.cmd.reduceFullZoom;
FullZoom.reset = NoSquint.cmd.reset;
+*/
diff --git a/src/defaults/preferences/nosquint.js b/src/defaults/preferences/nosquint.js
index a67cf00..e0e6dc3 100644
--- a/src/defaults/preferences/nosquint.js
+++ b/src/defaults/preferences/nosquint.js
@@ -5,7 +5,7 @@ pref("extensions.nosquint.rememberSites", true);
pref("extensions.nosquint.sites", "");
pref("extensions.nosquint.sitesSaveDelay", 5000);
pref("extensions.nosquint.exceptions", "*/~* *.sourceforge.net *.google.[*]");
-pref("extensions.nosquint.zoomImages", true);
+pref("extensions.nosquint.zoomImages", false);
pref("extensions.nosquint.wheelZoomEnabled", true);
pref("extensions.nosquint.wheelZoomInvert", false);
pref("extensions.nosquint.hideStatus", false);
@@ -18,5 +18,6 @@ pref("extensions.nosquint.colorBackgroundImages", false);
pref("extensions.nosquint.linksUnvisited", '0');
pref("extensions.nosquint.linksVisited", '0');
pref("extensions.nosquint.linksUnderline", false);
+pref("extensions.nosquint.version", '0');
pref("privacy.cpd.extensions-nosquint", true);
pref("privacy.item.extensions-nosquint", true);
diff --git a/src/icon.png b/src/icon.png
new file mode 100644
index 0000000..2d7c782
Binary files /dev/null and b/src/icon.png differ
diff --git a/src/icon64.png b/src/icon64.png
new file mode 100644
index 0000000..4d8bb30
Binary files /dev/null and b/src/icon64.png differ
diff --git a/src/install.rdf b/src/install.rdf
index d156ee1..4bb2d96 100644
--- a/src/install.rdf
+++ b/src/install.rdf
@@ -6,21 +6,20 @@
<em:id>nosquint at urandom.ca</em:id>
<em:name>NoSquint</em:name>
- <em:version>2.0</em:version>
+ <em:version>2.1b1</em:version>
<em:description>Manage site-specific zoom levels and color settings</em:description>
<em:creator>Jason Tackaberry</em:creator>
<!-- optional items -->
<em:homepageURL>http://urandom.ca/nosquint/</em:homepageURL>
<em:optionsURL>chrome://nosquint/content/dlg-global.xul</em:optionsURL>
- <em:iconURL>chrome://nosquint/skin/logo-32.png</em:iconURL>
<em:type>2</em:type> <!-- type=extension -->
<!-- Firefox -->
<em:targetApplication>
<Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
- <em:minVersion>3.0b4pre</em:minVersion>
- <em:maxVersion>3.7a1pre</em:maxVersion>
+ <em:minVersion>3.0</em:minVersion>
+ <em:maxVersion>4.0b9pre</em:maxVersion>
</Description>
</em:targetApplication>
</Description>
diff --git a/src/skin/box-grunge.png b/src/skin/box-grunge.png
new file mode 100644
index 0000000..db51638
Binary files /dev/null and b/src/skin/box-grunge.png differ
diff --git a/src/skin/icon96.png b/src/skin/icon96.png
new file mode 100644
index 0000000..6af7bf0
Binary files /dev/null and b/src/skin/icon96.png differ
diff --git a/src/skin/statusbar-shot.jpg b/src/skin/statusbar-shot.jpg
new file mode 100644
index 0000000..d5af667
Binary files /dev/null and b/src/skin/statusbar-shot.jpg differ
diff --git a/src/skin/toolbar-shot.jpg b/src/skin/toolbar-shot.jpg
new file mode 100644
index 0000000..d4ba9b1
Binary files /dev/null and b/src/skin/toolbar-shot.jpg differ
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/nosquint.git
More information about the Pkg-mozext-commits
mailing list