📄 gladder.js
字号:
if (this.NAME_ADA_CUSTOM == this._pref.getCharPref(this._namePrefDefaultAdapterName) && this._defaultAda && !this._defaultAda._s){
this.testAda(this._defaultAda._name, this._defaultAda.processUrl("http://www.yahoo.com"));
}
};
Gladder.prototype.testAda = function (name, url) {
try {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", url, true);
xmlhttp.onreadystatechange = function () {
try{
var ada = null;
if (name == gGladder.NAME_ADA_CUSTOM){
if (name == gGladder._pref.getCharPref(gGladder._namePrefDefaultAdapterName)){
ada = gGladder._defaultAda;
}
}
else{
ada = gGladder.searchAda(name);
}
if (ada){
try {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200 && xmlhttp.responseText.indexOf("Yahoo!") != -1) {
ada._s = Math.round(((new Date())-startTest)/1000);
ada._speed = ada._s>30?"slow":"fast";
ada._msg = gGladder.getString("tooltip.proxy.speed.1")+" "+ada._s+" "+gGladder.getString("tooltip.proxy.speed.2");
} else {
ada._e += 1;
ada._s = 9999999;
ada._msg = gGladder.getString("tooltip.proxy.error.content");
ada._speed = "error";
}
}
}
catch (e) {
ada._e += 1;
ada._msg = gGladder.getString("tooltip.proxy.error.network");
ada._speed = "error";
}
}
}catch(e){}
};
xmlhttp.setRequestHeader("Cache-Control", "no-cache");
xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 29 Oct 1994 19:43:31 GMT");
var startTest = new Date();
xmlhttp.send(null);
}
catch (e) {}
};
Gladder.prototype.loadAdapters = function (str) {
var adas = str.split("\n\n");
this._adapters = new Array;
var adaList = new Array;
for (var i = 0; i < adas.length; i += 1) {
if (adas[i].length > 0) {
var ada = new gl_adapter(adas[i]);
if (!ada._err) {
if (ada._default){
for (var j=0; j<this._defaultAdaList.length;j++){
if (this._defaultAdaList[j]._name == ada._name){
if (this._defaultAdaList[j]._str != ada._str){
this._defaultAdaList[j].init(ada._str);
this._defaultAdaList[j]._s = undefined;
}
ada = this._defaultAdaList[j];
break;
}
}
adaList.push(ada);
}
else{
this._adapters.push(ada);
}
}
}
}
this._defaultAdaList = adaList;
if (!this._initTesting){
this.testAdapters();
this._initTesting = true;
}
var adaName = this._pref.getCharPref(this._namePrefDefaultAdapterName);
if (this.NAME_ADA_CUSTOM == adaName){
var url = this._pref.getCharPref(this._namePrefProxyUrl);
if (url.length > 0){
this._defaultAda = new gl_adapter("#"+this._pref.getCharPref(this._namePrefProxyType)+"\n"+">="+url+"\n"+this.NAME_ADA_CUSTOM);
if (!this._defaultAda._err){
this.testAda(this._defaultAda._name, this._defaultAda.processUrl("http://www.yahoo.com"));
return;
}
}
}
if (this._defaultAdaList.length > 0){
this._defaultAda = this.findAda(adaName);
this._pref.setCharPref(this._namePrefDefaultAdapterName, this._defaultAda._name);
}
};
Gladder.prototype.getOriginalUrl = function(_url){
if (this._usePHProxy){
return this._PHProxyManager.unproxy(_url);
}
var ada = null;
var onProxy = false;
var url = _url;
var site = gl_parseSite(_url);
for (var i=-1; i< this._defaultAdaList.length; i++){
ada = (i==-1?this._defaultAda:this._defaultAdaList[i]);
if (ada == null){
continue;
}
var dst = ada._dst;
if (_url.indexOf(dst) == 0){
url = _url.substr(dst.length);
onProxy = true;
break;
}
else if (site == gl_parseSite(dst)){
if (dst.indexOf('&') != -1){
var lastPara = ada._dst.replace(/.*\&([^\=]+)\=$/, "$1");
var re = new RegExp(".*[\?\&]"+lastPara+"\=([^\&]+).*");
if (re.test(_url)){
url = _url.replace(re, "$1");
onProxy = true;
break;
}
}
}
}
if (onProxy){
switch(ada._type){
case 13:
return gl_str_rot13_back(decodeURIComponent(url));
case 64:
return gl_base64_decode(url);
default:
return url;
}
}
return url;
};
Gladder.prototype.getCurrentSite = function(){
return gl_parseSite(this.getOriginalUrl(this.getCurrentUrl()));
};
Gladder.prototype.isSite = function(site){
if (typeof(site) == "undefined"){
site = this.getCurrentSite();
}
if (typeof(site) == "undefined" || site == null || site.length == 0){
return [false, site];
}
if (this._defaultAda !== null && site == gl_parseSite(this._defaultAda._dst)){
return [false ,site];
}
for(var i=0; i<this._sites.length; i++){
if (new RegExp("^([\\w-]*\\.)*"+this._sites[i].replace(/\./g, "\\.").replace(/\*/g, ".*").replace(/\?/g, ".")+"$", "i").test(site)){
return [true, this._sites[i]];
}
}
return [false, site];
};
Gladder.prototype.registerSite = function(site){
if (typeof(site) == "undefined"){
site = this.getCurrentSite().replace(/^www\./i, '');
}
if (site === null || site.length == 0){
return;
}
if (this._defaultAda !== null && site == gl_parseSite(this._defaultAda._dst)){
return;
}
for(var i=0; i<this._sites.length; i++){
if (this._sites[i] == site){
//already exist, remove
this._sites.splice(i, 1);
this.saveSite();
var url = this.getCurrentUrl();
var ourl = this.getOriginalUrl(url);
//if on a proxy, get back
if (ourl != url){
content.location.replace(ourl);
}
return;
}
}
//not exist, add
this._sites.push(site);
this.saveSite();
content.location.replace(this.filterUrl(this.getCurrentUrl()));
// this.check(this.getCurrentUrl(), content);
};
Gladder.prototype.saveSite = function(){
this._pref.setCharPref(this._namePrefSites, this._sites.join("\n"));
this.notify();
};
Gladder.prototype.loadSites = function (str) {
this._sites = gl_trim(str.replace(/\n\n+/g, '\n')).split('\n');
};
Gladder.prototype.setProxy = function(name){
this._pref.setCharPref(this._namePrefDefaultAdapterName, name);
this.notify();
};
Gladder.prototype.isOnProxy = function(url){
if (typeof(url) == "undefined"){
url = this.getCurrentUrl();
}
return url != this.getOriginalUrl(url);
};
Gladder.prototype.contextMenuPopup = function(event){
if (!gContextMenu)
return;
document.getElementById('gladder-copyoriginalurl').hidden = true;
if (gContextMenu.onLink){
var link = gContextMenu.link.toString();
var olink = gGladder.getOriginalUrl(link);
if (olink != link){
document.getElementById('gladder-copyoriginalurl').hidden = false;
document.getElementById('gladder-copyoriginalurl').setAttribute('tooltiptext', olink);
}
}
};
Gladder.prototype.popupProxyMenu= function (menu) {
while(menu.firstChild.nextSibling){
menu.removeChild(menu.firstChild);
}
var cus = menu.firstChild;
cus.setAttribute('checked', true);
cus.setAttribute('hidden', this._pref.getCharPref(this._namePrefProxyUrl).length == 0);
if (this.NAME_ADA_CUSTOM == this._pref.getCharPref(this._namePrefDefaultAdapterName)){
cus.setAttribute("speed", this._defaultAda._speed?this._defaultAda._speed:"unknown");
cus.setAttribute("tooltiptext", this._defaultAda._msg?this._defaultAda._msg:this.getString("tooltip.proxy.testing"));
}
else{
cus.setAttribute("speed","unknown");
cus.removeAttribute("tooltiptext");
}
for(var i=0; i<this._defaultAdaList.length; i++){
var name = this._defaultAdaList[i]._name;
var item = document.createElement('menuitem');
item.setAttribute("speed", this._defaultAdaList[i]._speed?this._defaultAdaList[i]._speed:"unknown");
item.setAttribute("tooltiptext", this._defaultAdaList[i]._msg?this._defaultAdaList[i]._msg:this.getString("tooltip.proxy.testing"));
item.setAttribute("label", name);
item.setAttribute("value", name);
item.setAttribute("class", "gl-menuitem");
item.setAttribute("oncommand", "gGladder.setProxy(this.value);")
if (this._defaultAda._name == name){
item.setAttribute('type', 'checkbox');
item.setAttribute('checked', true);
cus.setAttribute('checked', false);
}
menu.insertBefore(item, cus);
}
return true;
};
Gladder.prototype.popupMenu= function (menu) {
var elements = {};
var menuProxies = document.getElementById('gl-status-proxies');
menuProxies.setAttribute('hidden', this._defaultAdaList.length == 0);
var list = menu.getElementsByTagName("menuitem");
for (var i = 0; i < list.length; i++){
elements[list[i].id] = list[i];
}
var url = this.getCurrentUrl();
var ourl = this.getOriginalUrl(url);
var site = gl_parseSite(url).replace(/^www\./i, '');
var osite = gl_parseSite(ourl).replace(/^www\./i, '');
elements['gl-status-unproxythis'].setAttribute('hidden', true);
elements['gl-status-proxythis'].setAttribute('hidden', true);
elements['gl-status-copyoriginalurl'].setAttribute('hidden', ourl == url);
elements['gl-status-recoverlinks'].setAttribute('hidden', ourl == url);
if (this._usePHProxy && this._PHProxyManager.ready){
elements['gl-status-removecurrent'].setAttribute('hidden', false);
elements['gl-status-removecurrent'].setAttribute('tooltiptext', this.getString(this._nameStringTooltipCurrent)+": "+this._PHProxyManager.getCurrentProxy().domain);
}
else{
elements['gl-status-removecurrent'].setAttribute('hidden', true);
}
document.getElementById('gl-status-proxies').setAttribute('hidden', this._usePHProxy);
elements['gl-status-copyoriginalurl'].setAttribute('tooltiptext', ourl);
elements['gl-status-site'].setAttribute('hidden', true);
if (osite.length > 0){
elements['gl-status-site'].setAttribute('checked', this.isSite(osite)[0]);
elements['gl-status-site'].setAttribute('value', osite);
elements['gl-status-site'].setAttribute('label', osite);
elements['gl-status-site'].setAttribute('hidden', false);
elements['gl-status-proxythis'].setAttribute('hidden', (site != osite) || (this._usePHProxy && !this._PHProxyManager.ready));
elements['gl-status-unproxythis'].setAttribute('hidden', site == osite);
}
elements['gl-status-enable'].setAttribute('checked', this._enabled);
elements['gl-status-unproxy'].setAttribute('checked', this._unproxy);
elements['gl-status-workwithnetworkproxy'].setAttribute('checked', this._workWithNetworkProxy);
elements['gl-status-usephproxy'].setAttribute('checked', this._usePHProxy);
return true;
};
Gladder.prototype.copyOriginalUrl = function(){
var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper );
if (gContextMenu){
clipboard.copyString(this.getOriginalUrl(gContextMenu.onLink?gContextMenu.link.toString():this.getCurrentUrl()));
}
else{
clipboard.copyString(this.getOriginalUrl(this.getCurrentUrl()));
}
};
Gladder.prototype.clickStatus = function (e) {
if (e.button == 0) {
if (this.usingNetworkProxy()){
this.enable(true);
this.workWithNetworkProxy();
}
else{
this.enable();
}
} else {
if (e.button == 1) {
var url = this.getCurrentUrl();
var ourl = this.getOriginalUrl(url);
if (this.redirect(ourl,null)){
if (ourl != url){
this.unproxyThis();
}
}
else{
this.registerSite();
}
// this.proxyThis();
}
}
};
Gladder.prototype.updateStatus = function(){
var img = document.getElementById(this._nameStatusImg);
if (!img) return;
if (this._usePHProxy && !this._PHProxyManager.ready){
img.src = "chrome://gladder/skin/gladderG.png";
img.setAttribute("tooltiptext", this._online?this.getString(this._nameStringStatusFindingPHProxy):this.getString(this._nameStringStatusNetworkOffline));
}
else if (this.usingNetworkProxy() && !this._workWithNetworkProxy){
img.src = "chrome://gladder/skin/gladderG.png";
img.setAttribute("tooltiptext", this.getString(this._nameStringStatusDisabledByProxy));
}
else if (this._enabled){
img.src = "chrome://gladder/skin/gladder.png";
img.setAttribute("tooltiptext", this.getString(this._nameStringStatusEnable));
}
else {
img.src = "chrome://gladder/skin/gladderD.png";
img.setAttribute("tooltiptext", this.getString(this._nameStringStatusDisable));
}
};
Gladder.prototype.enable = function(enabled){
if (typeof(enabled) == "undefined"){
this._enabled = !this._enabled;
}
else{
this._enabled = enabled;
}
if (this._enabled){
var url = this.getCurrentUrl();
var ourl = this.getOriginalUrl(url);
//if on a proxy, get back
if (ourl != url){
content.location.replace(ourl);
}
// this.check(this.getCurrentUrl(), content);
}
this._pref.setBoolPref(this._namePrefEnabled, this._enabled);
this.updateStatus();
this.notify();
};
Gladder.prototype.workWithNetworkProxy = function(){
this._workWithNetworkProxy = !this._workWithNetworkProxy;
this._pref.setBoolPref(this._namePrefWorkWithNetworkProxy, this._workWithNetworkProxy);
this.updateStatus();
this.notify();
};
Gladder.prototype.usePHProxy = function(){
this._usePHProxy = !this._usePHProxy;
this._pref.setBoolPref(this._namePrefUsePHProxy, this._usePHProxy);
this.updateStatus();
this.notify();
};
Gladder.prototype.unproxy = function(){
this._unproxy = !this._unproxy;
this._pref.setBoolPref(this._namePrefUnproxy, this._unproxy);
this.notify();
};
Gladder.prototype.removeCurrent = function(){
this._PHProxyManager.removeCurrentOne();
var u = this.getCurrentUrl();
if (this.isOnProxy()){
var _u = this._PHProxyManager.proxy(this._PHProxyManager.unproxy(u));
if (_u != u){
content.location.replace(_u);
}
}
};
Gladder.prototype.openOptions= function(){
var dlg = windowMediator.getMostRecentWindow("gladder:settings");
if (dlg){
dlg.focus();
}
else{
var browser = windowMediator.getMostRecentWindow("navigator:browser");
browser.openDialog("chrome://gladder/content/options.xul", "_blank", "chrome,centerscreen");
}
};
Gladder.prototype.openPage = function(pageUrl){
var windowService = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator);
var currentWindow = windowService.getMostRecentWindow("navigator:browser");
if (currentWindow) {
try {
currentWindow.delayedOpenTab(pageUrl);
} catch(e) { currentWindow.loadURI(pageUrl); }
}
else
window.open(pageUrl);
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -