⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gladder.js

📁 南开火狐
💻 JS
📖 第 1 页 / 共 3 页
字号:
	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 + -