Merge pull request #438 from saneyuki/utils

Clean up TreeStyleTabBase
This commit is contained in:
YUKI "Piro" Hiroshi 2013-01-03 22:13:06 -08:00
commit bf63b375f6
4 changed files with 37 additions and 229 deletions

View File

@ -39,22 +39,21 @@ const Cc = Components.classes;
const Ci = Components.interfaces;
Components.utils.import('resource://gre/modules/XPCOMUtils.jsm');
XPCOMUtils.defineLazyModuleGetter(this, 'Services', 'resource://gre/modules/Services.jsm');
Components.utils.import('resource://gre/modules/Services.jsm');
Components.utils.import('resource://treestyletab-modules/lib/prefs.js');
Components.utils.import('resource://treestyletab-modules/lib/namespace.jsm');
var window = getNamespaceFor('piro.sakura.ne.jp');
XPCOMUtils.defineLazyModuleGetter(this, 'Deferred', 'resource://treestyletab-modules/lib/jsdeferred.js');
XPCOMUtils.defineLazyGetter(this, 'window', function() {
Cu.import('resource://treestyletab-modules/lib/namespace.jsm');
return getNamespaceFor('piro.sakura.ne.jp');
});
XPCOMUtils.defineLazyGetter(this, 'prefs', function() {
Cu.import('resource://treestyletab-modules/lib/prefs.js');
return window['piro.sakura.ne.jp'].prefs;
});
XPCOMUtils.defineLazyGetter(this, 'jstimer', function() {
var jstimer = {};
Components.utils.import('resource://treestyletab-modules/lib/jstimer.jsm', jstimer);
return jstimer;
});
XPCOMUtils.defineLazyGetter(this, 'boxObject', function() {
Components.utils.import('resource://treestyletab-modules/lib/boxObject.js', {});
return window['piro.sakura.ne.jp'].boxObject;
});
XPCOMUtils.defineLazyGetter(this, 'extensions', function() {
Components.utils.import('resource://treestyletab-modules/lib/extensions.js', {});
return window['piro.sakura.ne.jp'].extensions;
@ -69,9 +68,16 @@ XPCOMUtils.defineLazyGetter(this, 'autoScroll', function() {
});
XPCOMUtils.defineLazyModuleGetter(this, 'UninstallationListener',
'resource://treestyletab-modules/lib/UninstallationListener.js');
XPCOMUtils.defineLazyModuleGetter(this, 'Deferred',
'resource://treestyletab-modules/lib/jsdeferred.js');
XPCOMUtils.defineLazyModuleGetter(this, 'confirmWithPopup', 'resource://treestyletab-modules/lib/confirmWithPopup.js');
XPCOMUtils.defineLazyModuleGetter(this, 'utils', 'resource://treestyletab-modules/utils.js', 'TreeStyleTabUtils');
if (Services.appinfo.OS === 'WINNT') {
XPCOMUtils.defineLazyModuleGetter(this, 'AeroPeek',
'resource://gre/modules/WindowsPreviewPerTab.jsm', 'AeroPeek');
}
var TreeStyleTabBase = {
__proto__ : window['piro.sakura.ne.jp'].prefs,
@ -290,6 +296,7 @@ var TreeStyleTabBase = {
get animationManager() { return animationManager; },
get autoScroll() { return autoScroll; },
get Deferred() { return Deferred; },
get AeroPeek() { return AeroPeek; }, // for Windows
init : function utils_init()
{
@ -321,14 +328,6 @@ var TreeStyleTabBase = {
this.onPrefChange('extensions.treestyletab.counter.role.horizontal');
this.onPrefChange('extensions.treestyletab.counter.role.vertical');
try {
if (Services.appinfo.OS == 'WINNT')
this.updateAeroPeek();
}
catch(e) {
dump(e+'\n');
}
try {
this.overrideExtensions();
}
@ -511,13 +510,6 @@ var TreeStyleTabBase = {
});
},
updateAeroPeek : function utils_updateAeroPeek()
{
var ns = {};
Components.utils.import('resource://gre/modules/WindowsPreviewPerTab.jsm', ns);
this.AeroPeek = ns.AeroPeek;
},
overrideExtensions : function utils_overrideExtensions()
{
// Scriptish
@ -612,22 +604,6 @@ var TreeStyleTabBase = {
/* utilities */
getBoxObjectFor : function utils_getBoxObjectFor(aNode)
{
return boxObject.getBoxObjectFor(aNode);
},
evalInSandbox : function utils_evalInSandbox(aCode, aOwner)
{
try {
var sandbox = new Components.utils.Sandbox(aOwner || 'about:blank');
return Components.utils.evalInSandbox(aCode, sandbox);
}
catch(e) {
}
return void(0);
},
get browserWindow()
{
return this.topBrowserWindow;

View File

@ -3959,7 +3959,7 @@ TreeStyleTabBrowser.prototype = {
return;
var indexes = [];
var items = this.evalInSandbox('('+this.SessionStore.getClosedTabData(this.window)+')');
var items = utils.evalInSandbox('('+this.SessionStore.getClosedTabData(this.window)+')');
for (let i = 0, maxi = items.length; i < maxi; i++)
{
let item = items[i];

View File

@ -1,180 +0,0 @@
/*
"getBoxObjectFor()" compatibility library for Firefox 3.6 or later
Usage:
// use instead of HTMLDocument.getBoxObjectFor(HTMLElement)
var boxObject = window['piro.sakura.ne.jp']
.boxObject
.getBoxObjectFor(HTMLElement);
license: The MIT License, Copyright (c) 2009-2010 YUKI "Piro" Hiroshi
http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/license.txt
original:
http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/boxObject.js
http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/boxObject.test.js
http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/fixtures/box.html
*/
/* To work as a JS Code Module */
if (typeof window == 'undefined' ||
(window && typeof window.constructor == 'function')) {
this.EXPORTED_SYMBOLS = ['boxObject'];
// If namespace.jsm is available, export symbols to the shared namespace.
// See: http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/namespace.jsm
try {
let ns = {};
Components.utils.import('resource://treestyletab-modules/lib/namespace.jsm', ns);
/* var */ window = ns.getNamespaceFor('piro.sakura.ne.jp');
}
catch(e) {
window = {};
}
}
(function() {
const currentRevision = 6;
if (!('piro.sakura.ne.jp' in window)) window['piro.sakura.ne.jp'] = {};
var loadedRevision = 'boxObject' in window['piro.sakura.ne.jp'] ?
window['piro.sakura.ne.jp'].boxObject.revision :
0 ;
if (loadedRevision && loadedRevision > currentRevision) {
return;
}
var Cc = Components.classes;
var Ci = Components.interfaces;
window['piro.sakura.ne.jp'].boxObject = {
revision : currentRevision,
getBoxObjectFor : function(aNode, aUnify)
{
return ('getBoxObjectFor' in aNode.ownerDocument) ?
this.getBoxObjectFromBoxObjectFor(aNode, aUnify) :
this.getBoxObjectFromClientRectFor(aNode, aUnify) ;
},
getBoxObjectFromBoxObjectFor : function(aNode, aUnify)
{
var boxObject = aNode.ownerDocument.getBoxObjectFor(aNode);
var box = {
x : boxObject.x,
y : boxObject.y,
width : boxObject.width,
height : boxObject.height,
screenX : boxObject.screenX,
screenY : boxObject.screenY,
element : aNode
};
if (!aUnify) return box;
var style = this._getComputedStyle(aNode);
box.left = box.x - this._getPropertyPixelValue(style, 'border-left-width');
box.top = box.y - this._getPropertyPixelValue(style, 'border-top-width');
if (style.getPropertyValue('position') == 'fixed') {
box.left -= frame.scrollX;
box.top -= frame.scrollY;
}
box.right = box.left + box.width;
box.bottom = box.top + box.height;
return box;
},
getBoxObjectFromClientRectFor : function(aNode, aUnify)
{
var box = {
x : 0,
y : 0,
width : 0,
height : 0,
screenX : 0,
screenY : 0,
element : aNode
};
try {
var zoom = this.getZoom(aNode.ownerDocument.defaultView);
var rect = aNode.getBoundingClientRect();
if (aUnify) {
box.left = rect.left;
box.top = rect.top;
box.right = rect.right;
box.bottom = rect.bottom;
}
var style = this._getComputedStyle(aNode);
var frame = aNode.ownerDocument.defaultView;
// "x" and "y" are offset positions of the "padding-box" from the document top-left edge.
box.x = rect.left + this._getPropertyPixelValue(style, 'border-left-width');
box.y = rect.top + this._getPropertyPixelValue(style, 'border-top-width');
if (style.getPropertyValue('position') != 'fixed') {
box.x += frame.scrollX;
box.y += frame.scrollY;
}
// "width" and "height" are sizes of the "border-box".
box.width = rect.right - rect.left;
box.height = rect.bottom - rect.top;
box.screenX = rect.left * zoom;
box.screenY = rect.top * zoom;
box.screenX += frame.mozInnerScreenX * zoom;
box.screenY += frame.mozInnerScreenY * zoom;
}
catch(e) {
}
'x,y,screenX,screenY,width,height,left,top,right,bottom'
.split(',')
.forEach(function(aProperty) {
if (aProperty in box)
box[aProperty] = Math.round(box[aProperty]);
});
return box;
},
_getComputedStyle : function(aNode)
{
return aNode.ownerDocument.defaultView.getComputedStyle(aNode, null);
},
_getPropertyPixelValue : function(aStyle, aProperty)
{
return parseInt(aStyle.getPropertyValue(aProperty).replace('px', ''));
},
Prefs : Cc['@mozilla.org/preferences;1']
.getService(Ci.nsIPrefBranch)
.QueryInterface(Ci.nsIPrefBranch2),
getZoom : function(aFrame)
{
try {
if (!this.Prefs.getBoolPref('browser.zoom.full'))
return 1;
}
catch(e) {
return 1;
}
var markupDocumentViewer = aFrame.top
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShell)
.contentViewer
.QueryInterface(Ci.nsIMarkupDocumentViewer);
return markupDocumentViewer.fullZoom;
}
};
})();
if (window != this) { // work as a JS Code Module
this.boxObject = window['piro.sakura.ne.jp'].boxObject;
}

View File

@ -39,21 +39,22 @@ let EXPORTED_SYMBOLS = ['TreeStyleTabUtils'];
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
Components.utils.import('resource://gre/modules/XPCOMUtils.jsm');
Cu.import('resource://gre/modules/XPCOMUtils.jsm');
XPCOMUtils.defineLazyGetter(this, 'window', function() {
Components.utils.import('resource://treestyletab-modules/lib/namespace.jsm');
Cu.import('resource://treestyletab-modules/lib/namespace.jsm');
return getNamespaceFor('piro.sakura.ne.jp');
});
XPCOMUtils.defineLazyGetter(this, 'prefs', function() {
Components.utils.import('resource://treestyletab-modules/lib/prefs.js');
Cu.import('resource://treestyletab-modules/lib/prefs.js');
return window['piro.sakura.ne.jp'].prefs;
});
XPCOMUtils.defineLazyGetter(this, 'stringBundle', function() {
Components.utils.import('resource://treestyletab-modules/lib/stringBundle.js', {});
Cu.import('resource://treestyletab-modules/lib/stringBundle.js', {});
return window['piro.sakura.ne.jp'].stringBundle;
});
@ -89,6 +90,17 @@ let TreeStyleTabUtils = {
},
get tabbrowserBundle () {
return stringBundle.get('chrome://browser/locale/tabbrowser.properties');
},
evalInSandbox : function utils_evalInSandbox(aCode, aOwner)
{
try {
var sandbox = new Cu.Sandbox(aOwner || 'about:blank');
return Cu.evalInSandbox(aCode, sandbox);
}
catch(e) {
}
return void(0);
}
};